J'ai un client qui utilise un service Windows que j'ai écrit qui interroge un serveur LDAP de répertoire actif spécifié pour les utilisateurs dans les groupes spécifiés au sein de ce serveur LDAP. Une fois qu'il trouve un utilisateur, il remplit les informations de l'utilisateur (c'est-à-dire le nom d'utilisateur, le courrier électronique, etc.) et tente de récupérer le domaine de l'utilisateur au sein de ce serveur LDAP.Active Directory: Obtenir RootDSE dans un domaine résidant dans la forêt avec plusieurs racines?
Lorsque j'essaie de récupérer le domaine de l'utilisateur pour ce client spécifique, j'obtiens une exception DirectoryServicesCOMException: Échec d'ouverture de session: nom d'utilisateur inconnu ou mot de passe incorrect. Cette exception est levée lorsque je tente de référencer une propriété sur l'objet RootDSE DirectoryEntry que j'instancie.
Ce client a une forêt à deux racines, configurée comme suit.
Active Directory Domaines et approbations
ktregression.com
ktregression.root
Je suppose que c'est la question. Y a-t-il un moyen de contourner cela? Un moyen de toujours récupérer le nom netbios d'un objet domaine spécifique sans courir dans cette exception?
Voici quelques exemples de code montrant une configuration du serveur AD test, comme indiqué précédemment:
string domainNameLdap = "dc=tempe,dc=ktregression,dc=com";
DirectoryEntry RootDSE = new DirectoryEntry (@"LDAP://10.32.16.6/RootDSE");
DirectoryEntry servers2 = new DirectoryEntry (@"LDAP://cn=Partitions," + RootDSE.Properties["configurationNamingContext"].Value); //*****THIS IS WHERE THE EXCEPTION IS THROWN********
//Iterate through the cross references collection in the Partitions container
DirectorySearcher clsDS = new DirectorySearcher(servers2);
clsDS.Filter = "(&(objectCategory=crossRef)(ncName=" + domainNameLdap + "))";
clsDS.SearchScope = SearchScope.Subtree;
clsDS.PropertiesToLoad.Add("nETBIOSName");
List<string> bnames = new List<string>();
foreach (SearchResult result in clsDS.FindAll())
bnames.Add(result.Properties["nETBIOSName"][0].ToString());
Avez-vous vérifié que 'RootDSE.Properties [" configurationNamingContext "]. Value' renvoie une valeur qui n'est pas nulle, ou respecte la nomenclature LDAP de' LDAP: // CN = Partitions, DC = ktregression , DC = com' ou similaire? –
Avez-vous pris connaissance de l'exemple de code que je vous ai fourni pour votre autre question similaire d'hier? –
@Will, ouais j'ai jeté un coup d'oeil et je l'ai essayé. J'ai répondu à cela avec une autre question. Je pense que j'ai deux problèmes distincts, c'est pourquoi j'ai aussi commencé celui-ci. Le problème où j'ai une instance de deux racines dans une seule forêt. –