From 240a9a92ae28ee3e794567d3bf00f1d7b365fa0d Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 3 Sep 2014 17:12:32 -0500 Subject: [PATCH 1/2] tui: fix requesting and displaying secrets nmt_sync_op_complete_pointer() completes the operation after the caller of this function returns. This means that any values passed to this function must either be allocated from its caller, or referenced by the caller. nm_remote_connection_get_secrets() owns the 'secrets' hash passed to the callback, and it is destroyed when the callback returns. So nmtui's got_secrets() must copy the hash to ensure the data sticks around for nmt_sync_op_wait_pointer() later. --- clients/tui/nmt-editor.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/clients/tui/nmt-editor.c b/clients/tui/nmt-editor.c index f8b4c6d25b..a69b762dec 100644 --- a/clients/tui/nmt-editor.c +++ b/clients/tui/nmt-editor.c @@ -171,7 +171,19 @@ got_secrets (NMRemoteConnection *connection, GError *error, gpointer op) { - nmt_sync_op_complete_pointer (op, secrets, error); + GHashTable *copy = NULL, *setting; + GHashTableIter iter; + const char *name; + + if (secrets) { + /* 'secrets' is owned by the caller so we must copy it */ + copy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_hash_table_destroy); + g_hash_table_iter_init (&iter, secrets); + while (g_hash_table_iter_next (&iter, (gpointer) &name, (gpointer) &setting)) + g_hash_table_insert (copy, g_strdup (name), nm_utils_gvalue_hash_dup (setting)); + } + + nmt_sync_op_complete_pointer (op, copy, error); } static NMConnection * @@ -196,8 +208,10 @@ build_edit_connection (NMConnection *orig_connection) setting_name, got_secrets, &op); /* FIXME: error handling */ secrets = nmt_sync_op_wait_pointer (&op, NULL); - if (secrets) + if (secrets) { (void) nm_connection_update_secrets (edit_connection, setting_name, secrets, NULL); + g_hash_table_unref (secrets); + } } g_hash_table_unref (settings); From 82b0ea87075144650979d344f34c09c7111c4a4e Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 3 Sep 2014 17:43:25 -0500 Subject: [PATCH 2/2] tui: fix updating of NmtPasswordFields passwords (bgo #733002) The actual entry is a sub-widget, and was getting updated when the user changed the password, but those changes were not being propagated to the NmtPasswordFields object's 'password' property. https://bugzilla.gnome.org/show_bug.cgi?id=733002 --- clients/tui/nmt-password-fields.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/clients/tui/nmt-password-fields.c b/clients/tui/nmt-password-fields.c index 8fba33fd97..7ef037b9de 100644 --- a/clients/tui/nmt-password-fields.c +++ b/clients/tui/nmt-password-fields.c @@ -156,6 +156,10 @@ nmt_password_fields_constructed (GObject *object) } else g_clear_object (&priv->show_password); + g_object_bind_property (priv->entry, "text", + object, "password", + G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); + G_OBJECT_CLASS (nmt_password_fields_parent_class)->constructed (object); }