[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-2125-g90b0771

Günther Deschner gd at samba.org
Tue Feb 12 23:39:37 GMT 2008


The branch, v3-2-test has been updated
       via  90b07714ddb16ef87865cdf4f9c64c0372200e42 (commit)
       via  a25e7ffbca9c2c97dd36b0596e7cb38a72aaf9d9 (commit)
       via  1f45079907d03116b48b55d616281ed4359a66d8 (commit)
       via  4473255f06bcd96166e61cfa751d32fddf120e16 (commit)
       via  278c891c54813ab802e1de300b498a0f9db79321 (commit)
      from  f4581e9f4482566fba9436d5ae058b8d840fa394 (commit)

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


- Log -----------------------------------------------------------------
commit 90b07714ddb16ef87865cdf4f9c64c0372200e42
Author: Günther Deschner <gd at samba.org>
Date:   Wed Feb 13 00:37:19 2008 +0100

    Remove unused marshalling for LSA_ENUM_TRUST_DOM.
    
    Guenther

commit a25e7ffbca9c2c97dd36b0596e7cb38a72aaf9d9
Author: Günther Deschner <gd at samba.org>
Date:   Wed Feb 13 00:25:40 2008 +0100

    Use rpccli_lsa_EnumTrustDom all over the place.
    
    Guenther

commit 1f45079907d03116b48b55d616281ed4359a66d8
Author: Günther Deschner <gd at samba.org>
Date:   Wed Feb 13 00:02:21 2008 +0100

    Use pidl for _lsa_EnumTrustDom()
    
    Guenther

commit 4473255f06bcd96166e61cfa751d32fddf120e16
Author: Günther Deschner <gd at samba.org>
Date:   Wed Feb 13 00:28:12 2008 +0100

    Re-run make idl.
    
    Guenther

commit 278c891c54813ab802e1de300b498a0f9db79321
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 12 23:38:28 2008 +0100

    Fix IDL for lsa_EnumTrustDom.
    
    Guenther

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

Summary of changes:
 source/include/rpc_lsa.h        |   23 ------
 source/librpc/gen_ndr/cli_lsa.c |    4 +-
 source/librpc/gen_ndr/cli_lsa.h |    4 +-
 source/librpc/idl/lsa.idl       |    6 +-
 source/libsmb/trusts_util.c     |   28 ++++++-
 source/rpc_client/cli_lsarpc.c  |   85 --------------------
 source/rpc_parse/parse_lsa.c    |  165 ---------------------------------------
 source/rpc_server/srv_lsa.c     |   21 +-----
 source/rpc_server/srv_lsa_nt.c  |   52 +++++++-----
 source/rpcclient/cmd_lsarpc.c   |   23 +++---
 source/utils/net_rpc.c          |   49 ++++++------
 source/winbindd/winbindd_rpc.c  |   18 +++--
 12 files changed, 113 insertions(+), 365 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/rpc_lsa.h b/source/include/rpc_lsa.h
index 7a85201..724a980 100644
--- a/source/include/rpc_lsa.h
+++ b/source/include/rpc_lsa.h
@@ -137,29 +137,6 @@
 
 /*******************************************************/
 
-typedef struct {
-	POLICY_HND pol; 
-	uint32 enum_context; 
-	uint32 preferred_len; 	/* preferred maximum length */
-} LSA_Q_ENUM_TRUST_DOM;
-
-typedef struct {
-	UNISTR4	name;
-	DOM_SID2 *sid;
-} DOMAIN_INFO;
-
-typedef struct {
-	uint32 count;
-	DOMAIN_INFO *domains;
-} DOMAIN_LIST;
-
-typedef struct {
-	uint32 enum_context;
-	uint32 count;
-	DOMAIN_LIST *domlist;
-	NTSTATUS status; 
-} LSA_R_ENUM_TRUST_DOM;
-
 /*******************************************************/
 
 #define MAX_REF_DOMAINS 32
diff --git a/source/librpc/gen_ndr/cli_lsa.c b/source/librpc/gen_ndr/cli_lsa.c
index f910a82..27ed572 100644
--- a/source/librpc/gen_ndr/cli_lsa.c
+++ b/source/librpc/gen_ndr/cli_lsa.c
@@ -562,8 +562,8 @@ NTSTATUS rpccli_lsa_EnumTrustDom(struct rpc_pipe_client *cli,
 				 TALLOC_CTX *mem_ctx,
 				 struct policy_handle *handle,
 				 uint32_t *resume_handle,
-				 uint32_t max_size,
-				 struct lsa_DomainList *domains)
+				 struct lsa_DomainList *domains,
+				 uint32_t max_size)
 {
 	struct lsa_EnumTrustDom r;
 	NTSTATUS status;
diff --git a/source/librpc/gen_ndr/cli_lsa.h b/source/librpc/gen_ndr/cli_lsa.h
index 49f4633..ddcd161 100644
--- a/source/librpc/gen_ndr/cli_lsa.h
+++ b/source/librpc/gen_ndr/cli_lsa.h
@@ -65,8 +65,8 @@ NTSTATUS rpccli_lsa_EnumTrustDom(struct rpc_pipe_client *cli,
 				 TALLOC_CTX *mem_ctx,
 				 struct policy_handle *handle,
 				 uint32_t *resume_handle,
-				 uint32_t max_size,
-				 struct lsa_DomainList *domains);
+				 struct lsa_DomainList *domains,
+				 uint32_t max_size);
 NTSTATUS rpccli_lsa_LookupNames(struct rpc_pipe_client *cli,
 				TALLOC_CTX *mem_ctx,
 				struct policy_handle *handle,
diff --git a/source/librpc/idl/lsa.idl b/source/librpc/idl/lsa.idl
index b10dcd1..305bab3 100644
--- a/source/librpc/idl/lsa.idl
+++ b/source/librpc/idl/lsa.idl
@@ -327,9 +327,9 @@ import "security.idl";
 
 	NTSTATUS lsa_EnumTrustDom (
 		[in]               policy_handle *handle,
-		[in,out]           uint32 *resume_handle,
-		[in]               uint32 max_size,
-		[out]              lsa_DomainList *domains
+		[in,out,ref]       uint32 *resume_handle,
+		[out,ref]          lsa_DomainList *domains,
+		[in]               uint32 max_size
 		);
 
 
diff --git a/source/libsmb/trusts_util.c b/source/libsmb/trusts_util.c
index 1ca7d56..11f691b 100644
--- a/source/libsmb/trusts_util.c
+++ b/source/libsmb/trusts_util.c
@@ -152,6 +152,8 @@ bool enumerate_domain_trusts( TALLOC_CTX *mem_ctx, const char *domain,
 	struct cli_state *cli = NULL;
 	struct rpc_pipe_client *lsa_pipe;
 	bool 		retry;
+	struct lsa_DomainList dom_list;
+	int i;
 
 	*domain_names = NULL;
 	*num_domains = 0;
@@ -188,11 +190,33 @@ bool enumerate_domain_trusts( TALLOC_CTX *mem_ctx, const char *domain,
 
 	/* Lookup list of trusted domains */
 
-	result = rpccli_lsa_enum_trust_dom(lsa_pipe, mem_ctx, &pol, &enum_ctx,
-		num_domains, domain_names, sids);
+	result = rpccli_lsa_EnumTrustDom(lsa_pipe, mem_ctx,
+					 &pol,
+					 &enum_ctx,
+					 &dom_list,
+					 (uint32_t)-1);
 	if ( !NT_STATUS_IS_OK(result) )
 		goto done;
 
+	*num_domains = dom_list.count;
+
+	*domain_names = TALLOC_ZERO_ARRAY(mem_ctx, char *, *num_domains);
+	if (!*domain_names) {
+		result = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	*sids = TALLOC_ZERO_ARRAY(mem_ctx, DOM_SID, *num_domains);
+	if (!*sids) {
+		result = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	for (i=0; i< *num_domains; i++) {
+		(*domain_names)[i] = CONST_DISCARD(char *, dom_list.domains[i].name.string);
+		(*sids)[i] = *dom_list.domains[i].sid;
+	}
+
 done:
 	/* cleanup */
 	if (cli) {
diff --git a/source/rpc_client/cli_lsarpc.c b/source/rpc_client/cli_lsarpc.c
index d547c3e..c42938d 100644
--- a/source/rpc_client/cli_lsarpc.c
+++ b/source/rpc_client/cli_lsarpc.c
@@ -452,91 +452,6 @@ NTSTATUS rpccli_lsa_lookup_names(struct rpc_pipe_client *cli,
 	return result;
 }
 
-/**
- * Enumerate list of trusted domains
- *
- * @param cli client state (cli_state) structure of the connection
- * @param mem_ctx memory context
- * @param pol opened lsa policy handle
- * @param enum_ctx enumeration context ie. index of first returned domain entry
- * @param pref_num_domains preferred max number of entries returned in one response
- * @param num_domains total number of trusted domains returned by response
- * @param domain_names returned trusted domain names
- * @param domain_sids returned trusted domain sids
- *
- * @return nt status code of response
- **/
-
-NTSTATUS rpccli_lsa_enum_trust_dom(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   POLICY_HND *pol, uint32 *enum_ctx,
-				   uint32 *num_domains,
-				   char ***domain_names, DOM_SID **domain_sids)
-{
-	prs_struct qbuf, rbuf;
-	LSA_Q_ENUM_TRUST_DOM in;
-	LSA_R_ENUM_TRUST_DOM out;
-	int i;
-	fstring tmp;
-
-	ZERO_STRUCT(in);
-	ZERO_STRUCT(out);
-
-	/* 64k is enough for about 2000 trusted domains */
-
-        init_q_enum_trust_dom(&in, pol, *enum_ctx, 0x10000);
-
-	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_ENUMTRUSTDOM,
-	            in, out,
-	            qbuf, rbuf,
-	            lsa_io_q_enum_trust_dom,
-	            lsa_io_r_enum_trust_dom,
-	            NT_STATUS_UNSUCCESSFUL );
-
-
-	/* check for an actual error */
-
-	if ( !NT_STATUS_IS_OK(out.status)
-		&& !NT_STATUS_EQUAL(out.status, NT_STATUS_NO_MORE_ENTRIES)
-		&& !NT_STATUS_EQUAL(out.status, STATUS_MORE_ENTRIES) )
-	{
-		return out.status;
-	}
-
-	/* Return output parameters */
-
-	*num_domains  = out.count;
-	*enum_ctx     = out.enum_context;
-
-	if ( out.count ) {
-
-		/* Allocate memory for trusted domain names and sids */
-
-		if ( !(*domain_names = TALLOC_ARRAY(mem_ctx, char *, out.count)) ) {
-			DEBUG(0, ("cli_lsa_enum_trust_dom(): out of memory\n"));
-			return NT_STATUS_NO_MEMORY;
-		}
-
-		if ( !(*domain_sids = TALLOC_ARRAY(mem_ctx, DOM_SID, out.count)) ) {
-			DEBUG(0, ("cli_lsa_enum_trust_dom(): out of memory\n"));
-			return NT_STATUS_NO_MEMORY;
-		}
-
-		/* Copy across names and sids */
-
-		for (i = 0; i < out.count; i++) {
-
-			rpcstr_pull( tmp, out.domlist->domains[i].name.string->buffer,
-				sizeof(tmp), out.domlist->domains[i].name.length, 0);
-			(*domain_names)[i] = talloc_strdup(mem_ctx, tmp);
-
-			sid_copy(&(*domain_sids)[i], &out.domlist->domains[i].sid->sid );
-		}
-	}
-
-	return out.status;
-}
-
 /** Enumerate list of SIDs  */
 
 NTSTATUS rpccli_lsa_enum_sids(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
diff --git a/source/rpc_parse/parse_lsa.c b/source/rpc_parse/parse_lsa.c
index 12dd6e1..c4a7c05 100644
--- a/source/rpc_parse/parse_lsa.c
+++ b/source/rpc_parse/parse_lsa.c
@@ -216,171 +216,6 @@ void init_lsa_obj_attr(struct lsa_ObjectAttribute *r,
 }
 
 /*******************************************************************
-makes an LSA_Q_ENUM_TRUST_DOM structure.
-********************************************************************/
-bool init_q_enum_trust_dom(LSA_Q_ENUM_TRUST_DOM * q_e, POLICY_HND *pol,
-			   uint32 enum_context, uint32 preferred_len)
-{
-	DEBUG(5, ("init_q_enum_trust_dom\n"));
-
-	q_e->pol = *pol;
-	q_e->enum_context = enum_context;
-	q_e->preferred_len = preferred_len;
-
-	return True;
-}
-
-/*******************************************************************
- Reads or writes an LSA_Q_ENUM_TRUST_DOM structure.
-********************************************************************/
-
-bool lsa_io_q_enum_trust_dom(const char *desc, LSA_Q_ENUM_TRUST_DOM *q_e, 
-			     prs_struct *ps, int depth)
-{
-	prs_debug(ps, depth, desc, "lsa_io_q_enum_trust_dom");
-	depth++;
-
-	if(!smb_io_pol_hnd("", &q_e->pol, ps, depth))
-		return False;
-
-	if(!prs_uint32("enum_context ", ps, depth, &q_e->enum_context))
-		return False;
-	if(!prs_uint32("preferred_len", ps, depth, &q_e->preferred_len))
-		return False;
-
-	return True;
-}
-
-/*******************************************************************
- Inits an LSA_R_ENUM_TRUST_DOM structure.
-********************************************************************/
-
-void init_r_enum_trust_dom(TALLOC_CTX *ctx, LSA_R_ENUM_TRUST_DOM *out,
-			   uint32 enum_context, uint32 num_domains,
-			   struct trustdom_info **td)
-{
-	unsigned int i;
-
-        DEBUG(5, ("init_r_enum_trust_dom\n"));
-	
-        out->enum_context  = enum_context;
-	out->count         = num_domains;
-			
-	if ( num_domains != 0 ) {
-	
-		/* allocate container memory */
-		
-		out->domlist = TALLOC_P( ctx, DOMAIN_LIST );
-
-		if ( !out->domlist ) {
-			out->status = NT_STATUS_NO_MEMORY;
-			return;
-		}
-
-		if (out->count) {
-			out->domlist->domains = TALLOC_ARRAY( ctx, DOMAIN_INFO,
-						      out->count );
-			if ( !out->domlist->domains ) {
-				out->status = NT_STATUS_NO_MEMORY;
-				return;
-			}
-		} else {		
-			out->domlist->domains = NULL;
-		}
-	
-		out->domlist->count = out->count;
-		
-		/* initialize the list of domains and their sid */
-		
-		for (i = 0; i < num_domains; i++) {	
-			smb_ucs2_t *name;
-			if ( !(out->domlist->domains[i].sid =
-			       TALLOC_P(ctx, DOM_SID2)) ) {
-				out->status = NT_STATUS_NO_MEMORY;
-				return;
-			}
-				
-			init_dom_sid2(out->domlist->domains[i].sid,
-				      &(td[i])->sid);
-			if (push_ucs2_talloc(ctx, &name, (td[i])->name) == (size_t)-1){
-				out->status = NT_STATUS_NO_MEMORY;
-				return;
-			}
-			init_unistr4_w(ctx, &out->domlist->domains[i].name,
-				       name);
-		}
-	}
-
-}
-
-/*******************************************************************
-********************************************************************/
-
-bool lsa_io_domain_list( const char *desc, prs_struct *ps, int depth, DOMAIN_LIST *domlist )
-{
-	int i;
-	
-	prs_debug(ps, depth, desc, "lsa_io_domain_list");
-	depth++;
-
-	if(!prs_uint32("count", ps, depth, &domlist->count))
-		return False;
-
-	if ( domlist->count == 0 )
-		return True;
-		
-	if ( UNMARSHALLING(ps) ) {
-		if ( !(domlist->domains = PRS_ALLOC_MEM( ps, DOMAIN_INFO, domlist->count )) )
-			return False;
-	}
-	
-	/* headers */
-	
-	for ( i=0; i<domlist->count; i++ ) {
-		if ( !prs_unistr4_hdr("name_header", ps, depth, &domlist->domains[i].name) )
-			return False;
-		if ( !smb_io_dom_sid2_p("sid_header", ps, depth, &domlist->domains[i].sid) )
-			return False;
-	}
-
-	/* data */
-	
-	for ( i=0; i<domlist->count; i++ ) {
-		if ( !prs_unistr4_str("name", ps, depth, &domlist->domains[i].name) )
-			return False;
-		if( !smb_io_dom_sid2("sid", domlist->domains[i].sid, ps, depth) )
-			return False;
-	}
-	
-	return True;
-}
-
-/*******************************************************************
- Reads or writes an LSA_R_ENUM_TRUST_DOM structure.
-********************************************************************/
-
-bool lsa_io_r_enum_trust_dom(const char *desc, LSA_R_ENUM_TRUST_DOM *out, 
-			     prs_struct *ps, int depth)
-{
-	prs_debug(ps, depth, desc, "lsa_io_r_enum_trust_dom");
-	depth++;
-
-	if(!prs_uint32("enum_context", ps, depth, &out->enum_context))
-		return False;
-
-	if(!prs_uint32("count", ps, depth, &out->count))
-		return False;
-
-	if ( !prs_pointer("trusted_domains", ps, depth, (void*)&out->domlist, sizeof(DOMAIN_LIST), (PRS_POINTER_CAST)lsa_io_domain_list))
-		return False;
-		
-	if(!prs_ntstatus("status", ps, depth, &out->status))
-		return False;
-
-	return True;
-}
-
-/*******************************************************************
  Inits a LSA_SID_ENUM structure.
 ********************************************************************/
 
diff --git a/source/rpc_server/srv_lsa.c b/source/rpc_server/srv_lsa.c
index 9865a70..f48a397 100644
--- a/source/rpc_server/srv_lsa.c
+++ b/source/rpc_server/srv_lsa.c
@@ -70,26 +70,7 @@ static bool api_lsa_open_policy(pipes_struct *p)
 
 static bool api_lsa_enum_trust_dom(pipes_struct *p)
 {
-	LSA_Q_ENUM_TRUST_DOM q_u;
-	LSA_R_ENUM_TRUST_DOM r_u;
-	prs_struct *data = &p->in_data.data;
-	prs_struct *rdata = &p->out_data.rdata;
-
-	ZERO_STRUCT(q_u);
-	ZERO_STRUCT(r_u);
-
-	/* grab the enum trust domain context etc. */
-	if(!lsa_io_q_enum_trust_dom("", &q_u, data, 0))
-		return False;
-
-	/* get required trusted domains information */
-	r_u.status = _lsa_enum_trust_dom(p, &q_u, &r_u);
-
-	/* prepare the response */
-	if(!lsa_io_r_enum_trust_dom("", &r_u, rdata, 0))
-		return False;
-
-	return True;
+	return proxy_lsa_call(p, NDR_LSA_ENUMTRUSTDOM);
 }
 
 /***************************************************************************
diff --git a/source/rpc_server/srv_lsa_nt.c b/source/rpc_server/srv_lsa_nt.c
index 8041424..3cf8396 100644
--- a/source/rpc_server/srv_lsa_nt.c
+++ b/source/rpc_server/srv_lsa_nt.c
@@ -592,16 +592,18 @@ NTSTATUS _lsa_OpenPolicy(pipes_struct *p,
 }
 
 /***************************************************************************
- _lsa_enum_trust_dom - this needs fixing to do more than return NULL ! JRA.
+ _lsa_EnumTrustDom - this needs fixing to do more than return NULL ! JRA.
  ufff, done :)  mimir
  ***************************************************************************/
 
-NTSTATUS _lsa_enum_trust_dom(pipes_struct *p, LSA_Q_ENUM_TRUST_DOM *q_u,
-			     LSA_R_ENUM_TRUST_DOM *r_u)
+NTSTATUS _lsa_EnumTrustDom(pipes_struct *p,
+			   struct lsa_EnumTrustDom *r)
 {
 	struct lsa_info *info;
 	uint32 next_idx;
 	struct trustdom_info **domains;
+	struct lsa_DomainInfo *lsa_domains = NULL;
+	int i;
 
 	/*
 	 * preferred length is set to 5 as a "our" preferred length
@@ -610,12 +612,12 @@ NTSTATUS _lsa_enum_trust_dom(pipes_struct *p, LSA_Q_ENUM_TRUST_DOM *q_u,
 	 * it needs further investigation how to optimally choose this value
 	 */
 	uint32 max_num_domains =
-		q_u->preferred_len < 5 ? q_u->preferred_len : 10;
+		r->in.max_size < 5 ? r->in.max_size : 10;
 	uint32 num_domains;
 	NTSTATUS nt_status;
 	uint32 num_thistime;
 
-	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
 	/* check if the user have enough rights */
@@ -628,29 +630,41 @@ NTSTATUS _lsa_enum_trust_dom(pipes_struct *p, LSA_Q_ENUM_TRUST_DOM *q_u,
 		return nt_status;
 	}
 
-	if (q_u->enum_context < num_domains) {
+	if (*r->in.resume_handle < num_domains) {
 		num_thistime = MIN(num_domains, max_num_domains);
 
-		r_u->status = STATUS_MORE_ENTRIES;
+		nt_status = STATUS_MORE_ENTRIES;
 
-		if (q_u->enum_context + num_thistime > num_domains) {
-			num_thistime = num_domains - q_u->enum_context;
-			r_u->status = NT_STATUS_OK;
+		if (*r->in.resume_handle + num_thistime > num_domains) {
+			num_thistime = num_domains - *r->in.resume_handle;
+			nt_status = NT_STATUS_OK;
 		}
 
-		next_idx = q_u->enum_context + num_thistime;
+		next_idx = *r->in.resume_handle + num_thistime;
 	} else {
 		num_thistime = 0;
 		next_idx = 0xffffffff;
-		r_u->status = NT_STATUS_NO_MORE_ENTRIES;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list