diff -up upower-0.9.5/src/up-daemon.c.dbus-fixes upower-0.9.5/src/up-daemon.c --- upower-0.9.5/src/up-daemon.c.dbus-fixes 2010-07-08 03:50:24.000000000 -0400 +++ upower-0.9.5/src/up-daemon.c 2010-08-17 22:22:58.741257003 -0400 @@ -323,6 +323,7 @@ up_daemon_about_to_sleep (UpDaemon *daem UP_DAEMON_ERROR_GENERAL, "Sleep has already been requested and is pending"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -376,6 +377,7 @@ up_daemon_deferred_sleep_cb (UpDaemonDef "Failed to spawn: %s, stdout:%s, stderr:%s", error_local->message, stdout, stderr); g_error_free (error_local); dbus_g_method_return_error (sleep->context, error); + g_error_free (error); goto out; } @@ -470,6 +472,7 @@ up_daemon_suspend (UpDaemon *daemon, DBu UP_DAEMON_ERROR_GENERAL, "No kernel support"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -486,6 +489,7 @@ up_daemon_suspend (UpDaemon *daemon, DBu UP_DAEMON_ERROR_GENERAL, "Sleep has already been requested and is pending"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -507,13 +511,21 @@ up_daemon_suspend_allowed (UpDaemon *dae gboolean ret; PolkitSubject *subject = NULL; UpDaemonPrivate *priv = daemon->priv; + GError *error; subject = up_polkit_get_subject (priv->polkit, context); if (subject == NULL) goto out; - ret = up_polkit_is_allowed (priv->polkit, subject, "org.freedesktop.upower.suspend", context); - dbus_g_method_return (context, ret); + error = NULL; + ret = up_polkit_is_allowed (priv->polkit, subject, "org.freedesktop.upower.suspend", &error); + if (error) { + dbus_g_method_return_error (context, error); + g_error_free (error); + } + else { + dbus_g_method_return (context, ret); + } out: if (subject != NULL) @@ -563,6 +575,7 @@ up_daemon_hibernate (UpDaemon *daemon, D UP_DAEMON_ERROR_GENERAL, "No kernel support"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -572,6 +585,7 @@ up_daemon_hibernate (UpDaemon *daemon, D UP_DAEMON_ERROR_GENERAL, "Not enough swap space"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -582,6 +596,7 @@ up_daemon_hibernate (UpDaemon *daemon, D UP_DAEMON_ERROR_GENERAL, "Swap space is encrypted, use AllowHibernateEncryptedSwap to override"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -598,6 +613,7 @@ up_daemon_hibernate (UpDaemon *daemon, D UP_DAEMON_ERROR_GENERAL, "Sleep has already been requested and is pending"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -619,13 +635,21 @@ up_daemon_hibernate_allowed (UpDaemon *d gboolean ret; PolkitSubject *subject = NULL; UpDaemonPrivate *priv = daemon->priv; + GError *error; subject = up_polkit_get_subject (priv->polkit, context); if (subject == NULL) goto out; - ret = up_polkit_is_allowed (priv->polkit, subject, "org.freedesktop.upower.hibernate", context); - dbus_g_method_return (context, ret); + error = NULL; + ret = up_polkit_is_allowed (priv->polkit, subject, "org.freedesktop.upower.hibernate", &error); + if (error) { + dbus_g_method_return_error (context, error); + g_error_free (error); + } + else { + dbus_g_method_return (context, ret); + } out: if (subject != NULL) diff -up upower-0.9.5/src/up-polkit.c.dbus-fixes upower-0.9.5/src/up-polkit.c --- upower-0.9.5/src/up-polkit.c.dbus-fixes 2010-08-17 22:22:58.735257003 -0400 +++ upower-0.9.5/src/up-polkit.c 2010-08-17 22:23:40.437257006 -0400 @@ -52,12 +52,19 @@ static gpointer up_polkit_object = NULL; PolkitSubject * up_polkit_get_subject (UpPolkit *polkit, DBusGMethodInvocation *context) { + GError *error; const gchar *sender; PolkitSubject *subject; sender = dbus_g_method_get_sender (context); subject = polkit_system_bus_name_new (sender); + if (subject == NULL) { + error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "failed to get PolicyKit subject"); + dbus_g_method_return_error (context, error); + g_error_free (error); + } + return subject; } @@ -88,8 +95,8 @@ up_polkit_check_auth (UpPolkit *polkit, ret = TRUE; } else { error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "not authorized"); - dbus_g_method_return_error (context, error); - g_error_free (error); + dbus_g_method_return_error (context, error); + g_error_free (error); } out: if (result != NULL) @@ -101,10 +108,9 @@ out: * up_polkit_is_allowed: **/ gboolean -up_polkit_is_allowed (UpPolkit *polkit, PolkitSubject *subject, const gchar *action_id, DBusGMethodInvocation *context) +up_polkit_is_allowed (UpPolkit *polkit, PolkitSubject *subject, const gchar *action_id, GError **error) { gboolean ret = FALSE; - GError *error; GError *error_local; PolkitAuthorizationResult *result; @@ -112,10 +118,8 @@ up_polkit_is_allowed (UpPolkit *polkit, error_local = NULL; result = polkit_authority_check_authorization_sync (polkit->priv->authority, subject, action_id, NULL, POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE, NULL, &error_local); if (result == NULL) { - error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "failed to check authorisation: %s", error_local->message); - dbus_g_method_return_error (context, error); + g_set_error (error, UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "failed to check authorisation: %s", error_local->message); g_error_free (error_local); - g_error_free (error); goto out; } diff -up upower-0.9.5/src/up-polkit.h.dbus-fixes upower-0.9.5/src/up-polkit.h --- upower-0.9.5/src/up-polkit.h.dbus-fixes 2010-02-10 12:09:31.000000000 -0500 +++ upower-0.9.5/src/up-polkit.h 2010-08-17 22:22:58.746257003 -0400 @@ -56,11 +56,11 @@ PolkitSubject *up_polkit_get_subject (U gboolean up_polkit_check_auth (UpPolkit *polkit, PolkitSubject *subject, const gchar *action_id, - DBusGMethodInvocation *context); + DBusGMethodInvocation *context); gboolean up_polkit_is_allowed (UpPolkit *polkit, PolkitSubject *subject, const gchar *action_id, - DBusGMethodInvocation *context); + GError **error); gboolean up_polkit_get_uid (UpPolkit *polkit, PolkitSubject *subject, uid_t *uid); diff -up upower-0.9.5/src/up-qos.c.dbus-fixes upower-0.9.5/src/up-qos.c --- upower-0.9.5/src/up-qos.c.dbus-fixes 2010-06-05 11:45:18.000000000 -0400 +++ upower-0.9.5/src/up-qos.c 2010-08-17 22:22:58.748257003 -0400 @@ -262,6 +262,7 @@ up_qos_request_latency (UpQos *qos, cons if (type == UP_QOS_KIND_UNKNOWN) { error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "type invalid: %s", type_text); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -270,6 +271,7 @@ up_qos_request_latency (UpQos *qos, cons if (sender == NULL) { error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "no DBUS sender"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -291,6 +293,7 @@ up_qos_request_latency (UpQos *qos, cons if (!retval) { error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "cannot get UID"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -299,6 +302,7 @@ up_qos_request_latency (UpQos *qos, cons if (!retval) { error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "cannot get PID"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -307,6 +311,7 @@ up_qos_request_latency (UpQos *qos, cons if (cmdline == NULL) { error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "cannot get cmdline"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -359,6 +364,7 @@ up_qos_cancel_request (UpQos *qos, guint error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "Cannot find request for #%i", cookie); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -367,6 +373,7 @@ up_qos_cancel_request (UpQos *qos, guint if (sender == NULL) { error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "no DBUS sender"); dbus_g_method_return_error (context, error); + g_error_free (error); goto out; } @@ -388,6 +395,8 @@ up_qos_cancel_request (UpQos *qos, guint /* TODO: if persistent remove from datadase */ g_signal_emit (qos, signals [REQUESTS_CHANGED], 0); + + dbus_g_method_return (context, NULL); out: if (subject != NULL) g_object_unref (subject); @@ -430,6 +439,7 @@ up_qos_set_minimum_latency (UpQos *qos, if (type == UP_QOS_KIND_UNKNOWN) { error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "type invalid: %s", type_text); dbus_g_method_return_error (context, error); + g_error_free (error); return; }