private LdapObject FindGroupByMember(string member) { if (!AllDomainGroups.Any() && !TryLoadLDAPGroups()) { return(null); } return(AllDomainGroups.FirstOrDefault(g => g.DistinguishedName.Equals(member, StringComparison.InvariantCultureIgnoreCase))); }
private LdapObject FindGroupByMember(string member) { if (!AllDomainGroups.Any() && !TryLoadLDAPGroups()) { return(null); } _log.DebugFormat("LdapUserImporter.FindGroupByMember(member: {0})", member); return(AllDomainGroups.FirstOrDefault(g => g.DistinguishedName.Equals(member, StringComparison.InvariantCultureIgnoreCase))); }
private List <UserInfo> GetGroupUsers(GroupInfo groupInfo, bool clearCache) { if (!LdapHelper.IsConnected) { LdapHelper.Connect(); } _log.DebugFormat("LdapUserImporter.GetGroupUsers(Group name: {0})", groupInfo.Name); 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 (!string.IsNullOrEmpty(PrimaryGroupId) && domainGroup.Sid.EndsWith("-" + PrimaryGroupId)) { // Domain Users found var ldapUsers = FindUsersByPrimaryGroup(); if (!ldapUsers.Any()) { return(users); } foreach (var ldapUser in ldapUsers) { var userInfo = ldapUser.ToUserInfo(this, _log); if (!users.Exists(u => u.Sid == userInfo.Sid)) { users.Add(userInfo); } } } else { var members = domainGroup.GetAttributes(Settings.GroupAttribute, _log); if (!members.Any()) { return(users); } foreach (var member in members) { var ldapUser = FindUserByMember(member); if (ldapUser == null) { var nestedLdapGroup = FindGroupByMember(member); if (nestedLdapGroup != null) { _log.DebugFormat("Found nested LDAP Group: {0}", nestedLdapGroup.DistinguishedName); if (clearCache) { _watchedNestedGroups = new List <string>(); } if (_watchedNestedGroups.Contains(nestedLdapGroup.DistinguishedName)) { _log.DebugFormat("Skip already watched nested LDAP Group: {0}", nestedLdapGroup.DistinguishedName); continue; } _watchedNestedGroups.Add(nestedLdapGroup.DistinguishedName); var nestedGroupInfo = nestedLdapGroup.ToGroupInfo(Settings, _log); var nestedGroupUsers = GetGroupUsers(nestedGroupInfo, false); foreach (var groupUser in nestedGroupUsers) { if (!users.Exists(u => u.Sid == groupUser.Sid)) { users.Add(groupUser); } } } continue; } var userInfo = ldapUser.ToUserInfo(this, _log); if (!users.Exists(u => u.Sid == userInfo.Sid)) { users.Add(userInfo); } } } return(users); }
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); } }
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); }
public List <UserInfo> GetGroupUsers(GroupInfo groupInfo) { if (!LdapHelper.IsConnected) { LdapHelper.Connect(); } 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 (!string.IsNullOrEmpty(PrimaryGroupId) && domainGroup.Sid.EndsWith("-" + PrimaryGroupId)) { // Domain Users found var ldapUsers = FindUsersByPrimaryGroup(); if (!ldapUsers.Any()) { return(users); } foreach (var ldapUser in ldapUsers) { var userInfo = ldapUser.ToUserInfo(this, _log); if (!users.Exists(u => u.Sid == userInfo.Sid)) { users.Add(userInfo); } } } else { var members = domainGroup.GetAttributes(Settings.GroupAttribute, _log); if (!members.Any()) { return(users); } foreach (var member in members) { var ldapUser = FindUserByMember(member); if (ldapUser == null) { var nestedLdapGroup = FindGroupByMember(member); if (nestedLdapGroup != null) { var nestedGroupInfo = nestedLdapGroup.ToGroupInfo(Settings, _log); var nestedGroupUsers = GetGroupUsers(nestedGroupInfo); foreach (var groupUser in nestedGroupUsers) { if (!users.Exists(u => u.Sid == groupUser.Sid)) { users.Add(groupUser); } } } continue; } var userInfo = ldapUser.ToUserInfo(this, _log); if (!users.Exists(u => u.Sid == userInfo.Sid)) { users.Add(userInfo); } } } return(users); }