[gnome-keyring] dbus: Fix changing keyring password
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-keyring] dbus: Fix changing keyring password
- Date: Thu, 8 Mar 2012 20:46:05 +0000 (UTC)
commit 97b5a0d2f3602e2472a0a8231439d7aade907367
Author: Stef Walter <stefw gnome org>
Date: Thu Mar 8 21:40:33 2012 +0100
dbus: Fix changing keyring password
* Fix various code paths during prompting for changing password
* Regression due to prompting changes.
https://bugzilla.gnome.org/show_bug.cgi?id=671441
daemon/dbus/gkd-secret-change.c | 17 +++++++++++------
1 files changed, 11 insertions(+), 6 deletions(-)
---
diff --git a/daemon/dbus/gkd-secret-change.c b/daemon/dbus/gkd-secret-change.c
index c2a9263..54ec4c5 100644
--- a/daemon/dbus/gkd-secret-change.c
+++ b/daemon/dbus/gkd-secret-change.c
@@ -62,7 +62,7 @@ struct _GkdSecretChangeClass {
static void perform_prompting (GkdSecretChange *self,
GckObject *collection);
-G_DEFINE_TYPE (GkdSecretChange, gkd_secret_change, GCR_TYPE_SYSTEM_PROMPT);
+G_DEFINE_TYPE (GkdSecretChange, gkd_secret_change, GKD_SECRET_TYPE_PROMPT);
static void
setup_original_prompt (GkdSecretChange *self,
@@ -174,6 +174,13 @@ on_prompt_original_complete (GObject *source,
return;
}
+ /* The prompt was cancelled */
+ original = gkd_secret_prompt_take_secret (prompt);
+ if (original == NULL) {
+ gkd_secret_prompt_dismiss (prompt);
+ return;
+ }
+
collection = gkd_secret_prompt_lookup_collection (prompt, self->collection_path);
if (collection != NULL) {
gck_builder_add_ulong (&builder, CKA_CLASS, CKO_G_CREDENTIAL);
@@ -181,7 +188,6 @@ on_prompt_original_complete (GObject *source,
gck_builder_add_ulong (&builder, CKA_G_OBJECT, gck_object_get_handle (collection));
attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
- original = gkd_secret_prompt_take_secret (prompt);
/* Create the original credential, in order to make sure we can unlock the collection */
cred = gkd_secret_session_create_credential (original->session,
@@ -189,7 +195,6 @@ on_prompt_original_complete (GObject *source,
original, &error);
gck_attributes_unref (attrs);
- gkd_secret_secret_free (original);
/* The unlock failed because password was bad */
if (g_error_matches (error, GCK_ERROR, CKR_PIN_INCORRECT)) {
@@ -214,6 +219,7 @@ on_prompt_original_complete (GObject *source,
if (continue_prompting)
perform_prompting (self, collection);
+ gkd_secret_secret_free (original);
g_clear_object (&cred);
g_clear_object (&collection);
}
@@ -290,7 +296,7 @@ perform_prompting (GkdSecretChange *self,
gkd_secret_prompt_dismiss (prompt);
/* Get the original password and unlock */
- } else if (self->unlocked) {
+ } else if (!self->unlocked) {
setup_original_prompt (self, collection);
gcr_prompt_password_async (GCR_PROMPT (self),
gkd_secret_prompt_get_cancellable (prompt),
@@ -320,8 +326,6 @@ perform_prompting (GkdSecretChange *self,
gkd_secret_prompt_dismiss_with_error (prompt, error);
g_error_free (error);
}
-
- g_object_unref (collection);
}
static void
@@ -474,6 +478,7 @@ gkd_secret_change_with_secrets (GckObject *collection,
goto cleanup;
}
+ gck_builder_clear (&builder);
gck_builder_add_ulong (&builder, CKA_G_CREDENTIAL, gck_object_get_handle (mcred));
/* Now set the collection credentials to the first one */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]