LDAP查询无效字符

时间:2011-02-28 20:59:01

标签: c# active-directory ldap

我无法针对AD格式化LDAP查询。似乎'+'字符搞砸了我的生活。

以下查询适用于我:

//C# AD lookup

DirectoryEntry group = new DirectoryEntry(
    "LDAP://mydomain/CN=group name that works,OU=Groups,DC=myDomain,DC=us");

但是当我尝试查找其中包含“+”字符的组时:

//C# AD Lookup failure with '+' in CN

DirectoryEntry group = new DirectoryEntry(
    "LDAP://mydomain/CN=name+ thatFails,OU=Groups,DC=myDomain,DC=us");

我得到'指定了无效的dn语法'异常。

我已经通过了一系列有效的群组名称,其中包含各种“特殊”字符,例如“_”和“&”哪个工作。似乎'+'字符是导致我悲伤的原因。如何正确格式化CN以使我的查询有效?

修改

按照建议,我转义了'+'字符。遗憾的是没有帮助。下面是我目前的ldap格式:

LDAP://mydomain/cn=_bigGroup\+ management office,OU=Groups,DC=myDomain,DC=us

2 个答案:

答案 0 :(得分:3)

显然您需要使用反斜杠转义某些字符,请参阅列表 her e

<强>更新

反斜杠确实有效。我在本地ADAM实例中创建了一个新的用户对象,其中cn ='Escape + Test'(托管在端口9389上)。我用以下代码编写了一个小型Windows窗体程序:

using (DirectoryEntry entry = new DirectoryEntry("LDAP://localhost:9389/CN=Escape\\+Test,OU=MyUsers Users,DC=TEST,DC=LOCAL", "test", "xxxx", AuthenticationTypes.None))
{
     MessageBox.Show(entry.Properties["cn"][0].ToString());
}

我运行时程序显示“Escape + Test”。

注意双反斜杠表示实际的反斜杠而不是转义字符。我希望在完整的AD域上有相同的行为。

正如一个完整性检查一样,我用另一个答案中提到的%2B替换了反斜杠,当我尝试访问该条目的属性时,我得到了“服务器上没有这样的对象”错误。

答案 1 :(得分:-1)

仅对特定用户可以连接到LDAP,因此我们需要指定有权访问LDAP的用户组,并在应用程序池中定义它们。 当我们创建新网站时,添加具有访问权限的应用程序池, 除非您提供正确的应用程序池,否则我们将收到此类错误。