2009-12-03 236 views
3

我们目前正在从陈旧的专有目录服务迁移到OpenLDAP。 今天我们碰到了问题ldap_search_ext_s或ldapsearch的一般不返回任何结果,如果当前的搜索返回的条目数量,这是,会打一定的限制。在OpenLDAP中分页ldap_search以获得大小限制?

不幸的是设定的大小限制在较高的LDAP服务器的配置可能只是推迟问题,因为我们有一个非常大的数据库,我们的更新机制,每天上午运行,必须performe巨大的疑问。

在MSDN文档我注意到,有执行paged search,这将让我绕过大小限制的机制。 显然这也在RFC draft from 1996中指定,但尚未完成(尚)?

无论如何,因为我不工作在Windows盒我不得不使用OpenLDAP的API,它似乎并没有提供机制(至少我无法找到它自己的search page

这让我想起我的问题:你有一个想法,我可以做什么,以优雅的方式解决这个问题?

感谢您的帮助!

回答

1

OpenLDAP支持经由ldap_create_page_control()和朋友分页的结果检索。 Here是一个描述和示例代码。如果这没有帮助,我可能会提供生产代码的摘录。

+0

谢谢!我会在星期一看到这个权利! (直到现在,我只是放弃了这个话题,我们增加了查询限制...) – 2010-11-20 22:36:06

+0

我终于来到实施它。有用。非常感谢你:) – 2010-11-30 09:31:01

+0

我的荣幸。 :) – dennycrane 2010-12-01 01:20:03

-3

使用AD或Novell的eDirectory? )

+0

各类活动目录(包括一个在域控制器上使用,也独立的像亚当和AD LDS)通常有每个请求返回1000个结果的限制,因此,如果你希望你的查询返回更多结果就是,您必须使用某种分页搜索:通过简单分页结果控件或通过虚拟列表视图(VLV)控件。 – vond 2013-11-28 20:47:22

1

我有一个使用ldap_create_page_control和ldap_search_ext_s的问题,我的ldap库实现默认使用LDAP版本2,并且它看起来支持3 +版本。它返回“不支持”,从ldap_search_ext_s()之前,我设置到LDAP版本3

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; 
    }