【发布时间】:2012-02-25 05:36:13
【问题描述】:
我会尝试包含尽可能多的细节,但考虑一下这种情况:
出于隐私方面的考虑,假设我有一个如下所示的 Active Directory 基础架构:
microsoft.com
和一些子域:
csharp.microsoft.com
vb.microsoft.com
所有用户帐户都存储在 microsoft.com。
我从以下代码开始:
import ldap
ldap.set_option(ldap.OPT_REFERRALS,0)
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT,ldap.OPT_X_TLS_NEVER)
(我知道我可能应该拥有该域的证书,但你能做什么)
然后我建立如下连接:
conn = ldap.initialize("ldaps://microsoft.com:636")
conn.simple_bind_s("user","pass")
在我的脚本中,我正在搜索用户帐户,并使用以下搜索:
result_id = conn.search("DC=microsoft,DC=com",
ldap.SCOPE_SUBTREE,
"(&(CN=gates)(!(objectClass=contact)))",
None)
result_type,result_data = conn.result(result_id,0)
好的,所以这很有效....大部分时间。
当它起作用时,我会得到以下效果:
[("CN=gates,OU=Users,DC=microsoft,DC=com", {'sAMAccountName':['gates']}])
但是,我似乎随机得到如下结果:
[(None, ['ldaps://csharp.microsoft.com/DC=csharp,DC=microsoft,DC=com'])]
虽然结果有意义 - csharp.microsoft.com 中不存在门,但在 microsoft.com DC 中存在 - 它仍然非常令人费解,因为我的印象是使用 OPT_REFERRALS 设置为 0 会告诉 Python LDAP 模块不使用推荐。 为了让事情变得更有趣,我有时也会得到如下结果:
[(None, ['ldaps://ForestDnsZones.microsoft.com/DC=ForestDnsZones,DC=microsoft,DC=com'])]
所以我的问题 - 我做错了什么吗?
另外,有人建议,如果我使用“OU=Users,DC=microsoft,DC=com”之类的搜索路径,而不是仅从根目录(“DC=microsoft,DC=com”)搜索, LDAP 客户端模块不会尝试使用引用 - 这准确吗?
编辑
这个问题与 LDAP 无关,而是 WSGI 配置错误。 使用 WSGIDaemonProcess 解决了我们遇到的交叉污染问题。
【问题讨论】: