diff --git a/src/core/dns/nm-dns-manager.c b/src/core/dns/nm-dns-manager.c index 0f27ab23dc..88eeb27148 100644 --- a/src/core/dns/nm-dns-manager.c +++ b/src/core/dns/nm-dns-manager.c @@ -1833,7 +1833,7 @@ plugin_skip:; } /* signal that DNS resolution configs were changed */ - if ((do_update || caching || force_emit) && result == SR_SUCCESS) + if ((caching || force_emit) && result == SR_SUCCESS) g_signal_emit(self, signals[CONFIG_CHANGED], 0); nm_clear_pointer(&priv->config_variant, g_variant_unref); @@ -1849,6 +1849,16 @@ plugin_skip:; return TRUE; } +gboolean +nm_dns_manager_is_unmanaged(NMDnsManager *self) +{ + NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE(self); + + return NM_IN_SET(priv->rc_manager, + NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED, + NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE); +} + /*****************************************************************************/ gboolean diff --git a/src/core/dns/nm-dns-manager.h b/src/core/dns/nm-dns-manager.h index 84821ecef5..c8e0ef3931 100644 --- a/src/core/dns/nm-dns-manager.h +++ b/src/core/dns/nm-dns-manager.h @@ -156,4 +156,6 @@ char *nmtst_dns_create_resolv_conf(const char *const *searches, const char *const *nameservers, const char *const *options); +gboolean nm_dns_manager_is_unmanaged(NMDnsManager *self); + #endif /* __NETWORKMANAGER_DNS_MANAGER_H__ */ diff --git a/src/core/nm-policy.c b/src/core/nm-policy.c index b5f28c7783..06a0fcb0f7 100644 --- a/src/core/nm-policy.c +++ b/src/core/nm-policy.c @@ -2541,11 +2541,13 @@ dns_config_changed(NMDnsManager *dns_manager, gpointer user_data) if (priv->updating_dns) return; - nm_manager_for_each_device (priv->manager, device, tmp_lst) { - nm_device_clear_dns_lookup_data(device); - } + if (!nm_dns_manager_is_unmanaged(dns_manager)) { + nm_manager_for_each_device (priv->manager, device, tmp_lst) { + nm_device_clear_dns_lookup_data(device); + } - update_system_hostname(self, "DNS configuration changed"); + update_system_hostname(self, "DNS configuration changed"); + } } static void