ldapsearch/ldbsearch base64-kodierte UTF-8-Zeichen

Tools wie ldapsearch und ldbsearch sind nützlich, um auf der Kommandozeile auf LDAP-Verzeichnisse zuzugreifen. In einem vorherigen Artikel haben wir uns damit befasst, wie man auf simple Weise den mit automatischen Zeilenumbrüchen versehenen Output für die Weiterverarbeitung in einem Skript aufbereiten kann.

Heute befassen wir uns mit dem Problem, dass diese Tools nicht nur Zeilenumbrüche einfügen, sondern ausserdem Inhalte mit nicht-ASCII-Zeichen in für die weitere Verarbeitung in der Shell nicht ganz so praktischen base64-kodierten Format ausgeben. Hier gibt es allerdings den Nachteil, dass nicht unterscheidbar ist, ob der base64-kodierte ein Text mit nicht-ASCII-Zeichen oder ein Binärer Inhalt ist. Entsprechend ist die hier vorgeschlagene Lösung nicht wirklich universell und kann zu Problemen führen, wenn auch binäre Inhalte im Suchergebnis enthalten sind.

Wir verwenden dieses Mal das etwas mächtigere Perl. Auf den meisten gängigen Systemen ist Perl vorinstalliert, so dass auch diese Lösung recht universell ist.

ldapsearch ... | perl -MMIME::Base64 -n -00 -e 's/\\n //g;s/(?<=:: )(\\S+)/decode_base64($1)/eg;print'

Auch diese Lösung entfernt zuerst zus. eingefügte Zeilenumbrüche (im ersten Suchen&Ersetzen-Ausdruck), und wendet dann ein decode_base64() auf mit base64-kodierte Inhalte an. Das Ergebnis wird nicht weiter verarbeitet, d.h. das funktioniert gut für Zeichenketten auf Systemen, die standardmässig UTF-8 verwenden, weniger gut auf allen anderen Systemen.