[SCM] Samba Shared Repository - branch master updated - daeb3a190d16a5bc05be63b2b136ebe65d6f6cf7

Volker Lendecke vlendec at samba.org
Sun Dec 14 13:01:09 GMT 2008


The branch, master has been updated
       via  daeb3a190d16a5bc05be63b2b136ebe65d6f6cf7 (commit)
      from  31f157a04b2f26537c9da4aa39bdcdde7b41e64b (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit daeb3a190d16a5bc05be63b2b136ebe65d6f6cf7
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Dec 14 13:06:19 2008 +0100

    Remove the global "cmdline_auth_info" from source3/lib/util.c
    
    This involves changing all our clients, that's why it's so large.

-----------------------------------------------------------------------

Summary of changes:
 source3/client/client.c         |   40 +++++++----
 source3/include/proto.h         |   41 +++++++-----
 source3/lib/popt_common.c       |   59 +++++++++++------
 source3/lib/util.c              |  141 ++++++++++++++++++++++-----------------
 source3/librpc/rpc/dcerpc.c     |    6 ++
 source3/libsmb/clidfs.c         |   13 ++--
 source3/libsmb/libsmb_context.c |   18 +++--
 source3/rpcclient/cmd_spoolss.c |   10 ++-
 source3/rpcclient/rpcclient.c   |   50 +++++++++-----
 source3/utils/smbcacls.c        |   34 ++++++----
 source3/utils/smbcquotas.c      |   32 ++++++---
 source3/utils/smbtree.c         |   22 +++---
 12 files changed, 283 insertions(+), 183 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/client/client.c b/source3/client/client.c
index da78916..c88b918 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -218,13 +218,12 @@ static int readfile(char *b, int n, XFILE *f)
  Send a message.
 ****************************************************************************/
 
-static void send_message(void)
+static void send_message(const char *username)
 {
 	int total_len = 0;
 	int grp_id;
 
-	if (!cli_message_start(cli, desthost,
-				get_cmdline_auth_info_username(), &grp_id)) {
+	if (!cli_message_start(cli, desthost, username, &grp_id)) {
 		d_printf("message start: %s\n", cli_errstr(cli));
 		return;
 	}
@@ -4607,7 +4606,7 @@ static int do_tar_op(const char *base_directory)
  Handle a message operation.
 ****************************************************************************/
 
-static int do_message_op(void)
+static int do_message_op(struct user_auth_info *auth_info)
 {
 	struct sockaddr_storage ss;
 	struct nmb_name called, calling;
@@ -4648,7 +4647,7 @@ static int do_message_op(void)
 		return 1;
 	}
 
-	send_message();
+	send_message(get_cmdline_auth_info_username(auth_info));
 	cli_cm_shutdown();
 
 	return 0;
@@ -4695,6 +4694,7 @@ static int do_message_op(void)
 		POPT_TABLEEND
 	};
 	TALLOC_CTX *frame = talloc_stackframe();
+	struct user_auth_info *auth_info;
 
 	if (!client_set_cur_dir("\\")) {
 		exit(ENOMEM);
@@ -4724,6 +4724,12 @@ static int do_message_op(void)
 
 	load_case_tables();
 
+	auth_info = user_auth_info_init(frame);
+	if (auth_info == NULL) {
+		exit(1);
+	}
+	popt_common_set_auth_info(auth_info);
+
 	/* skip argv(0) */
 	pc = poptGetContext("smbclient", argc, (const char **) argv, long_options, 0);
 	poptSetOtherOptionHelp(pc, "service <password>");
@@ -4751,8 +4757,11 @@ static int do_message_op(void)
 		}
 
 		/* if the service has already been retrieved then check if we have also a password */
-		if (service_opt && (!get_cmdline_auth_info_got_pass()) && poptPeekArg(pc)) {
-			set_cmdline_auth_info_password(poptGetArg(pc));
+		if (service_opt
+		    && (!get_cmdline_auth_info_got_pass(auth_info))
+		    && poptPeekArg(pc)) {
+			set_cmdline_auth_info_password(auth_info,
+						       poptGetArg(pc));
 		}
 
 		switch (opt) {
@@ -4858,8 +4867,11 @@ static int do_message_op(void)
 	}
 
 	/* if the service has already been retrieved then check if we have also a password */
-	if (service_opt && !get_cmdline_auth_info_got_pass() && poptPeekArg(pc)) {
-		set_cmdline_auth_info_password(poptGetArg(pc));
+	if (service_opt
+	    && !get_cmdline_auth_info_got_pass(auth_info)
+	    && poptPeekArg(pc)) {
+		set_cmdline_auth_info_password(auth_info,
+					       poptGetArg(pc));
 	}
 
 	/* check for the -P option */
@@ -4893,8 +4905,8 @@ static int do_message_op(void)
 			argv[0], get_dyn_CONFIGFILE());
 	}
 
-	if (get_cmdline_auth_info_use_machine_account() &&
-	    !set_cmdline_auth_info_machine_account_creds()) {
+	if (get_cmdline_auth_info_use_machine_account(auth_info) &&
+	    !set_cmdline_auth_info_machine_account_creds(auth_info)) {
 		exit(-1);
 	}
 
@@ -4929,7 +4941,7 @@ static int do_message_op(void)
 		calling_name = talloc_strdup(frame, global_myname() );
 	}
 
-	smb_encrypt = get_cmdline_auth_info_smb_encrypt();
+	smb_encrypt = get_cmdline_auth_info_smb_encrypt(auth_info);
 	if (!init_names()) {
 		fprintf(stderr, "init_names() failed\n");
 		exit(1);
@@ -4947,7 +4959,7 @@ static int do_message_op(void)
 
 	/* Store the username and password for dfs support */
 
-	cli_cm_set_credentials();
+	cli_cm_set_credentials(auth_info);
 
 	DEBUG(3,("Client started (version %s).\n", SAMBA_VERSION_STRING));
 
@@ -4980,7 +4992,7 @@ static int do_message_op(void)
 	}
 
 	if (message) {
-		return do_message_op();
+		return do_message_op(auth_info);
 	}
 
 	if (process(base_directory)) {
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 69194ec..2a8f838 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -637,6 +637,7 @@ void pidfile_create(const char *program_name);
 
 /* The following definitions come from lib/popt_common.c  */
 
+void popt_common_set_auth_info(struct user_auth_info *auth_info);
 
 /* The following definitions come from lib/privileges.c  */
 
@@ -1139,22 +1140,28 @@ void gfree_all( void );
 const char *my_netbios_names(int i);
 bool set_netbios_aliases(const char **str_array);
 bool init_names(void);
-const char *get_cmdline_auth_info_username(void);
-void set_cmdline_auth_info_username(const char *username);
-const char *get_cmdline_auth_info_password(void);
-void set_cmdline_auth_info_password(const char *password);
-bool set_cmdline_auth_info_signing_state(const char *arg);
-int get_cmdline_auth_info_signing_state(void);
-void set_cmdline_auth_info_use_kerberos(bool b);
-bool get_cmdline_auth_info_use_kerberos(void);
-void set_cmdline_auth_info_use_krb5_ticket(void);
-void set_cmdline_auth_info_smb_encrypt(void);
-void set_cmdline_auth_info_use_machine_account(void);
-bool get_cmdline_auth_info_got_pass(void);
-bool get_cmdline_auth_info_smb_encrypt(void);
-bool get_cmdline_auth_info_use_machine_account(void);
-bool get_cmdline_auth_info_copy(struct user_auth_info *info);
-bool set_cmdline_auth_info_machine_account_creds(void);
+struct user_auth_info *user_auth_info_init(TALLOC_CTX *mem_ctx);
+const char *get_cmdline_auth_info_username(struct user_auth_info *auth_info);
+void set_cmdline_auth_info_username(struct user_auth_info *auth_info,
+				    const char *username);
+void set_cmdline_auth_info_password(struct user_auth_info *auth_info,
+				    const char *password);
+const char *get_cmdline_auth_info_password(struct user_auth_info *auth_info);
+bool set_cmdline_auth_info_signing_state(struct user_auth_info *auth_info,
+					 const char *arg);
+int get_cmdline_auth_info_signing_state(struct user_auth_info *auth_info);
+void set_cmdline_auth_info_use_kerberos(struct user_auth_info *auth_info,
+					bool b);
+bool get_cmdline_auth_info_use_kerberos(struct user_auth_info *auth_info);
+void set_cmdline_auth_info_use_krb5_ticket(struct user_auth_info *auth_info);
+void set_cmdline_auth_info_smb_encrypt(struct user_auth_info *auth_info);
+void set_cmdline_auth_info_use_machine_account(struct user_auth_info *auth_info);
+bool get_cmdline_auth_info_got_pass(struct user_auth_info *auth_info);
+bool get_cmdline_auth_info_smb_encrypt(struct user_auth_info *auth_info);
+bool get_cmdline_auth_info_use_machine_account(struct user_auth_info *auth_info);
+struct user_auth_info *get_cmdline_auth_info_copy(TALLOC_CTX *mem_ctx,
+						 struct user_auth_info *info);
+bool set_cmdline_auth_info_machine_account_creds(struct user_auth_info *auth_info);
 bool add_gid_to_array_unique(TALLOC_CTX *mem_ctx, gid_t gid,
 			     gid_t **gids, size_t *num_gids);
 const char *get_numlist(const char *p, uint32 **num, int *count);
@@ -2419,7 +2426,7 @@ struct cli_state *cli_cm_open(TALLOC_CTX *ctx,
 				bool force_encrypt);
 void cli_cm_shutdown(void);
 void cli_cm_display(void);
-void cli_cm_set_credentials(void);
+void cli_cm_set_credentials(struct user_auth_info *auth_info);
 void cli_cm_set_port(int port_number);
 void cli_cm_set_dest_name_type(int type);
 void cli_cm_set_signing_state(int state);
diff --git a/source3/lib/popt_common.c b/source3/lib/popt_common.c
index 9e67c52..cad14ec 100644
--- a/source3/lib/popt_common.c
+++ b/source3/lib/popt_common.c
@@ -318,7 +318,7 @@ const struct poptOption popt_common_dynconfig[] = {
  * exit on failure
  * ****************************************************************************/
 
-static void get_password_file(void)
+static void get_password_file(struct user_auth_info *auth_info)
 {
 	int fd = -1;
 	char *p;
@@ -377,13 +377,14 @@ static void get_password_file(void)
 	}
 	SAFE_FREE(spec);
 
-	set_cmdline_auth_info_password(pass);
+	set_cmdline_auth_info_password(auth_info, pass);
 	if (close_it) {
 		close(fd);
 	}
 }
 
-static void get_credentials_file(const char *file)
+static void get_credentials_file(struct user_auth_info *auth_info,
+				 const char *file)
 {
 	XFILE *auth;
 	fstring buf;
@@ -426,9 +427,9 @@ static void get_credentials_file(const char *file)
 			val++;
 
 		if (strwicmp("password", param) == 0) {
-			set_cmdline_auth_info_password(val);
+			set_cmdline_auth_info_password(auth_info, val);
 		} else if (strwicmp("username", param) == 0) {
-			set_cmdline_auth_info_username(val);
+			set_cmdline_auth_info_username(auth_info, val);
 		} else if (strwicmp("domain", param) == 0) {
 			set_global_myworkgroup(val);
 		}
@@ -453,13 +454,16 @@ static void popt_common_credentials_callback(poptContext con,
 					const struct poptOption *opt,
 					const char *arg, const void *data)
 {
+	struct user_auth_info *auth_info = talloc_get_type_abort(
+		*((const char **)data), struct user_auth_info);
 	char *p;
 
 	if (reason == POPT_CALLBACK_REASON_PRE) {
-		set_cmdline_auth_info_username("GUEST");
+		set_cmdline_auth_info_username(auth_info, "GUEST");
 
 		if (getenv("LOGNAME")) {
-			set_cmdline_auth_info_username(getenv("LOGNAME"));
+			set_cmdline_auth_info_username(auth_info,
+						       getenv("LOGNAME"));
 		}
 
 		if (getenv("USER")) {
@@ -467,24 +471,25 @@ static void popt_common_credentials_callback(poptContext con,
 			if (!puser) {
 				exit(ENOMEM);
 			}
-			set_cmdline_auth_info_username(puser);
+			set_cmdline_auth_info_username(auth_info, puser);
 
 			if ((p = strchr_m(puser,'%'))) {
 				size_t len;
 				*p = 0;
 				len = strlen(p+1);
-				set_cmdline_auth_info_password(p+1);
+				set_cmdline_auth_info_password(auth_info, p+1);
 				memset(strchr_m(getenv("USER"),'%')+1,'X',len);
 			}
 			SAFE_FREE(puser);
 		}
 
 		if (getenv("PASSWD")) {
-			set_cmdline_auth_info_password(getenv("PASSWD"));
+			set_cmdline_auth_info_password(auth_info,
+						       getenv("PASSWD"));
 		}
 
 		if (getenv("PASSWD_FD") || getenv("PASSWD_FILE")) {
-			get_password_file();
+			get_password_file(auth_info);
 		}
 
 		return;
@@ -499,19 +504,22 @@ static void popt_common_credentials_callback(poptContext con,
 			if ((lp=strchr_m(puser,'%'))) {
 				size_t len;
 				*lp = 0;
-				set_cmdline_auth_info_username(puser);
-				set_cmdline_auth_info_password(lp+1);
+				set_cmdline_auth_info_username(auth_info,
+							       puser);
+				set_cmdline_auth_info_password(auth_info,
+							       lp+1);
 				len = strlen(lp+1);
 				memset(strchr_m(arg,'%')+1,'X',len);
 			} else {
-				set_cmdline_auth_info_username(puser);
+				set_cmdline_auth_info_username(auth_info,
+							       puser);
 			}
 			SAFE_FREE(puser);
 		}
 		break;
 
 	case 'A':
-		get_credentials_file(arg);
+		get_credentials_file(auth_info, arg);
 		break;
 
 	case 'k':
@@ -519,31 +527,40 @@ static void popt_common_credentials_callback(poptContext con,
 		d_printf("No kerberos support compiled in\n");
 		exit(1);
 #else
-		set_cmdline_auth_info_use_krb5_ticket();
+		set_cmdline_auth_info_use_krb5_ticket(auth_info);
 #endif
 		break;
 
 	case 'S':
-		if (!set_cmdline_auth_info_signing_state(arg)) {
+		if (!set_cmdline_auth_info_signing_state(auth_info, arg)) {
 			fprintf(stderr, "Unknown signing option %s\n", arg );
 			exit(1);
 		}
 		break;
 	case 'P':
-		set_cmdline_auth_info_use_machine_account();
+		set_cmdline_auth_info_use_machine_account(auth_info);
 		break;
 	case 'N':
-		set_cmdline_auth_info_password("");
+		set_cmdline_auth_info_password(auth_info, "");
 		break;
 	case 'e':
-		set_cmdline_auth_info_smb_encrypt();
+		set_cmdline_auth_info_smb_encrypt(auth_info);
 		break;
 
 	}
 }
 
+static struct user_auth_info *global_auth_info;
+
+void popt_common_set_auth_info(struct user_auth_info *auth_info)
+{
+	global_auth_info = auth_info;
+}
+
 struct poptOption popt_common_credentials[] = {
-	{ NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE, (void *)popt_common_credentials_callback },
+	{ NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE,
+	  (void *)popt_common_credentials_callback, 0,
+	  (const char *)&global_auth_info },
 	{ "user", 'U', POPT_ARG_STRING, NULL, 'U', "Set the network username", "USERNAME" },
 	{ "no-pass", 'N', POPT_ARG_NONE, NULL, 'N', "Don't ask for a password" },
 	{ "kerberos", 'k', POPT_ARG_NONE, NULL, 'k', "Use kerberos (active directory) authentication" },
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 074b523..dd23d54 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -280,135 +280,154 @@ bool init_names(void)
   Used mainly in client tools.
 ****************************************************************************/
 
-static struct user_auth_info cmdline_auth_info = {
-	NULL,	/* username */
-	NULL,	/* password */
-	false,	/* got_pass */
-	false,	/* use_kerberos */
-	Undefined, /* signing state */
-	false,	/* smb_encrypt */
-	false   /* use machine account */
-};
-
-const char *get_cmdline_auth_info_username(void)
-{
-	if (!cmdline_auth_info.username) {
+struct user_auth_info *user_auth_info_init(TALLOC_CTX *mem_ctx)
+{
+	struct user_auth_info *result;
+
+	result = TALLOC_ZERO_P(mem_ctx, struct user_auth_info);
+	if (result == NULL) {
+		return NULL;
+	}
+
+	result->signing_state = Undefined;
+	return result;
+}
+
+const char *get_cmdline_auth_info_username(struct user_auth_info *auth_info)
+{
+	if (!auth_info->username) {
 		return "";
 	}
-	return cmdline_auth_info.username;
+	return auth_info->username;
 }
 
-void set_cmdline_auth_info_username(const char *username)
+void set_cmdline_auth_info_username(struct user_auth_info *auth_info,
+				    const char *username)
 {
-	SAFE_FREE(cmdline_auth_info.username);
-	cmdline_auth_info.username = SMB_STRDUP(username);
-	if (!cmdline_auth_info.username) {
+	TALLOC_FREE(auth_info->username);
+	auth_info->username = talloc_strdup(auth_info, username);
+	if (!auth_info->username) {
 		exit(ENOMEM);
 	}
 }
 
-const char *get_cmdline_auth_info_password(void)
+const char *get_cmdline_auth_info_password(struct user_auth_info *auth_info)
 {
-	if (!cmdline_auth_info.password) {
+	if (!auth_info->password) {
 		return "";
 	}
-	return cmdline_auth_info.password;
+	return auth_info->password;
 }
 
-void set_cmdline_auth_info_password(const char *password)
+void set_cmdline_auth_info_password(struct user_auth_info *auth_info,
+				    const char *password)
 {
-	SAFE_FREE(cmdline_auth_info.password);
-	cmdline_auth_info.password = SMB_STRDUP(password);
-	if (!cmdline_auth_info.password) {
+	TALLOC_FREE(auth_info->password);
+	auth_info->password = talloc_strdup(auth_info, password);
+	if (!auth_info->password) {
 		exit(ENOMEM);
 	}
-	cmdline_auth_info.got_pass = true;
+	auth_info->got_pass = true;
 }
 
-bool set_cmdline_auth_info_signing_state(const char *arg)
+bool set_cmdline_auth_info_signing_state(struct user_auth_info *auth_info,
+					 const char *arg)
 {
-	cmdline_auth_info.signing_state = -1;
+	auth_info->signing_state = -1;
 	if (strequal(arg, "off") || strequal(arg, "no") ||
 			strequal(arg, "false")) {
-		cmdline_auth_info.signing_state = false;
+		auth_info->signing_state = false;
 	} else if (strequal(arg, "on") || strequal(arg, "yes") ||
 			strequal(arg, "true") || strequal(arg, "auto")) {
-		cmdline_auth_info.signing_state = true;
+		auth_info->signing_state = true;
 	} else if (strequal(arg, "force") || strequal(arg, "required") ||
 			strequal(arg, "forced")) {
-		cmdline_auth_info.signing_state = Required;
+		auth_info->signing_state = Required;
 	} else {
 		return false;
 	}
 	return true;
 }
 
-int get_cmdline_auth_info_signing_state(void)
+int get_cmdline_auth_info_signing_state(struct user_auth_info *auth_info)
 {
-	return cmdline_auth_info.signing_state;
+	return auth_info->signing_state;
 }
 
-void set_cmdline_auth_info_use_kerberos(bool b)
+void set_cmdline_auth_info_use_kerberos(struct user_auth_info *auth_info,
+					bool b)
 {
-        cmdline_auth_info.use_kerberos = b;
+        auth_info->use_kerberos = b;
 }
 
-bool get_cmdline_auth_info_use_kerberos(void)
+bool get_cmdline_auth_info_use_kerberos(struct user_auth_info *auth_info)
 {
-	return cmdline_auth_info.use_kerberos;
+	return auth_info->use_kerberos;
 }
 
 /* This should only be used by lib/popt_common.c JRA */
-void set_cmdline_auth_info_use_krb5_ticket(void)
+void set_cmdline_auth_info_use_krb5_ticket(struct user_auth_info *auth_info)
 {
-	cmdline_auth_info.use_kerberos = true;
-	cmdline_auth_info.got_pass = true;
+	auth_info->use_kerberos = true;
+	auth_info->got_pass = true;
 }
 
 /* This should only be used by lib/popt_common.c JRA */
-void set_cmdline_auth_info_smb_encrypt(void)
+void set_cmdline_auth_info_smb_encrypt(struct user_auth_info *auth_info)
 {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list