[systemd-devel] [PATCHv2] tmpfiles: don't apply --create to /dev twice during boot

Tom Gundersen teg at jklm.no
Wed Jul 24 07:08:09 PDT 2013


We used to call

  systemd-tmpfiles --prefix=/dev --create --remove
  systemd-udevd
  systemd-tmpfiles --create --remove

which caused a bug:

The first call would create dead device nodes, udev would change
permissions on these nodes, before the second call to tmpfiles would
reset the permissions to what they used to be.

Instead allow negation in the prefix filtering, to restrict the
second call to apply to everything but /dev:

  systemd-tmpfiles --prefix=-/dev --create --remove

Fixes: <https://bugs.archlinux.org/task/36259>
Reported-by: Gaetan Bisson <bisson at archlinux.org>
---

v2: use --prefix=-/dev, rather than --prefix=!/dev to avoid problems with shell

 src/tmpfiles/tmpfiles.c                 | 5 ++++-
 units/systemd-tmpfiles-setup.service.in | 2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index eae993e..39341b4 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -1119,9 +1119,12 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
 
         path_kill_slashes(i->path);
 
-        if (arg_prefix && !path_startswith(i->path, arg_prefix))
+        if (arg_prefix && arg_prefix[0] != '-' && !path_startswith(i->path, arg_prefix))
                 return 0;
 
+	if (arg_prefix && arg_prefix[0] == '-' && path_startswith(i->path, arg_prefix + 1))
+		return 0;
+
         if (user && !streq(user, "-")) {
                 const char *u = user;
 
diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
index 67c7d4a..0227608 100644
--- a/units/systemd-tmpfiles-setup.service.in
+++ b/units/systemd-tmpfiles-setup.service.in
@@ -21,4 +21,4 @@ ConditionDirectoryNotEmpty=|/run/tmpfiles.d
 [Service]
 Type=oneshot
 RemainAfterExit=yes
-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove
+ExecStart=@rootbindir@/systemd-tmpfiles --prefix=-/dev --create --remove
-- 
1.8.3.3



More information about the systemd-devel mailing list