2013/10/30 Simon Peeters <[email protected]>:
> 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
>
_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel