Расширяемый фильтр соответствия LDAP LDAP_MATCHING_RULE_IN_CHAIN - PullRequest
0 голосов
/ 09 ноября 2019

Когда я запускаю следующее, я получаю хороший список результатов:

base = 'OU=Security Groups,OU=Groups,DC=myserver,DC=com'
criteria = 'CN=My Example'
attributes = ['member', 'groupType', 'description', 'memberOf']

result = connection.search_ext_s(base, ldap.SCOPE_SUBTREE, criteria, attributes, sizelimit=0)

Однако я не могу найти ничего, что помогло бы мне при использовании LDAP_MATCHING_RULE_IN_CHAIN.

base = 'OU=Security Groups,OU=Groups,DC=myserver,DC=com'
criteria = '1.2.840.113556.1.4.1941:=CN=MatchedRuleChainExample'
attributes = ['member', 'groupType', 'description', 'memberOf']

result = connection.search_ext_s(base, ldap.SCOPE_SUBTREE, criteria, attributes, sizelimit=0)

Выше всегда возвращается пустым. Может ли кто-нибудь помочь мне понять это? Я чувствую себя совершенно растерянным, как пройти через подгруппы в Python.

1 Ответ

0 голосов
/ 09 ноября 2019

Этот синтаксис критериев 1.2.840.113556.1.4.1941:=CN=MatchedRuleChainExample неверен.

Строковое представление расширяемого фильтра соответствий LDAP должно состоять из следующих компонентов по порядку:

  • Открывающая скобка
  • Имя типа атрибута или пустая строка, если она не была указана
  • Строка ": dn", если установлен флаг dnAttributes, или пустая строка, если нет
  • Если aимеется соответствующий идентификатор правила, затем строка, состоящая из двоеточия, за которым следует этот OID, или пустая строка, если нет соответствующего идентификатора правила
  • Строка ": ="
  • Строковое представлениезначения утверждения
  • Закрывающая скобка

Подводя итог, она должна выглядеть следующим образом:

([<attr>][:dn][:<OID>]:=<assertion>)

# In your case, fixing the attribute position :
(cn:1.2.840.113556.1.4.1941:=MatchedRuleChainExample)

Но здесь есть еще одна проблема: LDAP_MATCHING_RULE_IN_CHAIN работает только при использовании с атрибутами типа «Отличительные имена (DN)» (например, member или memberOf, которые обычно используются с расширяемым фильтром совпадений), но cn - нет, поэтому он не может работать.

Чтобы захватить все Security Groups член CN=My Example, вкл. Чтобы использовать вложенные группы, используйте атрибут memberOf с расширяемым соответствием и примените его к группе dn .

# Fixing the attribute type and assertion value :
(memberOf:1.2.840.113556.1.4.1941:=<groupDN>)

Кроме того, вам нужно отфильтровать objectClass, чтобы сопоставлять только записи группы(членами группы также могут быть пользователи или машины). В итоге критерии фильтра должны выглядеть следующим образом:

(&(objectClass=groupOfNames)(memberOf:1.2.840.113556.1.4.1941:=CN=My Example,OU=Security Groups,OU=Groups,DC=myserver,DC=com))

cf. Группа Active Directory, связанные запросы

Обратите внимание, что LDAP_MATCHING_RULE_IN_CHAIN доступно только на контроллерах домена с Windows Server 2003 R2 (или выше).

...