如何使用Python LDAP获取超过服务器大小限制的搜索结果?

12 投票
2 回答
16135 浏览
提问于 2025-04-15 18:04

我正在使用python-ldap这个模块来搜索一些东西,比如群组,但遇到了服务器的大小限制,导致出现了一个叫SIZELIMIT_EXCEEDED的错误。我尝试了同步和异步的搜索方式,但都碰到了这个问题。

理论上,你可以通过在搜索时设置分页控制来解决这个问题,但根据python-ldap的文档,这些控制功能在search_ext()中还没有实现。那么在Python中有没有其他方法可以做到这一点呢?如果python-ldap库不支持这个功能,还有没有其他的Python库可以用?

2 个回答

8

在python-ldap-dev邮件列表上讨论了一些内容后,我可以自己回答这个问题。

Python的lDAP模块确实支持分页控制,但文档没有更新,没说明search_ext也支持这个功能。Gorgapor提供的例子展示了如何使用ldap.controls.SimplePagedResultsControl来分批读取结果。

不过这里有个小问题。这个功能在微软的Active Directory服务器上可以用,但在OpenLDAP服务器上就不行(可能还有其他一些,比如Sun的服务器)。LDAP控制的RFC对分页控制是否可以覆盖服务器的大小限制设置并没有明确说明。在Active Directory服务器上默认是可以的,而在OpenLDAP上则不行,但我觉得可能有服务器设置可以让它支持。

所以即使你实现了分页控制,也不能保证能获取到你想要的所有对象。

另外,分页控制只在LDAP v3中可用,但我怀疑现在使用v2的服务器不多。

撰写回答