编程语言
首页 > 编程语言> > c# – 0x80005000 OU中包含特殊字符的UserPrincipal.GetGroups出现未知错误

c# – 0x80005000 OU中包含特殊字符的UserPrincipal.GetGroups出现未知错误

作者:互联网

我正在尝试使用UserPrincipal的GetGroups方法.如果用户帐户位于包含正斜杠的OU中,则对GetGroups的调用将失败,并显示COM未知错误0x80005000.找到用户帐户,我可以访问其他属性.如果我删除OU名称中的斜杠,那么一切正常.我找到了一个在名称中转义斜杠的引用,但它包含在GetGroups方法下.我还发现确保使用我已经完成的PrincipalContext(ContextType,String)构造函数.我也尝试使用带有转义斜杠的FQDN并获得相同的结果.我在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);

最后我只是替换OU名称中的任何这些类型的特殊字符,因为这是迄今为止最简单的解决方案.我只是好奇地确保我写的代码不会在路上爆炸.

解决方法:

我相信这是一个错误.

AccountManagement命名空间的.NET Core实现的源代码现在可以在线获得.我认为.NET Framework版本大致相同.

我相信问题是在line 1218 of 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中的任何斜杠.

我知道可以在GitHub中报告.NET Core的错误,但我不确定在哪里报告.NET Framework的错误.

标签:c,net,active-directory,directoryservices
来源: https://codeday.me/bug/20190622/1262624.html