diff options
Diffstat (limited to 'src/nm-auth-manager.c')
| -rw-r--r-- | src/nm-auth-manager.c | 66 |
1 files changed, 25 insertions, 41 deletions
diff --git a/src/nm-auth-manager.c b/src/nm-auth-manager.c index 09a5791f..bc519eb1 100644 --- a/src/nm-auth-manager.c +++ b/src/nm-auth-manager.c @@ -22,8 +22,10 @@ #include "nm-auth-manager.h" -#include "nm-logging.h" +#include "nm-default.h" #include "nm-errors.h" +#include "nm-core-internal.h" +#include "NetworkManagerUtils.h" #define POLKIT_SERVICE "org.freedesktop.PolicyKit1" #define POLKIT_OBJECT_PATH "/org/freedesktop/PolicyKit1/Authority" @@ -70,7 +72,7 @@ typedef struct { #endif } NMAuthManagerPrivate; -static NMAuthManager *singleton_instance = NULL; +NM_DEFINE_SINGLETON_REGISTER (NMAuthManager); G_DEFINE_TYPE (NMAuthManager, nm_auth_manager, G_TYPE_OBJECT) @@ -145,6 +147,7 @@ cancel_check_authorization_cb (GDBusProxy *proxy, value = g_dbus_proxy_call_finish (proxy, res, &error); if (value == NULL) { + g_dbus_error_strip_remote_error (error); _LOGD ("Error cancelling authorization check: %s", error->message); g_error_free (error); } else @@ -169,12 +172,11 @@ check_authorization_cb (GDBusProxy *proxy, GVariant *value; GError *error = NULL; - value = g_dbus_proxy_call_finish (proxy, res, &error); + value = _nm_dbus_proxy_call_finish (proxy, res, G_VARIANT_TYPE ("((bba{ss}))"), &error); if (value == NULL) { if (data->cancellation_id != NULL && - (!g_dbus_error_is_remote_error (error) && - error->domain == G_IO_ERROR && - error->code == G_IO_ERROR_CANCELLED)) { + ( g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) + && !g_dbus_error_is_remote_error (error))) { _LOGD ("call[%u]: CheckAuthorization cancelled", data->call_id); g_dbus_proxy_call (priv->proxy, "CancelCheckAuthorization", @@ -186,6 +188,7 @@ check_authorization_cb (GDBusProxy *proxy, g_object_ref (self)); } else _LOGD ("call[%u]: CheckAuthorization failed: %s", data->call_id, error->message); + g_dbus_error_strip_remote_error (error); g_simple_async_result_set_error (data->simple, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED, @@ -193,18 +196,15 @@ check_authorization_cb (GDBusProxy *proxy, error->message); g_error_free (error); } else { - GVariant *result_value; CheckAuthorizationResult *result; result = g_new0 (CheckAuthorizationResult, 1); - result_value = g_variant_get_child_value (value, 0); - g_variant_get (result_value, - "(bb@a{ss})", + g_variant_get (value, + "((bb@a{ss}))", &result->is_authorized, &result->is_challenge, NULL); - g_variant_unref (result_value); g_variant_unref (value); _LOGD ("call[%u]: CheckAuthorization succeeded: (is_authorized=%d, is_challenge=%d)", data->call_id, result->is_authorized, result->is_challenge); @@ -387,21 +387,16 @@ _dbus_on_name_owner_notify_cb (GObject *object, } static void -_dbus_on_g_signal_cb (GDBusProxy *proxy, - const gchar *sender_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data) +_dbus_on_changed_signal_cb (GDBusProxy *proxy, + gpointer user_data) { NMAuthManager *self = user_data; NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (self); g_return_if_fail (priv->proxy == proxy); - _LOGD ("dbus signal: \"%s\"", signal_name ? signal_name : "(null)"); - - if (g_strcmp0 (signal_name, "Changed") == 0) - _emit_changed_signal (self); + _LOGD ("dbus signal: \"Changed\""); + _emit_changed_signal (self); } static void @@ -456,10 +451,9 @@ _dbus_new_proxy_cb (GObject *source_object, "notify::g-name-owner", G_CALLBACK (_dbus_on_name_owner_notify_cb), self); - g_signal_connect (priv->proxy, - "g-signal", - G_CALLBACK (_dbus_on_g_signal_cb), - self); + _nm_dbus_signal_connect (priv->proxy, "Changed", NULL, + G_CALLBACK (_dbus_on_changed_signal_cb), + self); _log_name_owner (self, NULL); @@ -496,7 +490,12 @@ nm_auth_manager_setup (gboolean polkit_enabled) NULL); _LOGD ("set instance"); - return (singleton_instance = self); + singleton_instance = self; + nm_singleton_instance_register (); + + nm_log_dbg (LOGD_CORE, "setup %s singleton (%p)", "NMAuthManager", singleton_instance); + + return self; } /*****************************************************************************/ @@ -594,8 +593,7 @@ dispose (GObject *object) } if (priv->proxy) { - g_signal_handlers_disconnect_by_func (priv->proxy, _dbus_on_name_owner_notify_cb, self); - g_signal_handlers_disconnect_by_func (priv->proxy, _dbus_on_g_signal_cb, self); + g_signal_handlers_disconnect_by_data (priv->proxy, self); g_clear_object (&priv->proxy); } #endif @@ -604,19 +602,6 @@ dispose (GObject *object) } static void -finalize (GObject *object) -{ - NMAuthManager* self = NM_AUTH_MANAGER (object); - - G_OBJECT_CLASS (nm_auth_manager_parent_class)->finalize (object); - - if (self == singleton_instance) { - singleton_instance = NULL; - _LOGD ("unset instance"); - } -} - -static void nm_auth_manager_class_init (NMAuthManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -627,7 +612,6 @@ nm_auth_manager_class_init (NMAuthManagerClass *klass) object_class->set_property = set_property; object_class->constructed = constructed; object_class->dispose = dispose; - object_class->finalize = finalize; g_object_class_install_property (object_class, PROP_POLKIT_ENABLED, |