open_basedir bugs

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 10. Jul 2006, 17:02

wobei ich noch ne kleinigkeit anmerke

i18nInit wird mittels der variable $belang initialisiert
eine direkte verbindung einer frontend language($lang) zu einer backend language($belang) gibts aber nicht..
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 10. Jul 2006, 17:08

Danke, guter Hinweis. Ansonsten als einfacher Lösungsansatz: In class.newsletter.php die i18n-Einträge (werden nur für die Protokollierung verwendet) durch die Einträge ohne i18n ersetzen.

Also i18n("Hallo") -> "Hallo"

Der Bereich wird sich sowieso grundlegend ändern, die neue Methode zum Senden an einzelne Empfänger gibt keinen Text mehr zurück.

Ich prüfe das auch nochmal gegenüber den Plugins, aber ich denke, da werden keine Funktionen aufgerufen, die i18n nutzen (zumindest nicht für die Datenermittlung).

Woran man alles denken muss, Mann, Mann, Mann... :wink:

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

adapter
Beiträge: 4
Registriert: Mo 10. Jul 2006, 12:29
Wohnort: Bochum
Kontaktdaten:

Beitrag von adapter » Mo 10. Jul 2006, 18:19

Am sinnvollsten wäre es ja, dass die Methode i18n selber merkt, dass die Klasse noch nicht initialisiert worden ist und dann entweder eine entsprechende sinnvolle Fehlermeldung rauswirft oder aber den nicht übersetzten Text einfach wieder zurückgibt...

HerrB, hast Du die Newslettermodule programmiert? Was mich jetzt wundert: dass Du den Fehler (die Warnung) nicht selber auch bekommst. Warnungen in php.ini deaktiviert oder hat es einen anderen Grund?

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 10. Jul 2006, 20:11

Wenn der Safe Mode nicht aktiv ist, wird i18n ja initialisiert. Nur bei Safe Mode kommt es zur Fehlermeldung, daher habe ich das auch nicht bemerkt.

Ich habe es auch eher im Input-Bereich des Moduls vermutet, da das die einzige Stelle für i18n war - an die Klasse habe ich gar nicht gedacht.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

adapter
Beiträge: 4
Registriert: Mo 10. Jul 2006, 12:29
Wohnort: Bochum
Kontaktdaten:

Beitrag von adapter » Mo 10. Jul 2006, 20:19

Aha. Ich frage jetzt besser nicht nach, wieso es vom Safe Mode abhängig ist, ob i18n initialisiert wird... Der Unterschied dürfte doch nur sein, dass es bei deaktiviertem Safe Mode nicht zu der Warnung kommt, höchstens zu einem falschen Rückgabewert von i18n.

Allerdings habe ich auch eine andere Contenido-Installation, wo das Newslettermodul läuft und mich dann auf dem Live-System über die Warnung mehr als nur gewundert...

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 10. Jul 2006, 20:37

War vielleicht die falsche Begründung. Hier liegts am Safe Mode (Backend):
Warning: file_exists() [function.file-exists]: SAFE MODE Restriction in effect. The script whose uid is 662 is not allowed to access / owned by uid 0 in /home/www/web19/html/contenido/includes/functions.i18n.php on line 103
Hier liegts an der open_basedir-Restriction (Frontend):
file_exists() [function.file-exists]: open_basedir restriction in effect. File(/LC_MESSAGES/contenido.po) is not within the allowed path(s): (.) in /www/schranz.com/contenido/includes/functions.i18n.php on line 103
Ist das ausreichend Erklärung?

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

adapter
Beiträge: 4
Registriert: Mo 10. Jul 2006, 12:29
Wohnort: Bochum
Kontaktdaten:

Beitrag von adapter » Mo 10. Jul 2006, 21:01

Danke und Sorry. Ich rede dummerweise dauernd von Safe Mode, obwohl es hier um die open_basedir-Restriktion geht.

Bevor wir uns vollends im Kreis drehen: Der Fehler im Frontend liegt ja nicht wirklich an der open_basedir-Restriktion, sondern daran, dass i18n nicht initialisiert wurde und daher fälschlicherweise die Existenz der nicht existenten Datei LC_MESSAGES/contenido.po überprüft - statt (z.B.) contenido/locale/de_DE/LC_MESSAGES/contenido.po. (Nur der Vollständigkeit halber!)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Sa 14. Apr 2007, 15:30

i18nInit direkt von der funktion i18n erledigen zu lassen ist eigentlich ne elegante idee...

in der functions.i18n.php bei function i18n(...)

Code: Alles auswählen

	// auto init * experimental
	if (!isset($i18nLanguage)) {
		if (!isset($GLOBALS['belang'])) {

			 // we should trigger a error message here
			 $stack = @debug_backtrace();
			 $file = $stack[0]['file'];
			 $line = $stack[0]['line'];
			 cWarning ($file, $line, "i18nInit \$belang is not set");

			 $GLOBALS['belang'] = false; // needed otherwise this won't work
		}


		i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $GLOBALS['belang']);
	}
dann kann man sämtliche aufrufe von

Code: Alles auswählen

i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang);
aus dem core code von contenido entfernen...
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 5. Jun 2007, 23:32

Ähm, so?

Code: Alles auswählen

function i18n ($string, $domain = "contenido")
{
	global $cfg, $i18nLanguage;

// auto init * experimental 
   if (!isset($i18nLanguage)) { 
      if (!isset($GLOBALS['belang'])) { 

          // we should trigger a error message here 
          $stack = @debug_backtrace(); 
          $file = $stack[0]['file']; 
          $line = $stack[0]['line']; 
          cWarning ($file, $line, "i18nInit \$belang is not set"); 

          $GLOBALS['belang'] = false; // needed otherwise this won't work 
      } 


      i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $GLOBALS['belang']); 
   }	
	cInitializeArrayKey($cfg, "native_i18n", false);
...
Wird nicht $i18nLanguage dadurch initialisiert, dass sie als global angegeben ist (so zum Verständnis).

Die Änderung in der Warnung (siehe vorherige Seite) habe ich eingebaut, bei der Änderung zum Upload (file_exists rausnehmen): Wenn das scheitert, kann dann ein move_uploaded_file erfolgreich enden?

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mi 6. Jun 2007, 05:27

HerrB hat geschrieben:Ähm, so?
yep
HerrB hat geschrieben: Wird nicht $i18nLanguage dadurch initialisiert, dass sie als global angegeben ist (so zum Verständnis).
ähm, nein interessanter weise nicht... das klappt mit dem isset ganz gut...
HerrB hat geschrieben:...bei der Änderung zum Upload (file_exists rausnehmen): Wenn das scheitert, kann dann ein move_uploaded_file erfolgreich enden?
ähm
if (file_exists($_FILES['file']['tmp_name'][$key]))
scheitert im normalfall...
die variable ist aber nur dann nicht leer wenn ein upload erfolgreich war...
(jeder upload landet zuerst im upload_tmp_dir)

file_exists scheitert, da upload_tmp_dir sich nicht im open_basedir befindet... man soll die temporären files der anderen benutzer nicht sehen können... (ergibt ja sinn)

ein verschieben des file mittels move_uploaded_file, wenn man den $_FILES['file']['tmp_name'][$key] kennt, klappt aber wunderbar...
(aber erst ab php 4.2.3)
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » So 24. Jun 2007, 18:59

Checkin

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Gesperrt