转义非特殊字符的字符串的LDAP查询(Escaping non special characters

2019-09-22 20:38发布

我希望我合适的名称,这一问题。 这里的混合主题的位。

我创建了一个函数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#可以忽略逗号出字符串的? 有效地逃避它。

Answer 1:

在一个专有名称转义无效字符与斜线完成(“\”)。 例如,上面的专有名称应该是:

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

根据第2.4 RFC 4514:轻型目录访问协议(LDAP):专用名称的字符串表示 ,人物 "#+,;<=> ,和\可以通过前导斜杠转义其它非字母数字字符应的形式示出。 \XX ,其中XX是UTF8的十六进制数字字符编码。参见实施例部分4。

需要注意的是X500DistinguishedName类(在System.Security密码)没有出现有分析或逃生方法,在这种情况下提供帮助。



Answer 2:

某些字符必须以反斜杠(转义\ ), 接着两个十六进制数字 ,而不是单个反斜杠根据RFC4514。 许多目录目录服务器支持\, ,但由于它不规范,LDAP客户机不能使用这个符号-它会在某些服务器而不是其他和客户机上的工作不应该假设他们与特定服务器的软件通信。



文章来源: Escaping non special characters in string for LDAP query