mirror of
https://github.com/samba-team/samba.git
synced 2024-12-27 03:21:53 +03:00
r23081: Reorder the lsa_lookup_sids functions so that the order makes more sense...
This commit is contained in:
parent
9a10736e6f
commit
374dea8c6f
@ -214,8 +214,8 @@ static NTSTATUS rpccli_lsa_lookup_sids_noalloc(struct rpc_pipe_client *cli,
|
||||
}
|
||||
|
||||
} else {
|
||||
(names)[i] = NULL;
|
||||
(domains)[i] = NULL;
|
||||
(names)[i] = "";
|
||||
(domains)[i] = "";
|
||||
(types)[i] = SID_NAME_UNKNOWN;
|
||||
}
|
||||
}
|
||||
@ -225,117 +225,6 @@ done:
|
||||
return result;
|
||||
}
|
||||
|
||||
/** Lookup a list of sids */
|
||||
|
||||
NTSTATUS rpccli_lsa_lookup_sids(struct rpc_pipe_client *cli,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
POLICY_HND *pol, int num_sids,
|
||||
const DOM_SID *sids,
|
||||
char ***domains,
|
||||
char ***names,
|
||||
enum lsa_SidType **types)
|
||||
{
|
||||
prs_struct qbuf, rbuf;
|
||||
LSA_Q_LOOKUP_SIDS q;
|
||||
LSA_R_LOOKUP_SIDS r;
|
||||
DOM_R_REF ref;
|
||||
LSA_TRANS_NAME_ENUM t_names;
|
||||
NTSTATUS result = NT_STATUS_OK;
|
||||
int i;
|
||||
|
||||
ZERO_STRUCT(q);
|
||||
ZERO_STRUCT(r);
|
||||
|
||||
init_q_lookup_sids(mem_ctx, &q, pol, num_sids, sids, 1);
|
||||
|
||||
ZERO_STRUCT(ref);
|
||||
ZERO_STRUCT(t_names);
|
||||
|
||||
r.dom_ref = &ref;
|
||||
r.names = &t_names;
|
||||
|
||||
CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_LOOKUPSIDS,
|
||||
q, r,
|
||||
qbuf, rbuf,
|
||||
lsa_io_q_lookup_sids,
|
||||
lsa_io_r_lookup_sids,
|
||||
NT_STATUS_UNSUCCESSFUL );
|
||||
|
||||
if (!NT_STATUS_IS_OK(r.status) &&
|
||||
!NT_STATUS_EQUAL(r.status, STATUS_SOME_UNMAPPED)) {
|
||||
|
||||
/* An actual error occured */
|
||||
result = r.status;
|
||||
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Return output parameters */
|
||||
|
||||
if (r.mapped_count == 0) {
|
||||
result = NT_STATUS_NONE_MAPPED;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (num_sids) {
|
||||
if (!((*domains) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
|
||||
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
|
||||
result = NT_STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!((*names) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
|
||||
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
|
||||
result = NT_STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!((*types) = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_sids))) {
|
||||
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
|
||||
result = NT_STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
} else {
|
||||
(*domains) = NULL;
|
||||
(*names) = NULL;
|
||||
(*types) = NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < num_sids; i++) {
|
||||
fstring name, dom_name;
|
||||
uint32 dom_idx = t_names.name[i].domain_idx;
|
||||
|
||||
/* Translate optimised name through domain index array */
|
||||
|
||||
if (dom_idx != 0xffffffff) {
|
||||
|
||||
rpcstr_pull_unistr2_fstring(
|
||||
dom_name, &ref.ref_dom[dom_idx].uni_dom_name);
|
||||
rpcstr_pull_unistr2_fstring(
|
||||
name, &t_names.uni_name[i]);
|
||||
|
||||
(*names)[i] = talloc_strdup(mem_ctx, name);
|
||||
(*domains)[i] = talloc_strdup(mem_ctx, dom_name);
|
||||
(*types)[i] = (enum lsa_SidType)t_names.name[i].sid_name_use;
|
||||
|
||||
if (((*names)[i] == NULL) || ((*domains)[i] == NULL)) {
|
||||
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
|
||||
result = NT_STATUS_UNSUCCESSFUL;
|
||||
goto done;
|
||||
}
|
||||
|
||||
} else {
|
||||
(*names)[i] = NULL;
|
||||
(*domains)[i] = NULL;
|
||||
(*types)[i] = SID_NAME_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Lookup a list of sids
|
||||
*
|
||||
* do it the right way: there is a limit (of 20480 for w2k3) entries
|
||||
@ -447,6 +336,117 @@ done:
|
||||
return result;
|
||||
}
|
||||
|
||||
/** Lookup a list of sids */
|
||||
|
||||
NTSTATUS rpccli_lsa_lookup_sids(struct rpc_pipe_client *cli,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
POLICY_HND *pol, int num_sids,
|
||||
const DOM_SID *sids,
|
||||
char ***domains,
|
||||
char ***names,
|
||||
enum lsa_SidType **types)
|
||||
{
|
||||
prs_struct qbuf, rbuf;
|
||||
LSA_Q_LOOKUP_SIDS q;
|
||||
LSA_R_LOOKUP_SIDS r;
|
||||
DOM_R_REF ref;
|
||||
LSA_TRANS_NAME_ENUM t_names;
|
||||
NTSTATUS result = NT_STATUS_OK;
|
||||
int i;
|
||||
|
||||
ZERO_STRUCT(q);
|
||||
ZERO_STRUCT(r);
|
||||
|
||||
init_q_lookup_sids(mem_ctx, &q, pol, num_sids, sids, 1);
|
||||
|
||||
ZERO_STRUCT(ref);
|
||||
ZERO_STRUCT(t_names);
|
||||
|
||||
r.dom_ref = &ref;
|
||||
r.names = &t_names;
|
||||
|
||||
CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_LOOKUPSIDS,
|
||||
q, r,
|
||||
qbuf, rbuf,
|
||||
lsa_io_q_lookup_sids,
|
||||
lsa_io_r_lookup_sids,
|
||||
NT_STATUS_UNSUCCESSFUL );
|
||||
|
||||
if (!NT_STATUS_IS_OK(r.status) &&
|
||||
!NT_STATUS_EQUAL(r.status, STATUS_SOME_UNMAPPED)) {
|
||||
|
||||
/* An actual error occured */
|
||||
result = r.status;
|
||||
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Return output parameters */
|
||||
|
||||
if (r.mapped_count == 0) {
|
||||
result = NT_STATUS_NONE_MAPPED;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (num_sids) {
|
||||
if (!((*domains) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
|
||||
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
|
||||
result = NT_STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!((*names) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
|
||||
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
|
||||
result = NT_STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!((*types) = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_sids))) {
|
||||
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
|
||||
result = NT_STATUS_NO_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
} else {
|
||||
(*domains) = NULL;
|
||||
(*names) = NULL;
|
||||
(*types) = NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < num_sids; i++) {
|
||||
fstring name, dom_name;
|
||||
uint32 dom_idx = t_names.name[i].domain_idx;
|
||||
|
||||
/* Translate optimised name through domain index array */
|
||||
|
||||
if (dom_idx != 0xffffffff) {
|
||||
|
||||
rpcstr_pull_unistr2_fstring(
|
||||
dom_name, &ref.ref_dom[dom_idx].uni_dom_name);
|
||||
rpcstr_pull_unistr2_fstring(
|
||||
name, &t_names.uni_name[i]);
|
||||
|
||||
(*names)[i] = talloc_strdup(mem_ctx, name);
|
||||
(*domains)[i] = talloc_strdup(mem_ctx, dom_name);
|
||||
(*types)[i] = (enum lsa_SidType)t_names.name[i].sid_name_use;
|
||||
|
||||
if (((*names)[i] == NULL) || ((*domains)[i] == NULL)) {
|
||||
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
|
||||
result = NT_STATUS_UNSUCCESSFUL;
|
||||
goto done;
|
||||
}
|
||||
|
||||
} else {
|
||||
(*names)[i] = NULL;
|
||||
(*domains)[i] = NULL;
|
||||
(*types)[i] = SID_NAME_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/** Lookup a list of names */
|
||||
|
||||
NTSTATUS rpccli_lsa_lookup_names(struct rpc_pipe_client *cli,
|
||||
|
Loading…
Reference in New Issue
Block a user