diff options
-rw-r--r-- | src/devices/nm-device.c | 24 | ||||
-rw-r--r-- | src/devices/nm-device.h | 3 | ||||
-rw-r--r-- | src/nm-active-connection.c | 10 |
3 files changed, 32 insertions, 5 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index d7635dcfac..b27e1ff180 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -9099,10 +9099,12 @@ check_and_reapply_connection (NMDevice *self, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, &diffs); - if (diffs && nm_audit_manager_audit_enabled (nm_audit_manager_get ())) - *audit_args = nm_utils_format_con_diff_for_audit (diffs); - else - *audit_args = NULL; + if (audit_args) { + if (diffs && nm_audit_manager_audit_enabled (nm_audit_manager_get ())) + *audit_args = nm_utils_format_con_diff_for_audit (diffs); + else + *audit_args = NULL; + } /************************************************************************** * check for unsupported changes and reject to reapply @@ -9204,6 +9206,20 @@ check_and_reapply_connection (NMDevice *self, return TRUE; } +gboolean +nm_device_reapply (NMDevice *self, + NMConnection *connection, + GError **error) +{ + g_return_val_if_fail (NM_IS_DEVICE (self), FALSE); + + return check_and_reapply_connection (self, + connection, + 0, + NULL, + error); +} + typedef struct { NMConnection *connection; guint64 version_id; diff --git a/src/devices/nm-device.h b/src/devices/nm-device.h index 71000834f5..0323a78291 100644 --- a/src/devices/nm-device.h +++ b/src/devices/nm-device.h @@ -700,6 +700,9 @@ const NMPlatformIP6Route *nm_device_get_ip6_default_route (NMDevice *self, gbool void nm_device_spawn_iface_helper (NMDevice *self); +gboolean nm_device_reapply (NMDevice *self, + NMConnection *connection, + GError **error); void nm_device_reapply_settings_immediately (NMDevice *self); void nm_device_update_firewall_zone (NMDevice *self); diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c index f7088fa080..862754f9b5 100644 --- a/src/nm-active-connection.c +++ b/src/nm-active-connection.c @@ -793,6 +793,8 @@ _settings_connection_notify_flags (NMSettingsConnection *settings_connection, GParamSpec *param, NMActiveConnection *self) { + GError *error = NULL; + nm_assert (NM_IS_ACTIVE_CONNECTION (self)); nm_assert (NM_IS_SETTINGS_CONNECTION (settings_connection)); nm_assert (nm_active_connection_get_activation_type (self) == NM_ACTIVATION_TYPE_EXTERNAL); @@ -802,7 +804,13 @@ _settings_connection_notify_flags (NMSettingsConnection *settings_connection, return; _set_activation_type_managed (self); - nm_device_reapply_settings_immediately (nm_active_connection_get_device (self)); + if (!nm_device_reapply (nm_active_connection_get_device (self), + NM_CONNECTION (nm_active_connection_get_settings_connection (self)), + &error)) { + _LOGW ("failed to reapply new device settings on previously externally managed device: %s", + error->message); + g_error_free (error); + } } /*****************************************************************************/ |