1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-26 10:04:02 +03:00

Use pidl for _lsa_EnumTrustDom()

Guenther
(This used to be commit 1f45079907d03116b48b55d616281ed4359a66d8)
This commit is contained in:
Günther Deschner 2008-02-13 00:02:21 +01:00
parent ba934cc6c1
commit f57c67b8f3
2 changed files with 31 additions and 42 deletions

View File

@ -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);
}
/***************************************************************************

View File

@ -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;
nt_status = NT_STATUS_NO_MORE_ENTRIES;
}
/* set up the lsa_enum_trust_dom response */
init_r_enum_trust_dom(p->mem_ctx, r_u, next_idx,
num_thistime, domains+q_u->enum_context);
lsa_domains = TALLOC_ZERO_ARRAY(p->mem_ctx, struct lsa_DomainInfo,
num_thistime);
if (!lsa_domains) {
return NT_STATUS_NO_MEMORY;
}
return r_u->status;
for (i=0; i<num_thistime; i++) {
init_lsa_StringLarge(&lsa_domains[i].name, domains[i]->name);
lsa_domains[i].sid = &domains[i]->sid;
}
*r->out.resume_handle = next_idx;
r->out.domains->count = num_thistime;
r->out.domains->domains = lsa_domains;
return nt_status;
}
/***************************************************************************
@ -2222,12 +2236,6 @@ NTSTATUS _lsa_EnumAccounts(pipes_struct *p, struct lsa_EnumAccounts *r)
return NT_STATUS_NOT_IMPLEMENTED;
}
NTSTATUS _lsa_EnumTrustDom(pipes_struct *p, struct lsa_EnumTrustDom *r)
{
p->rng_fault_state = True;
return NT_STATUS_NOT_IMPLEMENTED;
}
NTSTATUS _lsa_LookupNames(pipes_struct *p, struct lsa_LookupNames *r)
{
p->rng_fault_state = True;