svn commit: samba r18619 - in branches/SAMBA_3_0/source: include rpc_client rpcclient

gd at samba.org gd at samba.org
Mon Sep 18 19:18:30 GMT 2006


Author: gd
Date: 2006-09-18 19:18:29 +0000 (Mon, 18 Sep 2006)
New Revision: 18619

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

Log:
Add rpcclient helper for samr_querydispinfo2|3 for testing.

Guenther

Modified:
   branches/SAMBA_3_0/source/include/rpc_samr.h
   branches/SAMBA_3_0/source/rpc_client/cli_samr.c
   branches/SAMBA_3_0/source/rpcclient/cmd_samr.c


Changeset:
Modified: branches/SAMBA_3_0/source/include/rpc_samr.h
===================================================================
--- branches/SAMBA_3_0/source/include/rpc_samr.h	2006-09-18 19:02:06 UTC (rev 18618)
+++ branches/SAMBA_3_0/source/include/rpc_samr.h	2006-09-18 19:18:29 UTC (rev 18619)
@@ -128,11 +128,11 @@
 #define SAMR_REMOVE_SID_FOREIGN_DOMAIN        0x2d
 #define SAMR_QUERY_DOMAIN_INFO2  0x2e /* looks like an alias for SAMR_QUERY_DOMAIN_INFO */
 #define SAMR_UNKNOWN_2f        0x2f
-#define SAMR_QUERY_DISPINFO3   0x30 /* Alias for SAMR_QUERY_DISPINFO
+#define SAMR_QUERY_DISPINFO2   0x30 /* Alias for SAMR_QUERY_DISPINFO
 				       with info level 3 */
 #define SAMR_UNKNOWN_31        0x31
 #define SAMR_CREATE_USER       0x32
-#define SAMR_QUERY_DISPINFO4   0x33 /* Alias for SAMR_QUERY_DISPINFO
+#define SAMR_QUERY_DISPINFO3   0x33 /* Alias for SAMR_QUERY_DISPINFO
 				       with info level 4 */
 #define SAMR_ADDMULTI_ALIASMEM 0x34
 

Modified: branches/SAMBA_3_0/source/rpc_client/cli_samr.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_client/cli_samr.c	2006-09-18 19:02:06 UTC (rev 18618)
+++ branches/SAMBA_3_0/source/rpc_client/cli_samr.c	2006-09-18 19:18:29 UTC (rev 18619)
@@ -1473,6 +1473,110 @@
 	return result;
 }
 
+
+/* Query display info2 */
+
+NTSTATUS rpccli_samr_query_dispinfo2(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx, 
+				     POLICY_HND *domain_pol, uint32 *start_idx,
+				     uint16 switch_value, uint32 *num_entries,
+				     uint32 max_entries, uint32 max_size,
+				     SAM_DISPINFO_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_DISPINFO q;
+	SAMR_R_QUERY_DISPINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_dispinfo2 for start_idx = %u\n", *start_idx));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	*num_entries = 0;
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_dispinfo(&q, domain_pol, switch_value,
+				   *start_idx, max_entries, max_size);
+
+	r.ctr = ctr;
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_DISPINFO2,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_dispinfo,
+		samr_io_r_query_dispinfo,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+        result = r.status;
+
+	if (!NT_STATUS_IS_OK(result) &&
+	    NT_STATUS_V(result) != NT_STATUS_V(STATUS_MORE_ENTRIES)) {
+		goto done;
+	}
+
+	*num_entries = r.num_entries;
+	*start_idx += r.num_entries;  /* No next_idx in this structure! */
+
+ done:
+	return result;
+}
+
+/* Query display info */
+
+NTSTATUS rpccli_samr_query_dispinfo3(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx, 
+				     POLICY_HND *domain_pol, uint32 *start_idx,
+				     uint16 switch_value, uint32 *num_entries,
+				     uint32 max_entries, uint32 max_size,
+				     SAM_DISPINFO_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_DISPINFO q;
+	SAMR_R_QUERY_DISPINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_dispinfo3 for start_idx = %u\n", *start_idx));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	*num_entries = 0;
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_dispinfo(&q, domain_pol, switch_value,
+				   *start_idx, max_entries, max_size);
+
+	r.ctr = ctr;
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_DISPINFO3,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_dispinfo,
+		samr_io_r_query_dispinfo,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+        result = r.status;
+
+	if (!NT_STATUS_IS_OK(result) &&
+	    NT_STATUS_V(result) != NT_STATUS_V(STATUS_MORE_ENTRIES)) {
+		goto done;
+	}
+
+	*num_entries = r.num_entries;
+	*start_idx += r.num_entries;  /* No next_idx in this structure! */
+
+ done:
+	return result;
+}
+
+
 /* Lookup rids.  Note that NT4 seems to crash if more than ~1000 rids are
    looked up in one packet. */
 

Modified: branches/SAMBA_3_0/source/rpcclient/cmd_samr.c
===================================================================
--- branches/SAMBA_3_0/source/rpcclient/cmd_samr.c	2006-09-18 19:02:06 UTC (rev 18618)
+++ branches/SAMBA_3_0/source/rpcclient/cmd_samr.c	2006-09-18 19:18:29 UTC (rev 18619)
@@ -1185,9 +1185,10 @@
 
 /* Query display info */
 
-static NTSTATUS cmd_samr_query_dispinfo(struct rpc_pipe_client *cli, 
-                                        TALLOC_CTX *mem_ctx,
-                                        int argc, const char **argv) 
+static NTSTATUS cmd_samr_query_dispinfo_int(struct rpc_pipe_client *cli, 
+					    TALLOC_CTX *mem_ctx,
+					    int argc, const char **argv, 
+					    int opcode)
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
@@ -1278,12 +1279,32 @@
 		if (!got_params)
 			get_query_dispinfo_params(
 				loop_count, &max_entries, &max_size);
-		
-		result = rpccli_samr_query_dispinfo(cli, mem_ctx, &domain_pol,
-						 &start_idx, info_level,
-						 &num_entries, max_entries, 
-						 max_size, &ctr);
 
+		switch (opcode) {
+		case SAMR_QUERY_DISPINFO:
+			result = rpccli_samr_query_dispinfo(cli, mem_ctx, &domain_pol,
+							    &start_idx, info_level,
+							    &num_entries, max_entries, 
+							    max_size, &ctr);
+			break;
+		case SAMR_QUERY_DISPINFO2:
+			result = rpccli_samr_query_dispinfo2(cli, mem_ctx, &domain_pol,
+							     &start_idx, info_level,
+							     &num_entries, max_entries, 
+							     max_size, &ctr);
+			break;
+		case SAMR_QUERY_DISPINFO3:
+			result = rpccli_samr_query_dispinfo3(cli, mem_ctx, &domain_pol,
+							     &start_idx, info_level,
+							     &num_entries, max_entries, 
+							     max_size, &ctr);
+			break;
+		default:
+			printf("unknown opcode: %d\n", opcode);
+			return NT_STATUS_INVALID_PARAMETER;
+			break;
+		}
+
 		loop_count++;
 
 		if (NT_STATUS_IS_ERR(result))
@@ -1319,6 +1340,26 @@
 	return result;
 }
 
+static NTSTATUS cmd_samr_query_dispinfo(struct rpc_pipe_client *cli, 
+					TALLOC_CTX *mem_ctx,
+					int argc, const char **argv)
+{
+	return cmd_samr_query_dispinfo_int(cli, mem_ctx, argc, argv, SAMR_QUERY_DISPINFO);
+}
+
+static NTSTATUS cmd_samr_query_dispinfo2(struct rpc_pipe_client *cli, 
+					 TALLOC_CTX *mem_ctx,
+					 int argc, const char **argv) 
+{
+	return cmd_samr_query_dispinfo_int(cli, mem_ctx, argc, argv, SAMR_QUERY_DISPINFO2);
+}
+
+static NTSTATUS cmd_samr_query_dispinfo3(struct rpc_pipe_client *cli, 
+					 TALLOC_CTX *mem_ctx,
+					 int argc, const char **argv) 
+{
+	return cmd_samr_query_dispinfo_int(cli, mem_ctx, argc, argv, SAMR_QUERY_DISPINFO3);
+}
 /* Query domain info */
 
 static NTSTATUS cmd_samr_query_dominfo(struct rpc_pipe_client *cli, 
@@ -2122,6 +2163,8 @@
 	{ "queryaliasmem", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_aliasmem, 	NULL, PI_SAMR, NULL,	"Query alias membership",  "" },
 	{ "deletealias", 	RPC_RTYPE_NTSTATUS, cmd_samr_delete_alias, 	NULL, PI_SAMR, NULL,	"Delete an alias",  "" },
 	{ "querydispinfo", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_dispinfo, 	NULL, PI_SAMR, NULL,	"Query display info",      "" },
+	{ "querydispinfo2", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_dispinfo2, 	NULL, PI_SAMR, NULL,	"Query display info 2",      "" },
+	{ "querydispinfo3", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_dispinfo3, 	NULL, PI_SAMR, NULL,	"Query display info 3",      "" },
 	{ "querydominfo", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_dominfo, 	NULL, PI_SAMR, NULL,	"Query domain info",       "" },
 	{ "enumdomusers",      RPC_RTYPE_NTSTATUS, cmd_samr_enum_dom_users,       NULL, PI_SAMR, NULL,	"Enumerate domain users", "" },
 	{ "enumdomgroups",      RPC_RTYPE_NTSTATUS, cmd_samr_enum_dom_groups,       NULL, PI_SAMR, NULL,	"Enumerate domain groups", "" },



More information about the samba-cvs mailing list