admin_users.php - Bug beim Löschen von Usern ?

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
fgh
Mitglied
Beiträge: 16
Registriert: 13.02.2004 10:28
Kontaktdaten:

admin_users.php - Bug beim Löschen von Usern ?

Beitrag von fgh »

Nach dem Update von PHP Version 4.2.2 auf Version 4.3.4 funktioniert das Löschen von Forumusern (phpBB 2.06) nicht mehr so wie zuvor. :(

Konkret wird bei Postings von gelöschten Usern nicht mehr der ehemalige Username mit dem Status Gast angezeigt, sondern nur noch Gast. Die Ursache dafür habe ich in der admin_users.php gefunden:

Ein User wird im phpbb mit einer numerischen user_id referenziert. Die eigentlichen Usereinträge (Username, Passwort, email-Adresse, etc) sind in der Usertabelle enthalten. Alle anderen Tabellen referenzieren mit der user_id auf die usertabelle.

Wenn ein User gelöscht wird, müssen der Datenbank-Konsistenz wegen alle Referenzen gelöscht werden. Das heißt, die Einträge für die user_id werden mit mit dem Wert -1 (deleted) überschrieben oder der Datensatz ganz gelöscht. Zu Schluß wird der User in der users Tabelle gelöscht.

Damit man Postings auch weiter noch gelöschten Usern zuordnen kann, haben die Entwickler in der Postingtabelle neben der eindeutigen poster_id ein redundantes Text Datenfeld post_username eingefügt. Dieses ist normalerweise leer.

Bei Löschen eines Users wird das Datenfeld post_username aller Postings, die vom zu löschenden User stammen, mit dessen Username gesetzt.

Code: Alles auswählen

                       $sql = "UPDATE " . POSTS_TABLE . "
                                SET poster_id = " . DELETED . ", post_username = '$username'
                                WHERE poster_id = $user_id";
                        if( !$db->sql_query($sql) )
                        {
                                message_die(GENERAL_ERROR, 'Could not update posts for this user', '', __LINE__, __FILE__, $sql);
                        }

Das Problem liegt nicht bei SQL sondern:

Code: Alles auswählen

SQL:

DEBUG MODE

UPDATE phpbb_humanisten_posts SET poster_id = -1, post_username = '' WHERE poster_id = 49

Line : 90
an der Variable '$username', die leer ist.

Deshalb habe ich mir mal den Code von admin_users.php näher angeschaut. :-?

Zu meiner Überraschung habe ich festgestellt, das '$username' überhaupt nicht richtig gesetzt wird. :o

Wenn admin_users.php ohne Optionen aufgerufen wird, verzweigt das Programm zur “Default User selection box”. Nach Auswahl des Users wird die Programmdatei rekursiv aufgerufen. Dann geht admin_users.php in den edit mod. Nach der Auswahl der Option "User löschen" wird admin_users.php ein weiteres mal mit dem save mod und der option deleteuser aufgerufen.

Wenn man sich den Programmcode genau anschaut wird die Variable '$username' in dieser Verzweigung überhaupt nicht gesetzt sondern nur mit isset überprüft.

Was mich verrwirrt ist, das admin_users.php vor dem PHP Update funktioniert hat. Ich bin immer davon ausgegangen, das alle Variablen beim erneuten Aufruf der Programmdatei mit HTTP_POST oder HTTP_GET übergeben werden müssen. ?

Habe ich da was Übersehen oder ist das ein Bug ?

Habt Ihr ähnlich gelagerte Probleme nach einem update von PHP ?

Gruß Frank
Benutzeravatar
Mister_X
Ehemaliges Teammitglied
Beiträge: 7102
Registriert: 24.05.2001 02:00
Wohnort: Augsburg

Beitrag von Mister_X »

admin_users.php
ersetze

Code: Alles auswählen

SET poster_id = " . DELETED . ", post_username = '$username'
mit

Code: Alles auswählen

SET poster_id = " . DELETED . ", post_username = '$HTTP_POST_VARS[username]'
Der Fehler ist mir jetzt wo du es sagst zum ersten Mal aufgefallen, da merkt man mal wie häufig ich Benutzer lösche ;)
fgh
Mitglied
Beiträge: 16
Registriert: 13.02.2004 10:28
Kontaktdaten:

Beitrag von fgh »

Mister_X hat geschrieben:admin_users.php
ersetze

Code: Alles auswählen

SET poster_id = " . DELETED . ", post_username = '$username'
mit

Code: Alles auswählen

SET poster_id = " . DELETED . ", post_username = '$HTTP_POST_VARS[username]'
Der Fehler ist mir jetzt wo du es sagst zum ersten Mal aufgefallen, da merkt man mal wie häufig ich Benutzer lösche ;)
Gut das ich nicht der einzige bin ;)

Das müsste eigentlich ein Bug sein. :roll: Habe das ganze unter:

http://www.phpbb.com/phpBB/viewtopic.php?t=178563

eingestellt. Mal sehen, ob die phpBB-Gurus reagieren.

Gruß Frank
fgh
Mitglied
Beiträge: 16
Registriert: 13.02.2004 10:28
Kontaktdaten:

Beitrag von fgh »

Habe Bug unter der Nummer 2482 offiziell angemeldet.

http://www.phpbb.com/bugs/bug.php?op=show&bugid=2482
Benutzeravatar
Loewenherz
Mitglied
Beiträge: 624
Registriert: 10.02.2003 20:11
Wohnort: Saarlouis
Kontaktdaten:

Beitrag von Loewenherz »

Gibt es zu diesem Thema etwas neues? Oder muss ich den im Link empfohlenen Code einpflegen?
Downloads für phpBB, die ich seit 2001 angeboten habe, gibt es nicht mehr - die Mitarbeit beim Übersetzer-Team von phpBB3 war mein letzter aktiver Beitrag zu phpBB, zeitlich geht leider nichts mehr. Aktuell blogge ich nur noch phasenweise auf SEO Scene.
Ceterum censeo Google esse delendam
Benutzeravatar
Loewenherz
Mitglied
Beiträge: 624
Registriert: 10.02.2003 20:11
Wohnort: Saarlouis
Kontaktdaten:

Beitrag von Loewenherz »

Okay, hat sich erledigt.

Code: Alles auswählen

SET poster_id = " . DELETED . ", post_username = '" . str_replace("\\'", "''", addslashes($this_userdata['username'])) . "'
scheint zu funktionieren. Vor der 2.0.18 hatte ich das Problem noch irgendwann...
Downloads für phpBB, die ich seit 2001 angeboten habe, gibt es nicht mehr - die Mitarbeit beim Übersetzer-Team von phpBB3 war mein letzter aktiver Beitrag zu phpBB, zeitlich geht leider nichts mehr. Aktuell blogge ich nur noch phasenweise auf SEO Scene.
Ceterum censeo Google esse delendam
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“