9af0d9
From 5881a9dbc87f20cd149f53f444b95e8b579638c7 Mon Sep 17 00:00:00 2001
9af0d9
From: Simo Sorce <simo@redhat.com>
9af0d9
Date: Thu, 27 Aug 2020 13:23:49 -0400
9af0d9
Subject: [PATCH] Fix leaks in our test suite itself
9af0d9
9af0d9
These are mostly laziness in freeing since the programs are short-lived.
9af0d9
9af0d9
Signed-off-by: Simo Sorce <simo@redhat.com>
9af0d9
[rharwood@redhat.com: rewrote commit message]
9af0d9
Reviewed-by: Robbie Harwood <rharwood@redhat.com>
9af0d9
(cherry picked from commit dc56c86f1dcb1ae4dbc35facf5f50fb21c9d5049)
9af0d9
(cherry picked from commit 617d9ee9ce967cf20462e3cc7a575fda0f945075)
9af0d9
---
9af0d9
 tests/interposetest.c | 22 +++++++++++++++-------
9af0d9
 tests/t_impersonate.c | 11 ++++++++---
9af0d9
 tests/t_init.c        |  2 ++
9af0d9
 tests/t_setcredopt.c  |  8 ++++++--
9af0d9
 4 files changed, 31 insertions(+), 12 deletions(-)
9af0d9
9af0d9
diff --git a/tests/interposetest.c b/tests/interposetest.c
9af0d9
index a00904f..0cdd473 100644
9af0d9
--- a/tests/interposetest.c
9af0d9
+++ b/tests/interposetest.c
9af0d9
@@ -71,6 +71,8 @@ static int gptest_inq_context(gss_ctx_id_t ctx)
9af0d9
     DEBUG("Context validity: %d sec.\n", time_rec);
9af0d9
 
9af0d9
 done:
9af0d9
+    (void)gss_release_name(&min, &src_name);
9af0d9
+    (void)gss_release_name(&min, &targ_name);
9af0d9
     (void)gss_release_buffer(&min, &sname);
9af0d9
     (void)gss_release_buffer(&min, &tname);
9af0d9
     (void)gss_release_buffer(&min, &mechstr);
9af0d9
@@ -274,7 +276,7 @@ void run_client(struct aproc *data)
9af0d9
         gp_log_failure(GSS_C_NO_OID, ret_maj, ret_min);
9af0d9
         goto done;
9af0d9
     }
9af0d9
-    fprintf(stdout, "Client, RECV: [%s]\n", buffer);
9af0d9
+    fprintf(stdout, "Client, RECV: [%*s]\n", buflen, buffer);
9af0d9
 
9af0d9
     /* test gss_wrap_iov_length */
9af0d9
 
9af0d9
@@ -837,19 +839,22 @@ int main(int argc, const char *main_argv[])
9af0d9
 
9af0d9
     if (opt_version) {
9af0d9
         puts(VERSION""DISTRO_VERSION""PRERELEASE_VERSION);
9af0d9
-        return 0;
9af0d9
+        ret = 0;
9af0d9
+        goto done;
9af0d9
     }
9af0d9
 
9af0d9
     if (opt_target == NULL) {
9af0d9
         fprintf(stderr, "Missing target!\n");
9af0d9
         poptPrintUsage(pc, stderr, 0);
9af0d9
-        return 1;
9af0d9
+        ret = 1;
9af0d9
+        goto done;
9af0d9
     }
9af0d9
 
9af0d9
     if (!opt_all) {
9af0d9
-            return run_cli_srv_test(PROXY_LOCAL_ONLY,
9af0d9
-                                    PROXY_LOCAL_ONLY,
9af0d9
-                                    opt_target);
9af0d9
+        ret = run_cli_srv_test(PROXY_LOCAL_ONLY,
9af0d9
+                               PROXY_LOCAL_ONLY,
9af0d9
+                               opt_target);
9af0d9
+        goto done;
9af0d9
     }
9af0d9
 
9af0d9
     for (i=0; i<4; i++) {
9af0d9
@@ -861,10 +866,13 @@ int main(int argc, const char *main_argv[])
9af0d9
                     lookup_gssproxy_behavior(k),
9af0d9
                     ret ? "failed" : "succeeded");
9af0d9
             if (ret) {
9af0d9
-                return ret;
9af0d9
+                goto done;
9af0d9
             }
9af0d9
         }
9af0d9
     }
9af0d9
 
9af0d9
+done:
9af0d9
+    poptFreeContext(pc);
9af0d9
+    free(opt_target);
9af0d9
     return ret;
9af0d9
 }
9af0d9
diff --git a/tests/t_impersonate.c b/tests/t_impersonate.c
9af0d9
index 8ca6e9c..e7b0bc2 100644
9af0d9
--- a/tests/t_impersonate.c
9af0d9
+++ b/tests/t_impersonate.c
9af0d9
@@ -12,9 +12,9 @@ int main(int argc, const char *argv[])
9af0d9
     gss_ctx_id_t accept_ctx = GSS_C_NO_CONTEXT;
9af0d9
     gss_buffer_desc in_token = GSS_C_EMPTY_BUFFER;
9af0d9
     gss_buffer_desc out_token = GSS_C_EMPTY_BUFFER;
9af0d9
-    gss_name_t user_name;
9af0d9
-    gss_name_t proxy_name;
9af0d9
-    gss_name_t target_name;
9af0d9
+    gss_name_t user_name = GSS_C_NO_NAME;
9af0d9
+    gss_name_t proxy_name = GSS_C_NO_NAME;
9af0d9
+    gss_name_t target_name = GSS_C_NO_NAME;
9af0d9
     gss_OID_set_desc oid_set = { 1, discard_const(gss_mech_krb5) };
9af0d9
     uint32_t ret_maj;
9af0d9
     uint32_t ret_min;
9af0d9
@@ -207,9 +207,14 @@ int main(int argc, const char *argv[])
9af0d9
     ret = 0;
9af0d9
 
9af0d9
 done:
9af0d9
+    gss_release_name(&ret_min, &user_name);
9af0d9
+    gss_release_name(&ret_min, &proxy_name);
9af0d9
+    gss_release_name(&ret_min, &target_name);
9af0d9
     gss_release_buffer(&ret_min, &in_token);
9af0d9
     gss_release_buffer(&ret_min, &out_token);
9af0d9
     gss_release_cred(&ret_min, &impersonator_cred_handle);
9af0d9
     gss_release_cred(&ret_min, &cred_handle);
9af0d9
+    gss_delete_sec_context(&ret_min, &accept_ctx, GSS_C_NO_BUFFER);
9af0d9
+    gss_delete_sec_context(&ret_min, &init_ctx, GSS_C_NO_BUFFER);
9af0d9
     return ret;
9af0d9
 }
9af0d9
diff --git a/tests/t_init.c b/tests/t_init.c
9af0d9
index 02407ce..76bd4c1 100644
9af0d9
--- a/tests/t_init.c
9af0d9
+++ b/tests/t_init.c
9af0d9
@@ -82,6 +82,8 @@ int main(int argc, const char *argv[])
9af0d9
         goto done;
9af0d9
     }
9af0d9
 
9af0d9
+    gss_release_buffer(&ret_min, &out_token);
9af0d9
+
9af0d9
     ret = t_recv_buffer(STDIN_FD, buffer, &buflen);
9af0d9
     if (ret != 0) {
9af0d9
         DEBUG("Failed to read token from STDIN\n");
9af0d9
diff --git a/tests/t_setcredopt.c b/tests/t_setcredopt.c
9af0d9
index 1399474..bc5e13f 100644
9af0d9
--- a/tests/t_setcredopt.c
9af0d9
+++ b/tests/t_setcredopt.c
9af0d9
@@ -12,8 +12,8 @@ int main(int argc, const char *argv[])
9af0d9
     gss_ctx_id_t accept_ctx = GSS_C_NO_CONTEXT;
9af0d9
     gss_buffer_desc in_token = GSS_C_EMPTY_BUFFER;
9af0d9
     gss_buffer_desc out_token = GSS_C_EMPTY_BUFFER;
9af0d9
-    gss_name_t user_name;
9af0d9
-    gss_name_t target_name;
9af0d9
+    gss_name_t user_name = GSS_C_NO_NAME;
9af0d9
+    gss_name_t target_name = GSS_C_NO_NAME;
9af0d9
     gss_OID_set_desc oid_set = { 1, discard_const(gss_mech_krb5) };
9af0d9
     uint32_t ret_maj;
9af0d9
     uint32_t ret_min;
9af0d9
@@ -160,8 +160,12 @@ int main(int argc, const char *argv[])
9af0d9
     ret = 0;
9af0d9
 
9af0d9
 done:
9af0d9
+    gss_release_name(&ret_min, &user_name);
9af0d9
+    gss_release_name(&ret_min, &target_name);
9af0d9
     gss_release_buffer(&ret_min, &in_token);
9af0d9
     gss_release_buffer(&ret_min, &out_token);
9af0d9
     gss_release_cred(&ret_min, &cred_handle);
9af0d9
+    gss_delete_sec_context(&ret_min, &init_ctx, GSS_C_NO_BUFFER);
9af0d9
+    gss_delete_sec_context(&ret_min, &accept_ctx, GSS_C_NO_BUFFER);
9af0d9
     return ret;
9af0d9
 }