dont keep track of gc_usage, just figure it out at gss_inquire_cred() time
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20626 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -36,7 +36,6 @@ struct _gss_mechanism_cred {
|
|||||||
SLIST_HEAD(_gss_mechanism_cred_list, _gss_mechanism_cred);
|
SLIST_HEAD(_gss_mechanism_cred_list, _gss_mechanism_cred);
|
||||||
|
|
||||||
struct _gss_cred {
|
struct _gss_cred {
|
||||||
gss_cred_usage_t gc_usage;
|
|
||||||
struct _gss_mechanism_cred_list gc_mc;
|
struct _gss_mechanism_cred_list gc_mc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -272,8 +272,6 @@ OM_uint32 gss_accept_sec_context(OM_uint32 *minor_status,
|
|||||||
*minor_status = ENOMEM;
|
*minor_status = ENOMEM;
|
||||||
return (GSS_S_FAILURE);
|
return (GSS_S_FAILURE);
|
||||||
}
|
}
|
||||||
m->gm_inquire_cred(minor_status, delegated_mc,
|
|
||||||
0, 0, &dcred->gc_usage, 0);
|
|
||||||
dmc->gmc_mech = m;
|
dmc->gmc_mech = m;
|
||||||
dmc->gmc_mech_oid = &m->gm_mech_oid;
|
dmc->gmc_mech_oid = &m->gm_mech_oid;
|
||||||
dmc->gmc_cred = delegated_mc;
|
dmc->gmc_cred = delegated_mc;
|
||||||
|
@@ -91,7 +91,6 @@ gss_acquire_cred(OM_uint32 *minor_status,
|
|||||||
*minor_status = ENOMEM;
|
*minor_status = ENOMEM;
|
||||||
return (GSS_S_FAILURE);
|
return (GSS_S_FAILURE);
|
||||||
}
|
}
|
||||||
cred->gc_usage = cred_usage;
|
|
||||||
SLIST_INIT(&cred->gc_mc);
|
SLIST_INIT(&cred->gc_mc);
|
||||||
|
|
||||||
if (mechs == GSS_C_NO_OID_SET)
|
if (mechs == GSS_C_NO_OID_SET)
|
||||||
|
@@ -107,7 +107,6 @@ gss_add_cred(OM_uint32 *minor_status,
|
|||||||
*minor_status = ENOMEM;
|
*minor_status = ENOMEM;
|
||||||
return (GSS_S_FAILURE);
|
return (GSS_S_FAILURE);
|
||||||
}
|
}
|
||||||
new_cred->gc_usage = cred_usage;
|
|
||||||
SLIST_INIT(&new_cred->gc_mc);
|
SLIST_INIT(&new_cred->gc_mc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -29,6 +29,20 @@
|
|||||||
#include "mech_locl.h"
|
#include "mech_locl.h"
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
|
#define AUSAGE 1
|
||||||
|
#define IUSAGE 2
|
||||||
|
|
||||||
|
static void
|
||||||
|
updateusage(gss_cred_usage_t usage, int *usagemask)
|
||||||
|
{
|
||||||
|
if (usage == GSS_C_BOTH)
|
||||||
|
*usagemask |= AUSAGE | IUSAGE;
|
||||||
|
else if (usage == GSS_C_ACCEPT)
|
||||||
|
*usagemask |= AUSAGE;
|
||||||
|
else if (usage == GSS_C_INITIATE)
|
||||||
|
*usagemask |= IUSAGE;
|
||||||
|
}
|
||||||
|
|
||||||
OM_uint32
|
OM_uint32
|
||||||
gss_inquire_cred(OM_uint32 *minor_status,
|
gss_inquire_cred(OM_uint32 *minor_status,
|
||||||
const gss_cred_id_t cred_handle,
|
const gss_cred_id_t cred_handle,
|
||||||
@@ -44,6 +58,8 @@ gss_inquire_cred(OM_uint32 *minor_status,
|
|||||||
struct _gss_mechanism_name *mn;
|
struct _gss_mechanism_name *mn;
|
||||||
OM_uint32 min_lifetime;
|
OM_uint32 min_lifetime;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
|
int usagemask = 0;
|
||||||
|
gss_cred_usage_t usage;
|
||||||
|
|
||||||
_gss_load_mech();
|
_gss_load_mech();
|
||||||
|
|
||||||
@@ -86,10 +102,11 @@ gss_inquire_cred(OM_uint32 *minor_status,
|
|||||||
OM_uint32 mc_lifetime;
|
OM_uint32 mc_lifetime;
|
||||||
|
|
||||||
major_status = mc->gmc_mech->gm_inquire_cred(minor_status,
|
major_status = mc->gmc_mech->gm_inquire_cred(minor_status,
|
||||||
mc->gmc_cred, &mc_name, &mc_lifetime, NULL, NULL);
|
mc->gmc_cred, &mc_name, &mc_lifetime, &usage, NULL);
|
||||||
if (major_status)
|
if (major_status)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
updateusage(usage, &usagemask);
|
||||||
if (name) {
|
if (name) {
|
||||||
mn = malloc(sizeof(struct _gss_mechanism_name));
|
mn = malloc(sizeof(struct _gss_mechanism_name));
|
||||||
if (!mn) {
|
if (!mn) {
|
||||||
@@ -121,10 +138,11 @@ gss_inquire_cred(OM_uint32 *minor_status,
|
|||||||
|
|
||||||
major_status = m->gm_mech.gm_inquire_cred(minor_status,
|
major_status = m->gm_mech.gm_inquire_cred(minor_status,
|
||||||
GSS_C_NO_CREDENTIAL, &mc_name, &mc_lifetime,
|
GSS_C_NO_CREDENTIAL, &mc_name, &mc_lifetime,
|
||||||
cred_usage, NULL);
|
&usage, NULL);
|
||||||
if (major_status)
|
if (major_status)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
updateusage(usage, &usagemask);
|
||||||
if (name && mc_name) {
|
if (name && mc_name) {
|
||||||
mn = malloc(
|
mn = malloc(
|
||||||
sizeof(struct _gss_mechanism_name));
|
sizeof(struct _gss_mechanism_name));
|
||||||
@@ -166,7 +184,13 @@ gss_inquire_cred(OM_uint32 *minor_status,
|
|||||||
*name_ret = (gss_name_t) name;
|
*name_ret = (gss_name_t) name;
|
||||||
if (lifetime)
|
if (lifetime)
|
||||||
*lifetime = min_lifetime;
|
*lifetime = min_lifetime;
|
||||||
if (cred && cred_usage)
|
if (cred_usage) {
|
||||||
*cred_usage = cred->gc_usage;
|
if ((usagemask & (AUSAGE|IUSAGE)) == (AUSAGE|IUSAGE))
|
||||||
|
*cred_usage = GSS_C_BOTH;
|
||||||
|
else if (usagemask & IUSAGE)
|
||||||
|
*cred_usage = GSS_C_INITIATE;
|
||||||
|
else if (usagemask & AUSAGE)
|
||||||
|
*cred_usage = GSS_C_ACCEPT;
|
||||||
|
}
|
||||||
return (GSS_S_COMPLETE);
|
return (GSS_S_COMPLETE);
|
||||||
}
|
}
|
||||||
|
@@ -55,7 +55,6 @@ gss_set_cred_option (OM_uint32 *minor_status,
|
|||||||
if (cred == NULL)
|
if (cred == NULL)
|
||||||
return GSS_S_FAILURE;
|
return GSS_S_FAILURE;
|
||||||
|
|
||||||
cred->gc_usage = GSS_C_BOTH; /* XXX */
|
|
||||||
SLIST_INIT(&cred->gc_mc);
|
SLIST_INIT(&cred->gc_mc);
|
||||||
|
|
||||||
SLIST_FOREACH(m, &_gss_mechs, gm_link) {
|
SLIST_FOREACH(m, &_gss_mechs, gm_link) {
|
||||||
|
Reference in New Issue
Block a user