2012-09-23 140 views
3

我希望我已经适当地标题了这个问题。这里的混合主题的位。逃避LDAP查询字符串中的非特殊字符

我在C#中创建了一个函数来创建Active Directory用户。使用需要如下所示的LDAP字符串:

userinfo.displayName = "Surname, Firstname" 

CN=" + userinfo.displayName, "user" 

由于逗号在字符串中,因此会传回以下异常消息。

指定了无效的dn语法。

后弦完整DN已经应用是如下

"CN=Surname**,** Lastname,OU=Users,DC="Foo",DC="net" 

中的通用名称的逗号CN =是问题...

有没有一种方式,C#能忽略字符串中的逗号?有效逃避它。

+0

如果你看过这个问题。该字符串由C#解析 – goingsideways

回答

7

使用前导斜杠('\')完成辨别名称中无效字符的操作。例如,上面的专有名称应该是:

"CN=Surname\, Lastname,OU=Users,DC=Foo,DC=net" 

RFC 4514: Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names第2.4节,字符"#+,;<=>\可以通过转义领先的斜线。其他非字母数字字符应以\XX的形式显示,其中XX是UTF8字符编码的十六进制数字。例子见第4节。

请注意X500DistinguishedName类(在System.Security加密中)似乎没有Parse或Escape方法来帮助解决这种情况。

+0

感谢您的详细解答并参考RFC标准 – goingsideways

5

某些字符必须与反斜杠转义后跟两个十六进制数字,根据RFC4514不是单一反斜杠(\。许多目录目录服务器支持\,,但由于它不是标准化的,所以LDAP客户端不能使用这种表示法 - 它可以在一些服务器上运行,但不在其他服务器上运行,客户端也不能认为它们正在与特定服务器的软件进行通信。