Python ldap returns 空列表

Python ldap returns empty list

在将其重写为 python 的 ldap 模块之前,我使用 ldapsearch 测试了我的 ldap 查询。完全相同的查询在 ldapsearch 中工作正常,但 returns 在 python 中是一个空数组。

ldapsearch -H [hostname] -LLL -b [base] -D [user] -w [password] -x "city=Bratislava"

在python中:

ldap_obj = ldap.initialize(ldap_config.LDAP_SERVER)
ldap_obj.simple_bind(ldap_config.LDAP_USER, ldap_config.LDAP_PASSWORD)
ldap_results_obj = ldap_obj.search(
    ldap_config.LDAP_BASE_DN,
    ldap.SCOPE_SUBTREE,
    'city=Bratislava',
)
results = ldap_obj.result(ldap_results_obj)
print results

我尝试使用不同的过滤器,即 uid=bmakan,这个过滤器在 ldapsearch 和 python 的 ldap 中都有效。当我使用 returns 多个 ldap entires 的过滤器时,它只返回一个空列表。

我不知道为什么,但是使用 LDAPObject.simple_bind_s 而不是 LDAPObject.simple_bind 解决了我遇到的问题。除了后者 returns 一个整数 (docs).

之外,文档对这两个函数的区别非常模糊。

此更改还解决了我面临的另一个问题 - LDAPObject.simple_bindLDAPObject.searchattrlist 参数无法正常工作 - 它仅返回第一个属性。

如果有人能提供更多信息,我很乐意听取。

有异步和同步方法可用。您可能想使用以 _s.

结尾的同步方法

另请参阅:python-ldap -- Sending LDAP requests