ldapsearch를 사용한 페이징


14

slapd.conf에 의해 현재 설정된 sizelimit, 500보다 훨씬 많은 수의 결과를 가진 LDAP 디렉토리를 검색하고 있습니다 (모든 의도와 목적을 위해 변경할 수 없음)

내 생각은 모든 결과를 얻을 때까지 ldapsearch를 계속 실행하지만 매번 다른 오프셋 (501, 1001 등)에서 실행하는 것이 었습니다.

ldapsearch매뉴얼 페이지를 보았 으며 -E 옵션을 사용하여이 페이지가 처리 된 것으로 보입니다.

-E [!]<ext>[=<extparam>] search extensions (! indicates criticality)
         [!]domainScope              (domain scope)
         [!]mv=<filter>              (matched values filter)
         [!]pr=<size>[/prompt|noprompt]   (paged results/prompt)
         [!]subentries[=true|false]  (subentries)
         [!]sync=ro[/<cookie>]            (LDAP Sync refreshOnly)
                 rp[/<cookie>][/<slimit>] (LDAP Sync refreshAndPersist)

그래서 나는 시도했다 : ldapsearch -h $HOST -p $PORT -x -L -b "$BASE" '*' '+' -E pr=$SIZE

그러나 결과 (예 : 크기가 50 인 페이지 결과조차도)가 500에 도달하면 결과가 페이지되지 않은 것과 같은 오류가 발생합니다.

Size limit exceeded (4)

매뉴얼 페이지에서 virtuallistview에 대한 또 다른 옵션이 있지만 이에 대한 예제를 찾을 수 없으며 ldapsearch의 내 버전 에이 옵션이 있다고 생각하지 않습니다.

여기서 목표는 ldapsearch 및 -L 옵션을 사용하여 백업을 작성하여 데이터베이스 복원에 적합한 ldif 파일을 작성하는 것입니다.

몇 가지 Google 검색에서 내가 겪고있는 것과 동일한 문제가 표시되지만 적용 가능한 해결책이 없습니다.


loglevel무슨 말인지 알기 위해 256으로 설정 하는 것이 좋습니다 .
quanta

slapd.conf 파일에 직접 액세스 할 수 없으며 문제가 무엇인지 알고 있으므로 더 자세한 로그는 많이 사용되지 않습니다.
steve-gregory

Ethan에 대한 응답으로 2147483647은 2 ^ 32 또는 0b1111111111111111111111111111111입니다. 이것은 32 비트 부호있는 정수의 최대 값입니다. 이것이 최대 허용 크기 제한입니다.
exigent

2147483647 = 2 ^ 31-1
Sean

답변:


8

디렉토리 서버 관리자는 검색 요청에 대한 응답으로 리턴 될 수있는 항목 수를 제한 할 수 있습니다. LDAP 클라이언트는 크기 제한을 요청할 수 있지만이 클라이언트 요청 제한은 서버 부과 제한을 무시할 수 없습니다. 페이징이 올바르게 작동합니다. 페이징은 단순히 클라이언트가 요청한 크기로 여러 검색 응답을 보내지 만 여전히 서버가 부과 한 크기 제한을 초과 할 수 없습니다. 가상 목록보기는 LDAP 클라이언트가 어디서나 시작하고 재개 할 수 있다는 점을 제외하고 단순 페이징과 유사하지만 간단한 페이지 결과에서는 LDAP 클라이언트가 결과를 순차적으로 읽어야합니다.


10
ldapsearch -LLL  -x -h $LDAPHOST -b"dc=whatever" -D${LDAPUSER} -w"${LDAPPASW}" objectclass=* -E pr=2147483647/noprompt

중요한 부분은 다음과 같습니다 -E pr=2147483647/noprompt.. 나는 오늘 이것을 구현 했으므로 적어도 Active Directory의 LDAP 백엔드에서 작동한다는 것을 알고 있습니다. 나에게 이것은 서버 제한을 ​​우회 할 수있었습니다.

귀하의 예에서 / noprompt 또는 / prompt가 누락 된 것 같습니다. 차이점은 / prompt를 사용하면 각 페이지 사이에서 중지된다는 것입니다.

2147483647이 왜 작동하는지 잘 모르겠지만 작동합니다.

내 출처 : http://www.commandlinefu.com/commands/view/2779/bypass-1000-entry-limit-of-active-directory-with-ldapsearch


3
숫자 2147483647는 페이지 크기입니다. -E매개 변수를 변경하면 100 개의 결과마다 키를 눌러야 pr=100/prompt한다는 것을 알 ldapsearch수 있습니다.
rpet

작동합니다 !!!!
Saheb

내 경험상 Active Directory는 페이지 검색이 서버 구성 크기 제한을 초과 할 수 있다는 점에서 드문 경우입니다. 그러나 검색시 페이징 된 크기 제한이 적용됩니다. ldapsearch가 프롬프트하지 않도록 지시 했으므로 실제로 해당 검색에 사용하는 페이지 크기가 훨씬 작다는 것을 알 수 없습니다. 같은 10 년 전 일 LDAP, OpenLDAP를 상대로이하지 않습니다 작업 팔년의 등의 전 또는 389-DS 분 전 현재 (즉, 내가 요즘 집에서 실행거야.)
에드 그림 형제

0

ApacheDS는 원하는 페이지 검색을 수행 할 수 있습니다. 적어도 Active Directory에 대해서는

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.