about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog8
-rw-r--r--debian/patches/e91f1a7d2a6b8400b6b331d5b72287dcb5164a39.patch114
-rw-r--r--debian/patches/series1
3 files changed, 123 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 60c8f488..6ecfe09c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+network-manager (1.10.4-1ubuntu3) UNRELEASED; urgency=medium
+
+  * Cherry-pick a partial patch from 1.11 branch, to stop agressively
+    setting route_only flag on nameservers in the systemd-resolved dns
+    plugin. LP: #1751797
+
+ -- Dimitri John Ledkov <xnox@ubuntu.com>  Thu, 15 Mar 2018 15:18:06 +0000
+
 network-manager (1.10.4-1ubuntu2) bionic; urgency=medium
 
   [ Bryan Quigley ]
diff --git a/debian/patches/e91f1a7d2a6b8400b6b331d5b72287dcb5164a39.patch b/debian/patches/e91f1a7d2a6b8400b6b331d5b72287dcb5164a39.patch
new file mode 100644
index 00000000..2f918bbe
--- /dev/null
+++ b/debian/patches/e91f1a7d2a6b8400b6b331d5b72287dcb5164a39.patch
@@ -0,0 +1,114 @@
+From e91f1a7d2a6b8400b6b331d5b72287dcb5164a39 Mon Sep 17 00:00:00 2001
+From: Beniamino Galvani <bgalvani@redhat.com>
+Date: Wed, 10 Jan 2018 11:23:33 +0100
+Subject: [PATCH] dns: introduce routing domains
+
+Similarly to what systemd-resolved does, introduce the concept of
+"routing" domain, which is a domain in the search list that is used
+only to decide the interface over which a query must be forwarded, but
+is not used to complete unqualified host names. Routing domains are
+those starting with a tilde ('~') before the actual domain name.
+
+Domains without the initial tilde are used both for completing
+unqualified names and for the routing decision.
+---
+ clients/common/settings-docs.h.in |  4 ++--
+ libnm-core/nm-setting-ip-config.c |  5 ++++-
+ src/dns/nm-dns-dnsmasq.c          |  8 +++++---
+ src/dns/nm-dns-manager.c          | 36 ++++++++++++++++++++++++++----------
+ src/dns/nm-dns-systemd-resolved.c | 21 ++++++++++-----------
+ src/nm-core-utils.c               | 15 +++++++++++++++
+ src/nm-core-utils.h               |  2 ++
+ 7 files changed, 64 insertions(+), 27 deletions(-)
+
+--- a/src/dns/nm-dns-systemd-resolved.c
++++ b/src/dns/nm-dns-systemd-resolved.c
+@@ -144,7 +144,8 @@
+ 	int addr_family;
+ 	gsize addr_size;
+ 	guint i, n;
+-	gboolean route_only;
++	gboolean is_routing;
++	const char *domain;
+ 
+ 	if (NM_IS_IP4_CONFIG (config))
+ 		addr_family = AF_INET;
+@@ -178,33 +179,31 @@
+ 		g_variant_builder_close (dns);
+ 	}
+ 
+-	/* If this link is never the default (e.g. only used for resources on this
+-	 * network) add a routing domain. */
+-	route_only =   addr_family == AF_INET
+-	             ? !nm_ip4_config_best_default_route_get (config)
+-	             : !nm_ip6_config_best_default_route_get (config);
+-
+ 	n =   addr_family == AF_INET
+ 	    ? nm_ip4_config_get_num_searches (config)
+ 	    : nm_ip6_config_get_num_searches (config);
+ 	if (n  > 0) {
+ 		for (i = 0; i < n; i++) {
++			domain = nm_utils_parse_dns_domain (addr_family == AF_INET
++			                                    ? nm_ip4_config_get_search (config, i)
++			                                    : nm_ip6_config_get_search (config, i),
++			                                    &is_routing);
+ 			g_variant_builder_add (domains, "(sb)",
+-			                       addr_family == AF_INET
+-			                         ? nm_ip4_config_get_search (config, i)
+-			                         : nm_ip6_config_get_search (config, i),
+-			                       route_only);
++			                       domain,
++			                       is_routing);
+ 		}
+ 	} else {
+ 		n =   addr_family == AF_INET
+ 		    ? nm_ip4_config_get_num_domains (config)
+ 		    : nm_ip6_config_get_num_domains (config);
+ 		for (i = 0; i < n; i++) {
++			domain = nm_utils_parse_dns_domain (addr_family == AF_INET
++			                                    ? nm_ip4_config_get_domain (config, i)
++			                                    : nm_ip6_config_get_domain (config, i),
++			                                    &is_routing);
+ 			g_variant_builder_add (domains, "(sb)",
+-			                       addr_family == AF_INET
+-			                         ? nm_ip4_config_get_domain (config, i)
+-			                         : nm_ip6_config_get_domain (config, i),
+-			                       route_only);
++			                       domain,
++			                       is_routing);
+ 		}
+ 	}
+ }
+--- a/src/nm-core-utils.c
++++ b/src/nm-core-utils.c
+@@ -4329,6 +4329,21 @@
+ 	return g_string_free (str, FALSE);
+ }
+ 
++const char *
++nm_utils_parse_dns_domain (const char *domain, gboolean *is_routing)
++{
++	g_return_val_if_fail (domain, NULL);
++	g_return_val_if_fail (domain[0], NULL);
++
++	if (domain[0] == '~') {
++		domain++;
++		NM_SET_OUT (is_routing, TRUE);
++	} else
++		NM_SET_OUT (is_routing, FALSE);
++
++	return domain;
++}
++
+ /*****************************************************************************/
+ 
+ NM_UTILS_ENUM2STR_DEFINE (nm_icmpv6_router_pref_to_string, NMIcmpv6RouterPref,
+--- a/src/nm-core-utils.h
++++ b/src/nm-core-utils.h
+@@ -450,4 +450,6 @@
+ 
+ /*****************************************************************************/
+ 
++const char *nm_utils_parse_dns_domain (const char *domain, gboolean *is_routing);
++
+ #endif /* __NM_CORE_UTILS_H__ */
diff --git a/debian/patches/series b/debian/patches/series
index 163b39b4..92eaf65f 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -11,3 +11,4 @@ libnm-Check-self-still-NMManager-or-not.patch
 #dns-manager-don-t-merge-split-DNS-search-domains.patch
 Read-system-connections-from-run.patch
 settings-preserve-agent-owned-secrets-on-connection-updat.patch
+e91f1a7d2a6b8400b6b331d5b72287dcb5164a39.patch