summaryrefslogtreecommitdiff
path: root/src/libsystemd/sd-bus/bus-util.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-10-13 17:17:48 +0200
committerLennart Poettering <lennart@poettering.net>2014-10-13 17:19:31 +0200
commitb911eb15602ad173b1b938f351e2116789bd2c71 (patch)
tree2313889710b9f626a612fb4eaaf337eb78464c96 /src/libsystemd/sd-bus/bus-util.c
parent53a83f4bc037379b48a078b748287d333569ccfb (diff)
bus: check allow-interactive-auhtorization flag when doing polkit
Diffstat (limited to 'src/libsystemd/sd-bus/bus-util.c')
-rw-r--r--src/libsystemd/sd-bus/bus-util.c19
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;