【问题标题】:Turn off search continuation results in python-ldap?在 python-ldap 中关闭搜索继续结果?
【发布时间】:2021-04-08 00:06:55
【问题描述】:

使用 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)。

我在这里误解了什么吗?有谁知道如何让这些停止弹出?有谁知道这个函数返回的元组的结构(文档没有描述)?

【问题讨论】:

    标签: python-ldap


    【解决方案1】:

    刚刚与更熟悉 python-ldap 的其他人交谈,并被告知 OPT_REFERRALS 正在控制您是否自动跟随推荐,但这并不会阻止广告发送他们

    目前,他们推荐的唯一方法是使用以下内容过滤这些值:

    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) sn-p 仍然有用,只是为了阻止 search_s() 实际沿着引用路径向下(这增加了几秒钟搜索时间))

    再一次,我相信这个问题是由于基本 DN 是域级别的路径(除非还有其他一些 base_dnsearch.filter 我可以使用这个事实,即组用户分散在各种 AD 路径中在我缺少的域中)。

    【讨论】:

    • 这是了解 LDAP 查询的有用资源:fy.blackhats.net.au/blog/html/pages/…
    • 这个建议是由 python-ldap 开发人员提出的吗?这给我带来了一些问题,我想在一些 PR 中引用该建议。
    • @FredThomsen 基本上,这(如果您必须使用域级别的基本 DN)。
    • 我不清楚你的意思。我只是想引用一个网页或在某处发帖,表明 dn 的 None 始终表示搜索引用。
    • 我认为这封电子邮件几乎证实了这一点:mail.python.org/pipermail/python-ldap/2014q1/003350.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多