Bugfix valid_write() zum Erlauben von mkdir.
Wenn ein Verzeichnis in LIBDATADIR angelegt werden soll und es
dieses Verzeichnis ausserhalb von LIBDATADIR schon gibt, darf
dies jede UID tun.
Change-Id: I8dd35139fe2c2ae36cb06c3033917c2639343226
diff --git a/secure/master/file_access.c b/secure/master/file_access.c
index 5b7e3e4..094749d 100644
--- a/secure/master/file_access.c
+++ b/secure/master/file_access.c
@@ -149,7 +149,10 @@
return _get_path(str, getuid(TP));
}
-
+// Hngl. Inkludieren aus /sys ist hier doof.
+#ifndef FSIZE_DIR
+#define FSIZE_DIR -2
+#endif
mixed valid_write(string path, string euid, string fun, object obj)
{
int s,lvl;
@@ -159,10 +162,16 @@
if (member(path,' ')!=-1) return 0;
// Unter LIBDATADIR (/data) sollen komplett identische Schreibrechte
- // vergeben werden.
+ // vergeben werden. Ausnahme ist jedoch fun=="mkdir": hier soll die
+ // 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;
+
return valid_write(path[5..], euid, fun, obj) != 0;
+ }
switch(fun) {
case "log_file":