diff options
-rw-r--r-- | source4/librpc/idl/lsa.idl | 11 | ||||
-rw-r--r-- | source4/rpc_server/lsa/dcesrv_lsa.c | 49 |
2 files changed, 42 insertions, 18 deletions
diff --git a/source4/librpc/idl/lsa.idl b/source4/librpc/idl/lsa.idl index 5ff4214cbb..8a141bcd54 100644 --- a/source4/librpc/idl/lsa.idl +++ b/source4/librpc/idl/lsa.idl @@ -930,7 +930,16 @@ ); /* Function 0x4d */ - NTSTATUS lsa_LSARLOOKUPNAMES4(); + NTSTATUS lsa_LookupNames4( + [in,range(0,1000)] uint32 num_names, + [in,size_is(num_names)] lsa_String names[], + [out,unique] lsa_RefDomainList *domains, + [in,out] lsa_TransSidArray3 *sids, + [in] uint16 level, + [in,out] uint32 *count, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); /* Function 0x4e */ NTSTATUS lsa_LSAROPENPOLICYSCE(); diff --git a/source4/rpc_server/lsa/dcesrv_lsa.c b/source4/rpc_server/lsa/dcesrv_lsa.c index ca107adfbb..ca6fe36786 100644 --- a/source4/rpc_server/lsa/dcesrv_lsa.c +++ b/source4/rpc_server/lsa/dcesrv_lsa.c @@ -2515,23 +2515,18 @@ static NTSTATUS lsa_lookup_name(struct lsa_policy_state *state, TALLOC_CTX *mem_ /* - lsa_LookupNames3 + lsa_LookupNames4 */ -static NTSTATUS lsa_LookupNames3(struct dcesrv_call_state *dce_call, +static NTSTATUS lsa_LookupNames4(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct lsa_LookupNames3 *r) + struct lsa_LookupNames4 *r) { struct lsa_policy_state *state; - struct dcesrv_handle *h; int i; NTSTATUS status = NT_STATUS_OK; r->out.domains = NULL; - DCESRV_PULL_HANDLE(h, r->in.handle, LSA_HANDLE_POLICY); - - state = h->data; - r->out.domains = talloc_zero(mem_ctx, struct lsa_RefDomainList); if (r->out.domains == NULL) { return NT_STATUS_NO_MEMORY; @@ -2590,6 +2585,35 @@ static NTSTATUS lsa_LookupNames3(struct dcesrv_call_state *dce_call, return status; } +/* + lsa_LookupNames3 +*/ +static NTSTATUS lsa_LookupNames3(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct lsa_LookupNames3 *r) +{ + struct lsa_LookupNames4 r2; + NTSTATUS status; + struct dcesrv_handle *h; + DCESRV_PULL_HANDLE(h, r->in.handle, LSA_HANDLE_POLICY); + + r2.in.num_names = r->in.num_names; + r2.in.names = r->in.names; + r2.in.sids = r->in.sids; + r2.in.count = r->in.count; + r2.in.unknown1 = r->in.unknown1; + r2.in.unknown2 = r->in.unknown2; + + status = lsa_LookupNames4(dce_call, mem_ctx, &r2); + if (dce_call->fault_code != 0) { + return status; + } + + r->out.domains = r2.out.domains; + r->out.sids = r2.out.sids; + r->out.count = r2.out.count; + return status; +} + /* lsa_LookupNames2 */ @@ -2861,15 +2885,6 @@ static NTSTATUS lsa_CREDRRENAME(struct dcesrv_call_state *dce_call, TALLOC_CTX * } -/* - lsa_LSARLOOKUPNAMES4 -*/ -static NTSTATUS lsa_LSARLOOKUPNAMES4(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct lsa_LSARLOOKUPNAMES4 *r) -{ - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); -} - /* lsa_LSAROPENPOLICYSCE |