From: Lennart Poettering Date: Mon, 8 Jan 2024 22:06:48 +0000 (+0100) Subject: sd-bus: also intrepret $SYSTEMD_SSH env var X-Git-Tag: v256-rc1~1232^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F30837%2Fhead;p=thirdparty%2Fsystemd.git sd-bus: also intrepret $SYSTEMD_SSH env var 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. --- diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md index e3daabe3bce..c96e6db85ea 100644 --- a/docs/ENVIRONMENT.md +++ b/docs/ENVIRONMENT.md @@ -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. diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index f036a49c644..86b626595e7 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -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;