Artikelformat

LDAP Suche in Thunderbird beschleunigen

Heute hatte ich ein sehr seltsames Problem mit Thunderbird in der Arbeit. Dort haben wir einen schönen LDAP-Server (na ja, schön vielleicht nicht, es ist ja ein Microsoft-Active-Directory-Server mit LDAP, aber egal) und da Thunderbird die Möglichkeit bietet in der Sidebar eine Adressusche beim Schreiben von Emails anzubieten wollte ich das nutzen. Die paar Parameter für den LDAP-Zugriff waren schnell genutzt, aber egal was ich da eingetragen habe, was gefunden habe ich eigentlich nicht. Ok, eigentlich schon, aber sehr sehr langsam. So langsam dass es einfach keinen Spaß macht diese Funktion zu benutzen.

Das hat mich geärgert und darum bin ich mal mit anderen Mitteln auf den LDAP-Server los. Erst mal ein „Proof-of-Concept“ mit ldapsearch von der Shell aus. Das ging und es ging flott. Parallel dazu habe ich im bösen Hackertool Wireshark 🙂 mal mitgeschnitten was da zwischen meinem Client und dem LDAP-Server hin und her geht.

Dann der Test mit dem Thunderbird-Feature. Da sehe ich dann, dass durchaus eine Suchanfrage zum Server geht, aber eben was für eine. Wenn ich den Kollegen „Mustermann“ suche, dann sieht die Suchanfrage für den LDAP-Server so aus:

(|(|(|(mail=*Mustermann*)(cn=*Mustermann*))(givenName=*Mustermann*))(sn=*Mustermann*))

Also die Suche nach dem String „*Mustermann*“ in den Attributen „mail“, „cn“, „givenName“ und „sn“. Mit der Wildcard „*“ am Anfang des Suchstrings heißt das für den LDAP-Server natürlich „suche mal in ALLEN Datensätzen ob irgendwo in diesem Feld an beliebiger Stelle „Mustermann“ steht). Klar, dass das Zeit kostet.

Das wirft natürlich die Frage auf: Wie kann man das besser machen. Also mal gesucht und letztlich bei den „hidden prefs“ für Mozilla rausgekommen. Unter „about:config“ (Im Thunderbird/Iceweasel erreicht man das in den Einstellungen über den erweiterete Konfiguration-Button) gibt es eine Einstellung

„mail.addr_book.quicksearchquery.format“

die auf der „hidden prefs“ Seite beschrieben ist. Per default steht dieses Suchmuster auf

?(or(PrimaryEmail,c,@V)(DisplayName,c,@V)(FirstName,c,@V)(LastName,c,@V))

und jedes „c“ da drin bedeutet im LDAP-Kontext „contains“. Um das zu ändern muß man tatsächlich in den Source gucken, leider verlinkt die „hidden prefs“ Seite nicht zu der richtigen Stelle, nämlich hier hin. Anstelle von „c“ können folgende Einträge verwendet werden:

Wert Bedeutung
= Is
!= IsNot
lt LessThan
gt GreaterThan
bw BeginsWith
ew EndsWith
c Contains
!c DoesNtoContain
~= SoundsLike
regex RegExp

Wenn mann also anstelle der „c“ in dieser Eisntellung nun „bw“ (BeginsWith) einträgt, dann sehen die LDAP-Suchstrings so aus: „Mustermann*“ und das wird natürlich um einiges schneller gefunden als die Suche nach „contains“.

Autor: Rainer

Diplom-Informatiker, Baujahr 1961, Vater von 2 Kindern, Hundehalter, Sportschütze und Vereinsvorstand, Hobbymusiker (mit zweifelhaftem Erfolg), politisch interessiert, Leseratte, Freizeit-Philosoph und letztlich Blogger.

1 Kommentar