r->out.result = WINBIND_STATUS_OK;
}
+static void ndr_child_lookup_sid2domgroups(struct winbindd_domain *domain,
+ struct winbindd_cli_state *state,
+ struct winbind_lookup *r)
+{
+ NTSTATUS status;
+ struct winbind_lookup_sid_info *a;
+ struct dom_sid *groups;
+ uint32_t i, num_groups;
+
+ DEBUG(3, ("lookup sid2domgroups user:%s\n",
+ sid_string_dbg(r->in.req.sid)));
+
+ status = domain->methods->lookup_usergroups(domain, state->mem_ctx,
+ r->in.req.sid, &num_groups,
+ &groups);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("error getting user domain groups info for sid %s: %s\n",
+ sid_string_dbg(r->in.req.sid), nt_errstr(status)));
+ r->out.result = WINBIND_STATUS_FOOBAR;
+ return;
+ }
+
+ a = talloc_array(r, struct winbind_lookup_sid_info, num_groups);
+ if (!a) {
+ r->out.result = WINBIND_STATUS_NO_MEMORY;
+ return;
+ }
+
+ for (i=0; i < num_groups; i++) {
+ a[i].sid = &groups[i];
+ /* TODO: get this from the backend */
+ a[i].type = SID_NAME_DOM_GRP;
+ }
+
+ r->out.rep->sid_array.num_sids = num_groups;
+ r->out.rep->sid_array.sids = a;
+
+ 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_SID2USERINFO:
ndr_child_lookup_sid2userinfo(domain, state, r);
return;
+
+ case WINBIND_LOOKUP_LEVEL_SID2DOMGROUPS:
+ ndr_child_lookup_sid2domgroups(domain, state, r);
+ return;
}
r->out.result = WINBIND_STATUS_UNKNOWN_LEVEL;