From 324f67956aee7f5408da99ac4f10616d356bf4d5 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 4 Mar 2020 12:08:03 +0100 Subject: [PATCH] dns: ensure to log a warning when writing /etc/resolv.conf fails When setting "main.rc-manager=symlink" (the default) and /etc/resolv.conf is a file, NetworkManager tries to write the file directly. When that fails, we need to make sure to propagate the error so that we log a warning about that. With this change: [1583320004.3122] dns-mgr: update-dns: updating plugin systemd-resolved [1583320004.3123] dns-sd-resolved[f9e3febb7424575d]: send-updates: start 8 requests [1583320004.3129] dns-mgr: update-resolv-no-stub: '/var/run/NetworkManager/no-stub-resolv.conf' successfully written [1583320004.3130] dns-mgr: update-resolv-conf: write to /etc/resolv.conf failed (rc-manager=symlink, $ERROR_REASON) [1583320004.3132] dns-mgr: update-resolv-conf: write internal file /var/run/NetworkManager/resolv.conf succeeded [1583320004.3133] dns-mgr: current configuration: [{ [...] }] [1583320004.3133] dns-mgr: could not commit DNS changes: $ERROR_REASON [1583320004.3134] device (eth0): Activation: successful, device activated. https://bugzilla.redhat.com/show_bug.cgi?id=1809181 --- src/dns/nm-dns-manager.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c index 9f4b2e8a49..f241f004cc 100644 --- a/src/dns/nm-dns-manager.c +++ b/src/dns/nm-dns-manager.c @@ -860,9 +860,11 @@ update_resolv_conf (NMDnsManager *self, if (!g_file_set_contents (rc_path, content, -1, &local)) { _LOGT ("update-resolv-conf: write to %s failed (rc-manager=%s, %s)", rc_path, _rc_manager_to_string (rc_manager), local->message); - write_file_result = SR_ERROR; g_propagate_error (error, local); + /* clear @error, so that we don't try reset it. This is the error + * we want to propagate to the caller. */ error = NULL; + write_file_result = SR_ERROR; } else { _LOGT ("update-resolv-conf: write to %s succeeded (rc-manager=%s)", rc_path, _rc_manager_to_string (rc_manager)); @@ -930,7 +932,7 @@ update_resolv_conf (NMDnsManager *self, if ( rc_manager != NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK || !_read_link_cached (_PATH_RESCONF, &resconf_link_cached, &resconf_link)) { _LOGT ("update-resolv-conf: write internal file %s succeeded", MY_RESOLV_CONF); - return SR_SUCCESS; + return write_file_result; } if (!nm_streq0 (_read_link_cached (_PATH_RESCONF, &resconf_link_cached, &resconf_link), @@ -938,7 +940,7 @@ update_resolv_conf (NMDnsManager *self, _LOGT ("update-resolv-conf: write internal file %s succeeded (don't touch symlink %s linking to %s)", MY_RESOLV_CONF, _PATH_RESCONF, _read_link_cached (_PATH_RESCONF, &resconf_link_cached, &resconf_link)); - return SR_SUCCESS; + return write_file_result; } /* By this point, /etc/resolv.conf exists and is a symlink to our internal @@ -991,7 +993,7 @@ update_resolv_conf (NMDnsManager *self, _LOGT ("update-resolv-conf: write internal file %s succeeded and update symlink %s", MY_RESOLV_CONF, _PATH_RESCONF); - return SR_SUCCESS; + return write_file_result; } static void