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:
parent
f14ff502d8
commit
0460295c1f
@ -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);
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user