mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-05 13:30:28 +01:00
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.
This commit is contained in:
parent
e7f01ae590
commit
240a9a92ae
1 changed files with 16 additions and 2 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue