summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2018-12-05 11:46:45 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2018-12-12 17:05:30 +0100
commit1376635448945e4dadef0d68c63c962fa64325b8 (patch)
treee6f7a5dfe75cdaab67ede557a439223f3a69fe23
parentb6259f70564cb99e4ee6bf4b49a427898caf7328 (diff)
downloadNetworkManager-bg/issue82.tar.gz
settings: apply agent-owned secrets from the new connection on updatebg/issue82
When updating a connection passing agent-owned secret, they are lost from @reread_connection after the settings-plugin persists the connection. Therefore we need to cache and reapply them separately to the connection so that they can be saved to secret agents later. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/82
-rw-r--r--src/settings/nm-settings-connection.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c
index 912949a28a..392823f399 100644
--- a/src/settings/nm-settings-connection.c
+++ b/src/settings/nm-settings-connection.c
@@ -640,7 +640,9 @@ nm_settings_connection_update (NMSettingsConnection *self,
gboolean replaced = FALSE;
gs_free char *logmsg_change = NULL;
GError *local = NULL;
+ gs_unref_object NMConnection *simple = NULL;
gs_unref_variant GVariant *con_agent_secrets = NULL;
+ gs_unref_variant GVariant *new_agent_secrets = NULL;
g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (self), FALSE);
@@ -681,6 +683,16 @@ nm_settings_connection_update (NMSettingsConnection *self,
replace_connection = reread_connection ?: new_connection;
+ /* Save agent-owned secrets from the new connection for later use */
+ if (new_connection) {
+ simple = nm_simple_connection_new_clone (new_connection);
+ nm_connection_clear_secrets_with_flags (simple,
+ secrets_filter_cb,
+ GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED));
+ new_agent_secrets = nm_connection_to_dbus (simple, NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
+ g_clear_object (&simple);
+ }
+
/* Disconnect the changed signal to ensure we don't set Unsaved when
* it's not required.
*/
@@ -691,7 +703,6 @@ nm_settings_connection_update (NMSettingsConnection *self,
&& !nm_connection_compare (nm_settings_connection_get_connection (self),
replace_connection,
NM_SETTING_COMPARE_FLAG_EXACT)) {
- gs_unref_object NMConnection *simple = NULL;
if (log_diff_name) {
nm_utils_log_connection_diff (replace_connection, nm_settings_connection_get_connection (self), LOGL_DEBUG, LOGD_CORE, log_diff_name, "++ ",
@@ -738,6 +749,15 @@ nm_settings_connection_update (NMSettingsConnection *self,
(void) nm_connection_update_secrets (nm_settings_connection_get_connection (self), NULL, con_agent_secrets, NULL);
}
+ /* Apply agent-owned secrets from the new connection so that
+ * they can be sent to agents */
+ if (new_agent_secrets) {
+ (void) nm_connection_update_secrets (nm_settings_connection_get_connection (self),
+ NULL,
+ new_agent_secrets,
+ NULL);
+ }
+
nm_settings_connection_recheck_visibility (self);
if ( replaced