diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-02-17 20:30:33 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-02-18 11:43:18 +0100 |
commit | c0765ddb74f20046c406a3ac99f34719d767f151 (patch) | |
tree | 85686383b6019d58899d921daff12035bed0c929 | |
parent | b89c454b37a23433f8fd6ad7b93f5a6190930aa4 (diff) |
sd-bus: allow setting a per-connection default value for the "allow-interactive-authentication" message flag
Most of our client tools want to set this bit for all their method
calls, even though it defaults to off in sd-bus, and rightfully so.
Hence, to simplify thing, introduce a per sd_bus-object flag that sets
the default value for all messages created on the connection.
-rw-r--r-- | src/libsystemd/libsystemd.sym.m4 | 2 | ||||
-rw-r--r-- | src/libsystemd/sd-bus/bus-internal.h | 1 | ||||
-rw-r--r-- | src/libsystemd/sd-bus/bus-message.c | 3 | ||||
-rw-r--r-- | src/libsystemd/sd-bus/sd-bus.c | 15 | ||||
-rw-r--r-- | src/systemd/sd-bus.h | 2 |
5 files changed, 23 insertions, 0 deletions
diff --git a/src/libsystemd/libsystemd.sym.m4 b/src/libsystemd/libsystemd.sym.m4 index 76a8c921c6..81f1122697 100644 --- a/src/libsystemd/libsystemd.sym.m4 +++ b/src/libsystemd/libsystemd.sym.m4 @@ -185,6 +185,8 @@ global: sd_bus_set_trusted; sd_bus_set_monitor; sd_bus_set_description; + sd_bus_set_allow_interactive_authorization; + sd_bus_get_allow_interactive_authorization; sd_bus_negotiate_fds; sd_bus_negotiate_timestamp; sd_bus_negotiate_creds; diff --git a/src/libsystemd/sd-bus/bus-internal.h b/src/libsystemd/sd-bus/bus-internal.h index e9f1a816aa..bebb2c2fac 100644 --- a/src/libsystemd/sd-bus/bus-internal.h +++ b/src/libsystemd/sd-bus/bus-internal.h @@ -211,6 +211,7 @@ struct sd_bus { bool manual_peer_interface:1; bool is_system:1; bool is_user:1; + bool allow_interactive_authorization:1; int use_memfd; diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c index 2959303033..076b85f3b9 100644 --- a/src/libsystemd/sd-bus/bus-message.c +++ b/src/libsystemd/sd-bus/bus-message.c @@ -634,6 +634,9 @@ static sd_bus_message *message_new(sd_bus *bus, uint8_t type) { m->root_container.need_offsets = BUS_MESSAGE_IS_GVARIANT(m); m->bus = sd_bus_ref(bus); + if (bus->allow_interactive_authorization) + m->header->flags |= BUS_MESSAGE_ALLOW_INTERACTIVE_AUTHORIZATION; + return m; } diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index cac9b65601..6a7f9c04ac 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -357,6 +357,21 @@ _public_ int sd_bus_set_description(sd_bus *bus, const char *description) { return free_and_strdup(&bus->description, description); } +_public_ int sd_bus_set_allow_interactive_authorization(sd_bus *bus, int b) { + assert_return(bus, -EINVAL); + assert_return(!bus_pid_changed(bus), -ECHILD); + + bus->allow_interactive_authorization = !!b; + return 0; +} + +_public_ int sd_bus_get_allow_interactive_authorization(sd_bus *bus) { + assert_return(bus, -EINVAL); + assert_return(!bus_pid_changed(bus), -ECHILD); + + return bus->allow_interactive_authorization; +} + static int hello_callback(sd_bus *bus, sd_bus_message *reply, void *userdata, sd_bus_error *error) { const char *s; int r; diff --git a/src/systemd/sd-bus.h b/src/systemd/sd-bus.h index ca2d83e0e1..f6262a3ccf 100644 --- a/src/systemd/sd-bus.h +++ b/src/systemd/sd-bus.h @@ -143,6 +143,8 @@ int sd_bus_can_send(sd_bus *bus, char type); int sd_bus_negotiate_timestamp(sd_bus *bus, int b); int sd_bus_negotiate_creds(sd_bus *bus, int b, uint64_t creds_mask); int sd_bus_get_creds_mask(sd_bus *bus, uint64_t *creds_mask); +int sd_bus_set_allow_interactive_authorization(sd_bus *bus, int b); +int sd_bus_get_allow_interactive_authorization(sd_bus *bus); int sd_bus_start(sd_bus *ret); |