public List <GroupInfo> GetDiscoveredGroupsByAttributes(LDAPSupportSettings settings, out List <GroupInfo> existingGroups) { existingGroups = new List <GroupInfo>(); if (settings.GroupMembership) { if (DomainGroups == null) { DomainGroups = ldapHelper.GetGroupsByAttributes(settings); } if (DomainGroups != null) { var groups = new List <GroupInfo>(DomainGroups.Count); var removedGroups = new List <LDAPObject>(); foreach (var domainGroup in DomainGroups) { var lastId = domainGroup.Sid.Split(hyphen).Last(); if (lastId != primaryGroupId) { var members = ldapHelper.GetGroupAttribute(domainGroup, settings.GroupAttribute); if (members == null) { removedGroups.Add(domainGroup); continue; } } string sid = domainGroup.Sid; var groupInfo = new GroupInfo { Name = domainGroup.InvokeGet(settings.GroupNameAttribute) as string, Sid = sid }; // Domain Users - primary group if (sid.Split(hyphen).Last() == primaryGroupId) { primaryGroup = groupInfo; } if (CoreContext.UserManager.GetGroupInfoBySid(groupInfo.Sid).ID == Core.Users.Constants.LostGroupInfo.ID) { groups.Add(groupInfo); } else { existingGroups.Add(groupInfo); } } foreach (var domainGroup in removedGroups) { if (DomainGroups.Contains(domainGroup)) { DomainGroups.Remove(domainGroup); } } return(groups); } } return(null); }
public List <UserInfo> GetGroupUsers(GroupInfo groupInfo) { var users = new List <UserInfo>(); if (!AllDomainGroups.Any() && !TryLoadLDAPGroups()) { return(users); } var domainGroup = AllDomainGroups.FirstOrDefault(lg => lg.Sid.Equals(groupInfo.Sid)); if (domainGroup == null) { return(users); } if (domainGroup.Sid.EndsWith("-513")) { // Domain Users found //var ldapUsers = _ldapHelper.GetUsersByAttributesAndFilter(_settings, "(&(objectCategory=person)(objectClass=user)(primaryGroupID=513))"); var ldapUsers = _ldapHelper.GetUsersFromPrimaryGroup(_settings, "513"); if (ldapUsers == null) { return(users); } foreach (var ldapUser in ldapUsers) { var userInfo = CreateUserInfo(ldapUser); if (!users.Exists(u => u.Sid == userInfo.Sid)) { users.Add(userInfo); } } } else { var members = _ldapHelper.GetGroupAttribute(domainGroup, _settings.GroupAttribute); if (members == null) { return(users); } foreach (var member in members) { var ldapUser = FindUserByMember(member); if (ldapUser != null) { var userInfo = CreateUserInfo(ldapUser); if (!users.Exists(u => u.Sid == userInfo.Sid)) { users.Add(userInfo); } } } } return(users); }