move _gss_spnego_indicate_mechtypelist() to compat.c
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19414 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -64,102 +64,6 @@ send_reject (OM_uint32 *minor_status, | |||||||
|     return GSS_S_BAD_MECH; |     return GSS_S_BAD_MECH; | ||||||
| } | } | ||||||
|  |  | ||||||
| OM_uint32 |  | ||||||
| _gss_spnego_indicate_mechtypelist (OM_uint32 *minor_status, |  | ||||||
| 				   gss_name_t target_name, |  | ||||||
| 				   OM_uint32 (*func)(gss_name_t, gss_OID), |  | ||||||
| 				   int includeMSCompatOID, |  | ||||||
| 				   const gssspnego_cred cred_handle, |  | ||||||
| 				   MechTypeList *mechtypelist, |  | ||||||
| 				   gss_OID *preferred_mech) |  | ||||||
| { |  | ||||||
|     OM_uint32 ret; |  | ||||||
|     gss_OID_set supported_mechs = GSS_C_NO_OID_SET; |  | ||||||
|     gss_OID first_mech = GSS_C_NO_OID; |  | ||||||
|     int i, count; |  | ||||||
|  |  | ||||||
|     if (cred_handle != NULL) { |  | ||||||
| 	ret = gss_inquire_cred(minor_status, |  | ||||||
| 			       cred_handle->negotiated_cred_id, |  | ||||||
| 			       NULL, |  | ||||||
| 			       NULL, |  | ||||||
| 			       NULL, |  | ||||||
| 			       &supported_mechs); |  | ||||||
|     } else { |  | ||||||
| 	ret = gss_indicate_mechs(minor_status, &supported_mechs); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (ret != GSS_S_COMPLETE) { |  | ||||||
| 	return ret; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (supported_mechs->count == 0) { |  | ||||||
| 	*minor_status = ENOENT; |  | ||||||
| 	gss_release_oid_set(minor_status, &supported_mechs); |  | ||||||
| 	return GSS_S_FAILURE; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     count = supported_mechs->count + 1; |  | ||||||
|     if (includeMSCompatOID) |  | ||||||
| 	count++; |  | ||||||
|  |  | ||||||
|     mechtypelist->len = 0; |  | ||||||
|     mechtypelist->val = calloc(count, sizeof(MechType)); |  | ||||||
|     if (mechtypelist->val == NULL) { |  | ||||||
| 	*minor_status = ENOMEM; |  | ||||||
| 	gss_release_oid_set(minor_status, &supported_mechs); |  | ||||||
| 	return GSS_S_FAILURE; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     ret = (*func)(target_name, GSS_KRB5_MECHANISM); |  | ||||||
|     if (ret == GSS_S_COMPLETE) { |  | ||||||
| 	ret = _gss_spnego_add_mech_type(GSS_KRB5_MECHANISM, |  | ||||||
| 					includeMSCompatOID, |  | ||||||
| 					mechtypelist); |  | ||||||
| 	if (!GSS_ERROR(ret)) |  | ||||||
| 	    first_mech = GSS_KRB5_MECHANISM; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     for (i = 0; i < supported_mechs->count; i++) { |  | ||||||
| 	OM_uint32 subret; |  | ||||||
| 	if (gss_oid_equal(&supported_mechs->elements[i], GSS_SPNEGO_MECHANISM)) |  | ||||||
| 	    continue; |  | ||||||
| 	if (gss_oid_equal(&supported_mechs->elements[i], GSS_KRB5_MECHANISM)) |  | ||||||
| 	    continue; |  | ||||||
|  |  | ||||||
| 	subret = (*func)(target_name, &supported_mechs->elements[i]); |  | ||||||
| 	if (subret != GSS_S_COMPLETE) |  | ||||||
| 	    continue; |  | ||||||
|  |  | ||||||
| 	ret = _gss_spnego_add_mech_type(&supported_mechs->elements[i], |  | ||||||
| 					includeMSCompatOID, |  | ||||||
| 					mechtypelist); |  | ||||||
| 	if (ret != 0) { |  | ||||||
| 	    *minor_status = ENOMEM; |  | ||||||
| 	    ret = GSS_S_FAILURE; |  | ||||||
| 	    break; |  | ||||||
| 	} |  | ||||||
| 	if (first_mech == GSS_C_NO_OID) |  | ||||||
| 	    first_mech = &supported_mechs->elements[i]; |  | ||||||
|     } |  | ||||||
|     if (mechtypelist->len == 0) { |  | ||||||
| 	free_MechTypeList(mechtypelist); |  | ||||||
| 	gss_release_oid_set(minor_status, &supported_mechs); |  | ||||||
| 	*minor_status = 0; |  | ||||||
| 	return GSS_S_BAD_MECH; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (preferred_mech != NULL) { |  | ||||||
| 	ret = gss_duplicate_oid(minor_status, first_mech, preferred_mech); |  | ||||||
| 	if (ret != GSS_S_COMPLETE) |  | ||||||
| 	    free_MechTypeList(mechtypelist); |  | ||||||
|     } |  | ||||||
|     gss_release_oid_set(minor_status, &supported_mechs); |  | ||||||
|  |  | ||||||
|     return ret; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static OM_uint32 | static OM_uint32 | ||||||
| acceptor_approved(gss_name_t target_name, gss_OID mech) | acceptor_approved(gss_name_t target_name, gss_OID mech) | ||||||
| { | { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand