summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/load-fragment.c2
-rw-r--r--src/manager.c2
-rw-r--r--src/snapshot.c2
-rw-r--r--src/systemctl.c10
-rw-r--r--src/unit-name.c6
-rw-r--r--src/unit-name.h2
-rw-r--r--src/unit.c6
-rw-r--r--src/unit.h2
8 files changed, 13 insertions, 19 deletions
diff --git a/src/load-fragment.c b/src/load-fragment.c
index 54b1af041c..740c11c3c2 100644
--- a/src/load-fragment.c
+++ b/src/load-fragment.c
@@ -1431,7 +1431,7 @@ static int open_follow(char **filename, FILE **_f, Set *names, char **_final) {
* unit name. */
name = file_name_from_path(*filename);
- if (unit_name_is_valid(name)) {
+ if (unit_name_is_valid(name, false)) {
if (!(id = set_get(names, name))) {
if (!(id = strdup(name)))
diff --git a/src/manager.c b/src/manager.c
index 26a631e9d7..7e9075aad6 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -1641,7 +1641,7 @@ int manager_load_unit_prepare(Manager *m, const char *name, const char *path, DB
if (!name)
name = file_name_from_path(path);
- if (!unit_name_is_valid(name)) {
+ if (!unit_name_is_valid(name, false)) {
dbus_set_error(e, BUS_ERROR_INVALID_NAME, "Unit name %s is not valid.", name);
return -EINVAL;
}
diff --git a/src/snapshot.c b/src/snapshot.c
index f58d46e917..a23f2dba40 100644
--- a/src/snapshot.c
+++ b/src/snapshot.c
@@ -186,7 +186,7 @@ int snapshot_create(Manager *m, const char *name, bool cleanup, DBusError *e, Sn
assert(_s);
if (name) {
- if (!unit_name_is_valid(name)) {
+ if (!unit_name_is_valid(name, false)) {
dbus_set_error(e, BUS_ERROR_INVALID_NAME, "Unit name %s is not valid.", name);
return -EINVAL;
}
diff --git a/src/systemctl.c b/src/systemctl.c
index 4beec0fca5..c8384ff530 100644
--- a/src/systemctl.c
+++ b/src/systemctl.c
@@ -3247,7 +3247,7 @@ static int install_info_add(const char *name) {
assert(will_install);
- if (!unit_name_is_valid_no_type(name)) {
+ if (!unit_name_is_valid_no_type(name, true)) {
log_warning("Unit name %s is not a valid unit name.", name);
return -EINVAL;
}
@@ -3633,12 +3633,6 @@ static int install_info_symlink_alias(const char *verb, InstallInfo *i, const ch
STRV_FOREACH(s, i->aliases) {
- if (!unit_name_is_valid_no_type(*s)) {
- log_error("Invalid name %s.", *s);
- r = -EINVAL;
- goto finish;
- }
-
free(alias_path);
if (!(alias_path = path_make_absolute(*s, config_path))) {
log_error("Out of memory");
@@ -3670,7 +3664,7 @@ static int install_info_symlink_wants(const char *verb, InstallInfo *i, const ch
assert(config_path);
STRV_FOREACH(s, i->wanted_by) {
- if (!unit_name_is_valid_no_type(*s)) {
+ if (!unit_name_is_valid_no_type(*s, true)) {
log_error("Invalid name %s.", *s);
r = -EINVAL;
goto finish;
diff --git a/src/unit-name.c b/src/unit-name.c
index 0e86b554c2..cd6e3cea5c 100644
--- a/src/unit-name.c
+++ b/src/unit-name.c
@@ -32,7 +32,7 @@
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
":-_.\\"
-bool unit_name_is_valid_no_type(const char *n) {
+bool unit_name_is_valid_no_type(const char *n, bool template_ok) {
const char *e, *i, *at;
/* Valid formats:
@@ -63,7 +63,7 @@ bool unit_name_is_valid_no_type(const char *n) {
if (at == n)
return false;
- if (at[1] == '.')
+ if (!template_ok && at+1 == e)
return false;
}
@@ -150,7 +150,7 @@ char *unit_name_change_suffix(const char *n, const char *suffix) {
size_t a, b;
assert(n);
- assert(unit_name_is_valid_no_type(n));
+ assert(unit_name_is_valid_no_type(n, true));
assert(suffix);
assert_se(e = strrchr(n, '.'));
diff --git a/src/unit-name.h b/src/unit-name.h
index a752f3a2c7..db1a79e8d5 100644
--- a/src/unit-name.h
+++ b/src/unit-name.h
@@ -30,7 +30,7 @@ int unit_name_to_instance(const char *n, char **instance);
char* unit_name_to_prefix(const char *n);
char* unit_name_to_prefix_and_instance(const char *n);
-bool unit_name_is_valid_no_type(const char *n);
+bool unit_name_is_valid_no_type(const char *n, bool template_ok);
bool unit_prefix_is_valid(const char *p);
bool unit_instance_is_valid(const char *i);
diff --git a/src/unit.c b/src/unit.c
index d2652bafb2..d45fe91560 100644
--- a/src/unit.c
+++ b/src/unit.c
@@ -103,7 +103,7 @@ int unit_add_name(Unit *u, const char *text) {
if (!s)
return -ENOMEM;
- if (!unit_name_is_valid(s)) {
+ if (!unit_name_is_valid(s, false)) {
r = -EINVAL;
goto fail;
}
@@ -2222,14 +2222,14 @@ UnitType unit_name_to_type(const char *n) {
return _UNIT_TYPE_INVALID;
}
-bool unit_name_is_valid(const char *n) {
+bool unit_name_is_valid(const char *n, bool template_ok) {
UnitType t;
t = unit_name_to_type(n);
if (t < 0 || t >= _UNIT_TYPE_MAX)
return false;
- return unit_name_is_valid_no_type(n);
+ return unit_name_is_valid_no_type(n, template_ok);
}
static const char* const unit_load_state_table[_UNIT_LOAD_STATE_MAX] = {
diff --git a/src/unit.h b/src/unit.h
index a020bd8a0d..aa818d4f21 100644
--- a/src/unit.h
+++ b/src/unit.h
@@ -505,7 +505,7 @@ bool unit_pending_active(Unit *u);
int unit_add_default_target_dependency(Unit *u, Unit *target);
UnitType unit_name_to_type(const char *n);
-bool unit_name_is_valid(const char *n);
+bool unit_name_is_valid(const char *n, bool template_ok);
const char *unit_load_state_to_string(UnitLoadState i);
UnitLoadState unit_load_state_from_string(const char *s);