Использование DN в поисковом фильтре - PullRequest
8 голосов
/ 19 сентября 2011

В моей клиентской программе LDAP иногда приходится включать значение DN в поисковый фильтр. Но этот DN часто меняется, и каждый раз, когда мне приходится менять этот фильтр в моем коде.

Когда я погуглил это, я получил что-то вроде этого

Предположим, что вы хотите вывести всех пользователей ObjectType = Person из отдела НИОКР и HR, но не пользователей из Marketing and PM. Фильтр будет:

(&(objectClass=person)(|(ou:dn:=ResearchAndDevelopment)(ou:dn:=HumanResources)))

Кто-нибудь может объяснить это более подробно?

1 Ответ

10 голосов
/ 08 августа 2014

Вы должны проверить RFC 2254 (строковое представление фильтров поиска LDAP).

Фильтры LDAP используют польскую запись для логических операторов. Таким образом, оператор пишется перед его операндами:

(&(condition1)(condition2)(condition3)...)

Приведенный выше пример означает, что вы хотите, чтобы все записи LDAP удовлетворяли условие1 И условие2 И условие3 и т. Д.

Тогда сами условия. Они очень просты и могут состоять только из нескольких типов:

  • текущее состояние - (attrName=*)
  • простое условие - (attrName>=value) / (attrName<=value) / (attrNamevalue=value) / (attrName~=value)
  • условие подстроки - (attrName=*value*) / (attrName=*value) / (attrName=value*)
  • растяжимое условие - (attrName:dn:=value) / (attrName:matchingRule:=value)

Расширяемое условие с ключевым словом :dn: означает, что вы хотите, чтобы атрибуты из DN записи также учитывались. Поэтому для вашего случая запись cn=John Doe,ou=HumanResources,ou=Users,dc=example,dc=com будет соответствовать фильтру (ou:dn:=HumanResource).


Перевод вашего примера фильтра на английское предложение будет:

Найдите мне все записи LDAP, которые имеют objectClass, равный person, и имеют ResearchAndDevelopment или HumanResources в их атрибуте ou или где-то на их DN.

...