在DirectoryEntry中转义ldap dn

时间:2014-02-10 03:08:24

标签: .net ldap openldap

我正在尝试从OpenLDAP服务器获取DirectoryEntry以获取看起来像“LDAP:// server / cn = John Smith + sn = Smith,ou = people,dc = corp,dc = org”的dn:

> New-Object "LDAP://server/cn=John Smith+sn=Smith,ou=people,dc=corp,dc=org", "user", "pass", "FastBind"

它返回错误0x80005000,我认为这意味着dn中的某些字符没有被转义。 (对于任何不包含'+ sn ='的dn,此代码可以正常工作)

文档说明,特殊字符应该被转义,但是以任何方式转义dn:

  • LDAP:// server / cn = John Smith \ + sn \ = Smith,ou = people,dc = corp,dc = org
  • LDAP:// server / cn = John Smith \ + sn = Smith,ou = people,dc = corp,dc = org
  • LDAP:// server / cn = John Smith \ 2Bsn \ 3DSmith,ou = people,dc = corp,dc = org
  • LDAP:// server / cn = John Smith,ou = people,dc = corp,dc = org

收益“服务器上没有这样的对象”。

此外,父母不会在dn中列出任何带有'+ sn ='substring的子项,但是针对特定过滤器的DirectorySearcher,如'(cn = John Smith)',会返回正确的结果。

> $ent = New-Object "LDAP://server/ou=people,dc=corp,dc=org", "user", "pass", "FastBind"
> $ent.Children
.... 
everything, except Jonh Smith
....
> Search-ldap "(cn=John Smith)"
Path                                              Properties
----                                              ----------
LDAP://server/cn=John Smith+sn=Smith,ou=peopl...  {sambapwdlastset, telephonenumber, sn...}

LDAP浏览器(我假设,基于dotNet LDAP组件)也不会在父ou中显示此条目。

那么,有没有什么方法可以像这样正确地逃脱dn?

更新

Java客户端工作正常,wireshark显示java发送非转义字符串以获取对象,而dotNet发送转义字符串并且什么都没有。

是否可以转义字符串或重新配置openldap服务器以接受转义字符串?

1 个答案:

答案 0 :(得分:0)

对于Windows 8(和Server 2012),有一个Microsoft的修补程序。 http://support.microsoft.com/kb/2802148