我在已启用分页搜索的 eDirectory LDAP 服务器上运行以下 ldapsearch 命令:
ldapsearch -LLL -x -h server -p port -D admin -w password -b base -s sub "(&(objectclass=top)(objectclass=person)(and some additional object classes))" dn
结果是一系列具有相同内容的页面。例如:我的目录有 3500 个符合搜索过滤器的对象。默认页面大小为 1000。因此我预计会有 3 个页面包含 1000 个不同的对象,再加上一个包含剩余 500 个对象的最终页面;总共 4 个页面。但实际结果实际上是 4 个页面,但所有页面都包含所有 3500 个对象。通过关闭分页或不超过页面大小,我只需一步即可获得所有对象,并且不会出现重复项。
在 POSIX 服务器上,我得到了某种混合结果:ldapsearch 运行完美,并返回预期的页面和对象数量。但是,当使用用 C 编写的客户端程序使用 Windows LDAP API(ldap_search_init_page(),然后多次调用 ldap_get_next_page_s(),直到返回 LDAP_NO_RESULTS_RETURNED)发出搜索时,我得到了如上所述的重复页面。
我还没有在 openLDAP 和 Oracle DSEE 中观察到这种行为。
这些重复页面的原因是什么?我该如何避免它们?除了表示分页处于活动状态的supportedControl = 1.2.840.113556.1.4.319之外,还有其他参数需要设置或考虑吗?