From 133e5b362f862ac9c9b1dd7b5de0b004cbb9af54 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Sat, 30 Apr 2016 17:52:19 -0400 Subject: shared/install: refuse template files for non-templateable units $ systemctl --root=/ enable templated@bar.mount Unit type mount cannot be templated. Failed to enable: Invalid argument. --- src/shared/install.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/shared/install.c b/src/shared/install.c index f89e2c6387..f02d81504f 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -1050,6 +1050,8 @@ static int unit_file_load( {} }; + const char *name; + UnitType type; _cleanup_fclose_ FILE *f = NULL; _cleanup_close_ int fd = -1; struct stat st; @@ -1059,6 +1061,12 @@ static int unit_file_load( assert(info); assert(path); + name = basename(path); + type = unit_name_to_type(name); + if (unit_name_is_valid(name, UNIT_NAME_TEMPLATE|UNIT_NAME_INSTANCE) && + !unit_type_may_template(type)) + return log_error_errno(EINVAL, "Unit type %s cannot be templated.", unit_type_to_string(type)); + if (!(flags & SEARCH_LOAD)) { r = lstat(path, &st); if (r < 0) -- cgit v1.2.3-54-g00ecf