Zbigniew Jędrzejewski-Szmek 5509c0
From 90d16404421d61e4e13bcff35f914477b9d04d81 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 5509c0
From: Lennart Poettering <lennart@poettering.net>
Zbigniew Jędrzejewski-Szmek 5509c0
Date: Tue, 17 Jun 2014 00:33:39 +0200
Zbigniew Jędrzejewski-Szmek 5509c0
Subject: [PATCH] install: make sure "systemctl disable foobar@.service"
Zbigniew Jędrzejewski-Szmek 5509c0
 actually removes all instances
Zbigniew Jędrzejewski-Szmek 5509c0
Zbigniew Jędrzejewski-Szmek 5509c0
(cherry picked from commit 559367add5e22bf32d14fa1496512c68488f48b0)
Zbigniew Jędrzejewski-Szmek 5509c0
---
Zbigniew Jędrzejewski-Szmek 5509c0
 src/shared/install.c | 24 +++++++++++++++++-------
Zbigniew Jędrzejewski-Szmek 5509c0
 1 file changed, 17 insertions(+), 7 deletions(-)
Zbigniew Jędrzejewski-Szmek 5509c0
Zbigniew Jędrzejewski-Szmek 5509c0
diff --git a/src/shared/install.c b/src/shared/install.c
Zbigniew Jędrzejewski-Szmek 5509c0
index e16de4d6..278350be 100644
Zbigniew Jędrzejewski-Szmek 5509c0
--- a/src/shared/install.c
Zbigniew Jędrzejewski-Szmek 5509c0
+++ b/src/shared/install.c
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -266,8 +266,22 @@ static int remove_marked_symlinks_fd(
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
                         if (unit_name_is_instance(de->d_name) &&
Zbigniew Jędrzejewski-Szmek 5509c0
                             instance_whitelist &&
Zbigniew Jędrzejewski-Szmek 5509c0
-                            !strv_contains(instance_whitelist, de->d_name))
Zbigniew Jędrzejewski-Szmek 5509c0
-                                continue;
Zbigniew Jędrzejewski-Szmek 5509c0
+                            !strv_contains(instance_whitelist, de->d_name)) {
Zbigniew Jędrzejewski-Szmek 5509c0
+
Zbigniew Jędrzejewski-Szmek 5509c0
+                                _cleanup_free_ char *w;
Zbigniew Jędrzejewski-Szmek 5509c0
+
Zbigniew Jędrzejewski-Szmek 5509c0
+                                /* OK, the file is not listed directly
Zbigniew Jędrzejewski-Szmek 5509c0
+                                 * in the whitelist, so let's check if
Zbigniew Jędrzejewski-Szmek 5509c0
+                                 * the template of it might be
Zbigniew Jędrzejewski-Szmek 5509c0
+                                 * listed. */
Zbigniew Jędrzejewski-Szmek 5509c0
+
Zbigniew Jędrzejewski-Szmek 5509c0
+                                w = unit_name_template(de->d_name);
Zbigniew Jędrzejewski-Szmek 5509c0
+                                if (!w)
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        return -ENOMEM;
Zbigniew Jędrzejewski-Szmek 5509c0
+
Zbigniew Jędrzejewski-Szmek 5509c0
+                                if (!strv_contains(instance_whitelist, w))
Zbigniew Jędrzejewski-Szmek 5509c0
+                                        continue;
Zbigniew Jędrzejewski-Szmek 5509c0
+                        }
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
                         p = path_make_absolute(de->d_name, path);
Zbigniew Jędrzejewski-Szmek 5509c0
                         if (!p)
Zbigniew Jędrzejewski-Szmek 5509c0
@@ -290,18 +304,14 @@ static int remove_marked_symlinks_fd(
Zbigniew Jędrzejewski-Szmek 5509c0
                         if (!found)
Zbigniew Jędrzejewski-Szmek 5509c0
                                 continue;
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-
Zbigniew Jędrzejewski-Szmek 5509c0
                         if (unlink(p) < 0 && errno != ENOENT) {
Zbigniew Jędrzejewski-Szmek 5509c0
-
Zbigniew Jędrzejewski-Szmek 5509c0
                                 if (r == 0)
Zbigniew Jędrzejewski-Szmek 5509c0
                                         r = -errno;
Zbigniew Jędrzejewski-Szmek 5509c0
                                 continue;
Zbigniew Jędrzejewski-Szmek 5509c0
                         }
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
-                        rmdir_parents(p, config_path);
Zbigniew Jędrzejewski-Szmek 5509c0
-
Zbigniew Jędrzejewski-Szmek 5509c0
                         path_kill_slashes(p);
Zbigniew Jędrzejewski-Szmek 5509c0
-
Zbigniew Jędrzejewski-Szmek 5509c0
+                        rmdir_parents(p, config_path);
Zbigniew Jędrzejewski-Szmek 5509c0
                         add_file_change(changes, n_changes, UNIT_FILE_UNLINK, p, NULL);
Zbigniew Jędrzejewski-Szmek 5509c0
 
Zbigniew Jędrzejewski-Szmek 5509c0
                         if (!set_get(remove_symlinks_to, p)) {