From 43523d60f38ca9b3ea7dd7fe71b04f12c9a2ab11 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) (cherry picked from commit cd9ebfd2bb76b99b861af1272f5ef9bb0d279008) --- 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 4de5b68d73..62dd0b28cf 100644 --- a/src/core/dns/nm-dns-manager.c +++ b/src/core/dns/nm-dns-manager.c @@ -1818,7 +1818,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); @@ -1834,6 +1834,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 c30d4b3ac6..51a3cde960 100644 --- a/src/core/dns/nm-dns-manager.h +++ b/src/core/dns/nm-dns-manager.h @@ -155,4 +155,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 550dbaa3f5..1e8f97ad12 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); - } + 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