typedef guint32 GDBusPendingReply;
typedef void (* GDBusSecurityFunction) (DBusConnection *connection,
+ const char *action,
+ gboolean interaction,
GDBusPendingReply pending);
typedef enum {
G_DBUS_PROPERTY_FLAG_DEPRECATED = (1 << 0),
} GDBusPropertyFlags;
+typedef enum {
+ G_DBUS_SECURITY_FLAG_DEPRECATED = (1 << 0),
+ G_DBUS_SECURITY_FLAG_BUILTIN = (1 << 1),
+ G_DBUS_SECURITY_FLAG_ALLOW_INTERACTION = (1 << 2),
+} GDBusSecurityFlags;
+
typedef struct {
const char *name;
const char *signature;
typedef struct {
unsigned int privilege;
+ const char *action;
+ GDBusSecurityFlags flags;
GDBusSecurityFunction function;
} GDBusSecurityTable;
{
const GDBusSecurityTable *security;
- for (security = security_table; security && security->function &&
- security->privilege; security++) {
+ for (security = security_table; security && security->privilege;
+ security++) {
struct security_data *secdata;
+ gboolean interaction;
if (security->privilege != method->privilege)
continue;
pending_security = g_slist_prepend(pending_security, secdata);
- security->function(conn, secdata->pending);
+ if (security->flags & G_DBUS_SECURITY_FLAG_ALLOW_INTERACTION)
+ interaction = TRUE;
+ else
+ interaction = FALSE;
+
+ if (security->function)
+ security->function(conn, security->action,
+ interaction, secdata->pending);
return TRUE;
}