core: better handle sd-resolved errors when resolving hostnames
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/833
This commit is contained in:
		
							parent
							
								
									8594b59280
								
							
						
					
					
						commit
						0130e35f80
					
				| @ -0,0 +1,56 @@ | |||||||
|  | From 61239e69c698b1aff96a3510b6a2324316017693 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Beniamino Galvani <bgalvani@redhat.com> | ||||||
|  | Date: Thu, 28 Oct 2021 17:20:12 +0200 | ||||||
|  | Subject: [PATCH] core: better handle sd-resolved errors when resolving | ||||||
|  |  hostnames | ||||||
|  | 
 | ||||||
|  | If NM tries to resolve a link-local address, systemd-resolved returns | ||||||
|  | error "org.freedesktop.resolve1.NoNameServers" because those addresses | ||||||
|  | can only be resolved via other protocols like LLMNR or mDNS. | ||||||
|  | 
 | ||||||
|  | Previously NM would fall back to spawning the helper, which would ask | ||||||
|  | again to systemd-resolved via /etc/resolv.conf. In this way, a | ||||||
|  | synthetic result (or one obtained not from DNS) would be returned. | ||||||
|  | 
 | ||||||
|  | We must avoid non-DNS results. When systemd-resolved returns an error | ||||||
|  | that is not a D-Bus one (as MethodNotFound) but is a | ||||||
|  | "org.fd.resolve1.*" [1], we can assume that systemd-resolved is | ||||||
|  | running properly and we shall never fall back to spawning the helper. | ||||||
|  | 
 | ||||||
|  | [1] https://www.freedesktop.org/wiki/Software/systemd/resolved/#commonerrors | ||||||
|  | 
 | ||||||
|  | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/833 | ||||||
|  | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1006 | ||||||
|  | (cherry picked from commit d8186b1253a2e0fe88eb06bede17f4892b4270c1) | ||||||
|  | (cherry picked from commit 77a2a53e8abf25b57fd9dc16ca6a81b6f609d6c1) | ||||||
|  | ---
 | ||||||
|  |  src/core/devices/nm-device-utils.c | 13 ++++++++++++- | ||||||
|  |  1 file changed, 12 insertions(+), 1 deletion(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/core/devices/nm-device-utils.c b/src/core/devices/nm-device-utils.c
 | ||||||
|  | index f40ca570f6..75b803de4f 100644
 | ||||||
|  | --- a/src/core/devices/nm-device-utils.c
 | ||||||
|  | +++ b/src/core/devices/nm-device-utils.c
 | ||||||
|  | @@ -267,7 +267,18 @@ resolve_addr_resolved_cb(NMDnsSystemdResolved *                   resolved,
 | ||||||
|  |          _LOG2D(info, "error resolving via systemd-resolved: %s", error->message); | ||||||
|  |   | ||||||
|  |          dbus_error = g_dbus_error_get_remote_error(error); | ||||||
|  | -        if (nm_streq0(dbus_error, "org.freedesktop.resolve1.DnsError.NXDOMAIN")) {
 | ||||||
|  | +        if (NM_STR_HAS_PREFIX(dbus_error, "org.freedesktop.resolve1.")) {
 | ||||||
|  | +            /* systemd-resolved is enabled but it couldn't resolve the
 | ||||||
|  | +             * address via DNS.  Don't fall back to spawning the helper,
 | ||||||
|  | +             * because the helper will possibly ask again to
 | ||||||
|  | +             * systemd-resolved (via /etc/resolv.conf), potentially using
 | ||||||
|  | +             * other protocols than DNS or returning synthetic results.
 | ||||||
|  | +             *
 | ||||||
|  | +             * Consider the error as the final indication that the address
 | ||||||
|  | +             * can't be resolved.
 | ||||||
|  | +             *
 | ||||||
|  | +             * See: https://www.freedesktop.org/wiki/Software/systemd/resolved/#commonerrors
 | ||||||
|  | +             */
 | ||||||
|  |              resolve_addr_complete(info, NULL, g_error_copy(error)); | ||||||
|  |              return; | ||||||
|  |          } | ||||||
|  | -- 
 | ||||||
|  | 2.31.1 | ||||||
|  | 
 | ||||||
| @ -7,7 +7,7 @@ | |||||||
| %global epoch_version 1 | %global epoch_version 1 | ||||||
| %global rpm_version 1.32.12 | %global rpm_version 1.32.12 | ||||||
| %global real_version 1.32.12 | %global real_version 1.32.12 | ||||||
| %global release_version 1 | %global release_version 2 | ||||||
| %global snapshot %{nil} | %global snapshot %{nil} | ||||||
| %global git_sha %{nil} | %global git_sha %{nil} | ||||||
| 
 | 
 | ||||||
| @ -185,7 +185,7 @@ Source4: 20-connectivity-fedora.conf | |||||||
| Source5: 20-connectivity-redhat.conf | Source5: 20-connectivity-redhat.conf | ||||||
| Source6: 70-nm-connectivity.conf | Source6: 70-nm-connectivity.conf | ||||||
| 
 | 
 | ||||||
| # Patch0001: 0001-some.patch | Patch0001: 0001-core-better-handle-sd-resolved-errors-when-resolving.patch | ||||||
| 
 | 
 | ||||||
| Requires(post): systemd | Requires(post): systemd | ||||||
| Requires(post): /usr/sbin/update-alternatives | Requires(post): /usr/sbin/update-alternatives | ||||||
| @ -1149,6 +1149,9 @@ fi | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Fri Oct 29 2021 Beniamino Galvani <bgalvani@redhat.com> - 1:1.32.12-2 | ||||||
|  | - better handle systemd-resolved errors when resolving hostnames | ||||||
|  | 
 | ||||||
| * Wed Sep 22 2021 Beniamino Galvani <bgalvani@redhat.com> - 1:1.32.12-1 | * Wed Sep 22 2021 Beniamino Galvani <bgalvani@redhat.com> - 1:1.32.12-1 | ||||||
| - update to 1.32.12 release | - update to 1.32.12 release | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user