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) 类型属性(如 member
或 memberOf
一起使用时才有效,这些属性通常与可扩展匹配过滤器一起使用), 但 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(或更高版本)的域控制器上可用。
当我 运行 以下结果时,我得到了一个很好的结果列表:
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) 类型属性(如 member
或 memberOf
一起使用时才有效,这些属性通常与可扩展匹配过滤器一起使用), 但 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(或更高版本)的域控制器上可用。