Heute, ca. um 19:45, haben ein Bug in ejabberd, Halbwissen über das Jabber-Protokoll und eine zu gut konfigurierte Testumgebung den schlimmsten Fehler in der Geschichte dieses Servers geführt. Alle Buddies (die nicht auf jabber.fsinf.at sind) von Accounts, die bereits vor dem April 2009 angelegt wurden, haben eine "unsubscription notification" (Das heißt so viel wie: "User X [at] jabber [dot] fsinf [dot] at hat dich aus seiner Liste gelöscht") bekommen.
Alle Accounts, die vor dem April 2009 angelegt wurden, sind betroffen. Jüngere Accounts trifft dieser Fehler nicht. Falls dein Account so alt ist, ist folgendes passiert: Jeder Mensch in deiner Liste, der nicht auf jabber.fsinf.at ist, hat von dir eine Meldung bekommen, dass du ihn/sie aus deiner Liste gelöscht hast. Niemand wurde tatsächlich gelöscht, aber deine Buddies werden die Meldung vielleicht nicht lustig finden.
Ich habe eine virtuelle Maschine die ebenfalls eine Installation von ejabberd hat. Die Maschine wird verwendet um möglichst jede Konfigurationsänderung vorher testen zu können. Um möglichst realitätsnahe Tests zu ermöglichen, ist die virtuelle Maschine fast ident zum tatsächlichen Server konfiguriert. Diese virtuelle Maschine ist der Grund, warum unser ejabberd-upgrade, zusammen mit Migration auf PostgreSQL und neuen ICQ-Transport mit nur wenigen Minuten Downtime verbunden war. Auch unser upgrade auf ejabberd 2.1.0 dauerte deswegen weniger als eine Minute.
Heute wollte ich damit anfangen, ungenutzte Accounts zu löschen, bis jetzt ist es so, dass ein ungenutzter Account nie gelöscht wird. Ejabberd, die Software die wir nutzen, bietet genau dafür bereits einen Befehl an, was das ganze Unterfangen also eigentlich einfach machen sollte. Nach einem Bug im Webinterface war ich aber bereits etwas skeptisch, weswegen ich beschlossen habe, das ganze zuerst in der virtuellen Maschine zu testen. Wegen unserer Migration auf PostgreSQL, die auch auf dieser Maschine zuerst getestet wurde, hatte die virtuelle Maschine noch die Daten von letzten April... und ejabberd hat sich dazu entschieden, alle BenutzerInnen in seiner Datenbank zu löschen.
Normalerweise wäre das ja kein Problem: Es ist eine Test-Datenbank auf einem Testserver, der nicht einmal über das Internet erreichbar ist. Die Maschine erlaubte (nein, nicht mehr ;-)) aber ausgehende Verbindungen, die es dem Test-Jabber-Server erlaubte, sich zu anderen Jabber-Servern zu verbinden und sie über die Löschung zu informieren. Das ist auch der Grund, warum Buddies auf jabber.fsinf.at die Meldung nicht bekommen haben: Ejabberd hat das intern geregelt.
Normalerweise wäre das immer noch kein Problem, weil Jabber dialback connections (frag den Server zurück, ob er die Message auch tatsächlich geschickt hat) und TLS authentication um zu überprüfen, ob der Server auch der echte und richtige ist. Was ich wiederum nicht wusste, ist, dass TLS authentication die dialback connection überstimmt... und die virtuelle Maschine hat natürlich auch richtige Zertifikate gehabt, mit welchen sie sich als der echte jabber.fsinf.at-Server ausweisen konnte. Womit natürlich die meisten Server die falschen Packete weiter geleitet haben.
Kommentare
Neues Kommentar verfassen