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
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand