core: refuse StateDirectory=private
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 18 May 2018 04:29:26 +0000 (13:29 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 18 May 2018 04:30:21 +0000 (13:30 +0900)
Follow-up for e8865688735ba3bd34297fa89cca6bde7ba33997 (#9021).

src/core/dbus-execute.c

index 3b1c77e..fe9701b 100644 (file)
@@ -2139,8 +2139,14 @@ int bus_exec_context_set_transient_property(
                         return r;
 
                 STRV_FOREACH(p, l) {
-                        if (!path_is_normalized(*p) || path_is_absolute(*p))
-                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= path is not valid: %s", name, *p);
+                        if (!path_is_normalized(*p))
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= path is not normalized: %s", name, *p);
+
+                        if (path_is_absolute(*p))
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= path is absolute: %s", name, *p);
+
+                        if (path_startswith(*p, "private"))
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= path can't be 'private': %s", name, *p);
                 }
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {