]> eyrie.org Git - kerberos/krb5-strength.git/blobdiff - tests/tap/kerberos.c
Update to rra-c-util 10.5
[kerberos/krb5-strength.git] / tests / tap / kerberos.c
index 765d80290a64082b8bd38373b608545b705e9932..ae571dcc20936645240a40bd1265c73069370098 100644 (file)
@@ -15,7 +15,7 @@
  * which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
  *
  * Written by Russ Allbery <eagle@eyrie.org>
- * Copyright 2017 Russ Allbery <eagle@eyrie.org>
+ * Copyright 2017, 2022 Russ Allbery <eagle@eyrie.org>
  * Copyright 2006-2007, 2009-2014
  *     The Board of Trustees of the Leland Stanford Junior University
  *
@@ -211,9 +211,11 @@ kerberos_kinit(void)
  * process so that test programs that fork don't remove the ticket cache still
  * used by the main program.
  */
-static void
-kerberos_free(void)
+void
+kerberos_free(struct kerberos_config *config_arg)
 {
+    if (config_arg != config)
+        bail("invalid argument to kerberos_free");
     test_tmpdir_free(tmpdir_ticket);
     tmpdir_ticket = NULL;
     if (config != NULL) {
@@ -225,7 +227,14 @@ kerberos_free(void)
         free(config->password);
         free(config->pkinit_principal);
         free(config->pkinit_cert);
-        free(config);
+
+        /*
+         * Free config_arg rather than config, since otherwise cppcheck thinks
+         * that config_arg could be const, which while technically true would
+         * look very weird since config_arg is invalidated by calling this
+         * function.
+         */
+        free(config_arg);
         config = NULL;
     }
     if (krb5ccname != NULL) {
@@ -257,7 +266,7 @@ kerberos_cleanup(void)
         unlink(path);
         free(path);
     }
-    kerberos_free();
+    kerberos_free(config);
 }
 
 
@@ -273,7 +282,7 @@ kerberos_cleanup_handler(int success UNUSED, int primary)
     if (primary)
         kerberos_cleanup();
     else
-        kerberos_free();
+        kerberos_free(config);
 }