chiark / gitweb /
journald: increase max file size to 128MB
[elogind.git] / src / polkit.c
index 5b67480fe5d295067a9f5061b8abc41d913a4efe..3acbdc6135aa5adf313ad2924eadf15bca963ef9 100644 (file)
@@ -82,6 +82,7 @@ int verify_polkit(
                 DBusMessage *request,
                 const char *action,
                 bool interactive,
+                bool *_challenge,
                 DBusError *error) {
 
         DBusMessage *m = NULL, *reply = NULL;
@@ -94,7 +95,7 @@ int verify_polkit(
         uint64_t starttime_u64;
         DBusMessageIter iter_msg, iter_struct, iter_array, iter_dict, iter_variant;
         int r;
-        dbus_bool_t authorized = FALSE;
+        dbus_bool_t authorized = FALSE, challenge = FALSE;
 
         assert(c);
         assert(request);
@@ -176,7 +177,21 @@ int verify_polkit(
 
         dbus_message_iter_get_basic(&iter_struct, &authorized);
 
-        r = authorized ? 0 : -EPERM;
+        if (!dbus_message_iter_next(&iter_struct) ||
+            dbus_message_iter_get_arg_type(&iter_struct) != DBUS_TYPE_BOOLEAN) {
+                r = -EIO;
+                goto finish;
+        }
+
+        dbus_message_iter_get_basic(&iter_struct, &challenge);
+
+        if (authorized)
+                r = 1;
+        else if (_challenge) {
+                *_challenge = !!challenge;
+                r = 0;
+        } else
+                r = -EPERM;
 
 finish: