Pagination à l'aide de ldapsearch

14

Je recherche un annuaire LDAP qui a un nombre de résultats beaucoup plus important que le sizelimit actuellement défini, 500, par slapd.conf qui, à toutes fins utiles, ne peut pas être modifié)

Mon idée était de continuer à exécuter ldapsearch mais à partir d'un décalage différent à chaque fois (501, 1001, etc.) jusqu'à ce que tous les résultats soient obtenus.

J'ai vu les pages de manuel de ldapsearch , et il semble que cela soit géré pour vous en utilisant les options -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)

J'ai donc essayé: ldapsearch -h $HOST -p $PORT -x -L -b "$BASE" '*' '+' -E pr=$SIZE

Cependant, lorsque les résultats (même les résultats paginés avec taille = 50 par exemple) atteignent 500, j'obtiens la même erreur que si les résultats n'étaient pas paginés:

Size limit exceeded (4)

J'ai vu dans les pages de manuel qu'il existe une autre option pour virtuallistview mais je n'ai pas pu trouver d'exemples pour cela, et je ne pense pas que ma version de ldapsearch ait cette option.

L'objectif ici est de créer une sauvegarde à l'aide de ldapsearch et de l'option -L pour créer un fichier ldif adapté à la restauration de la base de données.

Quelques recherches sur google présentent le même problème que moi, mais aucune n'a de solution applicable.

Steve-Gregory
la source
Je vous suggère de mettre loglevelà 256 pour voir ce qu'il dit.
quanta
Je n'ai pas d'accès direct au fichier slapd.conf, et je sais quel est le problème, donc un journal plus détaillé ne sera pas très utile.
steve-gregory
En réponse à Ethan, 2147483647 est 2 ^ 32, ou 0b1111111111111111111111111111111. Il s'agit du maximim pour un entier signé 32 bits. Il s'agit de la taille maximale autorisée.
exigeant
2147483647 = 2 ^ 31-1
Sean

Réponses:

8

L'administrateur du serveur d'annuaire est libre d'imposer une limite au nombre d'entrées pouvant être renvoyées dans la réponse à une demande de recherche. Le client LDAP peut demander une limite de taille, mais cette limite demandée par le client ne peut pas remplacer la limite imposée par le serveur. La pagination fonctionne correctement: la pagination envoie simplement plusieurs réponses de recherche, chacune de la taille demandée par le client, mais ne peut toujours pas dépasser la limite de taille imposée par le serveur. La vue de liste virtuelle est similaire à la pagination simple, sauf que le client LDAP peut démarrer et reprendre n'importe où, tandis que dans les résultats paginés simples, le client LDAP doit lire les résultats de manière séquentielle.

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

La partie importante est à la fin: -E pr=2147483647/noprompt. J'ai implémenté cela aujourd'hui, donc je sais que cela fonctionne, au moins avec le backend LDAP d'Active Directory. Pour moi, cela a pu contourner les limites du serveur.

D'après votre exemple, il semble qu'il vous manque un / noprompt ou / prompt. La différence est qu'avec / prompt, il s'arrête entre chaque page.

Je ne sais pas pourquoi le numéro 2147483647 fonctionne, mais c'est le cas.

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

Ethan
la source
3
Le nombre 2147483647est la taille de la page. Si vous changez le -Eparamètre en pr=100/promptvous verrez que ldapsearchvous demande d'appuyer sur une touche tous les 100 résultats.
rpet
Ça marche !!!!
Saheb
Active Directory est inhabituel dans mon expérience en ce qu'il permet aux recherches paginées de dépasser la limite de taille configurée par le serveur. Il appliquera cependant la limite de taille paginée aux recherches. Parce que vous avez dit à ldapsearch de ne pas vous inviter, vous ne voyez pas que la taille de page qu'il utilise réellement pour cette recherche est beaucoup plus petite. Cela ne fonctionnera pas contre Sun LDAP il y a 10 ans, OpenLDAP il y a 8 ans ou 389 ds il y a 10 minutes (c'est ce que je fais chez moi ces jours-ci.)
Ed Grimm
0

ApacheDS peut effectuer les recherches paginées que vous recherchez. Au moins contre Active Directory.

geoffc
la source