代码之家  ›  专栏  ›  技术社区  ›  lx.

在OpenLDAP中进行分页ldap_搜索以绕过大小限制?

  •  3
  • lx.  · 技术社区  · 16 年前

    我们目前正在从一个过时的专有目录服务迁移到OpenLDAP。 ldap_search_ext_s 或者,如果当前搜索返回的条目数达到某个限制,则ldapsearch通常不会返回任何结果。

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

    在MSDN文档中,我注意到有一种机制可以执行 paged search ,这将允许我绕过尺寸限制。 RFC draft from 1996 但还没有定案?

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

    谢谢你的帮助!

    4 回复  |  直到 16 年前
        1
  •  1
  •   dennycrane    15 年前

    OpenLDAP支持通过 ldap_create_page_control () Here 是一个描述和示例代码。如果这不起作用,我可以提供生产代码的摘录。

        2
  •  1
  •   Raphael Prudencio    11 年前

        3
  •  0
  •   Fokwa Best    9 年前

    我可以通过使用 ldap_control_paged_result

        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;
        }
    
        4
  •  -3
  •   jwilleke    16 年前

    使用AD或Novell的eDirectory?;)