5

我们目前正在从陈旧的专有目录服务迁移到 OpenLDAP。今天我们遇到的问题是ldap_search_ext_s或 ldapsearch 一般不会返回任何结果,如果当前搜索要返回的条目数达到一定的限制。

不幸的是,在 LDAP 服务器配置中设置更高的大小限制可能只会推迟问题,因为我们有一个非常大的数据库,而我们每天早上运行的更新机制必须执行大量查询。

在 MSDN 文档中,我注意到有一种机制可以执行分页搜索,这可以让我绕过大小限制。显然,这也在1996 年的 RFC 草案中有所规定,但尚未最终确定(还)?

无论如何,由于我没有在 Windows-Box 上工作,我必须使用 OpenLDAP API,它似乎没有提供这种机制(至少我在他们的搜索页面上找不到它)

这让我想到了我的问题:你知道我能做什么,以优雅的方式解决这个问题吗?

谢谢你的帮助!

4

4 回答 4

1

OpenLDAP 支持通过ldap_create_page_control ()和朋友进行分页结果检索。是描述和示例代码。如果这没有帮助,我可以提供生产代码的摘录。

于 2010-11-20T20:06:13.863 回答
1

我在使用 ldap_create_page_control 和 ldap_search_ext_s 时遇到了问题,我的 ldap 库实现默认使用 LDAP 版本 2,它看起来支持版本 3+。在我将 LDAP 设置为版本 3 之前,它从 ldap_search_ext_s() 返回“不支持”。

于 2014-12-11T20:56:47.157 回答
0

我能够使用ldap_control_paged_result绕过大小限制

ldap_control_paged_result 用于通过发送分页控件来启用 LDAP 分页。以下功能在我的情况下完美运行。

    function retrieves_users($conn)
    {
        $dn        = 'ou=,dc=,dc=';
        $filter    = "(&(objectClass=user)(objectCategory=person)(sn=*))";
        $justthese = array();

        // enable pagination with a page size of 100.
        $pageSize = 100;

        $cookie = '';

        do {
            ldap_control_paged_result($conn, $pageSize, true, $cookie);

            $result  = ldap_search($conn, $dn, $filter, $justthese);
            $entries = ldap_get_entries($conn, $result);

            if(!empty($entries)){
                for ($i = 0; $i < $entries["count"]; $i++) {
                    $data['usersLdap'][] = array(
                            'name' => $entries[$i]["cn"][0],
                            'username' => $entries[$i]["userprincipalname"][0]
                    );
                }
            }
            ldap_control_paged_result_response($conn, $result, $cookie);

        } while($cookie !== null && $cookie != '');

        return $data;
    }
于 2016-12-29T16:05:51.747 回答
-3

使用 AD 还是 Novell 的 eDirectory?;)

于 2009-12-08T17:58:17.333 回答