Lustige Programmierfehler

Programmierfehler ist jetzt nicht unbedingt richtig, denn das meiste sind simple Shellskripte, aber wir wollen mal nicht so kleinlich sein.

Für unser Kooperationsprojekt mit der SUB sollen wir einen zusätzliches Login anbieten, das nur auf lokale Resourcen im GoeNet zugreifen darf. Das ist soweit kein Problem, der Account wird einfach mit adduser erstellt und dann hängt man da mit iptables ein paar Regeln dran die mittels Ownermatch einfach alles verbieten.

Zusätzlich soll das Homeverzeichnis nach dem Ausloggen gelöscht werden, auch kein Problem das machen wir einfach über den das Init-Script des Displaymanagers, jedesmal wenn der startet schaut er nach welche Accounts lokal angelegt sind und schmeißt die Weg.

Schon am Freitag Nachmittag war allerdings irgendwas nicht in Ordnung, aus irgendeinem Grund stürzte der GDM schon beim booten ab, da ich ein bisschen mit upstart und rcconf rumgespielt habe, dachte ich mir das wär meine Schuld und verschiebe die Problembehebung einfach auf Montag …

Heute habe ich also die meiste Zeit des Tages damit verbracht einen Fehler in den Startabhängigkeiten zu suchen der nicht existiert. Genaugenommen kommen da eigentlich zwei Fehler auf einmal zusammen, zum einem meine unfähigkeit zu kommunizieren und zum anderen ein kleiner logischer Fehler in Niels GDM Anpassung.

Um diese Zusatzaccountgeschichte möglichst flexibel zu gestalten habe ich einfach /etc/default/custom-accounts  angelegt und dort stehen halt die Accountnamen drin die mein Script dann verarbeitet. Das gleiche macht Niels auch, hat er nur woanders abgelegt, nicht weiter schlimm ich wunderte mich nur die ganze Zeit warum der falsche Account angelegt wird …

Fehler zwei ist dann das wegwerfen des Homeverzeichnisses das sieht so aus:

HOMEDIR_TO_CLEAN=`awk -F: -v user=$i ‚user == $1 {print $(NF - 1)}‘ /etc/passwd`

rm -rf $HOMEDIR_TO_CLEAN/*

rm -rf $HOMEDIR_TO_CLEAN/.[A-Za-z0-9]*

An dieser Stelle kann man sich überlegen, wenn in Niels Datei ein Account drin steht den ich nicht anlege und dessen Homeverzeichnis trotzdem gelöscht wird. Kleiner Tip, die Rückgabe des Awk-Kommandos ist dann leer …

Aus rm -rf nutzer/* wird dann /* und das ist etwas hinderlich -.-

Also ein kurzer if ! [ -z ] eingebaut -> nicht leer, und schon werfen wir beim booten auch nicht mehr unser Rootverzeichnis ins Nirvana. Natürlich ist das auch letztlich wieder meine Schuld, weil ich /bin, /sbin, /lib und /usr komplett in das AuFS lege, sonst würde da einfach eine Fehlermeldung stehen das man die Dateien nicht löschen kann …