From 6e1c10d31bc0da2bfb22a0ca5f1826c3a755bf13 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 25 Sep 2007 07:06:28 +0000 Subject: [PATCH] 2007-09-25 Dan Williams Ensure that old activation requests are forgotten about; previously hitting Cancel in the password dialog would deactivate whatever device that password was requested for, even if that wasn't the currently activating connection. * src/nm-manager.c src/nm-manager.h - (nm_manager_get_connection_secrets): track the pending call object so it can be canceled later if needed - (nm_manager_cancel_get_connection_secrets): cancel a pending GetSecrets call for a particular connection * src/nm-activation-request.c - (dispose): cancel any outstanding GetSecrets calls on the connection git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@2874 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 18 +++++++++++++++ src/nm-activation-request.c | 8 ++++++- src/nm-manager.c | 45 ++++++++++++++++++++++++++++++------- src/nm-manager.h | 3 +++ 4 files changed, 65 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index e9316e5b57..ab85d21c27 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2007-09-25 Dan Williams + + Ensure that old activation requests are forgotten about; previously + hitting Cancel in the password dialog would deactivate whatever device + that password was requested for, even if that wasn't the currently + activating connection. + + * src/nm-manager.c + src/nm-manager.h + - (nm_manager_get_connection_secrets): track the pending call + object so it can be canceled later if needed + - (nm_manager_cancel_get_connection_secrets): cancel a pending + GetSecrets call for a particular connection + + * src/nm-activation-request.c + - (dispose): cancel any outstanding GetSecrets calls on the + connection + 2007-09-25 Dan Williams * src/NetworkManagerPolicy.c diff --git a/src/nm-activation-request.c b/src/nm-activation-request.c index 66504bafe8..57e786f2b0 100644 --- a/src/nm-activation-request.c +++ b/src/nm-activation-request.c @@ -98,8 +98,14 @@ dispose (GObject *object) priv->secrets_updated_id = 0; } - if (priv->connection) + if (priv->connection) { + NMManager *manager = nm_manager_get (); + + nm_manager_cancel_get_connection_secrets (manager, priv->connection); + g_object_unref (manager); + g_object_unref (priv->connection); + } } static void diff --git a/src/nm-manager.c b/src/nm-manager.c index 77861496fc..26768ece59 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -62,6 +62,7 @@ enum { }; #define CONNECTION_PROXY_TAG "dbus-proxy" +#define CONNECTION_GET_SECRETS_CALL_TAG "get-secrets-call" static void nm_manager_init (NMManager *manager) @@ -1027,6 +1028,8 @@ get_secrets_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data) g_return_if_fail (info->setting_name); g_return_if_fail (info->device); + g_object_set_data (G_OBJECT (info->connection), CONNECTION_GET_SECRETS_CALL_TAG, NULL); + if (!dbus_g_proxy_end_call (proxy, call, &err, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &secrets, G_TYPE_INVALID)) { @@ -1055,6 +1058,7 @@ nm_manager_get_connection_secrets (NMManager *manager, { DBusGProxy *proxy; GetSecretsInfo *info = NULL; + DBusGProxyCall *call; g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE); g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE); @@ -1081,17 +1085,20 @@ nm_manager_get_connection_secrets (NMManager *manager, info->manager = manager; info->device = g_object_ref (device); - if (!dbus_g_proxy_begin_call_with_timeout (proxy, "GetSecrets", - get_secrets_cb, - info, - free_get_secrets_info, - G_MAXINT32, - G_TYPE_STRING, setting_name, - G_TYPE_BOOLEAN, request_new, - G_TYPE_INVALID)) { + call = dbus_g_proxy_begin_call_with_timeout (proxy, "GetSecrets", + get_secrets_cb, + info, + free_get_secrets_info, + G_MAXINT32, + G_TYPE_STRING, setting_name, + G_TYPE_BOOLEAN, request_new, + G_TYPE_INVALID); + if (!call) { nm_warning ("Could not call GetSecrets"); goto error; } + + g_object_set_data (G_OBJECT (connection), CONNECTION_GET_SECRETS_CALL_TAG, call); return TRUE; error: @@ -1100,3 +1107,25 @@ error: return FALSE; } +void +nm_manager_cancel_get_connection_secrets (NMManager *manager, + NMConnection *connection) +{ + DBusGProxyCall *call; + DBusGProxy *proxy; + + g_return_if_fail (NM_IS_MANAGER (manager)); + g_return_if_fail (NM_IS_CONNECTION (connection)); + + proxy = g_object_get_data (G_OBJECT (connection), CONNECTION_PROXY_TAG); + if (!DBUS_IS_G_PROXY (proxy)) + return; + + call = g_object_get_data (G_OBJECT (connection), CONNECTION_GET_SECRETS_CALL_TAG); + if (!call) + return; + + dbus_g_proxy_cancel_call (proxy, call); + g_object_set_data (G_OBJECT (connection), CONNECTION_GET_SECRETS_CALL_TAG, NULL); +} + diff --git a/src/nm-manager.h b/src/nm-manager.h index 6f3b8e14b0..81d41dc91c 100644 --- a/src/nm-manager.h +++ b/src/nm-manager.h @@ -83,4 +83,7 @@ gboolean nm_manager_get_connection_secrets (NMManager *manager, const char * setting_name, gboolean request_new); +void nm_manager_cancel_get_connection_secrets (NMManager *manager, + NMConnection *connection); + #endif /* NM_MANAGER_H */