r->out.result = WINBIND_STATUS_OK;
}
+static void ndr_child_lookup_rids2names(struct winbindd_domain *domain,
+ struct winbindd_cli_state *state,
+ struct winbind_lookup *r)
+{
+ char *domain_name;
+ char **names;
+ enum lsa_SidType *types;
+ NTSTATUS status;
+ uint32_t i;
+ struct winbind_lookup_name_info *n;
+
+ DEBUG(3, ("lookup rids2name domain:%s num %u\n",
+ sid_string_dbg(r->in.req.rids.domain_sid),
+ r->in.req.rids.num_rids));
+
+
+ status = domain->methods->rids_to_names(domain, state->mem_ctx,
+ r->in.req.rids.domain_sid,
+ r->in.req.rids.rids,
+ r->in.req.rids.num_rids,
+ &domain_name,
+ &names, &types);
+
+ if (!NT_STATUS_IS_OK(status) &&
+ !NT_STATUS_EQUAL(status, STATUS_SOME_UNMAPPED)) {
+ DEBUG(1, ("Can't lookup names by rids: %s\n",
+ nt_errstr(status)));
+ r->out.result = WINBIND_STATUS_FOOBAR;
+ return;
+ }
+
+ r->out.rep->name_array.num_names = r->in.req.rids.num_rids;
+ n = talloc_array(r,
+ struct winbind_lookup_name_info,
+ r->out.rep->name_array.num_names);
+ if (!n) {
+ r->out.result = WINBIND_STATUS_NO_MEMORY;
+ return;
+ }
+ r->out.rep->name_array.names = n;
+
+ for (i=0; i < r->out.rep->name_array.num_names; i++) {
+ n[i].domain_name = domain_name;
+ n[i].account_name = names[i];
+ n[i].type = types[i];
+ }
+
+ r->out.result = WINBIND_STATUS_OK;
+}
+
void winbindd_ndr_domain_child_lookup(struct winbindd_domain *domain,
struct winbindd_cli_state *state)
{
case WINBIND_LOOKUP_LEVEL_NAME2SID:
ndr_child_lookup_name2sid(domain, state, r);
return;
+
+ case WINBIND_LOOKUP_LEVEL_RIDS2NAMES:
+ ndr_child_lookup_rids2names(domain, state, r);
+ return;
}
r->out.result = WINBIND_STATUS_UNKNOWN_LEVEL;