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