svn commit: samba r15630 - branches/SAMBA_3_0/source branches/SAMBA_3_0/source/utils trunk/source trunk/source/utils

jmcd at samba.org jmcd at samba.org
Tue May 16 01:21:19 GMT 2006


Author: jmcd
Date: 2006-05-16 01:21:16 +0000 (Tue, 16 May 2006)
New Revision: 15630

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15630

Log:
adapt smbclient fix to smbtree to enable long share names

Modified:
   branches/SAMBA_3_0/source/Makefile.in
   branches/SAMBA_3_0/source/utils/smbtree.c
   trunk/source/Makefile.in
   trunk/source/utils/smbtree.c


Changeset:
Modified: branches/SAMBA_3_0/source/Makefile.in
===================================================================
--- branches/SAMBA_3_0/source/Makefile.in	2006-05-16 00:37:13 UTC (rev 15629)
+++ branches/SAMBA_3_0/source/Makefile.in	2006-05-16 01:21:16 UTC (rev 15630)
@@ -477,7 +477,10 @@
 
 SMBTREE_OBJ = utils/smbtree.o $(PARAM_OBJ) \
              $(PROFILE_OBJ) $(LIB_NONSMBD_OBJ) $(LIBSMB_OBJ) \
-	     $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) 
+	     $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) \
+             rpc_client/cli_srvsvc.o rpc_parse/parse_srv.o  \
+             rpc_client/cli_pipe.o rpc_parse/parse_rpc.o \
+             rpc_client/cli_netlogon.o rpc_parse/parse_net.o
 
 TESTPARM_OBJ = utils/testparm.o \
                $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \

Modified: branches/SAMBA_3_0/source/utils/smbtree.c
===================================================================
--- branches/SAMBA_3_0/source/utils/smbtree.c	2006-05-16 00:37:13 UTC (rev 15629)
+++ branches/SAMBA_3_0/source/utils/smbtree.c	2006-05-16 01:21:16 UTC (rev 15630)
@@ -127,6 +127,60 @@
         return True;
 }
 
+static BOOL get_rpc_shares(struct cli_state *cli, 
+			   void (*fn)(const char *, uint32, const char *, void *),
+			   void *state)
+{
+	NTSTATUS status;
+	struct rpc_pipe_client *pipe_hnd;
+	TALLOC_CTX *mem_ctx;
+	ENUM_HND enum_hnd;
+	WERROR werr;
+	SRV_SHARE_INFO_CTR ctr;
+	int i;
+
+	mem_ctx = talloc_new(NULL);
+	if (mem_ctx == NULL) {
+		DEBUG(0, ("talloc_new failed\n"));
+		return False;
+	}
+
+	init_enum_hnd(&enum_hnd, 0);
+
+	pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SRVSVC, &status);
+
+	if (pipe_hnd == NULL) {
+		DEBUG(10, ("Could not connect to srvsvc pipe: %s\n",
+			   nt_errstr(status)));
+		TALLOC_FREE(mem_ctx);
+		return False;
+	}
+
+	werr = rpccli_srvsvc_net_share_enum(pipe_hnd, mem_ctx, 1, &ctr,
+					    0xffffffff, &enum_hnd);
+
+	if (!W_ERROR_IS_OK(werr)) {
+		TALLOC_FREE(mem_ctx);
+		cli_rpc_pipe_close(pipe_hnd);
+		return False;
+	}
+
+	for (i=0; i<ctr.num_entries; i++) {
+		SRV_SHARE_INFO_1 *info = &ctr.share.info1[i];
+		char *name, *comment;
+		name = rpcstr_pull_unistr2_talloc(
+			mem_ctx, &info->info_1_str.uni_netname);
+		comment = rpcstr_pull_unistr2_talloc(
+			mem_ctx, &info->info_1_str.uni_remark);
+		fn(name, info->info_1.type, comment, state);
+	}
+
+	TALLOC_FREE(mem_ctx);
+	cli_rpc_pipe_close(pipe_hnd);
+	return True;
+}
+
+
 static BOOL get_shares(char *server_name, struct user_auth_info *user_info)
 {
         struct cli_state *cli;
@@ -134,6 +188,9 @@
         if (!(cli = get_ipc_connect(server_name, NULL, user_info)))
                 return False;
 
+	if (get_rpc_shares(cli, add_name, &shares))
+		return True;
+	
         if (!cli_RNetShareEnum(cli, add_name, &shares))
                 return False;
 

Modified: trunk/source/Makefile.in
===================================================================
--- trunk/source/Makefile.in	2006-05-16 00:37:13 UTC (rev 15629)
+++ trunk/source/Makefile.in	2006-05-16 01:21:16 UTC (rev 15630)
@@ -490,7 +490,10 @@
 
 SMBTREE_OBJ = utils/smbtree.o $(PARAM_OBJ) \
              $(PROFILE_OBJ) $(LIB_NONSMBD_OBJ) $(LIBSMB_OBJ) \
-	     $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) 
+	     $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) \
+             rpc_client/cli_srvsvc.o rpc_parse/parse_srv.o  \
+             rpc_client/cli_pipe.o rpc_parse/parse_rpc.o \
+             rpc_client/cli_netlogon.o rpc_parse/parse_net.o
 
 TESTPARM_OBJ = utils/testparm.o \
                $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \

Modified: trunk/source/utils/smbtree.c
===================================================================
--- trunk/source/utils/smbtree.c	2006-05-16 00:37:13 UTC (rev 15629)
+++ trunk/source/utils/smbtree.c	2006-05-16 01:21:16 UTC (rev 15630)
@@ -127,6 +127,60 @@
         return True;
 }
 
+static BOOL get_rpc_shares(struct cli_state *cli, 
+			   void (*fn)(const char *, uint32, const char *, void *),
+			   void *state)
+{
+	NTSTATUS status;
+	struct rpc_pipe_client *pipe_hnd;
+	TALLOC_CTX *mem_ctx;
+	ENUM_HND enum_hnd;
+	WERROR werr;
+	SRV_SHARE_INFO_CTR ctr;
+	int i;
+
+	mem_ctx = talloc_new(NULL);
+	if (mem_ctx == NULL) {
+		DEBUG(0, ("talloc_new failed\n"));
+		return False;
+	}
+
+	init_enum_hnd(&enum_hnd, 0);
+
+	pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SRVSVC, &status);
+
+	if (pipe_hnd == NULL) {
+		DEBUG(10, ("Could not connect to srvsvc pipe: %s\n",
+			   nt_errstr(status)));
+		TALLOC_FREE(mem_ctx);
+		return False;
+	}
+
+	werr = rpccli_srvsvc_net_share_enum(pipe_hnd, mem_ctx, 1, &ctr,
+					    0xffffffff, &enum_hnd);
+
+	if (!W_ERROR_IS_OK(werr)) {
+		TALLOC_FREE(mem_ctx);
+		cli_rpc_pipe_close(pipe_hnd);
+		return False;
+	}
+
+	for (i=0; i<ctr.num_entries; i++) {
+		SRV_SHARE_INFO_1 *info = &ctr.share.info1[i];
+		char *name, *comment;
+		name = rpcstr_pull_unistr2_talloc(
+			mem_ctx, &info->info_1_str.uni_netname);
+		comment = rpcstr_pull_unistr2_talloc(
+			mem_ctx, &info->info_1_str.uni_remark);
+		fn(name, info->info_1.type, comment, state);
+	}
+
+	TALLOC_FREE(mem_ctx);
+	cli_rpc_pipe_close(pipe_hnd);
+	return True;
+}
+
+
 static BOOL get_shares(char *server_name, struct user_auth_info *user_info)
 {
         struct cli_state *cli;
@@ -134,6 +188,9 @@
         if (!(cli = get_ipc_connect(server_name, NULL, user_info)))
                 return False;
 
+	if (get_rpc_shares(cli, add_name, &shares))
+		return True;
+	
         if (!cli_RNetShareEnum(cli, add_name, &shares))
                 return False;
 



More information about the samba-cvs mailing list