Я пытаюсь создать фильтр LDAP для MS AD, который фильтрует пользователей на основе некоторых OU (в моем случае исключение определенного OU, но также и включение не работает):
(&(cn=Testuser1)(|(ou:dn:=Included1)(ou:dn:=Included2)))
(&(cn=Testuser1)(!(ou:dn:=Excluded)))
не работает. Я проверил (ou:dn:=Included1)
, что перечисляет фактические объекты "папки" (отмеченные * ниже), но не пользователей ниже (с DN, содержащим ou). Я не могу использовать базу поиска, потому что она должна найти несколько:
ou=Included1,dc=example,dc=com *
cn=Testuser1,ou=Included1,dc=example,dc=com +
ou=Included2,dc=example,dc=com
cn=Testuser1,ou=Included2,dc=example,dc=com +
ou=Excluded,dc=example,dc=com
cn=Testuser1,ou=Excluded,dc=example,dc=com -
В моих двух примерах фильтров выше я хочу найти две записи Testuser1 (отмеченные знаком +), а не три (отмеченные знаком -).
Но на самом деле он не соответствует ни одному. Фактические записи пользователя не имеют других различий в атрибутах, по которым я могу фильтровать.
Похоже, что ou:dn:=
синтаксис " " находит только те объекты, у которых первый компонент имени является искомым, а не любые другие...?
решение1
Фильтр отрицательного компонента OU=, по-видимому, не работает с Microsoft LDAP, поскольку это сконструированный атрибут (спасибо @semicolon за ссылку).
Однако можно использовать полное значение атрибута, например:
(&(CN=%u)(!(distinguishedName=CN=%u,OU=Excluded,dc=example,dc=com)))