diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2023-03-28 23:12:32 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2023-03-29 10:28:37 +0200 |
commit | 6d6bd9251002d6fc767e1cb3beab1aeddcef08a9 (patch) | |
tree | 977fa5eed0e2e3320d51283ae98931a19fdfd599 | |
parent | e6b3a6a2b6c18a62d025fe55a5fd57759c9e1a69 (diff) | |
download | NetworkManager-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.c | 22 |
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); + } + } } /** |