From nobody Sun May 5 01:49:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1489768406560775.068469857616; Fri, 17 Mar 2017 09:33:26 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 33BAE2EF194; Fri, 17 Mar 2017 16:33:25 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7DD097846A; Fri, 17 Mar 2017 16:33:24 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7E7E75EC60; Fri, 17 Mar 2017 16:33:23 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v2HGXMUF006568 for ; Fri, 17 Mar 2017 12:33:22 -0400 Received: by smtp.corp.redhat.com (Postfix) id B5E165C3FD; Fri, 17 Mar 2017 16:33:22 +0000 (UTC) Received: from vhost2.laine.org (ovpn-116-242.phx2.redhat.com [10.3.116.242]) by smtp.corp.redhat.com (Postfix) with ESMTP id 72D805C541 for ; Fri, 17 Mar 2017 16:33:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 33BAE2EF194 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=laine.org Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 33BAE2EF194 From: Laine Stump To: libvir-list@redhat.com Date: Fri, 17 Mar 2017 12:33:14 -0400 Message-Id: <20170317163314.9563-1-laine@laine.org> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH] network: don't add "no-resolv" if we still need DNS servers from resolv.conf X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Fri, 17 Mar 2017 16:33:26 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" It was pointed out here: https://bugzilla.redhat.com/show_bug.cgi?id=3D1331796#c4 that we shouldn't be adding a "no-resolv" to the dnsmasq.conf file for a network if there isn't any element that specifies an IP address but no qualifying domain. If there is such an element, it will handle all DNS requests that weren't otherwise handled by one of the forwarder entries with a matching domain attribute. If not, then DNS requests that don't match the domain of any would not be resolved if we added no-resolv. So, only add "no-resolv" when there is at least one element that specifies an IP address but no qualifying domain. --- src/network/bridge_driver.c | 14 ++++++++++= +++- .../nat-network-dns-forwarder-no-resolv.conf | 12 ++++++++++= ++ .../nat-network-dns-forwarder-no-resolv.xml | 11 +++++++++++ tests/networkxml2confdata/nat-network-dns-forwarders.conf | 2 +- tests/networkxml2conftest.c | 1 + .../nat-network-dns-forwarder-no-resolv.xml | 11 +++++++++++ .../nat-network-dns-forwarder-no-resolv.xml | 11 +++++++++++ tests/networkxml2xmltest.c | 1 + 8 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 tests/networkxml2confdata/nat-network-dns-forwarder-no-= resolv.conf create mode 100644 tests/networkxml2confdata/nat-network-dns-forwarder-no-= resolv.xml create mode 100644 tests/networkxml2xmlin/nat-network-dns-forwarder-no-res= olv.xml create mode 100644 tests/networkxml2xmlout/nat-network-dns-forwarder-no-re= solv.xml diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index c5ec282..32c5ab7 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -1085,7 +1085,15 @@ networkDnsmasqConfContents(virNetworkObjPtr network, virBufferAddLit(&configbuf, "port=3D0\n"); =20 if (wantDNS && network->def->dns.forwarders) { - virBufferAddLit(&configbuf, "no-resolv\n"); + /* addNoResolv should be set to true if there are any entries + * that specify an IP address for requests, but no domain + * qualifier (implying that all requests otherwise "unclaimed" + * should be sent to that address). if it is still false when + * we've looked at all entries, it means we still need the + * host's resolv.conf for some cases. + */ + bool addNoResolv =3D false; + for (i =3D 0; i < network->def->dns.nfwds; i++) { virNetworkDNSForwarderPtr fwd =3D &network->def->dns.forwarder= s[i]; =20 @@ -1099,11 +1107,15 @@ networkDnsmasqConfContents(virNetworkObjPtr network, goto cleanup; virBufferAsprintf(&configbuf, "%s\n", addr); VIR_FREE(addr); + if (!fwd->domain) + addNoResolv =3D true; } else { /* "don't forward requests for this domain" */ virBufferAddLit(&configbuf, "#\n"); } } + if (addNoResolv) + virBufferAddLit(&configbuf, "no-resolv\n"); } =20 if (network->def->domain) { diff --git a/tests/networkxml2confdata/nat-network-dns-forwarder-no-resolv.= conf b/tests/networkxml2confdata/nat-network-dns-forwarder-no-resolv.conf new file mode 100644 index 0000000..52d000a --- /dev/null +++ b/tests/networkxml2confdata/nat-network-dns-forwarder-no-resolv.conf @@ -0,0 +1,12 @@ +##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE +##OVERWRITTEN AND LOST. Changes to this configuration should be made usin= g: +## virsh net-edit default +## or other application using the libvirt API. +## +## dnsmasq conf file created by libvirt +strict-order +server=3D/example.com/192.168.1.1 +except-interface=3Dlo +bind-dynamic +interface=3Dvirbr0 +addn-hosts=3D/var/lib/libvirt/dnsmasq/default.addnhosts diff --git a/tests/networkxml2confdata/nat-network-dns-forwarder-no-resolv.= xml b/tests/networkxml2confdata/nat-network-dns-forwarder-no-resolv.xml new file mode 100644 index 0000000..9661ce5 --- /dev/null +++ b/tests/networkxml2confdata/nat-network-dns-forwarder-no-resolv.xml @@ -0,0 +1,11 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9c + + + + + + + + diff --git a/tests/networkxml2confdata/nat-network-dns-forwarders.conf b/te= sts/networkxml2confdata/nat-network-dns-forwarders.conf index 0bd76bf..1b0c94c 100644 --- a/tests/networkxml2confdata/nat-network-dns-forwarders.conf +++ b/tests/networkxml2confdata/nat-network-dns-forwarders.conf @@ -5,11 +5,11 @@ ## ## dnsmasq conf file created by libvirt strict-order -no-resolv server=3D8.8.8.8 server=3D8.8.4.4 server=3D/example.com/192.168.1.1 server=3D/www.example.com/# +no-resolv except-interface=3Dlo bind-dynamic interface=3Dvirbr0 diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c index 9b61077..e2522fc 100644 --- a/tests/networkxml2conftest.c +++ b/tests/networkxml2conftest.c @@ -137,6 +137,7 @@ mymain(void) DO_TEST("nat-network-dns-hosts", full); DO_TEST("nat-network-dns-forward-plain", full); DO_TEST("nat-network-dns-forwarders", full); + DO_TEST("nat-network-dns-forwarder-no-resolv", full); DO_TEST("nat-network-dns-local-domain", full); DO_TEST("dhcp6-network", dhcpv6); DO_TEST("dhcp6-nat-network", dhcpv6); diff --git a/tests/networkxml2xmlin/nat-network-dns-forwarder-no-resolv.xml= b/tests/networkxml2xmlin/nat-network-dns-forwarder-no-resolv.xml new file mode 100644 index 0000000..9661ce5 --- /dev/null +++ b/tests/networkxml2xmlin/nat-network-dns-forwarder-no-resolv.xml @@ -0,0 +1,11 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9c + + + + + + + + diff --git a/tests/networkxml2xmlout/nat-network-dns-forwarder-no-resolv.xm= l b/tests/networkxml2xmlout/nat-network-dns-forwarder-no-resolv.xml new file mode 100644 index 0000000..9661ce5 --- /dev/null +++ b/tests/networkxml2xmlout/nat-network-dns-forwarder-no-resolv.xml @@ -0,0 +1,11 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9c + + + + + + + + diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c index cfaf718..effd85a 100644 --- a/tests/networkxml2xmltest.c +++ b/tests/networkxml2xmltest.c @@ -141,6 +141,7 @@ mymain(void) DO_TEST("nat-network-dns-hosts"); DO_TEST("nat-network-dns-forward-plain"); DO_TEST("nat-network-dns-forwarders"); + DO_TEST("nat-network-dns-forwarder-no-resolv"); DO_TEST("nat-network-forward-nat-address"); DO_TEST("nat-network-forward-nat-no-address"); DO_TEST("8021Qbh-net"); --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list