当我运行以下程序时,我会得到一个很好的结果列表:
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.2.840.113556.1.4.1941:=CN=MatchedRuleChainExample
是错误的。
LDAP可扩展匹配筛选器的字符串表示必须按顺序由以下组件组成:
- 左括号
- 属性类型的名称,如果未提供,则为空字符串
- 如果设置了dnAttributes标志,则为字符串":dn";如果未设置,则为空字符串
- 如果匹配的规则ID可用,则由冒号后跟该OID组成的字符串,如果没有匹配,则为空字符串规则ID
- 字符串":=">
- 断言值的字符串表示形式
- 右括号
总结一下,它应该看起来像:
([<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))
cf。Active Directory组相关搜索
请注意,LDAP_MATCHING_RULE_IN_CHAIN
仅在具有Windows Server 2003 R2(或更高版本(的域控制器上可用