[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-2390-gef0184d

Kai Blin kai at samba.org
Sat May 10 07:23:05 GMT 2008


The branch, v3-3-test has been updated
       via  ef0184d580500734fc7af51e1c790b075180a3d0 (commit)
       via  1e9319cf88b65a2a8d4f5099a1fe5297e405ed2e (commit)
       via  4dcce8b653671c8ce907f8353df1db8a5c8f8e19 (commit)
       via  e3470e9a1b19c239d6fa576f8c8c1a5a5c3b5d3c (commit)
      from  66c4d58f38557df618f026ddb661190dc02af719 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit ef0184d580500734fc7af51e1c790b075180a3d0
Author: Kai Blin <kai at samba.org>
Date:   Thu May 8 11:23:38 2008 +0200

    net: more whitespace cleanup

commit 1e9319cf88b65a2a8d4f5099a1fe5297e405ed2e
Author: Kai Blin <kai at samba.org>
Date:   Fri May 9 23:22:12 2008 +0200

    net: Remove globals

commit 4dcce8b653671c8ce907f8353df1db8a5c8f8e19
Author: Kai Blin <kai at samba.org>
Date:   Thu May 8 09:14:16 2008 +0200

    net: Some whitespace clean-up.

commit e3470e9a1b19c239d6fa576f8c8c1a5a5c3b5d3c
Author: Kai Blin <kai at samba.org>
Date:   Fri May 9 22:50:04 2008 +0200

    net: Fix usage string.

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

Summary of changes:
 source/include/includes.h       |    6 +-
 source/utils/net.c              |  462 +++++++-------
 source/utils/net.h              |  108 ++--
 source/utils/net_ads.c          |  351 +++++-----
 source/utils/net_ads_gpo.c      |   42 +-
 source/utils/net_cache.c        |   90 ++--
 source/utils/net_conf.c         |  147 +++--
 source/utils/net_dom.c          |   66 +-
 source/utils/net_groupmap.c     |  137 ++--
 source/utils/net_help.c         |   54 +-
 source/utils/net_idmap.c        |   35 +-
 source/utils/net_lookup.c       |   44 +-
 source/utils/net_rap.c          |  427 ++++++------
 source/utils/net_registry.c     |   25 +-
 source/utils/net_rpc.c          | 1400 +++++++++++++++++++++------------------
 source/utils/net_rpc_audit.c    |   47 +-
 source/utils/net_rpc_join.c     |   35 +-
 source/utils/net_rpc_printer.c  |  624 +++++++++---------
 source/utils/net_rpc_registry.c |  137 +++--
 source/utils/net_rpc_rights.c   |  140 ++--
 source/utils/net_rpc_samsync.c  |   12 +-
 source/utils/net_rpc_service.c  |   50 +-
 source/utils/net_rpc_sh_acct.c  |   92 ++-
 source/utils/net_rpc_shell.c    |   45 +-
 source/utils/net_sam.c          |  163 +++--
 source/utils/net_status.c       |   32 +-
 source/utils/net_time.c         |   46 +-
 source/utils/net_usershare.c    |   77 ++-
 source/utils/net_util.c         |    3 +-
 source/utils/netlookup.c        |   21 +-
 30 files changed, 2606 insertions(+), 2312 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/includes.h b/source/include/includes.h
index 70e1b48..d9c699a 100644
--- a/source/include/includes.h
+++ b/source/include/includes.h
@@ -727,14 +727,16 @@ typedef char fstring[FSTRING_LEN];
 #include "lib/smbconf/smbconf.h"
 
 /* used in net.c */
+struct net_context;
+
 struct functable {
 	const char *funcname;
-	int (*fn)(int argc, const char **argv);
+	int (*fn)(struct net_context *c, int argc, const char **argv);
 };
 
 struct functable2 {
 	const char *funcname;
-	int (*fn)(int argc, const char **argv);
+	int (*fn)(struct net_context *c, int argc, const char **argv);
 	const char *helptext;
 };
 
diff --git a/source/utils/net.c b/source/utils/net.c
index c4b31d4..db7f6c0 100644
--- a/source/utils/net.c
+++ b/source/utils/net.c
@@ -1,29 +1,33 @@
-/* 
-   Samba Unix/Linux SMB client library 
-   Distributed SMB/CIFS Server Management Utility 
+/*
+   Samba Unix/Linux SMB client library
+   Distributed SMB/CIFS Server Management Utility
    Copyright (C) 2001 Steve French  (sfrench at us.ibm.com)
    Copyright (C) 2001 Jim McDonough (jmcd at us.ibm.com)
    Copyright (C) 2001 Andrew Tridgell (tridge at samba.org)
    Copyright (C) 2001 Andrew Bartlett (abartlet at samba.org)
+   Copyright (C) 2008 Kai Blin (kai at samba.org)
 
    Originally written by Steve and Jim. Largely rewritten by tridge in
    November 2001.
 
    Reworked again by abartlet in December 2001
 
+   Another overhaul, moving functionality into plug-ins loaded on demand by Kai
+   in May 2008.
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
- 
+
 /*****************************************************/
 /*                                                   */
 /*   Distributed SMB/CIFS Server Management Utility  */
@@ -50,50 +54,11 @@
 #define YES_STRING              "Yes"
 #define NO_STRING               "No"
 
-/************************************************************************************/
-/*                       end of internationalization section                        */
-/************************************************************************************/
-
-/* Yes, these buggers are globals.... */
-const char *opt_requester_name = NULL;
-const char *opt_host = NULL;
-const char *opt_password = NULL;
-const char *opt_user_name = NULL;
-bool opt_user_specified = False;
-const char *opt_workgroup = NULL;
-int opt_long_list_entries = 0;
-int opt_reboot = 0;
-int opt_force = 0;
-int opt_stdin = 0;
-int opt_port = 0;
-int opt_verbose = 0;
-int opt_maxusers = -1;
-const char *opt_comment = "";
-const char *opt_container = NULL;
-int opt_flags = -1;
-int opt_timeout = 0;
-const char *opt_target_workgroup = NULL;
-int opt_machine_pass = 0;
-int opt_localgroup = False;
-int opt_domaingroup = False;
-static int do_talloc_report=False;
-const char *opt_newntname = "";
-int opt_rid = 0;
-int opt_acls = 0;
-int opt_attrs = 0;
-int opt_timestamps = 0;
-const char *opt_exclude = NULL;
-const char *opt_destination = NULL;
-int opt_testmode = False;
-
-int opt_have_ip = False;
-struct sockaddr_storage opt_dest_ip;
-bool smb_encrypt;
-struct libnetapi_ctx *netapi_ctx = NULL;
-
-extern bool AllowDebugChange;
-
-uint32 get_sec_channel_type(const char *param) 
+/***********************************************************************/
+/* end of internationalization section                                 */
+/***********************************************************************/
+
+uint32 get_sec_channel_type(const char *param)
 {
 	if (!(param && *param)) {
 		return get_default_sec_channel();
@@ -104,7 +69,7 @@ uint32 get_sec_channel_type(const char *param)
 			return SEC_CHAN_BDC;
 		} else if (strequal(param, "MEMBER")) {
 			return SEC_CHAN_WKSTA;
-#if 0			
+#if 0
 		} else if (strequal(param, "DOMAIN")) {
 			return SEC_CHAN_DOMAIN;
 #endif
@@ -116,37 +81,39 @@ uint32 get_sec_channel_type(const char *param)
 
 /*
   run a function from a function table. If not found then
-  call the specified usage function 
+  call the specified usage function
 */
-int net_run_function(int argc, const char **argv, struct functable *table, 
-		     int (*usage_fn)(int argc, const char **argv))
+int net_run_function(struct net_context *c, int argc, const char **argv,
+		     struct functable *table,
+		     int (*usage_fn)(struct net_context *c,
+				     int argc, const char **argv))
 {
 	int i;
-	
+
 	if (argc < 1) {
 		d_printf("\nUsage: \n");
-		return usage_fn(argc, argv);
+		return usage_fn(c, argc, argv);
 	}
 	for (i=0; table[i].funcname; i++) {
 		if (StrCaseCmp(argv[0], table[i].funcname) == 0)
-			return table[i].fn(argc-1, argv+1);
+			return table[i].fn(c, argc-1, argv+1);
 	}
 	d_fprintf(stderr, "No command: %s\n", argv[0]);
-	return usage_fn(argc, argv);
+	return usage_fn(c, argc, argv);
 }
 
 /*
  * run a function from a function table.
  */
-int net_run_function2(int argc, const char **argv, const char *whoami,
-		      struct functable2 *table)
+int net_run_function2(struct net_context *c, int argc, const char **argv,
+		      const char *whoami, struct functable2 *table)
 {
 	int i;
 
 	if (argc != 0) {
 		for (i=0; table[i].funcname; i++) {
 			if (StrCaseCmp(argv[0], table[i].funcname) == 0)
-				return table[i].fn(argc-1, argv+1);
+				return table[i].fn(c, argc-1, argv+1);
 		}
 	}
 
@@ -162,7 +129,8 @@ int net_run_function2(int argc, const char **argv, const char *whoami,
  Connect to \\server\service.
 ****************************************************************************/
 
-NTSTATUS connect_to_service(struct cli_state **c,
+NTSTATUS connect_to_service(struct net_context *c,
+					struct cli_state **cli_ctx,
 					struct sockaddr_storage *server_ss,
 					const char *server_name,
 					const char *service_name,
@@ -170,16 +138,16 @@ NTSTATUS connect_to_service(struct cli_state **c,
 {
 	NTSTATUS nt_status;
 
-	opt_password = net_prompt_pass(opt_user_name);
-	if (!opt_password) {
+	c->opt_password = net_prompt_pass(c, c->opt_user_name);
+	if (!c->opt_password) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	nt_status = cli_full_connection(c, NULL, server_name,
-					server_ss, opt_port,
+	nt_status = cli_full_connection(cli_ctx, NULL, server_name,
+					server_ss, c->opt_port,
 					service_name, service_type,
-					opt_user_name, opt_workgroup,
-					opt_password, 0, Undefined, NULL);
+					c->opt_user_name, c->opt_workgroup,
+					c->opt_password, 0, Undefined, NULL);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		d_fprintf(stderr, "Could not connect to server %s\n", server_name);
 
@@ -199,11 +167,11 @@ NTSTATUS connect_to_service(struct cli_state **c,
 		return nt_status;
 	}
 
-	if (smb_encrypt) {
-		nt_status = cli_force_encryption(*c,
-					opt_user_name,
-					opt_password,
-					opt_workgroup);
+	if (c->smb_encrypt) {
+		nt_status = cli_force_encryption(*cli_ctx,
+					c->opt_user_name,
+					c->opt_password,
+					c->opt_workgroup);
 
 		if (NT_STATUS_EQUAL(nt_status,NT_STATUS_NOT_SUPPORTED)) {
 			d_printf("Encryption required and "
@@ -224,8 +192,8 @@ NTSTATUS connect_to_service(struct cli_state **c,
 		}
 
 		if (!NT_STATUS_IS_OK(nt_status)) {
-			cli_shutdown(*c);
-			*c = NULL;
+			cli_shutdown(*cli_ctx);
+			*cli_ctx = NULL;
 		}
 	}
 
@@ -236,25 +204,28 @@ NTSTATUS connect_to_service(struct cli_state **c,
  Connect to \\server\ipc$.
 ****************************************************************************/
 
-NTSTATUS connect_to_ipc(struct cli_state **c,
+NTSTATUS connect_to_ipc(struct net_context *c,
+			struct cli_state **cli_ctx,
 			struct sockaddr_storage *server_ss,
 			const char *server_name)
 {
-	return connect_to_service(c, server_ss, server_name, "IPC$", "IPC");
+	return connect_to_service(c, cli_ctx, server_ss, server_name, "IPC$",
+				  "IPC");
 }
 
 /****************************************************************************
  Connect to \\server\ipc$ anonymously.
 ****************************************************************************/
 
-NTSTATUS connect_to_ipc_anonymous(struct cli_state **c,
+NTSTATUS connect_to_ipc_anonymous(struct net_context *c,
+				struct cli_state **cli_ctx,
 				struct sockaddr_storage *server_ss,
 				const char *server_name)
 {
 	NTSTATUS nt_status;
 
-	nt_status = cli_full_connection(c, opt_requester_name, server_name,
-					server_ss, opt_port,
+	nt_status = cli_full_connection(cli_ctx, c->opt_requester_name,
+					server_name, server_ss, c->opt_port,
 					"IPC$", "IPC",
 					"", "",
 					"", 0, Undefined, NULL);
@@ -292,28 +263,31 @@ static char *get_user_and_realm(const char *username)
  Connect to \\server\ipc$ using KRB5.
 ****************************************************************************/
 
-NTSTATUS connect_to_ipc_krb5(struct cli_state **c,
+NTSTATUS connect_to_ipc_krb5(struct net_context *c,
+			struct cli_state **cli_ctx,
 			struct sockaddr_storage *server_ss,
 			const char *server_name)
 {
 	NTSTATUS nt_status;
 	char *user_and_realm = NULL;
 
-	opt_password = net_prompt_pass(opt_user_name);
-	if (!opt_password) {
+	/* FIXME: Should get existing kerberos ticket if possible. */
+	c->opt_password = net_prompt_pass(c, c->opt_user_name);
+	if (!c->opt_password) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	user_and_realm = get_user_and_realm(opt_user_name);
+	user_and_realm = get_user_and_realm(c->opt_user_name);
 	if (!user_and_realm) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	nt_status = cli_full_connection(c, NULL, server_name,
-					server_ss, opt_port,
+	nt_status = cli_full_connection(cli_ctx, NULL, server_name,
+					server_ss, c->opt_port,
 					"IPC$", "IPC",
-					user_and_realm, opt_workgroup,
-					opt_password, CLI_FULL_CONNECTION_USE_KERBEROS, 
+					user_and_realm, c->opt_workgroup,
+					c->opt_password,
+					CLI_FULL_CONNECTION_USE_KERBEROS,
 					Undefined, NULL);
 
 	SAFE_FREE(user_and_realm);
@@ -323,15 +297,15 @@ NTSTATUS connect_to_ipc_krb5(struct cli_state **c,
 		return nt_status;
 	}
 
-        if (smb_encrypt) {
-		nt_status = cli_cm_force_encryption(*c,
+        if (c->smb_encrypt) {
+		nt_status = cli_cm_force_encryption(*cli_ctx,
 					user_and_realm,
-					opt_password,
-					opt_workgroup,
+					c->opt_password,
+					c->opt_workgroup,
                                         "IPC$");
 		if (!NT_STATUS_IS_OK(nt_status)) {
-			cli_shutdown(*c);
-			*c = NULL;
+			cli_shutdown(*cli_ctx);
+			*cli_ctx = NULL;
 		}
 	}
 
@@ -341,13 +315,14 @@ NTSTATUS connect_to_ipc_krb5(struct cli_state **c,
 /**
  * Connect a server and open a given pipe
  *
- * @param cli_dst		A cli_state 
+ * @param cli_dst		A cli_state
  * @param pipe			The pipe to open
  * @param got_pipe		boolean that stores if we got a pipe
  *
  * @return Normal NTSTATUS return.
  **/
-NTSTATUS connect_dst_pipe(struct cli_state **cli_dst, struct rpc_pipe_client **pp_pipe_hnd, int pipe_num)
+NTSTATUS connect_dst_pipe(struct net_context *c, struct cli_state **cli_dst,
+			  struct rpc_pipe_client **pp_pipe_hnd, int pipe_num)
 {
 	NTSTATUS nt_status;
 	char *server_name = SMB_STRDUP("127.0.0.1");
@@ -358,15 +333,15 @@ NTSTATUS connect_dst_pipe(struct cli_state **cli_dst, struct rpc_pipe_client **p
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (opt_destination) {
+	if (c->opt_destination) {
 		SAFE_FREE(server_name);
-		if ((server_name = SMB_STRDUP(opt_destination)) == NULL) {
+		if ((server_name = SMB_STRDUP(c->opt_destination)) == NULL) {
 			return NT_STATUS_NO_MEMORY;
 		}
 	}
 
 	/* make a connection to a named pipe */
-	nt_status = connect_to_ipc(&cli_tmp, NULL, server_name);
+	nt_status = connect_to_ipc(c, &cli_tmp, NULL, server_name);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		SAFE_FREE(server_name);
 		return nt_status;
@@ -391,7 +366,7 @@ NTSTATUS connect_dst_pipe(struct cli_state **cli_dst, struct rpc_pipe_client **p
  Use the local machine account (krb) and password for this session.
 ****************************************************************************/
 
-int net_use_krb_machine_account(void) 
+int net_use_krb_machine_account(struct net_context *c)
 {
 	char *user_name = NULL;
 
@@ -400,11 +375,12 @@ int net_use_krb_machine_account(void)
 		exit(1);
 	}
 
-	opt_password = secrets_fetch_machine_password(opt_target_workgroup, NULL, NULL);
+	c->opt_password = secrets_fetch_machine_password(
+				c->opt_target_workgroup, NULL, NULL);
 	if (asprintf(&user_name, "%s$@%s", global_myname(), lp_realm()) == -1) {
 		return -1;
 	}
-	opt_user_name = user_name;
+	c->opt_user_name = user_name;
 	return 0;
 }
 
@@ -412,7 +388,7 @@ int net_use_krb_machine_account(void)
  Use the machine account name and password for this session.
 ****************************************************************************/
 
-int net_use_machine_account(void)
+int net_use_machine_account(struct net_context *c)
 {
 	char *user_name = NULL;
 
@@ -421,30 +397,32 @@ int net_use_machine_account(void)
 		exit(1);
 	}
 
-	opt_password = secrets_fetch_machine_password(opt_target_workgroup, NULL, NULL);
+	c->opt_password = secrets_fetch_machine_password(
+				c->opt_target_workgroup, NULL, NULL);
 	if (asprintf(&user_name, "%s$", global_myname()) == -1) {
 		return -1;
 	}
-	opt_user_name = user_name;
+	c->opt_user_name = user_name;
 	return 0;
 }
 
-bool net_find_server(const char *domain,
+bool net_find_server(struct net_context *c,
+			const char *domain,
 			unsigned flags,
 			struct sockaddr_storage *server_ss,
 			char **server_name)
 {
-	const char *d = domain ? domain : opt_target_workgroup;
+	const char *d = domain ? domain : c->opt_target_workgroup;
 
-	if (opt_host) {
-		*server_name = SMB_STRDUP(opt_host);
+	if (c->opt_host) {
+		*server_name = SMB_STRDUP(c->opt_host);
 	}
 
-	if (opt_have_ip) {
-		*server_ss = opt_dest_ip;
+	if (c->opt_have_ip) {
+		*server_ss = c->opt_dest_ip;
 		if (!*server_name) {
 			char addr[INET6_ADDRSTRLEN];
-			print_sockaddr(addr, sizeof(addr), &opt_dest_ip);
+			print_sockaddr(addr, sizeof(addr), &c->opt_dest_ip);
 			*server_name = SMB_STRDUP(addr);
 		}
 	} else if (*server_name) {
@@ -530,14 +508,16 @@ bool net_find_pdc(struct sockaddr_storage *server_ss,
 	return true;
 }
 
-NTSTATUS net_make_ipc_connection(unsigned flags, struct cli_state **pcli)
+NTSTATUS net_make_ipc_connection(struct net_context *c, unsigned flags,
+				 struct cli_state **pcli)
 {
-	return net_make_ipc_connection_ex(NULL, NULL, NULL, flags, pcli);
+	return net_make_ipc_connection_ex(c, NULL, NULL, NULL, flags, pcli);
 }
 
-NTSTATUS net_make_ipc_connection_ex(const char *domain, const char *server,
-                                    struct sockaddr_storage *pss, unsigned flags,
-				    struct cli_state **pcli)
+NTSTATUS net_make_ipc_connection_ex(struct net_context *c ,const char *domain,
+				    const char *server,
+				    struct sockaddr_storage *pss,
+				    unsigned flags, struct cli_state **pcli)
 {
 	char *server_name = NULL;
 	struct sockaddr_storage server_ss;
@@ -545,7 +525,8 @@ NTSTATUS net_make_ipc_connection_ex(const char *domain, const char *server,
 	NTSTATUS nt_status;
 
 	if ( !server || !pss ) {
-		if (!net_find_server(domain, flags, &server_ss, &server_name)) {
+		if (!net_find_server(c, domain, flags, &server_ss,
+				     &server_name)) {
 			d_fprintf(stderr, "Unable to find a suitable server\n");
 			nt_status = NT_STATUS_UNSUCCESSFUL;
 			goto done;
@@ -556,9 +537,11 @@ NTSTATUS net_make_ipc_connection_ex(const char *domain, const char *server,
 	}
 
 	if (flags & NET_FLAGS_ANONYMOUS) {
-		nt_status = connect_to_ipc_anonymous(&cli, &server_ss, server_name);
+		nt_status = connect_to_ipc_anonymous(c, &cli, &server_ss,
+						     server_name);
 	} else {
-		nt_status = connect_to_ipc(&cli, &server_ss, server_name);
+		nt_status = connect_to_ipc(c, &cli, &server_ss,
+					   server_name);
 	}
 
 	/* store the server in the affinity cache if it was a PDC */
@@ -580,46 +563,46 @@ done:
 	return nt_status;
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list