LDAP Single Paged Results Control Extension

Abstract

Das Lightweight Directory Protocol (LDAP) bietet die Möglichkeit, Suchergebnisse in kleinen Portionen zu präsentieren. Dies ist vor allen Dingen sinnvoll, wenn, bedingt durch die Filterkonstruktion, einige Dutzend bis einige Hundert Ergebnisse präsentiert werden. Diese Protokollerweiterung wird in RFC 2696 beschrieben und wurde mit dem OID 1.2.840.113556.1.4.319 registriert. Etliche Verzeichnisdienste haben...

Das Lightweight Directory Protocol (LDAP) bietet die Möglichkeit, Suchergebnisse in kleinen Portionen zu präsentieren. Dies ist vor allen Dingen sinnvoll, wenn – bedingt durch die Filterkonstruktion – einige Dutzend bis einige Hundert Ergebnisse präsentiert werden. Diese Protokollerweiterung wird in RFC 2696 beschrieben und wurde mit dem OID 1.2.840.113556.1.4.319 registriert.

Etliche Verzeichnisdienste haben diese Protokollerweiterung implementiert. Es besteht leider häufig die Möglichkeit, voreingestellte Begrenzungen der Suchergebnisse zu umgehen, obwohl RFC 2696 in Abschnitt 6 ausdrücklich darauf hinweist. Der Administrator sollte daher die Fähigkeiten seines Verzeichnisdienstes prüfen. Das folgende Beispiel ist mit dem Tool ldapsearch(1) der OpenLDAP Tool-Suite erstellt worden:

$ ldapsearch -E'!pr=50/noprompt' -Y EXTERNAL\
-b ou=benchmark,o=avci,c=de -s one "(&(objectClass=*)(sn=test0*))" dn cn

Note

Statt des Parameters noprompt kann auch prompt genommen werden, dann erwartet das Tool nach jedem Suchergebnis eine Bestätigung, um dann die nächsten 50 Ergebnisse zu präsentieren.

Im nachfolgenden Ergebnis wird nur der letzte Eintrag dargestellt.

# test0499, benchmark, avci, de
dn: cn=test0499,ou=benchmark,o=avci,c=de
cn: test0499
# search result
search: 12
result: 0 Success
control: 1.2.840.113556.1.4.319 false MA0CAQAECFQCAAAAAAAA
pagedresults: cookie=VAIAAAAAAAA=
# extended LDIF
#
# LDAPv3
# base <ou=benchmark,o=avci,c=de> with scope oneLevel
# filter: (&(objectClass=*)(sn=test0*))
# requesting: dn cn
# with pagedResults critical control: size=50
#
# search result
search: 13
result: 4 Size limit exceeded
# numResponses: 511
# numEntries: 500

Interessant ist hier die letzte Zeile, denn als Result Code wird die Ziffer 4 mit der Erläuterung Size limit exeeded, in diesem Fall wirkt also der Konfigurationsparameter für sizelimit.

Nur einmal zum Vergleich, hier das Ergebnis eines Verzeichnisdienstes, der trotz sizelimit alle Einträge ausgibt:

$ time ldapsearch -E'!pr=50/noprompt' -x -H ldap://198.51.100.124  -s sub "(objectClass=*)" dn cn
# search result
search: 40
result: 0 Success
text: Search succeeded. Found 8 Entries (0 Aliases), 8 Attributes, 8 Values.
control: 1.2.840.113556.1.4.319 false MAUCAQAEAA==
pagedresults: cookie=
# numResponses: 1947
# numEntries: 1908

real  0m2.312s
user  0m0.050s
sys   0m0.060s

Es ist also möglich, innerhalb weniger Sekunden den gesamten Datenbestand eines Verzeichnisdienstes auszulesen. Aus verständlichen Gründen möchte ich nicht den Hersteller nennen.

Dieter Klünter, 02. July 2013