]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-bus: also intrepret $SYSTEMD_SSH env var 30837/head
authorLennart Poettering <lennart@poettering.net>
Mon, 8 Jan 2024 22:06:48 +0000 (23:06 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 8 Jan 2024 22:24:51 +0000 (23:24 +0100)
To make things symmetric to the $SYSTEMD_SSH logic that the varlink
transport supports, let's also honour such a variable in sd-bus when
picking ssh transport.

docs/ENVIRONMENT.md
src/libsystemd/sd-bus/sd-bus.c

index e3daabe3bce6660090de32a3fbeec4a3111b4a5e..c96e6db85eaaf551db46bb0ae002c41855c20f0c 100644 (file)
@@ -611,7 +611,8 @@ SYSTEMD_HOME_DEBUG_SUFFIX=foo \
   to expose a single device only, since those identifiers better should be kept
   unique.
 
-Tools using the Varlink protocol, such as `varlinkctl`:
+Tools using the Varlink protocol (such as `varlinkctl`) or sd-bus (such as
+`busctl`):
 
 * `$SYSTEMD_SSH` – the ssh binary to invoke when the `ssh:` transport is
   used. May be a filename (which is searched for in `$PATH`) or absolute path.
index f036a49c644b50d1ea482c953c53f00e1c168523..86b626595e71f386ad219256580e5dfedc6b2e9f 100644 (file)
@@ -1486,9 +1486,15 @@ interpret_port_as_machine_old_syntax:
                         return -ENOMEM;
         }
 
-        a = strjoin("unixexec:path=ssh,argv1=-xT", p ? ",argv2=-p,argv3=" : "", strempty(p),
-                                ",argv", p ? "4" : "2", "=--,argv", p ? "5" : "3", "=", e,
-                                ",argv", p ? "6" : "4", "=systemd-stdio-bridge", c);
+        const char *ssh = secure_getenv("SYSTEMD_SSH") ?: "ssh";
+        _cleanup_free_ char *ssh_escaped = bus_address_escape(ssh);
+        if (!ssh_escaped)
+                return -ENOMEM;
+
+        a = strjoin("unixexec:path=", ssh_escaped, ",argv1=-xT",
+                    p ? ",argv2=-p,argv3=" : "", strempty(p),
+                    ",argv", p ? "4" : "2", "=--,argv", p ? "5" : "3", "=", e,
+                    ",argv", p ? "6" : "4", "=systemd-stdio-bridge", c);
         if (!a)
                 return -ENOMEM;