/* lsa_LookupNames */ NTSTATUS dcesrv_lsa_LookupNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct lsa_LookupNames *r) { enum dcerpc_transport_t transport = dcerpc_binding_get_transport(dce_call->conn->endpoint->ep_description); struct lsa_LookupNames2 r2; NTSTATUS status; uint32_t i; if (transport != NCACN_NP && transport != NCALRPC) { DCESRV_FAULT(DCERPC_FAULT_ACCESS_DENIED); } ZERO_STRUCT(r2); r2.in.handle = r->in.handle; r2.in.num_names = r->in.num_names; r2.in.names = r->in.names; r2.in.sids = NULL; r2.in.level = r->in.level; r2.in.count = r->in.count; r2.in.lookup_options = 0; r2.in.client_revision = 0; r2.out.count = r->out.count; r2.out.domains = r->out.domains; status = dcesrv_lsa_LookupNames2(dce_call, mem_ctx, &r2); if (r2.out.sids == NULL) { return status; } r->out.sids = talloc(mem_ctx, struct lsa_TransSidArray); if (r->out.sids == NULL) { return NT_STATUS_NO_MEMORY; } r->out.sids->count = r2.out.sids->count; r->out.sids->sids = talloc_array(r->out.sids, struct lsa_TranslatedSid, r->out.sids->count); if (r->out.sids->sids == NULL) { return NT_STATUS_NO_MEMORY; } for (i=0;i<r->out.sids->count;i++) { r->out.sids->sids[i].sid_type = r2.out.sids->sids[i].sid_type; r->out.sids->sids[i].rid = r2.out.sids->sids[i].rid; r->out.sids->sids[i].sid_index = r2.out.sids->sids[i].sid_index; } return status; }
/* lsa_LookupNames */ NTSTATUS dcesrv_lsa_LookupNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct lsa_LookupNames *r) { struct lsa_LookupNames2 r2; NTSTATUS status; int i; ZERO_STRUCT(r2); r2.in.handle = r->in.handle; r2.in.num_names = r->in.num_names; r2.in.names = r->in.names; r2.in.sids = NULL; r2.in.level = r->in.level; r2.in.count = r->in.count; r2.in.lookup_options = 0; r2.in.client_revision = 0; r2.out.count = r->out.count; r2.out.domains = r->out.domains; status = dcesrv_lsa_LookupNames2(dce_call, mem_ctx, &r2); if (r2.out.sids == NULL) { return status; } r->out.sids = talloc(mem_ctx, struct lsa_TransSidArray); if (r->out.sids == NULL) { return NT_STATUS_NO_MEMORY; } r->out.sids->count = r2.out.sids->count; r->out.sids->sids = talloc_array(r->out.sids, struct lsa_TranslatedSid, r->out.sids->count); if (r->out.sids->sids == NULL) { return NT_STATUS_NO_MEMORY; } for (i=0; i<r->out.sids->count; i++) { r->out.sids->sids[i].sid_type = r2.out.sids->sids[i].sid_type; r->out.sids->sids[i].rid = r2.out.sids->sids[i].rid; r->out.sids->sids[i].sid_index = r2.out.sids->sids[i].sid_index; } return status; }