From cd9ebfd2bb76b99b861af1272f5ef9bb0d279008 Mon Sep 17 00:00:00 2001 From: Gris Ge Date: Tue, 26 Sep 2023 15:00:32 +0800 Subject: [PATCH] emit DNS CONFIG_CHANGED signal even dns=none Instruct the `NMDnsManager` to emit `CONFIG_CHANGED` signal even `dns=none` or failed to modify `/etc/resolv.conf`. The `NMPolicy` will only update hostname when DNS is managed. Signed-off-by: Gris Ge (cherry picked from commit a847ba807572c3ef3682e833432f2f93e9d519a0) (cherry picked from commit d10f20fd01a7bb3225c7e38ed80449e19156344b) (cherry picked from commit e0f3a91a95d45f729bd42956617aafb84e26a47b) --- src/core/dns/nm-dns-manager.c | 12 +++++++++++- src/core/dns/nm-dns-manager.h | 2 ++ src/core/nm-policy.c | 10 ++++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/core/dns/nm-dns-manager.c b/src/core/dns/nm-dns-manager.c index 2669667d5b..95b478db38 100644 --- a/src/core/dns/nm-dns-manager.c +++ b/src/core/dns/nm-dns-manager.c @@ -1910,7 +1910,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); @@ -1926,6 +1926,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 b41bf1ccf2..b697b3e380 100644 --- a/src/core/dns/nm-dns-manager.h +++ b/src/core/dns/nm-dns-manager.h @@ -148,4 +148,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 0b7c9eddca..d9e7643fa2 100644 --- a/src/core/nm-policy.c +++ b/src/core/nm-policy.c @@ -2563,11 +2563,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, "DNS configuration changed"); - } + 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, "DNS configuration changed"); + } - update_system_hostname(self, "DNS configuration changed"); + update_system_hostname(self, "DNS configuration changed"); + } } static void