【发布时间】:2014-02-10 03:08:23
【问题描述】:
我正在尝试从 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=' 子字符串的孩子,但 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服务器以接受转义字符串?
【问题讨论】: