public bool TryLoadLDAPUsers()
        {
            try
            {
                if (!Settings.EnableLdapAuthentication)
                {
                    return(false);
                }

                if (!LdapHelper.IsConnected)
                {
                    LdapHelper.Connect();
                }

                var users = LdapHelper.GetUsers();

                foreach (var user in users)
                {
                    if (string.IsNullOrEmpty(user.Sid))
                    {
                        AllSkipedDomainUsers.Add(user, LdapSettingsStatus.WrongSidAttribute);
                        continue;
                    }

                    if (!CheckLoginAttribute(user, Settings.LoginAttribute))
                    {
                        AllSkipedDomainUsers.Add(user, LdapSettingsStatus.WrongLoginAttribute);
                        continue;
                    }

                    if (!Settings.GroupMembership)
                    {
                        AllDomainUsers.Add(user);
                        continue;
                    }

                    if (!Settings.UserAttribute.Equals(LdapConstants.RfcLDAPAttributes.DN,
                                                       StringComparison.InvariantCultureIgnoreCase) && !CheckUserAttribute(user, Settings.UserAttribute))
                    {
                        AllSkipedDomainUsers.Add(user, LdapSettingsStatus.WrongUserAttribute);
                        continue;
                    }

                    AllDomainUsers.Add(user);
                }

                if (AllDomainUsers.Any())
                {
                    PrimaryGroupId = AllDomainUsers.First().GetValue(LdapConstants.ADSchemaAttributes.PRIMARY_GROUP_ID) as string;
                }

                return(AllDomainUsers.Any() || !users.Any());
            }
            catch (ArgumentException)
            {
                _log.ErrorFormat("TryLoadLDAPUsers(): Incorrect filter. userFilter = {0}", Settings.UserFilter);
            }

            return(false);
        }
        public List <LdapObject> FindUsersByAttribute(string key, IEnumerable <string> value, StringComparison comparison = StringComparison.InvariantCultureIgnoreCase)
        {
            var users = new List <LdapObject>();

            if (!AllDomainUsers.Any() && !TryLoadLDAPUsers())
            {
                return(users);
            }

            return(AllDomainUsers.Where(us => !us.IsDisabled && value.Any(val => string.Equals(val, (string)us.GetValue(key), comparison))).ToList());
        }
        private string LoadLDAPDomain()
        {
            try
            {
                if (!Settings.EnableLdapAuthentication)
                {
                    return(null);
                }

                if (!LdapHelper.IsConnected)
                {
                    LdapHelper.Connect();
                }

                string ldapDomain;

                if (AllDomainUsers.Any())
                {
                    ldapDomain = AllDomainUsers.First().GetDomainFromDn();

                    if (!string.IsNullOrEmpty(ldapDomain))
                    {
                        return(ldapDomain);
                    }
                }

                ldapDomain = LdapHelper.SearchDomain();

                if (!string.IsNullOrEmpty(ldapDomain))
                {
                    return(ldapDomain);
                }

                ldapDomain = LdapUtils.DistinguishedNameToDomain(Settings.UserDN);

                if (!string.IsNullOrEmpty(ldapDomain))
                {
                    return(ldapDomain);
                }

                ldapDomain = LdapUtils.DistinguishedNameToDomain(Settings.GroupDN);

                if (!string.IsNullOrEmpty(ldapDomain))
                {
                    return(ldapDomain);
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("LoadLDAPDomain(): Error: {0}", ex);
            }

            return(null);
        }
Пример #4
0
        private LDAPObject FindUserByMember(string userAttributeValue)
        {
            if (!AllDomainUsers.Any() && !TryLoadLDAPUsers())
            {
                return(null);
            }

            return(AllDomainUsers.FirstOrDefault(u =>
                                                 Convert.ToString(u.InvokeGet(_settings.UserAttribute))
                                                 .Equals(userAttributeValue,
                                                         StringComparison.InvariantCultureIgnoreCase)));
        }
Пример #5
0
        private LdapObject FindUserByMember(string userAttributeValue)
        {
            if (!AllDomainUsers.Any() && !TryLoadLDAPUsers())
            {
                return(null);
            }

            return(AllDomainUsers.FirstOrDefault(u =>
                                                 u.DistinguishedName.Equals(userAttributeValue, StringComparison.InvariantCultureIgnoreCase) ||
                                                 Convert.ToString(u.GetValue(Settings.UserAttribute)).Equals(userAttributeValue,
                                                                                                             StringComparison.InvariantCultureIgnoreCase)));
        }
        public List <UserInfo> GetDiscoveredUsersByAttributes()
        {
            var users = new List <UserInfo>();

            if (!AllDomainUsers.Any() && !TryLoadLDAPUsers())
            {
                return(users);
            }

            var usersToAdd = AllDomainUsers.Select(ldapObject => ldapObject.ToUserInfo(this, _log));

            users.AddRange(usersToAdd);

            return(users);
        }
Пример #7
0
        public List <UserInfo> GetDiscoveredUsersByAttributes()
        {
            var users = new List <UserInfo>();

            if (!AllDomainUsers.Any() && !TryLoadLDAPUsers())
            {
                return(users);
            }

            var usersToAdd = AllDomainUsers.Select(CreateUserInfo);

            users.AddRange(usersToAdd);

            return(users);
        }
Пример #8
0
        private List <LdapObject> FindUsersByPrimaryGroup()
        {
            if (!AllDomainUsers.Any() && !TryLoadLDAPUsers())
            {
                return(null);
            }

            return
                (AllDomainUsers.Where(
                     lu =>
            {
                var primaryGroupId = lu.GetValue(LdapConstants.ADSchemaAttributes.PRIMARY_GROUP_ID) as string;

                return !string.IsNullOrEmpty(primaryGroupId) &&
                primaryGroupId.Equals(PrimaryGroupId, StringComparison.InvariantCultureIgnoreCase);
            })
                 .ToList());
        }
Пример #9
0
        private List <LdapObject> FindUsersByPrimaryGroup(string sid)
        {
            _log.Debug("LdapUserImporter.FindUsersByPrimaryGroup()");

            if (!AllDomainUsers.Any() && !TryLoadLDAPUsers())
            {
                return(null);
            }

            return
                (AllDomainUsers.Where(
                     lu =>
            {
                var primaryGroupId = lu.GetValue(LdapConstants.ADSchemaAttributes.PRIMARY_GROUP_ID) as string;

                return !string.IsNullOrEmpty(primaryGroupId) &&
                sid.EndsWith(primaryGroupId);
            })
                 .ToList());
        }
Пример #10
0
        public void SyncUserGroupMembership(UserInfo user)
        {
            if (user == null ||
                !_settings.GroupMembership ||
                AllDomainGroups == null ||
                !AllDomainGroups.Any() && !TryLoadLDAPGroups() ||
                !AllDomainUsers.Any() && !TryLoadLDAPUsers())
            {
                return;
            }

            var domainUser = AllDomainUsers.FirstOrDefault(u => u.Sid.Equals(user.Sid));

            if (domainUser == null)
            {
                return;
            }

            var userAttributeValue = _ldapHelper.GetUserAttribute(domainUser, _settings.UserAttribute);

            foreach (var domainGroup in AllDomainGroups)
            {
                var sid = domainGroup.Sid;

                var members = _ldapHelper.GetGroupAttribute(domainGroup, _settings.GroupAttribute);

                if (members == null)
                {
                    continue;
                }

                foreach (var member in members)
                {
                    var ldapUser = FindUserByMember(member);

                    if (ldapUser == null)
                    {
                        continue;
                    }

                    if (!userAttributeValue.Equals(member, StringComparison.InvariantCultureIgnoreCase))
                    {
                        continue;
                    }

                    var groupInfo = CoreContext.UserManager.GetGroupInfoBySid(sid);

                    if (!Equals(groupInfo, Core.Users.Constants.LostGroupInfo))
                    {
                        CoreContext.UserManager.AddUserIntoGroup(user.ID, groupInfo.ID);
                    }
                }
            }

            var primaryGroup = AllDomainGroups.FirstOrDefault(g => g.Sid.EndsWith("-513"));

            if (primaryGroup == null)
            {
                return;
            }

            var getPrimaryGroup = CoreContext.UserManager.GetGroupInfoBySid(primaryGroup.Sid);

            if (!Equals(getPrimaryGroup, Core.Users.Constants.LostGroupInfo))
            {
                CoreContext.UserManager.AddUserIntoGroup(user.ID, getPrimaryGroup.ID);
            }
        }