summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2023-03-28 23:12:32 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2023-03-29 10:28:37 +0200
commit6d6bd9251002d6fc767e1cb3beab1aeddcef08a9 (patch)
tree977fa5eed0e2e3320d51283ae98931a19fdfd599
parente6b3a6a2b6c18a62d025fe55a5fd57759c9e1a69 (diff)
downloadNetworkManager-6d6bd9251002d6fc767e1cb3beab1aeddcef08a9.tar.gz
core: also deactivate ACs that are not authorized yet
If we are deactivating active-connections for a specific settings-connection, also consider active-connections that are waiting for authorization. Otherwise, when the connection is deleted, a active-connection might still reference it.
-rw-r--r--src/core/nm-manager.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c
index 8285723739..d44e25c02c 100644
--- a/src/core/nm-manager.c
+++ b/src/core/nm-manager.c
@@ -5981,9 +5981,12 @@ fail:
void
nm_manager_deactivate_ac(NMManager *self, NMSettingsConnection *connection)
{
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE(self);
NMActiveConnection *ac;
const CList *tmp_list, *tmp_safe;
GError *error = NULL;
+ AsyncOpData *async_op_data;
+ AsyncOpData *async_op_data_safe;
nm_assert(NM_IS_SETTINGS_CONNECTION(connection));
@@ -6003,6 +6006,25 @@ nm_manager_deactivate_ac(NMManager *self, NMSettingsConnection *connection)
}
}
}
+
+ c_list_for_each_entry_safe (async_op_data,
+ async_op_data_safe,
+ &priv->async_op_lst_head,
+ async_op_lst) {
+ if (!NM_IN_SET(async_op_data->async_op_type,
+ ASYNC_OP_TYPE_AC_AUTH_ACTIVATE_INTERNAL,
+ ASYNC_OP_TYPE_AC_AUTH_ACTIVATE_USER,
+ ASYNC_OP_TYPE_AC_AUTH_ADD_AND_ACTIVATE,
+ ASYNC_OP_TYPE_AC_AUTH_ADD_AND_ACTIVATE2))
+ continue;
+
+ ac = async_op_data->ac_auth.active;
+ if (nm_active_connection_get_settings_connection(ac) == connection) {
+ nm_active_connection_set_state(ac,
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATED,
+ NM_ACTIVE_CONNECTION_STATE_REASON_CONNECTION_REMOVED);
+ }
+ }
}
/**