kdc: Fix leaks
authorNicolas Williams <nico@twosigma.com>
Tue, 10 Dec 2019 03:39:30 +0000 (21:39 -0600)
committerNicolas Williams <nico@twosigma.com>
Tue, 10 Dec 2019 03:39:30 +0000 (21:39 -0600)
kdc/bx509d.c
kdc/main.c
kdc/process.c
kdc/test_csr_authorizer.c
kdc/test_kdc_ca.c
kdc/test_token_validator.c

index 93bbfb6cb432c9ab20bcce7396fb1aad5cbcdfc5..142ea4a898ab4cf62110ea5d0be66356141fbd8b 100644 (file)
@@ -1825,6 +1825,7 @@ again:
     }
 
     MHD_stop_daemon(current);
+    _krb5_unload_plugins(context, "kdc");
     pthread_key_delete(k5ctx);
     return 0;
 }
index 425d3ab4217cdd489d0746124536f65617d56482..a4a7ade12fbdbca79a84a4fa58457b0c34eb5833 100644 (file)
@@ -174,6 +174,7 @@ main(int argc, char **argv)
     switch_environment();
 
     start_kdc(context, config, argv[0]);
+    _krb5_unload_plugins(context, "kdc");
     krb5_free_context(context);
     free(config);
     return 0;
index ac5b7799b9da6469c9760b4a62c23994af62d487..bd9e418d4df25dd5c2dbd793953633baadc4a970 100644 (file)
@@ -98,6 +98,7 @@ _kdc_audit_addkv(kdc_request_t r, int flags, const char *k,
     }
 
     heim_array_append_value(r->kv, str);
+    heim_release(str);
 }
 
 void
@@ -360,7 +361,6 @@ process_request(krb5_context context,
     krb5_error_code ret;
     unsigned int i;
     int claim = 0;
-    heim_auto_release_t pool = heim_auto_release_create();
 
     r = calloc(sizeof(*r), 1);
     if (!r)
@@ -396,16 +396,16 @@ process_request(krb5_context context,
                free(r->cname);
                free(r->sname);
                free(r->e_text_buf);
-               heim_release(r->kv);
            }
 
-           heim_release(pool);
+            heim_release(r->kv);
+            free(r);
            return ret;
        }
     }
 
-    heim_release(pool);
-
+    heim_release(r->kv);
+    free(r);
     return -1;
 }
 
index b9cbf924f0ca006f1cab7b9277c6ac1c39acee78..8de75000b197c7d8a53a830ef3d444195e26bc32 100644 (file)
@@ -72,6 +72,7 @@ main(int argc, char **argv)
         krb5_err(context, 1, ret, "Authorization failed");
     printf("Authorized!\n");
     krb5_free_principal(context, princ);
+    _krb5_unload_plugins(context, "kdc");
     krb5_free_context(context);
     hx509_request_free(&csr);
     /* FIXME There's no free function for config yet */
index 18e92a212fa0479c5c6f266e6a7634a4ab773850..a908b52bac68f942654deb625ae3ceeec406c84b 100644 (file)
@@ -136,6 +136,7 @@ main(int argc, char **argv)
         if (ret != HX509_UNSUPPORTED_OPERATION)
             krb5_err(context, 1, ret,
                      "Could not store certificate and chain in %s", out);
+    _krb5_unload_plugins(context, "kdc");
     krb5_free_principal(context, p);
     krb5_free_context(context);
     hx509_request_free(&req);
index 88b1cc47a3da743cd7d4d4791f949d6bcaa8a8f5..b4104d5b01d525b8adbfec3123acc4aa8485e7ca 100644 (file)
@@ -81,6 +81,8 @@ main(int argc, char **argv)
         printf("Token is valid.  Actual principal: %s\n", s);
     else
         printf("Token is valid.");
+    _krb5_unload_plugins(context, "kdc");
     krb5_free_principal(context, actual_princ);
+    krb5_free_context(context);
     return 0;
 }