[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-2103-g4521f31

Günther Deschner gd at samba.org
Tue Feb 12 10:40:12 GMT 2008


The branch, v3-2-test has been updated
       via  4521f31a727550aae2b5eb6304c8d25e68326147 (commit)
       via  bcf2cd324c2898bda38515036a205c8d0982494f (commit)
      from  e76c350dabae421c56c92decf413161e54549c10 (commit)

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


- Log -----------------------------------------------------------------
commit 4521f31a727550aae2b5eb6304c8d25e68326147
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 12 11:38:31 2008 +0100

    Remove unused marshalling for SAMR_ENUM_DOM_USERS.
    
    Guenther

commit bcf2cd324c2898bda38515036a205c8d0982494f
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 12 11:36:33 2008 +0100

    Use rpccli_samr_EnumDomainUsers in net and rpcclient.
    
    Guenther

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

Summary of changes:
 source/include/rpc_samr.h     |   34 ----------
 source/rpc_client/cli_samr.c  |   86 -------------------------
 source/rpc_parse/parse_samr.c |  139 -----------------------------------------
 source/rpcclient/cmd_samr.c   |   18 +++--
 source/utils/net_rpc.c        |   40 +++++++-----
 5 files changed, 33 insertions(+), 284 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h
index 4c7b334..6fa4917 100644
--- a/source/include/rpc_samr.h
+++ b/source/include/rpc_samr.h
@@ -457,40 +457,6 @@ typedef struct samr_entry_info
 
 } SAM_ENTRY;
 
-/* SAMR_Q_ENUM_DOM_USERS - SAM rids and names */
-typedef struct q_samr_enum_dom_users_info
-{
-	POLICY_HND pol;          /* policy handle */
-
-	uint32 start_idx;   /* number of values (0 indicates unlimited?) */
-	uint32 acb_mask;          /* 0x0000 indicates all */
-
-	uint32 max_size;              /* 0x0000 ffff */
-
-} SAMR_Q_ENUM_DOM_USERS;
-
-
-/* SAMR_R_ENUM_DOM_USERS - SAM rids and names */
-typedef struct r_samr_enum_dom_users_info
-{
-	uint32 next_idx;     /* next starting index required for enum */
-	uint32 ptr_entries1;  
-
-	uint32 num_entries2;
-	uint32 ptr_entries2;
-
-	uint32 num_entries3;
-
-	SAM_ENTRY *sam;
-	UNISTR2 *uni_acct_name;
-
-	uint32 num_entries4;
-
-	NTSTATUS status;
-
-} SAMR_R_ENUM_DOM_USERS;
-
-
 /* SAMR_Q_ENUM_DOM_GROUPS - SAM rids and names */
 typedef struct q_samr_enum_dom_groups_info
 {
diff --git a/source/rpc_client/cli_samr.c b/source/rpc_client/cli_samr.c
index 54bfafe..4a2ce4e 100644
--- a/source/rpc_client/cli_samr.c
+++ b/source/rpc_client/cli_samr.c
@@ -64,92 +64,6 @@ NTSTATUS rpccli_samr_query_userinfo(struct rpc_pipe_client *cli,
 	return result;
 }
 
-/**
- * Enumerate domain users
- *
- * @param cli client state structure
- * @param mem_ctx talloc context
- * @param pol opened domain policy handle
- * @param start_idx starting index of enumeration, returns context for
-                    next enumeration
- * @param acb_mask account control bit mask (to enumerate some particular
- *                 kind of accounts)
- * @param size max acceptable size of response
- * @param dom_users returned array of domain user names
- * @param rids returned array of domain user RIDs
- * @param num_dom_users numer returned entries
- * 
- * @return NTSTATUS returned in rpc response
- **/
-
-NTSTATUS rpccli_samr_enum_dom_users(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
-                                 POLICY_HND *pol, uint32 *start_idx, uint32 acb_mask,
-                                 uint32 size, char ***dom_users, uint32 **rids,
-                                 uint32 *num_dom_users)
-{
-	prs_struct qbuf;
-	prs_struct rbuf;
-	SAMR_Q_ENUM_DOM_USERS q;
-	SAMR_R_ENUM_DOM_USERS r;
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	int i;
-	
-	DEBUG(10,("cli_samr_enum_dom_users starting at index %u\n", (unsigned int)*start_idx));
-
-	ZERO_STRUCT(q);
-	ZERO_STRUCT(r);
-	
-	/* always init this */
-	*num_dom_users = 0;
-	
-	/* Fill query structure with parameters */
-
-	init_samr_q_enum_dom_users(&q, pol, *start_idx, acb_mask, size);
-	
-	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_ENUM_DOM_USERS,
-		q, r,
-		qbuf, rbuf,
-		samr_io_q_enum_dom_users,
-		samr_io_r_enum_dom_users,
-		NT_STATUS_UNSUCCESSFUL); 
-
-	result = r.status;
-
-	if (!NT_STATUS_IS_OK(result) &&
-	    NT_STATUS_V(result) != NT_STATUS_V(STATUS_MORE_ENTRIES))
-		goto done;
-	
-	*start_idx = r.next_idx;
-	*num_dom_users = r.num_entries2;
-
-	if (r.num_entries2) {
-		/* allocate memory needed to return received data */	
-		*rids = TALLOC_ARRAY(mem_ctx, uint32, r.num_entries2);
-		if (!*rids) {
-			DEBUG(0, ("Error in cli_samr_enum_dom_users(): out of memory\n"));
-			return NT_STATUS_NO_MEMORY;
-		}
-		
-		*dom_users = TALLOC_ARRAY(mem_ctx, char*, r.num_entries2);
-		if (!*dom_users) {
-			DEBUG(0, ("Error in cli_samr_enum_dom_users(): out of memory\n"));
-			return NT_STATUS_NO_MEMORY;
-		}
-		
-		/* fill output buffers with rpc response */
-		for (i = 0; i < r.num_entries2; i++) {
-			fstring conv_buf;
-			
-			(*rids)[i] = r.sam[i].rid;
-			unistr2_to_ascii(conv_buf, &(r.uni_acct_name[i]), sizeof(conv_buf));
-			(*dom_users)[i] = talloc_strdup(mem_ctx, conv_buf);
-		}
-	}
-	
-done:
-	return result;
-}
-
 /* Enumerate domain groups */
 
 NTSTATUS rpccli_samr_enum_dom_groups(struct rpc_pipe_client *cli,
diff --git a/source/rpc_parse/parse_samr.c b/source/rpc_parse/parse_samr.c
index 5a76be7..5225bcb 100644
--- a/source/rpc_parse/parse_samr.c
+++ b/source/rpc_parse/parse_samr.c
@@ -216,145 +216,6 @@ static bool sam_io_sam_entry(const char *desc, SAM_ENTRY * sam,
 }
 
 /*******************************************************************
-inits a SAMR_Q_ENUM_DOM_USERS structure.
-********************************************************************/
-
-void init_samr_q_enum_dom_users(SAMR_Q_ENUM_DOM_USERS * q_e, POLICY_HND *pol,
-				uint32 start_idx,
-				uint32 acb_mask, uint32 size)
-{
-	DEBUG(5, ("init_samr_q_enum_dom_users\n"));
-
-	q_e->pol = *pol;
-
-	q_e->start_idx = start_idx;	/* zero indicates lots */
-	q_e->acb_mask = acb_mask;
-	q_e->max_size = size;
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-bool samr_io_q_enum_dom_users(const char *desc, SAMR_Q_ENUM_DOM_USERS * q_e,
-			      prs_struct *ps, int depth)
-{
-	if (q_e == NULL)
-		return False;
-
-	prs_debug(ps, depth, desc, "samr_io_q_enum_dom_users");
-	depth++;
-
-	if(!prs_align(ps))
-		return False;
-
-	if(!smb_io_pol_hnd("domain_pol", &q_e->pol, ps, depth))
-		return False;
-
-	if(!prs_uint32("start_idx", ps, depth, &q_e->start_idx))
-		return False;
-	if(!prs_uint32("acb_mask ", ps, depth, &q_e->acb_mask))
-		return False;
-
-	if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))
-		return False;
-
-	return True;
-}
-
-
-/*******************************************************************
-inits a SAMR_R_ENUM_DOM_USERS structure.
-********************************************************************/
-
-void init_samr_r_enum_dom_users(SAMR_R_ENUM_DOM_USERS * r_u,
-				uint32 next_idx, uint32 num_sam_entries)
-{
-	DEBUG(5, ("init_samr_r_enum_dom_users\n"));
-
-	r_u->next_idx = next_idx;
-
-	if (num_sam_entries != 0) {
-		r_u->ptr_entries1 = 1;
-		r_u->ptr_entries2 = 1;
-		r_u->num_entries2 = num_sam_entries;
-		r_u->num_entries3 = num_sam_entries;
-
-		r_u->num_entries4 = num_sam_entries;
-	} else {
-		r_u->ptr_entries1 = 0;
-		r_u->num_entries2 = num_sam_entries;
-		r_u->ptr_entries2 = 1;
-	}
-}
-
-/*******************************************************************
-reads or writes a structure.
-********************************************************************/
-
-bool samr_io_r_enum_dom_users(const char *desc, SAMR_R_ENUM_DOM_USERS * r_u,
-			      prs_struct *ps, int depth)
-{
-	uint32 i;
-
-	if (r_u == NULL)
-		return False;
-
-	prs_debug(ps, depth, desc, "samr_io_r_enum_dom_users");
-	depth++;
-
-	if(!prs_align(ps))
-		return False;
-
-	if(!prs_uint32("next_idx    ", ps, depth, &r_u->next_idx))
-		return False;
-	if(!prs_uint32("ptr_entries1", ps, depth, &r_u->ptr_entries1))
-		return False;
-
-	if (r_u->ptr_entries1 != 0) {
-		if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
-			return False;
-		if(!prs_uint32("ptr_entries2", ps, depth, &r_u->ptr_entries2))
-			return False;
-		if(!prs_uint32("num_entries3", ps, depth, &r_u->num_entries3))
-			return False;
-
-		if (UNMARSHALLING(ps) && (r_u->num_entries2 != 0)) {
-			r_u->sam = PRS_ALLOC_MEM(ps,SAM_ENTRY, r_u->num_entries2);
-			r_u->uni_acct_name = PRS_ALLOC_MEM(ps,UNISTR2, r_u->num_entries2);
-		}
-
-		if ((r_u->sam == NULL || r_u->uni_acct_name == NULL) && r_u->num_entries2 != 0) {
-			DEBUG(0,("NULL pointers in SAMR_R_ENUM_DOM_USERS\n"));
-			r_u->num_entries4 = 0;
-			r_u->status = NT_STATUS_MEMORY_NOT_ALLOCATED;
-			return False;
-		}
-
-		for (i = 0; i < r_u->num_entries2; i++) {
-			if(!sam_io_sam_entry("", &r_u->sam[i], ps, depth))
-				return False;
-		}
-
-		for (i = 0; i < r_u->num_entries2; i++) {
-			if(!smb_io_unistr2("", &r_u->uni_acct_name[i],r_u->sam[i].hdr_name.buffer, ps,depth))
-				return False;
-		}
-
-	}
-
-	if(!prs_align(ps))
-		return False;
-		
-	if(!prs_uint32("num_entries4", ps, depth, &r_u->num_entries4))
-		return False;
-	if(!prs_ntstatus("status", ps, depth, &r_u->status))
-		return False;
-
-	return True;
-}
-
-/*******************************************************************
  inits a samr_DispInfoGeneral structure.
 ********************************************************************/
 
diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c
index 3d6866e..c644c15 100644
--- a/source/rpcclient/cmd_samr.c
+++ b/source/rpcclient/cmd_samr.c
@@ -818,8 +818,7 @@ static NTSTATUS cmd_samr_enum_dom_users(struct rpc_pipe_client *cli,
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 start_idx, size, num_dom_users, i;
-	char **dom_users;
-	uint32 *dom_rids;
+	struct samr_SamArray *dom_users = NULL;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
 	uint32 acb_mask = ACB_NORMAL;
 	bool got_connect_pol = False, got_domain_pol = False;
@@ -864,16 +863,21 @@ static NTSTATUS cmd_samr_enum_dom_users(struct rpc_pipe_client *cli,
 	size = 0xffff;
 
 	do {
-		result = rpccli_samr_enum_dom_users(
-			cli, mem_ctx, &domain_pol, &start_idx, acb_mask,
-			size, &dom_users, &dom_rids, &num_dom_users);
+		result = rpccli_samr_EnumDomainUsers(cli, mem_ctx,
+						     &domain_pol,
+						     &start_idx,
+						     acb_mask,
+						     &dom_users,
+						     size,
+						     &num_dom_users);
 
 		if (NT_STATUS_IS_OK(result) ||
 		    NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)) {
 
 			for (i = 0; i < num_dom_users; i++)
                                printf("user:[%s] rid:[0x%x]\n",
-				       dom_users[i], dom_rids[i]);
+				       dom_users->entries[i].name.string,
+				       dom_users->entries[i].idx);
 		}
 
 	} while (NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES));
@@ -2553,7 +2557,7 @@ struct cmd_set samr_commands[] = {
 	{ "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",      "" },
 	{ "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", "" },
+	{ "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", "" },
 	{ "enumalsgroups",      RPC_RTYPE_NTSTATUS, cmd_samr_enum_als_groups,       NULL, PI_SAMR, NULL,	"Enumerate alias groups",  "" },
 	{ "enumdomains",        RPC_RTYPE_NTSTATUS, cmd_samr_enum_domains,          NULL, PI_SAMR, NULL,	"Enumerate domains",  "" },
diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c
index 959395c..403cb19 100644
--- a/source/utils/net_rpc.c
+++ b/source/utils/net_rpc.c
@@ -6345,9 +6345,8 @@ static int rpc_trustdom_list(int argc, const char **argv)
 
 	/* trusting domains listing variables */
 	POLICY_HND domain_hnd;
-	char **trusting_dom_names;
-	uint32 *trusting_dom_rids;
-	
+	struct samr_SamArray *trusts = NULL;
+
 	/*
 	 * Listing trusted domains (stored in secrets.tdb, if local)
 	 */
@@ -6507,11 +6506,14 @@ static int rpc_trustdom_list(int argc, const char **argv)
 	 
 	enum_ctx = 0;	/* reset enumeration context from last enumeration */
 	do {
-			
-		nt_status = rpccli_samr_enum_dom_users(pipe_hnd, mem_ctx, &domain_hnd,
-		                                    &enum_ctx, ACB_DOMTRUST, 0xffff,
-		                                    &trusting_dom_names, &trusting_dom_rids,
-		                                    &num_domains);
+
+		nt_status = rpccli_samr_EnumDomainUsers(pipe_hnd, mem_ctx,
+							&domain_hnd,
+							&enum_ctx,
+							ACB_DOMTRUST,
+							&trusts,
+							0xffff,
+							&num_domains);
 		if (NT_STATUS_IS_ERR(nt_status)) {
 			DEBUG(0, ("Couldn't enumerate accounts. Error was: %s\n",
 				nt_errstr(nt_status)));
@@ -6519,9 +6521,11 @@ static int rpc_trustdom_list(int argc, const char **argv)
 			talloc_destroy(mem_ctx);
 			return -1;
 		};
-		
+
 		for (i = 0; i < num_domains; i++) {
 
+			char *str = CONST_DISCARD(char *, trusts->entries[i].name.string);
+
 			/*
 			 * get each single domain's sid (do we _really_ need this ?):
 			 *  1) connect to domain's pdc
@@ -6529,22 +6533,22 @@ static int rpc_trustdom_list(int argc, const char **argv)
 			 */
 
 			/* get rid of '$' tail */
-			ascii_dom_name_len = strlen(trusting_dom_names[i]);
+			ascii_dom_name_len = strlen(str);
 			if (ascii_dom_name_len && ascii_dom_name_len < FSTRING_LEN)
-				trusting_dom_names[i][ascii_dom_name_len - 1] = '\0';
-			
+				str[ascii_dom_name_len - 1] = '\0';
+
 			/* calculate padding space for d_printf to look nicer */
-			pad_len = col_len - strlen(trusting_dom_names[i]);
+			pad_len = col_len - strlen(str);
 			padding[pad_len] = 0;
 			do padding[--pad_len] = ' '; while (pad_len);
 
 			/* set opt_* variables to remote domain */
-			strupper_m(trusting_dom_names[i]);
-			opt_workgroup = talloc_strdup(mem_ctx, trusting_dom_names[i]);
+			strupper_m(str);
+			opt_workgroup = talloc_strdup(mem_ctx, str);
 			opt_target_workgroup = opt_workgroup;
-			
-			d_printf("%s%s", trusting_dom_names[i], padding);
-			
+
+			d_printf("%s%s", str, padding);
+
 			/* connect to remote domain controller */
 			nt_status = net_make_ipc_connection(
 					NET_FLAGS_PDC | NET_FLAGS_ANONYMOUS,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list