Paginación usando ldapsearch


14

Estoy buscando un directorio LDAP que tenga un número de resultados mucho mayor que el sizelimit establecido actualmente, 500, por slapd.conf que para todos los intentos y propósitos no se puede cambiar)

Mi idea era seguir ejecutando ldapsearch pero desde un desplazamiento diferente cada vez (501, 1001, etc.) hasta que se hayan obtenido todos los resultados.

He visto las páginas de manual para ldapsearch , y parece que esto se maneja usando las opciones -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)

Entonces intenté: ldapsearch -h $HOST -p $PORT -x -L -b "$BASE" '*' '+' -E pr=$SIZE

Sin embargo, cuando los resultados (incluso los resultados paginados con tamaño = 50, por ejemplo) llegan a 500, aparece el mismo error que si los resultados no se paginasen:

Size limit exceeded (4)

He visto en las páginas del manual que hay otra opción para virtuallistview, pero no he podido encontrar ejemplos, y tampoco creo que mi versión de ldapsearch tenga esta opción.

El objetivo aquí es crear una copia de seguridad usando ldapsearch y la opción -L para crear un archivo ldif que sea adecuado para restaurar la base de datos.

Algunas búsquedas en Google aparecen con el mismo problema que tengo, pero ninguna tiene una solución aplicable.


Te sugiero que configures loglevela 256 para ver lo que dice.
cuantos

No tengo acceso directo al archivo slapd.conf, y sé cuál es el problema, por lo que un registro más detallado no será de mucha utilidad.
steve-gregory

En respuesta a Ethan, 2147483647 es 2 ^ 32, o 0b1111111111111111111111111111111. Este es el máximo para un int con signo de 32 bits. Este es el límite de tamaño máximo permitido.
exigente

2147483647 = 2 ^ 31-1
Sean

Respuestas:


8

El administrador del servidor de directorio es libre de imponer un límite en el número de entradas que se pueden devolver en la respuesta a una solicitud de búsqueda. El cliente LDAP puede solicitar un límite de tamaño, pero este límite solicitado por el cliente no puede anular el límite impuesto por el servidor. La paginación funciona correctamente: la paginación simplemente envía múltiples respuestas de búsqueda, cada una del tamaño solicitado por el cliente, pero aún no puede exceder el límite de tamaño impuesto por el servidor. La Vista de lista virtual es similar a la paginación simple, excepto que el cliente LDAP puede iniciarse y reanudarse en cualquier lugar, mientras que en resultados paginados simples, el cliente LDAP debe leer los resultados secuencialmente.


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

La parte importante es al final: -E pr=2147483647/noprompt. Implementé esto hoy, así que sé que funciona, al menos con el back-end LDAP de Active Directory. Para mí, esto fue capaz de eludir los límites del servidor.

Según su ejemplo, parece que le puede faltar un / noprompt o / prompt. La diferencia es que con / prompt, se detiene entre cada página.

No estoy seguro de por qué funciona el número 2147483647, pero lo hace.

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


3
El número 2147483647es el tamaño de la página. Si cambia el -Eparámetro a pr=100/prompt, verá que ldapsearchle permite presionar una tecla cada 100 resultados.
rpet

Eso funciona !!!!
Saheb

Active Directory es inusual en mi experiencia, ya que permite que las búsquedas paginadas excedan el límite de tamaño configurado del servidor. Sin embargo, impondrá el límite de tamaño paginado en las búsquedas. Debido a que le ha dicho a ldapsearch que no lo solicite, no está viendo que el tamaño de página que realmente está usando para esa búsqueda es mucho menor. Esto no funcionará contra Sun LDAP a partir de hace 10 años, OpenLDAP a partir de hace 8 años, o 389-ds a partir de hace 10 minutos (eso es lo que corro en casa estos días).
Ed Grimm

0

ApacheDS puede hacer las búsquedas buscadas que está buscando. Al menos contra Active Directory.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.