Code Schnipsel: Base64 kodierte LDAP-Attribute on-the-fly in Klartext ausgeben

Bevor man jedes mal ein Skript schreibt um einfach nur eine LDAP Zeile in Klartext lesen zu können, einfach an Perl durchpipen:

ldapsearch -LLL -x -b 'dc=ldap' '(uid=username)' base64Attribut | perl -MMIME::Base64 -MEncode=decode -n -00 -e 's/\n //g;s/(?<=:: )(\S+)/decode("UTF-8",decode_base64($1))/eg;print'

Code Schnipsel: OpenSSL CSR mit Subject Line erstellen

Weil ich es jedes mal wieder nachschlagen muss (also alle ein bis anderthalb Jahre), hier kurz notiert wie man in OpenSSL ein CSR (Certificate Signing Request) erstellt und dabei das ganze Subject schon im Kommando übergibt (und dadurch der grausligen Tippfehlerproblematik im interaktiven Modus entgeht, bzw. leichter gleich eine ganze Ladung erstellen kann):

openssl req -new -subj \
'/C=DE/ST=Bundesland/L=Stadt/O=Firma/OU=Abteilung in Firma/CN=sub.domain.de' \
-key sub.domain.de.key -out sub.domain.de.csr

Code Schnipsel: Baïkal Admin Passwort zurücksetzen / password reset

Das hab ich jetzt zwar nur für meinen Baïkal DAV Server benötigt, aber die Methode funktioniert sicherlich auch für andere PHP Web-Applikationen so oder so ähnlich, sofern man herausgefunden hat wie der Hash gebildet wird (wird ja scheinbar nicht immer mit password_hash/crypt und einem Salt gearbeitet):

  1. In der Datei Specific/config.system.php den BAIKAL_AUTH_REALM herausfischen,
  2. mit diesem auth realm und den restlichen Angaben einen neuen Passwort-Hash bilden:
    php -r 'echo md5("admin:DERAUTHREALMSTRING:DASNEUEADMINPASSWORT');'
  3. und schließlich den neuen Hash in der Datei Specific/config.php unter BAIKAL_ADMIN_PASSWORDHASH speichern (den alten Eintrag komplett entfernen, manche Funktionen in der Adminoberfläche bemerken auch die auskommentierte Anwesenheit).

Code Schnipsel: Nicht-ASCII-Zeichen in Dateinamen ersetzen

Als ich dabei war mir einen Subsonic Server aufzusetzen, wollte ich auch endlich mal die Dateinamen meiner Musiksammlung überarbeiten. Nach dem Rippen mit EAC und der Benamung über freeDB fanden sich haufenweise Umlaute und andere Nicht-ASCII Zeichen in den Dateinamen der flacs, was in der Regel zwar kein Problem darstellt, aber eben doch nur in der Regel. Zwischen verschiedenen Dateisystem und über die eine oder andere Protokollkommunikation kann einem die Sache mit den verschiedenen Kodierungen von Nicht-ASCII Zeichen doch zum Verhängnis werden. (Allein schon Playlisten die von manchen Playern automatisch in ISO-8859 angelegt werden, aber dann doch am Ende auf Dateien auf einem UTF Dateisystem zugreifen.) Daher werden diese Non-ASCIIs nun verASCIIt.

Erstmal muss man die „Probleme“ finden. find und grep arbeiten da gut zusammen (wobei es find vielleicht auch alleine machen kann, aber so hab ich es für mich schneller hingekriegt, zumal man gleich die exakten Positionen der entsprechenden Zeichen sieht.

find | grep --color=auto -P -n "[\x80-\xFF]"

Dann kann man ans Ersetzen gehen. Eigentlich könnte man das gut skripten, doch da es sich um eine einmalige Sache handelt, bin ich den faulen Weg der Einzelkommandos gegangen.

find -exec rename "s/ä/ae/g" {} +

In diesem konkreten Anwendungsfall hat es sich als Vorteil erwiesen erst die Verzeichnisse zu behandeln (find -type d), aber man kann das gleiche Kommando auch mehrmals durchführen mit dem gleichen Endergebnis. Um auf Nummer sicher zu gehen, kann man auch erst einen Trockenlauf (rename -n) durchführen.

Das Ganze wäre sicherlich auch ein nettes Pythonskript geworden, doch ich will schnell Ergebnisse um überall meine Musik zu hören, also pfeif ich drauf.

Code Schnipsel: Skriptelemente global austauschen

Wenn man von einem Webserver auf einen anderen umzieht und dabei auch ein paar weniger gut programmierte Anwendungen umziehen muss, kann man auf das Problem stoßen, dass z.B. an zig Stellen der Serverpfad eingetragen ist. Kann man einzeln per Hand machen, muss man aber nicht:

find . -name '*.php' -type f -exec sed -i.bkp 's/\/alter\/pfad\/zu\/htdocs/\/neuer\/pfad\/zu\/htdocs/g' {} +

Durch ‚-i.bkp‘ bei sed werden auch Backups der Originaldateien angelegt, für den Fall, dass man es verbockt. Die lassen sich aber auch auf einen Schlag loswerden, nachdem alles auf saubere Funktion getestet wurde.

find . -name '*.php.bkp' -type f -exec rm {} \;

Code Schnipsel: SSL Infos Remote checken

Um die Infos aus einer Zertifikatskette aus dem Serveroutput zu überprüfen, kann man entweder per OpenSSL die Zertifikate herunterladen und seperat lesen oder aber direkt die s_client Ausgabe sed’en und grep’en:

echo QUIT | openssl s_client -showcerts -connect www.server.de:443 2>/dev/null | sed -ne '/2 s\:\//,/END CERT/p' | sed -ne '/BEGIN CERT/,/END CERT/p' | openssl x509 -noout -subject -dates

subject= /C=DE/O=Firma/OU=Abteilung/CN=CA Orga
notBefore=Dec 24 10:29:00 2000 GMT
notAfter=Dec 24 23:59:00 2036 GMT

Erster Teil übergibt QUIT an openssl s_client im zweiten Teil, weil dieser auf eine Eingabe wartet, im dritten Teil wird der generelle Teil der Kette gewählt (in diesem Teil der zweite), im dritten Teil wird die Ausgabe nochmals auf das eigentliche Zertifikat reduziert, was im vierten Teil in eine lesbare Ausgabe umgewandelt wird (hier nur subject um sicher zu sein, dass man das richtige Zertifikat liest und die Daten, worum es eigentlich bei der Abfrage ging, aber mit -text gäbe es alles zu sehen).

Wenn man es anständig skriptet kann man auch die ganze Kette mit den gewünschten Infos ausgeben, aber als kleiner Hack reicht das so.

Code Schnipsel: find als du-Alternative

Wenn „du“ (Disk Usage) mal wieder zu langsam ist, kann man „find“ missbrauchen:

find ./directory/ -printf %k"\n" | awk '{ sum += $1 } END { print sum }'

Das macht sich besonders bemerkbar, wenn man ein Verzeichnis mit über 410 Millionen Dateien untersuchen will. Und natürlich lassen sich dann die ganzen schönen find-Filter benutzen.

find ./typo3temp/ -type f -iname '*.jpg' -ctime -2 -printf %k"\n" | awk '{ sum += $1 } END { print sum }'

Google Project: Glass

Wieder mal ein interessantes Google Projekt: Project: Glass

Wenn man mal von meiner natürlichen Paranoia absieht bei allem was Google (oder Facebook) produziert, so freue ich mich doch, dass es endlich ein großes Projekt in dieser Richtung zu geben scheint. Eigentlich ist das schon lange überfällig, der Nutzen im Alltag und vor allem in der Arbeitswelt für ein vernünftiges, persönliches Head-Up-Display (HUD) ist enorm. Für Computerarbeiter wie mich, die eh ständig vorm Computer hängen natürlich weniger (außer um weniger davor zu sitzen), aber man stelle sich einfach mal den Nutzen in einer Fabrik vor, wenn man ständig mit allen wichtigen Informationen versorgt wird. Von der Forschung ganz zu schweigen. Im Bereich der Sicherheit kann hier sicher viel erreicht werden und auch für Senioren kann ich mir nützliche Dinge vorstellen die ihnen den Alltag erleichtern. Augmented Reality wird dann endlich etwas wirklich Nutzbares. Insgesamt fühle ich mich da ein wenig an Ghost in the Shell erinnert. Künstliche Augen die alles ins Blickfeld projizieren was man braucht und auch so nützliche Dinge machen können wie Barcodes und Datenmatrix zu entschlüsseln.

Aber wie gesagt, da entsteht bei mir eine gewisse Paranoia. Nicht nur, dass Google dann über Handys alles mitkriegen würde, nein, sondern sogar direkt aus dem Blickwinkel der Nutzer. Und da man dieses System vermutlich länger aktiv haben wird (Augmented Reality ist ja schließlich praktisch, erst recht wenn man kein Gerät mehr in der Hand halten muss) als Beispielsweise ein Handy, ist Google viel besser im Bilde was die Nutzer so tun. Und wenn man mal vergisst die Kamera abzuschalten… nun, dann kann man auf YouTube Ruhm für den besten Klogang des Tages bekommen.

Doch in gewisser Weise ist mir das egal, denn die Erforschung der Technologie für persönliche HUDs öffnet viel mehr Türen und muss ja nur für Google interessant sein. Ganz sicher würde ich nicht zu den Early Adopters gehören, doch auf jeden Fall werde ich das Thema aufmerksam beobachten.

3D Page Inspector in Firefox

By accident I just discovered the new 3D Page Inspector in Firefox 11. This is a cool feature for web developers and -designers. A very awesome and intuitive way to analyse websites.

Here are two videos, the first one shows what it does and also shows another nice feature. The second one shows how you can „abuse“ this new page inspector. And I’m really looking forward to people doing this!

If you already got Firefox 11 and a computer that supports the feature, you can check out that demo yourself.

Killer features?

So let’s see if I understand current commercials correctly. It seems that the killer feature of Windows 7 is to arrange two windows side by side. Wow! But then again, the killer feature of the new iPhone is copy & paste.

Conclusion: I should lower my standards. Drastically!

I’m waiting for the new Zen player. Prolly you can adjust the volume with that one.