From b31a873fb3bd1b67af9f7cc88bf44f8b5a941cec Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Tue, 4 Nov 2014 11:54:00 +0000 Subject: [PATCH] GDBus: Add new call flag to allow interactive authorization DBus has recently introduced new message flag DBUS_HEADER_FLAG_ALLOW_INTERACTIVE_AUTHORIZATION, which tells that caller is willing to wait for unspecified amount of time for the call to return, as the service may perform interactive authorization (e.g. using polkit). https://bugzilla.gnome.org/show_bug.cgi?id=739616 --- gio/gdbusconnection.c | 8 +++++++- gio/gioenums.h | 11 +++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c index 446556295..d50e4c71e 100644 --- a/gio/gdbusconnection.c +++ b/gio/gdbusconnection.c @@ -5265,8 +5265,14 @@ static void add_call_flags (GDBusMessage *message, GDBusCallFlags flags) { + GDBusMessageFlags msg_flags = 0; + if (flags & G_DBUS_CALL_FLAGS_NO_AUTO_START) - g_dbus_message_set_flags (message, G_DBUS_MESSAGE_FLAGS_NO_AUTO_START); + msg_flags |= G_DBUS_MESSAGE_FLAGS_NO_AUTO_START; + if (flags & G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION) + msg_flags |= G_DBUS_MESSAGE_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION; + if (msg_flags) + g_dbus_message_set_flags (message, msg_flags); } static GVariant * diff --git a/gio/gioenums.h b/gio/gioenums.h index 55a70b174..24e7d6537 100644 --- a/gio/gioenums.h +++ b/gio/gioenums.h @@ -1212,6 +1212,8 @@ typedef enum { * @G_DBUS_CALL_FLAGS_NO_AUTO_START: The bus must not launch * an owner for the destination name in response to this method * invocation. + * @G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION: the caller is prepared to + * wait for interactive authorization. Since 2.46. * * Flags used in g_dbus_connection_call() and similar APIs. * @@ -1219,7 +1221,8 @@ typedef enum { */ typedef enum { G_DBUS_CALL_FLAGS_NONE = 0, - G_DBUS_CALL_FLAGS_NO_AUTO_START = (1<<0) + G_DBUS_CALL_FLAGS_NO_AUTO_START = (1<<0), + G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION = (1<<1) } GDBusCallFlags; /* (1<<31) is reserved for internal use by GDBusConnection, do not use it. */ @@ -1249,6 +1252,9 @@ typedef enum { * @G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED: A reply is not expected. * @G_DBUS_MESSAGE_FLAGS_NO_AUTO_START: The bus must not launch an * owner for the destination name in response to this message. + * @G_DBUS_MESSAGE_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION: If set on a method + * call, this flag means that the caller is prepared to wait for interactive + * authorization. Since 2.46. * * Message flags used in #GDBusMessage. * @@ -1257,7 +1263,8 @@ typedef enum { typedef enum { G_DBUS_MESSAGE_FLAGS_NONE = 0, G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED = (1<<0), - G_DBUS_MESSAGE_FLAGS_NO_AUTO_START = (1<<1) + G_DBUS_MESSAGE_FLAGS_NO_AUTO_START = (1<<1), + G_DBUS_MESSAGE_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION = (1<<2) } GDBusMessageFlags; /**