Au fil du Net - Mot-clé - simple paging of search resultsPHP, Zend Framework, Agilité, Scrum, Architecture, coaching2024-03-28T09:30:04+01:00urn:md5:98ecbb60ac8adf78f0305ca3d3ca015aDotclearLDAP : les recherches non indexés et la pagination des résultatsurn:md5:a63a22a1067cb527e58a91d57f8db9082010-05-24T19:29:00+02:002010-05-24T19:29:00+02:00Jean-Sébastien H.LDAPOpenDSsimple paging of search resultsunindexed-search <p>Actuellement je travaille sur une application utilisant un annuaire LDAP comme conteneur de personnes. Dans cette application, les utilisateurs ont la possibilité de faire des recherches pouvant retourner beaucoup de résultats : quels personnes ont un nom commençant par "Du" (sn=Du*).</p>
<p>Par défaut, l'annuaire que nous utilisons (OpenDS 2.2) refuse cette requête :</p>
<pre class="bash" style="font-family: monospace;">ldapsearch <span style="color: rgb(102, 0, 51);">-b</span> <span style="color: rgb(255, 0, 0);">"ou=People,dc=example,dc=com "</span> <span style="color: rgb(102, 0, 51);">-h</span> localhost <span style="color: rgb(102, 0, 51);">-p</span> <span style="color: rgb(0, 0, 0);">1389</span> <span style="color: rgb(102, 0, 51);">-D</span> <span style="color: rgb(255, 0, 0);">"uid=123456,ou=admins,dc=example,dc=com"</span> <span style="color: rgb(102, 0, 51);">-w</span> azerty <span style="color: rgb(102, 0, 51);">--countEntries</span> <span style="color: rgb(255, 0, 0);">"(sn=Du*)"</span></pre>
<pre class="text" style="font-family: monospace;">SEARCH RES conn=11 op=1 msgID=2 result=50 message="Vous ne disposez pas des privilèges suffisants pour lancer une recherche non indexée" nentries=0 etime=0</pre>
<p>En effet les utilisateurs non-administrateur n'ont par défaut pas le privilège d'exécution de requête non indexées.</p>
Exécutons la requête en mode administrateur : celle ci me retourne plusieurs milliers d'entrées.
<p>Nous avons un index mais OpenDS limite sa taille à 4000 entrées.</p>
<pre class="text" style="font-family: monospace;">dn: ds-cfg-backend-id=userRoot,cn=Backends,cn=config<br />ds-cfg-index-entry-limit: 4000</pre>
<h3>Que faire alors ?</h3>
<p>Augmenter l'index peut paraitre une solution simple et évidente : mais quelle limite lui fixer ? 10000 ? Et qu'en sera il quand le volume de données dépassera se seuil ? Quid de l'espace disque consommé par cet index ? Et de son temps de calcul ?</p>
<p>Il semble plus pertinent de donner le privilège d'exécution des requêtes non indexés.</p>
<pre class="text" style="font-family: monospace;">dn: uid=admin,ou=example,dc=com<br />changetype: modify<br />add: ds-privilege-name<br />ds-privilege-name: unindexed-search</pre>
<pre class="text" style="font-family: monospace;">SEARCH RES conn=15 op=1 msgID=2 result=4 message="Cette opération de recherche a renvoyé le nombre maximum d'entrées au client (1000)" nentries=1000 etime=532</pre>
<p>Aie ! Ca ne marche toujours pas, car OpenDS ne permet pas de retourner plus de 1000 résultats pour une requête.</p>
<pre class="text" style="font-family: monospace;">dn: cn=config ds-cfg-size-limit: 1000</pre>
<h3>Comment contourner cette limitation ?</h3>
<p>Et bien paginons nos résultats !</p>
<p>Demandons à l'annuaire de nous retourner les toutes les entrées en X lots de 1000 résultats.</p>
<pre class="bash" style="font-family: monospace;">ldapsearch <span style="color: rgb(102, 0, 51);">-b</span> <span style="color: rgb(255, 0, 0);">"ou=People,dc=example,dc=com "</span> <span style="color: rgb(102, 0, 51);">-h</span> localhost <span style="color: rgb(102, 0, 51);">-p</span> <span style="color: rgb(0, 0, 0);">1389</span> <span style="color: rgb(102, 0, 51);">-D</span> <span style="color: rgb(255, 0, 0);">"uid=admin,dc=example,dc=com"</span> <span style="color: rgb(102, 0, 51);">-w</span> azerty <span style="color: rgb(102, 0, 51);">--countEntries</span> <span style="color: rgb(102, 0, 51);">--simplePageSize</span> <span style="color: rgb(0, 0, 0);">1000</span> <span style="color: rgb(255, 0, 0);">"(sn=Du*)"</span> dn</pre>
<p>Et maintenant ca marche !</p>
<h3>Source</h3>
<p><a href="http://blogs.sun.com/kanthi/entry/ldap_paged_results_more" hreflang="en">LDAP Paged Results - More</a> - Srikanth Konjarla (Sun)</p>
<p>
<a href="http://www.opends.org/" hreflang="en">OpenDS.org</a>
<a href="https://www.opends.org/wiki/page/DefUnindexedSearch" hreflang="en">unindexed search</a> (OpenDS Wiki)</p>
<p><a href="https://www.opends.org/wiki/page/ConfiguringIndexesOnLocalDb" hreflang="en">Configuring Indexes on the Local DB Back End</a> (OpenDS Wiki)</p>https://www.au-fil-du.net/post/2010/04/28/LDAP-%3A-les-recherches-non-index%C3%A9s-et-la-pagination-des-r%C3%A9sultats#comment-formhttps://www.au-fil-du.net/feed/atom/comments/152