Paging utilizzando ldapsearch


14

Sto cercando una directory LDAP che abbia un numero di risultati molto più grande rispetto al sizelimit attualmente impostato, 500, di slapd.conf che a tutti gli effetti non può essere modificato)

La mia idea era di continuare a eseguire ldapsearch ma ogni volta con un offset diverso (501, 1001, ecc.) Fino a quando non sono stati ottenuti tutti i risultati.

Ho visto le pagine man di ldapsearch e sembra che questo sia gestito per te usando le opzioni -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)

Quindi ho provato: ldapsearch -h $HOST -p $PORT -x -L -b "$BASE" '*' '+' -E pr=$SIZE

Tuttavia, quando i risultati (anche i risultati paginati con dimensione = 50 per esempio) raggiungono 500, ottengo lo stesso errore come se i risultati non fossero paginati:

Size limit exceeded (4)

Ho visto nelle pagine man che c'è un'altra opzione per virtuallistview ma non sono stato in grado di trovare esempi per questo, e inoltre non credo che la mia versione di ldapsearch abbia questa opzione.

L'obiettivo qui è quello di creare un backup usando ldapsearch e l'opzione -L per creare un file ldif adatto al ripristino del database.

Alcune ricerche su Google mostrano lo stesso problema che sto riscontrando, ma nessuna ha una soluzione applicabile.


Vorrei suggerire di impostare loglevelsu 256 per vedere cosa dice.
maggio

Non ho accesso diretto al file slapd.conf e so qual è il problema, quindi un registro più dettagliato non sarà di grande utilità.
steve-gregory,

In risposta a Ethan, 2147483647 è 2 ^ 32 o 0b1111111111111111111111111111111. Questo è il massimo per un int firmato a 32 bit. Questo è il limite massimo consentito per le dimensioni.
esigente

2147483647 = 2 ^ 31-1
Sean,

Risposte:


8

L'amministratore del server di directory è libero di imporre un limite al numero di voci che possono essere restituite in risposta a una richiesta di ricerca. Il client LDAP può richiedere un limite di dimensioni, ma questo limite richiesto dal client non può ignorare il limite imposto dal server. Il paging funziona correttamente: il paging invia semplicemente più risposte di ricerca, ciascuna delle dimensioni richieste dal client, ma non può ancora superare il limite di dimensioni imposto dal server. La visualizzazione dell'elenco virtuale è simile al paging semplice, tranne per il fatto che il client LDAP può iniziare e riprendere ovunque, mentre nei risultati di paging semplici il client LDAP deve leggere i risultati in sequenza.


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

La parte importante è alla fine: -E pr=2147483647/noprompt. L'ho implementato oggi, quindi so che funziona, almeno con il back-end LDAP di Active Directory. Per me, questo è stato in grado di bypassare i limiti del server.

Dal tuo esempio, sembra che ti manchi un / noprompt o / prompt. La differenza è che con / prompt, si ferma tra ogni pagina.

Non sono sicuro del motivo per cui il numero 2147483647 funziona, ma funziona.

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


3
Il numero 2147483647è la dimensione della pagina. Se cambi il -Eparametro in pr=100/promptvedrai che ldapsearchti chiede di premere un tasto ogni 100 risultati.
rpet,

Che funzioni !!!!
Saheb,

Active Directory è insolito nella mia esperienza in quanto consente alle ricerche paginate di superare il limite di dimensioni configurato dal server. Tuttavia, imporrà il limite di dimensioni impaginate nelle ricerche. Poiché hai detto a ldapsearch di non chiederti, non stai vedendo che la dimensione della pagina che sta effettivamente usando per quella ricerca è molto più piccola. Questo non funzionerà con Sun LDAP 10 anni fa, OpenLDAP 8 anni fa o 389 ds 10 minuti fa (è quello che gestisco a casa in questi giorni.)
Ed Grimm,

0

ApacheDS può eseguire le ricerche paginate che stai cercando. Almeno contro Active Directory.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.