[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