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":