[gnome-keyring] [dbus] Allow unlocking even when always unlock is not available.



commit e43a24701767d1a8fd72f2f3ed01fe0937364b6d
Author: Stef Walter <stef memberwebs com>
Date:   Sun Mar 21 14:06:43 2010 +0000

    [dbus] Allow unlocking even when always unlock is not available.
    
    When the Always Unlock option could not work (due to a missing or
    locked login keyring) unlocking a keyring fail when that option
    was selected.
    
    Fixes bug #610998

 daemon/dbus/gkd-secret-unlock.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)
---
diff --git a/daemon/dbus/gkd-secret-unlock.c b/daemon/dbus/gkd-secret-unlock.c
index ee17fd1..52e4978 100644
--- a/daemon/dbus/gkd-secret-unlock.c
+++ b/daemon/dbus/gkd-secret-unlock.c
@@ -271,8 +271,9 @@ attach_credential_to_login (GP11Object *collection, GP11Object *cred)
 		egg_secure_free (value);
 
 	} else {
-		g_warning ("couldn't read unlock credentials to save in login keyring: %s",
-		           egg_error_message (error));
+		if (!g_error_matches (error, GP11_ERROR, CKR_USER_NOT_LOGGED_IN))
+			g_warning ("couldn't read unlock credentials to save in login keyring: %s",
+			           egg_error_message (error));
 		g_clear_error (&error);
 	}
 
@@ -295,6 +296,7 @@ authenticate_collection (GkdSecretUnlock *self, GP11Object *collection, gboolean
 	DBusError derr = DBUS_ERROR_INIT;
 	GkdSecretSecret *master;
 	GP11Attributes *template;
+	GP11Attribute *attr;
 	GP11Object *cred;
 	gboolean transient;
 
@@ -321,8 +323,12 @@ authenticate_collection (GkdSecretUnlock *self, GP11Object *collection, gboolean
 	gkd_prompt_get_unlock_options (GKD_PROMPT (self), template);
 
 	/* If it's supposed to save non-transient, then we override that */
-	if (!gp11_attributes_find_boolean (template, CKA_GNOME_TRANSIENT, &transient))
-		transient = TRUE;
+	attr = gp11_attributes_find (template, CKA_GNOME_TRANSIENT);
+	if (attr != NULL) {
+		transient = gp11_attribute_get_boolean (attr);
+		gp11_attribute_clear (attr);
+		gp11_attribute_init_boolean (attr, CKA_GNOME_TRANSIENT, TRUE);
+	}
 
 	cred = gkd_secret_session_create_credential (master->session, NULL, template, master, &derr);
 	gkd_secret_secret_free (master);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]