]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Reuse code to free gss_mech_info structure
authorSimo Sorce <simo@redhat.com>
Mon, 30 Jul 2012 18:12:03 +0000 (14:12 -0400)
committerGreg Hudson <ghudson@mit.edu>
Sun, 5 Aug 2012 16:38:33 +0000 (12:38 -0400)
src/lib/gssapi/mechglue/g_initialize.c

index 202ad8eef68094def5159469394fe3d8c28c4d13..ea7174fab97c278baf7be3759c47b3f0350d44da 100644 (file)
@@ -554,7 +554,6 @@ updateMechList(void)
 #endif /* !_WIN32 */
 } /* updateMechList */
 
-#ifdef _GSS_STATIC_LINK
 static void
 releaseMechInfo(gss_mech_info *pCf)
 {
@@ -578,11 +577,11 @@ releaseMechInfo(gss_mech_info *pCf)
        if (cf->mech_type != GSS_C_NO_OID &&
            cf->mech_type != &cf->mech->mech_type)
                generic_gss_release_oid(&minor_status, &cf->mech_type);
-       if (cf->mech != NULL) {
+       if (cf->mech != NULL && cf->freeMech) {
                memset(cf->mech, 0, sizeof(*cf->mech));
                free(cf->mech);
        }
-       if (cf->mech_ext != NULL) {
+       if (cf->mech_ext != NULL && cf->freeMech) {
                memset(cf->mech_ext, 0, sizeof(*cf->mech_ext));
                free(cf->mech_ext);
        }
@@ -595,6 +594,7 @@ releaseMechInfo(gss_mech_info *pCf)
        *pCf = NULL;
 }
 
+#ifdef _GSS_STATIC_LINK
 /*
  * Register a mechanism.  Called with g_mechListLock held.
  */
@@ -811,27 +811,10 @@ static void
 freeMechList(void)
 {
        gss_mech_info cf, next_cf;
-       OM_uint32 minor;
 
        for (cf = g_mechList; cf != NULL; cf = next_cf) {
                next_cf = cf->next;
-               if (cf->kmodName != NULL)
-                       free(cf->kmodName);
-               if (cf->uLibName != NULL)
-                       free(cf->uLibName);
-               if (cf->mechNameStr != NULL)
-                       free(cf->mechNameStr);
-               if (cf->optionStr != NULL)
-                       free(cf->optionStr);
-               if (cf->mech_type != &cf->mech->mech_type)
-                       generic_gss_release_oid(&minor, &cf->mech_type);
-               if (cf->mech != NULL && cf->freeMech)
-                       free(cf->mech);
-               if (cf->mech_ext != NULL && cf->freeMech)
-                       free(cf->mech_ext);
-               if (cf->dl_handle != NULL)
-                       (void) krb5int_close_plugin(cf->dl_handle);
-               free(cf);
+               releaseMechInfo(&cf);
        }
 }