]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: do not automatically propagate bogus DNS/NTP servers
authorLennart Poettering <lennart@poettering.net>
Fri, 18 Nov 2016 16:11:12 +0000 (17:11 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 21 Nov 2016 21:58:26 +0000 (22:58 +0100)
Never propagate DNS/NTP servers on the local link via the DHCP server. The
DNS/NTP servers 0.0.0.0 and 127.0.0.1 only make sense in the local context,
hence never propagate them automatically to other hosts.

Fixes: #4524
src/network/networkd-link.c

index 216f4aab52989829de65c318d36865097d0eb8d7..b38eec1ba7ba097074f494cfe5441678a85d2547 100644 (file)
@@ -862,15 +862,22 @@ static int link_push_uplink_dns_to_dhcp_server(Link *link, sd_dhcp_server *s) {
                 return 0;
 
         for (i = 0; i < link->network->n_dns; i++) {
+                struct in_addr ia;
 
                 /* Only look for IPv4 addresses */
                 if (link->network->dns[i].family != AF_INET)
                         continue;
 
+                ia = link->network->dns[i].address.in;
+
+                /* Never propagate obviously borked data */
+                if (in4_addr_is_null(&ia) || in4_addr_is_localhost(&ia))
+                        continue;
+
                 if (!GREEDY_REALLOC(addresses, n_allocated, n_addresses + 1))
                         return log_oom();
 
-                addresses[n_addresses++] = link->network->dns[i].address.in;
+                addresses[n_addresses++] = ia;
         }
 
         if (link->network->dhcp_use_dns && link->dhcp_lease) {
@@ -911,6 +918,10 @@ static int link_push_uplink_ntp_to_dhcp_server(Link *link, sd_dhcp_server *s) {
                 if (inet_pton(AF_INET, *a, &ia) <= 0)
                         continue;
 
+                /* Never propagate obviously borked data */
+                if (in4_addr_is_null(&ia) || in4_addr_is_localhost(&ia))
+                        continue;
+
                 if (!GREEDY_REALLOC(addresses, n_allocated, n_addresses + 1))
                         return log_oom();