我試圖從OpenLDAP服務器獲取DirectoryEntry以查找類似於「LDAP:// server/cn = John Smith + sn = Smith,ou = people,dc = corp,dc =組織「:在DirectoryEntry中轉義ldap dn
它返回錯誤0x80005000,其中,我假定意味着在DN一些字符不會被轉義。 (對於不包含任何DN「+ SN =」這個代碼工作正常)
文檔指出,特殊字符應該逃過一劫,但以任何方式逃避DN:
- LDAP://服務器/ cn = John Smith \ + sn \ = Smith,ou = people,dc = corp,dc = org
- LDAP:// server/cn = John Smith \ + sn = Smith,ou = people,dc = corp, DC =組織
- LDAP://服務器/ CN =約翰·史密斯\ 2Bsn \ 3DSmith,OU =人,DC =公司,DC =組織
- LDAP://服務器/ CN =約翰·史密斯,OU =人, dc = corp,dc = org
收益率「服務器上沒有這樣的對象」。
此外,父ou不會在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?
UPDATE
Java客戶端做工精細,Wireshark的顯示,Java的發送轉義字符串獲得對象,和DOTNET發送轉義字符串和將一無所獲。
是否有可能轉義字符串或重新配置openldap服務器接受轉義字符串?
它不能解決這個問題:它修復了模式緩存錯誤,當你無法對OpenLDAP進行查詢時。 – Somescout