|
 |
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 |
|