Blame 0001-tools-properly-release-internal-data-on-error.patch

8fc58f6
From 41fdcb1af885d99a91e27406e9343b322f67756a Mon Sep 17 00:00:00 2001
8fc58f6
From: Sumit Bose <sbose@redhat.com>
8fc58f6
Date: Thu, 28 Jun 2018 20:13:26 +0200
8fc58f6
Subject: [PATCH] tools: properly release internal data on error
8fc58f6
8fc58f6
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=1588596
8fc58f6
---
8fc58f6
 tools/computer.c | 39 ++++++++++++++++++++++++++++++++++++---
8fc58f6
 1 file changed, 36 insertions(+), 3 deletions(-)
8fc58f6
8fc58f6
diff --git a/tools/computer.c b/tools/computer.c
8fc58f6
index 3813f0a..112340e 100644
8fc58f6
--- a/tools/computer.c
8fc58f6
+++ b/tools/computer.c
8fc58f6
@@ -415,11 +415,16 @@ adcli_tool_computer_join (adcli_conn *conn,
8fc58f6
 
8fc58f6
 	if (argc == 1)
8fc58f6
 		adcli_conn_set_domain_name (conn, argv[0]);
8fc58f6
-	else if (argc > 1)
8fc58f6
+	else if (argc > 1) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (2, "extra arguments specified");
8fc58f6
+	}
8fc58f6
 
8fc58f6
 	res = adcli_conn_connect (conn);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "couldn't connect to %s domain: %s",
8fc58f6
 		      adcli_conn_get_domain_name (conn),
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
@@ -427,6 +432,8 @@ adcli_tool_computer_join (adcli_conn *conn,
8fc58f6
 
8fc58f6
 	res = adcli_enroll_join (enroll, flags);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "joining domain %s failed: %s",
8fc58f6
 		      adcli_conn_get_domain_name (conn),
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
@@ -525,12 +532,16 @@ adcli_tool_computer_update (adcli_conn *conn,
8fc58f6
 
8fc58f6
 	res = adcli_enroll_load (enroll);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "couldn't lookup domain info from keytab: %s",
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
 	}
8fc58f6
 
8fc58f6
 	res = adcli_conn_connect (conn);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "couldn't connect to %s domain: %s",
8fc58f6
 		      adcli_conn_get_domain_name (conn),
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
@@ -538,6 +549,8 @@ adcli_tool_computer_update (adcli_conn *conn,
8fc58f6
 
8fc58f6
 	res = adcli_enroll_update (enroll, flags);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "updating membership with domain %s failed: %s",
8fc58f6
 		      adcli_conn_get_domain_name (conn),
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
@@ -630,6 +643,8 @@ adcli_tool_computer_preset (adcli_conn *conn,
8fc58f6
 
8fc58f6
 	res = adcli_conn_connect (conn);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "couldn't connect to %s domain: %s",
8fc58f6
 		      adcli_conn_get_domain_name (conn),
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
@@ -643,6 +658,8 @@ adcli_tool_computer_preset (adcli_conn *conn,
8fc58f6
 
8fc58f6
 		res = adcli_enroll_join (enroll, flags);
8fc58f6
 		if (res != ADCLI_SUCCESS) {
8fc58f6
+			adcli_enroll_unref (enroll);
8fc58f6
+			adcli_conn_unref (conn);
8fc58f6
 			errx (-res, "presetting %s in %s domain failed: %s", argv[i],
8fc58f6
 			      adcli_conn_get_domain_name (conn),
8fc58f6
 			      adcli_get_last_error ());
8fc58f6
@@ -707,11 +724,16 @@ adcli_tool_computer_reset (adcli_conn *conn,
8fc58f6
 	argc -= optind;
8fc58f6
 	argv += optind;
8fc58f6
 
8fc58f6
-	if (argc != 1)
8fc58f6
+	if (argc != 1) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (EUSAGE, "specify one host name of computer account to reset");
8fc58f6
+	}
8fc58f6
 
8fc58f6
 	res = adcli_conn_connect (conn);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "couldn't connect to %s domain: %s",
8fc58f6
 		      adcli_conn_get_domain_name (conn),
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
@@ -722,6 +744,8 @@ adcli_tool_computer_reset (adcli_conn *conn,
8fc58f6
 
8fc58f6
 	res = adcli_enroll_password (enroll, 0);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "resetting %s in %s domain failed: %s", argv[0],
8fc58f6
 		      adcli_conn_get_domain_name (conn),
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
@@ -781,19 +805,26 @@ adcli_tool_computer_delete (adcli_conn *conn,
8fc58f6
 	argc -= optind;
8fc58f6
 	argv += optind;
8fc58f6
 
8fc58f6
-	if (argc > 1)
8fc58f6
+	if (argc > 1) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (EUSAGE, "specify one host name of computer account to delete");
8fc58f6
+	}
8fc58f6
 
8fc58f6
 	adcli_conn_set_allowed_login_types (conn, ADCLI_LOGIN_USER_ACCOUNT);
8fc58f6
 
8fc58f6
 	res = adcli_enroll_load (enroll);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "couldn't lookup domain info from keytab: %s",
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
 	}
8fc58f6
 
8fc58f6
 	res = adcli_conn_connect (conn);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "couldn't connect to %s domain: %s",
8fc58f6
 		      adcli_conn_get_domain_name (conn),
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
@@ -804,6 +835,8 @@ adcli_tool_computer_delete (adcli_conn *conn,
8fc58f6
 
8fc58f6
 	res = adcli_enroll_delete (enroll, 0);
8fc58f6
 	if (res != ADCLI_SUCCESS) {
8fc58f6
+		adcli_enroll_unref (enroll);
8fc58f6
+		adcli_conn_unref (conn);
8fc58f6
 		errx (-res, "deleting %s in %s domain failed: %s", argv[0],
8fc58f6
 		      adcli_conn_get_domain_name (conn),
8fc58f6
 		      adcli_get_last_error ());
8fc58f6
-- 
8fc58f6
2.20.1
8fc58f6