7f93bc2
From f1bfb88cea3730c921d7a1d466621c13cdb611ac Mon Sep 17 00:00:00 2001
a59965a
From: Lennart Poettering <lennart@poettering.net>
a59965a
Date: Tue, 17 Jun 2014 00:33:39 +0200
a59965a
Subject: [PATCH] install: make sure "systemctl disable foobar@.service"
a59965a
 actually removes all instances
a59965a
a59965a
(cherry picked from commit 559367add5e22bf32d14fa1496512c68488f48b0)
a59965a
a59965a
Conflicts:
a59965a
	src/shared/install.c
a59965a
a59965a
(cherry picked from commit b83e096610a05b7bb3b096cebd634ef3717c4b2c)
a59965a
---
a59965a
 src/shared/install.c | 21 +++++++++++++++++----
a59965a
 1 file changed, 17 insertions(+), 4 deletions(-)
a59965a
a59965a
diff --git a/src/shared/install.c b/src/shared/install.c
a59965a
index 00a6a77..e772c45 100644
a59965a
--- a/src/shared/install.c
a59965a
+++ b/src/shared/install.c
a59965a
@@ -267,8 +267,21 @@ static int remove_marked_symlinks_fd(
a59965a
 
a59965a
                         if (unit_name_is_instance(de->d_name) &&
a59965a
                             instance_whitelist &&
a59965a
-                            !strv_contains(instance_whitelist, de->d_name))
a59965a
-                                continue;
a59965a
+                            !strv_contains(instance_whitelist, de->d_name)) {
a59965a
+                                _cleanup_free_ char *w;
a59965a
+
a59965a
+                                /* OK, the file is not listed directly
a59965a
+                                 * in the whitelist, so let's check if
a59965a
+                                 * the template of it might be
a59965a
+                                 * listed. */
a59965a
+
a59965a
+                                w = unit_name_template(de->d_name);
a59965a
+                                if (!w)
a59965a
+                                        return -ENOMEM;
a59965a
+
a59965a
+                                if (!strv_contains(instance_whitelist, w))
a59965a
+                                        continue;
a59965a
+                        }
a59965a
 
a59965a
                         p = path_make_absolute(de->d_name, path);
a59965a
                         if (!p)
a59965a
@@ -297,10 +310,10 @@ static int remove_marked_symlinks_fd(
a59965a
                                         continue;
a59965a
                                 }
a59965a
 
a59965a
-                                rmdir_parents(p, config_path);
a59965a
-
a59965a
                                 path_kill_slashes(p);
a59965a
 
a59965a
+                                rmdir_parents(p, config_path);
a59965a
+
a59965a
                                 add_file_change(changes, n_changes, UNIT_FILE_UNLINK, p, NULL);
a59965a
 
a59965a
                                 if (!set_get(remove_symlinks_to, p)) {