router: check return code of odhcpd_get_interface_dns_addr()
authorHans Dedecker <dedeckeh@gmail.com>
Mon, 31 Dec 2018 15:00:12 +0000 (16:00 +0100)
committerHans Dedecker <dedeckeh@gmail.com>
Mon, 31 Dec 2018 15:05:09 +0000 (16:05 +0100)
Check if odhcpd_get_interface_dns_addr() returns a valid DNS address.
While at it restructure the DNS RA code to make it more readable

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
src/router.c

index c02d675d5a17430295d79a8f1986678095c291b3..f45ecab67fbfdbc8605ceeb1dabd1e6476d1cdb3 100644 (file)
@@ -424,11 +424,17 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add
                        default_route = true;
        }
 
+       /* DNS Recursive DNS */
+       struct in6_addr dns_pref, *dns_addr = NULL;
+       size_t dns_cnt = 0;
 
-       struct in6_addr dns_pref, *dns_addr = &dns_pref;
-       size_t dns_cnt = 1;
-
-       odhcpd_get_interface_dns_addr(iface, &dns_pref);
+       if (iface->dns_cnt > 0) {
+               dns_addr = iface->dns;
+               dns_cnt = iface->dns_cnt;
+       } else if (!odhcpd_get_interface_dns_addr(iface, &dns_pref)) {
+               dns_addr = &dns_pref;
+               dns_cnt = 1;
+       }
 
        /* Construct Prefix Information options */
        size_t pfxs_cnt = 0;
@@ -526,15 +532,6 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add
 
        syslog(LOG_INFO, "Using a RA lifetime of %d seconds on %s", ntohs(adv.h.nd_ra_router_lifetime), iface->ifname);
 
-       /* DNS Recursive DNS */
-       if (iface->dns_cnt > 0) {
-               dns_addr = iface->dns;
-               dns_cnt = iface->dns_cnt;
-       }
-
-       if (!dns_addr || IN6_IS_ADDR_UNSPECIFIED(dns_addr))
-               dns_cnt = 0;
-
        struct {
                uint8_t type;
                uint8_t len;