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:
Love Hörnquist Åstrand
2007-05-08 13:56:49 +00:00
parent 3a4c55c9b8
commit bee2a593cd
6 changed files with 28 additions and 10 deletions

View File

@@ -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;
}; };

View File

@@ -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;

View File

@@ -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)

View File

@@ -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);
/* /*

View File

@@ -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);
} }

View File

@@ -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) {