Sumit Bose 461678
From 9b73f79a2436760b8278377014bf78a144a427ae Mon Sep 17 00:00:00 2001
Sumit Bose 461678
From: Sumit Bose <sbose@redhat.com>
Sumit Bose 461678
Date: Thu, 1 Feb 2018 14:26:22 +0100
Sumit Bose 461678
Subject: [PATCH 15/23] make Samba data tool configurable
Sumit Bose 461678
Sumit Bose 461678
Allow to specify an alternative path to Samba's net utility at configure
Sumit Bose 461678
time and at run time.
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
 configure.ac                    | 13 ++++++++++++
Sumit Bose 461678
 doc/adcli.xml                   | 21 ++++++++++++++++++-
Sumit Bose 461678
 doc/samba_data_tool_path.xml.in |  1 +
Sumit Bose 461678
 library/adenroll.c              | 46 ++++++++++++++++++++++++++++++++++-------
Sumit Bose 461678
 library/adenroll.h              |  5 +++++
Sumit Bose 461678
 tools/computer.c                | 16 ++++++++++++++
Sumit Bose 461678
 7 files changed, 95 insertions(+), 8 deletions(-)
Sumit Bose 461678
 create mode 100644 doc/samba_data_tool_path.xml.in
Sumit Bose 461678
Sumit Bose 461678
diff --git a/configure.ac b/configure.ac
Sumit Bose 461678
index fe86638..68877c7 100644
Sumit Bose 461678
--- a/configure.ac
Sumit Bose 461678
+++ b/configure.ac
Sumit Bose 461678
@@ -291,6 +291,18 @@ else
Sumit Bose 461678
 	AC_DEFINE_UNQUOTED(BIN_ECHO, "$BIN_ECHO", [path to echo, used in unit test])
Sumit Bose 461678
 fi
Sumit Bose 461678
 
Sumit Bose 461678
+AC_MSG_CHECKING([where is Samba's net utility])
Sumit Bose 461678
+AC_ARG_WITH([samba_data_tool],
Sumit Bose 461678
+              AC_HELP_STRING([--with-samba-data-tool=/path],
Sumit Bose 461678
+              [Path to Samba's net utility]),
Sumit Bose 461678
+              [],
Sumit Bose 461678
+              [with_samba_data_tool=/usr/bin/net])
Sumit Bose 461678
+AC_MSG_RESULT([$with_samba_data_tool])
Sumit Bose 461678
+
Sumit Bose 461678
+AC_DEFINE_UNQUOTED(SAMBA_DATA_TOOL, "$with_samba_data_tool",
Sumit Bose 461678
+                   [Path to Samba's net utility])
Sumit Bose 461678
+
Sumit Bose 461678
+AC_SUBST(SAMBA_DATA_TOOL, [$with_samba_data_tool])
Sumit Bose 461678
 # ---------------------------------------------------------------------
Sumit Bose 461678
 
Sumit Bose 461678
 ADCLI_LT_RELEASE=$ADCLI_CURRENT:$ADCLI_REVISION:$ADCLI_AGE
Sumit Bose 461678
@@ -300,6 +312,7 @@ AC_CONFIG_FILES([Makefile
Sumit Bose 461678
 	build/Makefile
Sumit Bose 461678
 	doc/Makefile
Sumit Bose 461678
 	doc/version.xml
Sumit Bose 461678
+	doc/samba_data_tool_path.xml
Sumit Bose 461678
 	library/Makefile
Sumit Bose 461678
 	tools/Makefile
Sumit Bose 461678
 ])
Sumit Bose 461678
diff --git a/doc/adcli.xml b/doc/adcli.xml
Sumit Bose 461678
index fbc6c63..c2b7760 100644
Sumit Bose 461678
--- a/doc/adcli.xml
Sumit Bose 461678
+++ b/doc/adcli.xml
Sumit Bose 461678
@@ -1,6 +1,9 @@
Sumit Bose 461678
 
Sumit Bose 461678
 
Sumit Bose 461678
-	"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
Sumit Bose 461678
+	"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
Sumit Bose 461678
+[
Sumit Bose 461678
+	
Sumit Bose 461678
+]>
Sumit Bose 461678
 
Sumit Bose 461678
 <refentry id="adcli">
Sumit Bose 461678
 
Sumit Bose 461678
@@ -307,6 +310,14 @@ Password for Administrator:
Sumit Bose 461678
 			<citerefentry><refentrytitle>smb.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
Sumit Bose 461678
 			for details.</para></listitem>
Sumit Bose 461678
 		</varlistentry>
Sumit Bose 461678
+		<varlistentry>
Sumit Bose 461678
+			<term><option>--samba-data-tool=<parameter>/path/to/net</parameter></option></term>
Sumit Bose 461678
+			<listitem><para>If Samba's <command>net</command>
Sumit Bose 461678
+			cannot be found at
Sumit Bose 461678
+			<filename>&samba_data_tool;</filename> this option can
Sumit Bose 461678
+			be used to specific an alternative location with the
Sumit Bose 461678
+			help of an absolute path.</para></listitem>
Sumit Bose 461678
+		</varlistentry>
Sumit Bose 461678
 	</variablelist>
Sumit Bose 461678
 
Sumit Bose 461678
 </refsect1>
Sumit Bose 461678
@@ -412,6 +423,14 @@ $ adcli update --login-ccache=/tmp/krbcc_123
Sumit Bose 461678
 			<citerefentry><refentrytitle>smb.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
Sumit Bose 461678
 			for details.</para></listitem>
Sumit Bose 461678
 		</varlistentry>
Sumit Bose 461678
+		<varlistentry>
Sumit Bose 461678
+			<term><option>--samba-data-tool=<parameter>/path/to/net</parameter></option></term>
Sumit Bose 461678
+			<listitem><para>If Samba's <command>net</command>
Sumit Bose 461678
+			cannot be found at
Sumit Bose 461678
+			<filename>&samba_data_tool;</filename> this option can
Sumit Bose 461678
+			be used to specific an alternative location with the
Sumit Bose 461678
+			help of an absolute path.</para></listitem>
Sumit Bose 461678
+		</varlistentry>
Sumit Bose 461678
 	</variablelist>
Sumit Bose 461678
 
Sumit Bose 461678
 </refsect1>
Sumit Bose 461678
diff --git a/doc/samba_data_tool_path.xml.in b/doc/samba_data_tool_path.xml.in
Sumit Bose 461678
new file mode 100644
Sumit Bose 461678
index 0000000..a667c57
Sumit Bose 461678
--- /dev/null
Sumit Bose 461678
+++ b/doc/samba_data_tool_path.xml.in
Sumit Bose 461678
@@ -0,0 +1 @@
Sumit Bose 461678
+@SAMBA_DATA_TOOL@
Sumit Bose 461678
diff --git a/library/adenroll.c b/library/adenroll.c
Sumit Bose 461678
index 20731cd..a693049 100644
Sumit Bose 461678
--- a/library/adenroll.c
Sumit Bose 461678
+++ b/library/adenroll.c
Sumit Bose 461678
@@ -42,6 +42,10 @@
Sumit Bose 461678
 #include <stdio.h>
Sumit Bose 461678
 #include <unistd.h>
Sumit Bose 461678
 
Sumit Bose 461678
+#ifndef SAMBA_DATA_TOOL
Sumit Bose 461678
+#define SAMBA_DATA_TOOL "/usr/bin/net"
Sumit Bose 461678
+#endif
Sumit Bose 461678
+
Sumit Bose 461678
 static krb5_enctype v60_later_enctypes[] = {
Sumit Bose 461678
 	ENCTYPE_AES256_CTS_HMAC_SHA1_96,
Sumit Bose 461678
 	ENCTYPE_AES128_CTS_HMAC_SHA1_96,
Sumit Bose 461678
@@ -100,6 +104,7 @@ struct _adcli_enroll {
Sumit Bose 461678
 	int keytab_enctypes_explicit;
Sumit Bose 461678
 	unsigned int computer_password_lifetime;
Sumit Bose 461678
 	int computer_password_lifetime_explicit;
Sumit Bose 461678
+	char *samba_data_tool;
Sumit Bose 461678
 };
Sumit Bose 461678
 
Sumit Bose 461678
 static adcli_result
Sumit Bose 461678
@@ -1537,26 +1542,33 @@ 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
+	char *argv_pw[] = { NULL, "changesecretpw", "-i", "-f", NULL };
Sumit Bose 461678
+	char *argv_sid[] = { NULL, "setdomainsid", NULL, NULL };
Sumit Bose 461678
+
Sumit Bose 461678
+	argv_pw[0] = (char *) adcli_enroll_get_samba_data_tool (enroll);
Sumit Bose 461678
+	if (argv_pw[0] ==NULL) {
Sumit Bose 461678
+		_adcli_err ("Samba data tool not available.");
Sumit Bose 461678
+		return ADCLI_ERR_FAIL;
Sumit Bose 461678
+	}
Sumit Bose 461678
+	argv_sid[0] = argv_pw[0];
Sumit Bose 461678
 
Sumit Bose 461678
-	_adcli_info ("Trying to set Samba secret.\n");
Sumit Bose 461678
+	_adcli_info ("Trying to set Samba secret.");
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
+		_adcli_err ("Failed to set Samba computer account password.");
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
+		_adcli_err ("Domain SID not available.");
Sumit Bose 461678
 	} else {
Sumit Bose 461678
-		_adcli_info ("Trying to set domain SID %s for Samba.\n",
Sumit Bose 461678
+		_adcli_info ("Trying to set domain SID %s for Samba.",
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
+			_adcli_err ("Failed to set Samba domain SID.");
Sumit Bose 461678
 		}
Sumit Bose 461678
 	}
Sumit Bose 461678
 
Sumit Bose 461678
@@ -1951,6 +1963,9 @@ adcli_enroll_new (adcli_conn *conn)
Sumit Bose 461678
 	enroll->os_name = strdup (value);
Sumit Bose 461678
 	return_val_if_fail (enroll->os_name != NULL, NULL);
Sumit Bose 461678
 
Sumit Bose 461678
+	enroll->samba_data_tool = strdup (SAMBA_DATA_TOOL);
Sumit Bose 461678
+	return_val_if_fail (enroll->samba_data_tool != NULL, NULL);
Sumit Bose 461678
+
Sumit Bose 461678
 	return enroll;
Sumit Bose 461678
 }
Sumit Bose 461678
 
Sumit Bose 461678
@@ -1978,6 +1993,7 @@ enroll_free (adcli_enroll *enroll)
Sumit Bose 461678
 	free (enroll->os_name);
Sumit Bose 461678
 	free (enroll->os_version);
Sumit Bose 461678
 	free (enroll->os_service_pack);
Sumit Bose 461678
+	free (enroll->samba_data_tool);
Sumit Bose 461678
 
Sumit Bose 461678
 	free (enroll->user_principal);
Sumit Bose 461678
 	_adcli_strv_free (enroll->service_names);
Sumit Bose 461678
@@ -2343,3 +2359,19 @@ adcli_enroll_set_computer_password_lifetime (adcli_enroll *enroll,
Sumit Bose 461678
 
Sumit Bose 461678
 	enroll->computer_password_lifetime_explicit = 1;
Sumit Bose 461678
 }
Sumit Bose 461678
+
Sumit Bose 461678
+void
Sumit Bose 461678
+adcli_enroll_set_samba_data_tool (adcli_enroll *enroll, const char *value)
Sumit Bose 461678
+{
Sumit Bose 461678
+	return_if_fail (enroll != NULL);
Sumit Bose 461678
+	if (value != NULL && value[0] != '\0') {
Sumit Bose 461678
+		_adcli_str_set (&enroll->samba_data_tool, value);
Sumit Bose 461678
+	}
Sumit Bose 461678
+}
Sumit Bose 461678
+
Sumit Bose 461678
+const char *
Sumit Bose 461678
+adcli_enroll_get_samba_data_tool (adcli_enroll *enroll)
Sumit Bose 461678
+{
Sumit Bose 461678
+	return_val_if_fail (enroll != NULL, NULL);
Sumit Bose 461678
+	return enroll->samba_data_tool;
Sumit Bose 461678
+}
Sumit Bose 461678
diff --git a/library/adenroll.h b/library/adenroll.h
Sumit Bose 461678
index 32c9764..31ca0bc 100644
Sumit Bose 461678
--- a/library/adenroll.h
Sumit Bose 461678
+++ b/library/adenroll.h
Sumit Bose 461678
@@ -141,4 +141,9 @@ const char *       adcli_enroll_get_os_service_pack     (adcli_enroll *enroll);
Sumit Bose 461678
 void               adcli_enroll_set_os_service_pack     (adcli_enroll *enroll,
Sumit Bose 461678
                                                          const char *value);
Sumit Bose 461678
 
Sumit Bose 461678
+void               adcli_enroll_set_samba_data_tool     (adcli_enroll *enroll,
Sumit Bose 461678
+                                                         const char *value);
Sumit Bose 461678
+
Sumit Bose 461678
+const char *       adcli_enroll_get_samba_data_tool     (adcli_enroll *enroll);
Sumit Bose 461678
+
Sumit Bose 461678
 #endif /* ADENROLL_H_ */
Sumit Bose 461678
diff --git a/tools/computer.c b/tools/computer.c
Sumit Bose 461678
index fc646f2..f86548b 100644
Sumit Bose 461678
--- a/tools/computer.c
Sumit Bose 461678
+++ b/tools/computer.c
Sumit Bose 461678
@@ -30,6 +30,7 @@
Sumit Bose 461678
 #include <err.h>
Sumit Bose 461678
 #include <stdio.h>
Sumit Bose 461678
 #include <errno.h>
Sumit Bose 461678
+#include <unistd.h>
Sumit Bose 461678
 
Sumit Bose 461678
 static void
Sumit Bose 461678
 dump_details (adcli_conn *conn,
Sumit Bose 461678
@@ -107,6 +108,7 @@ typedef enum {
Sumit Bose 461678
 	opt_user_principal,
Sumit Bose 461678
 	opt_computer_password_lifetime,
Sumit Bose 461678
 	opt_add_samba_data,
Sumit Bose 461678
+	opt_samba_data_tool,
Sumit Bose 461678
 } Option;
Sumit Bose 461678
 
Sumit Bose 461678
 static adcli_tool_desc common_usages[] = {
Sumit Bose 461678
@@ -145,6 +147,7 @@ static adcli_tool_desc common_usages[] = {
Sumit Bose 461678
 	                     "successful join" },
Sumit Bose 461678
 	{ opt_add_samba_data, "add domain SID and computer account password\n"
Sumit Bose 461678
 	                      "to the Samba specific configuration database" },
Sumit Bose 461678
+	{ opt_samba_data_tool, "Absolute path to the tool used for add-samba-data" },
Sumit Bose 461678
 	{ opt_verbose, "show verbose progress and failure messages", },
Sumit Bose 461678
 	{ 0 },
Sumit Bose 461678
 };
Sumit Bose 461678
@@ -160,6 +163,7 @@ parse_option (Option opt,
Sumit Bose 461678
 	static int stdin_password = 0;
Sumit Bose 461678
 	char *endptr;
Sumit Bose 461678
 	unsigned int lifetime;
Sumit Bose 461678
+	int ret;
Sumit Bose 461678
 
Sumit Bose 461678
 	switch (opt) {
Sumit Bose 461678
 	case opt_login_ccache:
Sumit Bose 461678
@@ -265,6 +269,16 @@ parse_option (Option opt,
Sumit Bose 461678
 
Sumit Bose 461678
 		adcli_enroll_set_computer_password_lifetime (enroll, lifetime);
Sumit Bose 461678
 		return;
Sumit Bose 461678
+	case opt_samba_data_tool:
Sumit Bose 461678
+		errno = 0;
Sumit Bose 461678
+		ret = access (optarg, X_OK);
Sumit Bose 461678
+		if (ret != 0) {
Sumit Bose 461678
+			ret = errno;
Sumit Bose 461678
+			errx (EUSAGE, "Failed to access tool to add Samba data: %s", strerror (ret));
Sumit Bose 461678
+		} else {
Sumit Bose 461678
+			adcli_enroll_set_samba_data_tool (enroll, optarg);
Sumit Bose 461678
+		}
Sumit Bose 461678
+		return;
Sumit Bose 461678
 	case opt_verbose:
Sumit Bose 461678
 		return;
Sumit Bose 461678
 
Sumit Bose 461678
@@ -331,6 +345,7 @@ adcli_tool_computer_join (adcli_conn *conn,
Sumit Bose 461678
 		{ "show-details", no_argument, NULL, opt_show_details },
Sumit Bose 461678
 		{ "show-password", no_argument, NULL, opt_show_password },
Sumit Bose 461678
 		{ "add-samba-data", no_argument, NULL, opt_add_samba_data },
Sumit Bose 461678
+		{ "samba-data-tool", no_argument, NULL, opt_samba_data_tool },
Sumit Bose 461678
 		{ "verbose", no_argument, NULL, opt_verbose },
Sumit Bose 461678
 		{ "help", no_argument, NULL, 'h' },
Sumit Bose 461678
 		{ 0 },
Sumit Bose 461678
@@ -434,6 +449,7 @@ adcli_tool_computer_update (adcli_conn *conn,
Sumit Bose 461678
 		{ "show-details", no_argument, NULL, opt_show_details },
Sumit Bose 461678
 		{ "show-password", no_argument, NULL, opt_show_password },
Sumit Bose 461678
 		{ "add-samba-data", no_argument, NULL, opt_add_samba_data },
Sumit Bose 461678
+		{ "samba-data-tool", no_argument, NULL, opt_samba_data_tool },
Sumit Bose 461678
 		{ "verbose", no_argument, NULL, opt_verbose },
Sumit Bose 461678
 		{ "help", no_argument, NULL, 'h' },
Sumit Bose 461678
 		{ 0 },
Sumit Bose 461678
-- 
Sumit Bose 461678
2.14.4
Sumit Bose 461678