From bcb1bb379e8b888dc67494910ac9172c5cf32da6 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 8 Jan 2024 23:06:48 +0100 Subject: [PATCH] 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. --- docs/ENVIRONMENT.md | 3 ++- src/libsystemd/sd-bus/sd-bus.c | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) 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;