[systemd-devel] [PATCH 1/2] bus-util: add ssh and polkit connection methods
Peeters Simon
peeters.simon at gmail.com
Wed Oct 30 07:02:48 CET 2013
2013/10/30 Simon Peeters <peeters.simon at gmail.com>:
> bus_connect_system_ssh is shamelessly copied from Tom Gundersen's wip
> patches
Aparently i am 3 hours late to the party, so only the polkit part from
this patch is needed
> ---
> 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
>
More information about the systemd-devel
mailing list