phpBB 2.0.21 - Fehler in der session.php

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.
Benutzeravatar
x16
Mitglied
Beiträge: 472
Registriert: 03.11.2005 22:35
Wohnort: Hamburg
Kontaktdaten:

phpBB 2.0.21 - Fehler in der session.php

Beitrag von x16 »

Ich habe eine meiner IP Adressen eben mal Testweise gebann. Wenn ich dann ins Forum gehen will kommt nur die Meldung:

Code: Alles auswählen

You_been_banned
Muss doch aber heißen:

Code: Alles auswählen

Du wurdest von diesem Forum verbannt.
Kontaktiere den Administrator, um mehr Informationen zu erhalten.
Der Fehler leigt in der sesion.php:

Code: Alles auswählen

if ( $ban_info['ban_ip'] || $ban_info['ban_userid'] || $ban_info['ban_email'] )
		{
			message_die(CRITICAL_MESSAGE, 'You_been_banned');
		}
Habs geändert in:

Code: Alles auswählen

if ( $ban_info['ban_ip'] || $ban_info['ban_userid'] || $ban_info['ban_email'] )
		{
			message_die(CRITICAL_MESSAGE, $lang['You_been_banned']);
		}
Leider war das wohl nicht richtig, denn dann kommt gar keine Nachricht mehr. Wer weiß weiter? Ist das denn noch niemanden aufgefallen??? :-?
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

message_die(CRITICAL_MESSAGE, 'You_been_banned'); ist schon richtig, da das Array $lang erst in init_userprefs geladen wird und das kommt nach session_pagestart....

trotzdem sollte in der funktion message_die der text ersetzt werden.
Funktioniert allerdings nicht wenn der debug mode an ist.


Olli
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Eigentlich sollte das beides funktionieren.
Denn in der Funktion message_die wird an der Stelle

Code: Alles auswählen

	if ( $msg_code != CRITICAL_ERROR )
	{
		if ( !empty($lang[$msg_text]) )
		{
			$msg_text = $lang[$msg_text];
		}
geprüft ob ein derartiger Eintrag in der Sprachvariablen enthalten ist. Wenn nicht wird eben der übergebene Text ausgegeben. Da es sich um den Typ CRITICAL_MESSAGE handelt wird dies auch so ausgeführt, wenn trotzdem der Text nicht aus der $lang genommen wird dann kann das nur heißen dass er sich nicht dort befindet --> Entweder fehlt die Sprachdatei komplett (wurde noch nicht includiert) oder in der Datei fehlt der entsprechende Eintrag.

Der Message Typ ist daran schuld, dass message_die nicht die Userdaten initialisiert:

Code: Alles auswählen

if( empty($userdata) && ( $msg_code == GENERAL_MESSAGE || $msg_code == GENERAL_ERROR ) )
	{
		$userdata = session_pagestart($user_ip, PAGE_INDEX);
		init_userprefs($userdata);
	}
allerdings sollte dann eigentlich die Default Board Sprache gewählt werden oder wenn die nicht existiert (weil z.B. die Board_config auch noch nicht eingelesen wurden) dann wird Englisch als Standardsprache gewählt:

Code: Alles auswählen

if ( !defined('HEADER_INC') && $msg_code != CRITICAL_ERROR )
	{
		if ( empty($lang) )
		{
			if ( !empty($board_config['default_lang']) )
			{
				include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_main.'.$phpEx);
			}
			else
			{
				include($phpbb_root_path . 'language/lang_english/lang_main.'.$phpEx);
			}
		}
Zuletzt geändert von gn#36 am 06.10.2006 16:48, insgesamt 1-mal geändert.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

Aber vorher wird mit:

Code: Alles auswählen

		if ( $debug_text != '' )
		{
			$msg_text = $msg_text . '<br /><br /><b><u>DEBUG MODE</u></b>' . $debug_text;
		}
der $msg_text verändert...

So sollte es funktionieren:

Code: Alles auswählen

session.php
### Ersetze:
	//
	// Add on DEBUG info if we've enabled debug mode and this is an error. This
	// prevents debug info being output for general messages should DEBUG be
### Mit:
	if ( $msg_code != CRITICAL_ERROR )
	{
		if ( !empty($lang[$msg_text]) )
		{
			$msg_text = $lang[$msg_text];
		}
	}
	//
	// Add on DEBUG info if we've enabled debug mode and this is an error. This
	// prevents debug info being output for general messages should DEBUG be

EDIT: Hat sich erledigt - siehe weiter unten.
Zuletzt geändert von Olli Oberhausen am 06.10.2006 17:17, insgesamt 1-mal geändert.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Nicht ganz, denn die Debug informationen werden nur angehängt wenn es sich um einen GENERAL_ERROR oder CRITICAL_ERROR handelt:
if ( DEBUG && ( $msg_code == GENERAL_ERROR || $msg_code == CRITICAL_ERROR ) )
{
if ( $debug_text != '' )
{
$msg_text = $msg_text . '<br /><br /><b><u>DEBUG MODE</u></b>' . $debug_text;
}
}
Dies ist aber hier nicht der Fall.
Ansonsten macht das Replacement natürlich vorher trotzdem mehr Sinn.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

Irgendwie überschneiden wir uns immer :grin:

Hast natürlich recht - aber wodran liegts dann wohl???
Kein eintrag in der Sprachdatei?

Olli
Benutzeravatar
x16
Mitglied
Beiträge: 472
Registriert: 03.11.2005 22:35
Wohnort: Hamburg
Kontaktdaten:

Beitrag von x16 »

Also bei mir ist der Eintrag in beiden Sprachdateien drin. Trotzdem gibt er nur "You_been_banned" aus.

In meiner session.php ist leider keine Stelle mit:

Code: Alles auswählen

    // 
   // Add on DEBUG info if we've enabled debug mode and this is an error. This 
   // prevents debug info being output for general messages should DEBUG be 
Wat nun?
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

War die functions.php, hatte sich aber eh erledigt und werd ich rausnehmen.
Benutzeravatar
x16
Mitglied
Beiträge: 472
Registriert: 03.11.2005 22:35
Wohnort: Hamburg
Kontaktdaten:

Beitrag von x16 »

Ach so. Gut ähh und kann ich da jetzt noch was probieren?
Sonst übernehme ich in die Session.php den Text aus der lang_main.php manuel. Und fertig ist dat Ding!!!

Wäre zwar ne blöde und unpraktische Lösung, aber naja. Also wenn ihr noch was wisst, bin ich bereit.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Gute Frage. Vielleicht schaltest du zum Testen mal error_reporting(E_ALL); ein, das gibt dann auch die Benutzung uninitialisierter Variablen aus. Bringt aber vermutlich auch nicht viel, da die Stelle die eine Fehlermeldung ausspuckt dann vermutlich in der Functions.php in der message_die Funktion sein wird.

Die Userdaten sollten auch in der $userdata vorhanden sein, da diese VOR dem Ban Check aus der DB geholt werden:

Code: Alles auswählen

if (isset($sessiondata['autologinid']) && (string) $sessiondata['autologinid'] != '' && $user_id)
		{
			$sql = 'SELECT u.* 
				FROM ' . USERS_TABLE . ' u, ' . SESSIONS_KEYS_TABLE . ' k
				WHERE u.user_id = ' . (int) $user_id . "
					AND u.user_active = 1
					AND k.user_id = u.user_id
					AND k.key_id = '" . md5($sessiondata['autologinid']) . "'";
			if (!($result = $db->sql_query($sql)))
			{
				message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql);
			}

			$userdata = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);
		
			$enable_autologin = $login = 1;
		}
		else if (!$auto_create)
		{
			$sessiondata['autologinid'] = '';
			$sessiondata['userid'] = $user_id;

			$sql = 'SELECT *
				FROM ' . USERS_TABLE . '
				WHERE user_id = ' . (int) $user_id . '
					AND user_active = 1';
			if (!($result = $db->sql_query($sql)))
			{
				message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql);
			}

			$userdata = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);

			$login = 1;
		}
Vorschlag wäre: Lade erst noch mal die Sessions.php neu hoch und probier das dann aus. Hast du evtl. Änderungen an der Datei gemacht (Mods o.ä.)? Ich habe das Bannen bei mir mit den Standard Einstellungen probiert und es funktioniert einwandfrei.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

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