Christian Seiler: Ausfälle der letzten Tage: Behoben

Hallo,

In den letzten Tagen ist es zu mehrfachen Ausfällen gekommen, die nach dem vermeintlichen Beheben von etlichen Bugs im Forum durch mich aufgetreten sind. Einer dieser vermeintlich behobenen Bugs war, dass man seinen Account nicht löschen konnte, wenn der eigene Name geschützt war (in allen anderen Fällen hat dies funktioniert).

Hintergrund für das ursprüngliche Problem war folgendes:

Die Registrierung im Forum besteht aus einem mehrstufigen Konzept:

  1. Es gibt unter http://forum.de.selfhtml.org/usermanagement/ mehrere PHP-
       Scripte, die für das Benutzerinterface der Registrierung zuständig sind.
       Diese rufen über ein textbasiertes Protokoll einen zentralen
       Serverprozess auf, der für die eigentliche Logik verantwortlich ist.
       Das hat den Hintergrund, dass man zum Beispiel durch das Anlegen einer
       Visitenkarte im Community-Bereich sich gleichzeitig auch registrieren
       kann - deswegen ist die Registrierungslogik ausgelagert, damit beliebige
       Anwendungen diese verwenden können.

  2. Der Serverprozess kümmert sich um die Datenhaltung in der Datenbank.
       Zusätzlich muss er noch dafür sorgen, dass die Daten für die jeweiligen
       Benutzer auch im großen Forum und in der Lounge mit den Daten in der
       Datenbank synchronisiert sind.

Aus diesem Grund nutzt der Serverprozess die XMLRPC-Schnittstelle des
   Forums, um Account-Informationen anzulegen oder zu löschen (je nachdem,
   was der Benutzer gerade durchführt).

  1. Die XMLRPC-Schnittstelle des Forums bietet die Möglichkeit an, Account-
       Informationen zu einem User zu löschen oder anzulegen (im Prinzip ist
       hiermit eine Konfigurationsdatei für jeden User gemeint, d.h. beim
       Erstellen des Users muss die angelegt werden, beim Löschen gelöscht
       werden). Die Logik dahinter kümmert sich hauptsächlich nur um die
       Konfigurationsdatei. Wenn der Name allerdings geschützt ist, muss die
       XMLRPC-Schnittstelle eine Socketverbindung zum Forumsdämon aufbauen,
       um den Namensschutz zu entfernen.

  2. Der Forumsserver-Prozess implementiert den Namensschutz. Jegliche
       Änderung am Namensschutz muss über die Socket-Schnittstelle des
       Forumsservers geschehen.

Der ursprüngliche Bug, den ich vor ein paar Tagen korrigiert habe, war folgender: In (3) trat das Problem auf, dass da Teile des Codes noch veraltet waren und er den Pfad zum Socket aus dem falschen Teil der Konfiguration auszulesen versucht hat. Daher konnte er sich nicht verbinden und der XMLRPC-Aufruf schlug fehl. Das führte dann zum "Internal Error".

Den Bug habe ich dann korrigiert. Was ich erst jetzt korrigiert habe, war eine Verkettung von Problemen in (3) und (4): In (3) wurde zwar jetzt der Socket-Pfad korrekt aus der Konfiguration ausgelesen, das Auslesen des Poster-Namens, der geschützt war, verwendete jedoch immer noch eine alte Schnittstelle - und damit schlug dieses fehl. Da aber die Socketverbindung bereits aktiv war, wurde einfach ein leerer Sting als Name an den Forumsserver geschickt. Wenn es nicht auch noch einen Bug in (4) gegeben hätte, hätte der Forumsserver natürlich korrekt geantwortet "Sorry, den Namen gibt's nicht" und es hätte wieder zu einem "Internal Error" beim Löschen des Accounts geführt. Leider war im Forumsserver (4) auch ein Problem vorhanden: Es wurde nicht überprüft, ob der übergebene Name leer war. Da das hier aber der Fall war, führte das zu einem Absturz des Forumsservers und damit zur Nichtfunktionalität des Forums.

Diese Bugs sind nun beseitigt und der Forumsserver sollte nun wieder zuverlässig funktionieren.

Ich bitte für die Unannehmlichkeiten zu entschuldigen.

Viele Grüße,
Christian Seiler
SELFHTML e.V.
Technische Leitung