From e43a24701767d1a8fd72f2f3ed01fe0937364b6d Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Sun, 21 Mar 2010 14:06:43 +0000 Subject: [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 --- 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); -- cgit v0.8.3.1