[systemd-devel] [PATCH 2/3] install: don't allow to enable/disable templates

Michal Sekletar msekleta at redhat.com
Thu Aug 8 06:19:09 PDT 2013


Calling enable on template units doesn't make sense since it is possible
to enable instances directly and users are not forced to use Alias=
trickery anymore.
---
 src/shared/install.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/shared/install.c b/src/shared/install.c
index 07e06c4..5cda794 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -1470,9 +1470,11 @@ int unit_file_enable(
 
         _cleanup_lookup_paths_free_ LookupPaths paths = {};
         _cleanup_install_context_done_ InstallContext c = {};
-        char **i;
+        InstallInfo *v;
+        char **i, *k;
         _cleanup_free_ char *config_path = NULL;
         int r;
+        Iterator j;
 
         assert(scope >= 0);
         assert(scope < _UNIT_FILE_SCOPE_MAX);
@@ -1491,6 +1493,12 @@ int unit_file_enable(
                         return r;
         }
 
+        HASHMAP_FOREACH_KEY(v, k, c.will_install, j) {
+                r = unit_name_is_valid(k, false);
+                if (!r)
+                        return -EINVAL;
+        }
+
         /* This will return the number of symlink rules that were
         supposed to be created, not the ones actually created. This is
         useful to determine whether the passed files had any
@@ -1509,10 +1517,12 @@ int unit_file_disable(
 
         _cleanup_lookup_paths_free_ LookupPaths paths = {};
         _cleanup_install_context_done_ InstallContext c = {};
-        char **i;
+        InstallInfo *v;
+        char **i, *k;
         _cleanup_free_ char *config_path = NULL;
         _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
         int r, q;
+        Iterator j;
 
         assert(scope >= 0);
         assert(scope < _UNIT_FILE_SCOPE_MAX);
@@ -1531,6 +1541,12 @@ int unit_file_disable(
                         return r;
         }
 
+        HASHMAP_FOREACH_KEY(v, k, c.will_install, j) {
+                r = unit_name_is_valid(k, false);
+                if (!r)
+                        return -EINVAL;
+        }
+
         r = install_context_mark_for_removal(&c, &paths, &remove_symlinks_to, config_path, root_dir);
 
         q = remove_marked_symlinks(remove_symlinks_to, config_path, changes, n_changes, files);
-- 
1.8.3.1



More information about the systemd-devel mailing list