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

Use pidl for _lsa_EnumAccounts.

Guenther
(This used to be commit 07e5138ad960bce8569ea593ca9a1b4fbf2b1048)
This commit is contained in:
Günther Deschner 2008-02-14 01:16:03 +01:00
parent f14ff502d8
commit 0460295c1f
2 changed files with 25 additions and 48 deletions

View File

@ -185,28 +185,7 @@ static bool api_lsa_priv_get_dispname(pipes_struct *p)
static bool api_lsa_enum_accounts(pipes_struct *p)
{
LSA_Q_ENUM_ACCOUNTS q_u;
LSA_R_ENUM_ACCOUNTS r_u;
prs_struct *data = &p->in_data.data;
prs_struct *rdata = &p->out_data.rdata;
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
if(!lsa_io_q_enum_accounts("", &q_u, data, 0)) {
DEBUG(0,("api_lsa_enum_accounts: failed to unmarshall LSA_Q_ENUM_ACCOUNTS.\n"));
return False;
}
r_u.status = _lsa_enum_accounts(p, &q_u, &r_u);
/* store the response in the SMB stream */
if(!lsa_io_r_enum_accounts("", &r_u, rdata, 0)) {
DEBUG(0,("api_lsa_enum_accounts: Failed to marshall LSA_R_ENUM_ACCOUNTS.\n"));
return False;
}
return True;
return proxy_lsa_call(p, NDR_LSA_ENUMACCOUNTS);
}
/***************************************************************************

View File

@ -1519,18 +1519,19 @@ NTSTATUS _lsa_LookupPrivDisplayName(pipes_struct *p,
}
/***************************************************************************
_lsa_enum_accounts.
_lsa_EnumAccounts
***************************************************************************/
NTSTATUS _lsa_enum_accounts(pipes_struct *p, LSA_Q_ENUM_ACCOUNTS *q_u, LSA_R_ENUM_ACCOUNTS *r_u)
NTSTATUS _lsa_EnumAccounts(pipes_struct *p,
struct lsa_EnumAccounts *r)
{
struct lsa_info *handle;
DOM_SID *sid_list;
int i, j, num_entries;
LSA_SID_ENUM *sids=&r_u->sids;
NTSTATUS ret;
NTSTATUS status;
struct lsa_SidPtr *sids = NULL;
if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle))
if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle))
return NT_STATUS_INVALID_HANDLE;
if (!(handle->access & POLICY_VIEW_LOCAL_INFORMATION))
@ -1542,34 +1543,37 @@ NTSTATUS _lsa_enum_accounts(pipes_struct *p, LSA_Q_ENUM_ACCOUNTS *q_u, LSA_R_ENU
/* The only way we can currently find out all the SIDs that have been
privileged is to scan all privileges */
if (!NT_STATUS_IS_OK(ret = privilege_enumerate_accounts(&sid_list, &num_entries))) {
return ret;
status = privilege_enumerate_accounts(&sid_list, &num_entries);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
if (q_u->enum_context >= num_entries)
if (*r->in.resume_handle >= num_entries) {
return NT_STATUS_NO_MORE_ENTRIES;
}
if (num_entries-q_u->enum_context) {
sids->ptr_sid = TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, num_entries-q_u->enum_context);
sids->sid = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_SID2, num_entries-q_u->enum_context);
if (sids->ptr_sid==NULL || sids->sid==NULL) {
if (num_entries - *r->in.resume_handle) {
sids = TALLOC_ZERO_ARRAY(p->mem_ctx, struct lsa_SidPtr,
num_entries - *r->in.resume_handle);
if (!sids) {
SAFE_FREE(sid_list);
return NT_STATUS_NO_MEMORY;
}
for (i = q_u->enum_context, j = 0; i < num_entries; i++, j++) {
init_dom_sid2(&(*sids).sid[j], &sid_list[i]);
(*sids).ptr_sid[j] = 1;
for (i = *r->in.resume_handle, j = 0; i < num_entries; i++, j++) {
sids[j].sid = sid_dup_talloc(p->mem_ctx, &sid_list[i]);
if (!sids[j].sid) {
SAFE_FREE(sid_list);
return NT_STATUS_NO_MEMORY;
}
}
} else {
sids->ptr_sid = NULL;
sids->sid = NULL;
}
talloc_free(sid_list);
init_lsa_r_enum_accounts(r_u, num_entries);
*r->out.resume_handle = num_entries;
r->out.sids->num_sids = num_entries;
r->out.sids->sids = sids;
return NT_STATUS_OK;
}
@ -2230,12 +2234,6 @@ NTSTATUS _lsa_ClearAuditLog(pipes_struct *p, struct lsa_ClearAuditLog *r)
return NT_STATUS_NOT_IMPLEMENTED;
}
NTSTATUS _lsa_EnumAccounts(pipes_struct *p, struct lsa_EnumAccounts *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;