2009-12-03 3 views
3

우리는 현재 독점 독점 디렉토리 서비스에서 OpenLDAP로 이전 중입니다. 오늘 ldap_search_ext_s 또는 ldapsearch는 현재 검색에서 반환 된 항목 수가 특정 한도에 도달하면 일반적으로 결과를 반환하지 않는다는 문제가 발생했습니다.크기 제한을 극복하기 위해 OpenLDAP에서 페이징 된 ldap_search?

불행하게도 LDAP 서버 구성에서 크기 제한을 더 높게 설정하면 문제가 발생할 수 있습니다. 우리는 매우 큰 데이터베이스가 있으며 매일 아침마다 실행되는 업데이트 메커니즘이 거대한 쿼리를 수행해야합니다.

MSDN 설명서에서 paged search을 수행 할 메커니즘이 있다는 것을 알아 채었습니다. 그러면 크기 제한을 피할 수있게되었습니다. 분명히 이것은 RFC draft from 1996에도 지정되어 있지만 아직 완성되지 않았습니까? 나는 윈도우 상자에서 작동하지 않는거야 이후이

(내가 그들의 search page에 그것을 찾을 수 없습니다 적어도) 그 메커니즘을 제공하지 않는 것 OpenLDAP를 API를 사용할 필요가 어쨌든

,

어느 것이 저에게 제 질문을 제기합니까? 제가 할 수있는 생각이 있으며, 그 문제를 우아한 방식으로 해결할 수 있습니까?

도움 주셔서 감사합니다.

답변

1

OpenLDAP는 ldap_create_page_control() 및 친구를 통해 페이지 된 결과 검색을 지원합니다. Here 설명 및 샘플 코드입니다. 도움이되지 않으면 프로덕션 코드에서 발췌 내용을 제공 할 수 있습니다.

+0

감사합니다. 나는 월요일에 그걸 들여다 볼 것이다! (지금까지는 그 주제를 포기하고 쿼리 제한을 늘렸다 ...) –

+0

마침내 구현하기 시작했다. 그것은 작동합니다. 고마워요 :) –

+0

내 기쁨. :) – dennycrane

-3

AD 또는 Novell의 eDirectory를 사용 하시겠습니까? ;)

+0

(도메인 컨트롤러에 사용 하나, 및 ADAM 및 AD LDS와 같은 또한 독립 포함한) Active Directory의 모든 종류를 일반적으로, 요청에 따라 반환 1,000 결과의 제한이 결과보다 간단한 페이징 결과 컨트롤이나 VLV (Virtual List View) 컨트롤을 통해 일종의 페이지 된 검색을 사용해야합니다. – vond

1

ldap_search_ext_s와 함께 ldap_create_page_control을 사용하는 데 문제가 생겼습니다. 제 LDAP 라이브러리 구현은 기본적으로 LDAP 버전 2를 사용 중이며 버전 3 이상을 지원합니다. 나는 버전 3

0

에 LDAP을 설정 그것은 ldap_search_ext_s에서 "지원되지 않음"반환 된() 전에 내가 매김 제어를 전송하여 LDAP 페이지 매김을 사용하는 데 사용됩니다 ldap_control_paged_result

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; 
    } 
관련 문제