我正在尝试从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:
收益“服务器上没有这样的对象”。
此外,父母不会在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服务器以接受转义字符串?
答案 0 :(得分:0)
对于Windows 8(和Server 2012),有一个Microsoft的修补程序。 http://support.microsoft.com/kb/2802148