Sumit Bose 461678
From c090131e4f912f6f6c4f79eb40fbe500eb31c171 Mon Sep 17 00:00:00 2001
Sumit Bose 461678
From: Sumit Bose <sbose@redhat.com>
Sumit Bose 461678
Date: Tue, 30 Jan 2018 18:24:15 +0100
Sumit Bose 461678
Subject: [PATCH 14/23] tools: store Samba data if requested
Sumit Bose 461678
Sumit Bose 461678
Use Samba's net utility to add the machine account password and the
Sumit Bose 461678
domain SID to the Samba configuration.
Sumit Bose 461678
Sumit Bose 461678
https://bugs.freedesktop.org/show_bug.cgi?id=100118
Sumit Bose 461678
Sumit Bose 461678
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Sumit Bose 461678
---
Sumit Bose 461678
 library/adenroll.c | 39 +++++++++++++++++++++++++++++++++++++++
Sumit Bose 461678
 1 file changed, 39 insertions(+)
Sumit Bose 461678
Sumit Bose 461678
diff --git a/library/adenroll.c b/library/adenroll.c
Sumit Bose 461678
index bb970d1..20731cd 100644
Sumit Bose 461678
--- a/library/adenroll.c
Sumit Bose 461678
+++ b/library/adenroll.c
Sumit Bose 461678
@@ -1533,6 +1533,36 @@ update_keytab_for_principals (adcli_enroll *enroll)
Sumit Bose 461678
 	return ADCLI_SUCCESS;
Sumit Bose 461678
 }
Sumit Bose 461678
 
Sumit Bose 461678
+static adcli_result
Sumit Bose 461678
+update_samba_data (adcli_enroll *enroll)
Sumit Bose 461678
+{
Sumit Bose 461678
+	int ret;
Sumit Bose 461678
+	char *argv_pw[] = { "/usr/bin/net", "changesecretpw", "-i", "-f", NULL };
Sumit Bose 461678
+	char *argv_sid[] = { "/usr/bin/net", "setdomainsid", NULL, NULL };
Sumit Bose 461678
+
Sumit Bose 461678
+	_adcli_info ("Trying to set Samba secret.\n");
Sumit Bose 461678
+	ret = _adcli_call_external_program (argv_pw[0], argv_pw,
Sumit Bose 461678
+	                                    enroll->computer_password, NULL, NULL);
Sumit Bose 461678
+	if (ret != ADCLI_SUCCESS) {
Sumit Bose 461678
+		_adcli_err ("Failed to set Samba computer account password.\n");
Sumit Bose 461678
+	}
Sumit Bose 461678
+
Sumit Bose 461678
+	argv_sid[2] = (char *) adcli_conn_get_domain_sid (enroll->conn);
Sumit Bose 461678
+	if (argv_sid[2] == NULL) {
Sumit Bose 461678
+		_adcli_err ("Domain SID not available.\n");
Sumit Bose 461678
+	} else {
Sumit Bose 461678
+		_adcli_info ("Trying to set domain SID %s for Samba.\n",
Sumit Bose 461678
+		             argv_sid[2]);
Sumit Bose 461678
+		ret = _adcli_call_external_program (argv_sid[0], argv_sid,
Sumit Bose 461678
+		                                    NULL, NULL, NULL);
Sumit Bose 461678
+		if (ret != ADCLI_SUCCESS) {
Sumit Bose 461678
+			_adcli_err ("Failed to set Samba domain SID.\n");
Sumit Bose 461678
+		}
Sumit Bose 461678
+	}
Sumit Bose 461678
+
Sumit Bose 461678
+	return ret;
Sumit Bose 461678
+}
Sumit Bose 461678
+
Sumit Bose 461678
 static void
Sumit Bose 461678
 enroll_clear_state (adcli_enroll *enroll)
Sumit Bose 461678
 {
Sumit Bose 461678
@@ -1687,6 +1717,15 @@ enroll_join_or_update_tasks (adcli_enroll *enroll,
Sumit Bose 461678
 	update_computer_account (enroll);
Sumit Bose 461678
 	update_service_principals (enroll);
Sumit Bose 461678
 
Sumit Bose 461678
+	if ( (flags & ADCLI_ENROLL_ADD_SAMBA_DATA) && ! (flags & ADCLI_ENROLL_PASSWORD_VALID)) {
Sumit Bose 461678
+		res = update_samba_data (enroll);
Sumit Bose 461678
+		if (res != ADCLI_SUCCESS) {
Sumit Bose 461678
+			_adcli_info ("Failed to add Samba specific data, smbd "
Sumit Bose 461678
+			             "or winbindd might not work as "
Sumit Bose 461678
+			             "expected.\n");
Sumit Bose 461678
+		}
Sumit Bose 461678
+	}
Sumit Bose 461678
+
Sumit Bose 461678
 	if (flags & ADCLI_ENROLL_NO_KEYTAB)
Sumit Bose 461678
 		return ADCLI_SUCCESS;
Sumit Bose 461678
 
Sumit Bose 461678
-- 
Sumit Bose 461678
2.14.4
Sumit Bose 461678