mirror of git://git.sysmocom.de/ofono
Use simpler error callbacks for GDBus security hooks
This commit is contained in:
parent
8ef8135a2a
commit
679f17303d
|
@ -58,7 +58,7 @@ typedef DBusMessage * (* GDBusMethodFunction) (DBusConnection *connection,
|
|||
typedef guint32 GDBusPendingReply;
|
||||
|
||||
typedef void (* GDBusSecurityFunction) (DBusConnection *connection,
|
||||
DBusMessage *message, GDBusPendingReply pending);
|
||||
GDBusPendingReply pending);
|
||||
|
||||
typedef enum {
|
||||
G_DBUS_METHOD_FLAG_DEPRECATED = (1 << 0),
|
||||
|
@ -116,7 +116,12 @@ gboolean g_dbus_unregister_security(const GDBusSecurityTable *security);
|
|||
void g_dbus_pending_success(DBusConnection *connection,
|
||||
GDBusPendingReply pending);
|
||||
void g_dbus_pending_error(DBusConnection *connection,
|
||||
GDBusPendingReply pending, DBusMessage *error);
|
||||
GDBusPendingReply pending,
|
||||
const char *name, const char *format, ...)
|
||||
__attribute__((format(printf, 4, 5)));
|
||||
void g_dbus_pending_error_valist(DBusConnection *connection,
|
||||
GDBusPendingReply pending, const char *name,
|
||||
const char *format, va_list args);
|
||||
|
||||
DBusMessage *g_dbus_create_error(DBusMessage *message, const char *name,
|
||||
const char *format, ...)
|
||||
|
|
|
@ -271,22 +271,26 @@ void g_dbus_pending_success(DBusConnection *connection,
|
|||
}
|
||||
}
|
||||
|
||||
void g_dbus_pending_error(DBusConnection *connection,
|
||||
GDBusPendingReply pending, DBusMessage *error)
|
||||
void g_dbus_pending_error_valist(DBusConnection *connection,
|
||||
GDBusPendingReply pending, const char *name,
|
||||
const char *format, va_list args)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
for (list = pending_security; list; list = list->next) {
|
||||
struct security_data *secdata = list->data;
|
||||
DBusMessage *reply;
|
||||
|
||||
if (secdata->pending != pending)
|
||||
continue;
|
||||
|
||||
pending_security = g_slist_remove(pending_security, secdata);
|
||||
|
||||
if (error != NULL) {
|
||||
dbus_connection_send(connection, error, NULL);
|
||||
dbus_message_unref(error);
|
||||
reply = g_dbus_create_error_valist(secdata->message,
|
||||
name, format, args);
|
||||
if (reply != NULL) {
|
||||
dbus_connection_send(connection, reply, NULL);
|
||||
dbus_message_unref(reply);
|
||||
}
|
||||
|
||||
dbus_message_unref(secdata->message);
|
||||
|
@ -295,6 +299,19 @@ void g_dbus_pending_error(DBusConnection *connection,
|
|||
}
|
||||
}
|
||||
|
||||
void g_dbus_pending_error(DBusConnection *connection,
|
||||
GDBusPendingReply pending,
|
||||
const char *name, const char *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start(args, format);
|
||||
|
||||
g_dbus_pending_error_valist(connection, pending, name, format, args);
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
static gboolean check_privilege(DBusConnection *conn, DBusMessage *msg,
|
||||
const GDBusMethodTable *method, void *iface_user_data)
|
||||
{
|
||||
|
@ -315,7 +332,7 @@ static gboolean check_privilege(DBusConnection *conn, DBusMessage *msg,
|
|||
|
||||
pending_security = g_slist_prepend(pending_security, secdata);
|
||||
|
||||
security->function(conn, secdata->message, secdata->pending);
|
||||
security->function(conn, secdata->pending);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue