Я пытаюсь получить DirectoryEntry с сервера OpenLDAP для dn, который выглядит как «LDAP: // server/cn = John Smith + sn = Smith, ou = people, dc = corp, dc = орг ":Escape ldap dn в DirectoryEntry
> New-Object "LDAP://server/cn=John Smith+sn=Smith,ou=people,dc=corp,dc=org", "user", "pass", "FastBind"
возвращает ошибку 0x80005000, который, я предполагаю, означает, что некоторые символы в дпе не спаслись. (Для любого дп, не содержит «+ зп =» Этот код работает отлично)
Документация состояния, что специальные символы должны быть экранированы, но избежать дп никак:
- 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: // сервер/сп = Джон Смит \ 2Bsn \ 3DSmith, НУ = люди, DC = АМФ, DC = орг
- LDAP: // сервер/сп = John Smith, OU = люди, dc = corp, dc = org
Доходность «На сервере нет такого объекта».
Кроме того, parent ou не перечисляет ни одного дочернего элемента с подстрокой '+ sn =' в dn, но 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 Browser (на основе, как я предполагаю, на компоненте LDAP Dotnet) также не отображать эту запись в родительском оу.
Итак, есть ли способ правильно выполнить dn, как это?
UPDATE
Java клиенты работают нормально, Wireshark показывает, что Java посылает неэкранированную строку, чтобы получить объект, и Dotnet посылает сбежавшую строку и ничего не получает.
Можно ли избежать строки или перенастроить openldap-сервер, чтобы принять экранированную строку?
Это не проблема для этой проблемы: она исправляет ошибку кэширования схемы, когда вы вообще не можете делать запросы к OpenLDAP. – Somescout