bus_connect_system_ssh is shamelessly copied from Tom Gundersen's wip patches --- src/libsystemd-bus/bus-util.c | 61 +++++++++++++++++++++++++++++++++++++++++++ src/libsystemd-bus/bus-util.h | 2 ++ 2 files changed, 63 insertions(+)
diff --git a/src/libsystemd-bus/bus-util.c b/src/libsystemd-bus/bus-util.c index 42374fe..464e5fb 100644 --- a/src/libsystemd-bus/bus-util.c +++ b/src/libsystemd-bus/bus-util.c @@ -450,3 +450,64 @@ int bus_connect_system(sd_bus **_bus) { *_bus = bus; return 0; } + +int bus_connect_system_ssh(const char *host, sd_bus **_bus) { + sd_bus *bus; + char *p = NULL; + int r; + + assert(_bus); + assert(host); + + asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s,argv3=systemd-stdio-bridge", host); + if (!p) + return -ENOMEM; + + r = sd_bus_new(&bus); + if (r < 0) + return r; + + r = sd_bus_set_address(bus, p); + if (r < 0) + return r; + + r = sd_bus_set_bus_client(bus, true); + if (r < 0) + return r; + + r = sd_bus_start(bus); + if (r < 0) + return r; + + *_bus = bus; + return 0; +} + +int bus_connect_system_polkit(sd_bus **_bus) { + sd_bus *bus; + int r; + + assert(_bus); + + if (geteuid() == 0) + return sd_bus_open_system(_bus); + + r = sd_bus_new(&bus); + if (r < 0) + return r; + + r = sd_bus_set_address(bus, "unixexec:path=pkexec,argv1=" SYSTEMD_STDIO_BRIDGE_BINARY_PATH); + if (r < 0) + return r; + + r = sd_bus_set_bus_client(bus, true); + if (r < 0) + return r; + + r = sd_bus_start(bus); + if (r < 0) + return r; + + *_bus = bus; + return 0; +} diff --git a/src/libsystemd-bus/bus-util.h b/src/libsystemd-bus/bus-util.h index cf00436..92df3c2 100644 --- a/src/libsystemd-bus/bus-util.h +++ b/src/libsystemd-bus/bus-util.h @@ -38,6 +38,8 @@ int bus_verify_polkit_async(sd_bus *bus, Hashmap **registry, sd_bus_message *m, void bus_verify_polkit_async_registry_free(sd_bus *bus, Hashmap *registry); int bus_connect_system(sd_bus **_bus); +int bus_connect_system_ssh(const char *host, sd_bus **_bus); +int bus_connect_system_polkit(sd_bus **_bus); DEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus*, sd_bus_unref); DEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus_message*, sd_bus_message_unref); -- 1.8.4.2 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel