+static BOOL enum_alias_memberships(const DOM_SID *member_sid,
+ DOM_SID **aliases, int *num_aliases)
+{
+ TALLOC_CTX *mem_ctx = talloc_init("enum_alias_memberships");
+ DOM_SID builtin_sid;
+
+ uint32 *rids = NULL;
+ int i, num_rids = 0;
+
+ BOOL result = False;
+
+ if (mem_ctx == NULL)
+ return False;
+
+ *aliases = NULL;
+ *num_aliases = 0;
+
+ if (!pdb_enum_alias_memberships(mem_ctx, get_global_sam_sid(),
+ member_sid, 1, &rids, &num_rids))
+ goto done;
+
+ for (i=0; i<num_rids; i++) {
+ DOM_SID alias_sid;
+ sid_copy(&alias_sid, get_global_sam_sid());
+ sid_append_rid(&alias_sid, rids[i]);
+ add_sid_to_array(NULL, &alias_sid, aliases, num_aliases);
+ }
+
+ string_to_sid(&builtin_sid, "S-1-5-32");
+
+ if (!pdb_enum_alias_memberships(mem_ctx, &builtin_sid,
+ member_sid, 1, &rids, &num_rids))
+ goto done;
+
+ for (i=0; i<num_rids; i++) {
+ DOM_SID alias_sid;
+ sid_copy(&alias_sid, &builtin_sid);
+ sid_append_rid(&alias_sid, rids[i]);
+ add_sid_to_array(NULL, &alias_sid, aliases, num_aliases);
+ }
+
+ result = True;
+ done:
+ if (mem_ctx != NULL)
+ talloc_destroy(mem_ctx);
+
+ return result;
+}
+