public void AddUserIntoGroups(UserInfo user, LDAPSupportSettings settings) { if (user == null || !settings.GroupMembership || DomainGroups == null) { return; } var domainUser = FindDomainUser(user.Sid); if (domainUser == null) { return; } var dn = ADDomain.GetUserAttribute(domainUser, settings.UserAttribute); foreach (var domainGroup in DomainGroups) { var members = ADDomain.GetGroupAttribute(domainGroup, settings.GroupAttribute); if (members != null) { if (members.Value != null) { foreach (var member in members) { var memberString = member.ToString(); if (IsUser(memberString)) { if (dn.Equals(memberString, StringComparison.InvariantCultureIgnoreCase)) { var group = CoreContext.GroupManager.GetGroupInfoBySid(domainGroup.Sid.Value); if (group != Core.Users.Constants.LostGroupInfo) { CoreContext.UserManager.AddUserIntoGroup(user.ID, group.ID); } } } else if (!_cache.Exists(memberString, domainGroup.Sid.Value) && IsGroup(memberString)) { _cache.Add(memberString, domainGroup.Sid.Value); } } } } } if (_primaryGroup != null) { var primaryGroup = CoreContext.GroupManager.GetGroupInfoBySid(_primaryGroup.Sid); if (primaryGroup != Core.Users.Constants.LostGroupInfo) { CoreContext.UserManager.AddUserIntoGroup(user.ID, primaryGroup.ID); } } }
public List <GroupInfo> GetDiscoveredGroupsByAttributes(LDAPSupportSettings settings) { if (settings.GroupMembership) { if (DomainGroups == null) { DomainGroups = ADDomain.GetGroupsByParameter(settings); } if (DomainGroups != null) { var groups = new List <GroupInfo>(DomainGroups.Count); var removedGroups = new List <LDAPGroup>(); foreach (var domainGroup in DomainGroups) { var lastId = domainGroup.Sid.Value.Split(LAST_HYPHEN).Last(); if (lastId != PRIMARY_GROUP) { var members = ADDomain.GetGroupAttribute(domainGroup, settings.GroupAttribute); if (members == null || members.Value == null) { removedGroups.Add(domainGroup); continue; } } var groupInfo = new GroupInfo { Name = domainGroup.Name, Sid = domainGroup.Sid.Value }; // Domain Users - primary group if (domainGroup.Sid.Value.Split(LAST_HYPHEN).Last() == PRIMARY_GROUP) { _primaryGroup = groupInfo; } if (CoreContext.GroupManager.GetGroupInfoBySid(groupInfo.Sid).ID == Core.Users.Constants.LostGroupInfo.ID) { groups.Add(groupInfo); } } foreach (var domainGroup in removedGroups) { if (DomainGroups.Contains(domainGroup)) { DomainGroups.Remove(domainGroup); } } return(groups); } } return(null); }