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.

Steve Gregory
fuente
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.

Terry Gardner
fuente
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

Ethan
fuente
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.

geoffc
fuente