Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
 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);
 }