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);
|
||||
|
||||
struct _gss_cred {
|
||||
gss_cred_usage_t gc_usage;
|
||||
struct _gss_mechanism_cred_list gc_mc;
|
||||
};
|
||||
|
||||
|
@@ -272,8 +272,6 @@ OM_uint32 gss_accept_sec_context(OM_uint32 *minor_status,
|
||||
*minor_status = ENOMEM;
|
||||
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_oid = &m->gm_mech_oid;
|
||||
dmc->gmc_cred = delegated_mc;
|
||||
|
@@ -91,7 +91,6 @@ gss_acquire_cred(OM_uint32 *minor_status,
|
||||
*minor_status = ENOMEM;
|
||||
return (GSS_S_FAILURE);
|
||||
}
|
||||
cred->gc_usage = cred_usage;
|
||||
SLIST_INIT(&cred->gc_mc);
|
||||
|
||||
if (mechs == GSS_C_NO_OID_SET)
|
||||
|
@@ -107,7 +107,6 @@ gss_add_cred(OM_uint32 *minor_status,
|
||||
*minor_status = ENOMEM;
|
||||
return (GSS_S_FAILURE);
|
||||
}
|
||||
new_cred->gc_usage = cred_usage;
|
||||
SLIST_INIT(&new_cred->gc_mc);
|
||||
|
||||
/*
|
||||
|
@@ -29,6 +29,20 @@
|
||||
#include "mech_locl.h"
|
||||
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
|
||||
gss_inquire_cred(OM_uint32 *minor_status,
|
||||
const gss_cred_id_t cred_handle,
|
||||
@@ -44,6 +58,8 @@ gss_inquire_cred(OM_uint32 *minor_status,
|
||||
struct _gss_mechanism_name *mn;
|
||||
OM_uint32 min_lifetime;
|
||||
int found = 0;
|
||||
int usagemask = 0;
|
||||
gss_cred_usage_t usage;
|
||||
|
||||
_gss_load_mech();
|
||||
|
||||
@@ -86,10 +102,11 @@ gss_inquire_cred(OM_uint32 *minor_status,
|
||||
OM_uint32 mc_lifetime;
|
||||
|
||||
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)
|
||||
continue;
|
||||
|
||||
updateusage(usage, &usagemask);
|
||||
if (name) {
|
||||
mn = malloc(sizeof(struct _gss_mechanism_name));
|
||||
if (!mn) {
|
||||
@@ -121,10 +138,11 @@ gss_inquire_cred(OM_uint32 *minor_status,
|
||||
|
||||
major_status = m->gm_mech.gm_inquire_cred(minor_status,
|
||||
GSS_C_NO_CREDENTIAL, &mc_name, &mc_lifetime,
|
||||
cred_usage, NULL);
|
||||
&usage, NULL);
|
||||
if (major_status)
|
||||
continue;
|
||||
|
||||
updateusage(usage, &usagemask);
|
||||
if (name && mc_name) {
|
||||
mn = malloc(
|
||||
sizeof(struct _gss_mechanism_name));
|
||||
@@ -166,7 +184,13 @@ gss_inquire_cred(OM_uint32 *minor_status,
|
||||
*name_ret = (gss_name_t) name;
|
||||
if (lifetime)
|
||||
*lifetime = min_lifetime;
|
||||
if (cred && cred_usage)
|
||||
*cred_usage = cred->gc_usage;
|
||||
if (cred_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);
|
||||
}
|
||||
|
@@ -55,7 +55,6 @@ gss_set_cred_option (OM_uint32 *minor_status,
|
||||
if (cred == NULL)
|
||||
return GSS_S_FAILURE;
|
||||
|
||||
cred->gc_usage = GSS_C_BOTH; /* XXX */
|
||||
SLIST_INIT(&cred->gc_mc);
|
||||
|
||||
SLIST_FOREACH(m, &_gss_mechs, gm_link) {
|
||||
|
Reference in New Issue
Block a user