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.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2016-04-30 17:52:19 -04:00
parent 6597fa6117
commit 133e5b362f

View file

@ -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)