summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-07-17 12:23:26 +0200
committerLennart Poettering <lennart@poettering.net>2018-07-25 22:48:11 +0200
commit1e5057b904473696ae0d591d7555233adcb51fa4 (patch)
treea551e86405e10181fde4913bcce5077d1a7a8777
parentupdate TODO (diff)
downloadsystemd-1e5057b904473696ae0d591d7555233adcb51fa4.tar.xz
systemd-1e5057b904473696ae0d591d7555233adcb51fa4.zip
sd-bus: allow connecting to the pseudo-container ".host"
machined exposes the pseudo-container ".host" as a reference to the host system, and this means "machinectl login .host" and "machinectl shell .host" get your a login/shell on the host. systemd-run currently doesn't allow that. Let's fix that, and make sd-bus understand ".host" as an alias for connecting to the host system.
-rw-r--r--src/basic/util.c5
-rw-r--r--src/libsystemd/sd-bus/sd-bus.c4
2 files changed, 7 insertions, 2 deletions
diff --git a/src/basic/util.c b/src/basic/util.c
index 2206c1b4ad..f951d641d7 100644
--- a/src/basic/util.c
+++ b/src/basic/util.c
@@ -230,6 +230,11 @@ int container_get_leader(const char *machine, pid_t *pid) {
assert(machine);
assert(pid);
+ if (streq(machine, ".host")) {
+ *pid = 1;
+ return 0;
+ }
+
if (!machine_name_is_valid(machine))
return -EINVAL;
diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
index a87f4625ec..4412fe152f 100644
--- a/src/libsystemd/sd-bus/sd-bus.c
+++ b/src/libsystemd/sd-bus/sd-bus.c
@@ -949,7 +949,7 @@ static int parse_container_unix_address(sd_bus *b, const char **p, char **guid)
return -EINVAL;
if (machine) {
- if (!machine_name_is_valid(machine))
+ if (!streq(machine, ".host") && !machine_name_is_valid(machine))
return -EINVAL;
free_and_replace(b->machine, machine);
@@ -1447,7 +1447,7 @@ _public_ int sd_bus_open_system_machine(sd_bus **ret, const char *machine) {
assert_return(machine, -EINVAL);
assert_return(ret, -EINVAL);
- assert_return(machine_name_is_valid(machine), -EINVAL);
+ assert_return(streq(machine, ".host") || machine_name_is_valid(machine), -EINVAL);
r = sd_bus_new(&b);
if (r < 0)