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 }'

Out of Office

Well, to be honest more like out of the country. It’s been a while since I last wrote here, since I’ve been a bit busy with vacation preparations and right now I’m busy with the vacation itself. Just like two years ago, I’m on a trip to Asia – this time it’s South Korea and (of course) Japan. At the moment I’m already in Japan and about half the trip is over.

Good chance to post that I’m not completely slacking off on blog writing. Actually I’ve been quite active, just not in this blog, but in the travel blog. So here’s the link, in case you want to check it out.

Travel On Planet Muh – Just another travel blog

Hopefully I’ll write more in here, once I get back. But no promises.

Recap Week 2012-23

Lessons of this week:

  • If the schedule for the plumbers visit to the flats in the house tells you he’ll be there somewhen between 10:00 and 14:00, it’ll be 13:45. And that was just the vague schedule for our floor with five flats. (Of course, if I had predicted that and would’ve gone shopping or to the barber, he would’ve been knocking at my door at 10:01.)
  • Phone calls and cooking don’t always mix up well. And instead of experiementing on a new dish, I’ve been experimenting on how to get that braised plastic from my cutting board off my stovetop. The fricking thing was even burning.
  • If you’re unsure about that next rep and don’t have a spotter, don’t do it. At least with bench pressing. Even missed the right lower buck of the rack and kissed the barbell. Ouch.

Fitocracy points: 851 – Just one workout last week and the result is noted above. ’nuff said.

Recap Week 2012-22

Wednesday night, I noticed some flashing from my window. A thunderstorm, yes!!! I tried to collect my photography equipment as fast as possible (not fast) and went onto my balcony to camp for it. I’ve been waiting for it to come closer, experimented with the settings, waited for it to come closer, got my remote shutter to work again, waited for it to come closer… waited for it to… AH DAMMIT!!! The frickin‘ storm wandered along the horizon (behind some hills to be even more precise) mocking me with some lonely flashes every once in a while.

I assembled the few lightnings I could capture into this picture. Sorry ‚bout the crappy quality, but I moved the camera around a bit, zoomed in and out, so it was hard to get them into one clean image. Well, at least with the effort I was willing to put in.

Thunderstorm 2012-05-30 (© Oliver Kuka)

I got my foam roller. Well, I got it almost two weeks now, but this week was the first time I used it and it’s quite nice, could really get used to it, even though, I have to „train“ a bit to use it effectively. I also had a gift coupon for a massage lying around for over two years. On Sunday I finally used it. I regret that I didn’t use it earlier. Damn, that was good, even though it was quite painful at some muscle tensions in my back. But I really should really get this more often.

Fitocracy points: 3931 – My new push-up max is now 50. Half the way to the real century push. For not training it, I’m happy with those results. Oh and speaking of calisthenics, I did 20 pull-ups. Also started my leg training again. Did lunges to start and OH MY ASS, I really do feel the break.

Favourite quote: Some people say… good things come to those who wait. Truth is, good things come to those who work. Who work later. Who work harder. You’re willing to go father than anyone else to get them. If you are waiting for good things to come to you, you’ll be waiting for pretty long time. – from a Crysler 300 commercial