[vinagre] Fix credential access with libsecret, bug 704744
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vinagre] Fix credential access with libsecret, bug 704744
- Date: Tue, 23 Jul 2013 19:55:14 +0000 (UTC)
commit 7b301aee94c6c6e62ef5afc0c3be88735f03ba0e
Author: David King <amigadave amigadave com>
Date: Tue Jul 23 20:50:34 2013 +0100
Fix credential access with libsecret, bug 704744
When storing attributes in libsecret, string attributes are not
permitted to have NULL values. The existing workaround for this was
wrong, as it removed the ability to store passwords for username-less
connections. Fix this by terminating the attribute list with a NULL
attribute, thus ending the list, if there is no username.
plugins/vnc/vinagre-vnc-tab.c | 6 +-----
vinagre/vinagre-tab.c | 14 ++++++++++----
2 files changed, 11 insertions(+), 9 deletions(-)
---
diff --git a/plugins/vnc/vinagre-vnc-tab.c b/plugins/vnc/vinagre-vnc-tab.c
index 7cae9f2..73a13b8 100644
--- a/plugins/vnc/vinagre-vnc-tab.c
+++ b/plugins/vnc/vinagre-vnc-tab.c
@@ -492,11 +492,7 @@ vnc_authentication_cb (VncDisplay *vnc, GValueArray *credList, VinagreVncTab *vn
if (need_password || need_username)
{
- /* libsecret does not support NULL attributes, bug 685041. */
- if (vinagre_connection_get_username (conn) != NULL)
- {
- vinagre_tab_find_credentials_in_keyring (tab, &username, &password);
- }
+ vinagre_tab_find_credentials_in_keyring (tab, &username, &password);
if ( (need_username && !username) || (need_password && !password) )
{
diff --git a/vinagre/vinagre-tab.c b/vinagre/vinagre-tab.c
index 2f06e0d..284e469 100644
--- a/vinagre/vinagre-tab.c
+++ b/vinagre/vinagre-tab.c
@@ -745,19 +745,21 @@ vinagre_tab_get_from_connection (VinagreConnection *conn)
gboolean
vinagre_tab_find_credentials_in_keyring (VinagreTab *tab, gchar **username, gchar **password)
{
+ const gchar *conn_user = vinagre_connection_get_username (tab->priv->conn);
*username = NULL;
+ /* "user" goes last, to terminate the attribute list if conn_user is NULL. */
*password = secret_password_lookup_sync (SECRET_SCHEMA_COMPAT_NETWORK, NULL, NULL,
- "user", vinagre_connection_get_username (tab->priv->conn),
"server", vinagre_connection_get_host (tab->priv->conn),
"protocol", vinagre_connection_get_protocol (tab->priv->conn),
"port", vinagre_connection_get_port (tab->priv->conn),
+ conn_user ? "user" : NULL, conn_user,
NULL);
if (*password == NULL)
return FALSE;
- *username = g_strdup (vinagre_connection_get_username (tab->priv->conn));
+ *username = g_strdup (conn_user);
return TRUE;
}
@@ -771,18 +773,20 @@ vinagre_tab_save_credentials_in_keyring (VinagreTab *tab)
{
GError *error = NULL;
gchar *label;
+ const gchar *conn_user = vinagre_connection_get_username (tab->priv->conn);
if (!tab->priv->save_credentials)
return;
label = g_strdup_printf (_("Remote desktop password: %s"), vinagre_connection_get_host (tab->priv->conn));
+ /* "user" goes last, to terminate the attribute list if conn_user is NULL. */
secret_password_store_sync (SECRET_SCHEMA_COMPAT_NETWORK, NULL,
label, vinagre_connection_get_password (tab->priv->conn),
NULL, &error,
- "user", vinagre_connection_get_username (tab->priv->conn),
"server", vinagre_connection_get_host (tab->priv->conn),
"protocol", vinagre_connection_get_protocol (tab->priv->conn),
"port", vinagre_connection_get_port (tab->priv->conn),
+ conn_user ? "user" : NULL, conn_user,
NULL);
g_free (label);
@@ -803,11 +807,13 @@ void vinagre_tab_remove_credentials_from_keyring (VinagreTab *tab)
{
if (tab->priv->saved_credentials)
{
+ /* Put "user" last, to terminate the attributes if conn_user is NULL. */
+ const gchar *conn_user = vinagre_connection_get_username (tab->priv->conn);
secret_password_clear_sync (SECRET_SCHEMA_COMPAT_NETWORK, NULL, NULL,
- "user", vinagre_connection_get_username (tab->priv->conn),
"server", vinagre_connection_get_host (tab->priv->conn),
"protocol", vinagre_connection_get_protocol (tab->priv->conn),
"port", vinagre_connection_get_port (tab->priv->conn),
+ conn_user ? "user" : NULL, conn_user,
NULL);
tab->priv->saved_credentials = FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]