From 4269c292020aa11d7b8e17e804ad207e892d2bfe Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Thu, 9 Dec 2021 17:53:09 +0100 Subject: [PATCH 8/8] network: Fix saving passwords for non-wifi connections When validating security settings for non-wifi connections, we temporarily create a wireless connection. Unfortunately, when this connection is destroyed, it'll clear the stored password from the 802.1x settings object. Avoid this by removing the setting before unref'ing the temporary connection. --- .../connection-editor/ce-page-8021x-security.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/panels/network/connection-editor/ce-page-8021x-security.c b/panels/network/connection-editor/ce-page-8021x-security.c index f7d31969a..0ac057f79 100644 --- a/panels/network/connection-editor/ce-page-8021x-security.c +++ b/panels/network/connection-editor/ce-page-8021x-security.c @@ -126,22 +126,17 @@ validate (CEPage *cepage, NMConnection *connection, GError **error) /* FIXME: get failed property and error out of wireless security objects */ valid = wireless_security_validate (page->security, error); if (valid) { - NMSetting *s_con; - /* Here's a nice hack to work around the fact that ws_802_1x_fill_connection needs wireless setting. */ - tmp_connection = nm_simple_connection_new (); + tmp_connection = nm_simple_connection_new_clone (connection); nm_connection_add_setting (tmp_connection, nm_setting_wireless_new ()); - /* temp connection needs a 'connection' setting too, since most of - * the EAP methods need the UUID for CA cert ignore stuff. - */ - s_con = nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION); - nm_connection_add_setting (tmp_connection, nm_setting_duplicate (s_con)); - ws_802_1x_fill_connection (page->security, "wpa_eap_auth_combo", tmp_connection); + /* NOTE: It is important we create a copy of the settings, as the + * secrets might be cleared otherwise. + */ s_8021x = nm_connection_get_setting (tmp_connection, NM_TYPE_SETTING_802_1X); - nm_connection_add_setting (connection, NM_SETTING (g_object_ref (s_8021x))); + nm_connection_add_setting (connection, nm_setting_duplicate (NM_SETTING (s_8021x))); g_object_unref (tmp_connection); } -- 2.34.1