From 8fd620fe538f33164e4faa395573d6739aa829a2 Mon Sep 17 00:00:00 2001 From: Sam Hartman Date: Fri, 14 Oct 2011 14:37:14 +0000 Subject: [PATCH] Simplify gss_indicate_mechs() by using generic_gss_copy_oid_set ...instead of hand-duplicating all the logic therein. Also makes the switch to using gssalloc functions with oid_sets easier. Signed-off-by: Kevin Wasserman git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25329 dc483132-0cff-0310-8789-dd5450dbe970 --- src/lib/gssapi/mechglue/g_initialize.c | 55 ++------------------------ 1 file changed, 3 insertions(+), 52 deletions(-) diff --git a/src/lib/gssapi/mechglue/g_initialize.c b/src/lib/gssapi/mechglue/g_initialize.c index 603387c7e..202ad8eef 100644 --- a/src/lib/gssapi/mechglue/g_initialize.c +++ b/src/lib/gssapi/mechglue/g_initialize.c @@ -212,9 +212,7 @@ gss_OID_set *mechSet_out; { char *fileName; struct stat fileInfo; - unsigned int i, j; - gss_OID curItem; - gss_OID_set mechSet; + OM_uint32 status; /* Initialize outputs. */ @@ -245,65 +243,18 @@ gss_OID_set *mechSet_out; if (build_mechSet()) return GSS_S_FAILURE; - /* - * the mech set is created and it is up to date - * so just copy it to caller - */ - if ((mechSet = - (gss_OID_set) malloc(sizeof (gss_OID_set_desc))) == NULL) - { - return (GSS_S_FAILURE); - } - /* * need to lock the g_mechSet in case someone tries to update it while * I'm copying it. */ *minorStatus = k5_mutex_lock(&g_mechSetLock); if (*minorStatus) { - free(mechSet); return GSS_S_FAILURE; } - /* allocate space for the oid structures */ - if ((mechSet->elements = - (void*) calloc(g_mechSet.count, sizeof (gss_OID_desc))) - == NULL) - { - (void) k5_mutex_unlock(&g_mechSetLock); - free(mechSet); - return (GSS_S_FAILURE); - } - - /* now copy the oid structures */ - (void) memcpy(mechSet->elements, g_mechSet.elements, - g_mechSet.count * sizeof (gss_OID_desc)); - - mechSet->count = g_mechSet.count; - - /* still need to copy each of the oid elements arrays */ - for (i = 0; i < mechSet->count; i++) { - curItem = &(mechSet->elements[i]); - curItem->elements = - (void *) malloc(g_mechSet.elements[i].length); - if (curItem->elements == NULL) { - (void) k5_mutex_unlock(&g_mechSetLock); - /* - * must still free the allocated elements for - * each allocated gss_OID_desc - */ - for (j = 0; j < i; j++) { - free(mechSet->elements[j].elements); - } - free(mechSet->elements); - free(mechSet); - return (GSS_S_FAILURE); - } - g_OID_copy(curItem, &g_mechSet.elements[i]); - } + status = generic_gss_copy_oid_set(minorStatus, &g_mechSet, mechSet_out); (void) k5_mutex_unlock(&g_mechSetLock); - *mechSet_out = mechSet; - return (GSS_S_COMPLETE); + return (status); } /* gss_indicate_mechs */ -- 2.26.2