LDAP 可扩展匹配过滤器 LDAP_MATCHING_RULE_IN_CHAIN

LDAP extensible match filter LDAP_MATCHING_RULE_IN_CHAIN

当我 运行 以下结果时,我得到了一个很好的结果列表:

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)

上面总是returns空白。谁能帮我掌握这个?我完全不知道如何通过 Python 中的子组。

此条件语法 1.2.840.113556.1.4.1941:=CN=MatchedRuleChainExample 是错误的。

string representation of an LDAP extensible match filter 必须按顺序由以下组件组成:

  • An opening parenthesis
  • The name of the attribute type, or an empty string if none was provided
  • The string ":dn" if the dnAttributes flag is set, or an empty string if not
  • If a matching rule ID is available, then a string comprised of a colon followed by that OID, or an empty string if there is no matching rule ID
  • The string ":="
  • The string representation of the assertion value
  • A closing parenthesis

总而言之,它应该是这样的:

([<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) 类型属性(如 membermemberOf 一起使用时才有效,这些属性通常与可扩展匹配过滤器一起使用), 但 cn 不是,所以它不能工作。

要获取 CN=My Example 的所有 Security Groups 成员,包括嵌套组,请使用具有可扩展匹配的 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))

比照。 Active Directory Group Related Searches

请注意,LDAP_MATCHING_RULE_IN_CHAIN 仅在具有 Windows Server 2003 R2(或更高版本)的域控制器上可用。