]> git.ipfire.org Git - people/pmueller/ipfire-3.x.git/commitdiff
systemd: Add upstream patch to support "is-enabled" for templated units.
authorStefan Schantl <stefan.schantl@ipfire.org>
Sun, 19 May 2013 19:49:15 +0000 (21:49 +0200)
committerStefan Schantl <stefan.schantl@ipfire.org>
Tue, 21 May 2013 19:20:19 +0000 (21:20 +0200)
systemd/patches/0001-Make-systemctl-is-enabled-work-for-templated-units.patch [new file with mode: 0644]
systemd/systemd.nm

diff --git a/systemd/patches/0001-Make-systemctl-is-enabled-work-for-templated-units.patch b/systemd/patches/0001-Make-systemctl-is-enabled-work-for-templated-units.patch
new file mode 100644 (file)
index 0000000..55dfe86
--- /dev/null
@@ -0,0 +1,72 @@
+From 67820a0cbdc9d72a1074debf8b2bc72203c775cc Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Sun, 19 May 2013 13:45:48 +0000
+Subject: systemctl: make systemctl is-enabled work for templated units
+
+Patch resolves the problem that 'systemctl is-enabled' does
+not work for templated units.
+
+Without this patch, systemctl is-enabled something@abc.service
+returned "No such file or directory", because it first checked
+if /usr/lib/systemd/system/something@abc.service, etc. exists.
+If systemctl is-enabled is called for templated units, this
+check should be omitted and it should search for symlinks in
+the .wants dirs right away.
+
+This patch fixes the broken behaviour and resolves
+  https://bugs.freedesktop.org/show_bug.cgi?id=55318.
+
+[zj: fixed the patch to still check for broken symlinks and
+     masked instances. Also removed untrue assumptions from
+     the patch description.]
+---
+diff --git a/src/shared/install.c b/src/shared/install.c
+index edf4d2a..8f27c6d 100644
+--- a/src/shared/install.c
++++ b/src/shared/install.c
+@@ -1609,24 +1609,29 @@ UnitFileState unit_file_get_state(
+                 if (!path)
+                         return -ENOMEM;
++                /*
++                 * Search for a unit file in our default paths, to
++                 * be sure, that there are no broken symlinks.
++                 */
+                 if (lstat(path, &st) < 0) {
+                         r = -errno;
+-                        if (errno == ENOENT)
+-                                continue;
+-
+-                        return -errno;
+-                }
++                        if (errno != ENOENT)
++                                return r;
+-                if (!S_ISREG(st.st_mode) && !S_ISLNK(st.st_mode))
+-                        return -ENOENT;
++                        if (!unit_name_is_instance(name))
++                                continue;
++                } else {
++                        if (!S_ISREG(st.st_mode) && !S_ISLNK(st.st_mode))
++                                return -ENOENT;
+-                r = null_or_empty_path(path);
+-                if (r < 0 && r != -ENOENT)
+-                        return r;
+-                else if (r > 0) {
+-                        state = path_startswith(*i, "/run") ?
+-                                UNIT_FILE_MASKED_RUNTIME : UNIT_FILE_MASKED;
+-                        return state;
++                        r = null_or_empty_path(path);
++                        if (r < 0 && r != -ENOENT)
++                                return r;
++                        else if (r > 0) {
++                                state = path_startswith(*i, "/run") ?
++                                        UNIT_FILE_MASKED_RUNTIME : UNIT_FILE_MASKED;
++                                return state;
++                        }
+                 }
+                 r = find_symlinks_in_scope(scope, root_dir, name, &state);
+--
+cgit v0.9.0.2-2-gbebe
index 969951dbfd9d6f913f204fbaa929f20fd374f345..cc9c0562c20d2101d901ed800678837687d9d2da 100644 (file)
@@ -5,7 +5,7 @@
 
 name       = systemd
 version    = 204
-release    = 1
+release    = 2
 
 maintainer = Stefan Schantl <stefan.schantl@ipfire.org>
 groups     = System/Base