From 34d35f83bf22409fb13230686a6fcf205fcf5d2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Wed, 5 Jul 2006 22:35:02 +0000 Subject: [PATCH] (gss_spnego_acquire_cred): don't care about desired_mechs, get our own list with indicate_mechs and remote ourself. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@17801 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/gssapi/spnego/cred_stubs.c | 39 +++++++++++++++++----------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/lib/gssapi/spnego/cred_stubs.c b/lib/gssapi/spnego/cred_stubs.c index 3a83caf0c..6099da783 100644 --- a/lib/gssapi/spnego/cred_stubs.c +++ b/lib/gssapi/spnego/cred_stubs.c @@ -87,46 +87,46 @@ _gss_spnego_alloc_cred(OM_uint32 *minor_status, * more functionality. */ OM_uint32 gss_spnego_acquire_cred - (OM_uint32 *minor_status, - const gss_name_t desired_name, - OM_uint32 time_req, - const gss_OID_set desired_mechs, - gss_cred_usage_t cred_usage, - gss_cred_id_t * output_cred_handle, - gss_OID_set * actual_mechs, - OM_uint32 * time_rec - ) +(OM_uint32 *minor_status, + const gss_name_t desired_name, + OM_uint32 time_req, + const gss_OID_set desired_mechs, + gss_cred_usage_t cred_usage, + gss_cred_id_t * output_cred_handle, + gss_OID_set * actual_mechs, + OM_uint32 * time_rec + ) { OM_uint32 ret, tmp; gss_OID_set_desc actual_desired_mechs; + gss_OID_set mechs; int i, j; gss_cred_id_t cred_handle = GSS_C_NO_CREDENTIAL; gssspnego_cred cred; *output_cred_handle = GSS_C_NO_CREDENTIAL; + ret = gss_indicate_mechs(minor_status, &mechs); + if (ret != GSS_S_COMPLETE) + return ret; + /* Remove ourselves from this list */ - actual_desired_mechs.count = desired_mechs->count; + actual_desired_mechs.count = mechs->count; actual_desired_mechs.elements = malloc(actual_desired_mechs.count * - sizeof(gss_OID_desc)); + sizeof(gss_OID_desc)); if (actual_desired_mechs.elements == NULL) { *minor_status = ENOMEM; ret = GSS_S_FAILURE; goto out; } - for (i = 0, j = 0; i < desired_mechs->count; i++) { - if (gss_oid_equal(&desired_mechs->elements[i], - GSS_SPNEGO_MECHANISM)) + for (i = 0, j = 0; i < mechs->count; i++) { + if (gss_oid_equal(&mechs->elements[i], GSS_SPNEGO_MECHANISM)) continue; - actual_desired_mechs.elements[j].length = - desired_mechs->elements[i].length; - actual_desired_mechs.elements[j].elements = - desired_mechs->elements[i].elements; + actual_desired_mechs.elements[j] = mechs->elements[i]; j++; } - actual_desired_mechs.count = j; ret = _gss_spnego_alloc_cred(minor_status, GSS_C_NO_CREDENTIAL, @@ -146,6 +146,7 @@ OM_uint32 gss_spnego_acquire_cred *output_cred_handle = cred_handle; out: + gss_release_oid_set(&tmp, &mechs); if (actual_desired_mechs.elements != NULL) { free(actual_desired_mechs.elements); }