]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Allow block and char classes in DeviceAllow bus properties (#4353)
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 12 Oct 2016 09:12:11 +0000 (05:12 -0400)
committerLennart Poettering <lennart@poettering.net>
Wed, 12 Oct 2016 09:12:11 +0000 (11:12 +0200)
Allowed paths are unified betwen the configuration file parses and the bus
property checker. The biggest change is that the bus code now allows "block-"
and "char-" classes. In addition, path_startswith("/dev") was used in the bus
code, and startswith("/dev") was used in the config file code. It seems
reasonable to use path_startswith() which allows a slightly broader class of
strings.

Fixes #3935.

src/basic/path-util.c
src/basic/path-util.h
src/core/load-fragment.c
src/shared/bus-unit-util.c

index c32e961af470783bbe118ff90dbc93e901ed5523..a76963aa9fd0151656cd5f98ae3bb57761a3de24 100644 (file)
@@ -812,9 +812,14 @@ bool is_device_path(const char *path) {
         /* Returns true on paths that refer to a device, either in
          * sysfs or in /dev */
 
-        return
-                path_startswith(path, "/dev/") ||
-                path_startswith(path, "/sys/");
+        return path_startswith(path, "/dev/") ||
+               path_startswith(path, "/sys/");
+}
+
+bool is_deviceallow_pattern(const char *path) {
+        return path_startswith(path, "/dev/") ||
+               startswith(path, "block-") ||
+               startswith(path, "char-");
 }
 
 int systemd_installation_has_version(const char *root, unsigned minimal_version) {
index 78472f0961a142786df34ba5bf31776ac134eeef..66545f52d9c75a6853484c0b2dc88fec342338ac 100644 (file)
@@ -125,5 +125,6 @@ char *file_in_same_dir(const char *path, const char *filename);
 bool hidden_or_backup_file(const char *filename) _pure_;
 
 bool is_device_path(const char *path);
+bool is_deviceallow_pattern(const char *path);
 
 int systemd_installation_has_version(const char *root, unsigned minimal_version);
index 8f067b558684cf1535b6bf3a8e3a6c68f88f401e..06c156a623fc9e129719f11be79e48a40f01293f 100644 (file)
@@ -3084,9 +3084,7 @@ int config_parse_device_allow(
         if (!path)
                 return log_oom();
 
-        if (!startswith(path, "/dev/") &&
-            !startswith(path, "block-") &&
-            !startswith(path, "char-")) {
+        if (!is_deviceallow_pattern(path)) {
                 log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid device node path '%s'. Ignoring.", path);
                 return 0;
         }
index c6bd2f145cb42d93599a36c9d4cf3f0e06db1a74..a550a370b58c19ad2d7c16d37b2c8117f5c5d34b 100644 (file)
@@ -303,7 +303,7 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
                                 rwm = "";
                         }
 
-                        if (!path_startswith(path, "/dev")) {
+                        if (!is_deviceallow_pattern(path)) {
                                 log_error("%s is not a device file in /dev.", path);
                                 return -EINVAL;
                         }