summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Berg <bberg@redhat.com>2021-12-09 17:59:59 +0100
committerRobert Ancell <robert.ancell@canonical.com>2022-05-27 10:44:37 +1200
commit393528f5807d3bc24719e31023db0568f32a2438 (patch)
treee05cc040176ef6c2a9026237e6ec4d7e21558a62
parente8650a56103fc491faf06b86aa73f04ff01f438f (diff)
downloadgnome-control-center-393528f5807d3bc24719e31023db0568f32a2438.tar.gz
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 the temporary connection is destroyed. Closes: #337
-rw-r--r--panels/network/connection-editor/ce-page-8021x-security.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/panels/network/connection-editor/ce-page-8021x-security.c b/panels/network/connection-editor/ce-page-8021x-security.c
index 1e4f1464a..cb60ca930 100644
--- a/panels/network/connection-editor/ce-page-8021x-security.c
+++ b/panels/network/connection-editor/ce-page-8021x-security.c
@@ -125,22 +125,18 @@ ce_page_8021x_security_validate (CEPage *cepage, NMConnection *connection, GErro
valid = wireless_security_validate (WIRELESS_SECURITY (self->security), error);
if (valid) {
g_autoptr(NMConnection) tmp_connection = NULL;
- 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_wpa_eap_fill_connection (self->security, 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)));
}
} else {
nm_connection_remove_setting (connection, NM_TYPE_SETTING_802_1X);