0x80005000 неизвестная ошибка на UserPrincipal.GetGroups со специальными символами в OU
Я пытаюсь использовать метод GetGroups из UserPrincipal. Если учетная запись пользователя находится в подразделении, содержащем косую черту, вызов GetGroups завершается ошибкой com Unknown 0x80005000. Учетная запись пользователя найдена просто найти и я могу получить доступ к другим свойствам. Если я удаляю косую черту в имени подразделения, то все работает. Я нашел ссылку на экранирование косой черты в имени,но это завернуто в метод GetGroups. Я также убедился, что нужно использовать PrincipalContext (ContextType, String) конструктор, который я сделал. Я также попытался использовать полное доменное имя с экранированной косой чертой и получил те же результаты. У меня есть пример кода ниже в C#:
Я использую Visual Studio 2012. Код работает на Windows 10 Enterprise x64. Целевая версия .net-4.5
using System;
using System.Linq;
using System.DirectoryServices.AccountManagement;
string SamAccountName = "user1";
//The OUs the user is in:
//Broken OU: "OU=Test / Test,DC=contoso,DC=com"
//Working OU: "OU=Test & Test,DC=contoso,DC=com"
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);
UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, SamAccountName);
//The user was found so this works
Console.WriteLine("User Found: {0}", user.DistinguishedName);
//This causes COM Exception: Unknown Error 0x80005000
string output = string.Join(Environment.NewLine, user.GetGroups().Select(x => x.Name).ToArray());
Console.WriteLine(output);
В конечном счете я просто заменяю любой из этих типов специальных символов в имени подразделения, потому что это, безусловно, самое простое решение. В основном мне просто интересно убедиться, что код, который я пишу, не взорвется в будущем.
1 ответ:
Я считаю, что это ошибка.
Исходный код .Объем ядра реализации
AccountManagementпространство имен, теперь доступно онлайн. Я бы предположил, что версия .NET Framework почти такая же.Я полагаю, что проблема находится на строке 1218 ADStoreCtx.cs :
roots.Add(new DirectoryEntry("GC://" + gc.Name + "/" + p.DistinguishedName, this.credentials != null ? this.credentials.UserName : null, this.credentials != null ? this.credentials.Password : null, this.AuthTypes));То есть отбрасывание отличительного имени пользователя в путь LDAP, который использует косые черты в качестве разделителей, не экранируя никаких косых черт в DN.
Я знаю, что об ошибках для .NET Core можно сообщить в GitHub, но я не уверен, где сообщить об ошибке с .NET Framework.
Comments