aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/grp.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/grp.cc')
-rw-r--r--winsup/cygwin/grp.cc11
1 files changed, 8 insertions, 3 deletions
diff --git a/winsup/cygwin/grp.cc b/winsup/cygwin/grp.cc
index 77cf6a7..5f80d7a 100644
--- a/winsup/cygwin/grp.cc
+++ b/winsup/cygwin/grp.cc
@@ -428,10 +428,15 @@ gr_ent::enumerate_local ()
((PLOCALGROUP_INFO_0) buf)[cnt++].lgrpi0_name,
sid, &slen, dom, &dlen, &acc_type))
continue;
- if (sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */
+ /* Skip builtin groups if we're enumerating AD as well to avoid
+ duplication. Don't skip "Power Users" and "Device Owners"
+ accounts, they don't show up in AD enumeration. */
+ if (cygheap->dom.member_machine ()
+ && nss_db_enum_primary ()
+ && sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */
&& sid_sub_auth (sid, 0) == SECURITY_BUILTIN_DOMAIN_RID
- && cygheap->dom.member_machine ()
- && nss_db_enum_primary ())
+ && sid_sub_auth (sid, 1) != DOMAIN_ALIAS_RID_POWER_USERS
+ && sid_sub_auth (sid, 1) != DOMAIN_ALIAS_RID_DEVICE_OWNERS)
continue;
fetch_user_arg_t arg;
arg.type = SID_arg;