python-ldap - 在 python-ldap 中关闭搜索继续结果?
问题描述
使用带有参数的python-ldap.search_s()
函数(https://www.python-ldap.org/en/python-ldap-3.3.0/reference/ldap.html#ldap.LDAPObject.search_s)...
base = DC=myorg,DC=local
filterstr = (&(sAMAccountName={login})(|(memberOf=CN=zone1,OU=zones,OU=datagroups,DC=myorg,DC=local)(memberOf=CN=zone2,OU=zones,OU=datagroups,DC=myorg,DC=local)))
...尝试匹配特定的 AD 用户。然而,当我查看返回的结果(带有login = myuser
)时,我看到如下内容:
[
(u'CN=zone1,OU=zones,OU=datagroups,DC=myorg,DC=local', {u'sAMAccountName': ['myuser']}),
(None, [u'ldap://DomainDnsZones.myorg.local/DC=DomainDnsZones,DC=myorg,DC=local']),
(None, [u'ldap://ForestDnsZones.myorg.local/DC=ForestDnsZones,DC=myorg,DC=local']),
(None, [u'ldap://myorg.local/CN=Configuration,DC=myorg,DC=local'])
]
列表中有多个其他匹配项(除了 myuser sAMAccountName 匹配项)与搜索过滤器无关。查看文档(https://www.python-ldap.org/en/python-ldap-3.3.0/faq.html),这些似乎是“搜索延续”/搜索库位于时包含的引用域级别,它说可以通过包含类似...的代码来关闭它们
l = ldap.initialize('ldap://foobar')
l.set_option(ldap.OPT_REFERRALS,0)
以及尝试
ldap.set_option(ldap.OPT_REFERRALS,0)
l = ldap.initialize('ldap://foobar')
...但是添加此代码根本不会改变行为,我得到相同的结果(请参阅https://www.python-ldap.org/en/python-ldap-3.3.0/reference/ldap.html?高亮=set_option#ldap.set_option)。
我在这里误解了什么吗?有谁知道如何让这些停止弹出?任何人都知道这个函数返回的元组的结构(文档没有描述)?
解决方案
刚刚与其他更熟悉的人交谈,python-ldap
并被告知OPT_REFERRALS
正在控制您是否自动遵循推荐,但这并不会阻止 AD 发送它们。
目前,他们推荐的唯一方法是使用以下内容过滤这些值:
results = ldap.search_s(...)
results = [ x for x in results if x[0] is not None ]
注意返回的结果的结构search_s()
是
[
( dn, {
attrname: [ value, value, ... ],
attrname: [ value, value, ... ],
}),
]
当它是一个引用时,它是一个 DN,None
并且条目 dict 被替换为一个 URI 数组。
*(请注意,在search_s
调用中,您也可以请求在搜索中返回特定属性)
*(请注意,由于我的基本 DN 是域级别的路径,因此使用该ldap.set_option(ldap.OPT_REFERRALS,0)
片段仍然有用,只是为了阻止它search_s()
实际上沿着引用路径向下(这增加了几秒钟的搜索时间))
同样,我相信这个问题是由于基本 DN 是域级别的路径(除非有其他的base_dn
,或者search.filter
我可以使用组用户分散在我所缺少的域中的各种 AD 路径的事实) .
推荐阅读
- python - Groupby:在同一张表中获取“计数”和“百分比”
- android - Gradle Play Publisher 的最低 Gradle 版本至少是 Gradle 7.0.2 而你的是 Gradle 6.5
- string - System::String 在 C++/CLI 中没有成员 Length
- java - quarkus CDI:拦截器没有绑定
- c++ - 结构不是为节点创建的,但是在初始化节点时,如果我们在它之前编写结构,代码工作正常,没有错误。为什么?
- html - 文本不会随着媒体查询消失
- templates - 如何将我的模板从小胡子转换为车把?
- javascript - 使用 styled-components,如何使用长格式 css 动画语法来拥有多个关键帧动画?
- node.js - Node JS - APNs - 错误 403 Missing Provider Token
- android - 使用 Jetpack 自定义实施操作项