在 python-ldap 中关闭搜索继续结果?
Turn off search continuation results in 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?highlight=set_option#ldap.set_option)。
我是不是误会了什么?任何人都知道如何让这些停止弹出?有人知道这个函数returns(文档没有描述)的元组结构吗?
刚刚与更熟悉 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, ... ],
}),
]
当它是引用时,它是 None
的 DN,并且条目字典被 URI 数组替换。
*(请注意,在 search_s
调用中,您也可以请求在搜索中返回特定属性)
*(请注意,由于我的基本 DN 是域级路径,因此使用 ldap.set_option(ldap.OPT_REFERRALS,0)
片段仍然有用,只是为了阻止 search_s()
实际上沿着引荐路径(添加搜索时间几秒))
同样,我认为这个问题是由于基本 DN 是域级路径(除非有其他一些 base_dn
或 search.filter
我可以使用该组用户的事实分散在我所缺少的域中的各种 AD 路径中。
使用带参数的 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?highlight=set_option#ldap.set_option)。
我是不是误会了什么?任何人都知道如何让这些停止弹出?有人知道这个函数returns(文档没有描述)的元组结构吗?
刚刚与更熟悉 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, ... ],
}),
]
当它是引用时,它是 None
的 DN,并且条目字典被 URI 数组替换。
*(请注意,在 search_s
调用中,您也可以请求在搜索中返回特定属性)
*(请注意,由于我的基本 DN 是域级路径,因此使用 ldap.set_option(ldap.OPT_REFERRALS,0)
片段仍然有用,只是为了阻止 search_s()
实际上沿着引荐路径(添加搜索时间几秒))
同样,我认为这个问题是由于基本 DN 是域级路径(除非有其他一些 base_dn
或 search.filter
我可以使用该组用户的事实分散在我所缺少的域中的各种 AD 路径中。