Rechte fuer Anlegen von Verzeichnissen in /data/
Verzeichnisse in /data/ darf jeder anlegen, sofern es das
Verzeichnis bereits ausserhalb von /data/ gibt.
Gab es das nicht, durfte niemand anlegen, nicht einmal
der Master. In diesem Fall wird nun weiter ganz normal
geprueft, ob man es denn ausserhalb von /data/
anlegen duerfte.
Change-Id: I927982fb527332a6556e84aac7da84952b205927
diff --git a/secure/master/file_access.c b/secure/master/file_access.c
index c37273e..001d877 100644
--- a/secure/master/file_access.c
+++ b/secure/master/file_access.c
@@ -166,10 +166,16 @@
// Erstellung eines Verezeichnisses jedem erlaubt sein, wenn es das
// entsprechende Verzeichnis ausserhalb /data/ schon gibt.
if (sizeof(path) > 6
- && path[0..5] == "/"LIBDATADIR"/") {
+ && path[0..5] == "/"LIBDATADIR"/")
+ {
if (fun=="mkdir")
- return file_size(path[5..]) == FSIZE_DIR;
-
+ {
+ // wenn schon ausserhalb /data/ existent: erlauben
+ if (file_size(path[5..]) == FSIZE_DIR)
+ return 1;
+ // sonst fall-through und normale gucken, ob der Aufrufer ausserhalb
+ // /data/ denn duerfte.
+ }
return valid_write(path[5..], euid, fun, obj) != 0;
}