]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemctl: fix operations on relative paths
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 2 Mar 2022 14:29:45 +0000 (15:29 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 18 Mar 2022 09:22:20 +0000 (10:22 +0100)
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.

src/systemctl/systemctl-util.c

index acf2e477d3a9831b3d0955544817fab7d148667d..8afd4b222ac427dc583bbd3280ccb0303d619711 100644 (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++;