systemctl: fix operations on relative paths

We should treat ./some.service and $PWD/some.service as equivalent. But we'd
try to send the relative paths over dbus, which can't work well:

$ sudo systemctl enable ./test2.service
Failed to look up unit file state: Invalid argument
$ sudo systemctl enable $PWD/test2.service
Created symlink /etc/systemd/system/multi-user.target.wants/test2.service → /home/zbyszek/src/systemd/test2.service.
Created symlink /etc/systemd/system/test2.service → /home/zbyszek/src/systemd/test2.service.

Now both are equivalent.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2022-03-18 10:22:20 +01:00
committed by Lennart Poettering
parent 2cdd6bef9c
commit 23484e1205
+6 -9
View File
@@ -873,18 +873,15 @@ int mangle_names(const char *operation, char **original_names, char ***ret_mangl
/* When enabling units qualified path names are OK, too, hence allow them explicitly. */
if (is_path(*name)) {
*i = strdup(*name);
if (!*i)
return log_oom();
} else {
if (is_path(*name))
r = path_make_absolute_cwd(*name, i);
else
r = unit_name_mangle_with_suffix(*name, operation,
arg_quiet ? 0 : UNIT_NAME_MANGLE_WARN,
".service", i);
if (r < 0) {
*i = NULL;
return log_error_errno(r, "Failed to mangle unit name: %m");
}
if (r < 0) {
*i = NULL;
return log_error_errno(r, "Failed to mangle unit name or path '%s': %m", *name);
}
i++;