[PATCH 0/2] conf: network: dns: Allow addition of multiple addresses with same hosname

See patch 2/2 Peter Krempa (2): networkxml2xmltest: Add example of multiple addresses having the same hostname network: Allow adding DNS entries sharing hostname for multiple addreses src/conf/network_conf.c | 13 +++++++++---- tests/networkxml2xmlin/nat-network-dns-hosts.xml | 11 +++++++++++ tests/networkxml2xmlout/nat-network-dns-hosts.xml | 11 +++++++++++ .../nat-network-dns-more-hosts.xml | 11 +++++++++++ .../nat-network-no-hosts.xml | 14 +++++++++++++- 5 files changed, 55 insertions(+), 5 deletions(-) -- 2.31.1

Having multiple addresses for the same hostname is a legitimate configuration in DNS. Add test data to cover this case. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- tests/networkxml2xmlin/nat-network-dns-hosts.xml | 8 ++++++++ tests/networkxml2xmlout/nat-network-dns-hosts.xml | 8 ++++++++ .../nat-network-dns-more-hosts.xml | 8 ++++++++ .../networkxml2xmlupdateout/nat-network-no-hosts.xml | 11 ++++++++++- 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/tests/networkxml2xmlin/nat-network-dns-hosts.xml b/tests/networkxml2xmlin/nat-network-dns-hosts.xml index da65267ec5..58608f6959 100644 --- a/tests/networkxml2xmlin/nat-network-dns-hosts.xml +++ b/tests/networkxml2xmlin/nat-network-dns-hosts.xml @@ -8,6 +8,14 @@ <hostname>host</hostname> <hostname>gateway</hostname> </host> + <host ip='192.168.122.2'> + <hostname>shared</hostname> + <hostname>names</hostname> + </host> + <host ip='fd8f:1391:3a82:150::c0a8:9603'> + <hostname>shared</hostname> + <hostname>names</hostname> + </host> </dns> <ip address='192.168.122.1' netmask='255.255.255.0'> </ip> diff --git a/tests/networkxml2xmlout/nat-network-dns-hosts.xml b/tests/networkxml2xmlout/nat-network-dns-hosts.xml index 17e269710b..7c561aad2a 100644 --- a/tests/networkxml2xmlout/nat-network-dns-hosts.xml +++ b/tests/networkxml2xmlout/nat-network-dns-hosts.xml @@ -10,6 +10,14 @@ <hostname>host</hostname> <hostname>gateway</hostname> </host> + <host ip='192.168.122.2'> + <hostname>shared</hostname> + <hostname>names</hostname> + </host> + <host ip='fd8f:1391:3a82:150::c0a8:9603'> + <hostname>shared</hostname> + <hostname>names</hostname> + </host> </dns> <ip address='192.168.122.1' netmask='255.255.255.0'> </ip> diff --git a/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml index 5464d90ab9..dfc12eb2f9 100644 --- a/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml +++ b/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml @@ -13,6 +13,14 @@ <hostname>host</hostname> <hostname>gateway</hostname> </host> + <host ip='192.168.122.2'> + <hostname>shared</hostname> + <hostname>names</hostname> + </host> + <host ip='fd8f:1391:3a82:150::c0a8:9603'> + <hostname>shared</hostname> + <hostname>names</hostname> + </host> </dns> <ip address='192.168.122.1' netmask='255.255.255.0'> </ip> diff --git a/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml index ee2d773729..7cff9edc09 100644 --- a/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml +++ b/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml @@ -5,7 +5,16 @@ <interface dev='eth0'/> </forward> <bridge name='virbr0' stp='on' delay='0'/> - <dns forwardPlainNames='no'/> + <dns forwardPlainNames='no'> + <host ip='192.168.122.2'> + <hostname>shared</hostname> + <hostname>names</hostname> + </host> + <host ip='fd8f:1391:3a82:150::c0a8:9603'> + <hostname>shared</hostname> + <hostname>names</hostname> + </host> + </dns> <ip address='192.168.122.1' netmask='255.255.255.0'> </ip> </network> -- 2.31.1

Having multiple addresses having same hostname is a common config either to have IPv4 and IPv6 address for the same hostname or even for DNS round robin. The validation in the network update code didn't allow adding such entries despite the fact that it is possible to define a network with them. Don't check hostname duplicity when adding a DNS entry. The update of the test case adds another entry for the 'pudding' hostname which is added in one of the networkxml2xmlupdate test cases. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/network_conf.c | 13 +++++++++---- tests/networkxml2xmlin/nat-network-dns-hosts.xml | 3 +++ tests/networkxml2xmlout/nat-network-dns-hosts.xml | 3 +++ .../nat-network-dns-more-hosts.xml | 3 +++ .../nat-network-no-hosts.xml | 3 +++ 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index b10ff5c7a8..fe9919d4ce 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -3404,12 +3404,17 @@ virNetworkDefUpdateDNSHost(virNetworkDef *def, if (virSocketAddrEqual(&host.ip, &dns->hosts[i].ip)) foundThisTime = true; - for (j = 0; j < host.nnames && !foundThisTime; j++) { - for (k = 0; k < dns->hosts[i].nnames && !foundThisTime; k++) { - if (STREQ(host.names[j], dns->hosts[i].names[k])) - foundThisTime = true; + /* when adding we want to only check duplicates of address since having + * multiple addresses with the same hostname is a legitimate configuration */ + if (!isAdd) { + for (j = 0; j < host.nnames && !foundThisTime; j++) { + for (k = 0; k < dns->hosts[i].nnames && !foundThisTime; k++) { + if (STREQ(host.names[j], dns->hosts[i].names[k])) + foundThisTime = true; + } } } + if (foundThisTime) { foundCt++; foundIdx = i; diff --git a/tests/networkxml2xmlin/nat-network-dns-hosts.xml b/tests/networkxml2xmlin/nat-network-dns-hosts.xml index 58608f6959..c28ebd8c4b 100644 --- a/tests/networkxml2xmlin/nat-network-dns-hosts.xml +++ b/tests/networkxml2xmlin/nat-network-dns-hosts.xml @@ -4,6 +4,9 @@ <forward dev='eth0' mode='nat'/> <bridge name='virbr0' stp='on' delay='0'/> <dns forwardPlainNames='no'> + <host ip='192.168.122.122'> + <hostname>pudding</hostname> + </host> <host ip='192.168.122.1'> <hostname>host</hostname> <hostname>gateway</hostname> diff --git a/tests/networkxml2xmlout/nat-network-dns-hosts.xml b/tests/networkxml2xmlout/nat-network-dns-hosts.xml index 7c561aad2a..86832af518 100644 --- a/tests/networkxml2xmlout/nat-network-dns-hosts.xml +++ b/tests/networkxml2xmlout/nat-network-dns-hosts.xml @@ -6,6 +6,9 @@ </forward> <bridge name='virbr0' stp='on' delay='0'/> <dns forwardPlainNames='no'> + <host ip='192.168.122.122'> + <hostname>pudding</hostname> + </host> <host ip='192.168.122.1'> <hostname>host</hostname> <hostname>gateway</hostname> diff --git a/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml index dfc12eb2f9..7b8a451b67 100644 --- a/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml +++ b/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml @@ -9,6 +9,9 @@ <host ip='f0:d::f0:d'> <hostname>pudding</hostname> </host> + <host ip='192.168.122.122'> + <hostname>pudding</hostname> + </host> <host ip='192.168.122.1'> <hostname>host</hostname> <hostname>gateway</hostname> diff --git a/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml index 7cff9edc09..679575973c 100644 --- a/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml +++ b/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml @@ -6,6 +6,9 @@ </forward> <bridge name='virbr0' stp='on' delay='0'/> <dns forwardPlainNames='no'> + <host ip='192.168.122.122'> + <hostname>pudding</hostname> + </host> <host ip='192.168.122.2'> <hostname>shared</hostname> <hostname>names</hostname> -- 2.31.1

On 7/14/21 1:11 PM, Peter Krempa wrote:
See patch 2/2
Peter Krempa (2): networkxml2xmltest: Add example of multiple addresses having the same hostname network: Allow adding DNS entries sharing hostname for multiple addreses
src/conf/network_conf.c | 13 +++++++++---- tests/networkxml2xmlin/nat-network-dns-hosts.xml | 11 +++++++++++ tests/networkxml2xmlout/nat-network-dns-hosts.xml | 11 +++++++++++ .../nat-network-dns-more-hosts.xml | 11 +++++++++++ .../nat-network-no-hosts.xml | 14 +++++++++++++- 5 files changed, 55 insertions(+), 5 deletions(-)
Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Michal
participants (2)
-
Michal Prívozník
-
Peter Krempa