From: Stefan Schantl Date: Sun, 19 May 2013 19:49:15 +0000 (+0200) Subject: systemd: Add upstream patch to support "is-enabled" for templated units. X-Git-Tag: pango~224 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=17bafa6d3d16363d07f85fecfedb47fee9268685;p=people%2Fstevee%2Fipfire-3.x.git systemd: Add upstream patch to support "is-enabled" for templated units. --- 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 index 000000000..55dfe86a8 --- /dev/null +++ b/systemd/patches/0001-Make-systemctl-is-enabled-work-for-templated-units.patch @@ -0,0 +1,72 @@ +From 67820a0cbdc9d72a1074debf8b2bc72203c775cc Mon Sep 17 00:00:00 2001 +From: Michael Tremer +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 diff --git a/systemd/systemd.nm b/systemd/systemd.nm index 969951dbf..cc9c0562c 100644 --- a/systemd/systemd.nm +++ b/systemd/systemd.nm @@ -5,7 +5,7 @@ name = systemd version = 204 -release = 1 +release = 2 maintainer = Stefan Schantl groups = System/Base