[1.13] Cache-Manager / FilesystemManager

Das Forum ist für das Melden von Bugs gedacht. // This forum is intended to report bugs with the APF.
Gesperrt
Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

[1.13] Cache-Manager / FilesystemManager

Beitrag von dr.e. » 06.02.2011, 15:53:54

Hallo zusammen,

Ralf und ich sind vor einiger Zeit auf ein weiteres Berechtigungs-Problem bei Cache-Dateien gestoßen. Dabei legt die aktuelle Implementierung des FilesystemManagers unter gewissen Umständen Cache-Ordner mit falschen Berechtigungen an.

Hier ein Auszug aus dem Shell-Commands, die zeigen, dass die Ordner trotz richtiger Angabe von Permissions Ordner mit falschen Datei-Berechtigungen anlegen:

Code: Alles auswählen

[***@s1 cache]$ php -r "mkdir('./foo/bar/baz', octdec(sprintf('%04u','0777')), true);"
PHP Warning:  mkdir(): Permission denied in Command line code on line 1

Warning: mkdir(): Permission denied in Command line code on line 1
[***@s1 cache]$ ll
total 8
dr----x--t 2 *** *** 4096 Dec 29 19:35 foo
d------r-- 2 *** *** 4096 Dec 29 19:24 test
Es ist meiner Ansicht nach also IMHO kein Problem, das 1:1 auf den FilesystemManager zurückfällt, sondern mir scheint hier die Implementierung von PHP's mkdir() nicht ganz unschuldig.

Hinweis: die Auswirkung des Bugs zeigt sich nur, wenn der Cache-Manager die Datei-Berechtigungen manuell per Konfigurations-Direktive Cache.FolderPermission definiert, da der Wert ein String und keine oktale Zahl ist.

Da offensichtlich die Formattierung von Zeichenketten direkt mit sprintf() zu einer Oktal-Zahl mögich ist, habe ich einen Workaround eingebaut, der die Eingabe an die Methode createFolder() zunächst immer in eine intern String-Repräsentation umwandelt und anschließend die Formatierung zweigeteilt vornimmt. Damit bleibt die API konstant und kann zusätzlich per String-Eingabe bedient werden.

Um das Anlegen der Ordner gemäß der Permission-Definition bei Aufruf zu ermöglichen muss zusätzlich die umask kurzfristig auf 0 gesetzt werden, da es sonst zu Interferenzen mit der aktuellen umask des Benutzers kommt unter dem der Webserver läuft.

Lange Rede, kurzer Sinn: damit ist dieser Bug auch für 1.13 gefixt. :)
Viele Grüße,
Christian

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast