Вы должны проверить 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.