diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-10-13 17:17:48 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-10-13 17:19:31 +0200 |
commit | b911eb15602ad173b1b938f351e2116789bd2c71 (patch) | |
tree | 2313889710b9f626a612fb4eaaf337eb78464c96 /src/libsystemd | |
parent | 53a83f4bc037379b48a078b748287d333569ccfb (diff) |
bus: check allow-interactive-auhtorization flag when doing polkit
Diffstat (limited to 'src/libsystemd')
-rw-r--r-- | src/libsystemd/sd-bus/bus-util.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/libsystemd/sd-bus/bus-util.c b/src/libsystemd/sd-bus/bus-util.c index 9018bcee5c..b8559e9826 100644 --- a/src/libsystemd/sd-bus/bus-util.c +++ b/src/libsystemd/sd-bus/bus-util.c @@ -212,13 +212,19 @@ int bus_verify_polkit( #ifdef ENABLE_POLKIT else { _cleanup_bus_message_unref_ sd_bus_message *reply = NULL; - int authorized = false, challenge = false; + int authorized = false, challenge = false, c; const char *sender; sender = sd_bus_message_get_sender(call); if (!sender) return -EBADMSG; + c = sd_bus_message_get_allow_interactive_authorization(call); + if (c < 0) + return c; + if (c > 0) + interactive = true; + r = sd_bus_call_method( call->bus, "org.freedesktop.PolicyKit1", @@ -231,7 +237,7 @@ int bus_verify_polkit( "system-bus-name", 1, "name", "s", sender, action, 0, - interactive ? 1 : 0, + !!interactive, ""); if (r < 0) { @@ -334,6 +340,7 @@ int bus_verify_polkit_async( const char *sender; sd_bus_message_handler_t callback; void *userdata; + int c; #endif int r; @@ -399,6 +406,12 @@ int bus_verify_polkit_async( if (!sender) return -EBADMSG; + c = sd_bus_message_get_allow_interactive_authorization(call); + if (c < 0) + return c; + if (c > 0) + interactive = true; + r = hashmap_ensure_allocated(registry, NULL); if (r < 0) return r; @@ -419,7 +432,7 @@ int bus_verify_polkit_async( "system-bus-name", 1, "name", "s", sender, action, 0, - interactive ? 1 : 0, + !!interactive, NULL); if (r < 0) return r; |