public static void GetNestedGroups(string strGroupDN) { var _currentDomainofLoggedinUser = Domain.GetComputerDomain(); var currentDomainofLoggedinUser = Domain.GetComputerDomain(); var currentDomainController = currentDomainofLoggedinUser.FindDomainController(); //Gets the current Domain controller var domainName = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName; string strPath = "LDAP://" + currentDomainController.Name; //Gets the current domain controller name AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); using (LdapConnection ldap = new LdapConnection(new LdapDirectoryIdentifier(domainName, 636))) { ldap.AuthType = AuthType.Basic; ldap.SessionOptions.SecureSocketLayer = false; var s = new SecureString(); NetworkCredential network = new NetworkCredential(WindowsIdentity.GetCurrent().Name, s); string ldapSearchFilter = String.Format ("(&(memberOf={0})(objectClass=group))", strGroupDN); NetworkCredential cred = CredentialCache.DefaultNetworkCredentials; ldap.Bind(network); string[] attributesToReturn = new string[] { "distinguishedName" }; SearchRequest searchRequest = new SearchRequest(strGroupDN, ldapSearchFilter, SearchScope.OneLevel, attributesToReturn); searchRequest.DistinguishedName = strGroupDN; searchRequest.Filter = String.Format ("(&(memberOf={0})(objectClass=group))", strGroupDN); SearchResponse response = (SearchResponse)ldap.SendRequest(searchRequest); if (response != null && response.Entries.Count > 0) { SearchResultEntry obj = response.Entries[0]; var groupCount = ((System.Collections.CollectionBase)(obj.Attributes["memberOf"])).Count; foreach (SearchResultEntry entry in response.Entries) { var groupName = entry.DistinguishedName; _subGroupList.Add(groupName.ToString().Split('=')[1].Split(',')[0]); GetNestedGroups(groupName); } } } }
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)