[Dnsmasq-discuss] [PATCH] Remove excess whitespace through entire codebase.

Rosen Penev rosenp at gmail.com
Wed Oct 4 06:41:36 BST 2017


Fixed with: find . -type f -name "*.[ch]" -exec sh -c 'for i;do sed 's/[[:space:]]*$//' "$i">/tmp/.$$ && cat /tmp/.$$ > "$i";done' arg0 {} +
---
 contrib/MacOSX-launchd/launchd-README.txt |   2 +-
 contrib/lease-tools/dhcp_lease_time.c     |  46 +-
 contrib/lease-tools/dhcp_release.c        |  84 +--
 contrib/lease-tools/dhcp_release6.c       |  46 +-
 src/arp.c                                 |  38 +-
 src/auth.c                                | 328 +++++-----
 src/blockdata.c                           |  42 +-
 src/bpf.c                                 | 112 ++--
 src/cache.c                               | 350 +++++------
 src/config.h                              |  58 +-
 src/conntrack.c                           |  24 +-
 src/dbus.c                                | 158 ++---
 src/dhcp-common.c                         | 234 +++----
 src/dhcp-protocol.h                       |   8 +-
 src/dhcp.c                                | 280 ++++-----
 src/dhcp6-protocol.h                      |   6 +-
 src/dhcp6.c                               | 218 +++----
 src/dns-protocol.h                        |  12 +-
 src/dnsmasq.c                             | 516 ++++++++--------
 src/dnsmasq.h                             | 162 ++---
 src/dnssec.c                              | 754 +++++++++++------------
 src/domain.c                              |  62 +-
 src/edns0.c                               | 138 ++---
 src/forward.c                             | 660 ++++++++++----------
 src/helper.c                              | 218 +++----
 src/inotify.c                             |  78 +--
 src/ip6addr.h                             |   4 +-
 src/ipset.c                               |  44 +-
 src/lease.c                               | 270 ++++----
 src/log.c                                 | 126 ++--
 src/loop.c                                |  26 +-
 src/netlink.c                             | 104 ++--
 src/network.c                             | 434 ++++++-------
 src/option.c                              | 980 +++++++++++++++---------------
 src/outpacket.c                           |  30 +-
 src/poll.c                                |  24 +-
 src/radv-protocol.h                       |   4 +-
 src/radv.c                                | 242 ++++----
 src/rfc1035.c                             | 546 ++++++++---------
 src/rfc2131.c                             | 768 +++++++++++------------
 src/rfc3315.c                             | 654 ++++++++++----------
 src/rrfilter.c                            | 100 +--
 src/slaac.c                               |  50 +-
 src/tables.c                              |  36 +-
 src/tftp.c                                | 170 +++---
 src/util.c                                | 148 ++---
 46 files changed, 4697 insertions(+), 4697 deletions(-)

diff --git a/contrib/MacOSX-launchd/launchd-README.txt b/contrib/MacOSX-launchd/launchd-README.txt
index cf245ff..537333c 100644
--- a/contrib/MacOSX-launchd/launchd-README.txt
+++ b/contrib/MacOSX-launchd/launchd-README.txt
@@ -13,7 +13,7 @@ To use this launchd item for dnsmasq:
 If you don't already have a folder /Library/LaunchDaemons, then create one:
 sudo mkdir /Library/LaunchDaemons
 sudo chown root:admin /Library/LaunchDaemons
-sudo chmod 775 /Library/LaunchDaemons 
+sudo chmod 775 /Library/LaunchDaemons
 
 Copy uk.org.thekelleys.dnsmasq.plist there and then set ownership/permissions:
 sudo cp uk.org.thekelleys.dnsmasq.plist /Library/LaunchDaemons/
diff --git a/contrib/lease-tools/dhcp_lease_time.c b/contrib/lease-tools/dhcp_lease_time.c
index f9d7a85..4c64d84 100644
--- a/contrib/lease-tools/dhcp_lease_time.c
+++ b/contrib/lease-tools/dhcp_lease_time.c
@@ -16,14 +16,14 @@
    and print (to stdout) the time remaining in any lease for the given
    address. The time is given as string printed to stdout.
 
-   If an error occurs or no lease exists for the given address, 
+   If an error occurs or no lease exists for the given address,
    nothing is sent to stdout a message is sent to stderr and a
    non-zero error code is returned.
 
-   This version requires dnsmasq 2.67 or later. 
+   This version requires dnsmasq 2.67 or later.
 */
 
-#include <sys/types.h> 
+#include <sys/types.h>
 #include <netinet/in.h>
 #include <net/if.h>
 #include <arpa/inet.h>
@@ -71,14 +71,14 @@ struct dhcp_packet {
 
 static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt, int minsize)
 {
-  while (*p != OPTION_END) 
+  while (*p != OPTION_END)
     {
       if (p >= end)
         return NULL; /* malformed packet */
       else if (*p == OPTION_PAD)
         p++;
-      else 
-        { 
+      else
+        {
           int opt_len;
           if (p >= end - 2)
             return NULL; /* malformed packet */
@@ -90,14 +90,14 @@ static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt
           p += opt_len + 2;
         }
     }
-  
+
   return opt == OPTION_END ? p : NULL;
 }
- 
+
 static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt_type, int minsize)
 {
   unsigned char *ret, *overload;
-  
+
   /* skip over DHCP cookie; */
   if ((ret = option_find1(&mess->options[0], ((unsigned char *)mess) + size, opt_type, minsize)))
     return ret;
@@ -105,7 +105,7 @@ static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt
   /* look for overload option. */
   if (!(overload = option_find1(&mess->options[0], ((unsigned char *)mess) + size, OPTION_OVERLOAD, 1)))
     return NULL;
-  
+
   /* Can we look in filename area ? */
   if ((overload[2] & 1) &&
       (ret = option_find1(&mess->file[0], &mess->file[128], opt_type, minsize)))
@@ -125,7 +125,7 @@ static unsigned int option_uint(unsigned char *opt, int size)
   unsigned int ret = 0;
   int i;
   unsigned char *p = option_ptr(opt);
-  
+
   for (i = 0; i < size; i++)
     ret = (ret << 8) | *p++;
 
@@ -133,16 +133,16 @@ static unsigned int option_uint(unsigned char *opt, int size)
 }
 
 int main(int argc, char **argv)
-{ 
+{
   struct in_addr lease;
   struct dhcp_packet packet;
   unsigned char *p = packet.options;
   struct sockaddr_in dest;
   int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
   ssize_t rc;
-  
+
   if (argc < 2)
-    { 
+    {
       fprintf(stderr, "usage: dhcp_lease_time <address>\n");
       exit(1);
     }
@@ -152,11 +152,11 @@ int main(int argc, char **argv)
       perror("cannot create socket");
       exit(1);
     }
- 
+
   lease.s_addr = inet_addr(argv[1]);
-   
+
   memset(&packet, 0, sizeof(packet));
- 
+
   packet.hlen = 0;
   packet.htype = 0;
 
@@ -173,14 +173,14 @@ int main(int argc, char **argv)
   *(p++) = OPTION_REQUESTED_OPTIONS;
   *(p++) = 1;
   *(p++) = OPTION_LEASE_TIME;
-  
+
   *(p++) = OPTION_END;
- 
-  dest.sin_family = AF_INET; 
+
+  dest.sin_family = AF_INET;
   dest.sin_addr.s_addr = inet_addr("127.0.0.1");
   dest.sin_port = ntohs(DHCP_SERVER_PORT);
-  
-  if (sendto(fd, &packet, sizeof(packet), 0, 
+
+  if (sendto(fd, &packet, sizeof(packet), 0,
 	     (struct sockaddr *)&dest, sizeof(dest)) == -1)
     {
       perror("sendto failed");
@@ -190,7 +190,7 @@ int main(int argc, char **argv)
   alarm(3); /* noddy timeout. */
 
   rc = recv(fd, &packet, sizeof(packet), 0);
-  
+
   if (rc < (ssize_t)(sizeof(packet) - sizeof(packet.options)))
     {
       perror("recv failed");
diff --git a/contrib/lease-tools/dhcp_release.c b/contrib/lease-tools/dhcp_release.c
index 201fcd3..59f11fd 100644
--- a/contrib/lease-tools/dhcp_release.c
+++ b/contrib/lease-tools/dhcp_release.c
@@ -13,27 +13,27 @@
 /* dhcp_release <interface> <address> <MAC address> <client_id>
    MUST be run as root - will fail otherwise. */
 
-/* Send a DHCPRELEASE message via the specified interface 
-   to tell the local DHCP server to delete a particular lease. 
-   
+/* Send a DHCPRELEASE message via the specified interface
+   to tell the local DHCP server to delete a particular lease.
+
    The interface argument is the interface in which a DHCP
-   request _would_ be received if it was coming from the client, 
+   request _would_ be received if it was coming from the client,
    rather than being faked up here.
-   
-   The address argument is a dotted-quad IP addresses and mandatory. 
-   
-   The MAC address is colon separated hex, and is mandatory. It may be 
+
+   The address argument is a dotted-quad IP addresses and mandatory.
+
+   The MAC address is colon separated hex, and is mandatory. It may be
    prefixed by an address-type byte followed by -, eg
 
    10-11:22:33:44:55:66
 
-   but if the address-type byte is missing it is assumed to be 1, the type 
+   but if the address-type byte is missing it is assumed to be 1, the type
    for ethernet. This encoding is the one used in dnsmasq lease files.
 
    The client-id is optional. If it is "*" then it treated as being missing.
 */
 
-#include <sys/types.h> 
+#include <sys/types.h>
 #include <netinet/in.h>
 #include <net/if.h>
 #include <arpa/inet.h>
@@ -111,13 +111,13 @@ static ssize_t netlink_recv(int fd)
   msg.msg_namelen = 0;
   msg.msg_iov = &iov;
   msg.msg_iovlen = 1;
-    
+
   while (1)
     {
       msg.msg_flags = 0;
       while ((rc = recvmsg(fd, &msg, MSG_PEEK)) == -1 && errno == EINTR);
-      
-      /* 2.2.x doesn't support MSG_PEEK at all, returning EOPNOTSUPP, so we just grab a 
+
+      /* 2.2.x doesn't support MSG_PEEK at all, returning EOPNOTSUPP, so we just grab a
          big buffer and pray in that case. */
       if (rc == -1 && errno == EOPNOTSUPP)
         {
@@ -125,17 +125,17 @@ static ssize_t netlink_recv(int fd)
             return -1;
           break;
         }
-      
+
       if (rc == -1 || !(msg.msg_flags & MSG_TRUNC))
         break;
-            
+
       if (!expand_buf(&iov, iov.iov_len + 100))
         return -1;
     }
 
   /* finally, read it for real */
   while ((rc = recvmsg(fd, &msg, 0)) == -1 && errno == EINTR);
-  
+
   return rc;
 }
 
@@ -143,16 +143,16 @@ static int parse_hex(char *in, unsigned char *out, int maxlen, int *mac_type)
 {
   int i = 0;
   char *r;
-    
+
   if (mac_type)
     *mac_type = 0;
-  
+
   while (maxlen == -1 || i < maxlen)
     {
       for (r = in; *r != 0 && *r != ':' && *r != '-'; r++);
       if (*r == 0)
         maxlen = i;
-      
+
       if (r != in )
         {
           if (*r == '-' && i == 0 && mac_type)
@@ -183,10 +183,10 @@ static struct in_addr find_interface(struct in_addr client, int fd, unsigned int
   struct sockaddr_nl addr;
   struct nlmsghdr *h;
   ssize_t len;
- 
+
   struct {
     struct nlmsghdr nlh;
-    struct rtgenmsg g; 
+    struct rtgenmsg g;
   } req;
 
   addr.nl_family = AF_NETLINK;
@@ -196,18 +196,18 @@ static struct in_addr find_interface(struct in_addr client, int fd, unsigned int
 
   req.nlh.nlmsg_len = sizeof(req);
   req.nlh.nlmsg_type = RTM_GETADDR;
-  req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST | NLM_F_ACK; 
+  req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST | NLM_F_ACK;
   req.nlh.nlmsg_pid = 0;
   req.nlh.nlmsg_seq = 1;
-  req.g.rtgen_family = AF_INET; 
+  req.g.rtgen_family = AF_INET;
 
-  if (sendto(fd, (void *)&req, sizeof(req), 0, 
+  if (sendto(fd, (void *)&req, sizeof(req), 0,
 	     (struct sockaddr *)&addr, sizeof(addr)) == -1)
     {
       perror("sendto failed");
       exit(1);
     }
-  
+
   while (1)
     {
       if ((len = netlink_recv(fd)) == -1)
@@ -221,32 +221,32 @@ static struct in_addr find_interface(struct in_addr client, int fd, unsigned int
 	  exit(0);
 	else if (h->nlmsg_type == RTM_NEWADDR)
           {
-            struct ifaddrmsg *ifa = NLMSG_DATA(h);  
+            struct ifaddrmsg *ifa = NLMSG_DATA(h);
             struct rtattr *rta;
             unsigned int len1 = h->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa));
-            
+
             if (ifa->ifa_index == index && ifa->ifa_family == AF_INET)
               {
                 struct in_addr netmask, addr;
-                
+
                 netmask.s_addr = htonl(0xffffffff << (32 - ifa->ifa_prefixlen));
                 addr.s_addr = 0;
-                
+
                 for (rta = IFA_RTA(ifa); RTA_OK(rta, len1); rta = RTA_NEXT(rta, len1))
 		  if (rta->rta_type == IFA_LOCAL)
 		    addr = *((struct in_addr *)(rta+1));
-		
+
                 if (addr.s_addr && is_same_net(addr, client, netmask))
 		  return addr;
 	      }
 	  }
     }
- 
+
   exit(0);
 }
 
 int main(int argc, char **argv)
-{ 
+{
   struct in_addr server, lease;
   int mac_type;
   struct dhcp_packet packet;
@@ -257,7 +257,7 @@ int main(int argc, char **argv)
   int nl = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
 
   if (argc < 4 || argc > 5)
-    { 
+    {
       fprintf(stderr, "usage: dhcp_release <interface> <addr> <mac> [<client_id>]\n");
       exit(1);
     }
@@ -267,8 +267,8 @@ int main(int argc, char **argv)
       perror("cannot create socket");
       exit(1);
     }
-  
-  /* This voodoo fakes up a packet coming from the correct interface, which really matters for 
+
+  /* This voodoo fakes up a packet coming from the correct interface, which really matters for
      a DHCP server */
   strcpy(ifr.ifr_name, argv[1]);
   if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr)) == -1)
@@ -276,18 +276,18 @@ int main(int argc, char **argv)
       perror("cannot setup interface");
       exit(1);
     }
-  
+
   if (inet_addr(argv[2]) == INADDR_NONE)
     {
       perror("invalid ip address");
       exit(1);
     }
-  
+
   lease.s_addr = inet_addr(argv[2]);
   server = find_interface(lease, nl, if_nametoindex(argv[1]));
-  
+
   memset(&packet, 0, sizeof(packet));
- 
+
   packet.hlen = parse_hex(argv[3], packet.chaddr, DHCP_CHADDR_MAX, &mac_type);
   if (mac_type == 0)
     packet.htype = ARPHRD_ETHER;
@@ -314,14 +314,14 @@ int main(int argc, char **argv)
       *(p++) = clid_len;
       p += clid_len;
     }
-  
+
   *(p++) = OPTION_END;
- 
+
   dest.sin_family = AF_INET;
   dest.sin_port = ntohs(DHCP_SERVER_PORT);
   dest.sin_addr = server;
 
-  if (sendto(fd, &packet, sizeof(packet), 0, 
+  if (sendto(fd, &packet, sizeof(packet), 0,
 	     (struct sockaddr *)&dest, sizeof(dest)) == -1)
     {
       perror("sendto failed");
diff --git a/contrib/lease-tools/dhcp_release6.c b/contrib/lease-tools/dhcp_release6.c
index 2e0beff..8ec6ccf 100644
--- a/contrib/lease-tools/dhcp_release6.c
+++ b/contrib/lease-tools/dhcp_release6.c
@@ -6,29 +6,29 @@
 
 /* Send a DHCPRELEASE message  to IPv6 multicast address  via the specified interface
  to tell the local DHCP server to delete a particular lease.
- 
+
  The interface argument is the interface in which a DHCP
  request _would_ be received if it was coming from the client,
  rather than being faked up here.
- 
+
  The client-id argument is colon-separated hex string and mandatory. Normally
  it can be found in leases file both on client and server
 
  The server-id argument is colon-separated hex string and mandatory. Normally
  it can be found in leases file both on client and server.
- 
+
  The iaid argument is numeric string and mandatory. Normally
  it can be found in leases file both on client and server.
- 
+
  IP is an IPv6 address to release
- 
+
  If --dry-run is specified, dhcp_release6 just prints hexadecimal representation of
  packet to send to stdout and exits.
- 
+
  If --help is specified, dhcp_release6 print usage information to stdout and exits
- 
- 
- 
+
+
+
  */
 #include <stdio.h>
 #include <stdlib.h>
@@ -60,7 +60,7 @@ enum DHCP6_TYPES{
     INFORMATION_REQUEST = 11,
     RELAY_FORW = 12,
     RELAY_REPL = 13
-    
+
 };
 enum DHCP6_OPTIONS{
     CLIENTID = 1,
@@ -120,8 +120,8 @@ struct dhcp6_iaaddr_option{
     struct in6_addr ip;
     uint32_t preferred_lifetime;
     uint32_t valid_lifetime;
-    
-    
+
+
 };
 
 struct dhcp6_iana_option{
@@ -137,11 +137,11 @@ struct dhcp6_iana_option{
 struct dhcp6_packet{
     size_t len;
     char buf[2048];
-    
+
 } ;
 
 size_t pack_duid(const char* str, char* dst){
-    
+
     char* tmp = strdup(str);
     char* tmp_to_free = tmp;
     char *ptr;
@@ -150,7 +150,7 @@ size_t pack_duid(const char* str, char* dst){
         dst[write_pos] = (uint8_t) strtol(ptr, NULL, 16);
         write_pos += 1;
         tmp = NULL;
-        
+
     }
     free(tmp_to_free);
     return write_pos;
@@ -207,7 +207,7 @@ struct dhcp6_packet create_release_packet(const char* iaid, const char* ip, cons
     result.buf[0] = RELEASE;
     /* tx_id */
     bzero(result.buf+1, 3);
-    
+
     struct dhcp6_option client_option = create_client_id_option(client_id);
     struct dhcp6_option server_option = create_server_id_option(server_id);
     struct dhcp6_iaaddr_option iaaddr_option = create_iaadr_option(ip);
@@ -274,7 +274,7 @@ int16_t parse_packet(char* buf, size_t len){
                 fprintf(stderr, "Error: %d %s\n", status, option_value);
                 return status;
             }
-            
+
         }
         if (option_type == IA_NA ){
             uint16_t result = parse_iana_suboption(buf + current_pos +24, option_len -24);
@@ -291,11 +291,11 @@ int16_t parse_packet(char* buf, size_t len){
 void usage(const char* arg, FILE* stream){
     const char* usage_string ="--ip IPv6 --iface IFACE --server-id SERVER_ID --client-id CLIENT_ID --iaid IAID [--dry-run] | --help";
     fprintf (stream, "Usage: %s %s\n", arg, usage_string);
-    
+
 }
 
 int send_release_packet(const char* iface, struct dhcp6_packet* packet){
-    
+
     struct sockaddr_in6 server_addr, client_addr;
     char response[1400];
     int sock = socket(PF_INET6, SOCK_DGRAM, 0);
@@ -345,7 +345,7 @@ int send_release_packet(const char* iface, struct dhcp6_packet* packet){
     }
     fprintf(stderr, "Response timed out\n");
     return -1;
-    
+
 }
 
 
@@ -399,9 +399,9 @@ int main(int argc, char *  const argv[]) {
                 return -1;
              default:
                 abort();
-                
+
         }
-        
+
     }
     if (iaid == UNINITIALIZED){
         fprintf(stderr, "Missing required iaid parameter\n");
@@ -441,5 +441,5 @@ int main(int argc, char *  const argv[]) {
         return 0;
     }
     return send_release_packet(iface, &packet);
-    
+
 }
diff --git a/src/arp.c b/src/arp.c
index 97490bd..76c10dc 100644
--- a/src/arp.c
+++ b/src/arp.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -27,7 +27,7 @@
 struct arp_record {
   unsigned short hwlen, status;
   int family;
-  unsigned char hwaddr[DHCP_CHADDR_MAX]; 
+  unsigned char hwaddr[DHCP_CHADDR_MAX];
   struct all_addr addr;
   struct arp_record *next;
 };
@@ -54,7 +54,7 @@ static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *p
     {
       if (family != arp->family || arp->status == ARP_NEW)
 	continue;
-      
+
       if (family == AF_INET)
 	{
 	  if (arp->addr.addr.addr4.s_addr != ((struct in_addr *)addrp)->s_addr)
@@ -80,7 +80,7 @@ static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *p
 	arp->status = ARP_FOUND;
       else
 	continue;
-      
+
       break;
     }
 
@@ -94,7 +94,7 @@ static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *p
 	}
       else if (!(arp = whine_malloc(sizeof(struct arp_record))))
 	return 1;
-      
+
       arp->next = arps;
       arps = arp;
       arp->status = ARP_NEW;
@@ -108,7 +108,7 @@ static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *p
 	memcpy(&arp->addr.addr.addr6, addrp, IN6ADDRSZ);
 #endif
     }
-  
+
   return 1;
 }
 
@@ -119,7 +119,7 @@ int find_mac(union mysockaddr *addr, unsigned char *mac, int lazy, time_t now)
   int updated = 0;
 
  again:
-  
+
   /* If the database is less then INTERVAL old, look in there */
   if (difftime(now, last) < INTERVAL)
     {
@@ -131,17 +131,17 @@ int find_mac(union mysockaddr *addr, unsigned char *mac, int lazy, time_t now)
 	{
 	  if (addr->sa.sa_family != arp->family)
 	    continue;
-	    
+
 	  if (arp->family == AF_INET &&
 	      arp->addr.addr.addr4.s_addr != addr->in.sin_addr.s_addr)
 	    continue;
-	    
+
 #ifdef HAVE_IPV6
-	  if (arp->family == AF_INET6 && 
+	  if (arp->family == AF_INET6 &&
 	      !IN6_ARE_ADDR_EQUAL(&arp->addr.addr.addr6, &addr->in6.sin6_addr))
 	    continue;
 #endif
-	  
+
 	  /* Only accept positive entries unless in lazy mode. */
 	  if (arp->status != ARP_EMPTY || lazy || updated)
 	    {
@@ -162,14 +162,14 @@ int find_mac(union mysockaddr *addr, unsigned char *mac, int lazy, time_t now)
        for (arp = arps; arp; arp = arp->next)
 	 if (arp->status != ARP_EMPTY)
 	   arp->status = ARP_MARK;
-       
+
        iface_enumerate(AF_UNSPEC, NULL, filter_mac);
-       
+
        /* Remove all unconfirmed entries to old list. */
        for (arp = arps, up = &arps; arp; arp = tmp)
 	 {
 	   tmp = arp->next;
-	   
+
 	   if (arp->status == ARP_MARK)
 	     {
 	       *up = arp->next;
@@ -192,9 +192,9 @@ int find_mac(union mysockaddr *addr, unsigned char *mac, int lazy, time_t now)
     }
   else
     arp = whine_malloc(sizeof(struct arp_record));
-  
+
   if (arp)
-    {      
+    {
       arp->next = arps;
       arps = arp;
       arp->status = ARP_EMPTY;
@@ -208,14 +208,14 @@ int find_mac(union mysockaddr *addr, unsigned char *mac, int lazy, time_t now)
 	memcpy(&arp->addr.addr.addr6, &addr->in6.sin6_addr, IN6ADDRSZ);
 #endif
     }
-	  
+
    return 0;
 }
 
 int do_arp_script_run(void)
 {
   struct arp_record *arp;
-  
+
   /* Notify any which went, then move to free list */
   if (old)
     {
diff --git a/src/auth.c b/src/auth.c
index 7f95f98..7c68f8b 100644
--- a/src/auth.c
+++ b/src/auth.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -24,12 +24,12 @@ static struct addrlist *find_addrlist(struct addrlist *list, int flag, struct al
     if (!(list->flags & ADDRLIST_IPV6))
       {
 	struct in_addr netmask, addr = addr_u->addr.addr4;
-	
+
 	if (!(flag & F_IPV4))
 	  continue;
-	
+
 	netmask.s_addr = htonl(~(in_addr_t)0 << (32 - list->prefixlen));
-	
+
 	if  (is_same_net(addr, list->addr.addr.addr4, netmask))
 	  return list;
       }
@@ -37,9 +37,9 @@ static struct addrlist *find_addrlist(struct addrlist *list, int flag, struct al
     else if (is_same_net6(&(addr_u->addr.addr6), &list->addr.addr.addr6, list->prefixlen))
       return list;
 #endif
-    
+
   } while ((list = list->next));
-  
+
   return NULL;
 }
 
@@ -47,7 +47,7 @@ static struct addrlist *find_subnet(struct auth_zone *zone, int flag, struct all
 {
   if (!zone->subnet)
     return NULL;
-  
+
   return find_addrlist(zone->subnet, flag, addr_u);
 }
 
@@ -55,7 +55,7 @@ static struct addrlist *find_exclude(struct auth_zone *zone, int flag, struct al
 {
   if (!zone->exclude)
     return NULL;
-  
+
   return find_addrlist(zone->exclude, flag, addr_u);
 }
 
@@ -67,7 +67,7 @@ static int filter_zone(struct auth_zone *zone, int flag, struct all_addr *addr_u
   /* No subnets specified, no filter */
   if (!zone->subnet)
     return 1;
-  
+
   return find_subnet(zone, flag, addr_u) != NULL;
 }
 
@@ -78,18 +78,18 @@ int in_zone(struct auth_zone *zone, char *name, char **cut)
 
   if (cut)
     *cut = NULL;
-  
-  if (namelen >= domainlen && 
+
+  if (namelen >= domainlen &&
       hostname_isequal(zone->domain, &name[namelen - domainlen]))
     {
-      
+
       if (namelen == domainlen)
 	return 1;
-      
+
       if (name[namelen - domainlen - 1] == '.')
 	{
 	  if (cut)
-	    *cut = &name[namelen - domainlen - 1]; 
+	    *cut = &name[namelen - domainlen - 1];
 	  return 1;
 	}
     }
@@ -98,8 +98,8 @@ int in_zone(struct auth_zone *zone, char *name, char **cut)
 }
 
 
-size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr, 
-		   int local_query, int do_bit, int have_pseudoheader) 
+size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr,
+		   int local_query, int do_bit, int have_pseudoheader)
 {
   char *name = daemon->namebuff;
   unsigned char *p, *ansp;
@@ -118,14 +118,14 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
   struct all_addr addr;
   struct cname *a, *candidate;
   unsigned int wclen;
-  
+
   if (ntohs(header->qdcount) == 0 || OPCODE(header) != QUERY )
     return 0;
 
   /* determine end of question section (we put answers there) */
   if (!(ansp = skip_questions(header, qlen)))
     return 0; /* bad packet */
-  
+
   /* now process each question, answers go in RRs after the question */
   p = (unsigned char *)(header+1);
 
@@ -134,17 +134,17 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
       unsigned short flag = 0;
       int found = 0;
       int cname_wildcard = 0;
-  
+
       /* save pointer to name for copying into answers */
       nameoffset = p - (unsigned char *)header;
 
       /* now extract name as .-concatenated string into name */
       if (!extract_name(header, qlen, &p, name, 1, 4))
 	return 0; /* bad packet */
- 
-      GETSHORT(qtype, p); 
+
+      GETSHORT(qtype, p);
       GETSHORT(qclass, p);
-      
+
       if (qclass != C_IN)
 	{
 	  auth = 0;
@@ -158,7 +158,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 	  for (zone = daemon->auth_zones; zone; zone = zone->next)
 	    if ((subnet = find_subnet(zone, flag, &addr)))
 	      break;
-	  
+
 	  if (!zone)
 	    {
 	      auth = 0;
@@ -178,11 +178,11 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 	    for (intr = daemon->int_names; intr; intr = intr->next)
 	      {
 		struct addrlist *addrlist;
-		
+
 		for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
 		  if (!(addrlist->flags & ADDRLIST_IPV6) && addr.addr.addr4.s_addr == addrlist->addr.addr.addr4.s_addr)
 		    break;
-		
+
 		if (addrlist)
 		  break;
 		else
@@ -194,11 +194,11 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 	    for (intr = daemon->int_names; intr; intr = intr->next)
 	      {
 		struct addrlist *addrlist;
-		
+
 		for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
 		  if ((addrlist->flags & ADDRLIST_IPV6) && IN6_ARE_ADDR_EQUAL(&addr.addr.addr6, &addrlist->addr.addr.addr6))
 		    break;
-		
+
 		if (addrlist)
 		  break;
 		else
@@ -206,30 +206,30 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		    intr = intr->next;
 	      }
 #endif
-	  
+
 	  if (intr)
 	    {
 	      if (local_query || in_zone(zone, intr->name, NULL))
-		{	
+		{
 		  found = 1;
 		  log_query(flag | F_REVERSE | F_CONFIG, intr->name, &addr, NULL);
-		  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+		  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 					  daemon->auth_ttl, NULL,
 					  T_PTR, C_IN, "d", intr->name))
 		    anscount++;
 		}
 	    }
-	  
+
 	  if ((crecp = cache_find_by_addr(NULL, &addr, now, flag)))
-	    do { 
+	    do {
 	      strcpy(name, cache_get_name(crecp));
-	      
+
 	      if (crecp->flags & F_DHCP && !option_bool(OPT_DHCP_FQDN))
 		{
 		  char *p = strchr(name, '.');
 		  if (p)
 		    *p = 0; /* must be bare name */
-		  
+
 		  /* add  external domain */
 		  if (zone)
 		    {
@@ -238,7 +238,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		    }
 		  log_query(flag | F_DHCP | F_REVERSE, name, &addr, record_source(crecp->uid));
 		  found = 1;
-		  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+		  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 					  daemon->auth_ttl, NULL,
 					  T_PTR, C_IN, "d", name))
 		    anscount++;
@@ -247,14 +247,14 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		{
 		  log_query(crecp->flags & ~F_FORWARD, name, &addr, record_source(crecp->uid));
 		  found = 1;
-		  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+		  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 					  daemon->auth_ttl, NULL,
 					  T_PTR, C_IN, "d", name))
 		    anscount++;
 		}
 	      else
 		continue;
-		    
+
 	    } while ((crecp = cache_find_by_addr(crecp, &addr, now, flag)));
 
 	  if (found)
@@ -264,7 +264,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 
 	  continue;
 	}
-      
+
     cname_restart:
       if (found)
 	/* NS and SOA .arpa requests have set found above. */
@@ -274,7 +274,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 	  for (zone = daemon->auth_zones; zone; zone = zone->next)
 	    if (in_zone(zone, name, &cut))
 	      break;
-	  
+
 	  if (!zone)
 	    {
 	      auth = 0;
@@ -286,33 +286,33 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 	if (!rec->issrv && hostname_isequal(name, rec->name))
 	  {
 	    nxdomain = 0;
-	         
+
 	    if (qtype == T_MX)
 	      {
 		found = 1;
-		log_query(F_CONFIG | F_RRNAME, name, NULL, "<MX>"); 
+		log_query(F_CONFIG | F_RRNAME, name, NULL, "<MX>");
 		if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->auth_ttl,
 					NULL, T_MX, C_IN, "sd", rec->weight, rec->target))
 		  anscount++;
 	      }
 	  }
-      
+
       for (move = NULL, up = &daemon->mxnames, rec = daemon->mxnames; rec; rec = rec->next)
 	if (rec->issrv && hostname_isequal(name, rec->name))
 	  {
 	    nxdomain = 0;
-	    
+
 	    if (qtype == T_SRV)
 	      {
 		found = 1;
-		log_query(F_CONFIG | F_RRNAME, name, NULL, "<SRV>"); 
+		log_query(F_CONFIG | F_RRNAME, name, NULL, "<SRV>");
 		if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->auth_ttl,
-					NULL, T_SRV, C_IN, "sssd", 
+					NULL, T_SRV, C_IN, "sssd",
 					rec->priority, rec->weight, rec->srvport, rec->target))
 
 		  anscount++;
-	      } 
-	    
+	      }
+
 	    /* unlink first SRV record found */
 	    if (!move)
 	      {
@@ -320,11 +320,11 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		*up = rec->next;
 	      }
 	    else
-	      up = &rec->next;      
+	      up = &rec->next;
 	  }
 	else
 	  up = &rec->next;
-	  
+
       /* put first SRV record back at the end. */
       if (move)
 	{
@@ -339,13 +339,13 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 	    if (txt->class == qtype)
 	      {
 		found = 1;
-		log_query(F_CONFIG | F_RRNAME, name, NULL, "<RR>"); 
+		log_query(F_CONFIG | F_RRNAME, name, NULL, "<RR>");
 		if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->auth_ttl,
 					NULL, txt->class, C_IN, "t", txt->len, txt->txt))
 		  anscount++;
 	      }
 	  }
-      
+
       for (txt = daemon->txt; txt; txt = txt->next)
 	if (txt->class == C_IN && hostname_isequal(name, txt->name))
 	  {
@@ -353,7 +353,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 	    if (qtype == T_TXT)
 	      {
 		found = 1;
-		log_query(F_CONFIG | F_RRNAME, name, NULL, "<TXT>"); 
+		log_query(F_CONFIG | F_RRNAME, name, NULL, "<TXT>");
 		if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->auth_ttl,
 					NULL, T_TXT, C_IN, "t", txt->len, txt->txt))
 		  anscount++;
@@ -368,30 +368,30 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 	       {
 		 found = 1;
 		 log_query(F_CONFIG | F_RRNAME, name, NULL, "<NAPTR>");
-		 if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->auth_ttl, 
-					 NULL, T_NAPTR, C_IN, "sszzzd", 
+		 if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->auth_ttl,
+					 NULL, T_NAPTR, C_IN, "sszzzd",
 					 na->order, na->pref, na->flags, na->services, na->regexp, na->replace))
 			  anscount++;
 	       }
 	   }
-    
+
        if (qtype == T_A)
 	 flag = F_IPV4;
-       
+
 #ifdef HAVE_IPV6
        if (qtype == T_AAAA)
 	 flag = F_IPV6;
 #endif
-       
+
        for (intr = daemon->int_names; intr; intr = intr->next)
 	 if (hostname_isequal(name, intr->name))
 	   {
 	     struct addrlist *addrlist;
-	     
+
 	     nxdomain = 0;
-	     
+
 	     if (flag)
-	       for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)  
+	       for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
 		 if (((addrlist->flags & ADDRLIST_IPV6)  ? T_AAAA : T_A) == qtype &&
 		     (local_query || filter_zone(zone, flag, &addrlist->addr)))
 		   {
@@ -401,17 +401,17 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 #endif
 		     found = 1;
 		     log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
-		     if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
-					     daemon->auth_ttl, NULL, qtype, C_IN, 
+		     if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
+					     daemon->auth_ttl, NULL, qtype, C_IN,
 					     qtype == T_A ? "4" : "6", &addrlist->addr))
 		       anscount++;
 		   }
 	     }
-       
+
       if (!cut)
 	{
 	  nxdomain = 0;
-	  
+
 	  if (qtype == T_SOA)
 	    {
 	      auth = soa = 1; /* inhibits auth section */
@@ -421,21 +421,21 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
       	  else if (qtype == T_AXFR)
 	    {
 	      struct iname *peers;
-	      
+
 	      if (peer_addr->sa.sa_family == AF_INET)
 		peer_addr->in.sin_port = 0;
 #ifdef HAVE_IPV6
 	      else
 		{
-		  peer_addr->in6.sin6_port = 0; 
+		  peer_addr->in6.sin6_port = 0;
 		  peer_addr->in6.sin6_scope_id = 0;
 		}
 #endif
-	      
+
 	      for (peers = daemon->auth_peers; peers; peers = peers->next)
 		if (sockaddr_isequal(peer_addr, &peers->addr))
 		  break;
-	      
+
 	      /* Refuse all AXFR unless --auth-sec-servers is set */
 	      if ((!peers && daemon->auth_peers) || !daemon->secondary_forward_server)
 		{
@@ -443,13 +443,13 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		    inet_ntop(AF_INET, &peer_addr->in.sin_addr, daemon->addrbuff, ADDRSTRLEN);
 #ifdef HAVE_IPV6
 		  else
-		    inet_ntop(AF_INET6, &peer_addr->in6.sin6_addr, daemon->addrbuff, ADDRSTRLEN); 
+		    inet_ntop(AF_INET6, &peer_addr->in6.sin6_addr, daemon->addrbuff, ADDRSTRLEN);
 #endif
-		  
+
 		  my_syslog(LOG_WARNING, _("ignoring zone transfer request from %s"), daemon->addrbuff);
 		  return 0;
 		}
-	       	      
+
 	      auth = 1;
 	      soa = 1; /* inhibits auth section */
 	      ns = 1; /* ensure we include NS records! */
@@ -463,70 +463,70 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 	      auth = 1;
 	      ns = 1; /* inhibits auth section */
 	      found = 1;
-	      log_query(F_RRNAME | F_AUTH, zone->domain, NULL, "<NS>"); 
+	      log_query(F_RRNAME | F_AUTH, zone->domain, NULL, "<NS>");
 	    }
 	}
-      
+
       if (!option_bool(OPT_DHCP_FQDN) && cut)
-	{	  
+	{
 	  *cut = 0; /* remove domain part */
-	  
+
 	  if (!strchr(name, '.') && (crecp = cache_find_by_name(NULL, name, now, F_IPV4 | F_IPV6)))
 	    {
 	      if (crecp->flags & F_DHCP)
 		do
-		  { 
+		  {
 		    nxdomain = 0;
-		    if ((crecp->flags & flag) && 
+		    if ((crecp->flags & flag) &&
 			(local_query || filter_zone(zone, flag, &(crecp->addr.addr))))
 		      {
 			*cut = '.'; /* restore domain part */
 			log_query(crecp->flags, name, &crecp->addr.addr, record_source(crecp->uid));
 			*cut  = 0; /* remove domain part */
 			found = 1;
-			if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
-						daemon->auth_ttl, NULL, qtype, C_IN, 
+			if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
+						daemon->auth_ttl, NULL, qtype, C_IN,
 						qtype == T_A ? "4" : "6", &crecp->addr))
 			  anscount++;
 		      }
 		  } while ((crecp = cache_find_by_name(crecp, name, now,  F_IPV4 | F_IPV6)));
 	    }
-       	  
-	  *cut = '.'; /* restore domain part */	    
+
+	  *cut = '.'; /* restore domain part */
 	}
-      
+
       if ((crecp = cache_find_by_name(NULL, name, now, F_IPV4 | F_IPV6)))
 	{
 	  if ((crecp->flags & F_HOSTS) || (((crecp->flags & F_DHCP) && option_bool(OPT_DHCP_FQDN))))
 	    do
-	      { 
+	      {
 		 nxdomain = 0;
 		 if ((crecp->flags & flag) && (local_query || filter_zone(zone, flag, &(crecp->addr.addr))))
 		   {
 		     log_query(crecp->flags, name, &crecp->addr.addr, record_source(crecp->uid));
 		     found = 1;
-		     if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
-					     daemon->auth_ttl, NULL, qtype, C_IN, 
+		     if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
+					     daemon->auth_ttl, NULL, qtype, C_IN,
 					     qtype == T_A ? "4" : "6", &crecp->addr))
 		       anscount++;
 		   }
 	      } while ((crecp = cache_find_by_name(crecp, name, now, F_IPV4 | F_IPV6)));
 	}
-      
+
       /* Only supply CNAME if no record for any type is known. */
       if (nxdomain)
 	{
-	  /* Check for possible wildcard match against *.domain 
+	  /* Check for possible wildcard match against *.domain
 	     return length of match, to get longest.
 	     Note that if return length of wildcard section, so
 	     we match b.simon to _both_ *.simon and b.simon
 	     but return a longer (better) match to b.simon.
-	  */  
+	  */
 	  for (wclen = 0, candidate = NULL, a = daemon->cnames; a; a = a->next)
 	    if (a->alias[0] == '*')
 	      {
 		char *test = name;
-		
+
 		while ((test = strchr(test+1, '.')))
 		  {
 		    if (hostname_isequal(test, &(a->alias[1])))
@@ -540,7 +540,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 			break;
 		      }
 		  }
-		
+
 	      }
 	    else if (hostname_isequal(a->alias, name) && strlen(a->alias) > wclen)
 	      {
@@ -548,7 +548,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		wclen = strlen(a->alias);
 		candidate = a;
 	      }
-	  
+
 	  if (candidate)
 	    {
 	      log_query(F_CONFIG | F_CNAME, name, NULL, NULL);
@@ -559,19 +559,19 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		  strcat(name, zone->domain);
 		}
 	      found = 1;
-	      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+	      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 				      daemon->auth_ttl, &nameoffset,
 				      T_CNAME, C_IN, "d", name))
 		anscount++;
-	      
+
 	      goto cname_restart;
 	    }
 
 	  log_query(flag | F_NEG | (nxdomain ? F_NXDOMAIN : 0) | F_FORWARD | F_AUTH, name, NULL, NULL);
 	}
-      
+
     }
-  
+
   /* Add auth section */
   if (auth && zone)
     {
@@ -583,14 +583,14 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
       else
 	{
 	  /* handle NS and SOA for PTR records */
-	  
+
 	  authname = name;
 
 	  if (!(subnet->flags & ADDRLIST_IPV6))
 	    {
 	      in_addr_t a = ntohl(subnet->addr.addr.addr4.s_addr) >> 8;
 	      char *p = name;
-	      
+
 	      if (subnet->prefixlen >= 24)
 		p += sprintf(p, "%u.", a & 0xff);
 	      a = a >> 8;
@@ -598,33 +598,33 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		p += sprintf(p, "%u.", a & 0xff);
 	      a = a >> 8;
 	      p += sprintf(p, "%u.in-addr.arpa", a & 0xff);
-	      
+
 	    }
 #ifdef HAVE_IPV6
 	  else
 	    {
 	      char *p = name;
 	      int i;
-	      
+
 	      for (i = subnet->prefixlen-1; i >= 0; i -= 4)
-		{ 
+		{
 		  int dig = ((unsigned char *)&subnet->addr.addr.addr6)[i>>3];
 		  p += sprintf(p, "%.1x.", (i>>2) & 1 ? dig & 15 : dig >> 4);
 		}
 	      p += sprintf(p, "ip6.arpa");
-	      
+
 	    }
 #endif
 	}
-      
+
       /* handle NS and SOA in auth section or for explicit queries */
        newoffset = ansp - (unsigned char *)header;
        if (((anscount == 0 && !ns) || soa) &&
-	  add_resource_record(header, limit, &trunc, 0, &ansp, 
+	  add_resource_record(header, limit, &trunc, 0, &ansp,
 			      daemon->auth_ttl, NULL, T_SOA, C_IN, "ddlllll",
 			      authname, daemon->authserver,  daemon->hostmaster,
-			      daemon->soa_sn, daemon->soa_refresh, 
-			      daemon->soa_retry, daemon->soa_expiry, 
+			      daemon->soa_sn, daemon->soa_refresh,
+			      daemon->soa_retry, daemon->soa_expiry,
 			      daemon->auth_ttl))
 	{
 	  offset = newoffset;
@@ -633,18 +633,18 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 	  else
 	    authcount++;
 	}
-      
+
       if (anscount != 0 || ns)
 	{
 	  struct name_list *secondary;
-	  
+
 	  newoffset = ansp - (unsigned char *)header;
-	  if (add_resource_record(header, limit, &trunc, -offset, &ansp, 
+	  if (add_resource_record(header, limit, &trunc, -offset, &ansp,
 				  daemon->auth_ttl, NULL, T_NS, C_IN, "d", offset == 0 ? authname : NULL, daemon->authserver))
 	    {
-	      if (offset == 0) 
+	      if (offset == 0)
 		offset = newoffset;
-	      if (ns) 
+	      if (ns)
 		anscount++;
 	      else
 		authcount++;
@@ -652,16 +652,16 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 
 	  if (!subnet)
 	    for (secondary = daemon->secondary_forward_server; secondary; secondary = secondary->next)
-	      if (add_resource_record(header, limit, &trunc, offset, &ansp, 
+	      if (add_resource_record(header, limit, &trunc, offset, &ansp,
 				      daemon->auth_ttl, NULL, T_NS, C_IN, "d", secondary->name))
 		{
-		  if (ns) 
+		  if (ns)
 		    anscount++;
 		  else
 		    authcount++;
 		}
 	}
-      
+
       if (axfr)
 	{
 	  for (rec = daemon->mxnames; rec; rec = rec->next)
@@ -675,7 +675,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		    if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, daemon->auth_ttl,
 					    NULL, T_SRV, C_IN, "sssd", cut ? rec->name : NULL,
 					    rec->priority, rec->weight, rec->srvport, rec->target))
-		      
+
 		      anscount++;
 		  }
 		else
@@ -684,87 +684,87 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 					    NULL, T_MX, C_IN, "sd", cut ? rec->name : NULL, rec->weight, rec->target))
 		      anscount++;
 		  }
-		
+
 		/* restore config data */
 		if (cut)
 		  *cut = '.';
 	      }
-	      
+
 	  for (txt = daemon->rr; txt; txt = txt->next)
 	    if (in_zone(zone, txt->name, &cut))
 	      {
 		if (cut)
 		  *cut = 0;
-		
+
 		if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, daemon->auth_ttl,
 					NULL, txt->class, C_IN, "t",  cut ? txt->name : NULL, txt->len, txt->txt))
 		  anscount++;
-		
+
 		/* restore config data */
 		if (cut)
 		  *cut = '.';
 	      }
-	  
+
 	  for (txt = daemon->txt; txt; txt = txt->next)
 	    if (txt->class == C_IN && in_zone(zone, txt->name, &cut))
 	      {
 		if (cut)
 		  *cut = 0;
-		
+
 		if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, daemon->auth_ttl,
 					NULL, T_TXT, C_IN, "t", cut ? txt->name : NULL, txt->len, txt->txt))
 		  anscount++;
-		
+
 		/* restore config data */
 		if (cut)
 		  *cut = '.';
 	      }
-	  
+
 	  for (na = daemon->naptr; na; na = na->next)
 	    if (in_zone(zone, na->name, &cut))
 	      {
 		if (cut)
 		  *cut = 0;
-		
-		if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, daemon->auth_ttl, 
+
+		if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, daemon->auth_ttl,
 					NULL, T_NAPTR, C_IN, "sszzzd", cut ? na->name : NULL,
 					na->order, na->pref, na->flags, na->services, na->regexp, na->replace))
 		  anscount++;
-		
+
 		/* restore config data */
 		if (cut)
-		  *cut = '.'; 
+		  *cut = '.';
 	      }
-	  
+
 	  for (intr = daemon->int_names; intr; intr = intr->next)
 	    if (in_zone(zone, intr->name, &cut))
 	      {
 		struct addrlist *addrlist;
-		
+
 		if (cut)
 		  *cut = 0;
-		
-		for (addrlist = intr->addr; addrlist; addrlist = addrlist->next) 
+
+		for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
 		  if (!(addrlist->flags & ADDRLIST_IPV6) &&
-		      (local_query || filter_zone(zone, F_IPV4, &addrlist->addr)) && 
-		      add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
+		      (local_query || filter_zone(zone, F_IPV4, &addrlist->addr)) &&
+		      add_resource_record(header, limit, &trunc, -axfroffset, &ansp,
 					  daemon->auth_ttl, NULL, T_A, C_IN, "4", cut ? intr->name : NULL, &addrlist->addr))
 		    anscount++;
-		
+
 #ifdef HAVE_IPV6
-		for (addrlist = intr->addr; addrlist; addrlist = addrlist->next) 
-		  if ((addrlist->flags & ADDRLIST_IPV6) && 
+		for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
+		  if ((addrlist->flags & ADDRLIST_IPV6) &&
 		      (local_query || filter_zone(zone, F_IPV6, &addrlist->addr)) &&
-		      add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
+		      add_resource_record(header, limit, &trunc, -axfroffset, &ansp,
 					  daemon->auth_ttl, NULL, T_AAAA, C_IN, "6", cut ? intr->name : NULL, &addrlist->addr))
 		    anscount++;
-#endif		    
-		
+#endif
+
 		/* restore config data */
 		if (cut)
-		  *cut = '.'; 
+		  *cut = '.';
 	      }
-             
+
 	  for (a = daemon->cnames; a; a = a->next)
 	    if (in_zone(zone, a->alias, &cut))
 	      {
@@ -774,16 +774,16 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		    strcat(name, ".");
 		    strcat(name, zone->domain);
 		  }
-		
+
 		if (cut)
 		  *cut = 0;
-		
-		if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
+
+		if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp,
 					daemon->auth_ttl, NULL,
 					T_CNAME, C_IN, "d",  cut ? a->alias : NULL, name))
 		  anscount++;
 	      }
-	
+
 	  cache_enumerate(1);
 	  while ((crecp = cache_enumerate(0)))
 	    {
@@ -794,7 +794,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 		  if ((crecp->flags & F_DHCP) && !option_bool(OPT_DHCP_FQDN))
 		    {
 		      char *cache_name = cache_get_name(crecp);
-		      if (!strchr(cache_name, '.') && 
+		      if (!strchr(cache_name, '.') &&
 			  (local_query || filter_zone(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))))
 			{
 			  qtype = T_A;
@@ -802,17 +802,17 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 			  if (crecp->flags & F_IPV6)
 			    qtype = T_AAAA;
 #endif
-			  if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
-						  daemon->auth_ttl, NULL, qtype, C_IN, 
+			  if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp,
+						  daemon->auth_ttl, NULL, qtype, C_IN,
 						  (crecp->flags & F_IPV4) ? "4" : "6", cache_name, &crecp->addr))
 			    anscount++;
 			}
 		    }
-		  
+
 		  if ((crecp->flags & F_HOSTS) || (((crecp->flags & F_DHCP) && option_bool(OPT_DHCP_FQDN))))
 		    {
 		      strcpy(name, cache_get_name(crecp));
-		      if (in_zone(zone, name, &cut) && 
+		      if (in_zone(zone, name, &cut) &&
 			  (local_query || filter_zone(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))))
 			{
 			  qtype = T_A;
@@ -823,28 +823,28 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 			   if (cut)
 			     *cut = 0;
 
-			   if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, 
-						   daemon->auth_ttl, NULL, qtype, C_IN, 
+			   if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp,
+						   daemon->auth_ttl, NULL, qtype, C_IN,
 						   (crecp->flags & F_IPV4) ? "4" : "6", cut ? name : NULL, &crecp->addr))
 			     anscount++;
 			}
 		    }
 		}
 	    }
-	   
+
 	  /* repeat SOA as last record */
-	  if (add_resource_record(header, limit, &trunc, axfroffset, &ansp, 
+	  if (add_resource_record(header, limit, &trunc, axfroffset, &ansp,
 				  daemon->auth_ttl, NULL, T_SOA, C_IN, "ddlllll",
 				  daemon->authserver,  daemon->hostmaster,
-				  daemon->soa_sn, daemon->soa_refresh, 
-				  daemon->soa_retry, daemon->soa_expiry, 
+				  daemon->soa_sn, daemon->soa_refresh,
+				  daemon->soa_retry, daemon->soa_expiry,
 				  daemon->auth_ttl))
 	    anscount++;
-	  
+
 	}
-      
+
     }
-  
+
   /* done all questions, set up header and return length of result */
   /* clear authoritative and truncated flags, set QR flag */
   header->hb3 = (header->hb3 & ~(HB3_AA | HB3_TC)) | HB3_QR;
@@ -863,11 +863,11 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
   /* authoritative */
   if (auth)
     header->hb3 |= HB3_AA;
-  
+
   /* truncation */
   if (trunc)
     header->hb3 |= HB3_TC;
-  
+
   if ((auth || local_query) && nxdomain)
     SET_RCODE(header, NXDOMAIN);
   else
@@ -882,8 +882,8 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
 
   return ansp - (unsigned char *)header;
 }
-  
-#endif  
-  
+
+#endif
+
 
 
diff --git a/src/blockdata.c b/src/blockdata.c
index 8683b9b..df6ece6 100644
--- a/src/blockdata.c
+++ b/src/blockdata.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -24,11 +24,11 @@ static unsigned int blockdata_count, blockdata_hwm, blockdata_alloced;
 static void blockdata_expand(int n)
 {
   struct blockdata *new = whine_malloc(n * sizeof(struct blockdata));
-  
+
   if (n > 0 && new)
     {
       int i;
-      
+
       new[n-1].next = keyblock_free;
       keyblock_free = new;
 
@@ -47,7 +47,7 @@ void blockdata_init(void)
   blockdata_count = 0;
   blockdata_hwm = 0;
 
-  /* Note that daemon->cachesize is enforced to have non-zero size if OPT_DNSSEC_VALID is set */  
+  /* Note that daemon->cachesize is enforced to have non-zero size if OPT_DNSSEC_VALID is set */
   if (option_bool(OPT_DNSSEC_VALID))
     blockdata_expand((daemon->cachesize * 100) / sizeof(struct blockdata));
 }
@@ -55,11 +55,11 @@ void blockdata_init(void)
 void blockdata_report(void)
 {
   if (option_bool(OPT_DNSSEC_VALID))
-    my_syslog(LOG_INFO, _("DNSSEC memory in use %u, max %u, allocated %u"), 
-	      blockdata_count * sizeof(struct blockdata),  
-	      blockdata_hwm * sizeof(struct blockdata),  
+    my_syslog(LOG_INFO, _("DNSSEC memory in use %u, max %u, allocated %u"),
+	      blockdata_count * sizeof(struct blockdata),
+	      blockdata_hwm * sizeof(struct blockdata),
 	      blockdata_alloced * sizeof(struct blockdata));
-} 
+}
 
 struct blockdata *blockdata_alloc(char *data, size_t len)
 {
@@ -71,12 +71,12 @@ struct blockdata *blockdata_alloc(char *data, size_t len)
     {
       if (!keyblock_free)
 	blockdata_expand(50);
-      
+
       if (keyblock_free)
 	{
 	  block = keyblock_free;
 	  keyblock_free = block->next;
-	  blockdata_count++; 
+	  blockdata_count++;
 	}
       else
 	{
@@ -84,10 +84,10 @@ struct blockdata *blockdata_alloc(char *data, size_t len)
 	  blockdata_free(ret);
 	  return NULL;
 	}
-       
+
       if (blockdata_hwm < blockdata_count)
-	blockdata_hwm = blockdata_count; 
-      
+	blockdata_hwm = blockdata_count;
+
       blen = len > KEYBLOCK_LEN ? KEYBLOCK_LEN : len;
       memcpy(block->key, data, blen);
       data += blen;
@@ -96,20 +96,20 @@ struct blockdata *blockdata_alloc(char *data, size_t len)
       prev = &block->next;
       block->next = NULL;
     }
-  
+
   return ret;
 }
 
 void blockdata_free(struct blockdata *blocks)
 {
   struct blockdata *tmp;
-  
+
   if (blocks)
     {
       for (tmp = blocks; tmp->next; tmp = tmp->next)
 	blockdata_count--;
       tmp->next = keyblock_free;
-      keyblock_free = blocks; 
+      keyblock_free = blocks;
       blockdata_count--;
     }
 }
@@ -120,10 +120,10 @@ void *blockdata_retrieve(struct blockdata *block, size_t len, void *data)
   size_t blen;
   struct  blockdata *b;
   void *new, *d;
-  
+
   static unsigned int buff_len = 0;
   static unsigned char *buff = NULL;
-   
+
   if (!data)
     {
       if (len > buff_len)
@@ -136,7 +136,7 @@ void *blockdata_retrieve(struct blockdata *block, size_t len, void *data)
 	}
       data = buff;
     }
-  
+
   for (d = data, b = block; len > 0 && b;  b = b->next)
     {
       blen = len > KEYBLOCK_LEN ? KEYBLOCK_LEN : len;
@@ -147,5 +147,5 @@ void *blockdata_retrieve(struct blockdata *block, size_t len, void *data)
 
   return data;
 }
- 
+
 #endif
diff --git a/src/bpf.c b/src/bpf.c
index 3f9ef5a..27c8f37 100644
--- a/src/bpf.c
+++ b/src/bpf.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -28,7 +28,7 @@
 #include <net/if_dl.h>
 #include <netinet/if_ether.h>
 #if defined(__FreeBSD__)
-#  include <net/if_var.h> 
+#  include <net/if_var.h>
 #endif
 #include <netinet/in_var.h>
 #ifdef HAVE_IPV6
@@ -72,11 +72,11 @@ int arp_enumerate(void *parm, int (*callback)())
   mib[5] = RTF_LLINFO;
 #else
   mib[5] = 0;
-#endif	
+#endif
   if (sysctl(mib, 6, NULL, &needed, NULL, 0) == -1 || needed == 0)
     return 0;
 
-  while (1) 
+  while (1)
     {
       if (!expand_buf(&buff, needed))
 	return 0;
@@ -87,7 +87,7 @@ int arp_enumerate(void *parm, int (*callback)())
     }
   if (rc == -1)
     return 0;
-  
+
   for (next = buff.iov_base ; next < (char *)buff.iov_base + needed; next += rtm->rtm_msglen)
     {
       rtm = (struct rt_msghdr *)next;
@@ -125,14 +125,14 @@ int iface_enumerate(int family, void *parm, int (*callback)())
   if (family == AF_INET6)
     fd = socket(PF_INET6, SOCK_DGRAM, 0);
 #endif
-  
+
   for (addrs = head; addrs; addrs = addrs->ifa_next)
     {
       if (addrs->ifa_addr->sa_family == family)
 	{
 	  int iface_index = if_nametoindex(addrs->ifa_name);
 
-	  if (iface_index == 0 || !addrs->ifa_addr || 
+	  if (iface_index == 0 || !addrs->ifa_addr ||
 	      (!addrs->ifa_netmask && family != AF_LINK))
 	    continue;
 
@@ -146,9 +146,9 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 #endif
 	      netmask = ((struct sockaddr_in *) addrs->ifa_netmask)->sin_addr;
 	      if (addrs->ifa_broadaddr)
-		broadcast = ((struct sockaddr_in *) addrs->ifa_broadaddr)->sin_addr; 
-	      else 
-		broadcast.s_addr = 0;	      
+		broadcast = ((struct sockaddr_in *) addrs->ifa_broadaddr)->sin_addr;
+	      else
+		broadcast.s_addr = 0;
 	      if (!((*callback)(addr, iface_index, NULL, netmask, broadcast, parm)))
 		goto err;
 	    }
@@ -170,13 +170,13 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 
 	      memset(&ifr6, 0, sizeof(ifr6));
 	      strncpy(ifr6.ifr_name, addrs->ifa_name, sizeof(ifr6.ifr_name));
-	      
+
 	      ifr6.ifr_addr = *((struct sockaddr_in6 *) addrs->ifa_addr);
 	      if (fd != -1 && ioctl(fd, SIOCGIFAFLAG_IN6, &ifr6) != -1)
 		{
 		  if (ifr6.ifr_ifru.ifru_flags6 & IN6_IFF_TENTATIVE)
 		    flags |= IFACE_TENTATIVE;
-		  
+
 		  if (ifr6.ifr_ifru.ifru_flags6 & IN6_IFF_DEPRECATED)
 		    flags |= IFACE_DEPRECATED;
 
@@ -190,7 +190,7 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 		    flags |= IFACE_PERMANENT;
 #endif
 		}
-	      
+
 	      ifr6.ifr_addr = *((struct sockaddr_in6 *) addrs->ifa_addr);
 	      if (fd != -1 && ioctl(fd, SIOCGIFALIFETIME_IN6, &ifr6) != -1)
 		{
@@ -198,47 +198,47 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 		  preferred = ifr6.ifr_ifru.ifru_lifetime.ia6t_pltime;
 		}
 #endif
-	      	      
-	      for (i = 0; i < IN6ADDRSZ; i++, prefix += 8) 
+
+	      for (i = 0; i < IN6ADDRSZ; i++, prefix += 8)
                 if (netmask[i] != 0xff)
 		  break;
-	      
-	      if (i != IN6ADDRSZ && netmask[i]) 
-                for (j = 7; j > 0; j--, prefix++) 
+
+	      if (i != IN6ADDRSZ && netmask[i])
+                for (j = 7; j > 0; j--, prefix++)
 		  if ((netmask[i] & (1 << j)) == 0)
 		    break;
-	      
+
 	      /* voodoo to clear interface field in address */
 	      if (!option_bool(OPT_NOWILD) && IN6_IS_ADDR_LINKLOCAL(addr))
 		{
 		  addr->s6_addr[2] = 0;
 		  addr->s6_addr[3] = 0;
-		} 
-	     
+		}
+
 	      if (!((*callback)(addr, prefix, scope_id, iface_index, flags,
 				(int) preferred, (int)valid, parm)))
-		goto err;	      
+		goto err;
 	    }
 #endif /* HAVE_IPV6 */
 
-#ifdef HAVE_DHCP6      
+#ifdef HAVE_DHCP6
 	  else if (family == AF_LINK)
-	    { 
+	    {
 	      /* Assume ethernet again here */
 	      struct sockaddr_dl *sdl = (struct sockaddr_dl *) addrs->ifa_addr;
-	      if (sdl->sdl_alen != 0 && 
+	      if (sdl->sdl_alen != 0 &&
 		  !((*callback)(iface_index, ARPHRD_ETHER, LLADDR(sdl), sdl->sdl_alen, parm)))
 		goto err;
 	    }
-#endif 
+#endif
 	}
     }
-  
+
   ret = 1;
 
  err:
   errsave = errno;
-  freeifaddrs(head); 
+  freeifaddrs(head);
   if (fd != -1)
     close(fd);
   errno = errsave;
@@ -255,7 +255,7 @@ void init_bpf(void)
 {
   int i = 0;
 
-  while (1) 
+  while (1)
     {
       sprintf(daemon->dhcp_buff, "/dev/bpf%d", i++);
       if ((daemon->dhcp_raw_fd = open(daemon->dhcp_buff, O_RDWR, 0)) != -1)
@@ -263,7 +263,7 @@ void init_bpf(void)
 
       if (errno != EBUSY)
 	die(_("cannot create DHCP BPF socket: %s"), NULL, EC_BADNET);
-    }	     
+    }
 }
 
 void send_via_bpf(struct dhcp_packet *mess, size_t len,
@@ -271,11 +271,11 @@ void send_via_bpf(struct dhcp_packet *mess, size_t len,
 {
    /* Hairy stuff, packet either has to go to the
       net broadcast or the destination can't reply to ARP yet,
-      but we do know the physical address. 
+      but we do know the physical address.
       Build the packet by steam, and send directly, bypassing
       the kernel IP stack */
-  
-  struct ether_header ether; 
+
+  struct ether_header ether;
   struct ip ip;
   struct udphdr {
     u16 uh_sport;               /* source port */
@@ -283,25 +283,25 @@ void send_via_bpf(struct dhcp_packet *mess, size_t len,
     u16 uh_ulen;                /* udp length */
     u16 uh_sum;                 /* udp checksum */
   } udp;
-  
+
   u32 i, sum;
   struct iovec iov[4];
 
   /* Only know how to do ethernet on *BSD */
   if (mess->htype != ARPHRD_ETHER || mess->hlen != ETHER_ADDR_LEN)
     {
-      my_syslog(MS_DHCP | LOG_WARNING, _("DHCP request for unsupported hardware type (%d) received on %s"), 
+      my_syslog(MS_DHCP | LOG_WARNING, _("DHCP request for unsupported hardware type (%d) received on %s"),
 		mess->htype, ifr->ifr_name);
       return;
     }
-   
+
   ifr->ifr_addr.sa_family = AF_LINK;
   if (ioctl(daemon->dhcpfd, SIOCGIFADDR, ifr) < 0)
     return;
-  
+
   memcpy(ether.ether_shost, LLADDR((struct sockaddr_dl *)&ifr->ifr_addr), ETHER_ADDR_LEN);
   ether.ether_type = htons(ETHERTYPE_IP);
-  
+
   if (ntohs(mess->flags) & 0x8000)
     {
       memset(ether.ether_dhost, 255,  ETHER_ADDR_LEN);
@@ -309,13 +309,13 @@ void send_via_bpf(struct dhcp_packet *mess, size_t len,
     }
   else
     {
-      memcpy(ether.ether_dhost, mess->chaddr, ETHER_ADDR_LEN); 
+      memcpy(ether.ether_dhost, mess->chaddr, ETHER_ADDR_LEN);
       ip.ip_dst.s_addr = mess->yiaddr.s_addr;
     }
-  
+
   ip.ip_p = IPPROTO_UDP;
   ip.ip_src.s_addr = iface_addr.s_addr;
-  ip.ip_len = htons(sizeof(struct ip) + 
+  ip.ip_len = htons(sizeof(struct ip) +
 		    sizeof(struct udphdr) +
 		    len) ;
   ip.ip_hl = sizeof(struct ip) / 4;
@@ -328,9 +328,9 @@ void send_via_bpf(struct dhcp_packet *mess, size_t len,
   for (sum = 0, i = 0; i < sizeof(struct ip) / 2; i++)
     sum += ((u16 *)&ip)[i];
   while (sum>>16)
-    sum = (sum & 0xffff) + (sum >> 16);  
+    sum = (sum & 0xffff) + (sum >> 16);
   ip.ip_sum = (sum == 0xffff) ? sum : ~sum;
-  
+
   udp.uh_sport = htons(daemon->dhcp_server_port);
   udp.uh_dport = htons(daemon->dhcp_client_port);
   if (len & 1)
@@ -349,9 +349,9 @@ void send_via_bpf(struct dhcp_packet *mess, size_t len,
   while (sum>>16)
     sum = (sum & 0xffff) + (sum >> 16);
   udp.uh_sum = (sum == 0xffff) ? sum : ~sum;
-  
+
   ioctl(daemon->dhcp_raw_fd, BIOCSETIF, ifr);
-  
+
   iov[0].iov_base = ðer;
   iov[0].iov_len = sizeof(ether);
   iov[1].iov_base = &ip;
@@ -365,7 +365,7 @@ void send_via_bpf(struct dhcp_packet *mess, size_t len,
 }
 
 #endif /* defined(HAVE_BSD_NETWORK) && defined(HAVE_DHCP) */
- 
+
 
 #ifdef HAVE_BSD_NETWORK
 
@@ -373,7 +373,7 @@ void route_init(void)
 {
   /* AF_UNSPEC: all addr families */
   daemon->routefd = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC);
-  
+
   if (daemon->routefd == -1 || !fix_fd(daemon->routefd))
     die(_("cannot create PF_ROUTE socket: %s"), NULL, EC_BADNET);
 }
@@ -387,7 +387,7 @@ void route_sock(void)
     return;
 
   msg = (struct if_msghdr *)daemon->packet;
-  
+
   if (rc < msg->ifm_msglen)
     return;
 
@@ -415,13 +415,13 @@ void route_sock(void)
 			 RTA_IFP, RTA_IFA, RTA_AUTHOR, RTA_BRD };
        int of;
        unsigned int i;
-       
-       for (i = 0,  of = sizeof(struct ifa_msghdr); of < rc && i < sizeof(maskvec)/sizeof(maskvec[0]); i++) 
-	 if (mask & maskvec[i]) 
+
+       for (i = 0,  of = sizeof(struct ifa_msghdr); of < rc && i < sizeof(maskvec)/sizeof(maskvec[0]); i++)
+	 if (mask & maskvec[i])
 	   {
 	     struct sockaddr *sa = (struct sockaddr *)((char *)msg + of);
 	     size_t diff = (sa->sa_len != 0) ? sa->sa_len : sizeof(long);
-	     
+
 	     if (maskvec[i] == RTA_IFA)
 	       {
 		 del_family = sa->sa_family;
@@ -434,13 +434,13 @@ void route_sock(void)
 		 else
 		   del_family = 0;
 	       }
-	     
+
 	     of += diff;
 	     /* round up as needed */
-	     if (diff & (sizeof(long) - 1)) 
+	     if (diff & (sizeof(long) - 1))
 	       of += sizeof(long) - (diff & (sizeof(long) - 1));
 	   }
-       
+
        queue_event(EVENT_NEWADDR);
      }
 }
diff --git a/src/cache.c b/src/cache.c
index a719d95..4f43246 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -37,7 +37,7 @@ static const struct {
   { 10,  "NULL" },
   { 11,  "WKS" },
   { 12,  "PTR" },
-  { 13,  "HINFO" },	
+  { 13,  "HINFO" },
   { 15,  "MX" },
   { 16,  "TXT" },
   { 22,  "NSAP" },
@@ -77,11 +77,11 @@ static unsigned int next_uid(void)
   static unsigned int uid = 0;
 
   uid++;
-  
+
   /* uid == 0 used to indicate CNAME to interface name. */
   if (uid == SRC_INTERFACE)
     uid++;
-  
+
   return uid;
 }
 
@@ -89,13 +89,13 @@ void cache_init(void)
 {
   struct crec *crecp;
   int i;
- 
+
   bignames_left = daemon->cachesize/10;
-  
+
   if (daemon->cachesize > 0)
     {
       crecp = safe_malloc(daemon->cachesize*sizeof(struct crec));
-      
+
       for (i=0; i < daemon->cachesize; i++, crecp++)
 	{
 	  cache_link(crecp);
@@ -103,7 +103,7 @@ void cache_init(void)
 	  crecp->uid = next_uid();
 	}
     }
-  
+
   /* create initial hash table*/
   rehash(daemon->cachesize);
 }
@@ -119,7 +119,7 @@ static void rehash(int size)
 
   /* hash_size is a power of two. */
   for (new_size = 64; new_size < size/10; new_size = new_size << 1);
-  
+
   /* must succeed in getting first instance, failure later is non-fatal */
   if (!hash_table)
     new = safe_malloc(new_size * sizeof(struct crec *));
@@ -133,7 +133,7 @@ static void rehash(int size)
   old_size = hash_size;
   hash_table = new;
   hash_size = new_size;
-  
+
   if (old)
     {
       for (i = 0; i < old_size; i++)
@@ -145,11 +145,11 @@ static void rehash(int size)
       free(old);
     }
 }
-  
+
 static struct crec **hash_bucket(char *name)
 {
   unsigned int c, val = 017465; /* Barker code - minimum self-correlation in cyclic shift */
-  const unsigned char *mix_tab = (const unsigned char*)typestr; 
+  const unsigned char *mix_tab = (const unsigned char*)typestr;
 
   while((c = (unsigned char) *name++))
     {
@@ -157,8 +157,8 @@ static struct crec **hash_bucket(char *name)
       if (c >= 'A' && c <= 'Z')
 	c += 'a' - 'A';
       val = ((val << 7) | (val >> (32 - 7))) + (mix_tab[(val + c) & 0x3F] ^ c);
-    } 
-  
+    }
+
   /* hash_size is a power of two */
   return hash_table + ((val ^ (val >> 16)) & (hash_size - 1));
 }
@@ -175,8 +175,8 @@ static void cache_hash(struct crec *crecp)
   if (!(crecp->flags & F_REVERSE))
     {
       while (*up && ((*up)->flags & F_REVERSE))
-	up = &((*up)->hash_next); 
-      
+	up = &((*up)->hash_next);
+
       if (crecp->flags & F_IMMORTAL)
 	while (*up && !((*up)->flags & F_IMMORTAL))
 	  up = &((*up)->hash_next);
@@ -208,7 +208,7 @@ static void cache_free(struct crec *crecp)
   crecp->prev = cache_tail;
   crecp->next = NULL;
   cache_tail = crecp;
-  
+
   /* retrieve big name for further use. */
   if (crecp->flags & F_BIGNAME)
     {
@@ -220,7 +220,7 @@ static void cache_free(struct crec *crecp)
 #ifdef HAVE_DNSSEC
   cache_blockdata_free(crecp);
 #endif
-}    
+}
 
 /* insert a new cache entry at the head of the list (youngest entry) */
 static void cache_link(struct crec *crecp)
@@ -234,7 +234,7 @@ static void cache_link(struct crec *crecp)
     cache_tail = crecp;
 }
 
-/* remove an arbitrary cache entry for promotion */ 
+/* remove an arbitrary cache entry for promotion */
 static void cache_unlink (struct crec *crecp)
 {
   if (crecp->prev)
@@ -252,9 +252,9 @@ char *cache_get_name(struct crec *crecp)
 {
   if (crecp->flags & F_BIGNAME)
     return crecp->name.bname->name;
-  else if (crecp->flags & F_NAMEP) 
+  else if (crecp->flags & F_NAMEP)
     return crecp->name.namep;
-  
+
   return crecp->name.sname;
 }
 
@@ -282,12 +282,12 @@ struct crec *cache_enumerate(int init)
     cache = cache->hash_next;
   else
     {
-       cache = NULL; 
+       cache = NULL;
        while (bucket < hash_size)
 	 if ((cache = hash_table[bucket++]))
 	   break;
     }
-  
+
   return cache;
 }
 
@@ -295,14 +295,14 @@ static int is_outdated_cname_pointer(struct crec *crecp)
 {
   if (!(crecp->flags & F_CNAME) || crecp->addr.cname.uid == SRC_INTERFACE)
     return 0;
-  
-  /* NB. record may be reused as DS or DNSKEY, where uid is 
+
+  /* NB. record may be reused as DS or DNSKEY, where uid is
      overloaded for something completely different */
-  if (crecp->addr.cname.target.cache && 
+  if (crecp->addr.cname.target.cache &&
       (crecp->addr.cname.target.cache->flags & (F_IPV4 | F_IPV6 | F_CNAME)) &&
       crecp->addr.cname.uid == crecp->addr.cname.target.cache->uid)
     return 0;
-  
+
   return 1;
 }
 
@@ -313,7 +313,7 @@ static int is_expired(time_t now, struct crec *crecp)
 
   if (difftime(now, crecp->ttd) < 0)
     return 0;
-  
+
   return 1;
 }
 
@@ -324,22 +324,22 @@ static struct crec *cache_scan_free(char *name, struct all_addr *addr, time_t no
      entries but only in the same hash bucket as name.
      If (flags & F_REVERSE) then remove any reverse entries for addr and any expired
      entries in the whole cache.
-     If (flags == 0) remove any expired entries in the whole cache. 
+     If (flags == 0) remove any expired entries in the whole cache.
 
      In the flags & F_FORWARD case, the return code is valid, and returns a non-NULL pointer
      to a cache entry if the name exists in the cache as a HOSTS or DHCP entry (these are never deleted)
 
      We take advantage of the fact that hash chains have stuff in the order <reverse>,<other>,<immortal>
      so that when we hit an entry which isn't reverse and is immortal, we're done. */
- 
+
   struct crec *crecp, **up;
-  
+
   if (flags & F_FORWARD)
     {
       for (up = hash_bucket(name), crecp = *up; crecp; crecp = crecp->hash_next)
 	{
 	  if (is_expired(now, crecp) || is_outdated_cname_pointer(crecp))
-	    { 
+	    {
 	      *up = crecp->hash_next;
 	      if (!(crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)))
 		{
@@ -347,12 +347,12 @@ static struct crec *cache_scan_free(char *name, struct all_addr *addr, time_t no
 		  cache_free(crecp);
 		}
 	      continue;
-	    } 
-	
+	    }
+
 	  if ((crecp->flags & F_FORWARD) && hostname_isequal(cache_get_name(crecp), name))
 	    {
 	      /* Don't delete DNSSEC in favour of a CNAME, they can co-exist */
-	      if ((flags & crecp->flags & (F_IPV4 | F_IPV6)) || 
+	      if ((flags & crecp->flags & (F_IPV4 | F_IPV6)) ||
 		  (((crecp->flags | flags) & F_CNAME) && !(crecp->flags & (F_DNSKEY | F_DS))))
 		{
 		  if (crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG))
@@ -362,7 +362,7 @@ static struct crec *cache_scan_free(char *name, struct all_addr *addr, time_t no
 		  cache_free(crecp);
 		  continue;
 		}
-	      
+
 #ifdef HAVE_DNSSEC
 	      /* Deletion has to be class-sensitive for DS and DNSKEY */
 	      if ((flags & crecp->flags & (F_DNSKEY | F_DS)) && crecp->uid == addr->addr.dnssec.class)
@@ -386,22 +386,22 @@ static struct crec *cache_scan_free(char *name, struct all_addr *addr, time_t no
       int addrlen = (flags & F_IPV6) ? IN6ADDRSZ : INADDRSZ;
 #else
       int addrlen = INADDRSZ;
-#endif 
+#endif
       for (i = 0; i < hash_size; i++)
-	for (crecp = hash_table[i], up = &hash_table[i]; 
+	for (crecp = hash_table[i], up = &hash_table[i];
 	     crecp && ((crecp->flags & F_REVERSE) || !(crecp->flags & F_IMMORTAL));
 	     crecp = crecp->hash_next)
 	  if (is_expired(now, crecp))
 	    {
 	      *up = crecp->hash_next;
 	      if (!(crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)))
-		{ 
+		{
 		  cache_unlink(crecp);
 		  cache_free(crecp);
 		}
 	    }
 	  else if (!(crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) &&
-		   (flags & crecp->flags & F_REVERSE) && 
+		   (flags & crecp->flags & F_REVERSE) &&
 		   (flags & crecp->flags & (F_IPV4 | F_IPV6)) &&
 		   memcmp(&crecp->addr.addr, addr, addrlen) == 0)
 	    {
@@ -412,7 +412,7 @@ static struct crec *cache_scan_free(char *name, struct all_addr *addr, time_t no
 	  else
 	    up = &crecp->hash_next;
     }
-  
+
   return NULL;
 }
 
@@ -421,7 +421,7 @@ static struct crec *cache_scan_free(char *name, struct all_addr *addr, time_t no
    cache_insert * n
    cache_end_insert
 
-   but an abort can cause the cache_end_insert to be missed 
+   but an abort can cause the cache_end_insert to be missed
    in which can the next cache_start_insert cleans things up. */
 
 void cache_start_insert(void)
@@ -438,8 +438,8 @@ void cache_start_insert(void)
   new_chain = NULL;
   insert_error = 0;
 }
- 
-struct crec *cache_insert(char *name, struct all_addr *addr, 
+
+struct crec *cache_insert(char *name, struct all_addr *addr,
 			  time_t now,  unsigned long ttl, unsigned short flags)
 {
   struct crec *new;
@@ -461,15 +461,15 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
   /* if previous insertion failed give up now. */
   if (insert_error)
     return NULL;
-  
+
   /* First remove any expired entries and entries for the name/address we
      are currently inserting. */
   if ((new = cache_scan_free(name, addr, now, flags)))
     {
-      /* We're trying to insert a record over one from 
-	 /etc/hosts or DHCP, or other config. If the 
+      /* We're trying to insert a record over one from
+	 /etc/hosts or DHCP, or other config. If the
 	 existing record is for an A or AAAA and
-	 the record we're trying to insert is the same, 
+	 the record we're trying to insert is the same,
 	 just drop the insert, but don't error the whole process. */
       if ((flags & (F_IPV4 | F_IPV6)) && (flags & F_FORWARD) && addr)
 	{
@@ -482,11 +482,11 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
 	    return new;
 #endif
 	}
-      
+
       insert_error = 1;
       return NULL;
     }
-  
+
   /* Now get a cache entry from the end of the LRU list */
   while (1) {
     if (!(new = cache_tail)) /* no entries left - cache is too small, bail */
@@ -494,13 +494,13 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
 	insert_error = 1;
 	return NULL;
       }
-    
+
     /* End of LRU list is still in use: if we didn't scan all the hash
        chains for expired entries do that now. If we already tried that
        then it's time to start spilling things. */
-    
+
     if (new->flags & (F_FORWARD | F_REVERSE))
-      { 
+      {
 	/* If free_avail set, we believe that an entry has been freed.
 	   Bugs have been known to make this not true, resulting in
 	   a tight loop here. If that happens, abandon the
@@ -516,7 +516,7 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
 	    insert_error = 1;
 	    return NULL;
 	  }
-		
+
 	if (freed_all)
 	  {
 	    struct all_addr free_addr = new->addr.addr;;
@@ -526,7 +526,7 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
 	    if (new->flags & (F_DS | F_DNSKEY))
 	      free_addr.addr.dnssec.class = new->uid;
 #endif
-	    
+
 	    free_avail = 1; /* Must be free space now. */
 	    cache_scan_free(cache_get_name(new), &free_addr, now, new->flags);
 	    cache_live_freed++;
@@ -538,13 +538,13 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
 	  }
 	continue;
       }
- 
+
     /* Check if we need to and can allocate extra memory for a long name.
        If that fails, give up now, always succeed for DNSSEC records. */
     if (name && (strlen(name) > SMALLDNAME-1))
       {
 	if (big_free)
-	  { 
+	  {
 	    big_name = big_free;
 	    big_free = big_free->next;
 	  }
@@ -556,14 +556,14 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
 	  }
 	else if (bignames_left != 0)
 	  bignames_left--;
-	
+
       }
 
     /* Got the rest: finally grab entry. */
     cache_unlink(new);
     break;
   }
-  
+
   new->flags = flags;
   if (big_name)
     {
@@ -583,7 +583,7 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
 	new->uid = addr->addr.dnssec.class;
       else
 #endif
-	new->addr.addr = *addr;	
+	new->addr.addr = *addr;
     }
 
   new->ttd = now + (time_t)ttl;
@@ -598,9 +598,9 @@ void cache_end_insert(void)
 {
   if (insert_error)
     return;
-  
+
   while (new_chain)
-    { 
+    {
       struct crec *tmp = new_chain->next;
       /* drop CNAMEs which didn't find a target. */
       if (is_outdated_cname_pointer(new_chain))
@@ -622,7 +622,7 @@ struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsi
   int no_rr = prot & F_NO_RR;
 
   prot &= ~F_NO_RR;
-  
+
   if (crecp) /* iterating */
     ans = crecp->next;
   else
@@ -631,14 +631,14 @@ struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsi
 	 also free anything which has expired */
       struct crec *next, **up, **insert = NULL, **chainp = &ans;
       unsigned short ins_flags = 0;
-      
+
       for (up = hash_bucket(name), crecp = *up; crecp; crecp = next)
 	{
 	  next = crecp->hash_next;
-	  
+
 	  if (!is_expired(now, crecp) && !is_outdated_cname_pointer(crecp))
 	    {
-	      if ((crecp->flags & F_FORWARD) && 
+	      if ((crecp->flags & F_FORWARD) &&
 		  (crecp->flags & prot) &&
 		  hostname_isequal(cache_get_name(crecp), name))
 		{
@@ -652,11 +652,11 @@ struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsi
 		      cache_unlink(crecp);
 		      cache_link(crecp);
 		    }
-	      	      
+
 		  /* Move all but the first entry up the hash chain
-		     this implements round-robin. 
+		     this implements round-robin.
 		     Make sure that re-ordering doesn't break the hash-chain
-		     order invariants. 
+		     order invariants.
 		  */
 		  if (insert && (crecp->flags & (F_REVERSE | F_IMMORTAL)) == ins_flags)
 		    {
@@ -672,38 +672,38 @@ struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsi
 			  insert = up;
 			  ins_flags = crecp->flags & (F_REVERSE | F_IMMORTAL);
 			}
-		      up = &crecp->hash_next; 
+		      up = &crecp->hash_next;
 		    }
 		}
 	      else
 		/* case : not expired, incorrect entry. */
-		up = &crecp->hash_next; 
+		up = &crecp->hash_next;
 	    }
 	  else
 	    {
 	      /* expired entry, free it */
 	      *up = crecp->hash_next;
 	      if (!(crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)))
-		{ 
+		{
 		  cache_unlink(crecp);
 		  cache_free(crecp);
 		}
 	    }
 	}
-	  
+
       *chainp = cache_head;
     }
 
-  if (ans && 
+  if (ans &&
       (ans->flags & F_FORWARD) &&
-      (ans->flags & prot) &&     
+      (ans->flags & prot) &&
       hostname_isequal(cache_get_name(ans), name))
     return ans;
-  
+
   return NULL;
 }
 
-struct crec *cache_find_by_addr(struct crec *crecp, struct all_addr *addr, 
+struct crec *cache_find_by_addr(struct crec *crecp, struct all_addr *addr,
 				time_t now, unsigned int prot)
 {
   struct crec *ans;
@@ -712,27 +712,27 @@ struct crec *cache_find_by_addr(struct crec *crecp, struct all_addr *addr,
 #else
   int addrlen = INADDRSZ;
 #endif
-  
+
   if (crecp) /* iterating */
     ans = crecp->next;
   else
-    {  
+    {
       /* first search, look for relevant entries and push to top of list
 	 also free anything which has expired. All the reverse entries are at the
-	 start of the hash chain, so we can give up when we find the first 
+	 start of the hash chain, so we can give up when we find the first
 	 non-REVERSE one.  */
        int i;
        struct crec **up, **chainp = &ans;
-       
+
        for (i=0; i<hash_size; i++)
-	 for (crecp = hash_table[i], up = &hash_table[i]; 
+	 for (crecp = hash_table[i], up = &hash_table[i];
 	      crecp && (crecp->flags & F_REVERSE);
 	      crecp = crecp->hash_next)
 	   if (!is_expired(now, crecp))
-	     {      
+	     {
 	       if ((crecp->flags & prot) &&
 		   memcmp(&crecp->addr.addr, addr, addrlen) == 0)
-		 {	    
+		 {
 		   if (crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG))
 		     {
 		       *chainp = crecp;
@@ -755,16 +755,16 @@ struct crec *cache_find_by_addr(struct crec *crecp, struct all_addr *addr,
 		   cache_free(crecp);
 		 }
 	     }
-       
+
        *chainp = cache_head;
     }
-  
-  if (ans && 
+
+  if (ans &&
       (ans->flags & F_REVERSE) &&
       (ans->flags & prot) &&
       memcmp(&ans->addr.addr, addr, addrlen) == 0)
     return ans;
-  
+
   return NULL;
 }
 
@@ -772,7 +772,7 @@ static void add_hosts_cname(struct crec *target)
 {
   struct crec *crec;
   struct cname *a;
-  
+
   for (a = daemon->cnames; a; a = a->next)
     if (a->alias[1] != '*' &&
 	hostname_isequal(cache_get_name(target), a->target) &&
@@ -788,13 +788,13 @@ static void add_hosts_cname(struct crec *target)
 	add_hosts_cname(crec); /* handle chains */
       }
 }
-  
-static void add_hosts_entry(struct crec *cache, struct all_addr *addr, int addrlen, 
+
+static void add_hosts_entry(struct crec *cache, struct all_addr *addr, int addrlen,
 			    unsigned int index, struct crec **rhash, int hashsz)
 {
   struct crec *lookup = cache_find_by_name(NULL, cache_get_name(cache), 0, cache->flags & (F_IPV4 | F_IPV6));
   int i, nameexists = 0;
-  unsigned int j; 
+  unsigned int j;
 
   /* Remove duplicates in hosts files. */
   if (lookup && (lookup->flags & F_HOSTS))
@@ -806,30 +806,30 @@ static void add_hosts_entry(struct crec *cache, struct all_addr *addr, int addrl
 	  return;
 	}
     }
-  
-  /* Ensure there is only one address -> name mapping (first one trumps) 
+
+  /* Ensure there is only one address -> name mapping (first one trumps)
      We do this by steam here, The entries are kept in hash chains, linked
      by ->next (which is unused at this point) held in hash buckets in
      the array rhash, hashed on address. Note that rhash and the values
      in ->next are only valid  whilst reading hosts files: the buckets are
-     then freed, and the ->next pointer used for other things. 
+     then freed, and the ->next pointer used for other things.
 
      Only insert each unique address once into this hashing structure.
 
      This complexity avoids O(n^2) divergent CPU use whilst reading
-     large (10000 entry) hosts files. 
+     large (10000 entry) hosts files.
 
-     Note that we only do this process when bulk-reading hosts files, 
+     Note that we only do this process when bulk-reading hosts files,
      for incremental reads, rhash is NULL, and we use cache lookups
      instead.
   */
-  
+
   if (rhash)
     {
       /* hash address */
       for (j = 0, i = 0; i < addrlen; i++)
 	j = (j*2 +((unsigned char *)addr)[i]) % hashsz;
-      
+
       for (lookup = rhash[j]; lookup; lookup = lookup->next)
 	if ((lookup->flags & cache->flags & (F_IPV4 | F_IPV6)) &&
 	    memcmp(&lookup->addr.addr, addr, addrlen) == 0)
@@ -837,7 +837,7 @@ static void add_hosts_entry(struct crec *cache, struct all_addr *addr, int addrl
 	    cache->flags &= ~F_REVERSE;
 	    break;
 	  }
-      
+
       /* maintain address hash chain, insert new unique address */
       if (!lookup)
 	{
@@ -854,9 +854,9 @@ static void add_hosts_entry(struct crec *cache, struct all_addr *addr, int addrl
     }
 
   cache->uid = index;
-  memcpy(&cache->addr.addr, addr, addrlen);  
+  memcpy(&cache->addr.addr, addr, addrlen);
   cache_hash(cache);
-  
+
   /* don't need to do alias stuff for second and subsequent addresses. */
   if (!nameexists)
     add_hosts_cname(cache);
@@ -871,7 +871,7 @@ static int eatspace(FILE *f)
       if ((c = getc(f)) == '#')
 	while (c != '\n' && c != EOF)
 	  c = getc(f);
-      
+
       if (c == EOF)
 	return 1;
 
@@ -885,11 +885,11 @@ static int eatspace(FILE *f)
 	nl = 1;
     }
 }
-	 
+
 static int gettok(FILE *f, char *token)
 {
   int c, count = 0;
- 
+
   while (1)
     {
       if ((c = getc(f)) == EOF)
@@ -900,7 +900,7 @@ static int gettok(FILE *f, char *token)
 	  ungetc(c, f);
 	  return eatspace(f);
 	}
-      
+
       if (count < (MAXDNAME - 1))
 	{
 	  token[count++] = c;
@@ -910,7 +910,7 @@ static int gettok(FILE *f, char *token)
 }
 
 int read_hostsfile(char *filename, unsigned int index, int cache_size, struct crec **rhash, int hashsz)
-{  
+{
   FILE *f = fopen(filename, "r");
   char *token = daemon->namebuff, *domain_suffix = NULL;
   int addr_count = 0, name_count = cache_size, lineno = 0;
@@ -923,13 +923,13 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
       my_syslog(LOG_ERR, _("failed to load names from %s: %s"), filename, strerror(errno));
       return cache_size;
     }
-  
+
   eatspace(f);
-  
+
   while ((atnl = gettok(f, token)) != EOF)
     {
       lineno++;
-      
+
       if (inet_pton(AF_INET, token, &addr) > 0)
 	{
 	  flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV4;
@@ -946,27 +946,27 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
 #endif
       else
 	{
-	  my_syslog(LOG_ERR, _("bad address at %s line %d"), filename, lineno); 
+	  my_syslog(LOG_ERR, _("bad address at %s line %d"), filename, lineno);
 	  while (atnl == 0)
 	    atnl = gettok(f, token);
 	  continue;
 	}
-      
+
       addr_count++;
-      
+
       /* rehash every 1000 names. */
       if (rhash && ((name_count - cache_size) > 1000))
 	{
 	  rehash(name_count);
 	  cache_size = name_count;
-	} 
-      
+	}
+
       while (atnl == 0)
 	{
 	  struct crec *cache;
 	  int fqdn, nomem;
 	  char *canon;
-	  
+
 	  if ((atnl = gettok(f, token)) == EOF)
 	    break;
 
@@ -975,8 +975,8 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
 	  if ((canon = canonicalise(token, &nomem)))
 	    {
 	      /* If set, add a version of the name with a default domain appended */
-	      if (option_bool(OPT_EXPAND) && domain_suffix && !fqdn && 
-		  (cache = whine_malloc(sizeof(struct crec) + 
+	      if (option_bool(OPT_EXPAND) && domain_suffix && !fqdn &&
+		  (cache = whine_malloc(sizeof(struct crec) +
 					strlen(canon)+2+strlen(domain_suffix)-SMALLDNAME)))
 		{
 		  strcpy(cache->name.sname, canon);
@@ -996,23 +996,23 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
 		  name_count++;
 		}
 	      free(canon);
-	      
+
 	    }
 	  else if (!nomem)
-	    my_syslog(LOG_ERR, _("bad name at %s line %d"), filename, lineno); 
+	    my_syslog(LOG_ERR, _("bad name at %s line %d"), filename, lineno);
 	}
-    } 
+    }
 
   fclose(f);
-  
+
   if (rhash)
-    rehash(name_count); 
-  
+    rehash(name_count);
+
   my_syslog(LOG_INFO, _("read %s - %d addresses"), filename, addr_count);
-  
+
   return name_count;
 }
-	    
+
 void cache_reload(void)
 {
   struct crec *cache, **up, *tmp;
@@ -1027,7 +1027,7 @@ void cache_reload(void)
 #endif
 
   cache_inserted = cache_live_freed = 0;
-  
+
   for (i=0; i<hash_size; i++)
     for (cache = hash_table[i], up = &hash_table[i]; cache; cache = tmp)
       {
@@ -1053,7 +1053,7 @@ void cache_reload(void)
 	else
 	  up = &cache->hash_next;
       }
-  
+
   /* Add CNAMEs to interface_names to the cache */
   for (a = daemon->cnames; a; a = a->next)
     for (intr = daemon->int_names; intr; intr = intr->next)
@@ -1087,7 +1087,7 @@ void cache_reload(void)
 	cache_hash(cache);
       }
 #endif
-  
+
   /* borrow the packet buffer for a temporary by-address hash */
   memset(daemon->packet, 0, daemon->packet_buff_sz);
   revhashsz = daemon->packet_buff_sz / sizeof(struct crec *);
@@ -1117,7 +1117,7 @@ void cache_reload(void)
 	  }
 #endif
       }
-	
+
   if (option_bool(OPT_NO_HOSTS) && !daemon->addn_hosts)
     {
       if (daemon->cachesize > 0)
@@ -1127,7 +1127,7 @@ void cache_reload(void)
     {
       if (!option_bool(OPT_NO_HOSTS))
 	total_size = read_hostsfile(HOSTSFILE, SRC_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
-      
+
       daemon->addn_hosts = expand_filelist(daemon->addn_hosts);
       for (ah = daemon->addn_hosts; ah; ah = ah->next)
 	if (!(ah->flags & AH_INACTIVE))
@@ -1137,21 +1137,21 @@ void cache_reload(void)
 #ifdef HAVE_INOTIFY
   set_dynamic_inotify(AH_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
 #endif
-  
-} 
+
+}
 
 #ifdef HAVE_DHCP
 struct in_addr a_record_from_hosts(char *name, time_t now)
 {
   struct crec *crecp = NULL;
   struct in_addr ret;
-  
+
   while ((crecp = cache_find_by_name(crecp, name, now, F_IPV4)))
     if (crecp->flags & F_HOSTS)
       return *(struct in_addr *)&crecp->addr;
 
   my_syslog(MS_DHCP | LOG_WARNING, _("No IPv4 address found for %s"), name);
-  
+
   ret.s_addr = 0;
   return ret;
 }
@@ -1177,7 +1177,7 @@ static void add_dhcp_cname(struct crec *target, time_t ttd)
 {
   struct crec *aliasc;
   struct cname *a;
-  
+
   for (a = daemon->cnames; a; a = a->next)
     if (a->alias[1] != '*' &&
 	hostname_isequal(cache_get_name(target), a->target))
@@ -1186,7 +1186,7 @@ static void add_dhcp_cname(struct crec *target, time_t ttd)
 	  dhcp_spare = dhcp_spare->next;
 	else /* need new one */
 	  aliasc = whine_malloc(sizeof(struct crec));
-	
+
 	if (aliasc)
 	  {
 	    aliasc->flags = F_FORWARD | F_NAMEP | F_DHCP | F_CNAME | F_CONFIG;
@@ -1205,7 +1205,7 @@ static void add_dhcp_cname(struct crec *target, time_t ttd)
 }
 
 void cache_add_dhcp_entry(char *host_name, int prot,
-			  struct all_addr *host_address, time_t ttd) 
+			  struct all_addr *host_address, time_t ttd)
 {
   struct crec *crec = NULL, *fail_crec = NULL;
   unsigned short flags = F_IPV4;
@@ -1219,16 +1219,16 @@ void cache_add_dhcp_entry(char *host_name, int prot,
       addrlen = sizeof(struct in6_addr);
     }
 #endif
-  
+
   inet_ntop(prot, host_address, daemon->addrbuff, ADDRSTRLEN);
-  
+
   while ((crec = cache_find_by_name(crec, host_name, 0, flags | F_CNAME)))
     {
       /* check all addresses associated with name */
       if (crec->flags & (F_HOSTS | F_CONFIG))
 	{
 	  if (crec->flags & F_CNAME)
-	    my_syslog(MS_DHCP | LOG_WARNING, 
+	    my_syslog(MS_DHCP | LOG_WARNING,
 		      _("%s is a CNAME, not giving it to the DHCP lease of %s"),
 		      host_name, daemon->addrbuff);
 	  else if (memcmp(&crec->addr.addr, host_address, addrlen) == 0)
@@ -1243,23 +1243,23 @@ void cache_add_dhcp_entry(char *host_name, int prot,
 	  break;
 	}
     }
-  
+
   /* if in hosts, don't need DHCP record */
   if (in_hosts)
     return;
-  
+
   /* Name in hosts, address doesn't match */
   if (fail_crec)
     {
       inet_ntop(prot, &fail_crec->addr.addr, daemon->namebuff, MAXDNAME);
-      my_syslog(MS_DHCP | LOG_WARNING, 
+      my_syslog(MS_DHCP | LOG_WARNING,
 		_("not giving name %s to the DHCP lease of %s because "
-		  "the name exists in %s with address %s"), 
+		  "the name exists in %s with address %s"),
 		host_name, daemon->addrbuff,
 		record_source(fail_crec->uid), daemon->namebuff);
       return;
-    }	  
-  
+    }
+
   if ((crec = cache_find_by_addr(NULL, (struct all_addr *)host_address, 0, flags)))
     {
       if (crec->flags & F_NEG)
@@ -1270,12 +1270,12 @@ void cache_add_dhcp_entry(char *host_name, int prot,
     }
   else
     flags |= F_REVERSE;
-  
+
   if ((crec = dhcp_spare))
     dhcp_spare = dhcp_spare->next;
   else /* need new one */
     crec = whine_malloc(sizeof(struct crec));
-  
+
   if (crec) /* malloc may fail */
     {
       crec->flags = flags | F_NAMEP | F_DHCP | F_FORWARD;
@@ -1295,7 +1295,7 @@ void cache_add_dhcp_entry(char *host_name, int prot,
 
 #ifndef NO_ID
 int cache_make_stat(struct txt_record *t)
-{ 
+{
   static char *buff = NULL;
   static int bufflen = 60;
   int len;
@@ -1306,7 +1306,7 @@ int cache_make_stat(struct txt_record *t)
     return 0;
 
   p = buff;
-  
+
   switch (t->stat)
     {
     case TXT_STAT_CACHESIZE:
@@ -1339,17 +1339,17 @@ int cache_make_stat(struct txt_record *t)
       /* sum counts from different records for same server */
       for (serv = daemon->servers; serv; serv = serv->next)
 	serv->flags &= ~SERV_COUNTED;
-      
+
       for (serv = daemon->servers; serv; serv = serv->next)
-	if (!(serv->flags & 
+	if (!(serv->flags &
 	      (SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED | SERV_USE_RESOLV | SERV_NO_REBIND)))
 	  {
 	    char *new, *lenp;
 	    int port, newlen, bytes_avail, bytes_needed;
 	    unsigned int queries = 0, failed_queries = 0;
 	    for (serv1 = serv; serv1; serv1 = serv1->next)
-	      if (!(serv1->flags & 
-		    (SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED | SERV_USE_RESOLV | SERV_NO_REBIND)) && 
+	      if (!(serv1->flags &
+		    (SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED | SERV_USE_RESOLV | SERV_NO_REBIND)) &&
 		  sockaddr_isequal(&serv->addr, &serv1->addr))
 		{
 		  serv1->flags |= SERV_COUNTED;
@@ -1382,7 +1382,7 @@ int cache_make_stat(struct txt_record *t)
       t->len = p - buff;
       return 1;
     }
-  
+
   len = strlen(buff+1);
   t->txt = (unsigned char *)buff;
   t->len = len + 1;
@@ -1391,7 +1391,7 @@ int cache_make_stat(struct txt_record *t)
 }
 #endif
 
-/* There can be names in the cache containing control chars, don't 
+/* There can be names in the cache containing control chars, don't
    mess up logging or open security holes. */
 static char *sanitise(char *name)
 {
@@ -1411,9 +1411,9 @@ void dump_cache(time_t now)
   char *t = "";
 
   my_syslog(LOG_INFO, _("time %lu"), (unsigned long)now);
-  my_syslog(LOG_INFO, _("cache size %d, %d/%d cache insertions re-used unexpired cache entries."), 
+  my_syslog(LOG_INFO, _("cache size %d, %d/%d cache insertions re-used unexpired cache entries."),
 	    daemon->cachesize, cache_live_freed, cache_inserted);
-  my_syslog(LOG_INFO, _("queries forwarded %u, queries answered locally %u"), 
+  my_syslog(LOG_INFO, _("queries forwarded %u, queries answered locally %u"),
 	    daemon->queries_forwarded, daemon->local_answer);
 #ifdef HAVE_AUTH
   my_syslog(LOG_INFO, _("queries for authoritative zones %u"), daemon->auth_answer);
@@ -1425,16 +1425,16 @@ void dump_cache(time_t now)
   /* sum counts from different records for same server */
   for (serv = daemon->servers; serv; serv = serv->next)
     serv->flags &= ~SERV_COUNTED;
-  
+
   for (serv = daemon->servers; serv; serv = serv->next)
-    if (!(serv->flags & 
+    if (!(serv->flags &
 	  (SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED | SERV_USE_RESOLV | SERV_NO_REBIND)))
       {
 	int port;
 	unsigned int queries = 0, failed_queries = 0;
 	for (serv1 = serv; serv1; serv1 = serv1->next)
-	  if (!(serv1->flags & 
-		(SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED | SERV_USE_RESOLV | SERV_NO_REBIND)) && 
+	  if (!(serv1->flags &
+		(SERV_NO_ADDR | SERV_LITERAL_ADDRESS | SERV_COUNTED | SERV_USE_RESOLV | SERV_NO_REBIND)) &&
 	      sockaddr_isequal(&serv->addr, &serv1->addr))
 	    {
 	      serv1->flags |= SERV_COUNTED;
@@ -1444,13 +1444,13 @@ void dump_cache(time_t now)
 	port = prettyprint_addr(&serv->addr, daemon->addrbuff);
 	my_syslog(LOG_INFO, _("server %s#%d: queries sent %u, retried or failed %u"), daemon->addrbuff, port, queries, failed_queries);
       }
-  
+
   if (option_bool(OPT_DEBUG) || option_bool(OPT_LOG))
     {
       struct crec *cache ;
       int i;
       my_syslog(LOG_INFO, "Host                                     Address                        Flags      Expires");
-    
+
       for (i=0; i<hash_size; i++)
 	for (cache = hash_table[i]; cache; cache = cache->hash_next)
 	  {
@@ -1473,7 +1473,7 @@ void dump_cache(time_t now)
 		      cache->addr.key.algo, cache->addr.key.flags);
 #endif
 	    else if (!(cache->flags & F_NEG) || !(cache->flags & F_FORWARD))
-	      { 
+	      {
 		a = daemon->addrbuff;
 		if (cache->flags & F_IPV4)
 		  inet_ntop(AF_INET, &cache->addr.addr, a, ADDRSTRLEN);
@@ -1563,7 +1563,7 @@ char *querystr(char *desc, unsigned short type)
 	free(buff);
       else if (len < 20)
 	len = 20;
-      
+
       buff = whine_malloc(len);
       bufflen = len;
     }
@@ -1583,7 +1583,7 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
 {
   char *source, *dest = daemon->addrbuff;
   char *verb = "is";
-  
+
   if (!option_bool(OPT_LOG))
     return;
 
@@ -1599,7 +1599,7 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
 	  inet_ntop(flags & F_IPV4 ? AF_INET : AF_INET6,
 		    addr, daemon->addrbuff, ADDRSTRLEN);
 #else
-	  strncpy(daemon->addrbuff, inet_ntoa(addr->addr.addr4), ADDRSTRLEN);  
+	  strncpy(daemon->addrbuff, inet_ntoa(addr->addr.addr4), ADDRSTRLEN);
 #endif
 	}
     }
@@ -1611,13 +1611,13 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
       dest = name;
       name = daemon->addrbuff;
     }
-  
+
   if (flags & F_NEG)
     {
       if (flags & F_NXDOMAIN)
 	dest = "NXDOMAIN";
       else
-	{      
+	{
 	  if (flags & F_IPV4)
 	    dest = "NODATA-IPv4";
 	  else if (flags & F_IPV6)
@@ -1630,7 +1630,7 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
     dest = "<CNAME>";
   else if (flags & F_RRNAME)
     dest = arg;
-    
+
   if (flags & F_CONFIG)
     source = "config";
   else if (flags & F_DHCP)
@@ -1667,7 +1667,7 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
     }
   else
     source = "cached";
-  
+
   if (strlen(name) == 0)
     name = ".";
 
@@ -1683,4 +1683,4 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
     my_syslog(LOG_INFO, "%s %s %s %s", source, name, verb, dest);
 }
 
- 
+
diff --git a/src/config.h b/src/config.h
index 4c03e2c..99b0e55 100644
--- a/src/config.h
+++ b/src/config.h
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -55,7 +55,7 @@
 #define SOA_EXPIRY 1209600 /* SOA expiry default */
 #define LOOP_TEST_DOMAIN "test" /* domain for loop testing, "test" is reserved by RFC 2606 and won't therefore clash */
 #define LOOP_TEST_TYPE T_TXT
- 
+
 /* compile-time options: uncomment below to enable or do eg.
    make COPTS=-DHAVE_BROKEN_RTC
 
@@ -65,9 +65,9 @@ HAVE_BROKEN_RTC
    for timing, and keep lease lengths rather than expiry times
    in its leases file. This also make dnsmasq "flash disk friendly".
    Normally, dnsmasq tries very hard to keep the on-disk leases file
-   up-to-date: rewriting it after every renewal.  When HAVE_BROKEN_RTC 
-   is in effect, the lease file is only written when a new lease is 
-   created, or an old one destroyed. (Because those are the only times 
+   up-to-date: rewriting it after every renewal.  When HAVE_BROKEN_RTC
+   is in effect, the lease file is only written when a new lease is
+   created, or an old one destroyed. (Because those are the only times
    it changes.) This vastly reduces the number of file writes, and makes
    it viable to keep the lease file on a flash filesystem.
    NOTE: when enabling or disabling this, be sure to delete any old
@@ -86,16 +86,16 @@ HAVE_SCRIPT
    define this to get the ability to call scripts on lease-change.
 
 HAVE_LUASCRIPT
-   define this to get the ability to call Lua script on lease-change. (implies HAVE_SCRIPT) 
+   define this to get the ability to call Lua script on lease-change. (implies HAVE_SCRIPT)
 
 HAVE_DBUS
    define this if you want to link against libdbus, and have dnsmasq
-   support some methods to allow (re)configuration of the upstream DNS 
+   support some methods to allow (re)configuration of the upstream DNS
    servers via DBus.
 
 HAVE_IDN
    define this if you want international domain name 2003 support.
-   
+
 HAVE_LIBIDN2
    define this if you want international domain name 2008 support.
 
@@ -132,8 +132,8 @@ NO_SCRIPT
 NO_LARGEFILE
 NO_AUTH
 NO_INOTIFY
-   these are available to explicitly disable compile time options which would 
-   otherwise be enabled automatically (HAVE_IPV6, >2Gb file sizes) or 
+   these are available to explicitly disable compile time options which would
+   otherwise be enabled automatically (HAVE_IPV6, >2Gb file sizes) or
    which are enabled  by default in the distributed source tree. Building dnsmasq
    with something like "make COPTS=-DNO_SCRIPT" will do the trick.
 
@@ -145,13 +145,13 @@ NO_GMP
 LEASEFILE
 CONFFILE
 RESOLVFILE
-   the default locations of these files are determined below, but may be overridden 
+   the default locations of these files are determined below, but may be overridden
    in a build command line using COPTS.
 
 */
 
-/* Defining this builds a binary which handles time differently and works better on a system without a 
-   stable RTC (it uses uptime, not epoch time) and writes the DHCP leases file less often to avoid flash wear. 
+/* Defining this builds a binary which handles time differently and works better on a system without a
+   stable RTC (it uses uptime, not epoch time) and writes the DHCP leases file less often to avoid flash wear.
 */
 
 /* #define HAVE_BROKEN_RTC */
@@ -160,15 +160,15 @@ RESOLVFILE
    has no library dependencies other than libc */
 
 #define HAVE_DHCP
-#define HAVE_DHCP6 
+#define HAVE_DHCP6
 #define HAVE_TFTP
 #define HAVE_SCRIPT
 #define HAVE_AUTH
-#define HAVE_IPSET 
+#define HAVE_IPSET
 #define HAVE_LOOP
 
 /* Build options which require external libraries.
-   
+
    Defining HAVE_<opt>_STATIC as _well_ as HAVE_<opt> will link the library statically.
 
    You can use "make COPTS=-DHAVE_<opt>" instead of editing these.
@@ -228,10 +228,10 @@ HAVE_SOLARIS_NETWORK
    define exactly one of these to alter interaction with kernel networking.
 
 HAVE_GETOPT_LONG
-   defined when GNU-style getopt_long available. 
+   defined when GNU-style getopt_long available.
 
 HAVE_SOCKADDR_SA_LEN
-   defined if struct sockaddr has sa_len field (*BSD) 
+   defined if struct sockaddr has sa_len field (*BSD)
 */
 
 /* Must precede __linux__ since uClinux defines __linux__ too. */
@@ -240,7 +240,7 @@ HAVE_SOCKADDR_SA_LEN
 #define HAVE_GETOPT_LONG
 #undef HAVE_SOCKADDR_SA_LEN
 /* Never use fork() on uClinux. Note that this is subtly different from the
-   --keep-in-foreground option, since it also  suppresses forking new 
+   --keep-in-foreground option, since it also  suppresses forking new
    processes for TCP connections and disables the call-a-script on leasechange
    system. It's intended for use on MMU-less kernels. */
 #define NO_FORK
@@ -284,9 +284,9 @@ HAVE_SOCKADDR_SA_LEN
 #define HAVE_SOCKADDR_SA_LEN
 /* Define before sys/socket.h is included so we get socklen_t */
 #define _BSD_SOCKLEN_T_
-/* Select the RFC_3542 version of the IPv6 socket API. 
+/* Select the RFC_3542 version of the IPv6 socket API.
    Define before netinet6/in6.h is included. */
-#define __APPLE_USE_RFC_3542 
+#define __APPLE_USE_RFC_3542
 #define NO_IPSET
 
 #elif defined(__NetBSD__)
@@ -298,8 +298,8 @@ HAVE_SOCKADDR_SA_LEN
 #define HAVE_SOLARIS_NETWORK
 #define HAVE_GETOPT_LONG
 #undef HAVE_SOCKADDR_SA_LEN
-#define ETHER_ADDR_LEN 6 
- 
+#define ETHER_ADDR_LEN 6
+
 #endif
 
 /* Decide if we're going to support IPv6 */
@@ -318,7 +318,7 @@ HAVE_SOCKADDR_SA_LEN
 #endif
 
 
-/* rules to implement compile-time option dependencies and 
+/* rules to implement compile-time option dependencies and
    the NO_XXX flags */
 
 #ifdef NO_IPV6
@@ -374,7 +374,7 @@ HAVE_SOCKADDR_SA_LEN
 
 #ifdef DNSMASQ_COMPILE_OPTS
 
-static char *compile_opts = 
+static char *compile_opts =
 #ifndef HAVE_IPV6
 "no-"
 #endif
@@ -402,8 +402,8 @@ static char *compile_opts =
 #else
  #if !defined(HAVE_IDN)
 "no-"
- #endif 
-"IDN " 
+ #endif
+"IDN "
 #endif
 #ifndef HAVE_DHCP
 "no-"
@@ -412,7 +412,7 @@ static char *compile_opts =
 #if defined(HAVE_DHCP)
 #  if !defined (HAVE_DHCP6)
      "no-"
-#  endif  
+#  endif
      "DHCPv6 "
 #endif
 #if !defined(HAVE_SCRIPT)
diff --git a/src/conntrack.c b/src/conntrack.c
index 1aa4e28..8a2fc04 100644
--- a/src/conntrack.c
+++ b/src/conntrack.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -28,14 +28,14 @@ int get_incoming_mark(union mysockaddr *peer_addr, struct all_addr *local_addr,
 {
   struct nf_conntrack *ct;
   struct nfct_handle *h;
-  
+
   gotit = 0;
-  
-  if ((ct = nfct_new())) 
+
+  if ((ct = nfct_new()))
     {
       nfct_set_attr_u8(ct, ATTR_L4PROTO, istcp ? IPPROTO_TCP : IPPROTO_UDP);
       nfct_set_attr_u16(ct, ATTR_PORT_DST, htons(daemon->port));
-      
+
 #ifdef HAVE_IPV6
       if (peer_addr->sa.sa_family == AF_INET6)
 	{
@@ -52,11 +52,11 @@ int get_incoming_mark(union mysockaddr *peer_addr, struct all_addr *local_addr,
 	  nfct_set_attr_u16(ct, ATTR_PORT_SRC, peer_addr->in.sin_port);
 	  nfct_set_attr_u32(ct, ATTR_IPV4_DST, local_addr->addr.addr4.s_addr);
 	}
-      
-      
-      if ((h = nfct_open(CONNTRACK, 0))) 
+
+
+      if ((h = nfct_open(CONNTRACK, 0)))
 	{
-	  nfct_callback_register(h, NFCT_T_ALL, callback, (void *)markp);  
+	  nfct_callback_register(h, NFCT_T_ALL, callback, (void *)markp);
 	  if (nfct_query(h, NFCT_Q_GET, ct) == -1)
 	    {
 	      static int warned = 0;
@@ -66,7 +66,7 @@ int get_incoming_mark(union mysockaddr *peer_addr, struct all_addr *local_addr,
 		  warned = 1;
 		}
 	    }
-	  nfct_close(h);  
+	  nfct_close(h);
 	}
       nfct_destroy(ct);
     }
@@ -85,6 +85,6 @@ static int callback(enum nf_conntrack_msg_type type, struct nf_conntrack *ct, vo
 }
 
 #endif
-  
+
 
 
diff --git a/src/dbus.c b/src/dbus.c
index 9bd68ad..620d94f 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -91,7 +91,7 @@ const char* introspection_xml_template =
 static char *introspection_xml = NULL;
 
 struct watch {
-  DBusWatch *watch;      
+  DBusWatch *watch;
   struct watch *next;
 };
 
@@ -117,8 +117,8 @@ static dbus_bool_t add_watch(DBusWatch *watch, void *data)
 
 static void remove_watch(DBusWatch *watch, void *data)
 {
-  struct watch **up, *w, *tmp;  
-  
+  struct watch **up, *w, *tmp;
+
   for (up = &(daemon->watches), w = daemon->watches; w; w = tmp)
     {
       tmp = w->next;
@@ -139,11 +139,11 @@ static void dbus_read_servers(DBusMessage *message)
   DBusMessageIter iter;
   union  mysockaddr addr, source_addr;
   char *domain;
-  
+
   dbus_message_iter_init(message, &iter);
 
   mark_servers(SERV_FROM_DBUS);
-  
+
   while (1)
     {
       int skip = 0;
@@ -151,10 +151,10 @@ static void dbus_read_servers(DBusMessage *message)
       if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_UINT32)
 	{
 	  u32 a;
-	  
+
 	  dbus_message_iter_get_basic(&iter, &a);
 	  dbus_message_iter_next (&iter);
-	  
+
 #ifdef HAVE_SOCKADDR_SA_LEN
 	  source_addr.in.sin_len = addr.in.sin_len = sizeof(struct sockaddr_in);
 #endif
@@ -204,7 +204,7 @@ static void dbus_read_servers(DBusMessage *message)
       else
 	/* At the end */
 	break;
-      
+
       /* process each domain */
       do {
 	if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_STRING)
@@ -214,13 +214,13 @@ static void dbus_read_servers(DBusMessage *message)
 	  }
 	else
 	  domain = NULL;
-	
+
 	if (!skip)
 	  add_update_server(SERV_FROM_DBUS, &addr, &source_addr, NULL, domain);
-     
-      } while (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_STRING); 
+
+      } while (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_STRING);
     }
-   
+
   /* unlink and free anything still marked. */
   cleanup_servers();
 }
@@ -231,7 +231,7 @@ static DBusMessage *dbus_reply_server_loop(DBusMessage *message)
   DBusMessageIter args, args_iter;
   struct server *serv;
   DBusMessage *reply = dbus_message_new_method_return(message);
-   
+
   dbus_message_iter_init_append (reply, &args);
   dbus_message_iter_open_container (&args, DBUS_TYPE_ARRAY,DBUS_TYPE_STRING_AS_STRING, &args_iter);
 
@@ -241,7 +241,7 @@ static DBusMessage *dbus_reply_server_loop(DBusMessage *message)
 	prettyprint_addr(&serv->addr, daemon->addrbuff);
 	dbus_message_iter_append_basic (&args_iter, DBUS_TYPE_STRING, &daemon->addrbuff);
       }
-  
+
   dbus_message_iter_close_container (&args, &args_iter);
 
   return reply;
@@ -254,7 +254,7 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
   DBusMessage *error = NULL;
   const char *addr_err;
   char *dup = NULL;
-  
+
   if (!dbus_message_iter_init(message, &iter))
     {
       return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
@@ -268,7 +268,7 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
       return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
                                     strings ? "Expected array of string" : "Expected array of string arrays");
      }
- 
+
   mark_servers(SERV_FROM_DBUS);
 
   /* array_iter points to each "as" element in the outer array */
@@ -290,19 +290,19 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
 					     "Empty string");
 	      break;
 	    }
-	  
+
 	  /* dup the string because it gets modified during parsing */
 	  if (dup)
 	    free(dup);
 	  if (!(dup = str_domain = whine_malloc(strlen(str)+1)))
 	    break;
-	  
+
 	  strcpy(str_domain, str);
 
 	  /* point to address part of old string for error message */
 	  if ((str_addr = strrchr(str, '/')))
 	    str = str_addr+1;
-	  
+
 	  if ((str_addr = strrchr(str_domain, '/')))
 	    {
 	      if (*str_domain != '/' || str_addr == str_domain)
@@ -322,7 +322,7 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
 	      str_domain = NULL;
 	    }
 
-	  
+
 	}
       else
 	{
@@ -334,7 +334,7 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
 					     "Expected inner array of strings");
 	      break;
 	    }
-	  
+
 	  /* string_iter points to each "s" element in the inner array */
 	  dbus_message_iter_recurse(&array_iter, &string_iter);
 	  if (dbus_message_iter_get_arg_type(&string_iter) != DBUS_TYPE_STRING)
@@ -344,7 +344,7 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
 					     "Expected IP address");
 	      break;
 	    }
-	  
+
 	  dbus_message_iter_get_basic(&string_iter, &str);
 	  if (!str || !strlen (str))
 	    {
@@ -352,13 +352,13 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
 					     "Empty IP address");
 	      break;
 	    }
-	  
+
 	  /* dup the string because it gets modified during parsing */
 	  if (dup)
 	    free(dup);
 	  if (!(dup = str_addr = whine_malloc(strlen(str)+1)))
 	    break;
-	  
+
 	  strcpy(str_addr, str);
 	}
 
@@ -374,25 +374,25 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
                                                 str, addr_err);
           break;
         }
-      
+
       /* 0.0.0.0 for server address == NULL, for Dbus */
       if (addr.in.sin_family == AF_INET &&
           addr.in.sin_addr.s_addr == 0)
         flags |= SERV_NO_ADDR;
-      
+
       if (strings)
 	{
 	  char *p;
-	  
+
 	  do {
 	    if (str_domain)
 	      {
 		if ((p = strchr(str_domain, '/')))
 		  *p++ = 0;
 	      }
-	    else 
+	    else
 	      p = NULL;
-	    
+
 	    add_update_server(flags | SERV_FROM_DBUS, &addr, &source_addr, interface, str_domain);
 	  } while ((str_domain = p));
 	}
@@ -400,18 +400,18 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
 	{
 	  /* jump past the address to the domain list (if any) */
 	  dbus_message_iter_next (&string_iter);
-	  
+
 	  /* parse domains and add each server/domain pair to the list */
 	  do {
 	    str = NULL;
 	    if (dbus_message_iter_get_arg_type(&string_iter) == DBUS_TYPE_STRING)
 	      dbus_message_iter_get_basic(&string_iter, &str);
 	    dbus_message_iter_next (&string_iter);
-	    
+
 	    add_update_server(flags | SERV_FROM_DBUS, &addr, &source_addr, interface, str);
 	  } while (dbus_message_iter_get_arg_type(&string_iter) == DBUS_TYPE_STRING);
 	}
-	 
+
       /* jump to next element in outer array */
       dbus_message_iter_next(&array_iter);
     }
@@ -431,11 +431,11 @@ static DBusMessage *dbus_set_bool(DBusMessage *message, int flag, char *name)
 
   if (!dbus_message_iter_init(message, &iter) || dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_BOOLEAN)
     return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS, "Expected boolean argument");
-  
+
   dbus_message_iter_get_basic(&iter, &enabled);
 
   if (enabled)
-    { 
+    {
       my_syslog(LOG_INFO, _("Enabling --%s option from D-Bus"), name);
       set_option_bool(flag);
     }
@@ -476,7 +476,7 @@ static DBusMessage *dbus_add_lease(DBusMessage* message)
   if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
     return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
 				  "Expected string as second argument");
-    
+
   dbus_message_iter_get_basic(&iter, &hwaddr);
   dbus_message_iter_next(&iter);
 
@@ -484,7 +484,7 @@ static DBusMessage *dbus_add_lease(DBusMessage* message)
       (dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_BYTE))
     return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
 				  "Expected byte array as third argument");
-    
+
   dbus_message_iter_recurse(&iter, &array_iter);
   dbus_message_iter_get_fixed_array(&array_iter, &hostname, &hostname_len);
   tmp = memchr(hostname, '\0', hostname_len);
@@ -510,14 +510,14 @@ static DBusMessage *dbus_add_lease(DBusMessage* message)
   if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32)
     return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
 				  "Expected uint32 as fifth argument");
-    
+
   dbus_message_iter_get_basic(&iter, &expires);
   dbus_message_iter_next(&iter);
 
   if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32)
     return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
                                     "Expected uint32 as sixth argument");
-  
+
   dbus_message_iter_get_basic(&iter, &ia_id);
   dbus_message_iter_next(&iter);
 
@@ -532,7 +532,7 @@ static DBusMessage *dbus_add_lease(DBusMessage* message)
       if (ia_id != 0 || is_temporary)
 	return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
 				      "ia_id and is_temporary must be zero for IPv4 lease");
-      
+
       if (!(lease = lease_find_by_addr(addr.addr.addr4)))
     	lease = lease4_allocate(addr.addr.addr4);
     }
@@ -548,17 +548,17 @@ static DBusMessage *dbus_add_lease(DBusMessage* message)
   else
     return dbus_message_new_error_printf(message, DBUS_ERROR_INVALID_ARGS,
 					 "Invalid IP address '%s'", ipaddr);
-   
+
   hw_len = parse_hex((char*)hwaddr, dhcp_chaddr, DHCP_CHADDR_MAX, NULL, &hw_type);
   if (hw_type == 0 && hw_len != 0)
     hw_type = ARPHRD_ETHER;
-  
+
   lease_set_hwaddr(lease, dhcp_chaddr, clid, hw_len, hw_type,
                    clid_len, now, 0);
   lease_set_expires(lease, expires, now);
   if (hostname_len != 0)
     lease_set_hostname(lease, hostname, 0, get_domain(lease->addr), NULL);
-  
+
   lease_update_file(now);
   lease_update_dns(0);
 
@@ -578,11 +578,11 @@ static DBusMessage *dbus_del_lease(DBusMessage* message)
   if (!dbus_message_iter_init(message, &iter))
     return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
 				  "Failed to initialize dbus message iter");
-   
+
   if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
     return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
 				  "Expected string as first argument");
-   
+
   dbus_message_iter_get_basic(&iter, &ipaddr);
 
   if (inet_pton(AF_INET, ipaddr, &addr.addr.addr4))
@@ -594,7 +594,7 @@ static DBusMessage *dbus_del_lease(DBusMessage* message)
   else
     return dbus_message_new_error_printf(message, DBUS_ERROR_INVALID_ARGS,
 					 "Invalid IP address '%s'", ipaddr);
-    
+
   if (lease)
     {
       lease_prune(lease, now);
@@ -603,31 +603,31 @@ static DBusMessage *dbus_del_lease(DBusMessage* message)
     }
   else
     ret = 0;
-  
+
   if ((reply = dbus_message_new_method_return(message)))
     dbus_message_append_args(reply, DBUS_TYPE_BOOLEAN, &ret,
 			     DBUS_TYPE_INVALID);
-  
-    
+
+
   return reply;
 }
 #endif
 
-DBusHandlerResult message_handler(DBusConnection *connection, 
-				  DBusMessage *message, 
+DBusHandlerResult message_handler(DBusConnection *connection,
+				  DBusMessage *message,
 				  void *user_data)
 {
   char *method = (char *)dbus_message_get_member(message);
   DBusMessage *reply = NULL;
   int clear_cache = 0, new_servers = 0;
-    
+
   if (dbus_message_is_method_call(message, DBUS_INTERFACE_INTROSPECTABLE, "Introspect"))
     {
       /* string length: "%s" provides space for termination zero */
-      if (!introspection_xml && 
+      if (!introspection_xml &&
 	  (introspection_xml = whine_malloc(strlen(introspection_xml_template) + strlen(daemon->dbus_name))))
 	sprintf(introspection_xml, introspection_xml_template, daemon->dbus_name);
-    
+
       if (introspection_xml)
 	{
 	  reply = dbus_message_new_method_return(message);
@@ -638,7 +638,7 @@ DBusHandlerResult message_handler(DBusConnection *connection,
     {
       char *v = VERSION;
       reply = dbus_message_new_method_return(message);
-      
+
       dbus_message_append_args(reply, DBUS_TYPE_STRING, &v, DBUS_TYPE_INVALID);
     }
 #ifdef HAVE_LOOP
@@ -684,7 +684,7 @@ DBusHandlerResult message_handler(DBusConnection *connection,
     clear_cache = 1;
   else
     return (DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-   
+
   if (new_servers)
     {
       my_syslog(LOG_INFO, _("setting upstream servers from DBus"));
@@ -695,7 +695,7 @@ DBusHandlerResult message_handler(DBusConnection *connection,
 
   if (clear_cache)
     clear_cache_and_reload(dnsmasq_time());
-  
+
   method = user_data; /* no warning */
 
   /* If no reply or no error, return nothing */
@@ -710,7 +710,7 @@ DBusHandlerResult message_handler(DBusConnection *connection,
 
   return (DBUS_HANDLER_RESULT_HANDLED);
 }
- 
+
 
 /* returns NULL or error message, may fail silently if dbus daemon not yet up. */
 char *dbus_init(void)
@@ -723,21 +723,21 @@ char *dbus_init(void)
   dbus_error_init (&dbus_error);
   if (!(connection = dbus_bus_get (DBUS_BUS_SYSTEM, &dbus_error)))
     return NULL;
-    
+
   dbus_connection_set_exit_on_disconnect(connection, FALSE);
-  dbus_connection_set_watch_functions(connection, add_watch, remove_watch, 
+  dbus_connection_set_watch_functions(connection, add_watch, remove_watch,
 				      NULL, NULL, NULL);
   dbus_error_init (&dbus_error);
   dbus_bus_request_name (connection, daemon->dbus_name, 0, &dbus_error);
   if (dbus_error_is_set (&dbus_error))
     return (char *)dbus_error.message;
-  
-  if (!dbus_connection_register_object_path(connection,  DNSMASQ_PATH, 
+
+  if (!dbus_connection_register_object_path(connection,  DNSMASQ_PATH,
 					    &dnsmasq_vtable, NULL))
     return _("could not register a DBus message handler");
-  
-  daemon->dbus = connection; 
-  
+
+  daemon->dbus = connection;
+
   if ((message = dbus_message_new_signal(DNSMASQ_PATH, daemon->dbus_name, "Up")))
     {
       dbus_connection_send(connection, message, NULL);
@@ -746,24 +746,24 @@ char *dbus_init(void)
 
   return NULL;
 }
- 
+
 
 void set_dbus_listeners(void)
 {
   struct watch *w;
-  
+
   for (w = daemon->watches; w; w = w->next)
     if (dbus_watch_get_enabled(w->watch))
       {
 	unsigned int flags = dbus_watch_get_flags(w->watch);
 	int fd = dbus_watch_get_unix_fd(w->watch);
-	
+
 	if (flags & DBUS_WATCH_READABLE)
 	  poll_listen(fd, POLLIN);
-	
+
 	if (flags & DBUS_WATCH_WRITABLE)
 	  poll_listen(fd, POLLOUT);
-	
+
 	poll_listen(fd, POLLERR);
       }
 }
@@ -778,13 +778,13 @@ void check_dbus_listeners()
       {
 	unsigned int flags = 0;
 	int fd = dbus_watch_get_unix_fd(w->watch);
-	
+
 	if (poll_check(fd, POLLIN))
 	  flags |= DBUS_WATCH_READABLE;
-	
+
 	if (poll_check(fd, POLLOUT))
 	  flags |= DBUS_WATCH_WRITABLE;
-	
+
 	if (poll_check(fd, POLLERR))
 	  flags |= DBUS_WATCH_ERROR;
 
@@ -812,10 +812,10 @@ void emit_dbus_signal(int action, struct dhcp_lease *lease, char *hostname)
 
   if (!connection)
     return;
-  
+
   if (!hostname)
     hostname = "";
-  
+
 #ifdef HAVE_DHCP6
    if (lease->flags & (LEASE_TA | LEASE_NA))
      {
@@ -842,14 +842,14 @@ void emit_dbus_signal(int action, struct dhcp_lease *lease, char *hostname)
 
   if (!(message = dbus_message_new_signal(DNSMASQ_PATH, daemon->dbus_name, action_str)))
     return;
-  
+
   dbus_message_iter_init_append(message, &args);
-  
+
   if (dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &daemon->addrbuff) &&
       dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &mac) &&
       dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &hostname))
     dbus_connection_send(connection, message, NULL);
-  
+
   dbus_message_unref(message);
 }
 #endif
diff --git a/src/dhcp-common.c b/src/dhcp-common.c
index eae9ae3..abadce3 100644
--- a/src/dhcp-common.c
+++ b/src/dhcp-common.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -23,10 +23,10 @@ void dhcp_common_init(void)
   /* These each hold a DHCP option max size 255
      and get a terminating zero added */
   daemon->dhcp_buff = safe_malloc(DHCP_BUFF_SZ);
-  daemon->dhcp_buff2 = safe_malloc(DHCP_BUFF_SZ); 
+  daemon->dhcp_buff2 = safe_malloc(DHCP_BUFF_SZ);
   daemon->dhcp_buff3 = safe_malloc(DHCP_BUFF_SZ);
-  
-  /* dhcp_packet is used by v4 and v6, outpacket only by v6 
+
+  /* dhcp_packet is used by v4 and v6, outpacket only by v6
      sizeof(struct dhcp_packet) is as good an initial size as any,
      even for v6 */
   expand_buf(&daemon->dhcp_packet, sizeof(struct dhcp_packet));
@@ -37,21 +37,21 @@ void dhcp_common_init(void)
 }
 
 ssize_t recv_dhcp_packet(int fd, struct msghdr *msg)
-{  
+{
   ssize_t sz;
- 
+
   while (1)
     {
       msg->msg_flags = 0;
       while ((sz = recvmsg(fd, msg, MSG_PEEK | MSG_TRUNC)) == -1 && errno == EINTR);
-      
+
       if (sz == -1)
 	return -1;
-      
+
       if (!(msg->msg_flags & MSG_TRUNC))
 	break;
 
-      /* Very new Linux kernels return the actual size needed, 
+      /* Very new Linux kernels return the actual size needed,
 	 older ones always return truncated size */
       if ((size_t)sz == msg->msg_iov->iov_len)
 	{
@@ -64,9 +64,9 @@ ssize_t recv_dhcp_packet(int fd, struct msghdr *msg)
 	  break;
 	}
     }
-  
+
   while ((sz = recvmsg(fd, msg, 0)) == -1 && errno == EINTR);
-  
+
   return (msg->msg_flags & MSG_TRUNC) ? -1 : sz;
 }
 
@@ -91,7 +91,7 @@ struct dhcp_netid *option_filter(struct dhcp_netid *tags, struct dhcp_netid *con
 {
   struct dhcp_netid *tagif = run_tag_if(tags);
   struct dhcp_opt *opt;
-  struct dhcp_opt *tmp;  
+  struct dhcp_opt *tmp;
 
   /* flag options which are valid with the current tag set (sans context tags) */
   for (opt = opts; opt; opt = opt->next)
@@ -111,7 +111,7 @@ struct dhcp_netid *option_filter(struct dhcp_netid *tags, struct dhcp_netid *con
       for (last_tag = context_tags; last_tag->next; last_tag = last_tag->next);
       last_tag->next = tags;
       tagif = run_tag_if(context_tags);
-      
+
       /* reset stuff with tag:!<tag> which now matches. */
       for (opt = opts; opt; opt = opt->next)
 	if (!(opt->flags & (DHOPT_ENCAPSULATE | DHOPT_VENDOR | DHOPT_RFC3925)) &&
@@ -123,44 +123,44 @@ struct dhcp_netid *option_filter(struct dhcp_netid *tags, struct dhcp_netid *con
 	if (!(opt->flags & (DHOPT_ENCAPSULATE | DHOPT_VENDOR | DHOPT_RFC3925 | DHOPT_TAGOK)) &&
 	    match_netid(opt->netid, tagif, 0))
 	  {
-	    struct dhcp_opt *tmp;  
-	    for (tmp = opts; tmp; tmp = tmp->next) 
+	    struct dhcp_opt *tmp;
+	    for (tmp = opts; tmp; tmp = tmp->next)
 	      if (tmp->opt == opt->opt && opt->netid && (tmp->flags & DHOPT_TAGOK))
 		break;
 	    if (!tmp)
 	      opt->flags |= DHOPT_TAGOK;
-	  }      
+	  }
     }
-  
+
   /* now flag untagged options which are not overridden by tagged ones */
   for (opt = opts; opt; opt = opt->next)
     if (!(opt->flags & (DHOPT_ENCAPSULATE | DHOPT_VENDOR | DHOPT_RFC3925 | DHOPT_TAGOK)) && !opt->netid)
       {
-	for (tmp = opts; tmp; tmp = tmp->next) 
+	for (tmp = opts; tmp; tmp = tmp->next)
 	  if (tmp->opt == opt->opt && (tmp->flags & DHOPT_TAGOK))
 	    break;
 	if (!tmp)
 	  opt->flags |= DHOPT_TAGOK;
 	else if (!tmp->netid)
-	  my_syslog(MS_DHCP | LOG_WARNING, _("Ignoring duplicate dhcp-option %d"), tmp->opt); 
+	  my_syslog(MS_DHCP | LOG_WARNING, _("Ignoring duplicate dhcp-option %d"), tmp->opt);
       }
 
   /* Finally, eliminate duplicate options later in the chain, and therefore earlier in the config file. */
   for (opt = opts; opt; opt = opt->next)
     if (opt->flags & DHOPT_TAGOK)
-      for (tmp = opt->next; tmp; tmp = tmp->next) 
+      for (tmp = opt->next; tmp; tmp = tmp->next)
 	if (tmp->opt == opt->opt)
 	  tmp->flags &= ~DHOPT_TAGOK;
-  
+
   return tagif;
 }
-	
-/* Is every member of check matched by a member of pool? 
+
+/* Is every member of check matched by a member of pool?
    If tagnotneeded, untagged is OK */
 int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int tagnotneeded)
 {
   struct dhcp_netid *tmp1;
-  
+
   if (!check && !tagnotneeded)
     return 0;
 
@@ -187,14 +187,14 @@ int match_netid(struct dhcp_netid *check, struct dhcp_netid *pool, int tagnotnee
 char *strip_hostname(char *hostname)
 {
   char *dot = strchr(hostname, '.');
- 
+
   if (!dot)
     return NULL;
-  
+
   *dot = 0; /* truncate */
   if (strlen(dot+1) != 0)
     return dot+1;
-  
+
   return NULL;
 }
 
@@ -207,11 +207,11 @@ void log_tags(struct dhcp_netid *netid, u32 xid)
 	{
 	  /* kill dupes. */
 	  struct dhcp_netid *n;
-	  
+
 	  for (n = netid->next; n; n = n->next)
 	    if (strcmp(netid->net, n->net) == 0)
 	      break;
-	  
+
 	  if (!n)
 	    {
 	      strncat (s, netid->net, (MAXDNAME-1) - strlen(s));
@@ -220,61 +220,61 @@ void log_tags(struct dhcp_netid *netid, u32 xid)
 	    }
 	}
       my_syslog(MS_DHCP | LOG_INFO, _("%u tags: %s"), xid, s);
-    } 
-}   
-  
+    }
+}
+
 int match_bytes(struct dhcp_opt *o, unsigned char *p, int len)
 {
   int i;
-  
+
   if (o->len > len)
     return 0;
-  
+
   if (o->len == 0)
     return 1;
-     
+
   if (o->flags & DHOPT_HEX)
-    { 
+    {
       if (memcmp_masked(o->val, p, o->len, o->u.wildcard_mask))
 	return 1;
     }
-  else 
-    for (i = 0; i <= (len - o->len); ) 
+  else
+    for (i = 0; i <= (len - o->len); )
       {
 	if (memcmp(o->val, p + i, o->len) == 0)
 	  return 1;
-	    
+
 	if (o->flags & DHOPT_STRING)
 	  i++;
 	else
 	  i += o->len;
       }
-  
+
   return 0;
 }
 
 int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type)
 {
   struct hwaddr_config *conf_addr;
-  
+
   for (conf_addr = config->hwaddr; conf_addr; conf_addr = conf_addr->next)
     if (conf_addr->wildcard_mask == 0 &&
 	conf_addr->hwaddr_len == len &&
 	(conf_addr->hwaddr_type == type || conf_addr->hwaddr_type == 0) &&
 	memcmp(conf_addr->hwaddr, hwaddr, len) == 0)
       return 1;
-  
+
   return 0;
 }
 
 static int is_config_in_context(struct dhcp_context *context, struct dhcp_config *config)
 {
   if (!context) /* called via find_config() from lease_update_from_configs() */
-    return 1; 
+    return 1;
 
   if (!(config->flags & (CONFIG_ADDR | CONFIG_ADDR6)))
     return 1;
-  
+
 #ifdef HAVE_DHCP6
   if ((context->flags & CONTEXT_V6) && (config->flags & CONFIG_WILDCARD))
     return 1;
@@ -282,12 +282,12 @@ static int is_config_in_context(struct dhcp_context *context, struct dhcp_config
 
   for (; context; context = context->current)
 #ifdef HAVE_DHCP6
-    if (context->flags & CONTEXT_V6) 
+    if (context->flags & CONTEXT_V6)
       {
 	if ((config->flags & CONFIG_ADDR6) && is_same_net6(&config->addr6, &context->start6, context->prefix))
 	  return 1;
       }
-    else 
+    else
 #endif
       if ((config->flags & CONFIG_ADDR) && is_same_net(config->addr, context->start, context->netmask))
 	return 1;
@@ -298,46 +298,46 @@ static int is_config_in_context(struct dhcp_context *context, struct dhcp_config
 struct dhcp_config *find_config(struct dhcp_config *configs,
 				struct dhcp_context *context,
 				unsigned char *clid, int clid_len,
-				unsigned char *hwaddr, int hw_len, 
+				unsigned char *hwaddr, int hw_len,
 				int hw_type, char *hostname)
 {
   int count, new;
-  struct dhcp_config *config, *candidate; 
+  struct dhcp_config *config, *candidate;
   struct hwaddr_config *conf_addr;
 
   if (clid)
     for (config = configs; config; config = config->next)
       if (config->flags & CONFIG_CLID)
 	{
-	  if (config->clid_len == clid_len && 
+	  if (config->clid_len == clid_len &&
 	      memcmp(config->clid, clid, clid_len) == 0 &&
 	      is_config_in_context(context, config))
 	    return config;
-	  
+
 	  /* dhcpcd prefixes ASCII client IDs by zero which is wrong, but we try and
-	     cope with that here. This is IPv4 only. context==NULL implies IPv4, 
+	     cope with that here. This is IPv4 only. context==NULL implies IPv4,
 	     see lease_update_from_configs() */
 	  if ((!context || !(context->flags & CONTEXT_V6)) && *clid == 0 && config->clid_len == clid_len-1  &&
 	      memcmp(config->clid, clid+1, clid_len-1) == 0 &&
 	      is_config_in_context(context, config))
 	    return config;
 	}
-  
+
 
   if (hwaddr)
     for (config = configs; config; config = config->next)
       if (config_has_mac(config, hwaddr, hw_len, hw_type) &&
 	  is_config_in_context(context, config))
 	return config;
-  
+
   if (hostname && context)
     for (config = configs; config; config = config->next)
-      if ((config->flags & CONFIG_NAME) && 
+      if ((config->flags & CONFIG_NAME) &&
 	  hostname_isequal(config->hostname, hostname) &&
 	  is_config_in_context(context, config))
 	return config;
 
-  
+
   if (!hwaddr)
     return NULL;
 
@@ -346,14 +346,14 @@ struct dhcp_config *find_config(struct dhcp_config *configs,
     if (is_config_in_context(context, config))
       for (conf_addr = config->hwaddr; conf_addr; conf_addr = conf_addr->next)
 	if (conf_addr->wildcard_mask != 0 &&
-	    conf_addr->hwaddr_len == hw_len &&	
+	    conf_addr->hwaddr_len == hw_len &&
 	    (conf_addr->hwaddr_type == hw_type || conf_addr->hwaddr_type == 0) &&
 	    (new = memcmp_masked(conf_addr->hwaddr, hwaddr, hw_len, conf_addr->wildcard_mask)) > count)
 	  {
 	      count = new;
 	      candidate = config;
 	  }
-  
+
   return candidate;
 }
 
@@ -361,11 +361,11 @@ void dhcp_update_configs(struct dhcp_config *configs)
 {
   /* Some people like to keep all static IP addresses in /etc/hosts.
      This goes through /etc/hosts and sets static addresses for any DHCP config
-     records which don't have an address and whose name matches. 
+     records which don't have an address and whose name matches.
      We take care to maintain the invariant that any IP address can appear
-     in at most one dhcp-host. Since /etc/hosts can be re-read by SIGHUP, 
+     in at most one dhcp-host. Since /etc/hosts can be re-read by SIGHUP,
      restore the status-quo ante first. */
-  
+
   struct dhcp_config *config, *conf_tmp;
   struct crec *crec;
   int prot = AF_INET;
@@ -374,8 +374,8 @@ void dhcp_update_configs(struct dhcp_config *configs)
     if (config->flags & CONFIG_ADDR_HOSTS)
       config->flags &= ~(CONFIG_ADDR | CONFIG_ADDR6 | CONFIG_ADDR_HOSTS);
 
-#ifdef HAVE_DHCP6 
- again:  
+#ifdef HAVE_DHCP6
+ again:
 #endif
 
   if (daemon->port != 0)
@@ -392,7 +392,7 @@ void dhcp_update_configs(struct dhcp_config *configs)
 	  }
 #endif
 	if (!(config->flags & conflags) &&
-	    (config->flags & CONFIG_NAME) && 
+	    (config->flags & CONFIG_NAME) &&
 	    (crec = cache_find_by_name(NULL, config->hostname, 0, cacheflags)) &&
 	    (crec->flags & F_HOSTS))
 	  {
@@ -404,11 +404,11 @@ void dhcp_update_configs(struct dhcp_config *configs)
 		if (!crec)
 		  continue; /* should be never */
 		inet_ntop(prot, &crec->addr.addr, daemon->addrbuff, ADDRSTRLEN);
-		my_syslog(MS_DHCP | LOG_WARNING, _("%s has more than one address in hostsfile, using %s for DHCP"), 
+		my_syslog(MS_DHCP | LOG_WARNING, _("%s has more than one address in hostsfile, using %s for DHCP"),
 			  config->hostname, daemon->addrbuff);
 	      }
-	    
-	    if (prot == AF_INET && 
+
+	    if (prot == AF_INET &&
 		(!(conf_tmp = config_find_by_address(configs, crec->addr.addr.addr.addr4)) || conf_tmp == config))
 	      {
 		config->addr = crec->addr.addr.addr.addr4;
@@ -417,7 +417,7 @@ void dhcp_update_configs(struct dhcp_config *configs)
 	      }
 
 #ifdef HAVE_DHCP6
-	    if (prot == AF_INET6 && 
+	    if (prot == AF_INET6 &&
 		(!(conf_tmp = config_find_by_address6(configs, &crec->addr.addr.addr.addr6, 128, 0)) || conf_tmp == config))
 	      {
 		memcpy(&config->addr6, &crec->addr.addr.addr.addr6, IN6ADDRSZ);
@@ -427,10 +427,10 @@ void dhcp_update_configs(struct dhcp_config *configs)
 #endif
 
 	    inet_ntop(prot, &crec->addr.addr, daemon->addrbuff, ADDRSTRLEN);
-	    my_syslog(MS_DHCP | LOG_WARNING, _("duplicate IP address %s (%s) in dhcp-config directive"), 
+	    my_syslog(MS_DHCP | LOG_WARNING, _("duplicate IP address %s (%s) in dhcp-config directive"),
 		      daemon->addrbuff, config->hostname);
-	    
-	    
+
+
 	  }
       }
 
@@ -444,26 +444,26 @@ void dhcp_update_configs(struct dhcp_config *configs)
 
 }
 
-#ifdef HAVE_LINUX_NETWORK 
+#ifdef HAVE_LINUX_NETWORK
 char *whichdevice(void)
 {
   /* If we are doing DHCP on exactly one interface, and running linux, do SO_BINDTODEVICE
      to that device. This is for the use case of  (eg) OpenStack, which runs a new
-     dnsmasq instance for each VLAN interface it creates. Without the BINDTODEVICE, 
+     dnsmasq instance for each VLAN interface it creates. Without the BINDTODEVICE,
      individual processes don't always see the packets they should.
-     SO_BINDTODEVICE is only available Linux. 
+     SO_BINDTODEVICE is only available Linux.
 
      Note that if wildcards are used in --interface, or --interface is not used at all,
-     or a configured interface doesn't yet exist, then more interfaces may arrive later, 
+     or a configured interface doesn't yet exist, then more interfaces may arrive later,
      so we can't safely assert there is only one interface and proceed.
 */
-  
+
   struct irec *iface, *found;
   struct iname *if_tmp;
-  
+
   if (!daemon->if_names)
     return NULL;
-  
+
   for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
     if (if_tmp->name && (!if_tmp->used || strchr(if_tmp->name, '*')))
       return NULL;
@@ -473,7 +473,7 @@ char *whichdevice(void)
       {
 	if (!found)
 	  found = iface;
-	else if (strcmp(found->name, iface->name) != 0) 
+	else if (strcmp(found->name, iface->name) != 0)
 	  return NULL; /* more than one. */
       }
 
@@ -482,11 +482,11 @@ char *whichdevice(void)
 
   return NULL;
 }
- 
+
 void  bindtodevice(char *device, int fd)
 {
   struct ifreq ifr;
-  
+
   strcpy(ifr.ifr_name, device);
   /* only allowed by root. */
   if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) == -1 &&
@@ -553,11 +553,11 @@ static const struct opttab_t {
   { "nis+-server", 65, OT_ADDR_LIST },
   { "tftp-server", 66, OT_NAME },
   { "bootfile-name", 67, OT_NAME },
-  { "mobile-ip-home", 68, OT_ADDR_LIST }, 
-  { "smtp-server", 69, OT_ADDR_LIST }, 
-  { "pop3-server", 70, OT_ADDR_LIST }, 
-  { "nntp-server", 71, OT_ADDR_LIST }, 
-  { "irc-server", 74, OT_ADDR_LIST }, 
+  { "mobile-ip-home", 68, OT_ADDR_LIST },
+  { "smtp-server", 69, OT_ADDR_LIST },
+  { "pop3-server", 70, OT_ADDR_LIST },
+  { "nntp-server", 71, OT_ADDR_LIST },
+  { "irc-server", 74, OT_ADDR_LIST },
   { "user-class", 77, 0 },
   { "FQDN", 81, OT_INTERNAL },
   { "agent-id", 82, OT_INTERNAL },
@@ -611,9 +611,9 @@ static const struct opttab_t opttab6[] = {
 void display_opts(void)
 {
   int i;
-  
+
   printf(_("Known DHCP options:\n"));
-  
+
   for (i = 0; opttab[i].name; i++)
     if (!(opttab[i].size & OT_INTERNAL))
       printf("%3d %s\n", opttab[i].val, opttab[i].name);
@@ -624,7 +624,7 @@ void display_opts6(void)
 {
   int i;
   printf(_("Known DHCPv6 options:\n"));
-  
+
   for (i = 0; opttab6[i].name; i++)
     if (!(opttab6[i].size & OT_INTERNAL))
       printf("%3d %s\n", opttab6[i].val, opttab6[i].name);
@@ -648,7 +648,7 @@ int lookup_dhcp_opt(int prot, char *name)
   for (i = 0; t[i].name; i++)
     if (strcasecmp(t[i].name, name) == 0)
       return t[i].val;
-  
+
   return -1;
 }
 
@@ -689,8 +689,8 @@ char *option_string(int prot, unsigned int opt, unsigned char *val, int opt_len,
 	if (buf)
 	  {
 	    memset(buf, 0, buf_len);
-	    
-	    if (ot[o].size & OT_ADDR_LIST) 
+
+	    if (ot[o].size & OT_ADDR_LIST)
 	      {
 		struct all_addr addr;
 		int addr_len = INADDRSZ;
@@ -699,12 +699,12 @@ char *option_string(int prot, unsigned int opt, unsigned char *val, int opt_len,
 		if (prot == AF_INET6)
 		  addr_len = IN6ADDRSZ;
 #endif
-		for (buf[0]= 0, i = 0; i <= opt_len - addr_len; i += addr_len) 
+		for (buf[0]= 0, i = 0; i <= opt_len - addr_len; i += addr_len)
 		  {
 		    if (i != 0)
 		      strncat(buf, ", ", buf_len - strlen(buf));
 		    /* align */
-		    memcpy(&addr, &val[i], addr_len); 
+		    memcpy(&addr, &val[i], addr_len);
 		    inet_ntop(prot, &val[i], daemon->addrbuff, ADDRSTRLEN);
 		    strncat(buf, daemon->addrbuff, buf_len - strlen(buf));
 		  }
@@ -758,14 +758,14 @@ char *option_string(int prot, unsigned int opt, unsigned char *val, int opt_len,
 		    if (j < buf_len)
 		      buf[j++] = ',';
 		  }
-	      }	      
+	      }
 #endif
 	    else if ((ot[o].size & (OT_DEC | OT_TIME)) && opt_len != 0)
 	      {
 		unsigned int dec = 0;
-		
+
 		for (i = 0; i < opt_len; i++)
-		  dec = (dec << 8) | val[i]; 
+		  dec = (dec << 8) | val[i];
 
 		if (ot[o].size & OT_TIME)
 		  prettyprint_time(buf, dec);
@@ -789,7 +789,7 @@ char *option_string(int prot, unsigned int opt, unsigned char *val, int opt_len,
       print_mac(buf, val, opt_len);
       if (trunc)
 	strncat(buf, "...", buf_len - strlen(buf));
-    
+
 
     }
 
@@ -804,16 +804,16 @@ void log_context(int family, struct dhcp_context *context)
   void *start = &context->start;
   void *end = &context->end;
   char *template = "", *p = daemon->namebuff;
-  
+
   *p = 0;
-    
+
 #ifdef HAVE_DHCP6
   if (family == AF_INET6)
     {
       struct in6_addr subnet = context->start6;
       if (!(context->flags & CONTEXT_TEMPLATE))
 	setaddr6part(&subnet, 0);
-      inet_ntop(AF_INET6, &subnet, daemon->addrbuff, ADDRSTRLEN); 
+      inet_ntop(AF_INET6, &subnet, daemon->addrbuff, ADDRSTRLEN);
       start = &context->start6;
       end = &context->end6;
     }
@@ -826,16 +826,16 @@ void log_context(int family, struct dhcp_context *context)
       p += sprintf(p, _(", lease time "));
       prettyprint_time(p, context->lease_time);
       p += strlen(p);
-    }	
+    }
 
 #ifdef HAVE_DHCP6
   if (context->flags & CONTEXT_CONSTRUCTED)
     {
       char ifrn_name[IFNAMSIZ];
-      
+
       template = p;
       p += sprintf(p, ", ");
-      
+
       if (indextoname(daemon->icmp6fd, context->if_index, ifrn_name))
 	sprintf(p, "%s for %s", (context->flags & CONTEXT_OLD) ? "old prefix" : "constructed", ifrn_name);
     }
@@ -843,13 +843,13 @@ void log_context(int family, struct dhcp_context *context)
     {
       template = p;
       p += sprintf(p, ", ");
-      
-      sprintf(p, "template for %s", context->template_interface);  
+
+      sprintf(p, "template for %s", context->template_interface);
     }
 #endif
-     
+
   if (!(context->flags & CONTEXT_OLD) &&
-      ((context->flags & CONTEXT_DHCP) || family == AF_INET)) 
+      ((context->flags & CONTEXT_DHCP) || family == AF_INET))
     {
 #ifdef HAVE_DHCP6
       if (context->flags & CONTEXT_RA_STATELESS)
@@ -859,14 +859,14 @@ void log_context(int family, struct dhcp_context *context)
 	  else
 	    strcpy(daemon->dhcp_buff, daemon->addrbuff);
 	}
-      else 
+      else
 #endif
 	inet_ntop(family, start, daemon->dhcp_buff, DHCP_BUFF_SZ);
       inet_ntop(family, end, daemon->dhcp_buff3, DHCP_BUFF_SZ);
-      my_syslog(MS_DHCP | LOG_INFO, 
-		(context->flags & CONTEXT_RA_STATELESS) ? 
+      my_syslog(MS_DHCP | LOG_INFO,
+		(context->flags & CONTEXT_RA_STATELESS) ?
 		_("%s stateless on %s%.0s%.0s%s") :
-		(context->flags & CONTEXT_STATIC) ? 
+		(context->flags & CONTEXT_STATIC) ?
 		_("%s, static leases only on %.0s%s%s%.0s") :
 		(context->flags & CONTEXT_PROXY) ?
 		_("%s, proxy on subnet %.0s%s%.0s%.0s") :
@@ -874,7 +874,7 @@ void log_context(int family, struct dhcp_context *context)
 		(family != AF_INET) ? "DHCPv6" : "DHCP",
 		daemon->dhcp_buff, daemon->dhcp_buff3, daemon->namebuff, template);
     }
-  
+
 #ifdef HAVE_DHCP6
   if (context->flags & CONTEXT_TEMPLATE)
     {
@@ -884,8 +884,8 @@ void log_context(int family, struct dhcp_context *context)
 
   if ((context->flags & CONTEXT_RA_NAME) && !(context->flags & CONTEXT_OLD))
     my_syslog(MS_DHCP | LOG_INFO, _("DHCPv4-derived IPv6 names on %s%s"), daemon->addrbuff, template);
-  
-  if ((context->flags & CONTEXT_RA) || (option_bool(OPT_RA) && (context->flags & CONTEXT_DHCP) && family == AF_INET6)) 
+
+  if ((context->flags & CONTEXT_RA) || (option_bool(OPT_RA) && (context->flags & CONTEXT_DHCP) && family == AF_INET6))
     my_syslog(MS_DHCP | LOG_INFO, _("router advertisement on %s%s"), daemon->addrbuff, template);
 #endif
 
@@ -894,12 +894,12 @@ void log_context(int family, struct dhcp_context *context)
 void log_relay(int family, struct dhcp_relay *relay)
 {
   inet_ntop(family, &relay->local, daemon->addrbuff, ADDRSTRLEN);
-  inet_ntop(family, &relay->server, daemon->namebuff, ADDRSTRLEN); 
+  inet_ntop(family, &relay->server, daemon->namebuff, ADDRSTRLEN);
 
   if (relay->interface)
     my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay from %s to %s via %s"), daemon->addrbuff, daemon->namebuff, relay->interface);
   else
     my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay from %s to %s"), daemon->addrbuff, daemon->namebuff);
 }
-   
+
 #endif
diff --git a/src/dhcp-protocol.h b/src/dhcp-protocol.h
index 0786f87..9b00748 100644
--- a/src/dhcp-protocol.h
+++ b/src/dhcp-protocol.h
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -27,7 +27,7 @@
 #define BOOTREPLY                2
 #define DHCP_COOKIE              0x63825363
 
-/* The Linux in-kernel DHCP client silently ignores any packet 
+/* The Linux in-kernel DHCP client silently ignores any packet
    smaller than this. Sigh...........   */
 #define MIN_PACKETSZ             300
 
@@ -39,7 +39,7 @@
 #define OPTION_DOMAINNAME        15
 #define OPTION_BROADCAST         28
 #define OPTION_VENDOR_CLASS_OPT  43
-#define OPTION_REQUESTED_IP      50 
+#define OPTION_REQUESTED_IP      50
 #define OPTION_LEASE_TIME        51
 #define OPTION_OVERLOAD          52
 #define OPTION_MESSAGE_TYPE      53
diff --git a/src/dhcp.c b/src/dhcp.c
index 4a2983e..206833d 100644
--- a/src/dhcp.c
+++ b/src/dhcp.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -51,7 +51,7 @@ static int make_fd(int port)
 
   if (fd == -1)
     die (_("cannot create DHCP socket: %s"), NULL, EC_BADNET);
-  
+
   if (!fix_fd(fd) ||
 #if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT)
       setsockopt(fd, IPPROTO_IP, IP_MTU_DISCOVER, &mtu, sizeof(mtu)) == -1 ||
@@ -64,31 +64,31 @@ static int make_fd(int port)
 #else
       setsockopt(fd, IPPROTO_IP, IP_RECVIF, &oneopt, sizeof(oneopt)) == -1 ||
 #endif
-      setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &oneopt, sizeof(oneopt)) == -1)  
+      setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &oneopt, sizeof(oneopt)) == -1)
     die(_("failed to set options on DHCP socket: %s"), NULL, EC_BADNET);
-  
+
   /* When bind-interfaces is set, there might be more than one dnsmasq
      instance binding port 67. That's OK if they serve different networks.
      Need to set REUSEADDR|REUSEPORT to make this possible.
-     Handle the case that REUSEPORT is defined, but the kernel doesn't 
+     Handle the case that REUSEPORT is defined, but the kernel doesn't
      support it. This handles the introduction of REUSEPORT on Linux. */
   if (option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND))
     {
       int rc = 0;
 
 #ifdef SO_REUSEPORT
-      if ((rc = setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &oneopt, sizeof(oneopt))) == -1 && 
+      if ((rc = setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &oneopt, sizeof(oneopt))) == -1 &&
 	  errno == ENOPROTOOPT)
 	rc = 0;
 #endif
-      
+
       if (rc != -1)
 	rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &oneopt, sizeof(oneopt));
-      
+
       if (rc == -1)
 	die(_("failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"), NULL, EC_BADNET);
     }
-  
+
   memset(&saddr, 0, sizeof(saddr));
   saddr.sin_family = AF_INET;
   saddr.sin_port = htons(port);
@@ -119,16 +119,16 @@ void dhcp_init(void)
   /* When we're not using capabilities, we need to do this here before
      we drop root. Also, set buffer size small, to avoid wasting
      kernel buffers */
-  
+
   if (option_bool(OPT_NO_PING))
     daemon->dhcp_icmp_fd = -1;
   else if ((daemon->dhcp_icmp_fd = make_icmp_sock()) == -1 ||
 	   setsockopt(daemon->dhcp_icmp_fd, SOL_SOCKET, SO_RCVBUF, &oneopt, sizeof(oneopt)) == -1 )
     die(_("cannot create ICMP raw socket: %s."), NULL, EC_BADNET);
-  
+
   /* Make BPF raw send socket */
   init_bpf();
-#endif  
+#endif
 }
 
 void dhcp_packet(time_t now, int pxe_fd)
@@ -144,7 +144,7 @@ void dhcp_packet(time_t now, int pxe_fd)
   struct sockaddr_in dest;
   struct cmsghdr *cmptr;
   struct iovec iov;
-  ssize_t sz; 
+  ssize_t sz;
   int iface_index = 0, unicast_dest = 0, is_inform = 0, loopback = 0;
   int rcvd_iface_index;
   struct in_addr iface_addr;
@@ -154,14 +154,14 @@ void dhcp_packet(time_t now, int pxe_fd)
   struct arpreq arp_req;
   struct timeval tv;
 #endif
-  
+
   union {
     struct cmsghdr align; /* this ensures alignment */
 #if defined(HAVE_LINUX_NETWORK)
     char control[CMSG_SPACE(sizeof(struct in_pktinfo))];
 #elif defined(HAVE_SOLARIS_NETWORK)
     char control[CMSG_SPACE(sizeof(unsigned int))];
-#elif defined(HAVE_BSD_NETWORK) 
+#elif defined(HAVE_BSD_NETWORK)
     char control[CMSG_SPACE(sizeof(struct sockaddr_dl))];
 #endif
   } control_u;
@@ -173,11 +173,11 @@ void dhcp_packet(time_t now, int pxe_fd)
   msg.msg_namelen = sizeof(dest);
   msg.msg_iov = &daemon->dhcp_packet;
   msg.msg_iovlen = 1;
-  
-  if ((sz = recv_dhcp_packet(fd, &msg)) == -1 || 
-      (sz < (ssize_t)(sizeof(*mess) - sizeof(mess->options)))) 
+
+  if ((sz = recv_dhcp_packet(fd, &msg)) == -1 ||
+      (sz < (ssize_t)(sizeof(*mess) - sizeof(mess->options))))
     return;
-    
+
   #if defined (HAVE_LINUX_NETWORK)
   if (ioctl(fd, SIOCGSTAMP, &tv) == 0)
     recvtime = tv.tv_sec;
@@ -196,7 +196,7 @@ void dhcp_packet(time_t now, int pxe_fd)
 	    unicast_dest = 1;
 	}
 
-#elif defined(HAVE_BSD_NETWORK) 
+#elif defined(HAVE_BSD_NETWORK)
   if (msg.msg_controllen >= sizeof(struct cmsghdr))
     for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
       if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
@@ -208,8 +208,8 @@ void dhcp_packet(time_t now, int pxe_fd)
 	  p.c = CMSG_DATA(cmptr);
 	  iface_index = p.s->sdl_index;
 	}
-  
-#elif defined(HAVE_SOLARIS_NETWORK) 
+
+#elif defined(HAVE_SOLARIS_NETWORK)
   if (msg.msg_controllen >= sizeof(struct cmsghdr))
     for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
       if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
@@ -222,18 +222,18 @@ void dhcp_packet(time_t now, int pxe_fd)
 	  iface_index = *(p.i);
 	}
 #endif
-	
+
   if (!indextoname(daemon->dhcpfd, iface_index, ifr.ifr_name) ||
       ioctl(daemon->dhcpfd, SIOCGIFFLAGS, &ifr) != 0)
     return;
-  
+
   mess = (struct dhcp_packet *)daemon->dhcp_packet.iov_base;
   loopback = !mess->giaddr.s_addr && (ifr.ifr_flags & IFF_LOOPBACK);
-  
+
 #ifdef HAVE_LINUX_NETWORK
   /* ARP fiddling uses original interface even if we pretend to use a different one. */
   strncpy(arp_req.arp_dev, ifr.ifr_name, 16);
-#endif 
+#endif
 
   /* If the interface on which the DHCP request was received is an
      alias of some other interface (as specified by the
@@ -253,13 +253,13 @@ void dhcp_packet(time_t now, int pxe_fd)
 			  bridge->iface);
 		return;
 	      }
-	    else 
+	    else
 	      {
 		strncpy(ifr.ifr_name,  bridge->iface, IF_NAMESIZE);
 		break;
 	      }
 	  }
-      
+
       if (alias)
 	break;
     }
@@ -269,18 +269,18 @@ void dhcp_packet(time_t now, int pxe_fd)
   if (!(msg.msg_flags & MSG_BCAST))
     unicast_dest = 1;
 #endif
-  
+
   if ((relay = relay_reply4((struct dhcp_packet *)daemon->dhcp_packet.iov_base, ifr.ifr_name)))
     {
       /* Reply from server, using us as relay. */
       rcvd_iface_index = relay->iface_index;
       if (!indextoname(daemon->dhcpfd, rcvd_iface_index, ifr.ifr_name))
 	return;
-      is_relay_reply = 1; 
+      is_relay_reply = 1;
       iov.iov_len = sz;
 #ifdef HAVE_LINUX_NETWORK
       strncpy(arp_req.arp_dev, ifr.ifr_name, 16);
-#endif 
+#endif
     }
   else
     {
@@ -293,43 +293,43 @@ void dhcp_packet(time_t now, int pxe_fd)
 	    my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name);
 	  return;
 	}
-      
+
       for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
 	if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
 	  return;
-      
+
       /* unlinked contexts/relays are marked by context->current == context */
       for (context = daemon->dhcp; context; context = context->next)
 	context->current = context;
-      
+
       for (relay = daemon->relay4; relay; relay = relay->next)
 	relay->current = relay;
-      
+
       parm.current = NULL;
       parm.relay = NULL;
       parm.relay_local.s_addr = 0;
       parm.ind = iface_index;
-      
+
       if (!iface_check(AF_INET, (struct all_addr *)&iface_addr, ifr.ifr_name, NULL))
 	{
 	  /* If we failed to match the primary address of the interface, see if we've got a --listen-address
 	     for a secondary */
 	  struct match_param match;
-	  
+
 	  match.matched = 0;
 	  match.ind = iface_index;
-	  
+
 	  if (!daemon->if_addrs ||
 	      !iface_enumerate(AF_INET, &match, check_listen_addrs) ||
 	      !match.matched)
 	    return;
-	  
+
 	  iface_addr = match.addr;
 	  /* make sure secondary address gets priority in case
 	     there is more than one address on the interface in the same subnet */
 	  complete_context(match.addr, iface_index, NULL, match.netmask, match.broadcast, &parm);
-	}    
-      
+	}
+
       if (!iface_enumerate(AF_INET, &parm, complete_context))
 	return;
 
@@ -343,11 +343,11 @@ void dhcp_packet(time_t now, int pxe_fd)
 	return;
 
       lease_prune(NULL, now); /* lose any expired leases */
-      iov.iov_len = dhcp_reply(parm.current, ifr.ifr_name, iface_index, (size_t)sz, 
+      iov.iov_len = dhcp_reply(parm.current, ifr.ifr_name, iface_index, (size_t)sz,
 			       now, unicast_dest, loopback, &is_inform, pxe_fd, iface_addr, recvtime);
       lease_update_file(now);
       lease_update_dns(0);
-      
+
       if (iov.iov_len == 0)
 	return;
     }
@@ -358,16 +358,16 @@ void dhcp_packet(time_t now, int pxe_fd)
   msg.msg_controllen = 0;
   msg.msg_iov = &iov;
   iov.iov_base = daemon->dhcp_packet.iov_base;
-  
+
   /* packet buffer may have moved */
   mess = (struct dhcp_packet *)daemon->dhcp_packet.iov_base;
-  
+
 #ifdef HAVE_SOCKADDR_SA_LEN
   dest.sin_len = sizeof(struct sockaddr_in);
 #endif
-  
+
   if (pxe_fd)
-    { 
+    {
       if (mess->ciaddr.s_addr != 0)
 	dest.sin_addr = mess->ciaddr;
     }
@@ -375,21 +375,21 @@ void dhcp_packet(time_t now, int pxe_fd)
     {
       /* Send to BOOTP relay  */
       dest.sin_port = htons(daemon->dhcp_server_port);
-      dest.sin_addr = mess->giaddr; 
+      dest.sin_addr = mess->giaddr;
     }
   else if (mess->ciaddr.s_addr)
     {
       /* If the client's idea of its own address tallys with
 	 the source address in the request packet, we believe the
-	 source port too, and send back to that.  If we're replying 
+	 source port too, and send back to that.  If we're replying
 	 to a DHCPINFORM, trust the source address always. */
       if ((!is_inform && dest.sin_addr.s_addr != mess->ciaddr.s_addr) ||
 	  dest.sin_port == 0 || dest.sin_addr.s_addr == 0 || is_relay_reply)
 	{
-	  dest.sin_port = htons(daemon->dhcp_client_port); 
+	  dest.sin_port = htons(daemon->dhcp_client_port);
 	  dest.sin_addr = mess->ciaddr;
 	}
-    } 
+    }
 #if defined(HAVE_LINUX_NETWORK)
   else
     {
@@ -438,9 +438,9 @@ void dhcp_packet(time_t now, int pxe_fd)
     }
   else
     {
-      /* unicast to unconfigured client. Inject mac address direct into ARP cache. 
+      /* unicast to unconfigured client. Inject mac address direct into ARP cache.
 	 Note that this only works for ethernet on solaris, because we use SIOCSARP
-	 and not SIOCSXARP, which would be perfect, except that it returns ENXIO 
+	 and not SIOCSXARP, which would be perfect, except that it returns ENXIO
 	 mysteriously. Bah. Fall back to broadcast for other net types. */
       struct arpreq req;
       dest.sin_addr = mess->yiaddr;
@@ -452,17 +452,17 @@ void dhcp_packet(time_t now, int pxe_fd)
       ioctl(daemon->dhcpfd, SIOCSARP, &req);
     }
 #elif defined(HAVE_BSD_NETWORK)
-  else 
+  else
     {
       send_via_bpf(mess, iov.iov_len, iface_addr, &ifr);
       return;
     }
 #endif
-   
+
 #ifdef HAVE_SOLARIS_NETWORK
   setsockopt(fd, IPPROTO_IP, IP_BOUND_IF, &iface_index, sizeof(iface_index));
 #endif
-  
+
   while(retry_send(sendmsg(fd, &msg, 0)));
 
   /* This can fail when, eg, iptables DROPS destination 255.255.255.255 */
@@ -493,11 +493,11 @@ static int check_listen_addrs(struct in_addr local, int if_index, char *label,
 	    break;
 	  }
     }
-  
+
   return 1;
 }
 
-/* This is a complex routine: it gets called with each (address,netmask,broadcast) triple 
+/* This is a complex routine: it gets called with each (address,netmask,broadcast) triple
    of each interface (and any relay address) and does the  following things:
 
    1) Discards stuff for interfaces other than the one on which a DHCP packet just arrived.
@@ -515,13 +515,13 @@ static int complete_context(struct in_addr local, int if_index, char *label,
   struct iface_param *param = vparam;
 
   (void)label;
-  
+
   for (context = daemon->dhcp; context; context = context->next)
     {
       if (!(context->flags & CONTEXT_NETMASK) &&
 	  (is_same_net(local, context->start, netmask) ||
 	   is_same_net(local, context->end, netmask)))
-      { 
+      {
 	if (context->netmask.s_addr != netmask.s_addr &&
 	    !(is_same_net(local, context->start, netmask) &&
 	      is_same_net(local, context->end, netmask)))
@@ -530,10 +530,10 @@ static int complete_context(struct in_addr local, int if_index, char *label,
 	    strcpy(daemon->dhcp_buff2, inet_ntoa(context->end));
 	    my_syslog(MS_DHCP | LOG_WARNING, _("DHCP range %s -- %s is not consistent with netmask %s"),
 		      daemon->dhcp_buff, daemon->dhcp_buff2, inet_ntoa(netmask));
-	  }	
+	  }
  	context->netmask = netmask;
       }
-      
+
       if (context->netmask.s_addr != 0 &&
 	  is_same_net(local, context->start, context->netmask) &&
 	  is_same_net(local, context->end, context->netmask))
@@ -546,15 +546,15 @@ static int complete_context(struct in_addr local, int if_index, char *label,
 	      context->current = param->current;
 	      param->current = context;
 	    }
-	  
+
 	  if (!(context->flags & CONTEXT_BRDCAST))
 	    {
 	      if (is_same_net(broadcast, context->start, context->netmask))
 		context->broadcast = broadcast;
-	      else 
+	      else
 		context->broadcast.s_addr  = context->start.s_addr | ~context->netmask.s_addr;
 	    }
-	}		
+	}
     }
 
   for (relay = daemon->relay4; relay; relay = relay->next)
@@ -563,27 +563,27 @@ static int complete_context(struct in_addr local, int if_index, char *label,
       {
 	relay->current = param->relay;
 	param->relay = relay;
-	param->relay_local = local;	
+	param->relay_local = local;
       }
 
   return 1;
 }
-	  
-struct dhcp_context *address_available(struct dhcp_context *context, 
+
+struct dhcp_context *address_available(struct dhcp_context *context,
 				       struct in_addr taddr,
 				       struct dhcp_netid *netids)
 {
   /* Check is an address is OK for this network, check all
      possible ranges. Make sure that the address isn't in use
      by the server itself. */
-  
+
   unsigned int start, end, addr = ntohl(taddr.s_addr);
   struct dhcp_context *tmp;
 
   for (tmp = context; tmp; tmp = tmp->current)
     if (taddr.s_addr == context->router.s_addr)
       return NULL;
-  
+
   for (tmp = context; tmp; tmp = tmp->current)
     {
       start = ntohl(tmp->start.s_addr);
@@ -599,7 +599,7 @@ struct dhcp_context *address_available(struct dhcp_context *context,
   return NULL;
 }
 
-struct dhcp_context *narrow_context(struct dhcp_context *context, 
+struct dhcp_context *narrow_context(struct dhcp_context *context,
 				    struct in_addr taddr,
 				    struct dhcp_netid *netids)
 {
@@ -608,19 +608,19 @@ struct dhcp_context *narrow_context(struct dhcp_context *context,
      Here we have an address, and return the actual context corresponding to that
      address. Note that none may fit, if the address came a dhcp-host and is outside
      any dhcp-range. In that case we return a static range if possible, or failing that,
-     any context on the correct subnet. (If there's more than one, this is a dodgy 
+     any context on the correct subnet. (If there's more than one, this is a dodgy
      configuration: maybe there should be a warning.) */
-  
+
   struct dhcp_context *tmp;
 
   if (!(tmp = address_available(context, taddr, netids)))
     {
       for (tmp = context; tmp; tmp = tmp->current)
 	if (match_netid(tmp->filter, netids, 1) &&
-	    is_same_net(taddr, tmp->start, tmp->netmask) && 
+	    is_same_net(taddr, tmp->start, tmp->netmask) &&
 	    (tmp->flags & CONTEXT_STATIC))
 	  break;
-      
+
       if (!tmp)
 	for (tmp = context; tmp; tmp = tmp->current)
 	  if (match_netid(tmp->filter, netids, 1) &&
@@ -628,18 +628,18 @@ struct dhcp_context *narrow_context(struct dhcp_context *context,
 	      !(tmp->flags & CONTEXT_PROXY))
 	    break;
     }
-  
+
   /* Only one context allowed now */
   if (tmp)
     tmp->current = NULL;
-  
+
   return tmp;
 }
 
 struct dhcp_config *config_find_by_address(struct dhcp_config *configs, struct in_addr addr)
 {
   struct dhcp_config *config;
-  
+
   for (config = configs; config; config = config->next)
     if ((config->flags & CONFIG_ADDR) && config->addr.s_addr == addr.s_addr)
       return config;
@@ -662,18 +662,18 @@ struct ping_result *do_icmp_ping(time_t now, struct in_addr addr, unsigned int h
      PING_CACHE_TIME seconds. If so, assume the same situation still exists.
      This avoids problems when a stupid client bangs
      on us repeatedly. As a final check, if we did more
-     than 60% of the possible ping checks in the last 
+     than 60% of the possible ping checks in the last
      PING_CACHE_TIME, we are in high-load mode, so don't do any more. */
   for (count = 0, r = daemon->ping_results; r; r = r->next)
     if (difftime(now, r->time) >  (float)PING_CACHE_TIME)
       victim = r; /* old record */
-    else 
+    else
       {
 	count++;
 	if (r->addr.s_addr == addr.s_addr)
 	  return r;
       }
-  
+
   /* didn't find cached entry */
   if ((count >= max) || option_bool(OPT_NO_PING) || loopback)
     {
@@ -694,8 +694,8 @@ struct ping_result *do_icmp_ping(time_t now, struct in_addr addr, unsigned int h
 	      daemon->ping_results = victim;
 	    }
 	}
-      
-      /* record that this address is OK for 30s 
+
+      /* record that this address is OK for 30s
 	 without more ping checks */
       if (victim)
 	{
@@ -708,8 +708,8 @@ struct ping_result *do_icmp_ping(time_t now, struct in_addr addr, unsigned int h
 }
 
 int address_allocate(struct dhcp_context *context,
-		     struct in_addr *addrp, unsigned char *hwaddr, int hw_len, 
-		     struct dhcp_netid *netids, time_t now, int loopback)   
+		     struct in_addr *addrp, unsigned char *hwaddr, int hw_len,
+		     struct dhcp_netid *netids, time_t now, int loopback)
 {
   /* Find a free address: exclude anything in use and anything allocated to
      a particular hwaddr/clientid/hostname in our configuration.
@@ -718,17 +718,17 @@ int address_allocate(struct dhcp_context *context,
   struct in_addr start, addr;
   struct dhcp_context *c, *d;
   int i, pass;
-  unsigned int j; 
+  unsigned int j;
 
   /* hash hwaddr: use the SDBM hashing algorithm.  Seems to give good
-     dispersal even with similarly-valued "strings". */ 
+     dispersal even with similarly-valued "strings". */
   for (j = 0, i = 0; i < hw_len; i++)
     j = hwaddr[i] + (j << 6) + (j << 16) - j;
 
   /* j == 0 is marker */
   if (j == 0)
     j = 1;
-  
+
   for (pass = 0; pass <= 1; pass++)
     for (c = context; c; c = c->current)
       if (c->flags & (CONTEXT_STATIC | CONTEXT_PROXY))
@@ -742,31 +742,31 @@ int address_allocate(struct dhcp_context *context,
 	    start = lease_find_max_addr(c);
 	  else
 	    /* pick a seed based on hwaddr */
-	    start.s_addr = htonl(ntohl(c->start.s_addr) + 
+	    start.s_addr = htonl(ntohl(c->start.s_addr) +
 				 ((j + c->addr_epoch) % (1 + ntohl(c->end.s_addr) - ntohl(c->start.s_addr))));
 
 	  /* iterate until we find a free address. */
 	  addr = start;
-	  
+
 	  do {
 	    /* eliminate addresses in use by the server. */
 	    for (d = context; d; d = d->current)
 	      if (addr.s_addr == d->router.s_addr)
 		break;
 
-	    /* Addresses which end in .255 and .0 are broken in Windows even when using 
+	    /* Addresses which end in .255 and .0 are broken in Windows even when using
 	       supernetting. ie dhcp-range=192.168.0.1,192.168.1.254,255,255,254.0
 	       then 192.168.0.255 is a valid IP address, but not for Windows as it's
-	       in the class C range. See  KB281579. We therefore don't allocate these 
-	       addresses to avoid hard-to-diagnose problems. Thanks Bill. */	    
+	       in the class C range. See  KB281579. We therefore don't allocate these
+	       addresses to avoid hard-to-diagnose problems. Thanks Bill. */
 	    if (!d &&
-		!lease_find_by_addr(addr) && 
+		!lease_find_by_addr(addr) &&
 		!config_find_by_address(daemon->dhcp_conf, addr) &&
-		(!IN_CLASSC(ntohl(addr.s_addr)) || 
+		(!IN_CLASSC(ntohl(addr.s_addr)) ||
 		 ((ntohl(addr.s_addr) & 0xff) != 0xff && ((ntohl(addr.s_addr) & 0xff) != 0x0))))
 	      {
 		struct ping_result *r;
-		
+
 		if ((r = do_icmp_ping(now, addr, j, loopback)))
  		  {
 		    /* consec-ip mode: we offered this address for another client
@@ -785,12 +785,12 @@ int address_allocate(struct dhcp_context *context,
 		      c->addr_epoch++;
 		  }
 	      }
-	    
+
 	    addr.s_addr = htonl(ntohl(addr.s_addr) + 1);
-	    
+
 	    if (addr.s_addr == htonl(ntohl(c->end.s_addr) + 1))
 	      addr = c->start;
-	    
+
 	  } while (addr.s_addr != start.s_addr);
 	}
 
@@ -810,7 +810,7 @@ void dhcp_read_ethers(void)
   int count = 0, lineno = 0;
 
   addr.s_addr = 0; /* eliminate warning */
-  
+
   if (!f)
     {
       my_syslog(MS_DHCP | LOG_ERR, _("failed to read %s: %s"), ETHERSFILE, strerror(errno));
@@ -837,54 +837,54 @@ void dhcp_read_ethers(void)
   while (fgets(buff, MAXDNAME, f))
     {
       char *host = NULL;
-      
+
       lineno++;
-      
+
       while (strlen(buff) > 0 && isspace((int)buff[strlen(buff)-1]))
 	buff[strlen(buff)-1] = 0;
-      
+
       if ((*buff == '#') || (*buff == '+') || (*buff == 0))
 	continue;
-      
+
       for (ip = buff; *ip && !isspace((int)*ip); ip++);
       for(; *ip && isspace((int)*ip); ip++)
 	*ip = 0;
       if (!*ip || parse_hex(buff, hwaddr, ETHER_ADDR_LEN, NULL, NULL) != ETHER_ADDR_LEN)
 	{
-	  my_syslog(MS_DHCP | LOG_ERR, _("bad line at %s line %d"), ETHERSFILE, lineno); 
+	  my_syslog(MS_DHCP | LOG_ERR, _("bad line at %s line %d"), ETHERSFILE, lineno);
 	  continue;
 	}
-      
+
       /* check for name or dotted-quad */
       for (cp = ip; *cp; cp++)
 	if (!(*cp == '.' || (*cp >='0' && *cp <= '9')))
 	  break;
-      
+
       if (!*cp)
 	{
 	  if ((addr.s_addr = inet_addr(ip)) == (in_addr_t)-1)
 	    {
-	      my_syslog(MS_DHCP | LOG_ERR, _("bad address at %s line %d"), ETHERSFILE, lineno); 
+	      my_syslog(MS_DHCP | LOG_ERR, _("bad address at %s line %d"), ETHERSFILE, lineno);
 	      continue;
 	    }
 
 	  flags = CONFIG_ADDR;
-	  
+
 	  for (config = daemon->dhcp_conf; config; config = config->next)
 	    if ((config->flags & CONFIG_ADDR) && config->addr.s_addr == addr.s_addr)
 	      break;
 	}
-      else 
+      else
 	{
 	  int nomem;
 	  if (!(host = canonicalise(ip, &nomem)) || !legal_hostname(host))
 	    {
 	      if (!nomem)
-		my_syslog(MS_DHCP | LOG_ERR, _("bad name at %s line %d"), ETHERSFILE, lineno); 
+		my_syslog(MS_DHCP | LOG_ERR, _("bad name at %s line %d"), ETHERSFILE, lineno);
 	      free(host);
 	      continue;
 	    }
-	      
+
 	  flags = CONFIG_NAME;
 
 	  for (config = daemon->dhcp_conf; config; config = config->next)
@@ -894,24 +894,24 @@ void dhcp_read_ethers(void)
 
       if (config && (config->flags & CONFIG_FROM_ETHERS))
 	{
-	  my_syslog(MS_DHCP | LOG_ERR, _("ignoring %s line %d, duplicate name or IP address"), ETHERSFILE, lineno); 
+	  my_syslog(MS_DHCP | LOG_ERR, _("ignoring %s line %d, duplicate name or IP address"), ETHERSFILE, lineno);
 	  continue;
 	}
-	
+
       if (!config)
-	{ 
+	{
 	  for (config = daemon->dhcp_conf; config; config = config->next)
 	    {
 	      struct hwaddr_config *conf_addr = config->hwaddr;
-	      if (conf_addr && 
-		  conf_addr->next == NULL && 
+	      if (conf_addr &&
+		  conf_addr->next == NULL &&
 		  conf_addr->wildcard_mask == 0 &&
 		  conf_addr->hwaddr_len == ETHER_ADDR_LEN &&
 		  (conf_addr->hwaddr_type == ARPHRD_ETHER || conf_addr->hwaddr_type == 0) &&
 		  memcmp(conf_addr->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
 		break;
 	    }
-	  
+
 	  if (!config)
 	    {
 	      if (!(config = whine_malloc(sizeof(struct dhcp_config))))
@@ -923,19 +923,19 @@ void dhcp_read_ethers(void)
 	      config->next = daemon->dhcp_conf;
 	      daemon->dhcp_conf = config;
 	    }
-	  
+
 	  config->flags |= flags;
-	  
+
 	  if (flags & CONFIG_NAME)
 	    {
 	      config->hostname = host;
 	      host = NULL;
 	    }
-	  
+
 	  if (flags & CONFIG_ADDR)
 	    config->addr = addr;
 	}
-      
+
       config->flags |= CONFIG_NOCLID;
       if (!config->hwaddr)
 	config->hwaddr = whine_malloc(sizeof(struct hwaddr_config));
@@ -948,11 +948,11 @@ void dhcp_read_ethers(void)
 	  config->hwaddr->next = NULL;
 	}
       count++;
-      
+
       free(host);
 
     }
-  
+
   fclose(f);
 
   my_syslog(MS_DHCP | LOG_INFO, _("read %s - %d addresses"), ETHERSFILE, count);
@@ -962,7 +962,7 @@ void dhcp_read_ethers(void)
 /* If we've not found a hostname any other way, try and see if there's one in /etc/hosts
    for this address. If it has a domain part, that must match the set domain and
    it gets stripped. The set of legal domain names is bigger than the set of legal hostnames
-   so check here that the domain name is legal as a hostname. 
+   so check here that the domain name is legal as a hostname.
    NOTE: we're only allowed to overwrite daemon->dhcp_buff if we succeed. */
 char *host_from_dns(struct in_addr addr)
 {
@@ -970,14 +970,14 @@ char *host_from_dns(struct in_addr addr)
 
   if (daemon->port == 0)
     return NULL; /* DNS disabled. */
-  
+
   lookup = cache_find_by_addr(NULL, (struct all_addr *)&addr, 0, F_IPV4);
 
   if (lookup && (lookup->flags & F_HOSTS))
     {
       char *dot, *hostname = cache_get_name(lookup);
       dot = strchr(hostname, '.');
-      
+
       if (dot && strlen(dot+1) != 0)
 	{
 	  char *d2 = get_domain(addr);
@@ -987,14 +987,14 @@ char *host_from_dns(struct in_addr addr)
 
       if (!legal_hostname(hostname))
 	return NULL;
-      
+
       strncpy(daemon->dhcp_buff, hostname, 256);
       daemon->dhcp_buff[255] = 0;
       strip_hostname(daemon->dhcp_buff);
 
       return daemon->dhcp_buff;
     }
-  
+
   return NULL;
 }
 
@@ -1002,13 +1002,13 @@ static int  relay_upstream4(struct dhcp_relay *relay, struct dhcp_packet *mess,
 {
   /* ->local is same value for all relays on ->current chain */
   struct all_addr from;
-  
+
   if (mess->op != BOOTREQUEST)
     return 0;
 
   /* source address == relay address */
   from.addr.addr4 = relay->local.addr.addr4;
-  
+
   /* already gatewayed ? */
   if (mess->giaddr.s_addr)
     {
@@ -1028,23 +1028,23 @@ static int  relay_upstream4(struct dhcp_relay *relay, struct dhcp_packet *mess,
   for (; relay; relay = relay->current)
     {
       union mysockaddr to;
-      
+
       to.sa.sa_family = AF_INET;
       to.in.sin_addr = relay->server.addr.addr4;
       to.in.sin_port = htons(daemon->dhcp_server_port);
-      
+
       send_from(daemon->dhcpfd, 0, (char *)mess, sz, &to, &from, 0);
-      
+
       if (option_bool(OPT_LOG_OPTS))
 	{
 	  inet_ntop(AF_INET, &relay->local, daemon->addrbuff, ADDRSTRLEN);
 	  my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay %s -> %s"), daemon->addrbuff, inet_ntoa(relay->server.addr.addr4));
 	}
-      
+
       /* Save this for replies */
       relay->iface_index = iface_index;
     }
-  
+
   return 1;
 }
 
@@ -1064,8 +1064,8 @@ static struct dhcp_relay *relay_reply4(struct dhcp_packet *mess, char *arrival_i
 	    return relay->iface_index != 0 ? relay : NULL;
 	}
     }
-  
-  return NULL;	 
-}     
+
+  return NULL;
+}
 
 #endif
diff --git a/src/dhcp6-protocol.h b/src/dhcp6-protocol.h
index f4d03dd..3d3dd35 100644
--- a/src/dhcp6-protocol.h
+++ b/src/dhcp6-protocol.h
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -62,7 +62,7 @@
 #define OPTION6_CLIENT_MAC      79
 
 /* replace this with the real number when allocated.
-   defining this also enables the relevant code. */ 
+   defining this also enables the relevant code. */
 /* #define OPTION6_PREFIX_CLASS    99 */
 
 
diff --git a/src/dhcp6.c b/src/dhcp6.c
index cb4f65d..40fd6ae 100644
--- a/src/dhcp6.c
+++ b/src/dhcp6.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -29,9 +29,9 @@ struct iface_param {
 
 
 static int complete_context6(struct in6_addr *local,  int prefix,
-			     int scope, int if_index, int flags, 
+			     int scope, int if_index, int flags,
 			     unsigned int preferred, unsigned int valid, void *vparam);
-static int make_duid1(int index, unsigned int type, char *mac, size_t maclen, void *parm); 
+static int make_duid1(int index, unsigned int type, char *mac, size_t maclen, void *parm);
 
 void dhcp6_init(void)
 {
@@ -50,11 +50,11 @@ void dhcp6_init(void)
       !fix_fd(fd) ||
       !set_ipv6pktinfo(fd))
     die (_("cannot create DHCPv6 socket: %s"), NULL, EC_BADNET);
-  
+
  /* When bind-interfaces is set, there might be more than one dnsmasq
      instance binding port 547. That's OK if they serve different networks.
      Need to set REUSEADDR|REUSEPORT to make this possible.
-     Handle the case that REUSEPORT is defined, but the kernel doesn't 
+     Handle the case that REUSEPORT is defined, but the kernel doesn't
      support it. This handles the introduction of REUSEPORT on Linux. */
   if (option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND))
     {
@@ -65,14 +65,14 @@ void dhcp6_init(void)
 	  errno == ENOPROTOOPT)
 	rc = 0;
 #endif
-      
+
       if (rc != -1)
 	rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &oneopt, sizeof(oneopt));
-      
+
       if (rc == -1)
 	die(_("failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s"), NULL, EC_BADNET);
     }
-  
+
   memset(&saddr, 0, sizeof(saddr));
 #ifdef HAVE_SOCKADDR_SA_LEN
   saddr.sin6_len = sizeof(struct sockaddr_in6);
@@ -80,10 +80,10 @@ void dhcp6_init(void)
   saddr.sin6_family = AF_INET6;
   saddr.sin6_addr = in6addr_any;
   saddr.sin6_port = htons(DHCPV6_SERVER_PORT);
-  
+
   if (bind(fd, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in6)))
     die(_("failed to bind DHCPv6 server socket: %s"), NULL, EC_BADNET);
-  
+
   daemon->dhcp6fd = fd;
 }
 
@@ -100,7 +100,7 @@ void dhcp6_packet(time_t now)
     char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
   } control_u;
   struct sockaddr_in6 from;
-  ssize_t sz; 
+  ssize_t sz;
   struct ifreq ifr;
   struct iname *tmp;
   unsigned short port;
@@ -115,10 +115,10 @@ void dhcp6_packet(time_t now)
   msg.msg_namelen = sizeof(from);
   msg.msg_iov =  &daemon->dhcp_packet;
   msg.msg_iovlen = 1;
-  
+
   if ((sz = recv_dhcp_packet(daemon->dhcp6fd, &msg)) == -1)
     return;
-  
+
   for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
     if (cmptr->cmsg_level == IPPROTO_IPV6 && cmptr->cmsg_type == daemon->v6pktinfo)
       {
@@ -127,7 +127,7 @@ void dhcp6_packet(time_t now)
 	  struct in6_pktinfo *p;
 	} p;
 	p.c = CMSG_DATA(cmptr);
-        
+
 	if_index = p.p->ipi6_ifindex;
 	dst_addr = p.p->ipi6_addr;
       }
@@ -142,11 +142,11 @@ void dhcp6_packet(time_t now)
       for (tmp = daemon->if_except; tmp; tmp = tmp->next)
 	if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
 	  return;
-      
+
       for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
 	if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
 	  return;
-      
+
       parm.current = NULL;
       parm.relay = NULL;
       memset(&parm.relay_local, 0, IN6ADDRSZ);
@@ -179,7 +179,7 @@ void dhcp6_packet(time_t now)
 	  if (alias)
 	    break;
 	}
-      
+
       for (context = daemon->dhcp6; context; context = context->next)
 	if (IN6_IS_ADDR_UNSPECIFIED(&context->start6) && context->prefix == 0)
 	  {
@@ -196,47 +196,47 @@ void dhcp6_packet(time_t now)
 
       for (relay = daemon->relay6; relay; relay = relay->next)
 	relay->current = relay;
-      
+
       if (!iface_enumerate(AF_INET6, &parm, complete_context6))
 	return;
 
       if (daemon->if_names || daemon->if_addrs)
 	{
-	  
+
 	  for (tmp = daemon->if_names; tmp; tmp = tmp->next)
 	    if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name))
 	      break;
-	  
+
 	  if (!tmp && !parm.addr_match)
 	    return;
 	}
-      
+
       if (parm.relay)
 	{
 	  /* Ignore requests sent to the ALL_SERVERS multicast address for relay when
 	     we're listening there for DHCPv6 server reasons. */
 	  struct in6_addr all_servers;
-	  
+
 	  inet_pton(AF_INET6, ALL_SERVERS, &all_servers);
-	  
+
 	  if (!IN6_ARE_ADDR_EQUAL(&dst_addr, &all_servers))
 	    relay_upstream6(parm.relay, sz, &from.sin6_addr, from.sin6_scope_id, now);
 	  return;
 	}
-      
+
       /* May have configured relay, but not DHCP server */
       if (!daemon->doing_dhcp6)
 	return;
 
       lease_prune(NULL, now); /* lose any expired leases */
-      
-      port = dhcp6_reply(parm.current, if_index, ifr.ifr_name, &parm.fallback, 
+
+      port = dhcp6_reply(parm.current, if_index, ifr.ifr_name, &parm.fallback,
 			 &parm.ll_addr, &parm.ula_addr, sz, &from.sin6_addr, now);
-      
+
       lease_update_file(now);
       lease_update_dns(0);
     }
-			  
+
   /* The port in the source address of the original request should
      be correct, but at least once client sends from the server port,
      so we explicitly send to the client port to a client, and the
@@ -244,8 +244,8 @@ void dhcp6_packet(time_t now)
   if (port != 0)
     {
       from.sin6_port = htons(port);
-      while (retry_send(sendto(daemon->dhcp6fd, daemon->outpacket.iov_base, 
-			       save_counter(0), 0, (struct sockaddr *)&from, 
+      while (retry_send(sendto(daemon->dhcp6fd, daemon->outpacket.iov_base,
+			       save_counter(0), 0, (struct sockaddr *)&from,
 			       sizeof(from))));
     }
 }
@@ -253,9 +253,9 @@ void dhcp6_packet(time_t now)
 void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, unsigned int *maclenp, unsigned int *mactypep, time_t now)
 {
   /* Receiving a packet from a host does not populate the neighbour
-     cache, so we send a neighbour discovery request if we can't 
+     cache, so we send a neighbour discovery request if we can't
      find the sender. Repeat a few times in case of packet loss. */
-  
+
   struct neigh_packet neigh;
   union mysockaddr addr;
   int i, maclen;
@@ -266,7 +266,7 @@ void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, unsi
   neigh.target = *client;
   /* RFC4443 section-2.3: checksum has to be zero to be calculated */
   neigh.checksum = 0;
-   
+
   memset(&addr, 0, sizeof(addr));
 #ifdef HAVE_SOCKADDR_SA_LEN
   addr.in6.sin6_len = sizeof(struct sockaddr_in6);
@@ -275,16 +275,16 @@ void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, unsi
   addr.in6.sin6_port = htons(IPPROTO_ICMPV6);
   addr.in6.sin6_addr = *client;
   addr.in6.sin6_scope_id = iface;
-  
+
   for (i = 0; i < 5; i++)
     {
       struct timespec ts;
-      
+
       if ((maclen = find_mac(&addr, mac, 0, now)) != 0)
 	break;
-	  
+
       sendto(daemon->icmp6fd, &neigh, sizeof(neigh), 0, &addr.sa, sizeof(addr));
-      
+
       ts.tv_sec = 0;
       ts.tv_nsec = 100000000; /* 100ms */
       nanosleep(&ts, NULL);
@@ -293,18 +293,18 @@ void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, unsi
   *maclenp = maclen;
   *mactypep = ARPHRD_ETHER;
 }
-    
+
 static int complete_context6(struct in6_addr *local,  int prefix,
-			     int scope, int if_index, int flags, unsigned int preferred, 
+			     int scope, int if_index, int flags, unsigned int preferred,
 			     unsigned int valid, void *vparam)
 {
   struct dhcp_context *context;
   struct dhcp_relay *relay;
   struct iface_param *param = vparam;
   struct iname *tmp;
- 
+
   (void)scope; /* warning */
-  
+
   if (if_index == param->ind)
     {
       if (IN6_IS_ADDR_LINKLOCAL(local))
@@ -316,19 +316,19 @@ static int complete_context6(struct in6_addr *local,  int prefix,
 	  !IN6_IS_ADDR_LINKLOCAL(local) &&
 	  !IN6_IS_ADDR_MULTICAST(local))
 	{
-	  /* if we have --listen-address config, see if the 
+	  /* if we have --listen-address config, see if the
 	     arrival interface has a matching address. */
 	  for (tmp = daemon->if_addrs; tmp; tmp = tmp->next)
 	    if (tmp->addr.sa.sa_family == AF_INET6 &&
 		IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, local))
 	      param->addr_match = 1;
-	  
+
 	  /* Determine a globally address on the arrival interface, even
 	     if we have no matching dhcp-context, because we're only
 	     allocating on remote subnets via relays. This
 	     is used as a default for the DNS server option. */
 	  param->fallback = *local;
-	  
+
 	  for (context = daemon->dhcp6; context; context = context->next)
 	    {
 	      if ((context->flags & CONTEXT_DHCP) &&
@@ -337,29 +337,29 @@ static int complete_context6(struct in6_addr *local,  int prefix,
 		  is_same_net6(local, &context->start6, context->prefix) &&
 		  is_same_net6(local, &context->end6, context->prefix))
 		{
-		  
-		  
+
+
 		  /* link it onto the current chain if we've not seen it before */
 		  if (context->current == context)
 		    {
 		      struct dhcp_context *tmp, **up;
-		      
+
 		      /* use interface values only for constructed contexts */
 		      if (!(context->flags & CONTEXT_CONSTRUCTED))
 			preferred = valid = 0xffffffff;
 		      else if (flags & IFACE_DEPRECATED)
 			preferred = 0;
-		      
+
 		      if (context->flags & CONTEXT_DEPRECATE)
 			preferred = 0;
-		      
+
 		      /* order chain, longest preferred time first */
 		      for (up = &param->current, tmp = param->current; tmp; tmp = tmp->current)
 			if (tmp->preferred <= preferred)
 			  break;
 			else
 			  up = &tmp->current;
-		      
+
 		      context->current = *up;
 		      *up = context;
 		      context->local6 = *local;
@@ -378,32 +378,32 @@ static int complete_context6(struct in6_addr *local,  int prefix,
 	    param->relay = relay;
 	    param->relay_local = *local;
 	  }
-      
-    }          
- 
+
+    }
+
  return 1;
 }
 
 struct dhcp_config *config_find_by_address6(struct dhcp_config *configs, struct in6_addr *net, int prefix, u64 addr)
 {
   struct dhcp_config *config;
-  
+
   for (config = configs; config; config = config->next)
     if ((config->flags & CONFIG_ADDR6) &&
 	is_same_net6(&config->addr6, net, prefix) &&
 	(prefix == 128 || addr6part(&config->addr6) == addr))
       return config;
-  
+
   return NULL;
 }
 
 struct dhcp_context *address6_allocate(struct dhcp_context *context,  unsigned char *clid, int clid_len, int temp_addr,
-				       int iaid, int serial, struct dhcp_netid *netids, int plain_range, struct in6_addr *ans)   
+				       int iaid, int serial, struct dhcp_netid *netids, int plain_range, struct in6_addr *ans)
 {
   /* Find a free address: exclude anything in use and anything allocated to
      a particular hwaddr/clientid/hostname in our configuration.
-     Try to return from contexts which match netids first. 
-     
+     Try to return from contexts which match netids first.
+
      Note that we assume the address prefix lengths are 64 or greater, so we can
      get by with 64 bit arithmetic.
 */
@@ -411,17 +411,17 @@ struct dhcp_context *address6_allocate(struct dhcp_context *context,  unsigned c
   u64 start, addr;
   struct dhcp_context *c, *d;
   int i, pass;
-  u64 j; 
+  u64 j;
 
   /* hash hwaddr: use the SDBM hashing algorithm.  This works
-     for MAC addresses, let's see how it manages with client-ids! 
+     for MAC addresses, let's see how it manages with client-ids!
      For temporary addresses, we generate a new random one each time. */
   if (temp_addr)
     j = rand64();
   else
     for (j = iaid, i = 0; i < clid_len; i++)
       j = clid[i] + (j << 6) + (j << 16) - j;
-  
+
   for (pass = 0; pass <= plain_range ? 1 : 0; pass++)
     for (c = context; c; c = c->current)
       if (c->flags & (CONTEXT_DEPRECATE | CONTEXT_STATIC | CONTEXT_RA_STATELESS | CONTEXT_USED))
@@ -429,7 +429,7 @@ struct dhcp_context *address6_allocate(struct dhcp_context *context,  unsigned c
       else if (!match_netid(c->filter, netids, pass))
 	continue;
       else
-	{ 
+	{
 	  if (!temp_addr && option_bool(OPT_CONSEC_ADDR))
 	    /* seed is largest extant lease addr in this context */
 	    start = lease_find_max_addr6(c) + serial;
@@ -447,7 +447,7 @@ struct dhcp_context *address6_allocate(struct dhcp_context *context,  unsigned c
 
 	  /* iterate until we find a free address. */
 	  addr = start;
-	  
+
 	  do {
 	    /* eliminate addresses in use by the server. */
 	    for (d = context; d; d = d->current)
@@ -455,34 +455,34 @@ struct dhcp_context *address6_allocate(struct dhcp_context *context,  unsigned c
 		break;
 
 	    if (!d &&
-		!lease6_find_by_addr(&c->start6, c->prefix, addr) && 
+		!lease6_find_by_addr(&c->start6, c->prefix, addr) &&
 		!config_find_by_address6(daemon->dhcp_conf, &c->start6, c->prefix, addr))
 	      {
 		*ans = c->start6;
 		setaddr6part (ans, addr);
 		return c;
 	      }
-	
+
 	    addr++;
-	    
+
 	    if (addr  == addr6part(&c->end6) + 1)
 	      addr = addr6part(&c->start6);
-	    
+
 	  } while (addr != start);
 	}
-	   
+
   return NULL;
 }
 
 /* can dynamically allocate addr */
-struct dhcp_context *address6_available(struct dhcp_context *context, 
+struct dhcp_context *address6_available(struct dhcp_context *context,
 					struct in6_addr *taddr,
 					struct dhcp_netid *netids,
 					int plain_range)
 {
   u64 start, end, addr = addr6part(taddr);
   struct dhcp_context *tmp;
- 
+
   for (tmp = context; tmp; tmp = tmp->current)
     {
       start = addr6part(&tmp->start6);
@@ -501,13 +501,13 @@ struct dhcp_context *address6_available(struct dhcp_context *context,
 }
 
 /* address OK if configured */
-struct dhcp_context *address6_valid(struct dhcp_context *context, 
+struct dhcp_context *address6_valid(struct dhcp_context *context,
 				    struct in6_addr *taddr,
 				    struct dhcp_netid *netids,
 				    int plain_range)
 {
   struct dhcp_context *tmp;
- 
+
   for (tmp = context; tmp; tmp = tmp->current)
     if (is_same_net6(&tmp->start6, taddr, tmp->prefix) &&
 	match_netid(tmp->filter, netids, plain_range))
@@ -527,13 +527,13 @@ int config_valid(struct dhcp_config *config, struct dhcp_context *context, struc
       setaddr6part(addr, addr6part(&config->addr6));
       return 1;
     }
-  
+
   if (is_same_net6(&context->start6, &config->addr6, context->prefix))
     {
       *addr = config->addr6;
       return 1;
     }
-  
+
   return 0;
 }
 
@@ -544,7 +544,7 @@ void make_duid(time_t now)
   if (daemon->duid_config)
     {
       unsigned char *p;
-      
+
       daemon->duid = p = safe_malloc(daemon->duid_config_len + 6);
       daemon->duid_len = daemon->duid_config_len + 6;
       PUTSHORT(2, p); /* DUID_EN */
@@ -554,16 +554,16 @@ void make_duid(time_t now)
   else
     {
       time_t newnow = 0;
-      
+
       /* If we have no persistent lease database, or a non-stable RTC, use DUID_LL (newnow == 0) */
 #ifndef HAVE_BROKEN_RTC
       /* rebase epoch to 1/1/2000 */
       if (!option_bool(OPT_LEASE_RO) || daemon->lease_change_command)
 	newnow = now - 946684800;
-#endif      
-      
+#endif
+
       iface_enumerate(AF_LOCAL, &newnow, make_duid1);
-      
+
       if(!daemon->duid)
 	die("Cannot create DHCPv6 server DUID: %s", NULL, EC_MISC);
     }
@@ -573,14 +573,14 @@ static int make_duid1(int index, unsigned int type, char *mac, size_t maclen, vo
 {
   /* create DUID as specified in RFC3315. We use the MAC of the
      first interface we find that isn't loopback or P-to-P and
-     has address-type < 256. Address types above 256 are things like 
+     has address-type < 256. Address types above 256 are things like
      tunnels which don't have usable MAC addresses. */
-  
+
   unsigned char *p;
   (void)index;
   (void)parm;
   time_t newnow = *((time_t *)parm);
-  
+
   if (type >= 256)
     return 1;
 
@@ -599,7 +599,7 @@ static int make_duid1(int index, unsigned int type, char *mac, size_t maclen, vo
       PUTSHORT(type, p); /* address type */
       PUTLONG(*((time_t *)parm), p); /* time */
     }
-  
+
   memcpy(p, mac, maclen);
 
   return 0;
@@ -610,8 +610,8 @@ struct cparam {
   int newone, newname;
 };
 
-static int construct_worker(struct in6_addr *local, int prefix, 
-			    int scope, int if_index, int flags, 
+static int construct_worker(struct in6_addr *local, int prefix,
+			    int scope, int if_index, int flags,
 			    int preferred, int valid, void *vparam)
 {
   char ifrn_name[IFNAMSIZ];
@@ -638,7 +638,7 @@ static int construct_worker(struct in6_addr *local, int prefix,
 
   if (!indextoname(daemon->icmp6fd, if_index, ifrn_name))
     return 0;
-  
+
   for (template = daemon->dhcp6; template; template = template->next)
     if (!(template->flags & CONTEXT_TEMPLATE))
       {
@@ -650,7 +650,7 @@ static int construct_worker(struct in6_addr *local, int prefix,
 	    template->if_index = if_index;
 	    template->local6 = *local;
 	  }
-	
+
       }
     else if (wildcard_match(template->template_interface, ifrn_name) &&
 	     template->prefix >= prefix)
@@ -659,7 +659,7 @@ static int construct_worker(struct in6_addr *local, int prefix,
 	setaddr6part(&start6, addr6part(&template->start6));
 	end6 = *local;
 	setaddr6part(&end6, addr6part(&template->end6));
-	
+
 	for (context = daemon->dhcp6; context; context = context->next)
 	  if ((context->flags & CONTEXT_CONSTRUCTED) &&
 	      IN6_ARE_ADDR_EQUAL(&start6, &context->start6) &&
@@ -670,17 +670,17 @@ static int construct_worker(struct in6_addr *local, int prefix,
 	      if (flags & CONTEXT_OLD)
 		{
 		  /* address went, now it's back */
-		  log_context(AF_INET6, context); 
+		  log_context(AF_INET6, context);
 		  /* fast RAs for a while */
 		  ra_start_unsolicited(param->now, context);
-		  param->newone = 1; 
+		  param->newone = 1;
 		  /* Add address to name again */
 		  if (context->flags & CONTEXT_RA_NAME)
 		    param->newname = 1;
 		}
 	      break;
 	    }
-	
+
 	if (!context && (context = whine_malloc(sizeof (struct dhcp_context))))
 	  {
 	    *context = *template;
@@ -691,28 +691,28 @@ static int construct_worker(struct in6_addr *local, int prefix,
 	    context->if_index = if_index;
 	    context->local6 = *local;
 	    context->saved_valid = 0;
-	    
+
 	    context->next = daemon->dhcp6;
 	    daemon->dhcp6 = context;
 
 	    ra_start_unsolicited(param->now, context);
 	    /* we created a new one, need to call
 	       lease_update_file to get periodic functions called */
-	    param->newone = 1; 
+	    param->newone = 1;
 
 	    /* Will need to add new putative SLAAC addresses to existing leases */
 	    if (context->flags & CONTEXT_RA_NAME)
 	      param->newname = 1;
-	    
+
 	    log_context(AF_INET6, context);
-	  } 
+	  }
       }
-  
+
   return 1;
 }
 
 void dhcp_construct_contexts(time_t now)
-{ 
+{
   struct dhcp_context *context, *tmp, **up;
   struct cparam param;
   param.newone = 0;
@@ -722,14 +722,14 @@ void dhcp_construct_contexts(time_t now)
   for (context = daemon->dhcp6; context; context = context->next)
     if (context->flags & CONTEXT_CONSTRUCTED)
       context->flags |= CONTEXT_GC;
-   
+
   iface_enumerate(AF_INET6, &param, construct_worker);
 
   for (up = &daemon->dhcp6, context = daemon->dhcp6; context; context = tmp)
     {
-      
-      tmp = context->next; 
-     
+
+      tmp = context->next;
+
       if (context->flags & CONTEXT_GC && !(context->flags & CONTEXT_OLD))
 	{
 	  if ((context->flags & CONTEXT_RA) || option_bool(OPT_RA))
@@ -744,13 +744,13 @@ void dhcp_construct_contexts(time_t now)
 	      if (context->saved_valid > 7200) /* 2 hours */
 		context->saved_valid = 7200;
 	      ra_start_unsolicited(now, context);
-	      param.newone = 1; /* include deletion */ 
-	      
+	      param.newone = 1; /* include deletion */
+
 	      if (context->flags & CONTEXT_RA_NAME)
-		param.newname = 1; 
-			      
+		param.newname = 1;
+
 	      log_context(AF_INET6, context);
-	      
+
 	      up = &context->next;
 	    }
 	  else
@@ -763,7 +763,7 @@ void dhcp_construct_contexts(time_t now)
       else
 	 up = &context->next;
     }
-  
+
   if (param.newone)
     {
       if (daemon->dhcp || daemon->doing_dhcp6)
@@ -772,7 +772,7 @@ void dhcp_construct_contexts(time_t now)
 	    lease_update_slaac(now);
 	  lease_update_file(now);
 	}
-      else 
+      else
 	/* Not doing DHCP, so no lease system, manage alarms for ra only */
 	send_alarm(periodic_ra(now), now);
     }
diff --git a/src/dns-protocol.h b/src/dns-protocol.h
index db1abc7..10b78a5 100644
--- a/src/dns-protocol.h
+++ b/src/dns-protocol.h
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -43,7 +43,7 @@
 #define T_A		1
 #define T_NS            2
 #define T_MD            3
-#define T_MF            4             
+#define T_MF            4
 #define T_CNAME		5
 #define T_SOA		6
 #define T_MB            7
@@ -70,10 +70,10 @@
 #define T_NSEC          47
 #define T_DNSKEY        48
 #define T_NSEC3         50
-#define	T_TKEY		249		
+#define	T_TKEY		249
 #define	T_TSIG		250
 #define T_AXFR          252
-#define T_MAILB		253	
+#define T_MAILB		253
 #define T_ANY		255
 
 #define EDNS0_OPTION_MAC            65001 /* dyndns.org temporary assignment */
@@ -103,7 +103,7 @@ struct dns_header {
 
 #define RCODE(x)           ((x)->hb4 & HB4_RCODE)
 #define SET_RCODE(x, code) (x)->hb4 = ((x)->hb4 & ~HB4_RCODE) | code
-  
+
 #define GETSHORT(s, cp) { \
 	unsigned char *t_cp = (unsigned char *)(cp); \
 	(s) = ((u16)t_cp[0] << 8) \
diff --git a/src/dnsmasq.c b/src/dnsmasq.c
index 771bec1..883a92c 100644
--- a/src/dnsmasq.c
+++ b/src/dnsmasq.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -53,7 +53,7 @@ int main (int argc, char **argv)
   cap_user_data_t data = NULL;
   char *bound_device = NULL;
   int did_bind = 0;
-#endif 
+#endif
 #if defined(HAVE_DHCP) || defined(HAVE_DHCP6)
   struct dhcp_context *context;
   struct dhcp_relay *relay;
@@ -64,7 +64,7 @@ int main (int argc, char **argv)
 
 #ifdef LOCALEDIR
   setlocale(LC_ALL, "");
-  bindtextdomain("dnsmasq", LOCALEDIR); 
+  bindtextdomain("dnsmasq", LOCALEDIR);
   textdomain("dnsmasq");
 #endif
 
@@ -83,33 +83,33 @@ int main (int argc, char **argv)
   sigaction(SIGPIPE, &sigact, NULL);
 
   umask(022); /* known umask, create leases and pid files as 0644 */
- 
+
   rand_init(); /* Must precede read_opts() */
-  
+
   read_opts(argc, argv, compile_opts);
- 
+
   if (daemon->edns_pktsz < PACKETSZ)
     daemon->edns_pktsz = PACKETSZ;
 
-  /* Min buffer size: we check after adding each record, so there must be 
+  /* Min buffer size: we check after adding each record, so there must be
      memory for the largest packet, and the largest record so the
      min for DNS is PACKETSZ+MAXDNAME+RRFIXEDSZ which is < 1000.
-     This might be increased is EDNS packet size if greater than the minimum. */ 
+     This might be increased is EDNS packet size if greater than the minimum. */
   daemon->packet_buff_sz = daemon->edns_pktsz + MAXDNAME + RRFIXEDSZ;
   daemon->packet = safe_malloc(daemon->packet_buff_sz);
-  
+
   daemon->addrbuff = safe_malloc(ADDRSTRLEN);
   if (option_bool(OPT_EXTRALOG))
     daemon->addrbuff2 = safe_malloc(ADDRSTRLEN);
-  
+
 #ifdef HAVE_DNSSEC
   if (option_bool(OPT_DNSSEC_VALID))
     {
       /* Note that both /000 and '.' are allowed within labels. These get
 	 represented in presentation format using NAME_ESCAPE as an escape
-	 character when in DNSSEC mode. 
+	 character when in DNSSEC mode.
 	 In theory, if all the characters in a name were /000 or
-	 '.' or NAME_ESCAPE then all would have to be escaped, so the 
+	 '.' or NAME_ESCAPE then all would have to be escaped, so the
 	 presentation format would be twice as long as the spec.
 
 	 daemon->namebuff was previously allocated by the option-reading
@@ -128,20 +128,20 @@ int main (int argc, char **argv)
 	daemon->lease_file = LEASEFILE;
     }
 #endif
-  
-  /* Close any file descriptors we inherited apart from std{in|out|err} 
-     
+
+  /* Close any file descriptors we inherited apart from std{in|out|err}
+
      Ensure that at least stdin, stdout and stderr (fd 0, 1, 2) exist,
-     otherwise file descriptors we create can end up being 0, 1, or 2 
-     and then get accidentally closed later when we make 0, 1, and 2 
-     open to /dev/null. Normally we'll be started with 0, 1 and 2 open, 
-     but it's not guaranteed. By opening /dev/null three times, we 
+     otherwise file descriptors we create can end up being 0, 1, or 2
+     and then get accidentally closed later when we make 0, 1, and 2
+     open to /dev/null. Normally we'll be started with 0, 1 and 2 open,
+     but it's not guaranteed. By opening /dev/null three times, we
      ensure that we're not using those fds for real stuff. */
   for (i = 0; i < max_fd; i++)
     if (i != STDOUT_FILENO && i != STDERR_FILENO && i != STDIN_FILENO)
       close(i);
     else
-      open("/dev/null", O_RDWR); 
+      open("/dev/null", O_RDWR);
 
 #ifndef HAVE_LINUX_NETWORK
 #  if !(defined(IP_RECVDSTADDR) && defined(IP_RECVIF) && defined(IP_SENDSRCADDR))
@@ -151,7 +151,7 @@ int main (int argc, char **argv)
       set_option_bool(OPT_NOWILD);
     }
 #  endif
-  
+
   /* -- bind-dynamic not supported on !Linux, fall back to --bind-interfaces */
   if (option_bool(OPT_CLEVERBIND))
     {
@@ -165,7 +165,7 @@ int main (int argc, char **argv)
   if (daemon->dynamic_dirs)
     die(_("dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"), NULL, EC_BADCONF);
 #endif
-  
+
   if (option_bool(OPT_DNSSEC_VALID))
     {
 #ifdef HAVE_DNSSEC
@@ -179,10 +179,10 @@ int main (int argc, char **argv)
 
       if (!ds)
 	die(_("no root trust anchor provided for DNSSEC"), NULL, EC_BADCONF);
-      
+
       if (daemon->cachesize < CACHESIZ)
 	die(_("cannot reduce cache size from default when DNSSEC enabled"), NULL, EC_BADCONF);
-#else 
+#else
       die(_("DNSSEC not available: set HAVE_DNSSEC in src/config.h"), NULL, EC_BADCONF);
 #endif
     }
@@ -194,7 +194,7 @@ int main (int argc, char **argv)
 
 #ifdef HAVE_CONNTRACK
   if (option_bool(OPT_CONNTRACK) && (daemon->query_port != 0 || daemon->osport))
-    die (_("cannot use --conntrack AND --query-port"), NULL, EC_BADCONF); 
+    die (_("cannot use --conntrack AND --query-port"), NULL, EC_BADCONF);
 #else
   if (option_bool(OPT_CONNTRACK))
     die(_("conntrack support not available: set HAVE_CONNTRACK in src/config.h"), NULL, EC_BADCONF);
@@ -204,7 +204,7 @@ int main (int argc, char **argv)
   if (daemon->max_logs != 0)
     die(_("asynchronous logging is not available under Solaris"), NULL, EC_BADCONF);
 #endif
-  
+
 #ifdef __ANDROID__
   if (daemon->max_logs != 0)
     die(_("asynchronous logging is not available under Android"), NULL, EC_BADCONF);
@@ -235,12 +235,12 @@ int main (int argc, char **argv)
 #else
   daemon->soa_sn = now;
 #endif
-  
+
 #ifdef HAVE_DHCP6
   if (daemon->dhcp6)
     {
       daemon->doing_ra = option_bool(OPT_RA);
-      
+
       for (context = daemon->dhcp6; context; context = context->next)
 	{
 	  if (context->flags & CONTEXT_DHCP)
@@ -250,33 +250,33 @@ int main (int argc, char **argv)
 #if !defined(HAVE_LINUX_NETWORK) && !defined(HAVE_BSD_NETWORK)
 	  if (context->flags & CONTEXT_TEMPLATE)
 	    die (_("dhcp-range constructor not available on this platform"), NULL, EC_BADCONF);
-#endif 
+#endif
 	}
     }
 #endif
-  
+
 #ifdef HAVE_DHCP
   /* Note that order matters here, we must call lease_init before
      creating any file descriptors which shouldn't be leaked
      to the lease-script init process. We need to call common_init
      before lease_init to allocate buffers it uses.
      The script subsystem relies on DHCP buffers, hence the last two
-     conditions below. */  
-  if (daemon->dhcp || daemon->doing_dhcp6 || daemon->relay4 || 
+     conditions below. */
+  if (daemon->dhcp || daemon->doing_dhcp6 || daemon->relay4 ||
       daemon->relay6 || option_bool(OPT_TFTP) || option_bool(OPT_SCRIPT_ARP))
     {
       dhcp_common_init();
       if (daemon->dhcp || daemon->doing_dhcp6)
 	lease_init(now);
     }
-  
+
   if (daemon->dhcp || daemon->relay4)
     dhcp_init();
-  
+
 #  ifdef HAVE_DHCP6
   if (daemon->doing_ra || daemon->doing_dhcp6 || daemon->relay6)
     ra_init(now);
-  
+
   if (daemon->doing_dhcp6 || daemon->relay6)
     dhcp6_init();
 #  endif
@@ -296,14 +296,14 @@ int main (int argc, char **argv)
 
   if (option_bool(OPT_NOWILD) && option_bool(OPT_CLEVERBIND))
     die(_("cannot set --bind-interfaces and --bind-dynamic"), NULL, EC_BADCONF);
-  
+
   if (!enumerate_interfaces(1) || !enumerate_interfaces(0))
     die(_("failed to find list of interfaces: %s"), NULL, EC_MISC);
-  
-  if (option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND)) 
+
+  if (option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND))
     {
       create_bound_listeners(1);
-      
+
       if (!option_bool(OPT_CLEVERBIND))
 	for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
 	  if (if_tmp->name && !if_tmp->used)
@@ -312,7 +312,7 @@ int main (int argc, char **argv)
 #if defined(HAVE_LINUX_NETWORK) && defined(HAVE_DHCP)
       /* after enumerate_interfaces()  */
       bound_device = whichdevice();
-      
+
       if (daemon->dhcp)
 	{
 	  if (!daemon->relay4 && bound_device)
@@ -336,9 +336,9 @@ int main (int argc, char **argv)
 	}
 #endif
     }
-  else 
+  else
     create_wildcard_listeners();
- 
+
 #ifdef HAVE_DHCP6
   /* after enumerate_interfaces() */
   if (daemon->doing_dhcp6 || daemon->relay6 || daemon->doing_ra)
@@ -347,7 +347,7 @@ int main (int argc, char **argv)
   /* After netlink_init() and before create_helper() */
   lease_make_duid(now);
 #endif
-  
+
   if (daemon->port != 0)
     {
       cache_init();
@@ -363,7 +363,7 @@ int main (int argc, char **argv)
   else
     daemon->inotifyfd = -1;
 #endif
-       
+
   if (option_bool(OPT_DBUS))
 #ifdef HAVE_DBUS
     {
@@ -382,8 +382,8 @@ int main (int argc, char **argv)
 
 #if defined(HAVE_SCRIPT)
   /* Note getpwnam returns static storage */
-  if ((daemon->dhcp || daemon->dhcp6) && 
-      daemon->scriptuser && 
+  if ((daemon->dhcp || daemon->dhcp6) &&
+      daemon->scriptuser &&
       (daemon->lease_change_command || daemon->luascript))
     {
       if ((ent_pw = getpwnam(daemon->scriptuser)))
@@ -395,7 +395,7 @@ int main (int argc, char **argv)
 	baduser = daemon->scriptuser;
     }
 #endif
-  
+
   if (daemon->username && !(ent_pw = getpwnam(daemon->username)))
     baduser = daemon->username;
   else if (daemon->groupname && !(gp = getgrnam(daemon->groupname)))
@@ -409,10 +409,10 @@ int main (int argc, char **argv)
     {
       if (!(gp = getgrnam(CHGRP)) && ent_pw)
 	gp = getgrgid(ent_pw->pw_gid);
-      
+
       /* for error message */
       if (gp)
-	daemon->groupname = gp->gr_name; 
+	daemon->groupname = gp->gr_name;
     }
 
 #if defined(HAVE_LINUX_NETWORK)
@@ -426,7 +426,7 @@ int main (int argc, char **argv)
       /* find version supported by kernel */
       memset(hdr, 0, sizeof(*hdr));
       capget(hdr, NULL);
-      
+
       if (hdr->version != LINUX_CAPABILITY_VERSION_1)
 	{
 	  /* if unknown version, use largest supported version (3) */
@@ -434,44 +434,44 @@ int main (int argc, char **argv)
 	    hdr->version = LINUX_CAPABILITY_VERSION_3;
 	  capsize = 2;
 	}
-      
+
       data = safe_malloc(sizeof(*data) * capsize);
       memset(data, 0, sizeof(*data) * capsize);
     }
 #endif
 
-  /* Use a pipe to carry signals and other events back to the event loop 
+  /* Use a pipe to carry signals and other events back to the event loop
      in a race-free manner and another to carry errors to daemon-invoking process */
   safe_pipe(pipefd, 1);
-  
+
   piperead = pipefd[0];
   pipewrite = pipefd[1];
   /* prime the pipe to load stuff first time. */
-  send_event(pipewrite, EVENT_INIT, 0, NULL); 
+  send_event(pipewrite, EVENT_INIT, 0, NULL);
 
   err_pipe[1] = -1;
-  
-  if (!option_bool(OPT_DEBUG))   
+
+  if (!option_bool(OPT_DEBUG))
     {
-      /* The following code "daemonizes" the process. 
+      /* The following code "daemonizes" the process.
 	 See Stevens section 12.4 */
-      
+
       if (chdir("/") != 0)
-	die(_("cannot chdir to filesystem root: %s"), NULL, EC_MISC); 
+	die(_("cannot chdir to filesystem root: %s"), NULL, EC_MISC);
 
-#ifndef NO_FORK      
+#ifndef NO_FORK
       if (!option_bool(OPT_NO_FORK))
 	{
 	  pid_t pid;
-	  
+
 	  /* pipe to carry errors back to original process.
 	     When startup is complete we close this and the process terminates. */
 	  safe_pipe(err_pipe, 0);
-	  
+
 	  if ((pid = fork()) == -1)
 	    /* fd == -1 since we've not forked, never returns. */
 	    send_event(-1, EVENT_FORK_ERR, errno, NULL);
-	   
+
 	  if (pid != 0)
 	    {
 	      struct event_desc ev;
@@ -479,28 +479,28 @@ int main (int argc, char **argv)
 
 	      /* close our copy of write-end */
 	      while (retry_send(close(err_pipe[1])));
-	      
+
 	      /* check for errors after the fork */
 	      if (read_event(err_pipe[0], &ev, &msg))
 		fatal_event(&ev, msg);
-	      
+
 	      _exit(EC_GOOD);
-	    } 
-	  
+	    }
+
 	  while (retry_send(close(err_pipe[0])));
 
 	  /* NO calls to die() from here on. */
-	  
+
 	  setsid();
-	 
+
 	  if ((pid = fork()) == -1)
 	    send_event(err_pipe[1], EVENT_FORK_ERR, errno, NULL);
-	 
+
 	  if (pid != 0)
 	    _exit(0);
 	}
 #endif
-            
+
       /* write pidfile _after_ forking ! */
       if (daemon->runfile)
 	{
@@ -510,25 +510,25 @@ int main (int argc, char **argv)
 
 	  /* Explanation: Some installations of dnsmasq (eg Debian/Ubuntu) locate the pid-file
 	     in a directory which is writable by the non-privileged user that dnsmasq runs as. This
-	     allows the daemon to delete the file as part of its shutdown. This is a security hole to the 
-	     extent that an attacker running as the unprivileged  user could replace the pidfile with a 
-	     symlink, and have the target of that symlink overwritten as root next time dnsmasq starts. 
+	     allows the daemon to delete the file as part of its shutdown. This is a security hole to the
+	     extent that an attacker running as the unprivileged  user could replace the pidfile with a
+	     symlink, and have the target of that symlink overwritten as root next time dnsmasq starts.
 
 	     The following code first deletes any existing file, and then opens it with the O_EXCL flag,
-	     ensuring that the open() fails should there be any existing file (because the unlink() failed, 
+	     ensuring that the open() fails should there be any existing file (because the unlink() failed,
 	     or an attacker exploited the race between unlink() and open()). This ensures that no symlink
-	     attack can succeed. 
+	     attack can succeed.
 
 	     Any compromise of the non-privileged user still theoretically allows the pid-file to be
-	     replaced whilst dnsmasq is running. The worst that could allow is that the usual 
+	     replaced whilst dnsmasq is running. The worst that could allow is that the usual
 	     "shutdown dnsmasq" shell command could be tricked into stopping any other process.
 
-	     Note that if dnsmasq is started as non-root (eg for testing) it silently ignores 
+	     Note that if dnsmasq is started as non-root (eg for testing) it silently ignores
 	     failure to write the pid-file.
 	  */
 
-	  unlink(daemon->runfile); 
-	  
+	  unlink(daemon->runfile);
+
 	  if ((fd = open(daemon->runfile, O_WRONLY|O_CREAT|O_TRUNC|O_EXCL, S_IWUSR|S_IRUSR|S_IRGRP|S_IROTH)) == -1)
 	    {
 	      /* only complain if started as root */
@@ -539,7 +539,7 @@ int main (int argc, char **argv)
 	    {
 	      if (!read_write(fd, (unsigned char *)daemon->namebuff, strlen(daemon->namebuff), 0))
 		err = 1;
-	      else 
+	      else
 		{
 		  while (retry_send(close(fd)));
 		  if (errno != 0)
@@ -554,11 +554,11 @@ int main (int argc, char **argv)
 	    }
 	}
     }
-  
+
    log_err = log_start(ent_pw, err_pipe[1]);
 
-   if (!option_bool(OPT_DEBUG)) 
-     {       
+   if (!option_bool(OPT_DEBUG))
+     {
        /* open  stdout etc to /dev/null */
        int nullfd = open("/dev/null", O_RDWR);
        if (nullfd != -1)
@@ -569,52 +569,52 @@ int main (int argc, char **argv)
 	   close(nullfd);
 	 }
      }
-   
+
    /* if we are to run scripts, we need to fork a helper before dropping root. */
   daemon->helperfd = -1;
-#ifdef HAVE_SCRIPT 
-  if ((daemon->dhcp || daemon->dhcp6 || option_bool(OPT_TFTP) || option_bool(OPT_SCRIPT_ARP)) && 
+#ifdef HAVE_SCRIPT
+  if ((daemon->dhcp || daemon->dhcp6 || option_bool(OPT_TFTP) || option_bool(OPT_SCRIPT_ARP)) &&
       (daemon->lease_change_command || daemon->luascript))
       daemon->helperfd = create_helper(pipewrite, err_pipe[1], script_uid, script_gid, max_fd);
 #endif
 
-  if (!option_bool(OPT_DEBUG) && getuid() == 0)   
+  if (!option_bool(OPT_DEBUG) && getuid() == 0)
     {
       int bad_capabilities = 0;
       gid_t dummy;
-      
+
       /* remove all supplementary groups */
-      if (gp && 
+      if (gp &&
 	  (setgroups(0, &dummy) == -1 ||
 	   setgid(gp->gr_gid) == -1))
 	{
 	  send_event(err_pipe[1], EVENT_GROUP_ERR, errno, daemon->groupname);
 	  _exit(0);
 	}
-  
+
       if (ent_pw && ent_pw->pw_uid != 0)
-	{     
-#if defined(HAVE_LINUX_NETWORK)	  
+	{
+#if defined(HAVE_LINUX_NETWORK)
 	  /* On linux, we keep CAP_NETADMIN (for ARP-injection) and
-	     CAP_NET_RAW (for icmp) if we're doing dhcp. If we have yet to bind 
+	     CAP_NET_RAW (for icmp) if we're doing dhcp. If we have yet to bind
 	     ports because of DAD, or we're doing it dynamically,
 	     we need CAP_NET_BIND_SERVICE too. */
 	  if (is_dad_listeners() || option_bool(OPT_CLEVERBIND))
 	    data->effective = data->permitted = data->inheritable =
-	      (1 << CAP_NET_ADMIN) | (1 << CAP_NET_RAW) | 
+	      (1 << CAP_NET_ADMIN) | (1 << CAP_NET_RAW) |
 	      (1 << CAP_SETUID) | (1 << CAP_NET_BIND_SERVICE);
 	  else
 	    data->effective = data->permitted = data->inheritable =
 	      (1 << CAP_NET_ADMIN) | (1 << CAP_NET_RAW) | (1 << CAP_SETUID);
-	  
+
 	  /* Tell kernel to not clear capabilities when dropping root */
 	  if (capset(hdr, data) == -1 || prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) == -1)
 	    bad_capabilities = errno;
-			  
+
 #elif defined(HAVE_SOLARIS_NETWORK)
 	  /* http://developers.sun.com/solaris/articles/program_privileges.html */
 	  priv_set_t *priv_set;
-	  
+
 	  if (!(priv_set = priv_str_to_set("basic", ",", NULL)) ||
 	      priv_addset(priv_set, PRIV_NET_ICMPACCESS) == -1 ||
 	      priv_addset(priv_set, PRIV_SYS_NET_CONFIG) == -1)
@@ -623,7 +623,7 @@ int main (int argc, char **argv)
 	  if (priv_set && bad_capabilities == 0)
 	    {
 	      priv_inverse(priv_set);
-	  
+
 	      if (setppriv(PRIV_OFF, PRIV_LIMIT, priv_set) == -1)
 		bad_capabilities = errno;
 	    }
@@ -631,30 +631,30 @@ int main (int argc, char **argv)
 	  if (priv_set)
 	    priv_freeset(priv_set);
 
-#endif    
+#endif
 
 	  if (bad_capabilities != 0)
 	    {
 	      send_event(err_pipe[1], EVENT_CAP_ERR, bad_capabilities, NULL);
 	      _exit(0);
 	    }
-	  
+
 	  /* finally drop root */
 	  if (setuid(ent_pw->pw_uid) == -1)
 	    {
 	      send_event(err_pipe[1], EVENT_USER_ERR, errno, daemon->username);
 	      _exit(0);
-	    }     
+	    }
 
 #ifdef HAVE_LINUX_NETWORK
 	  if (is_dad_listeners() || option_bool(OPT_CLEVERBIND))
 	   data->effective = data->permitted =
 	     (1 << CAP_NET_ADMIN) | (1 << CAP_NET_RAW) | (1 << CAP_NET_BIND_SERVICE);
 	 else
-	   data->effective = data->permitted = 
+	   data->effective = data->permitted =
 	     (1 << CAP_NET_ADMIN) | (1 << CAP_NET_RAW);
 	  data->inheritable = 0;
-	  
+
 	  /* lose the setuid and setgid capabilities */
 	  if (capset(hdr, data) == -1)
 	    {
@@ -662,14 +662,14 @@ int main (int argc, char **argv)
 	      _exit(0);
 	    }
 #endif
-	  
+
 	}
     }
-  
+
 #ifdef HAVE_LINUX_NETWORK
   free(hdr);
   free(data);
-  if (option_bool(OPT_DEBUG)) 
+  if (option_bool(OPT_DEBUG))
     prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
 #endif
 
@@ -678,7 +678,7 @@ int main (int argc, char **argv)
     {
       DIR *dir;
       struct tftp_prefix *p;
-      
+
       if (daemon->tftp_prefix)
 	{
 	  if (!((dir = opendir(daemon->tftp_prefix))))
@@ -714,7 +714,7 @@ int main (int argc, char **argv)
 
   if (daemon->port == 0)
     my_syslog(LOG_INFO, _("started, version %s DNS disabled"), VERSION);
-  else 
+  else
     {
       if (daemon->cachesize != 0)
 	my_syslog(LOG_INFO, _("started, version %s cachesize %d"), VERSION, daemon->cachesize);
@@ -724,9 +724,9 @@ int main (int argc, char **argv)
       if (option_bool(OPT_LOCAL_SERVICE))
 	my_syslog(LOG_INFO, _("DNS service limited to local subnets"));
     }
-  
+
   my_syslog(LOG_INFO, _("compile time options: %s"), compile_opts);
-  
+
 #ifdef HAVE_DBUS
   if (option_bool(OPT_DBUS))
     {
@@ -743,29 +743,29 @@ int main (int argc, char **argv)
       int rc;
 
       /* Delay creating the timestamp file until here, after we've changed user, so that
-	 it has the correct owner to allow updating the mtime later. 
+	 it has the correct owner to allow updating the mtime later.
 	 This means we have to report fatal errors via the pipe. */
       if ((rc = setup_timestamp()) == -1)
 	{
 	  send_event(err_pipe[1], EVENT_TIME_ERR, errno, daemon->timestamp_file);
 	  _exit(0);
 	}
-      
+
       my_syslog(LOG_INFO, _("DNSSEC validation enabled"));
-      
+
       daemon->dnssec_no_time_check = option_bool(OPT_DNSSEC_TIME);
       if (option_bool(OPT_DNSSEC_TIME) && !daemon->back_to_the_future)
 	my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until first cache reload"));
-      
+
       if (rc == 1)
 	my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until system time valid"));
     }
 #endif
 
   if (log_err != 0)
-    my_syslog(LOG_WARNING, _("warning: failed to change owner of %s: %s"), 
+    my_syslog(LOG_WARNING, _("warning: failed to change owner of %s: %s"),
 	      daemon->log_file, strerror(log_err));
-  
+
   if (bind_fallback)
     my_syslog(LOG_WARNING, _("setting --bind-interfaces option because of OS limitations"));
 
@@ -775,12 +775,12 @@ int main (int argc, char **argv)
     warn_wild_labels();
 
   warn_int_names();
-  
-  if (!option_bool(OPT_NOWILD)) 
+
+  if (!option_bool(OPT_NOWILD))
     for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
       if (if_tmp->name && !if_tmp->used)
 	my_syslog(LOG_WARNING, _("warning: interface %s does not currently exist"), if_tmp->name);
-   
+
   if (daemon->port != 0 && option_bool(OPT_NO_RESOLV))
     {
       if (daemon->resolv_files && !daemon->resolv_files->is_default)
@@ -788,11 +788,11 @@ int main (int argc, char **argv)
       daemon->resolv_files = NULL;
       if (!daemon->servers)
 	my_syslog(LOG_WARNING, _("warning: no upstream servers configured"));
-    } 
+    }
 
   if (daemon->max_logs != 0)
     my_syslog(LOG_INFO, _("asynchronous logging enabled, queue limit is %d messages"), daemon->max_logs);
-  
+
 
 #ifdef HAVE_DHCP
   for (context = daemon->dhcp; context; context = context->next)
@@ -807,10 +807,10 @@ int main (int argc, char **argv)
 
   for (relay = daemon->relay6; relay; relay = relay->next)
     log_relay(AF_INET6, relay);
-  
+
   if (daemon->doing_dhcp6 || daemon->doing_ra)
     dhcp_construct_contexts(now);
-  
+
   if (option_bool(OPT_RA))
     my_syslog(MS_DHCP | LOG_INFO, _("IPv6 router advertisement enabled"));
 #  endif
@@ -830,7 +830,7 @@ int main (int argc, char **argv)
     {
       struct tftp_prefix *p;
 
-      my_syslog(MS_TFTP | LOG_INFO, "TFTP %s%s %s", 
+      my_syslog(MS_TFTP | LOG_INFO, "TFTP %s%s %s",
 		daemon->tftp_prefix ? _("root is ") : _("enabled"),
 		daemon->tftp_prefix ? daemon->tftp_prefix: "",
 		option_bool(OPT_TFTP_SECURE) ? _("secure mode") : "");
@@ -842,21 +842,21 @@ int main (int argc, char **argv)
 	if (p->missing)
 	   my_syslog(MS_TFTP | LOG_WARNING, _("warning: TFTP directory %s inaccessible"), p->prefix);
 
-      /* This is a guess, it assumes that for small limits, 
-	 disjoint files might be served, but for large limits, 
+      /* This is a guess, it assumes that for small limits,
+	 disjoint files might be served, but for large limits,
 	 a single file will be sent to may clients (the file only needs
 	 one fd). */
 
       max_fd -= 30; /* use other than TFTP */
-      
+
       if (max_fd < 0)
 	max_fd = 5;
       else if (max_fd < 100)
 	max_fd = max_fd/2;
       else
 	max_fd = max_fd - 20;
-      
-      /* if we have to use a limited range of ports, 
+
+      /* if we have to use a limited range of ports,
 	 that will limit the number of transfers */
       if (daemon->start_tftp_port != 0 &&
 	  daemon->end_tftp_port - daemon->start_tftp_port + 1 < max_fd)
@@ -865,8 +865,8 @@ int main (int argc, char **argv)
       if (daemon->tftp_max > max_fd)
 	{
 	  daemon->tftp_max = max_fd;
-	  my_syslog(MS_TFTP | LOG_WARNING, 
-		    _("restricting maximum simultaneous TFTP transfers to %d"), 
+	  my_syslog(MS_TFTP | LOG_WARNING,
+		    _("restricting maximum simultaneous TFTP transfers to %d"),
 		    daemon->tftp_max);
 	}
     }
@@ -875,23 +875,23 @@ int main (int argc, char **argv)
   /* finished start-up - release original process */
   if (err_pipe[1] != -1)
     while (retry_send(close(err_pipe[1])));
-  
+
   if (daemon->port != 0)
     check_servers();
-  
+
   pid = getpid();
-  
+
 #ifdef HAVE_INOTIFY
   /* Using inotify, have to select a resolv file at startup */
   poll_resolv(1, 0, now);
 #endif
-  
+
   while (1)
     {
       int t, timeout = -1;
-      
+
       poll_reset();
-      
+
       /* if we are out of resources, find how long we have to wait
 	 for some to come free, we'll loop around then and restart
 	 listening for queries */
@@ -909,8 +909,8 @@ int main (int argc, char **argv)
 
 #ifdef HAVE_DBUS
       set_dbus_listeners();
-#endif	
-  
+#endif
+
 #ifdef HAVE_DHCP
       if (daemon->dhcp || daemon->relay4)
 	{
@@ -923,11 +923,11 @@ int main (int argc, char **argv)
 #ifdef HAVE_DHCP6
       if (daemon->doing_dhcp6 || daemon->relay6)
 	poll_listen(daemon->dhcp6fd, POLLIN);
-	
+
       if (daemon->doing_ra)
-	poll_listen(daemon->icmp6fd, POLLIN); 
+	poll_listen(daemon->icmp6fd, POLLIN);
 #endif
-    
+
 #ifdef HAVE_INOTIFY
       if (daemon->inotifyfd != -1)
 	poll_listen(daemon->inotifyfd, POLLIN);
@@ -938,12 +938,12 @@ int main (int argc, char **argv)
 #elif defined(HAVE_BSD_NETWORK)
       poll_listen(daemon->routefd, POLLIN);
 #endif
-      
+
       poll_listen(piperead, POLLIN);
 
 #ifdef HAVE_SCRIPT
 #    ifdef HAVE_DHCP
-      while (helper_buf_empty() && do_script_run(now)); 
+      while (helper_buf_empty() && do_script_run(now));
 #    endif
 
       /* Refresh cache */
@@ -965,20 +965,20 @@ int main (int argc, char **argv)
 
       while (do_arp_script_run());
 
-#    ifdef HAVE_TFTP 
+#    ifdef HAVE_TFTP
       while (do_tftp_script_run());
 #    endif
 
 #endif
 
-   
+
       /* must do this just before select(), when we know no
 	 more calls to my_syslog() can occur */
       set_log_writer();
-      
+
       if (do_poll(timeout) < 0)
 	continue;
-      
+
       now = dnsmasq_time();
 
       check_log_writer(0);
@@ -1009,27 +1009,27 @@ int main (int argc, char **argv)
 	{
 	  if (daemon->port != 0 && !option_bool(OPT_NO_POLL))
 	    poll_resolv(1, 1, now);
-	} 	  
+	}
 #else
       /* Check for changes to resolv files once per second max. */
       /* Don't go silent for long periods if the clock goes backwards. */
-      if (daemon->last_resolv == 0 || 
-	  difftime(now, daemon->last_resolv) > 1.0 || 
+      if (daemon->last_resolv == 0 ||
+	  difftime(now, daemon->last_resolv) > 1.0 ||
 	  difftime(now, daemon->last_resolv) < -1.0)
 	{
-	  /* poll_resolv doesn't need to reload first time through, since 
+	  /* poll_resolv doesn't need to reload first time through, since
 	     that's queued anyway. */
 
-	  poll_resolv(0, daemon->last_resolv != 0, now); 	  
+	  poll_resolv(0, daemon->last_resolv != 0, now);
 	  daemon->last_resolv = now;
 	}
 #endif
 
       if (poll_check(piperead, POLLIN))
 	async_event(piperead, now);
-      
+
 #ifdef HAVE_DBUS
-      /* if we didn't create a DBus connection, retry now. */ 
+      /* if we didn't create a DBus connection, retry now. */
      if (option_bool(OPT_DBUS) && !daemon->dbus)
 	{
 	  char *err;
@@ -1040,12 +1040,12 @@ int main (int argc, char **argv)
 	}
       check_dbus_listeners();
 #endif
-      
+
       check_dns_listeners(now);
 
 #ifdef HAVE_TFTP
       check_tftp_listeners(now);
-#endif      
+#endif
 
 #ifdef HAVE_DHCP
       if (daemon->dhcp || daemon->relay4)
@@ -1092,7 +1092,7 @@ static void sig_handler(int sig)
     {
       /* master process */
       int event, errsave = errno;
-      
+
       if (sig == SIGHUP)
 	event = EVENT_RELOAD;
       else if (sig == SIGCHLD)
@@ -1108,7 +1108,7 @@ static void sig_handler(int sig)
       else
 	return;
 
-      send_event(pipewrite, event, 0, NULL); 
+      send_event(pipewrite, event, 0, NULL);
       errno = errsave;
     }
 }
@@ -1121,8 +1121,8 @@ void send_alarm(time_t event, time_t now)
       /* alarm(0) or alarm(-ve) doesn't do what we want.... */
       if ((now == 0 || difftime(event, now) <= 0.0))
 	send_event(pipewrite, EVENT_ALARM, 0, NULL);
-      else 
-	alarm((unsigned)difftime(event, now)); 
+      else
+	alarm((unsigned)difftime(event, now));
     }
 }
 
@@ -1139,12 +1139,12 @@ void send_event(int fd, int event, int data, char *msg)
   ev.event = event;
   ev.data = data;
   ev.msg_sz = msg ? strlen(msg) : 0;
-  
+
   iov[0].iov_base = &ev;
   iov[0].iov_len = sizeof(ev);
   iov[1].iov_base = msg;
   iov[1].iov_len = ev.msg_sz;
-  
+
   /* error pipe, debug mode. */
   if (fd == -1)
     fatal_event(&ev, msg);
@@ -1162,10 +1162,10 @@ static int read_event(int fd, struct event_desc *evp, char **msg)
 
   if (!read_write(fd, (unsigned char *)evp, sizeof(struct event_desc), 1))
     return 0;
-  
+
   *msg = NULL;
-  
-  if (evp->msg_sz != 0 && 
+
+  if (evp->msg_sz != 0 &&
       (buf = malloc(evp->msg_sz + 1)) &&
       read_write(fd, (unsigned char *)buf, evp->msg_sz, 1))
     {
@@ -1175,11 +1175,11 @@ static int read_event(int fd, struct event_desc *evp, char **msg)
 
   return 1;
 }
-    
+
 static void fatal_event(struct event_desc *ev, char *msg)
 {
   errno = ev->data;
-  
+
   switch (ev->event)
     {
     case EVENT_DIE:
@@ -1187,10 +1187,10 @@ static void fatal_event(struct event_desc *ev, char *msg)
 
     case EVENT_FORK_ERR:
       die(_("cannot fork into background: %s"), NULL, EC_MISC);
-  
+
     case EVENT_PIPE_ERR:
       die(_("failed to create helper: %s"), NULL, EC_MISC);
-  
+
     case EVENT_CAP_ERR:
       die(_("setting capabilities failed: %s"), NULL, EC_MISC);
 
@@ -1199,34 +1199,34 @@ static void fatal_event(struct event_desc *ev, char *msg)
 
     case EVENT_GROUP_ERR:
       die(_("failed to change group-id to %s: %s"), msg, EC_MISC);
-      
+
     case EVENT_PIDFILE:
       die(_("failed to open pidfile %s: %s"), msg, EC_FILE);
 
     case EVENT_LOG_ERR:
       die(_("cannot open log %s: %s"), msg, EC_FILE);
-    
+
     case EVENT_LUA_ERR:
       die(_("failed to load Lua script: %s"), msg, EC_MISC);
 
     case EVENT_TFTP_ERR:
       die(_("TFTP directory %s inaccessible: %s"), msg, EC_FILE);
-    
+
     case EVENT_TIME_ERR:
       die(_("cannot create timestamp file %s: %s" ), msg, EC_BADCONF);
     }
-}	
-      
+}
+
 static void async_event(int pipe, time_t now)
 {
   pid_t p;
   struct event_desc ev;
   int i, check = 0;
   char *msg;
-  
+
   /* NOTE: the memory used to return msg is leaked: use msgs in events only
      to describe fatal errors. */
-  
+
   if (read_event(pipe, &ev, &msg))
     switch (ev.event)
       {
@@ -1238,13 +1238,13 @@ static void async_event(int pipe, time_t now)
 	  {
 	    my_syslog(LOG_INFO, _("now checking DNSSEC signature timestamps"));
 	    daemon->dnssec_no_time_check = 0;
-	  } 
+	  }
 #endif
 	/* fall through */
-	
+
       case EVENT_INIT:
 	clear_cache_and_reload(now);
-	
+
 	if (daemon->port != 0)
 	  {
 	    if (daemon->resolv_files && option_bool(OPT_NO_POLL))
@@ -1267,12 +1267,12 @@ static void async_event(int pipe, time_t now)
 	rerun_scripts();
 #endif
 	break;
-	
+
       case EVENT_DUMP:
 	if (daemon->port != 0)
 	  dump_cache(now);
 	break;
-	
+
       case EVENT_ALARM:
 #ifdef HAVE_DHCP
 	if (daemon->dhcp || daemon->doing_dhcp6)
@@ -1287,7 +1287,7 @@ static void async_event(int pipe, time_t now)
 #endif
 #endif
 	break;
-		
+
       case EVENT_CHILD:
 	/* See Stevens 5.10 */
 	while ((p = waitpid(-1, NULL, WNOHANG)) != 0)
@@ -1295,14 +1295,14 @@ static void async_event(int pipe, time_t now)
 	    {
 	      if (errno != EINTR)
 		break;
-	    }      
-	  else 
+	    }
+	  else
 	    for (i = 0 ; i < MAX_PROCS; i++)
 	      if (daemon->tcp_pids[i] == p)
 		daemon->tcp_pids[i] = 0;
 	break;
-	
-#if defined(HAVE_SCRIPT)	
+
+#if defined(HAVE_SCRIPT)
       case EVENT_KILLED:
 	my_syslog(LOG_WARNING, _("script process killed by signal %d"), ev.data);
 	break;
@@ -1312,7 +1312,7 @@ static void async_event(int pipe, time_t now)
 	break;
 
       case EVENT_EXEC_ERR:
-	my_syslog(LOG_ERR, _("failed to execute %s: %s"), 
+	my_syslog(LOG_ERR, _("failed to execute %s: %s"),
 		  daemon->lease_change_command, strerror(ev.data));
 	break;
 
@@ -1353,21 +1353,21 @@ static void async_event(int pipe, time_t now)
 	for (i = 0; i < MAX_PROCS; i++)
 	  if (daemon->tcp_pids[i] != 0)
 	    kill(daemon->tcp_pids[i], SIGALRM);
-	
+
 #if defined(HAVE_SCRIPT) && defined(HAVE_DHCP)
 	/* handle pending lease transitions */
 	if (daemon->helperfd != -1)
 	  {
 	    /* block in writes until all done */
 	    if ((i = fcntl(daemon->helperfd, F_GETFL)) != -1)
-	      fcntl(daemon->helperfd, F_SETFL, i & ~O_NONBLOCK); 
+	      fcntl(daemon->helperfd, F_SETFL, i & ~O_NONBLOCK);
 	    do {
 	      helper_write();
 	    } while (!helper_buf_empty() || do_script_run(now));
 	    while (retry_send(close(daemon->helperfd)));
 	  }
 #endif
-	
+
 	if (daemon->lease_stream)
 	  fclose(daemon->lease_stream);
 
@@ -1382,7 +1382,7 @@ static void async_event(int pipe, time_t now)
 
 	if (daemon->runfile)
 	  unlink(daemon->runfile);
-	
+
 	my_syslog(LOG_INFO, _("exiting on receipt of SIGTERM"));
 	flush_log();
 	exit(EC_GOOD);
@@ -1394,28 +1394,28 @@ static void poll_resolv(int force, int do_reload, time_t now)
   struct resolvc *res, *latest;
   struct stat statbuf;
   time_t last_change = 0;
-  /* There may be more than one possible file. 
+  /* There may be more than one possible file.
      Go through and find the one which changed _last_.
      Warn of any which can't be read. */
 
   if (daemon->port == 0 || option_bool(OPT_NO_POLL))
     return;
-  
+
   for (latest = NULL, res = daemon->resolv_files; res; res = res->next)
     if (stat(res->name, &statbuf) == -1)
       {
 	if (force)
 	  {
-	    res->mtime = 0; 
+	    res->mtime = 0;
 	    continue;
 	  }
 
 	if (!res->logged)
 	  my_syslog(LOG_WARNING, _("failed to access %s: %s"), res->name, strerror(errno));
 	res->logged = 1;
-	
+
 	if (res->mtime != 0)
-	  { 
+	  {
 	    /* existing file evaporated, force selection of the latest
 	       file even if its mtime hasn't changed since we last looked */
 	    poll_resolv(1, do_reload, now);
@@ -1435,7 +1435,7 @@ static void poll_resolv(int force, int do_reload, time_t now)
 	      }
 	  }
       }
-  
+
   if (latest)
     {
       static int warned = 0;
@@ -1447,7 +1447,7 @@ static void poll_resolv(int force, int do_reload, time_t now)
 	  if (option_bool(OPT_RELOAD) && do_reload)
 	    clear_cache_and_reload(now);
 	}
-      else 
+      else
 	{
 	  latest->mtime = 0;
 	  if (!warned)
@@ -1457,7 +1457,7 @@ static void poll_resolv(int force, int do_reload, time_t now)
 	    }
 	}
     }
-}       
+}
 
 void clear_cache_and_reload(time_t now)
 {
@@ -1465,7 +1465,7 @@ void clear_cache_and_reload(time_t now)
 
   if (daemon->port != 0)
     cache_reload();
-  
+
 #ifdef HAVE_DHCP
   if (daemon->dhcp || daemon->doing_dhcp6)
     {
@@ -1476,13 +1476,13 @@ void clear_cache_and_reload(time_t now)
       set_dynamic_inotify(AH_DHCP_HST | AH_DHCP_OPT, 0, NULL, 0);
 #endif
       dhcp_update_configs(daemon->dhcp_conf);
-      lease_update_from_configs(); 
-      lease_update_file(now); 
+      lease_update_from_configs();
+      lease_update_file(now);
       lease_update_dns(1);
     }
 #ifdef HAVE_DHCP6
   else if (daemon->doing_ra)
-    /* Not doing DHCP, so no lease system, manage 
+    /* Not doing DHCP, so no lease system, manage
        alarms for ra only */
     send_alarm(periodic_ra(now), now);
 #endif
@@ -1494,7 +1494,7 @@ static int set_dns_listeners(time_t now)
   struct serverfd *serverfdp;
   struct listener *listener;
   int wait = 0, i;
-  
+
 #ifdef HAVE_TFTP
   int  tftp = 0;
   struct tftp_transfer *transfer;
@@ -1504,25 +1504,25 @@ static int set_dns_listeners(time_t now)
       poll_listen(transfer->sockfd, POLLIN);
     }
 #endif
-  
+
   /* will we be able to get memory? */
   if (daemon->port != 0)
     get_new_frec(now, &wait, 0);
-  
+
   for (serverfdp = daemon->sfds; serverfdp; serverfdp = serverfdp->next)
     poll_listen(serverfdp->fd, POLLIN);
-    
+
   if (daemon->port != 0 && !daemon->osport)
     for (i = 0; i < RANDOM_SOCKS; i++)
       if (daemon->randomsocks[i].refcount != 0)
 	poll_listen(daemon->randomsocks[i].fd, POLLIN);
-	  
+
   for (listener = daemon->listeners; listener; listener = listener->next)
     {
       /* only listen for queries if we have resources */
       if (listener->fd != -1 && wait == 0)
 	poll_listen(listener->fd, POLLIN);
-	
+
       /* death of a child goes through the select loop, so
 	 we don't need to explicitly arrange to wake up here */
       if  (listener->tcpfd != -1)
@@ -1539,7 +1539,7 @@ static int set_dns_listeners(time_t now)
 #endif
 
     }
-  
+
   return wait;
 }
 
@@ -1552,19 +1552,19 @@ static void check_dns_listeners(time_t now)
   for (serverfdp = daemon->sfds; serverfdp; serverfdp = serverfdp->next)
     if (poll_check(serverfdp->fd, POLLIN))
       reply_query(serverfdp->fd, serverfdp->source_addr.sa.sa_family, now);
-  
+
   if (daemon->port != 0 && !daemon->osport)
     for (i = 0; i < RANDOM_SOCKS; i++)
-      if (daemon->randomsocks[i].refcount != 0 && 
+      if (daemon->randomsocks[i].refcount != 0 &&
 	  poll_check(daemon->randomsocks[i].fd, POLLIN))
 	reply_query(daemon->randomsocks[i].fd, daemon->randomsocks[i].family, now);
-  
+
   for (listener = daemon->listeners; listener; listener = listener->next)
     {
       if (listener->fd != -1 && poll_check(listener->fd, POLLIN))
-	receive_query(listener, now); 
-      
-#ifdef HAVE_TFTP     
+	receive_query(listener, now);
+
+#ifdef HAVE_TFTP
       if (listener->tftpfd != -1 && poll_check(listener->tftpfd, POLLIN))
 	tftp_request(listener, now);
 #endif
@@ -1578,18 +1578,18 @@ static void check_dns_listeners(time_t now)
 	  socklen_t tcp_len = sizeof(union mysockaddr);
 
 	  while ((confd = accept(listener->tcpfd, NULL, NULL)) == -1 && errno == EINTR);
-	  
+
 	  if (confd == -1)
 	    continue;
-	  
+
 	  if (getsockname(confd, (struct sockaddr *)&tcp_addr, &tcp_len) == -1)
 	    {
 	      while (retry_send(close(confd)));
 	      continue;
 	    }
-	  
+
 	  /* Make sure that the interface list is up-to-date.
-	     
+
 	     We do this here as we may need the results below, and
 	     the DNS code needs them for --interface-name stuff.
 
@@ -1598,16 +1598,16 @@ static void check_dns_listeners(time_t now)
 	     have no effect. This avoids two processes reading from the same
 	     netlink fd and screwing the pooch entirely.
 	  */
- 
+
 	  enumerate_interfaces(0);
-	  
+
 	  if (option_bool(OPT_NOWILD))
 	    iface = listener->iface; /* May be NULL */
-	  else 
+	  else
 	    {
 	      int if_index;
 	      char intr_name[IF_NAMESIZE];
-	      
+
 	      /* if we can find the arrival interface, check it's one that's allowed */
 	      if ((if_index = tcp_interface(confd, tcp_addr.sa.sa_family)) != 0 &&
 		  indextoname(listener->tcpfd, if_index, intr_name))
@@ -1618,34 +1618,34 @@ static void check_dns_listeners(time_t now)
 		  if (tcp_addr.sa.sa_family == AF_INET6)
 		    addr.addr.addr6 = tcp_addr.in6.sin6_addr;
 #endif
-		  
+
 		  for (iface = daemon->interfaces; iface; iface = iface->next)
 		    if (iface->index == if_index)
 		      break;
-		  
+
 		  if (!iface && !loopback_exception(listener->tcpfd, tcp_addr.sa.sa_family, &addr, intr_name))
 		    client_ok = 0;
 		}
-	      
+
 	      if (option_bool(OPT_CLEVERBIND))
 		iface = listener->iface; /* May be NULL */
 	      else
 		{
 		  /* Check for allowed interfaces when binding the wildcard address:
-		     we do this by looking for an interface with the same address as 
+		     we do this by looking for an interface with the same address as
 		     the local address of the TCP connection, then looking to see if that's
 		     an allowed interface. As a side effect, we get the netmask of the
 		     interface too, for localisation. */
-		  
+
 		  for (iface = daemon->interfaces; iface; iface = iface->next)
 		    if (sockaddr_isequal(&iface->addr, &tcp_addr))
 		      break;
-		  
+
 		  if (!iface)
 		    client_ok = 0;
 		}
 	    }
-	  
+
 	  if (!client_ok)
 	    {
 	      shutdown(confd, SHUT_RDWR);
@@ -1673,7 +1673,7 @@ static void check_dns_listeners(time_t now)
 	  else
 	    {
 	      unsigned char *buff;
-	      struct server *s; 
+	      struct server *s;
 	      int flags;
 	      struct in_addr netmask;
 	      int auth_dns;
@@ -1698,29 +1698,29 @@ static void check_dns_listeners(time_t now)
 
 	      /* start with no upstream connections. */
 	      for (s = daemon->servers; s; s = s->next)
-		 s->tcpfd = -1; 
-	      
+		 s->tcpfd = -1;
+
 	      /* The connected socket inherits non-blocking
-		 attribute from the listening socket. 
+		 attribute from the listening socket.
 		 Reset that here. */
 	      if ((flags = fcntl(confd, F_GETFL, 0)) != -1)
 		fcntl(confd, F_SETFL, flags & ~O_NONBLOCK);
-	      
+
 	      buff = tcp_request(confd, now, &tcp_addr, netmask, auth_dns);
-	       
+
 	      shutdown(confd, SHUT_RDWR);
 	      while (retry_send(close(confd)));
-	      
+
 	      if (buff)
 		free(buff);
-	      
+
 	      for (s = daemon->servers; s; s = s->next)
 		if (s->tcpfd != -1)
 		  {
 		    shutdown(s->tcpfd, SHUT_RDWR);
 		    while (retry_send(close(s->tcpfd)));
 		  }
-#ifndef NO_FORK		   
+#ifndef NO_FORK
 	      if (!option_bool(OPT_DEBUG))
 		{
 		  flush_log();
@@ -1757,7 +1757,7 @@ int icmp_ping(struct in_addr addr)
 
   int fd;
   struct sockaddr_in saddr;
-  struct { 
+  struct {
     struct ip ip;
     struct icmp icmp;
   } packet;
@@ -1780,19 +1780,19 @@ int icmp_ping(struct in_addr addr)
 #ifdef HAVE_SOCKADDR_SA_LEN
   saddr.sin_len = sizeof(struct sockaddr_in);
 #endif
-  
+
   memset(&packet.icmp, 0, sizeof(packet.icmp));
   packet.icmp.icmp_type = ICMP_ECHO;
   packet.icmp.icmp_id = id;
   for (j = 0, i = 0; i < sizeof(struct icmp) / 2; i++)
     j += ((u16 *)&packet.icmp)[i];
   while (j>>16)
-    j = (j & 0xffff) + (j >> 16);  
+    j = (j & 0xffff) + (j >> 16);
   packet.icmp.icmp_cksum = (j == 0xffff) ? j : ~j;
-  
-  while (retry_send(sendto(fd, (char *)&packet.icmp, sizeof(struct icmp), 0, 
+
+  while (retry_send(sendto(fd, (char *)&packet.icmp, sizeof(struct icmp), 0,
 			   (struct sockaddr *)&saddr, sizeof(saddr))));
-  
+
   gotreply = delay_dhcp(dnsmasq_time(), PING_WAIT, fd, addr.s_addr, id);
 
 #if defined(HAVE_LINUX_NETWORK) || defined(HAVE_SOLARIS_NETWORK)
@@ -1835,29 +1835,29 @@ int delay_dhcp(time_t start, int sec, int fd, uint32_t addr, unsigned short id)
         poll_listen(fd, POLLIN);
       set_dns_listeners(now);
       set_log_writer();
-      
+
 #ifdef HAVE_DHCP6
       if (daemon->doing_ra)
-	poll_listen(daemon->icmp6fd, POLLIN); 
+	poll_listen(daemon->icmp6fd, POLLIN);
 #endif
-      
+
       rc = do_poll(250);
-      
+
       if (rc < 0)
 	continue;
       else if (rc == 0)
 	timeout_count++;
 
       now = dnsmasq_time();
-      
+
       check_log_writer(0);
       check_dns_listeners(now);
-      
+
 #ifdef HAVE_DHCP6
       if (daemon->doing_ra && poll_check(daemon->icmp6fd, POLLIN))
 	icmp6_packet(now);
 #endif
-      
+
 #ifdef HAVE_TFTP
       check_tftp_listeners(now);
 #endif
@@ -1870,7 +1870,7 @@ int delay_dhcp(time_t start, int sec, int fd, uint32_t addr, unsigned short id)
           } packet;
           struct sockaddr_in faddr;
           socklen_t len = sizeof(faddr);
-	  
+
           if (poll_check(fd, POLLIN) &&
 	      recvfrom(fd, &packet, sizeof(packet), 0, (struct sockaddr *)&faddr, &len) == sizeof(packet) &&
 	      addr == faddr.sin_addr.s_addr &&
@@ -1885,4 +1885,4 @@ int delay_dhcp(time_t start, int sec, int fd, uint32_t addr, unsigned short id)
 }
 #endif
 
- 
+
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
index c30a2f1..e732ce6 100644
--- a/src/dnsmasq.h
+++ b/src/dnsmasq.h
@@ -1,15 +1,15 @@
 /* dnsmasq is Copyright (c) 2000-2017 Simon Kelley
- 
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -20,7 +20,7 @@
    if included too early. */
 #ifdef _STDIO_H
 #  error "Header file stdio.h included too early!"
-#endif 
+#endif
 
 #ifndef NO_LARGEFILE
 /* Ensure we can use files >2GB (log files may grow this big) */
@@ -33,7 +33,7 @@
 #  ifndef __ANDROID__
 #      define _GNU_SOURCE
 #  endif
-#  include <features.h> 
+#  include <features.h>
 #endif
 
 /* Need these defined early */
@@ -43,7 +43,7 @@
 #endif
 
 /* get these before config.h  for IPv6 stuff... */
-#include <sys/types.h> 
+#include <sys/types.h>
 #include <sys/socket.h>
 
 #ifdef __APPLE__
@@ -78,7 +78,7 @@ typedef unsigned long long u64;
 #  define _(S) (S)
 #else
 #  include <libintl.h>
-#  include <locale.h>   
+#  include <locale.h>
 #  define _(S) gettext(S)
 #endif
 
@@ -129,7 +129,7 @@ typedef unsigned long long u64;
 
 #if defined(HAVE_LINUX_NETWORK)
 #include <linux/capability.h>
-/* There doesn't seem to be a universally-available 
+/* There doesn't seem to be a universally-available
    userspace header for these. */
 extern int capset(cap_user_header_t header, cap_user_data_t data);
 extern int capget(cap_user_header_t header, cap_user_data_t data);
@@ -213,7 +213,7 @@ struct event_desc {
 #define OPT_LEASE_RO       22
 #define OPT_ALL_SERVERS    23
 #define OPT_RELOAD         24
-#define OPT_LOCAL_REBIND   25  
+#define OPT_LOCAL_REBIND   25
 #define OPT_TFTP_SECURE    26
 #define OPT_TFTP_NOBLOCK   27
 #define OPT_LOG_OPTS       28
@@ -236,7 +236,7 @@ struct event_desc {
 #define OPT_DNSSEC_VALID   45
 #define OPT_DNSSEC_TIME    46
 #define OPT_DNSSEC_DEBUG   47
-#define OPT_DNSSEC_NO_SIGN 48 
+#define OPT_DNSSEC_NO_SIGN 48
 #define OPT_LOCAL_SERVICE  49
 #define OPT_LOOP_DETECT    50
 #define OPT_EXTRALOG       51
@@ -247,7 +247,7 @@ struct event_desc {
 #define OPT_TFTP_APREF_MAC 56
 #define OPT_LAST           57
 
-/* extra flags for my_syslog, we use a couple of facilities since they are known 
+/* extra flags for my_syslog, we use a couple of facilities since they are known
    not to occupy the same bits as priorities, no matter how syslog.h is set up. */
 #define MS_TFTP   LOG_USER
 #define MS_DHCP   LOG_DAEMON
@@ -262,11 +262,11 @@ struct all_addr {
     /* for log_query */
     struct {
       unsigned short keytag, algo, digest;
-    } log; 
+    } log;
     /* for cache_insert of DNSKEY, DS */
     struct {
       unsigned short class, type;
-    } dnssec;      
+    } dnssec;
   } addr;
 };
 
@@ -321,7 +321,7 @@ struct cname {
   int ttl, flag;
   char *alias, *target;
   struct cname *next, *targetp;
-}; 
+};
 
 struct ds_config {
   char *name, *digest;
@@ -335,7 +335,7 @@ struct ds_config {
 
 struct addrlist {
   struct all_addr addr;
-  int flags, prefixlen; 
+  int flags, prefixlen;
   struct addrlist *next;
 };
 
@@ -386,7 +386,7 @@ struct blockdata {
   unsigned char key[KEYBLOCK_LEN];
 };
 
-struct crec { 
+struct crec {
   struct crec *next, *prev, *hash_next;
   /* union is 16 bytes when doing IPv6, 8 bytes on 32 bit machines without IPv6 */
   union {
@@ -402,17 +402,17 @@ struct crec {
       struct blockdata *keydata;
       unsigned short keylen, flags, keytag;
       unsigned char algo;
-    } key; 
+    } key;
     struct {
       struct blockdata *keydata;
       unsigned short keylen, keytag;
       unsigned char algo;
-      unsigned char digest; 
-    } ds; 
+      unsigned char digest;
+    } ds;
   } addr;
   time_t ttd; /* time to die */
   /* used as class if DNSKEY/DS, index to source for F_HOSTS */
-  unsigned int uid; 
+  unsigned int uid;
   unsigned short flags;
   union {
     char sname[SMALLDNAME];
@@ -426,7 +426,7 @@ struct crec {
 #define F_REVERSE   (1u<<2)
 #define F_FORWARD   (1u<<3)
 #define F_DHCP      (1u<<4)
-#define F_NEG       (1u<<5)       
+#define F_NEG       (1u<<5)
 #define F_HOSTS     (1u<<6)
 #define F_IPV4      (1u<<7)
 #define F_IPV6      (1u<<8)
@@ -479,7 +479,7 @@ union mysockaddr {
 
 #define SERV_FROM_RESOLV       1  /* 1 for servers from resolv, 0 for command line. */
 #define SERV_NO_ADDR           2  /* no server, this domain is local only */
-#define SERV_LITERAL_ADDRESS   4  /* addr is the answer, not the server */ 
+#define SERV_LITERAL_ADDRESS   4  /* addr is the answer, not the server */
 #define SERV_HAS_DOMAIN        8  /* server for one domain only */
 #define SERV_HAS_SOURCE       16  /* source address defined */
 #define SERV_FOR_NODOTS       32  /* server for names with no domain part only */
@@ -507,18 +507,18 @@ struct randfd {
   int fd;
   unsigned short refcount, family;
 };
-  
+
 struct server {
   union mysockaddr addr, source_addr;
   char interface[IF_NAMESIZE+1];
-  struct serverfd *sfd; 
-  char *domain; /* set if this server only handles a domain. */ 
+  struct serverfd *sfd;
+  char *domain; /* set if this server only handles a domain. */
   int flags, tcpfd, edns_pktsz;
   unsigned int queries, failed_queries;
 #ifdef HAVE_LOOP
   u32 uid;
 #endif
-  struct server *next; 
+  struct server *next;
 };
 
 struct ipsets {
@@ -531,7 +531,7 @@ struct irec {
   union mysockaddr addr;
   struct in_addr netmask; /* only valid for IPv4 */
   int tftp_ok, dhcp_ok, mtu, done, warned, dad, dns_auth, index, multicast_done, found, label;
-  char *name; 
+  char *name;
   struct irec *next;
 };
 
@@ -606,7 +606,7 @@ struct hostsfile {
 #define FREC_DO_QUESTION       64
 #define FREC_ADDED_PHEADER    128
 #define FREC_TEST_PKTSZ       256
-#define FREC_HAS_EXTRADATA    512        
+#define FREC_HAS_EXTRADATA    512
 
 #ifdef HAVE_DNSSEC
 #define HASH_SIZE 20 /* SHA-1 digest size */
@@ -627,7 +627,7 @@ struct frec {
   int log_id, fd, forwardall, flags;
   time_t time;
   unsigned char *hash[HASH_SIZE];
-#ifdef HAVE_DNSSEC 
+#ifdef HAVE_DNSSEC
   int class, work_counter;
   struct blockdata *stash; /* Saved reply, whilst we validate */
   size_t stash_len;
@@ -643,7 +643,7 @@ struct frec {
 #define OT_INTERNAL     0x2000
 #define OT_NAME         0x1000
 #define OT_CSTRING      0x0800
-#define OT_DEC          0x0400 
+#define OT_DEC          0x0400
 #define OT_TIME         0x0200
 
 /* actions in the daemon->helper RPC */
@@ -675,7 +675,7 @@ struct dhcp_lease {
   unsigned int length;
 #endif
   int hwaddr_len, hwaddr_type;
-  unsigned char hwaddr[DHCP_CHADDR_MAX]; 
+  unsigned char hwaddr[DHCP_CHADDR_MAX];
   struct in_addr addr, override, giaddr;
   unsigned char *extradata;
   unsigned int extradata_len, extradata_size;
@@ -741,7 +741,7 @@ struct dhcp_config {
   struct dhcp_config *next;
 };
 
-#define have_config(config, mask) ((config) && ((config)->flags & (mask))) 
+#define have_config(config, mask) ((config) && ((config)->flags & (mask)))
 
 #define CONFIG_DISABLE           1
 #define CONFIG_CLID              2
@@ -791,7 +791,7 @@ struct dhcp_boot {
 };
 
 struct pxe_service {
-  unsigned short CSA, type; 
+  unsigned short CSA, type;
   char *menu, *basename, *sname;
   struct in_addr server;
   struct dhcp_netid *netid;
@@ -834,9 +834,9 @@ struct cond_domain {
 #endif
   int is6;
   struct cond_domain *next;
-}; 
+};
 
-#ifdef OPTION6_PREFIX_CLASS 
+#ifdef OPTION6_PREFIX_CLASS
 struct prefix_class {
   int class;
   struct dhcp_netid tag;
@@ -936,7 +936,7 @@ struct dhcp_relay {
 };
 
 extern struct daemon {
-  /* datastuctures representing the command-line and 
+  /* datastuctures representing the command-line and
      config file arguments. All set (including defaults)
      in option.c */
 
@@ -964,7 +964,7 @@ extern struct daemon {
   int group_set, osport;
   char *domain_suffix;
   struct cond_domain *cond_domain, *synth_domains;
-  char *runfile; 
+  char *runfile;
   char *lease_change_command;
   struct iname *if_names, *if_addrs, *if_except, *dhcp_except, *auth_peers, *tftp_interfaces;
   struct bogus_addr *bogus_addr, *ignore_addr;
@@ -986,29 +986,29 @@ extern struct daemon {
   struct dhcp_mac *dhcp_macs;
   struct dhcp_boot *boot_config;
   struct pxe_service *pxe_services;
-  struct tag_if *tag_if; 
+  struct tag_if *tag_if;
   struct addr_list *override_relays;
   struct dhcp_relay *relay4, *relay6;
   struct delay_config *delay_conf;
   int override;
   int enable_pxe;
   int doing_ra, doing_dhcp6;
-  struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names, *dhcp_gen_names; 
+  struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names, *dhcp_gen_names;
   struct dhcp_netid_list *force_broadcast, *bootp_dynamic;
   struct hostsfile *dhcp_hosts_file, *dhcp_opts_file, *dynamic_dirs;
   int dhcp_max, tftp_max, tftp_mtu;
   int dhcp_server_port, dhcp_client_port;
-  int start_tftp_port, end_tftp_port; 
+  int start_tftp_port, end_tftp_port;
   unsigned int min_leasetime;
   struct doctor *doctors;
   unsigned short edns_pktsz;
-  char *tftp_prefix; 
+  char *tftp_prefix;
   struct tftp_prefix *if_prefix; /* per-interface TFTP prefixes */
   unsigned int duid_enterprise, duid_config_len;
   unsigned char *duid_config;
   char *dbus_name;
   unsigned long soa_sn, soa_refresh, soa_retry, soa_expiry;
-#ifdef OPTION6_PREFIX_CLASS 
+#ifdef OPTION6_PREFIX_CLASS
   struct prefix_class *prefix_classes;
 #endif
 #ifdef HAVE_DNSSEC
@@ -1039,13 +1039,13 @@ extern struct daemon {
   struct randfd *rfd_save; /*      "        "        */
   pid_t tcp_pids[MAX_PROCS];
   struct randfd randomsocks[RANDOM_SOCKS];
-  int v6pktinfo; 
+  int v6pktinfo;
   struct addrlist *interface_addrs; /* list of all addresses/prefix lengths associated with all local interfaces */
   int log_id, log_display_id; /* ids of transactions for logging */
   union mysockaddr *log_source_addr;
 
   /* DHCP state */
-  int dhcpfd, helperfd, pxefd; 
+  int dhcpfd, helperfd, pxefd;
 #ifdef HAVE_INOTIFY
   int inotifyfd;
 #endif
@@ -1083,13 +1083,13 @@ extern struct daemon {
 
 /* cache.c */
 void cache_init(void);
-void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg); 
+void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg);
 char *record_source(unsigned int index);
 char *querystr(char *desc, unsigned short type);
 struct crec *cache_find_by_addr(struct crec *crecp,
-				struct all_addr *addr, time_t now, 
+				struct all_addr *addr, time_t now,
 				unsigned int prot);
-struct crec *cache_find_by_name(struct crec *crecp, 
+struct crec *cache_find_by_name(struct crec *crecp,
 				char *name, time_t now, unsigned int prot);
 void cache_end_insert(void);
 void cache_start_insert(void);
@@ -1106,7 +1106,7 @@ int cache_make_stat(struct txt_record *t);
 char *cache_get_name(struct crec *crecp);
 char *cache_get_cname_target(struct crec *crecp);
 struct crec *cache_enumerate(int init);
-int read_hostsfile(char *filename, unsigned int index, int cache_size, 
+int read_hostsfile(char *filename, unsigned int index, int cache_size,
 		   struct crec **rhash, int hashsz);
 
 /* blockdata.c */
@@ -1127,12 +1127,12 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr);
 int is_rev_synth(int flag, struct all_addr *addr, char *name);
 
 /* rfc1035.c */
-int extract_name(struct dns_header *header, size_t plen, unsigned char **pp, 
+int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
                  char *name, int isExtract, int extrabytes);
 unsigned char *skip_name(unsigned char *ansp, struct dns_header *header, size_t plen, int extrabytes);
 unsigned char *skip_questions(struct dns_header *header, size_t plen);
 unsigned char *skip_section(unsigned char *ansp, int count, struct dns_header *header, size_t plen);
-unsigned int extract_request(struct dns_header *header, size_t qlen, 
+unsigned int extract_request(struct dns_header *header, size_t qlen,
 			       char *name, unsigned short *typep);
 size_t setup_reply(struct dns_header *header, size_t  qlen,
 		   struct all_addr *addrp, unsigned int flags,
@@ -1140,28 +1140,28 @@ size_t setup_reply(struct dns_header *header, size_t  qlen,
 int extract_addresses(struct dns_header *header, size_t qlen, char *name,
 		      time_t now, char **ipsets, int is_sign, int check_rebind,
 		      int no_cache_dnssec, int secure, int *doctored);
-size_t answer_request(struct dns_header *header, char *limit, size_t qlen,  
-		      struct in_addr local_addr, struct in_addr local_netmask, 
+size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+		      struct in_addr local_addr, struct in_addr local_netmask,
 		      time_t now, int ad_reqd, int do_bit, int have_pseudoheader);
-int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name, 
+int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name,
 			     struct bogus_addr *baddr, time_t now);
 int check_for_ignored_address(struct dns_header *header, size_t qlen, struct bogus_addr *baddr);
 int check_for_local_domain(char *name, time_t now);
 unsigned int questions_crc(struct dns_header *header, size_t plen, char *name);
-size_t resize_packet(struct dns_header *header, size_t plen, 
+size_t resize_packet(struct dns_header *header, size_t plen,
 		  unsigned char *pheader, size_t hlen);
 int add_resource_record(struct dns_header *header, char *limit, int *truncp,
-			int nameoffset, unsigned char **pp, unsigned long ttl, 
+			int nameoffset, unsigned char **pp, unsigned long ttl,
 			int *offset, unsigned short type, unsigned short class, char *format, ...);
 unsigned char *skip_questions(struct dns_header *header, size_t plen);
-int extract_name(struct dns_header *header, size_t plen, unsigned char **pp, 
+int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
 		 char *name, int isExtract, int extrabytes);
 int in_arpa_name_2_addr(char *namein, struct all_addr *addrp);
 int private_net(struct in_addr addr, int ban_localhost);
 
 /* auth.c */
 #ifdef HAVE_AUTH
-size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, 
+size_t answer_auth(struct dns_header *header, char *limit, size_t qlen,
 		   time_t now, union mysockaddr *peer_addr, int local_query,
 		   int do_bit, int have_pseudoheader);
 int in_zone(struct auth_zone *zone, char *name, char **cut);
@@ -1203,9 +1203,9 @@ void setaddr6part(struct in6_addr *addr, u64 host);
 int retry_send(ssize_t rc);
 void prettyprint_time(char *buf, unsigned int t);
 int prettyprint_addr(union mysockaddr *addr, char *buf);
-int parse_hex(char *in, unsigned char *out, int maxlen, 
+int parse_hex(char *in, unsigned char *out, int maxlen,
 	      unsigned int *wildcard_mask, int *mac_type);
-int memcmp_masked(unsigned char *a, unsigned char *b, int len, 
+int memcmp_masked(unsigned char *a, unsigned char *b, int len,
 		  unsigned int mask);
 int expand_buf(struct iovec *iov, size_t size);
 char *print_mac(char *buff, unsigned char *mac, int len);
@@ -1227,14 +1227,14 @@ void flush_log(void);
 
 /* option.c */
 void read_opts (int argc, char **argv, char *compile_opts);
-char *option_string(int prot, unsigned int opt, unsigned char *val, 
+char *option_string(int prot, unsigned int opt, unsigned char *val,
 		    int opt_len, char *buf, int buf_len);
 void reread_dhcp(void);
 void read_servers_file(void);
 void set_option_bool(unsigned int opt);
 void reset_option_bool(unsigned int opt);
 struct hostsfile *expand_filelist(struct hostsfile *list);
-char *parse_server(char *arg, union mysockaddr *addr, 
+char *parse_server(char *arg, union mysockaddr *addr,
 		   union mysockaddr *source_addr, char *interface, int *flags);
 int option_read_dynfile(char *file, int flags);
 
@@ -1245,7 +1245,7 @@ unsigned char *tcp_request(int confd, time_t now,
 			   union mysockaddr *local_addr, struct in_addr netmask, int auth_dns);
 void server_gone(struct server *server);
 struct frec *get_new_frec(time_t now, int *wait, int force);
-int send_from(int fd, int nowild, char *packet, size_t len, 
+int send_from(int fd, int nowild, char *packet, size_t len,
 	       union mysockaddr *to, struct all_addr *source,
 	       unsigned int iface);
 void resend_query(void);
@@ -1293,10 +1293,10 @@ void newaddress(time_t now);
 #ifdef HAVE_DHCP
 void dhcp_init(void);
 void dhcp_packet(time_t now, int pxe_fd);
-struct dhcp_context *address_available(struct dhcp_context *context, 
+struct dhcp_context *address_available(struct dhcp_context *context,
 				       struct in_addr taddr,
 				       struct dhcp_netid *netids);
-struct dhcp_context *narrow_context(struct dhcp_context *context, 
+struct dhcp_context *narrow_context(struct dhcp_context *context,
 				    struct in_addr taddr,
 				    struct dhcp_netid *netids);
 struct ping_result *do_icmp_ping(time_t now, struct in_addr addr,
@@ -1317,7 +1317,7 @@ void lease_init(time_t now);
 struct dhcp_lease *lease4_allocate(struct in_addr addr);
 #ifdef HAVE_DHCP6
 struct dhcp_lease *lease6_allocate(struct in6_addr *addrp, int lease_type);
-struct dhcp_lease *lease6_find(unsigned char *clid, int clid_len, 
+struct dhcp_lease *lease6_find(unsigned char *clid, int clid_len,
 			       int lease_type, int iaid, struct in6_addr *addr);
 void lease6_reset(void);
 struct dhcp_lease *lease6_find_by_client(struct dhcp_lease *first, int lease_type, unsigned char *clid, int clid_len, int iaid);
@@ -1334,7 +1334,7 @@ void lease_set_hwaddr(struct dhcp_lease *lease, const unsigned char *hwaddr,
 void lease_set_hostname(struct dhcp_lease *lease, const char *name, int auth, char *domain, char *config_domain);
 void lease_set_expires(struct dhcp_lease *lease, unsigned int len, time_t now);
 void lease_set_interface(struct dhcp_lease *lease, int interface, time_t now);
-struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr, int hw_len, int hw_type,  
+struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr, int hw_len, int hw_type,
 					unsigned char *clid, int clid_len);
 struct dhcp_lease *lease_find_by_addr(struct in_addr addr);
 struct in_addr lease_find_max_addr(struct dhcp_context *context);
@@ -1344,7 +1344,7 @@ int do_script_run(time_t now);
 void rerun_scripts(void);
 void lease_find_interfaces(time_t now);
 #ifdef HAVE_SCRIPT
-void lease_add_extradata(struct dhcp_lease *lease, unsigned char *data, 
+void lease_add_extradata(struct dhcp_lease *lease, unsigned char *data,
 			 unsigned int len, int delim);
 #endif
 #endif
@@ -1354,7 +1354,7 @@ void lease_add_extradata(struct dhcp_lease *lease, unsigned char *data,
 size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		  size_t sz, time_t now, int unicast_dest, int loopback,
 		  int *is_inform, int pxe, struct in_addr fallback, time_t recvtime);
-unsigned char *extended_hwaddr(int hwtype, int hwlen, unsigned char *hwaddr, 
+unsigned char *extended_hwaddr(int hwtype, int hwlen, unsigned char *hwaddr,
 			       int clid_len, unsigned char *clid, int *len_out);
 #endif
 
@@ -1407,7 +1407,7 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr, int flags,
 #if defined(HAVE_SCRIPT)
 int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd);
 void helper_write(void);
-void queue_script(int action, struct dhcp_lease *lease, 
+void queue_script(int action, struct dhcp_lease *lease,
 		  char *hostname, time_t now);
 #ifdef HAVE_TFTP
 void queue_tftp(off_t file_len, char *filename, union mysockaddr *peer);
@@ -1437,28 +1437,28 @@ void dhcp6_packet(time_t now);
 struct dhcp_context *address6_allocate(struct dhcp_context *context,  unsigned char *clid, int clid_len, int temp_addr,
 				       int iaid, int serial, struct dhcp_netid *netids, int plain_range, struct in6_addr *ans);
 int config_valid(struct dhcp_config *config, struct dhcp_context *context, struct in6_addr *addr);
-struct dhcp_context *address6_available(struct dhcp_context *context, 
+struct dhcp_context *address6_available(struct dhcp_context *context,
 					struct in6_addr *taddr,
 					struct dhcp_netid *netids,
 					int plain_range);
-struct dhcp_context *address6_valid(struct dhcp_context *context, 
+struct dhcp_context *address6_valid(struct dhcp_context *context,
 				    struct in6_addr *taddr,
 				    struct dhcp_netid *netids,
 				    int plain_range);
-struct dhcp_config *config_find_by_address6(struct dhcp_config *configs, struct in6_addr *net, 
+struct dhcp_config *config_find_by_address6(struct dhcp_config *configs, struct in6_addr *net,
 					    int prefix, u64 addr);
 void make_duid(time_t now);
 void dhcp_construct_contexts(time_t now);
-void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, 
+void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac,
 		    unsigned int *maclenp, unsigned int *mactypep, time_t now);
 #endif
-  
+
 /* rfc3315.c */
 #ifdef HAVE_DHCP6
-unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name,  
+unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name,
 			   struct in6_addr *fallback, struct in6_addr *ll_addr, struct in6_addr *ula_addr,
 			   size_t sz, struct in6_addr *client_addr, time_t now);
-void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, 
+void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address,
 		     u32 scope_id, time_t now);
 
 unsigned short relay_reply6( struct sockaddr_in6 *peer, ssize_t sz, char *arrival_interface);
@@ -1479,12 +1479,12 @@ void dhcp_update_configs(struct dhcp_config *configs);
 void display_opts(void);
 int lookup_dhcp_opt(int prot, char *name);
 int lookup_dhcp_len(int prot, int val);
-char *option_string(int prot, unsigned int opt, unsigned char *val, 
+char *option_string(int prot, unsigned int opt, unsigned char *val,
 		    int opt_len, char *buf, int buf_len);
 struct dhcp_config *find_config(struct dhcp_config *configs,
 				struct dhcp_context *context,
 				unsigned char *clid, int clid_len,
-				unsigned char *hwaddr, int hw_len, 
+				unsigned char *hwaddr, int hw_len,
 				int hw_type, char *hostname);
 int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type);
 #ifdef HAVE_LINUX_NETWORK
@@ -1520,7 +1520,7 @@ time_t periodic_ra(time_t now);
 void ra_start_unsolicited(time_t now, struct dhcp_context *context);
 #endif
 
-/* slaac.c */ 
+/* slaac.c */
 #ifdef HAVE_DHCP6
 void slaac_add_addrs(struct dhcp_lease *lease, time_t now, int force);
 time_t periodic_slaac(time_t now, struct dhcp_lease *leases);
@@ -1554,10 +1554,10 @@ int expand_workspace(unsigned char ***wkspc, int *szp, int new);
 /* edns0.c */
 unsigned char *find_pseudoheader(struct dns_header *header, size_t plen,
 				   size_t *len, unsigned char **p, int *is_sign, int *is_last);
-size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit, 
+size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit,
 			unsigned short udp_sz, int optno, unsigned char *opt, size_t optlen, int set_do, int replace);
 size_t add_do_bit(struct dns_header *header, size_t plen, unsigned char *limit);
-size_t add_edns0_config(struct dns_header *header, size_t plen, unsigned char *limit, 
+size_t add_edns0_config(struct dns_header *header, size_t plen, unsigned char *limit,
 			union mysockaddr *source, time_t now, int *check_subnet);
 int check_source(struct dns_header *header, size_t plen, unsigned char *pseudoheader, union mysockaddr *peer);
 
diff --git a/src/dnssec.c b/src/dnssec.c
index a74d01a..9b51cb7 100644
--- a/src/dnssec.c
+++ b/src/dnssec.c
@@ -51,7 +51,7 @@ static char *ds_digest_name(int digest)
     default: return NULL;
     }
 }
- 
+
 /* http://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml */
 static char *algo_digest_name(int algo)
 {
@@ -70,7 +70,7 @@ static char *algo_digest_name(int algo)
     default: return NULL;
     }
 }
-  
+
 /* http://www.iana.org/assignments/dnssec-nsec3-parameters/dnssec-nsec3-parameters.xhtml */
 static char *nsec3_digest_name(int digest)
 {
@@ -80,15 +80,15 @@ static char *nsec3_digest_name(int digest)
     default: return NULL;
     }
 }
- 
+
 /* Find pointer to correct hash function in nettle library */
 static const struct nettle_hash *hash_find(char *name)
 {
   int i;
-  
+
   if (!name)
     return NULL;
-  
+
   for (i = 0; nettle_hashes[i]; i++)
     {
       if (strcmp(nettle_hashes[i]->name, name) == 0)
@@ -117,7 +117,7 @@ static int hash_init(const struct nettle_hash *hash, void **ctxp, unsigned char
       ctx = new;
       ctx_sz = hash->context_size;
     }
-  
+
   if (digest_sz < hash->digest_size)
     {
       if (!(new = whine_malloc(hash->digest_size)))
@@ -135,46 +135,46 @@ static int hash_init(const struct nettle_hash *hash, void **ctxp, unsigned char
 
   return 1;
 }
-  
+
 static int dnsmasq_rsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len,
 			      unsigned char *digest, size_t digest_len, int algo)
 {
   unsigned char *p;
   size_t exp_len;
-  
+
   static struct rsa_public_key *key = NULL;
   static mpz_t sig_mpz;
 
   (void)digest_len;
-  
+
   if (key == NULL)
     {
       if (!(key = whine_malloc(sizeof(struct rsa_public_key))))
 	return 0;
-      
+
       nettle_rsa_public_key_init(key);
       mpz_init(sig_mpz);
     }
-  
+
   if ((key_len < 3) || !(p = blockdata_retrieve(key_data, key_len, NULL)))
     return 0;
-  
+
   key_len--;
   if ((exp_len = *p++) == 0)
     {
       GETSHORT(exp_len, p);
       key_len -= 2;
     }
-  
+
   if (exp_len >= key_len)
     return 0;
-  
+
   key->size =  key_len - exp_len;
   mpz_import(key->e, exp_len, 1, 1, 0, 0, p);
   mpz_import(key->n, key->size, 1, 1, 0, 0, p + exp_len);
 
   mpz_import(sig_mpz, sig_len, 1, 1, 0, 0, sig);
-  
+
   switch (algo)
     {
     case 1:
@@ -188,52 +188,52 @@ static int dnsmasq_rsa_verify(struct blockdata *key_data, unsigned int key_len,
     }
 
   return 0;
-}  
+}
 
 static int dnsmasq_dsa_verify(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len,
 			      unsigned char *digest, size_t digest_len, int algo)
 {
   unsigned char *p;
   unsigned int t;
-  
+
   static struct dsa_public_key *key = NULL;
   static struct dsa_signature *sig_struct;
-  
+
   (void)digest_len;
 
   if (key == NULL)
     {
-      if (!(sig_struct = whine_malloc(sizeof(struct dsa_signature))) || 
-	  !(key = whine_malloc(sizeof(struct dsa_public_key)))) 
+      if (!(sig_struct = whine_malloc(sizeof(struct dsa_signature))) ||
+	  !(key = whine_malloc(sizeof(struct dsa_public_key))))
 	return 0;
-      
+
       nettle_dsa_public_key_init(key);
       nettle_dsa_signature_init(sig_struct);
     }
-  
+
   if ((sig_len < 41) || !(p = blockdata_retrieve(key_data, key_len, NULL)))
     return 0;
-  
+
   t = *p++;
-  
+
   if (key_len < (213 + (t * 24)))
     return 0;
-  
+
   mpz_import(key->q, 20, 1, 1, 0, 0, p); p += 20;
   mpz_import(key->p, 64 + (t*8), 1, 1, 0, 0, p); p += 64 + (t*8);
   mpz_import(key->g, 64 + (t*8), 1, 1, 0, 0, p); p += 64 + (t*8);
   mpz_import(key->y, 64 + (t*8), 1, 1, 0, 0, p); p += 64 + (t*8);
-  
+
   mpz_import(sig_struct->r, 20, 1, 1, 0, 0, sig+1);
   mpz_import(sig_struct->s, 20, 1, 1, 0, 0, sig+21);
-  
+
   (void)algo;
-  
+
   return nettle_dsa_sha1_verify_digest(key, digest, sig_struct);
-} 
- 
+}
+
 #ifndef NO_NETTLE_ECC
-static int dnsmasq_ecdsa_verify(struct blockdata *key_data, unsigned int key_len, 
+static int dnsmasq_ecdsa_verify(struct blockdata *key_data, unsigned int key_len,
 				unsigned char *sig, size_t sig_len,
 				unsigned char *digest, size_t digest_len, int algo)
 {
@@ -244,17 +244,17 @@ static int dnsmasq_ecdsa_verify(struct blockdata *key_data, unsigned int key_len
   static struct ecc_point *key_256 = NULL, *key_384 = NULL;
   static mpz_t x, y;
   static struct dsa_signature *sig_struct;
-  
+
   if (!sig_struct)
     {
       if (!(sig_struct = whine_malloc(sizeof(struct dsa_signature))))
 	return 0;
-      
+
       nettle_dsa_signature_init(sig_struct);
       mpz_init(x);
       mpz_init(y);
     }
-  
+
   switch (algo)
     {
     case 13:
@@ -262,71 +262,71 @@ static int dnsmasq_ecdsa_verify(struct blockdata *key_data, unsigned int key_len
 	{
 	  if (!(key_256 = whine_malloc(sizeof(struct ecc_point))))
 	    return 0;
-	  
+
 	  nettle_ecc_point_init(key_256, &nettle_secp_256r1);
 	}
-      
+
       key = key_256;
       t = 32;
       break;
-      
+
     case 14:
       if (!key_384)
 	{
 	  if (!(key_384 = whine_malloc(sizeof(struct ecc_point))))
 	    return 0;
-	  
+
 	  nettle_ecc_point_init(key_384, &nettle_secp_384r1);
 	}
-      
+
       key = key_384;
       t = 48;
       break;
-        
+
     default:
       return 0;
     }
-  
+
   if (sig_len != 2*t || key_len != 2*t ||
       !(p = blockdata_retrieve(key_data, key_len, NULL)))
     return 0;
-  
+
   mpz_import(x, t , 1, 1, 0, 0, p);
   mpz_import(y, t , 1, 1, 0, 0, p + t);
 
   if (!ecc_point_set(key, x, y))
     return 0;
-  
+
   mpz_import(sig_struct->r, t, 1, 1, 0, 0, sig);
   mpz_import(sig_struct->s, t, 1, 1, 0, 0, sig + t);
-  
+
   return nettle_ecdsa_verify(key, digest_len, digest, sig_struct);
-} 
-#endif 
+}
+#endif
 
 static int (*verify_func(int algo))(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len,
 				    unsigned char *digest, size_t digest_len, int algo)
 {
-    
+
   /* Enure at runtime that we have support for this digest */
   if (!hash_find(algo_digest_name(algo)))
     return NULL;
-  
+
   /* This switch defines which sig algorithms we support, can't introspect Nettle for that. */
   switch (algo)
     {
     case 1: case 5: case 7: case 8: case 10:
       return dnsmasq_rsa_verify;
-      
-    case 3: case 6: 
+
+    case 3: case 6:
       return dnsmasq_dsa_verify;
- 
-#ifndef NO_NETTLE_ECC   
+
+#ifndef NO_NETTLE_ECC
     case 13: case 14:
       return dnsmasq_ecdsa_verify;
 #endif
     }
-  
+
   return NULL;
 }
 
@@ -336,9 +336,9 @@ static int verify(struct blockdata *key_data, unsigned int key_len, unsigned cha
 
   int (*func)(struct blockdata *key_data, unsigned int key_len, unsigned char *sig, size_t sig_len,
 	      unsigned char *digest, size_t digest_len, int algo);
-  
+
   func = verify_func(algo);
-  
+
   if (!func)
     return 0;
 
@@ -351,14 +351,14 @@ static int verify(struct blockdata *key_data, unsigned int key_len, unsigned cha
    then calling to_wire() removes compression and maps case,
    thus generating names in canonical form.
    Calling to_wire followed by from_wire is almost an identity,
-   except that the UC remains mapped to LC. 
+   except that the UC remains mapped to LC.
 
    Note that both /000 and '.' are allowed within labels. These get
    represented in presentation format using NAME_ESCAPE as an escape
    character. In theory, if all the characters in a name were /000 or
-   '.' or NAME_ESCAPE then all would have to be escaped, so the 
-   presentation format would be twice as long as the spec (1024). 
-   The buffers are all declared as 2049 (allowing for the trailing zero) 
+   '.' or NAME_ESCAPE then all would have to be escaped, so the
+   presentation format would be twice as long as the spec (1024).
+   The buffers are all declared as 2049 (allowing for the trailing zero)
    for this reason.
 */
 static int to_wire(char *name)
@@ -378,17 +378,17 @@ static int to_wire(char *name)
 	    (*p)--;
 	  }
       term = *p;
-      
+
       if ((len = p - l) != 0)
 	memmove(l+1, l, len);
       *l = len;
-      
+
       p++;
-      
+
       if (term == 0)
 	*p = 0;
     }
-  
+
   return l + 1 - (unsigned char *)name;
 }
 
@@ -397,9 +397,9 @@ static void from_wire(char *name)
 {
   unsigned char *l, *p, *last;
   int len;
-  
+
   for (last = (unsigned char *)name; *last != 0; last += *last+1);
-  
+
   for (l = (unsigned char *)name; *l != 0; l += len+1)
     {
       len = *l;
@@ -409,10 +409,10 @@ static void from_wire(char *name)
 	  {
 	    memmove(p+1, p, 1 + last - p);
 	    len++;
-	    *p++ = NAME_ESCAPE; 
+	    *p++ = NAME_ESCAPE;
 	    (*p)++;
 	  }
-	
+
       l[len] = '.';
     }
 
@@ -462,12 +462,12 @@ static time_t timestamp_time;
 int setup_timestamp(void)
 {
   struct stat statbuf;
-  
+
   daemon->back_to_the_future = 0;
-  
+
   if (!daemon->timestamp_file)
     return 0;
-  
+
   if (stat(daemon->timestamp_file, &statbuf) != -1)
     {
       timestamp_time = statbuf.st_mtime;
@@ -482,17 +482,17 @@ int setup_timestamp(void)
 	}
       return 1;
     }
-  
+
   if (errno == ENOENT)
     {
-      /* NB. for explanation of O_EXCL flag, see comment on pidfile in dnsmasq.c */ 
+      /* NB. for explanation of O_EXCL flag, see comment on pidfile in dnsmasq.c */
       int fd = open(daemon->timestamp_file, O_WRONLY | O_CREAT | O_NONBLOCK | O_EXCL, 0666);
       if (fd != -1)
 	{
 	  struct timeval tv[2];
 
 	  close(fd);
-	  
+
 	  timestamp_time = 1420070400; /* 1-1-2015 */
 	  tv[0].tv_sec = tv[1].tv_sec = timestamp_time;
 	  tv[0].tv_usec = tv[1].tv_usec = 0;
@@ -508,9 +508,9 @@ int setup_timestamp(void)
 static int check_date_range(u32 date_start, u32 date_end)
 {
   unsigned long curtime = time(0);
- 
+
   /* Checking timestamps may be temporarily disabled */
-    
+
   /* If the current time if _before_ the timestamp
      on our persistent timestamp file, then assume the
      time if not yet correct, and don't check the
@@ -523,31 +523,31 @@ static int check_date_range(u32 date_start, u32 date_end)
 	{
 	  if (utimes(daemon->timestamp_file, NULL) != 0)
 	    my_syslog(LOG_ERR, _("failed to update mtime on %s: %s"), daemon->timestamp_file, strerror(errno));
-	  
+
 	  my_syslog(LOG_INFO, _("system time considered valid, now checking DNSSEC signature timestamps."));
 	  daemon->back_to_the_future = 1;
 	  daemon->dnssec_no_time_check = 0;
 	  queue_event(EVENT_RELOAD); /* purge cache */
-	} 
+	}
 
       if (daemon->back_to_the_future == 0)
 	return 1;
     }
   else if (daemon->dnssec_no_time_check)
     return 1;
-  
+
   /* We must explicitly check against wanted values, because of SERIAL_UNDEF */
   return serial_compare_32(curtime, date_start) == SERIAL_GT
     && serial_compare_32(curtime, date_end) == SERIAL_LT;
 }
 
-/* Return bytes of canonicalised rdata, when the return value is zero, the remaining 
+/* Return bytes of canonicalised rdata, when the return value is zero, the remaining
    data, pointed to by *p, should be used raw. */
 static int get_rdata(struct dns_header *header, size_t plen, unsigned char *end, char *buff, int bufflen,
 		     unsigned char **p, u16 **desc)
 {
   int d = **desc;
-  
+
   /* No more data needs mangling */
   if (d == (u16)-1)
     {
@@ -559,33 +559,33 @@ static int get_rdata(struct dns_header *header, size_t plen, unsigned char *end,
 	  *p += bufflen;
 	  return bufflen;
 	}
-      
+
       return 0;
     }
- 
+
   (*desc)++;
-  
+
   if (d == 0 && extract_name(header, plen, p, buff, 1, 0))
     /* domain-name, canonicalise */
     return to_wire(buff);
   else
-    { 
+    {
       /* plain data preceding a domain-name, don't run off the end of the data */
       if ((end - *p) < d)
 	d = end - *p;
-      
+
       if (d != 0)
 	{
 	  memcpy(buff, *p, d);
 	  *p += d;
 	}
-      
+
       return d;
     }
 }
 
-/* Bubble sort the RRset into the canonical order. 
-   Note that the byte-streams from two RRs may get unsynced: consider 
+/* Bubble sort the RRset into the canonical order.
+   Note that the byte-streams from two RRs may get unsynced: consider
    RRs which have two domain-names at the start and then other data.
    The domain-names may have different lengths in each RR, but sort equal
 
@@ -598,11 +598,11 @@ static int get_rdata(struct dns_header *header, size_t plen, unsigned char *end,
    leaving the following bytes as deciding the order. Hence the nasty left1 and left2 variables.
 */
 
-static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int rrsetidx, 
+static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int rrsetidx,
 		       unsigned char **rrset, char *buff1, char *buff2)
 {
   int swap, quit, i;
-  
+
   do
     {
       for (swap = 0, i = 0; i < rrsetidx-1; i++)
@@ -614,22 +614,22 @@ static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int
 	     so we don't need to check for NULL return here. */
 	  unsigned char *p1 = skip_name(rrset[i], header, plen, 10);
 	  unsigned char *p2 = skip_name(rrset[i+1], header, plen, 10);
-	  
+
 	  p1 += 8; /* skip class, type, ttl */
 	  GETSHORT(rdlen1, p1);
 	  end1 = p1 + rdlen1;
-	  
+
 	  p2 += 8; /* skip class, type, ttl */
 	  GETSHORT(rdlen2, p2);
-	  end2 = p2 + rdlen2; 
-	  
+	  end2 = p2 + rdlen2;
+
 	  dp1 = dp2 = rr_desc;
-	  
+
 	  for (quit = 0, left1 = 0, left2 = 0, len1 = 0, len2 = 0; !quit;)
 	    {
 	      if (left1 != 0)
 		memmove(buff1, buff1 + len1 - left1, left1);
-	      
+
 	      if ((len1 = get_rdata(header, plen, end1, buff1 + left1, (MAXDNAME * 2) - left1, &p1, &dp1)) == 0)
 		{
 		  quit = 1;
@@ -637,10 +637,10 @@ static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int
 		  memcpy(buff1 + left1, p1, len1);
 		}
 	      len1 += left1;
-	      
+
 	      if (left2 != 0)
 		memmove(buff2, buff2 + len2 - left2, left2);
-	      
+
 	      if ((len2 = get_rdata(header, plen, end2, buff2 + left2, (MAXDNAME *2) - left2, &p2, &dp2)) == 0)
 		{
 		  quit = 1;
@@ -648,14 +648,14 @@ static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int
 		  memcpy(buff2 + left2, p2, len2);
 		}
 	      len2 += left2;
-	       
+
 	      if (len1 > len2)
 		left1 = len1 - len2, left2 = 0, len = len2;
 	      else
 		left2 = len2 - len1, left1 = 0, len = len1;
-	      
+
 	      rc = (len == 0) ? 0 : memcmp(buff1, buff2, len);
-	      
+
 	      if (rc > 0 || (rc == 0 && quit && len1 > len2))
 		{
 		  unsigned char *tmp = rrset[i+1];
@@ -674,10 +674,10 @@ static unsigned char **rrset = NULL, **sigs = NULL;
 
 /* Get pointers to RRset members and signature(s) for same.
    Check signatures, and return keyname associated in keyname. */
-static int explore_rrset(struct dns_header *header, size_t plen, int class, int type, 
+static int explore_rrset(struct dns_header *header, size_t plen, int class, int type,
 			 char *name, char *keyname, int *sigcnt, int *rrcnt)
 {
-  static int rrset_sz = 0, sig_sz = 0; 
+  static int rrset_sz = 0, sig_sz = 0;
   unsigned char *p;
   int rrsetidx, sigidx, j, rdlen, res;
   int gotkey = 0;
@@ -686,46 +686,46 @@ static int explore_rrset(struct dns_header *header, size_t plen, int class, int
     return STAT_BOGUS;
 
    /* look for RRSIGs for this RRset and get pointers to each RR in the set. */
-  for (rrsetidx = 0, sigidx = 0, j = ntohs(header->ancount) + ntohs(header->nscount); 
-       j != 0; j--) 
+  for (rrsetidx = 0, sigidx = 0, j = ntohs(header->ancount) + ntohs(header->nscount);
+       j != 0; j--)
     {
       unsigned char *pstart, *pdata;
       int stype, sclass, type_covered;
 
       pstart = p;
-      
+
       if (!(res = extract_name(header, plen, &p, name, 0, 10)))
 	return STAT_BOGUS; /* bad packet */
-      
+
       GETSHORT(stype, p);
       GETSHORT(sclass, p);
       p += 4; /* TTL */
-      
+
       pdata = p;
 
       GETSHORT(rdlen, p);
-      
+
       if (!CHECK_LEN(header, p, plen, rdlen))
-	return 0; 
-      
+	return 0;
+
       if (res == 1 && sclass == class)
 	{
 	  if (stype == type)
 	    {
 	      if (!expand_workspace(&rrset, &rrset_sz, rrsetidx))
-		return 0; 
-	      
+		return 0;
+
 	      rrset[rrsetidx++] = pstart;
 	    }
-	  
+
 	  if (stype == T_RRSIG)
 	    {
 	      if (rdlen < 18)
-		return 0; /* bad packet */ 
-	      
+		return 0; /* bad packet */
+
 	      GETSHORT(type_covered, p);
 	      p += 16; /* algo, labels, orig_ttl, sig_expiration, sig_inception, key_tag */
-	      
+
 	      if (gotkey)
 		{
 		  /* If there's more than one SIG, ensure they all have same keyname */
@@ -735,15 +735,15 @@ static int explore_rrset(struct dns_header *header, size_t plen, int class, int
 	      else
 		{
 		  gotkey = 1;
-		  
+
 		  if (!extract_name(header, plen, &p, keyname, 1, 0))
 		    return 0;
-		  
+
 		  /* RFC 4035 5.3.1 says that the Signer's Name field MUST equal
 		     the name of the zone containing the RRset. We can't tell that
 		     for certain, but we can check that  the RRset name is equal to
-		     or encloses the signers name, which should be enough to stop 
-		     an attacker using signatures made with the key of an unrelated 
+		     or encloses the signers name, which should be enough to stop
+		     an attacker using signatures made with the key of an unrelated
 		     zone he controls. Note that the root key is always allowed. */
 		  if (*keyname != 0)
 		    {
@@ -755,35 +755,35 @@ static int explore_rrset(struct dns_header *header, size_t plen, int class, int
 			  return 0;
 		    }
 		}
-		  
-	      
+
+
 	      if (type_covered == type)
 		{
 		  if (!expand_workspace(&sigs, &sig_sz, sigidx))
-		    return 0; 
-		  
+		    return 0;
+
 		  sigs[sigidx++] = pdata;
-		} 
-	      
+		}
+
 	      p = pdata + 2; /* restore for ADD_RDLEN */
 	    }
 	}
-      
+
       if (!ADD_RDLEN(header, p, plen, rdlen))
 	return 0;
     }
-  
+
   *sigcnt = sigidx;
   *rrcnt = rrsetidx;
 
   return 1;
 }
 
-/* Validate a single RRset (class, type, name) in the supplied DNS reply 
+/* Validate a single RRset (class, type, name) in the supplied DNS reply
    Return code:
    STAT_SECURE   if it validates.
    STAT_SECURE_WILDCARD if it validates and is the result of wildcard expansion.
-   (In this case *wildcard_out points to the "body" of the wildcard within name.) 
+   (In this case *wildcard_out points to the "body" of the wildcard within name.)
    STAT_BOGUS    signature is wrong, bad packet.
    STAT_NEED_KEY need DNSKEY to complete validation (name is returned in keyname)
    STAT_NEED_DS  need DS to complete validation (name is returned in keyname)
@@ -795,7 +795,7 @@ static int explore_rrset(struct dns_header *header, size_t plen, int class, int
 
    Call explore_rrset first to find and count RRs and sigs.
 */
-static int validate_rrset(time_t now, struct dns_header *header, size_t plen, int class, int type, int sigidx, int rrsetidx, 
+static int validate_rrset(time_t now, struct dns_header *header, size_t plen, int class, int type, int sigidx, int rrsetidx,
 			  char *name, char *keyname, char **wildcard_out, struct blockdata *key, int keylen, int algo_in, int keytag_in)
 {
   unsigned char *p;
@@ -806,14 +806,14 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
 ;
   if (wildcard_out)
     *wildcard_out = NULL;
-  
+
   name_labels = count_labels(name); /* For 4035 5.3.2 check */
 
-  /* Sort RRset records into canonical order. 
+  /* Sort RRset records into canonical order.
      Note that at this point keyname and daemon->workspacename buffs are
      unused, and used as workspace by the sort. */
   sort_rrset(header, plen, rr_desc, rrsetidx, rrset, daemon->workspacename, keyname);
-         
+
   /* Now try all the sigs to try and find one which validates */
   for (j = 0; j <sigidx; j++)
     {
@@ -823,11 +823,11 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
       void *ctx;
       char *name_start;
       u32 nsigttl;
-      
+
       p = sigs[j];
       GETSHORT(rdlen, p); /* rdlen >= 18 checked previously */
       psav = p;
-      
+
       p += 2; /* type_covered - already checked */
       algo = *p++;
       labels = *p++;
@@ -835,7 +835,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
       GETLONG(sig_expiration, p);
       GETLONG(sig_inception, p);
       GETSHORT(key_tag, p);
-      
+
       if (!extract_name(header, plen, &p, keyname, 1, 0))
 	return STAT_BOGUS;
 
@@ -844,33 +844,33 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
 	  !(hash = hash_find(algo_digest_name(algo))) ||
 	  !hash_init(hash, &ctx, &digest))
 	continue;
-      
+
       /* OK, we have the signature record, see if the relevant DNSKEY is in the cache. */
       if (!key && !(crecp = cache_find_by_name(NULL, keyname, now, F_DNSKEY)))
 	return STAT_NEED_KEY;
-      
+
       sig = p;
       sig_len = rdlen - (p - psav);
-              
+
       nsigttl = htonl(orig_ttl);
-      
+
       hash->update(ctx, 18, psav);
       wire_len = to_wire(keyname);
       hash->update(ctx, (unsigned int)wire_len, (unsigned char*)keyname);
       from_wire(keyname);
-      
+
       for (i = 0; i < rrsetidx; ++i)
 	{
 	  int seg;
 	  unsigned char *end, *cp;
 	  u16 len, *dp;
-	  
+
 	  p = rrset[i];
-	  if (!extract_name(header, plen, &p, name, 1, 10)) 
+	  if (!extract_name(header, plen, &p, name, 1, 10))
 	    return STAT_BOGUS;
 
 	  name_start = name;
-	  
+
 	  /* if more labels than in RRsig name, hash *.<no labels in rrsig labels field>  4035 5.3.2 */
 	  if (labels < name_labels)
 	    {
@@ -882,26 +882,26 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
 		  if (k != 1 && *name_start == '.')
 		    name_start++;
 		}
-	      
+
 	      if (wildcard_out)
 		*wildcard_out = name_start+1;
 
 	      name_start--;
 	      *name_start = '*';
 	    }
-	  
+
 	  wire_len = to_wire(name_start);
 	  hash->update(ctx, (unsigned int)wire_len, (unsigned char *)name_start);
 	  hash->update(ctx, 4, p); /* class and type */
 	  hash->update(ctx, 4, (unsigned char *)&nsigttl);
-	  
+
 	  p += 8; /* skip class, type, ttl */
 	  GETSHORT(rdlen, p);
 	  if (!CHECK_LEN(header, p, plen, rdlen))
-	    return STAT_BOGUS; 
-	  
+	    return STAT_BOGUS;
+
 	  end = p + rdlen;
-	  
+
 	  /* canonicalise rdata and calculate length of same, use name buffer as workspace.
 	     Note that name buffer is twice MAXDNAME long in DNSSEC mode. */
 	  cp = p;
@@ -909,8 +909,8 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
 	  for (len = 0; (seg = get_rdata(header, plen, end, name, MAXDNAME * 2, &cp, &dp)) != 0; len += seg);
 	  len += end - cp;
 	  len = htons(len);
-	  hash->update(ctx, 2, (unsigned char *)&len); 
-	  
+	  hash->update(ctx, 2, (unsigned char *)&len);
+
 	  /* Now canonicalise again and digest. */
 	  cp = p;
 	  dp = rr_desc;
@@ -919,9 +919,9 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
 	  if (cp != end)
 	    hash->update(ctx, end - cp, cp);
 	}
-     
+
       hash->digest(ctx, hash->digest_size, digest);
-      
+
       /* namebuff used for workspace above, restore to leave unchanged on exit */
       p = (unsigned char*)(rrset[0]);
       extract_name(header, plen, &p, name, 1, 0);
@@ -936,7 +936,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
 	{
 	  /* iterate through all possible keys 4035 5.3.1 */
 	  for (; crecp; crecp = cache_find_by_name(crecp, keyname, now, F_DNSKEY))
-	    if (crecp->addr.key.algo == algo && 
+	    if (crecp->addr.key.algo == algo &&
 		crecp->addr.key.keytag == key_tag &&
 		crecp->uid == (unsigned int)class &&
 		verify(crecp->addr.key.keydata, crecp->addr.key.keylen, sig, sig_len, digest, hash->digest_size, algo))
@@ -946,7 +946,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
 
   return STAT_BOGUS;
 }
- 
+
 
 /* The DNS packet is expected to contain the answer to a DNSKEY query.
    Put all DNSKEYs in the answer which are valid into the cache.
@@ -954,8 +954,8 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
          STAT_OK        Done, key(s) in cache.
 	 STAT_BOGUS     No DNSKEYs found, which  can be validated with DS,
 	                or self-sign for DNSKEY RRset is not valid, bad packet.
-	 STAT_NEED_DS   DS records to validate a key not found, name in keyname 
-	 STAT_NEED_KEY  DNSKEY records to validate a key not found, name in keyname 
+	 STAT_NEED_DS   DS records to validate a key not found, name in keyname
+	 STAT_NEED_KEY  DNSKEY records to validate a key not found, name in keyname
 */
 int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class)
 {
@@ -971,7 +971,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
 
   GETSHORT(qtype, p);
   GETSHORT(qclass, p);
-  
+
   if (qtype != T_DNSKEY || qclass != class || ntohs(header->ancount) == 0)
     return STAT_BOGUS;
 
@@ -981,43 +981,43 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
       strcpy(keyname, name);
       return STAT_NEED_DS;
     }
-  
+
   /* NOTE, we need to find ONE DNSKEY which matches the DS */
-  for (valid = 0, j = ntohs(header->ancount); j != 0 && !valid; j--) 
+  for (valid = 0, j = ntohs(header->ancount); j != 0 && !valid; j--)
     {
       /* Ensure we have type, class  TTL and length */
       if (!(rc = extract_name(header, plen, &p, name, 0, 10)))
 	return STAT_BOGUS; /* bad packet */
-  
-      GETSHORT(qtype, p); 
+
+      GETSHORT(qtype, p);
       GETSHORT(qclass, p);
       GETLONG(ttl, p);
       GETSHORT(rdlen, p);
- 
+
       if (!CHECK_LEN(header, p, plen, rdlen) || rdlen < 4)
 	return STAT_BOGUS; /* bad packet */
-      
+
       if (qclass != class || qtype != T_DNSKEY || rc == 2)
 	{
 	  p += rdlen;
 	  continue;
 	}
-            
+
       psave = p;
-      
+
       GETSHORT(flags, p);
       if (*p++ != 3)
 	return STAT_BOGUS;
       algo = *p++;
       keytag = dnskey_keytag(algo, flags, p, rdlen - 4);
       key = NULL;
-      
+
       /* key must have zone key flag set */
       if (flags & 0x100)
 	key = blockdata_alloc((char*)p, rdlen - 4);
-      
+
       p = psave;
-      
+
       if (!ADD_RDLEN(header, p, plen, rdlen))
 	{
 	  if (key)
@@ -1028,7 +1028,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
       /* No zone key flag or malloc failure */
       if (!key)
 	continue;
-      
+
       for (recp1 = crecp; recp1; recp1 = cache_find_by_name(recp1, name, now, F_DS))
 	{
 	  void *ctx;
@@ -1036,30 +1036,30 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
 	  const struct nettle_hash *hash;
 	  int sigcnt, rrcnt;
 
-	  if (recp1->addr.ds.algo == algo && 
+	  if (recp1->addr.ds.algo == algo &&
 	      recp1->addr.ds.keytag == keytag &&
 	      recp1->uid == (unsigned int)class &&
 	      (hash = hash_find(ds_digest_name(recp1->addr.ds.digest))) &&
 	      hash_init(hash, &ctx, &digest))
-	    
+
 	    {
 	      int wire_len = to_wire(name);
-	      
-	      /* Note that digest may be different between DSs, so 
+
+	      /* Note that digest may be different between DSs, so
 		 we can't move this outside the loop. */
 	      hash->update(ctx, (unsigned int)wire_len, (unsigned char *)name);
 	      hash->update(ctx, (unsigned int)rdlen, psave);
 	      hash->digest(ctx, hash->digest_size, digest);
-	      
+
 	      from_wire(name);
-	      
+
 	      if (!(recp1->flags & F_NEG) &&
 		  recp1->addr.ds.keylen == (int)hash->digest_size &&
 		  (ds_digest = blockdata_retrieve(recp1->addr.key.keydata, recp1->addr.ds.keylen, NULL)) &&
 		  memcmp(ds_digest, digest, recp1->addr.ds.keylen) == 0 &&
 		  explore_rrset(header, plen, class, T_DNSKEY, name, keyname, &sigcnt, &rrcnt) &&
 		  sigcnt != 0 && rrcnt != 0 &&
-		  validate_rrset(now, header, plen, class, T_DNSKEY, sigcnt, rrcnt, name, keyname, 
+		  validate_rrset(now, header, plen, class, T_DNSKEY, sigcnt, rrcnt, name, keyname,
 				 NULL, key, rdlen - 4, algo, keytag) == STAT_SECURE)
 		{
 		  valid = 1;
@@ -1074,41 +1074,41 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
     {
       /* DNSKEY RRset determined to be OK, now cache it. */
       cache_start_insert();
-      
+
       p = skip_questions(header, plen);
 
-      for (j = ntohs(header->ancount); j != 0; j--) 
+      for (j = ntohs(header->ancount); j != 0; j--)
 	{
 	  /* Ensure we have type, class  TTL and length */
 	  if (!(rc = extract_name(header, plen, &p, name, 0, 10)))
 	    return STAT_BOGUS; /* bad packet */
-	  
-	  GETSHORT(qtype, p); 
+
+	  GETSHORT(qtype, p);
 	  GETSHORT(qclass, p);
 	  GETLONG(ttl, p);
 	  GETSHORT(rdlen, p);
-	    
+
 	  if (!CHECK_LEN(header, p, plen, rdlen))
 	    return STAT_BOGUS; /* bad packet */
-	  
+
 	  if (qclass == class && rc == 1)
 	    {
 	      psave = p;
-	      
+
 	      if (qtype == T_DNSKEY)
 		{
 		  if (rdlen < 4)
 		    return STAT_BOGUS; /* bad packet */
-		  
+
 		  GETSHORT(flags, p);
 		  if (*p++ != 3)
 		    return STAT_BOGUS;
 		  algo = *p++;
 		  keytag = dnskey_keytag(algo, flags, p, rdlen - 4);
-		  
+
 		  /* Cache needs to known class for DNSSEC stuff */
 		  a.addr.dnssec.class = class;
-		  
+
 		  if ((key = blockdata_alloc((char*)p, rdlen - 4)))
 		    {
 		      if (!(recp1 = cache_insert(name, &a, now, ttl, F_FORWARD | F_DNSKEY | F_DNSSECOK)))
@@ -1124,7 +1124,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
 			    log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %hu, algo %hu");
 			  else
 			    log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %hu, algo %hu (not supported)");
-			  
+
 			  recp1->addr.key.keylen = rdlen - 4;
 			  recp1->addr.key.keydata = key;
 			  recp1->addr.key.algo = algo;
@@ -1133,14 +1133,14 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
 			}
 		    }
 		}
-	      	      
+
 	      p = psave;
 	    }
 
 	  if (!ADD_RDLEN(header, p, plen, rdlen))
 	    return STAT_BOGUS; /* bad packet */
 	}
-      
+
       /* commit cache insert. */
       cache_end_insert();
       return STAT_OK;
@@ -1152,7 +1152,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
 
 /* The DNS packet is expected to contain the answer to a DS query
    Put all DSs in the answer which are valid into the cache.
-   Also handles replies which prove that there's no DS at this location, 
+   Also handles replies which prove that there's no DS at this location,
    either because the zone is unsigned or this isn't a zone cut. These are
    cached too.
    return codes:
@@ -1173,7 +1173,7 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
   if (ntohs(header->qdcount) != 1 ||
       !(p = skip_name(p, header, plen, 4)))
     return STAT_BOGUS;
-  
+
   GETSHORT(qtype, p);
   GETSHORT(qclass, p);
 
@@ -1182,14 +1182,14 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
   else
     rc = dnssec_validate_reply(now, header, plen, name, keyname, NULL, 0, &neganswer, &nons);
   /* Note dnssec_validate_reply() will have cached positive answers */
-  
+
   if (rc == STAT_INSECURE)
     rc = STAT_BOGUS;
- 
+
   p = (unsigned char *)(header+1);
   extract_name(header, plen, &p, name, 1, 4);
   p += 4; /* qtype, qclass */
-  
+
   /* If the key needed to validate the DS is on the same domain as the DS, we'll
      loop getting nowhere. Stop that now. This can happen of the DS answer comes
      from the DS's zone, and not the parent zone. */
@@ -1198,29 +1198,29 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
       log_query(F_NOEXTRA | F_UPSTREAM, name, NULL, "BOGUS DS");
       return STAT_BOGUS;
     }
-  
+
   if (rc != STAT_SECURE)
     return rc;
-   
+
   if (!neganswer)
     {
       cache_start_insert();
-      
+
       for (i = 0; i < ntohs(header->ancount); i++)
 	{
 	  if (!(rc = extract_name(header, plen, &p, name, 0, 10)))
 	    return STAT_BOGUS; /* bad packet */
-	  
+
 	  GETSHORT(atype, p);
 	  GETSHORT(aclass, p);
 	  GETLONG(ttl, p);
 	  GETSHORT(rdlen, p);
-	  
+
 	  if (!CHECK_LEN(header, p, plen, rdlen))
 	    return STAT_BOGUS; /* bad packet */
-	  
+
 	  if (aclass == class && atype == T_DS && rc == 1)
-	    { 
+	    {
 	      int algo, digest, keytag;
 	      unsigned char *psave = p;
 	      struct blockdata *key;
@@ -1228,14 +1228,14 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
 
 	      if (rdlen < 4)
 		return STAT_BOGUS; /* bad packet */
-	      
+
 	      GETSHORT(keytag, p);
 	      algo = *p++;
 	      digest = *p++;
-	      
+
 	      /* Cache needs to known class for DNSSEC stuff */
 	      a.addr.dnssec.class = class;
-	      
+
 	      if ((key = blockdata_alloc((char*)p, rdlen - 4)))
 		{
 		  if (!(crecp = cache_insert(name, &a, now, ttl, F_FORWARD | F_DS | F_DNSSECOK)))
@@ -1252,15 +1252,15 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
 			log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DS keytag %hu, algo %hu, digest %hu");
 		      else
 			log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DS keytag %hu, algo %hu, digest %hu (not supported)");
-		      
+
 		      crecp->addr.ds.digest = digest;
 		      crecp->addr.ds.keydata = key;
 		      crecp->addr.ds.algo = algo;
 		      crecp->addr.ds.keytag = keytag;
-		      crecp->addr.ds.keylen = rdlen - 4; 
-		    } 
+		      crecp->addr.ds.keylen = rdlen - 4;
+		    }
 		}
-	      
+
 	      p = psave;
 	    }
 	  if (!ADD_RDLEN(header, p, plen, rdlen))
@@ -1274,40 +1274,40 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
     {
       int flags = F_FORWARD | F_DS | F_NEG | F_DNSSECOK;
       unsigned long minttl = ULONG_MAX;
-      
+
       if (!(p = skip_section(p, ntohs(header->ancount), header, plen)))
 	return STAT_BOGUS;
-      
+
       if (RCODE(header) == NXDOMAIN)
 	flags |= F_NXDOMAIN;
-      
-      /* We only cache validated DS records, DNSSECOK flag hijacked 
+
+      /* We only cache validated DS records, DNSSECOK flag hijacked
 	 to store presence/absence of NS. */
       if (nons)
 	flags &= ~F_DNSSECOK;
-      
+
       for (i = ntohs(header->nscount); i != 0; i--)
 	{
 	  if (!(p = skip_name(p, header, plen, 0)))
 	    return STAT_BOGUS;
-	  
-	  GETSHORT(atype, p); 
+
+	  GETSHORT(atype, p);
 	  GETSHORT(aclass, p);
 	  GETLONG(ttl, p);
 	  GETSHORT(rdlen, p);
-	  
+
 	  if (!CHECK_LEN(header, p, plen, rdlen))
 	    return STAT_BOGUS; /* bad packet */
-	  
+
 	  if (aclass != class || atype != T_SOA)
 	    {
 	      p += rdlen;
 	      continue;
 	    }
-	  
+
 	  if (ttl < minttl)
 	    minttl = ttl;
-	  
+
 	  /* MNAME */
 	  if (!(p = skip_name(p, header, plen, 0)))
 	    return STAT_BOGUS;
@@ -1315,28 +1315,28 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
 	  if (!(p = skip_name(p, header, plen, 20)))
 	    return STAT_BOGUS;
 	  p += 16; /* SERIAL REFRESH RETRY EXPIRE */
-	  
+
 	  GETLONG(ttl, p); /* minTTL */
 	  if (ttl < minttl)
 	    minttl = ttl;
-	  
+
 	  break;
 	}
-      
+
       if (i != 0)
 	{
 	  cache_start_insert();
-	  
+
 	  a.addr.dnssec.class = class;
 	  if (!cache_insert(name, &a, now, ttl, flags))
 	    return STAT_BOGUS;
-	  
-	  cache_end_insert();  
-	  
+
+	  cache_end_insert();
+
 	  log_query(F_NOEXTRA | F_UPSTREAM, name, NULL, "no DS");
 	}
     }
-      
+
   return STAT_OK;
 }
 
@@ -1346,60 +1346,60 @@ static int hostname_cmp(const char *a, const char *b)
 {
   char *sa, *ea, *ca, *sb, *eb, *cb;
   unsigned char ac, bc;
-  
+
   sa = ea = (char *)a + strlen(a);
   sb = eb = (char *)b + strlen(b);
- 
+
   while (1)
     {
       while (sa != a && *(sa-1) != '.')
 	sa--;
-      
+
       while (sb != b && *(sb-1) != '.')
 	sb--;
 
       ca = sa;
       cb = sb;
 
-      while (1) 
+      while (1)
 	{
 	  if (ca == ea)
 	    {
 	      if (cb == eb)
 		break;
-	      
+
 	      return -1;
 	    }
-	  
+
 	  if (cb == eb)
 	    return 1;
-	  
+
 	  ac = (unsigned char) *ca++;
 	  bc = (unsigned char) *cb++;
-	  
+
 	  if (ac >= 'A' && ac <= 'Z')
 	    ac += 'a' - 'A';
 	  if (bc >= 'A' && bc <= 'Z')
 	    bc += 'a' - 'A';
-	  
+
 	  if (ac < bc)
 	    return -1;
 	  else if (ac != bc)
 	    return 1;
 	}
 
-     
+
       if (sa == a)
 	{
 	  if (sb == b)
 	    return 0;
-	  
+
 	  return -1;
 	}
-      
+
       if (sb == b)
 	return 1;
-      
+
       ea = --sa;
       eb = --sb;
     }
@@ -1415,7 +1415,7 @@ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsi
 
   if (nons)
     *nons = 1;
-  
+
   /* Find NSEC record that proves name doesn't exist */
   for (i = 0; i < nsec_count; i++)
     {
@@ -1427,9 +1427,9 @@ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsi
       psave = p;
       if (!extract_name(header, plen, &p, workspace2, 1, 10))
 	return 0;
-      
+
       rc = hostname_cmp(workspace1, name);
-      
+
       if (rc == 0)
 	{
 	  /* 4035 para 5.4. Last sentence */
@@ -1440,18 +1440,18 @@ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsi
 	     that the type in question doesn't appear in the type map */
 	  rdlen -= p - psave;
 	  /* rdlen is now length of type map, and p points to it */
-	  
+
 	  /* If we can prove that there's no NS record, return that information. */
 	  if (nons && rdlen >= 2 && p[0] == 0 && (p[2] & (0x80 >> T_NS)) != 0)
 	    *nons = 0;
-	  
+
 	  if (rdlen >= 2 && p[0] == 0)
 	    {
-	      /* A CNAME answer would also be valid, so if there's a CNAME is should 
+	      /* A CNAME answer would also be valid, so if there's a CNAME is should
 		 have been returned. */
 	      if ((p[2] & (0x80 >> T_CNAME)) != 0)
 		return 0;
-	      
+
 	      /* If the SOA bit is set for a DS record, then we have the
 		 DS from the wrong side of the delegation. */
 	      if (type == T_DS && (p[2] & (0x80 >> T_SOA)) != 0)
@@ -1462,20 +1462,20 @@ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsi
 	    {
 	      if (!CHECK_LEN(header, p, plen, rdlen))
 		return 0;
-	      
+
 	      if (p[0] == type >> 8)
 		{
 		  /* Does the NSEC say our type exists? */
 		  if (offset < p[1] && (p[offset+2] & mask) != 0)
 		    return 0;
-		  
+
 		  break; /* finished checking */
 		}
-	      
+
 	      rdlen -= p[1];
 	      p +=  p[1];
 	    }
-	  
+
 	  return 1;
 	}
       else if (rc == -1)
@@ -1485,19 +1485,19 @@ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsi
 	  if (hostname_cmp(workspace2, name) >= 0 || hostname_cmp(workspace1, workspace2) >= 0)
 	    return 1;
 	}
-      else 
+      else
 	{
 	  /* wrap around case, name falls between start and next domain name */
 	  if (hostname_cmp(workspace1, workspace2) >= 0 && hostname_cmp(workspace2, name) >=0 )
 	    return 1;
 	}
     }
-  
+
   return 0;
 }
 
 /* return digest length, or zero on error */
-static int hash_name(char *in, unsigned char **out, struct nettle_hash const *hash, 
+static int hash_name(char *in, unsigned char **out, struct nettle_hash const *hash,
 		     unsigned char *salt, int salt_len, int iterations)
 {
   void *ctx;
@@ -1506,7 +1506,7 @@ static int hash_name(char *in, unsigned char **out, struct nettle_hash const *ha
 
   if (!hash_init(hash, &ctx, &digest))
     return 0;
- 
+
   hash->update(ctx, to_wire(in), (unsigned char *)in);
   hash->update(ctx, salt_len, salt);
   hash->digest(ctx, hash->digest_size, digest);
@@ -1517,7 +1517,7 @@ static int hash_name(char *in, unsigned char **out, struct nettle_hash const *ha
       hash->update(ctx, salt_len, salt);
       hash->digest(ctx, hash->digest_size, digest);
     }
-   
+
   from_wire(in);
 
   *out = digest;
@@ -1529,8 +1529,8 @@ static int base32_decode(char *in, unsigned char *out)
 {
   int oc, on, c, mask, i;
   unsigned char *p = out;
- 
-  for (c = *in, oc = 0, on = 0; c != 0 && c != '.'; c = *++in) 
+
+  for (c = *in, oc = 0, on = 0; c != 0 && c != '.'; c = *++in)
     {
       if (c >= '0' && c <= '9')
 	c -= '0';
@@ -1540,7 +1540,7 @@ static int base32_decode(char *in, unsigned char *out)
 	c -= 'A', c += 10;
       else
 	return 0;
-      
+
       for (mask = 0x10, i = 0; i < 5; i++)
         {
 	  if (c & mask)
@@ -1551,7 +1551,7 @@ static int base32_decode(char *in, unsigned char *out)
 	  oc = oc << 1;
 	}
     }
-  
+
   if ((on & 7) != 0)
     return 0;
 
@@ -1570,7 +1570,7 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
        	if (!extract_name(header, plen, &p, workspace1, 1, 0) ||
 	    !(base32_len = base32_decode(workspace1, (unsigned char *)workspace2)))
 	  return 0;
-	
+
 	p += 8; /* class, type, TTL */
 	GETSHORT(rdlen, p);
 	psave = p;
@@ -1580,10 +1580,10 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
 	salt_len = *p++; /* salt_len */
 	p += salt_len; /* salt */
 	hash_len = *p++; /* p now points to next hashed name */
-	
+
 	if (!CHECK_LEN(header, p, plen, hash_len))
 	  return 0;
-	
+
 	if (digest_len == base32_len && hash_len == base32_len)
 	  {
 	    int rc = memcmp(workspace2, digest, digest_len);
@@ -1592,27 +1592,27 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
 	      {
 		/* We found an NSEC3 whose hashed name exactly matches the query, so
 		   we just need to check the type map. p points to the RR data for the record. */
-		
+
 		int offset = (type & 0xff) >> 3;
 		int mask = 0x80 >> (type & 0x07);
-		
+
 		p += hash_len; /* skip next-domain hash */
 		rdlen -= p - psave;
 
 		if (!CHECK_LEN(header, p, plen, rdlen))
 		  return 0;
-		
+
 		if (rdlen >= 2 && p[0] == 0)
 		  {
 		    /* If we can prove that there's no NS record, return that information. */
 		    if (nons && (p[2] & (0x80 >> T_NS)) != 0)
 		      *nons = 0;
-		
-		    /* A CNAME answer would also be valid, so if there's a CNAME is should 
+
+		    /* A CNAME answer would also be valid, so if there's a CNAME is should
 		       have been returned. */
 		    if ((p[2] & (0x80 >> T_CNAME)) != 0)
 		      return 0;
-		    
+
 		    /* If the SOA bit is set for a DS record, then we have the
 		       DS from the wrong side of the delegation. */
 		    if (type == T_DS && (p[2] & (0x80 >> T_SOA)) != 0)
@@ -1626,14 +1626,14 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
 			/* Does the NSEC3 say our type exists? */
 			if (offset < p[1] && (p[offset+2] & mask) != 0)
 			  return 0;
-			
+
 			break; /* finished checking */
 		      }
-		    
+
 		    rdlen -= p[1];
 		    p +=  p[1];
 		  }
-		
+
 		return 1;
 	      }
 	    else if (rc < 0)
@@ -1648,7 +1648,7 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
 		    return 1;
 		  }
 	      }
-	    else 
+	    else
 	      {
 		/* wrap around case, name falls between start and next domain name */
 		if (memcmp(workspace2, p, digest_len) >= 0 && memcmp(p, digest, digest_len) >= 0)
@@ -1672,25 +1672,25 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
   int digest_len, i, iterations, salt_len, base32_len, algo = 0;
   struct nettle_hash const *hash;
   char *closest_encloser, *next_closest, *wildcard;
-  
+
   if (nons)
     *nons = 1;
-  
-  /* Look though the NSEC3 records to find the first one with 
+
+  /* Look though the NSEC3 records to find the first one with
      an algorithm we support.
 
      Take the algo, iterations, and salt of that record
-     as the ones we're going to use, and prune any 
+     as the ones we're going to use, and prune any
      that don't match. */
-  
+
   for (i = 0; i < nsec_count; i++)
     {
       if (!(p = skip_name(nsecs[i], header, plen, 15)))
 	return 0; /* bad packet */
-      
+
       p += 10; /* type, class, TTL, rdlen */
       algo = *p++;
-      
+
       if ((hash = hash_find(nsec3_digest_name(algo))))
 	break; /* known algo */
     }
@@ -1708,12 +1708,12 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
      to the largest bound, for 4096-bit keys. RFC 5155 10.3 */
   if (iterations > 2500)
     return 0;
-  
+
   salt_len = *p++;
   salt = p;
   if (!CHECK_LEN(header, salt, plen, salt_len))
     return 0; /* bad packet */
-    
+
   /* Now prune so we only have NSEC3 records with same iterations, salt and algo */
   for (i = 0; i < nsec_count; i++)
     {
@@ -1721,17 +1721,17 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
       int this_iter, flags;
 
       nsecs[i] = NULL; /* Speculative, will be restored if OK. */
-      
+
       if (!(p = skip_name(nsec3p, header, plen, 15)))
 	return 0; /* bad packet */
-      
+
       p += 10; /* type, class, TTL, rdlen */
-      
+
       if (*p++ != algo)
 	continue;
- 
+
       flags = *p++; /* flags */
-      
+
       /* 5155 8.2 */
       if (flags != 0 && flags != 1)
 	continue;
@@ -1742,7 +1742,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
 
       if (salt_len != *p++)
 	continue;
-      
+
       if (!CHECK_LEN(header, p, plen, salt_len))
 	return 0; /* bad packet */
 
@@ -1755,11 +1755,11 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
 
   if ((digest_len = hash_name(name, &digest, hash, salt, salt_len, iterations)) == 0)
     return 0;
-  
+
   if (check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count, nons))
     return 1;
 
-  /* Can't find an NSEC3 which covers the name directly, we need the "closest encloser NSEC3" 
+  /* Can't find an NSEC3 which covers the name directly, we need the "closest encloser NSEC3"
      or an answer inferred from a wildcard record. */
   closest_encloser = name;
   next_closest = NULL;
@@ -1774,52 +1774,52 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
 
       if ((digest_len = hash_name(closest_encloser, &digest, hash, salt, salt_len, iterations)) == 0)
 	return 0;
-      
+
       for (i = 0; i < nsec_count; i++)
 	if ((p = nsecs[i]))
 	  {
 	    if (!extract_name(header, plen, &p, workspace1, 1, 0) ||
 		!(base32_len = base32_decode(workspace1, (unsigned char *)workspace2)))
 	      return 0;
-	  
+
 	    if (digest_len == base32_len &&
 		memcmp(digest, workspace2, digest_len) == 0)
 	      break; /* Gotit */
 	  }
-      
+
       if (i != nsec_count)
 	break;
-      
+
       next_closest = closest_encloser;
     }
   while ((closest_encloser = strchr(closest_encloser, '.')));
-  
+
   if (!closest_encloser || !next_closest)
     return 0;
-  
+
   /* Look for NSEC3 that proves the non-existence of the next-closest encloser */
   if ((digest_len = hash_name(next_closest, &digest, hash, salt, salt_len, iterations)) == 0)
     return 0;
 
   if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count, NULL))
     return 0;
-  
+
   /* Finally, check that there's no seat of wildcard synthesis */
   if (!wildname)
     {
       if (!(wildcard = strchr(next_closest, '.')) || wildcard == next_closest)
 	return 0;
-      
+
       wildcard--;
       *wildcard = '*';
-      
+
       if ((digest_len = hash_name(wildcard, &digest, hash, salt, salt_len, iterations)) == 0)
 	return 0;
-      
+
       if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count, NULL))
 	return 0;
     }
-  
+
   return 1;
 }
 
@@ -1827,23 +1827,23 @@ static int prove_non_existence(struct dns_header *header, size_t plen, char *key
 {
   static unsigned char **nsecset = NULL;
   static int nsecset_sz = 0;
-  
+
   int type_found = 0;
   unsigned char *p = skip_questions(header, plen);
   int type, class, rdlen, i, nsecs_found;
-  
+
   /* Move to NS section */
   if (!p || !(p = skip_section(p, ntohs(header->ancount), header, plen)))
     return 0;
-  
+
   for (nsecs_found = 0, i = ntohs(header->nscount); i != 0; i--)
     {
       unsigned char *pstart = p;
-      
+
       if (!(p = skip_name(p, header, plen, 10)))
 	return 0;
-      
-      GETSHORT(type, p); 
+
+      GETSHORT(type, p);
       GETSHORT(class, p);
       p += 4; /* TTL */
       GETSHORT(rdlen, p);
@@ -1857,15 +1857,15 @@ static int prove_non_existence(struct dns_header *header, size_t plen, char *key
 	  type_found = type;
 
 	  if (!expand_workspace(&nsecset, &nsecset_sz, nsecs_found))
-	    return 0; 
-	  
+	    return 0;
+
 	  nsecset[nsecs_found++] = pstart;
 	}
-      
+
       if (!ADD_RDLEN(header, p, plen, rdlen))
 	return 0;
     }
-  
+
   if (type_found == T_NSEC)
     return prove_non_existence_nsec(header, plen, nsecset, nsecs_found, daemon->workspacename, keyname, name, qtype, nons);
   else if (type_found == T_NSEC3)
@@ -1908,10 +1908,10 @@ static int zone_status(char *name, int class, char *keyname, time_t now)
   while (1)
     {
       strcpy(keyname, &name[name_start]);
-      
+
       if (!(crecp = cache_find_by_name(NULL, keyname, now, F_DS)))
 	return STAT_NEED_DS;
-      
+
        /* F_DNSSECOK misused in DS cache records to non-existence of NS record.
 	  F_NEG && !F_DNSSECOK implies that we've proved there's no DS record here,
 	  but that's because there's no NS record either, ie this isn't the start
@@ -1932,7 +1932,7 @@ static int zone_status(char *name, int class, char *keyname, time_t now)
 	     to assume we can validate the zone and if we can't later,
 	     because an RRSIG is missing we return BOGUS.
 	  */
-	  do 
+	  do
 	    {
 	      if (crecp->uid == (unsigned int)class &&
 		  hash_find(ds_digest_name(crecp->addr.ds.digest)) &&
@@ -1949,25 +1949,25 @@ static int zone_status(char *name, int class, char *keyname, time_t now)
 	break;
 
       for (p = &name[name_start-2]; (*p != '.') && (p != name); p--);
-      
+
       if (p != name)
         p++;
-      
+
       name_start = p - name;
-    } 
+    }
 
   return STAT_SECURE;
 }
-       
-/* Validate all the RRsets in the answer and authority sections of the reply (4035:3.2.3) 
+
+/* Validate all the RRsets in the answer and authority sections of the reply (4035:3.2.3)
    Return code:
    STAT_SECURE   if it validates.
    STAT_INSECURE at least one RRset not validated, because in unsigned zone.
    STAT_BOGUS    signature is wrong, bad packet, no validation where there should be.
    STAT_NEED_KEY need DNSKEY to complete validation (name is returned in keyname, class in *class)
-   STAT_NEED_DS  need DS to complete validation (name is returned in keyname) 
+   STAT_NEED_DS  need DS to complete validation (name is returned in keyname)
 */
-int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, 
+int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname,
 			  int *class, int check_unsigned, int *neganswer, int *nons)
 {
   static unsigned char **targets = NULL;
@@ -1979,68 +1979,68 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
 
   if (neganswer)
     *neganswer = 0;
-  
+
   if (RCODE(header) == SERVFAIL || ntohs(header->qdcount) != 1)
     return STAT_BOGUS;
-  
+
   if (RCODE(header) != NXDOMAIN && RCODE(header) != NOERROR)
     return STAT_INSECURE;
 
   p1 = (unsigned char *)(header+1);
-  
+
    /* Find all the targets we're looking for answers to.
      The zeroth array element is for the query, subsequent ones
      for CNAME targets, unless the query is for a CNAME. */
 
   if (!expand_workspace(&targets, &target_sz, 0))
     return STAT_BOGUS;
-  
+
   targets[0] = p1;
   targetidx = 1;
-   
+
   if (!extract_name(header, plen, &p1, name, 1, 4))
     return STAT_BOGUS;
-  
+
   GETSHORT(qtype, p1);
   GETSHORT(qclass, p1);
   ans_start = p1;
- 
+
   /* Can't validate an RRSIG query */
   if (qtype == T_RRSIG)
     return STAT_INSECURE;
-  
+
   if (qtype != T_CNAME)
-    for (j = ntohs(header->ancount); j != 0; j--) 
+    for (j = ntohs(header->ancount); j != 0; j--)
       {
 	if (!(p1 = skip_name(p1, header, plen, 10)))
 	  return STAT_BOGUS; /* bad packet */
-	
-	GETSHORT(type2, p1); 
+
+	GETSHORT(type2, p1);
 	p1 += 6; /* class, TTL */
-	GETSHORT(rdlen2, p1);  
-	
+	GETSHORT(rdlen2, p1);
+
 	if (type2 == T_CNAME)
 	  {
 	    if (!expand_workspace(&targets, &target_sz, targetidx))
 	      return STAT_BOGUS;
-	    
+
 	    targets[targetidx++] = p1; /* pointer to target name */
 	  }
-	
+
 	if (!ADD_RDLEN(header, p1, plen, rdlen2))
 	  return STAT_BOGUS;
       }
-  
+
   for (p1 = ans_start, i = 0; i < ntohs(header->ancount) + ntohs(header->nscount); i++)
     {
       if (!extract_name(header, plen, &p1, name, 1, 10))
 	return STAT_BOGUS; /* bad packet */
-      
+
       GETSHORT(type1, p1);
       GETSHORT(class1, p1);
       p1 += 4; /* TTL */
       GETSHORT(rdlen1, p1);
-      
+
       /* Don't try and validate RRSIGs! */
       if (type1 != T_RRSIG)
 	{
@@ -2049,25 +2049,25 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
 	    {
 	      if (!(rc = extract_name(header, plen, &p2, name, 0, 10)))
 		return STAT_BOGUS; /* bad packet */
-	      
+
 	      GETSHORT(type2, p2);
 	      GETSHORT(class2, p2);
 	      p2 += 4; /* TTL */
 	      GETSHORT(rdlen2, p2);
-	      
+
 	      if (type2 == type1 && class2 == class1 && rc == 1)
 		break; /* Done it before: name, type, class all match. */
-	      
+
 	      if (!ADD_RDLEN(header, p2, plen, rdlen2))
 		return STAT_BOGUS;
 	    }
-	  
+
 	  /* Not done, validate now */
 	  if (j == i)
 	    {
 	      int sigcnt, rrcnt;
 	      char *wildname;
-	      
+
 	      if (!explore_rrset(header, plen, class1, type1, name, keyname, &sigcnt, &rrcnt))
 		return STAT_BOGUS;
 
@@ -2082,12 +2082,12 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
 		       if (class)
 			 *class = class1; /* Class for NEED_DS or NEED_KEY */
 		    }
-		  else 
-		    rc = STAT_INSECURE; 
-		  
+		  else
+		    rc = STAT_INSECURE;
+
 		  return rc;
 		}
-	      
+
 	      /* explore_rrset() gives us key name from sigs in keyname.
 		 Can't overwrite name here. */
 	      strcpy(daemon->workspacename, keyname);
@@ -2099,20 +2099,20 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
 		  if (class)
 		    *class = class1; /* Class for NEED_DS or NEED_KEY */
 		  return rc;
-		} 
-	      
+		}
+
 	      rc = validate_rrset(now, header, plen, class1, type1, sigcnt, rrcnt, name, keyname, &wildname, NULL, 0, 0, 0);
-	      
+
 	      if (rc == STAT_BOGUS || rc == STAT_NEED_KEY || rc == STAT_NEED_DS)
 		{
 		  if (class)
 		    *class = class1; /* Class for DS or DNSKEY */
 		  return rc;
-		} 
-	      else 
+		}
+	      else
 		{
 		  /* rc is now STAT_SECURE or STAT_SECURE_WILDCARD */
-		 
+
 		  /* Note if we've validated either the answer to the question
 		     or the target of a CNAME. Any not noted will need NSEC or
 		     to be in unsigned space. */
@@ -2122,16 +2122,16 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
 		      {
 			if (!(rc = extract_name(header, plen, &p2, name, 0, 10)))
 			  return STAT_BOGUS; /* bad packet */
-			
+
 			if (class1 == qclass && rc == 1 && (type1 == T_CNAME || type1 == qtype || qtype == T_ANY ))
 			  targets[j] = NULL;
 		      }
-			    
+
 		   /* An attacker replay a wildcard answer with a different
 		      answer and overlay a genuine RR. To prove this
 		      hasn't happened, the answer must prove that
-		      the genuine record doesn't exist. Check that here. 
-		      Note that we may not yet have validated the NSEC/NSEC3 RRsets. 
+		      the genuine record doesn't exist. Check that here.
+		      Note that we may not yet have validated the NSEC/NSEC3 RRsets.
 		      That's not a problem since if the RRsets later fail
 		      we'll return BOGUS then. */
 		  if (rc == STAT_SECURE_WILDCARD && !prove_non_existence(header, plen, keyname, name, type1, class1, wildname, NULL))
@@ -2153,7 +2153,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
 
 	if (!extract_name(header, plen, &p2, name, 1, 10))
 	  return STAT_BOGUS; /* bad packet */
-	    
+
 	/* NXDOMAIN or NODATA reply, unanswered question is (name, qclass, qtype) */
 
 	/* For anything other than a DS record, this situation is OK if either
@@ -2163,18 +2163,18 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
 	    /* Empty DS without NSECS */
 	    if (qtype == T_DS)
 	      return STAT_BOGUS;
-	    
+
 	    if ((rc = zone_status(name, qclass, keyname, now)) != STAT_SECURE)
 	      {
 		if (class)
 		  *class = qclass; /* Class for NEED_DS or NEED_KEY */
 		return rc;
-	      } 
-	    
+	      }
+
 	    return STAT_BOGUS; /* signed zone, no NSECs */
 	  }
       }
-  
+
   return STAT_SECURE;
 }
 
@@ -2201,26 +2201,26 @@ int dnskey_keytag(int alg, int flags, unsigned char *key, int keylen)
     }
 }
 
-size_t dnssec_generate_query(struct dns_header *header, unsigned char *end, char *name, int class, 
+size_t dnssec_generate_query(struct dns_header *header, unsigned char *end, char *name, int class,
 			     int type, union mysockaddr *addr, int edns_pktsz)
 {
   unsigned char *p;
   char *types = querystr("dnssec-query", type);
   size_t ret;
 
-  if (addr->sa.sa_family == AF_INET) 
+  if (addr->sa.sa_family == AF_INET)
     log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, name, (struct all_addr *)&addr->in.sin_addr, types);
 #ifdef HAVE_IPV6
   else
     log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, name, (struct all_addr *)&addr->in6.sin6_addr, types);
 #endif
-  
+
   header->qdcount = htons(1);
   header->ancount = htons(0);
   header->nscount = htons(0);
   header->arcount = htons(0);
 
-  header->hb3 = HB3_RD; 
+  header->hb3 = HB3_RD;
   SET_OPCODE(header, QUERY);
   /* For debugging, set Checking Disabled, otherwise, have the upstream check too,
      this allows it to select auth servers when one is returning bad data. */
@@ -2229,7 +2229,7 @@ size_t dnssec_generate_query(struct dns_header *header, unsigned char *end, char
   /* ID filled in later */
 
   p = (unsigned char *)(header+1);
-	
+
   p = do_rfc1035_name(p, name, NULL);
   *p++ = 0;
   PUTSHORT(type, p);
@@ -2251,15 +2251,15 @@ unsigned char* hash_questions(struct dns_header *header, size_t plen, char *name
   const struct nettle_hash *hash;
   void *ctx;
   unsigned char *digest;
-  
+
   if (!(hash = hash_find("sha1")) || !hash_init(hash, &ctx, &digest))
     return NULL;
-  
-  for (q = ntohs(header->qdcount); q != 0; q--) 
+
+  for (q = ntohs(header->qdcount); q != 0; q--)
     {
       if (!extract_name(header, plen, &p, name, 1, 4))
 	break; /* bad packet */
-      
+
       len = to_wire(name);
       hash->update(ctx, len, (unsigned char *)name);
       /* CRC the class and type as well */
@@ -2269,7 +2269,7 @@ unsigned char* hash_questions(struct dns_header *header, size_t plen, char *name
       if (!CHECK_LEN(header, p, plen, 0))
 	break; /* bad packet */
     }
-  
+
   hash->digest(ctx, hash->digest_size, digest);
   return digest;
 }
diff --git a/src/domain.c b/src/domain.c
index f347613..3800a51 100644
--- a/src/domain.c
+++ b/src/domain.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -38,45 +38,45 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
     {
       int found = 0;
       char *tail, *pref;
-      
+
       for (tail = name, pref = c->prefix; *tail != 0 && pref && *pref != 0; tail++, pref++)
 	{
 	  unsigned int c1 = (unsigned char) *pref;
 	  unsigned int c2 = (unsigned char) *tail;
-	  
+
 	  if (c1 >= 'A' && c1 <= 'Z')
 	    c1 += 'a' - 'A';
 	  if (c2 >= 'A' && c2 <= 'Z')
 	    c2 += 'a' - 'A';
-	  
+
 	  if (c1 != c2)
 	    break;
 	}
-      
+
       if (pref && *pref != 0)
 	continue; /* prefix match fail */
-      
+
       /* NB, must not alter name if we return zero */
       for (p = tail; *p; p++)
 	{
 	  char c = *p;
-	  
+
 	  if ((c >='0' && c <= '9') || c == '-')
 	    continue;
-	  
+
 #ifdef HAVE_IPV6
-	  if (prot == AF_INET6 && ((c >='A' && c <= 'F') || (c >='a' && c <= 'f'))) 
+	  if (prot == AF_INET6 && ((c >='A' && c <= 'F') || (c >='a' && c <= 'f')))
 	    continue;
 #endif
-	  
+
 	  break;
 	}
-      
+
       if (*p != '.')
 	continue;
-      
-      *p = 0;	
-      
+
+      *p = 0;
+
  #ifdef HAVE_IPV6
       if (prot == AF_INET6 && strstr(tail, "--ffff-") == tail)
 	{
@@ -115,7 +115,7 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
 	  else
 	    {
 	      u64 addrpart = addr6part(&addr->addr.addr6);
-	      
+
 	      if (c->is6 &&
 		  is_same_net6(&addr->addr.addr6, &c->start6, 64) &&
 		  addrpart >= addr6part(&c->start6) &&
@@ -124,18 +124,18 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
 	    }
 #endif
 	}
-      
+
       /* restore name */
       for (p = tail; *p; p++)
 	if (*p == '.' || *p == ':')
 	  *p = '-';
-      
+
       *p = '.';
 
       if (found)
 	return 1;
     }
-  
+
   return 0;
 }
 
@@ -144,14 +144,14 @@ int is_rev_synth(int flag, struct all_addr *addr, char *name)
 {
    struct cond_domain *c;
 
-   if (flag & F_IPV4 && (c = search_domain(addr->addr.addr4, daemon->synth_domains))) 
+   if (flag & F_IPV4 && (c = search_domain(addr->addr.addr4, daemon->synth_domains)))
      {
        char *p;
-       
+
        *name = 0;
        if (c->prefix)
 	 strncpy(name, c->prefix, MAXDNAME - ADDRSTRLEN);
-       
+
        inet_ntop(AF_INET, &addr->addr.addr4, name + strlen(name), ADDRSTRLEN);
        for (p = name; *p; p++)
 	 if (*p == '.')
@@ -164,14 +164,14 @@ int is_rev_synth(int flag, struct all_addr *addr, char *name)
      }
 
 #ifdef HAVE_IPV6
-   if (flag & F_IPV6 && (c = search_domain6(&addr->addr.addr6, daemon->synth_domains))) 
+   if (flag & F_IPV6 && (c = search_domain6(&addr->addr.addr6, daemon->synth_domains)))
      {
        char *p;
-       
+
        *name = 0;
        if (c->prefix)
 	 strncpy(name, c->prefix, MAXDNAME - ADDRSTRLEN);
-       
+
        inet_ntop(AF_INET6, &addr->addr.addr6, name + strlen(name), ADDRSTRLEN);
 
        /* IPv6 presentation address can start with ":", but valid domain names
@@ -189,11 +189,11 @@ int is_rev_synth(int flag, struct all_addr *addr, char *name)
 
        strncat(name, ".", MAXDNAME);
        strncat(name, c->domain, MAXDNAME);
-       
+
        return 1;
      }
 #endif
-   
+
    return 0;
 }
 
@@ -217,20 +217,20 @@ char *get_domain(struct in_addr addr)
     return c->domain;
 
   return daemon->domain_suffix;
-} 
+}
 
 #ifdef HAVE_IPV6
 static struct cond_domain *search_domain6(struct in6_addr *addr, struct cond_domain *c)
 {
   u64 addrpart = addr6part(addr);
-  
+
   for (; c; c = c->next)
     if (c->is6 &&
 	is_same_net6(addr, &c->start6, 64) &&
 	addrpart >= addr6part(&c->start6) &&
         addrpart <= addr6part(&c->end6))
       return c;
-  
+
   return NULL;
 }
 
@@ -242,5 +242,5 @@ char *get_domain6(struct in6_addr *addr)
     return c->domain;
 
   return daemon->domain_suffix;
-} 
+}
 #endif
diff --git a/src/edns0.c b/src/edns0.c
index 7ed5a47..0bc45f9 100644
--- a/src/edns0.c
+++ b/src/edns0.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -18,11 +18,11 @@
 
 unsigned char *find_pseudoheader(struct dns_header *header, size_t plen, size_t  *len, unsigned char **p, int *is_sign, int *is_last)
 {
-  /* See if packet has an RFC2671 pseudoheader, and if so return a pointer to it. 
+  /* See if packet has an RFC2671 pseudoheader, and if so return a pointer to it.
      also return length of pseudoheader in *len and pointer to the UDP size in *p
      Finally, check to see if a packet is signed. If it is we cannot change a single bit before
      forwarding. We look for TSIG in the addition section, and TKEY queries (for GSS-TSIG) */
-  
+
   int i, arcount = ntohs(header->arcount);
   unsigned char *ansp = (unsigned char *)(header+1);
   unsigned short rdlen, type, class;
@@ -38,10 +38,10 @@ unsigned char *find_pseudoheader(struct dns_header *header, size_t plen, size_t
 	    {
 	      if (!(ansp = skip_name(ansp, header, plen, 4)))
 		return NULL;
-	      
-	      GETSHORT(type, ansp); 
+
+	      GETSHORT(type, ansp);
 	      GETSHORT(class, ansp);
-	      
+
 	      if (class == C_IN && type == T_TKEY)
 		*is_sign = 1;
 	    }
@@ -52,18 +52,18 @@ unsigned char *find_pseudoheader(struct dns_header *header, size_t plen, size_t
       if (!(ansp = skip_questions(header, plen)))
 	return NULL;
     }
-    
+
   if (arcount == 0)
     return NULL;
-  
+
   if (!(ansp = skip_section(ansp, ntohs(header->ancount) + ntohs(header->nscount), header, plen)))
-    return NULL; 
-  
+    return NULL;
+
   for (i = 0; i < arcount; i++)
     {
       unsigned char *save, *start = ansp;
       if (!(ansp = skip_name(ansp, header, plen, 10)))
-	return NULL; 
+	return NULL;
 
       GETSHORT(type, ansp);
       save = ansp;
@@ -79,33 +79,33 @@ unsigned char *find_pseudoheader(struct dns_header *header, size_t plen, size_t
 
 	  if (p)
 	    *p = save;
-	  
+
 	  if (is_last)
 	    *is_last = (i == arcount-1);
 
 	  ret = start;
 	}
-      else if (is_sign && 
-	       i == arcount - 1 && 
-	       class == C_ANY && 
+      else if (is_sign &&
+	       i == arcount - 1 &&
+	       class == C_ANY &&
 	       type == T_TSIG)
 	*is_sign = 1;
     }
-  
+
   return ret;
 }
- 
+
 
 /* replace == 2 ->delete existing option only. */
-size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit, 
+size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit,
 			unsigned short udp_sz, int optno, unsigned char *opt, size_t optlen, int set_do, int replace)
-{ 
+{
   unsigned char *lenp, *datap, *p, *udp_len, *buff = NULL;
   int rdlen = 0, is_sign, is_last;
   unsigned short flags = set_do ? 0x8000 : 0, rcode = 0;
 
   p = find_pseudoheader(header, plen, NULL, &udp_len, &is_sign, &is_last);
-  
+
   if (is_sign)
     return plen;
 
@@ -136,13 +136,13 @@ size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *l
        /* no option to add */
       if (optno == 0)
 	return plen;
-      	  
+
       /* check if option already there */
       for (i = 0; i + 4 < rdlen;)
 	{
 	  GETSHORT(code, p);
 	  GETSHORT(len, p);
-	  
+
 	  /* malformed option, delete the whole OPT RR and start again. */
 	  if (i + 4 + len > rdlen)
 	    {
@@ -150,7 +150,7 @@ size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *l
 	      is_last = 0;
 	      break;
 	    }
-	  
+
 	  if (code == optno)
 	    {
 	      if (replace == 0)
@@ -175,22 +175,22 @@ size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *l
 	{
 	  /* First, take a copy of the options. */
 	  if (rdlen != 0 && (buff = whine_malloc(rdlen)))
-	    memcpy(buff, datap, rdlen);	      
-	  
+	    memcpy(buff, datap, rdlen);
+
 	  /* now, delete OPT RR */
 	  plen = rrfilter(header, plen, 0);
-	  
+
 	  /* Now, force addition of a new one */
-	  p = NULL;	  
+	  p = NULL;
 	}
     }
-  
+
   if (!p)
     {
       /* We are (re)adding the pseudoheader */
       if (!(p = skip_questions(header, plen)) ||
-	  !(p = skip_section(p, 
-			     ntohs(header->ancount) + ntohs(header->nscount) + ntohs(header->arcount), 
+	  !(p = skip_section(p,
+			     ntohs(header->ancount) + ntohs(header->nscount) + ntohs(header->arcount),
 			     header, plen)))
       {
 	free(buff);
@@ -221,15 +221,15 @@ size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *l
 	  free(buff);
 	  p += rdlen;
 	}
-      
-      /* Only bump arcount if RR is going to fit */ 
+
+      /* Only bump arcount if RR is going to fit */
       if (((ssize_t)optlen) <= (limit - (p + 4)))
 	header->arcount = htons(ntohs(header->arcount) + 1);
     }
-  
+
   if (((ssize_t)optlen) > (limit - (p + 4)))
     return plen; /* Too big */
-  
+
   /* Add new option */
   if (optno != 0 && replace != 2)
     {
@@ -240,7 +240,7 @@ size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *l
       if (p + optlen > limit)
        return plen; /* Too big */
       memcpy(p, opt, optlen);
-      p += optlen;  
+      p += optlen;
       PUTSHORT(p - datap, lenp);
     }
   return p - (unsigned char *)header;
@@ -284,7 +284,7 @@ static size_t add_dns_client(struct dns_header *header, size_t plen, unsigned ch
 	}
     }
 
-  return add_pseudoheader(header, plen, limit, PACKETSZ, EDNS0_OPTION_NOMDEVICEID, (unsigned char *)encode, strlen(encode), 0, replace); 
+  return add_pseudoheader(header, plen, limit, PACKETSZ, EDNS0_OPTION_NOMDEVICEID, (unsigned char *)encode, strlen(encode), 0, replace);
 }
 
 
@@ -294,22 +294,22 @@ static size_t add_mac(struct dns_header *header, size_t plen, unsigned char *lim
   unsigned char mac[DHCP_CHADDR_MAX];
 
   if ((maclen = find_mac(l3, mac, 1, now)) != 0)
-    plen = add_pseudoheader(header, plen, limit, PACKETSZ, EDNS0_OPTION_MAC, mac, maclen, 0, 0); 
-    
-  return plen; 
+    plen = add_pseudoheader(header, plen, limit, PACKETSZ, EDNS0_OPTION_MAC, mac, maclen, 0, 0);
+
+  return plen;
 }
 
 struct subnet_opt {
   u16 family;
   u8 source_netmask, scope_netmask;
-#ifdef HAVE_IPV6 
+#ifdef HAVE_IPV6
   u8 addr[IN6ADDRSZ];
 #else
   u8 addr[INADDRSZ];
 #endif
 };
 
-static void *get_addrp(union mysockaddr *addr, const short family) 
+static void *get_addrp(union mysockaddr *addr, const short family)
 {
 #ifdef HAVE_IPV6
   if (family == AF_INET6)
@@ -322,7 +322,7 @@ static void *get_addrp(union mysockaddr *addr, const short family)
 static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
 {
   /* http://tools.ietf.org/html/draft-vandergaast-edns-client-subnet-02 */
-  
+
   int len;
   void *addrp = NULL;
   int sa_family = source->sa.sa_family;
@@ -334,12 +334,12 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
   if (source->sa.sa_family == AF_INET6 && daemon->add_subnet6)
     {
       opt->source_netmask = daemon->add_subnet6->mask;
-      if (daemon->add_subnet6->addr_used) 
+      if (daemon->add_subnet6->addr_used)
 	{
 	  sa_family = daemon->add_subnet6->addr.sa.sa_family;
 	  addrp = get_addrp(&daemon->add_subnet6->addr, sa_family);
-	} 
-      else 
+	}
+      else
 	addrp = &source->in6.sin6_addr;
     }
 #endif
@@ -351,19 +351,19 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
 	{
 	  sa_family = daemon->add_subnet4->addr.sa.sa_family;
 	  addrp = get_addrp(&daemon->add_subnet4->addr, sa_family);
-	} 
-	else 
+	}
+	else
 	  addrp = &source->in.sin_addr;
     }
-  
+
 #ifdef HAVE_IPV6
   opt->family = htons(sa_family == AF_INET6 ? 2 : 1);
 #else
   opt->family = htons(1);
 #endif
-  
+
   len = 0;
-  
+
   if (addrp && opt->source_netmask != 0)
     {
       len = ((opt->source_netmask - 1) >> 3) + 1;
@@ -371,17 +371,17 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
       if (opt->source_netmask & 7)
 	opt->addr[len-1] &= 0xff << (8 - (opt->source_netmask & 7));
     }
-  
+
   return len + 4;
 }
- 
+
 static size_t add_source_addr(struct dns_header *header, size_t plen, unsigned char *limit, union mysockaddr *source)
 {
   /* http://tools.ietf.org/html/draft-vandergaast-edns-client-subnet-02 */
-  
+
   int len;
   struct subnet_opt opt;
-  
+
   len = calc_subnet_opt(&opt, source);
   return add_pseudoheader(header, plen, (unsigned char *)limit, PACKETSZ, EDNS0_OPTION_CLIENT_SUBNET, (unsigned char *)&opt, len, 0, 0);
 }
@@ -389,23 +389,23 @@ static size_t add_source_addr(struct dns_header *header, size_t plen, unsigned c
 int check_source(struct dns_header *header, size_t plen, unsigned char *pseudoheader, union mysockaddr *peer)
 {
   /* Section 9.2, Check that subnet option in reply matches. */
-  
+
   int len, calc_len;
   struct subnet_opt opt;
   unsigned char *p;
   int code, i, rdlen;
-  
+
    calc_len = calc_subnet_opt(&opt, peer);
-   
+
    if (!(p = skip_name(pseudoheader, header, plen, 10)))
      return 1;
-   
+
    p += 8; /* skip UDP length and RCODE */
-   
+
    GETSHORT(rdlen, p);
    if (!CHECK_LEN(header, p, plen, rdlen))
      return 1; /* bad packet */
-   
+
    /* check if option there */
    for (i = 0; i + 4 < rdlen; i += len + 4)
      {
@@ -420,30 +420,30 @@ int check_source(struct dns_header *header, size_t plen, unsigned char *pseudohe
 	 }
        p += len;
      }
-   
+
    return 1;
 }
 
-size_t add_edns0_config(struct dns_header *header, size_t plen, unsigned char *limit, 
-			union mysockaddr *source, time_t now, int *check_subnet)    
+size_t add_edns0_config(struct dns_header *header, size_t plen, unsigned char *limit,
+			union mysockaddr *source, time_t now, int *check_subnet)
 {
   *check_subnet = 0;
 
   if (option_bool(OPT_ADD_MAC))
     plen  = add_mac(header, plen, limit, source, now);
-  
+
   if (option_bool(OPT_MAC_B64) || option_bool(OPT_MAC_HEX))
     plen = add_dns_client(header, plen, limit, source, now);
 
   if (daemon->dns_client_id)
-    plen = add_pseudoheader(header, plen, limit, PACKETSZ, EDNS0_OPTION_NOMCPEID, 
+    plen = add_pseudoheader(header, plen, limit, PACKETSZ, EDNS0_OPTION_NOMCPEID,
 			    (unsigned char *)daemon->dns_client_id, strlen(daemon->dns_client_id), 0, 1);
-  
+
   if (option_bool(OPT_CLIENT_SUBNET))
     {
-      plen = add_source_addr(header, plen, limit, source); 
+      plen = add_source_addr(header, plen, limit, source);
       *check_subnet = 1;
     }
-	  
+
   return plen;
 }
diff --git a/src/forward.c b/src/forward.c
index 942b02d..fe6b117 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -23,14 +23,14 @@ static struct frec *lookup_frec_by_sender(unsigned short id,
 static unsigned short get_id(void);
 static void free_frec(struct frec *f);
 
-/* Send a UDP packet with its source address set as "source" 
+/* Send a UDP packet with its source address set as "source"
    unless nowild is true, when we just send it with the kernel default */
-int send_from(int fd, int nowild, char *packet, size_t len, 
+int send_from(int fd, int nowild, char *packet, size_t len,
 	      union mysockaddr *to, struct all_addr *source,
 	      unsigned int iface)
 {
   struct msghdr msg;
-  struct iovec iov[1]; 
+  struct iovec iov[1];
   union {
     struct cmsghdr align; /* this ensures alignment */
 #if defined(HAVE_LINUX_NETWORK)
@@ -42,7 +42,7 @@ int send_from(int fd, int nowild, char *packet, size_t len,
     char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
 #endif
   } control_u;
-  
+
   iov[0].iov_base = packet;
   iov[0].iov_len = len;
 
@@ -53,7 +53,7 @@ int send_from(int fd, int nowild, char *packet, size_t len,
   msg.msg_namelen = sa_len(to);
   msg.msg_iov = iov;
   msg.msg_iovlen = 1;
-  
+
   if (!nowild)
     {
       struct cmsghdr *cmptr;
@@ -93,7 +93,7 @@ int send_from(int fd, int nowild, char *packet, size_t len,
       (void)iface; /* eliminate warning */
 #endif
     }
-  
+
   while (retry_send(sendmsg(fd, &msg, 0)));
 
   /* If interface is still in DAD, EINVAL results - ignore that. */
@@ -102,48 +102,48 @@ int send_from(int fd, int nowild, char *packet, size_t len,
       my_syslog(LOG_ERR, _("failed to send packet: %s"), strerror(errno));
       return 0;
     }
-  
+
   return 1;
 }
-          
+
 static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigned int qtype,
 				   char *qdomain, int *type, char **domain, int *norebind)
-			      
+
 {
   /* If the query ends in the domain in one of our servers, set
      domain to point to that name. We find the largest match to allow both
      domain.org and sub.domain.org to exist. */
-  
+
   unsigned int namelen = strlen(qdomain);
   unsigned int matchlen = 0;
   struct server *serv;
   unsigned int flags = 0;
-  
+
   for (serv = daemon->servers; serv; serv=serv->next)
     if (qtype == F_DNSSECOK && !(serv->flags & SERV_DO_DNSSEC))
       continue;
     /* domain matches take priority over NODOTS matches */
     else if ((serv->flags & SERV_FOR_NODOTS) && *type != SERV_HAS_DOMAIN && !strchr(qdomain, '.') && namelen != 0)
       {
-	unsigned int sflag = serv->addr.sa.sa_family == AF_INET ? F_IPV4 : F_IPV6; 
+	unsigned int sflag = serv->addr.sa.sa_family == AF_INET ? F_IPV4 : F_IPV6;
 	*type = SERV_FOR_NODOTS;
 	if (serv->flags & SERV_NO_ADDR)
 	  flags = F_NXDOMAIN;
-	else if (serv->flags & SERV_LITERAL_ADDRESS) 
-	  { 
+	else if (serv->flags & SERV_LITERAL_ADDRESS)
+	  {
 	    if (sflag & qtype)
 	      {
 		flags = sflag;
-		if (serv->addr.sa.sa_family == AF_INET) 
+		if (serv->addr.sa.sa_family == AF_INET)
 		  *addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
 #ifdef HAVE_IPV6
 		else
 		  *addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr;
-#endif 
+#endif
 	      }
 	    else if (!flags || (flags & F_NXDOMAIN))
 	      flags = F_NOERR;
-	  } 
+	  }
       }
     else if (serv->flags & SERV_HAS_DOMAIN)
       {
@@ -153,7 +153,7 @@ static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigne
 	    hostname_isequal(matchstart, serv->domain) &&
 	    (domainlen == 0 || namelen == domainlen || *(matchstart-1) == '.' ))
 	  {
-	    if ((serv->flags & SERV_NO_REBIND) && norebind)	
+	    if ((serv->flags & SERV_NO_REBIND) && norebind)
 	      *norebind = 1;
 	    else
 	      {
@@ -174,7 +174,7 @@ static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigne
 			  continue;
 		      }
 		  }
-		
+
 		if (domainlen >= matchlen)
 		  {
 		    *type = serv->flags & (SERV_HAS_DOMAIN | SERV_USE_RESOLV | SERV_NO_REBIND | SERV_DO_DNSSEC);
@@ -187,7 +187,7 @@ static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigne
 			if (sflag & qtype)
 			  {
 			    flags = sflag;
-			    if (serv->addr.sa.sa_family == AF_INET) 
+			    if (serv->addr.sa.sa_family == AF_INET)
 			      *addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
 #ifdef HAVE_IPV6
 			    else
@@ -199,26 +199,26 @@ static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigne
 		      }
 		    else
 		      flags = 0;
-		  } 
+		  }
 	      }
 	  }
       }
-  
-  if (flags == 0 && !(qtype & (F_QUERY | F_DNSSECOK)) && 
+
+  if (flags == 0 && !(qtype & (F_QUERY | F_DNSSECOK)) &&
       option_bool(OPT_NODOTS_LOCAL) && !strchr(qdomain, '.') && namelen != 0)
     /* don't forward A or AAAA queries for simple names, except the empty name */
     flags = F_NOERR;
-  
+
   if (flags == F_NXDOMAIN && check_for_local_domain(qdomain, now))
     flags = F_NOERR;
 
   if (flags)
     {
       int logflags = 0;
-      
+
       if (flags == F_NXDOMAIN || flags == F_NOERR)
 	logflags = F_NEG | qtype;
-  
+
       log_query(logflags | flags | F_CONFIG | F_FORWARD, qdomain, *addrpp, NULL);
     }
   else if ((*type) & SERV_USE_RESOLV)
@@ -231,7 +231,7 @@ static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigne
 
 static int forward_query(int udpfd, union mysockaddr *udpaddr,
 			 struct all_addr *dst_addr, unsigned int dst_iface,
-			 struct dns_header *header, size_t plen, time_t now, 
+			 struct dns_header *header, size_t plen, time_t now,
 			 struct frec *forward, int ad_reqd, int do_bit)
 {
   char *domain = NULL;
@@ -258,7 +258,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 	 If that generates an answer, it will become the new default
 	 for this server */
       forward->flags |= FREC_TEST_PKTSZ;
-      
+
 #ifdef HAVE_DNSSEC
       /* If we've already got an answer to this query, but we're awaiting keys for validation,
 	 there's no point retrying the query, retry the key query instead...... */
@@ -266,27 +266,27 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 	{
 	  int fd, is_sign;
 	  unsigned char *pheader;
-	  
+
 	  forward->flags &= ~FREC_TEST_PKTSZ;
-	  
+
 	  while (forward->blocking_query)
 	    forward = forward->blocking_query;
-	   
+
 	  forward->flags |= FREC_TEST_PKTSZ;
-	  
+
 	  blockdata_retrieve(forward->stash, forward->stash_len, (void *)header);
 	  plen = forward->stash_len;
-	  
+
 	  if (find_pseudoheader(header, plen, NULL, &pheader, &is_sign, NULL) && !is_sign)
 	    PUTSHORT(SAFE_PKTSZ, pheader);
 
-	  if (forward->sentto->addr.sa.sa_family == AF_INET) 
+	  if (forward->sentto->addr.sa.sa_family == AF_INET)
 	    log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec");
 #ifdef HAVE_IPV6
 	  else
 	    log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&forward->sentto->addr.in6.sin6_addr, "dnssec");
 #endif
-  
+
 	  if (forward->sentto->sfd)
 	    fd = forward->sentto->sfd->fd;
 	  else
@@ -298,11 +298,11 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 #endif
 		fd = forward->rfd4->fd;
 	    }
-	  
+
 	  while (retry_send( sendto(fd, (char *)header, plen, 0,
 				    &forward->sentto->addr.sa,
 				    sa_len(&forward->sentto->addr))));
-	  
+
 	  return 1;
 	}
 #endif
@@ -324,20 +324,20 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 	start = daemon->servers; /* at end of list, recycle */
       header->id = htons(forward->new_id);
     }
-  else 
+  else
     {
       if (gotname)
 	flags = search_servers(now, &addrp, gotname, daemon->namebuff, &type, &domain, &norebind);
-      
+
 #ifdef HAVE_DNSSEC
       do_dnssec = type & SERV_DO_DNSSEC;
 #endif
-      type &= ~SERV_DO_DNSSEC;      
+      type &= ~SERV_DO_DNSSEC;
 
       if (daemon->servers && !flags)
 	forward = get_new_frec(now, NULL, 0);
       /* table full - flags == 0, return REFUSED */
-      
+
       if (forward)
 	{
 	  forward->source = *udpaddr;
@@ -360,14 +360,14 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 	  if (do_bit)
 	    forward->flags |= FREC_DO_QUESTION;
 #endif
-	  
+
 	  header->id = htons(forward->new_id);
-	  
-	  /* In strict_order mode, always try servers in the order 
-	     specified in resolv.conf, if a domain is given 
+
+	  /* In strict_order mode, always try servers in the order
+	     specified in resolv.conf, if a domain is given
 	     always try all the available servers,
 	     otherwise, use the one last known to work. */
-	  
+
 	  if (type == 0)
 	    {
 	      if (option_bool(OPT_ORDER))
@@ -391,10 +391,10 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 	}
     }
 
-  /* check for send errors here (no route to host) 
+  /* check for send errors here (no route to host)
      if we fail to send to all nameservers, send back an error
      packet straight away (helps modem users when offline)  */
-  
+
   if (!flags && forward)
     {
       struct server *firstsentto = start;
@@ -403,28 +403,28 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 
       /* If a query is retried, use the log_id for the retry when logging the answer. */
       forward->log_id = daemon->log_id;
-      
+
       edns0_len  = add_edns0_config(header, plen, ((unsigned char *)header) + PACKETSZ, &forward->source, now, &subnet);
-      
+
       if (edns0_len != plen)
 	{
 	  plen = edns0_len;
 	  forward->flags |= FREC_ADDED_PHEADER;
-	  
+
 	  if (subnet)
 	    forward->flags |= FREC_HAS_SUBNET;
 	}
-      
+
 #ifdef HAVE_DNSSEC
       if (option_bool(OPT_DNSSEC_VALID) && do_dnssec)
 	{
 	  size_t new = add_do_bit(header, plen, ((unsigned char *) header) + PACKETSZ);
-	 
+
 	  if (new != plen)
 	    forward->flags |= FREC_ADDED_PHEADER;
 
 	  plen = new;
-	      
+
 	  /* For debugging, set Checking Disabled, otherwise, have the upstream check too,
 	     this allows it to select auth servers when one is returning bad data. */
 	  if (option_bool(OPT_DNSSEC_DEBUG))
@@ -436,13 +436,13 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
       /* If we're sending an EDNS0 with any options, we can't recreate the query from a reply. */
       if (find_pseudoheader(header, plen, &edns0_len, NULL, NULL, NULL) && edns0_len > 11)
 	forward->flags |= FREC_HAS_EXTRADATA;
-      
+
       while (1)
-	{ 
+	{
 	  /* only send to servers dealing with our domain.
-	     domain may be NULL, in which case server->domain 
+	     domain may be NULL, in which case server->domain
 	     must be NULL also. */
-	  
+
 	  if (type == (start->flags & SERV_TYPE) &&
 	      (type != SERV_HAS_DOMAIN || hostname_isequal(domain, start->domain)) &&
 	      !(start->flags & (SERV_LITERAL_ADDRESS | SERV_LOOP)))
@@ -452,7 +452,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 	      /* find server socket to use, may need to get random one. */
 	      if (start->sfd)
 		fd = start->sfd->fd;
-	      else 
+	      else
 		{
 #ifdef HAVE_IPV6
 		  if (start->addr.sa.sa_family == AF_INET6)
@@ -483,7 +483,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 		    }
 #endif
 		}
-	      
+
 #ifdef HAVE_DNSSEC
 	      if (option_bool(OPT_DNSSEC_VALID) && (forward->flags & FREC_ADDED_PHEADER))
 		{
@@ -492,7 +492,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 		     The RRSIGS will be stripped out before the answer goes back, so the packet should
 		     shrink again. So, if we added a do-bit, bump the udp packet size to the value
 		     known to be OK for this server. We check returned size after stripping and set
-		     the truncated bit if it's still too big. */		  
+		     the truncated bit if it's still too big. */
 		  unsigned char *pheader;
 		  int is_sign;
 		  if (find_pseudoheader(header, plen, NULL, &pheader, &is_sign, NULL) && !is_sign)
@@ -504,47 +504,47 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
 				    &start->addr.sa,
 				    sa_len(&start->addr))))
 		continue;
-	    
+
 	      if (errno == 0)
 		{
 		  /* Keep info in case we want to re-send this packet */
 		  daemon->srv_save = start;
 		  daemon->packet_len = plen;
-		  
+
 		  if (!gotname)
 		    strcpy(daemon->namebuff, "query");
 		  if (start->addr.sa.sa_family == AF_INET)
-		    log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff, 
-			      (struct all_addr *)&start->addr.in.sin_addr, NULL); 
+		    log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff,
+			      (struct all_addr *)&start->addr.in.sin_addr, NULL);
 #ifdef HAVE_IPV6
 		  else
-		    log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff, 
+		    log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff,
 			      (struct all_addr *)&start->addr.in6.sin6_addr, NULL);
-#endif 
+#endif
 		  start->queries++;
 		  forwarded = 1;
 		  forward->sentto = start;
-		  if (!forward->forwardall) 
+		  if (!forward->forwardall)
 		    break;
 		  forward->forwardall++;
 		}
-	    } 
-	  
+	    }
+
 	  if (!(start = start->next))
  	    start = daemon->servers;
-	  
+
 	  if (start == firstsentto)
 	    break;
 	}
-      
+
       if (forwarded)
 	return 1;
-      
-      /* could not send on, prepare to return */ 
+
+      /* could not send on, prepare to return */
       header->id = htons(forward->orig_id);
       free_frec(forward); /* cancel */
-    }	  
-  
+    }
+
   /* could not send on, return empty answer or address if known for whole domain */
   if (udpfd != -1)
     {
@@ -555,14 +555,14 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
   return 0;
 }
 
-static size_t process_reply(struct dns_header *header, time_t now, struct server *server, size_t n, int check_rebind, 
-			    int no_cache, int cache_secure, int bogusanswer, int ad_reqd, int do_bit, int added_pheader, 
+static size_t process_reply(struct dns_header *header, time_t now, struct server *server, size_t n, int check_rebind,
+			    int no_cache, int cache_secure, int bogusanswer, int ad_reqd, int do_bit, int added_pheader,
 			    int check_subnet, union mysockaddr *query_source)
 {
   unsigned char *pheader, *sizep;
   char **sets = 0;
   int munged = 0, is_sign;
-  size_t plen; 
+  size_t plen;
 
   (void)ad_reqd;
   (void)do_bit;
@@ -575,13 +575,13 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
       struct ipsets *ipset_pos;
       unsigned int namelen = strlen(daemon->namebuff);
       unsigned int matchlen = 0;
-      for (ipset_pos = daemon->ipsets; ipset_pos; ipset_pos = ipset_pos->next) 
+      for (ipset_pos = daemon->ipsets; ipset_pos; ipset_pos = ipset_pos->next)
 	{
 	  unsigned int domainlen = strlen(ipset_pos->domain);
 	  char *matchstart = daemon->namebuff + namelen - domainlen;
 	  if (namelen >= domainlen && hostname_isequal(matchstart, ipset_pos->domain) &&
 	      (domainlen == 0 || namelen == domainlen || *(matchstart - 1) == '.' ) &&
-	      domainlen >= matchlen) 
+	      domainlen >= matchlen)
 	    {
 	      matchlen = domainlen;
 	      sets = ipset_pos->sets;
@@ -589,7 +589,7 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
 	}
     }
 #endif
-  
+
   if ((pheader = find_pseudoheader(header, n, &plen, &sizep, &is_sign, NULL)))
     {
       if (check_subnet && !check_source(header, plen, pheader, query_source))
@@ -597,7 +597,7 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
 	  my_syslog(LOG_WARNING, _("discarding DNS reply: subnet option mismatch"));
 	  return 0;
 	}
-      
+
       if (!is_sign)
 	{
 	  if (added_pheader)
@@ -635,14 +635,14 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
 	    }
 	}
     }
-  
+
   /* RFC 4035 sect 4.6 para 3 */
   if (!is_sign && !option_bool(OPT_DNSSEC_PROXY))
      header->hb4 &= ~HB4_AD;
-  
+
   if (OPCODE(header) != QUERY || (RCODE(header) != NOERROR && RCODE(header) != NXDOMAIN))
     return resize_packet(header, n, pheader, plen);
-  
+
   /* Complain loudly if the upstream server is non-recursive. */
   if (!(header->hb4 & HB4_RA) && RCODE(header) == NOERROR &&
       server && !(server->flags & SERV_WARNED_RECURSIVE))
@@ -651,7 +651,7 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
       my_syslog(LOG_WARNING, _("nameserver %s refused to do a recursive query"), daemon->namebuff);
       if (!option_bool(OPT_LOG))
 	server->flags |= SERV_WARNED_RECURSIVE;
-    }  
+    }
 
   if (daemon->bogus_addr && RCODE(header) != NXDOMAIN &&
       check_for_bogus_wildcard(header, n, daemon->namebuff, daemon->bogus_addr, now))
@@ -661,15 +661,15 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
       header->hb3 &= ~HB3_AA;
       cache_secure = 0;
     }
-  else 
+  else
     {
       int doctored = 0;
-      
-      if (RCODE(header) == NXDOMAIN && 
+
+      if (RCODE(header) == NXDOMAIN &&
 	  extract_request(header, n, daemon->namebuff, NULL) &&
 	  check_for_local_domain(daemon->namebuff, now))
 	{
-	  /* if we forwarded a query for a locally known name (because it was for 
+	  /* if we forwarded a query for a locally known name (because it was for
 	     an unknown type) and the answer is NXDOMAIN, convert that to NODATA,
 	     since we know that the domain exists, even if upstream doesn't */
 	  munged = 1;
@@ -677,7 +677,7 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
 	  SET_RCODE(header, NOERROR);
 	  cache_secure = 0;
 	}
-      
+
       if (extract_addresses(header, n, daemon->namebuff, now, sets, is_sign, check_rebind, no_cache, cache_secure, &doctored))
 	{
 	  my_syslog(LOG_WARNING, _("possible DNS-rebind attack detected: %s"), daemon->namebuff);
@@ -688,7 +688,7 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
       if (doctored)
 	cache_secure = 0;
     }
-  
+
 #ifdef HAVE_DNSSEC
   if (bogusanswer && !(header->hb4 & HB4_CD) && !option_bool(OPT_DNSSEC_DEBUG))
     {
@@ -700,10 +700,10 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
   if (option_bool(OPT_DNSSEC_VALID))
     {
       header->hb4 &= ~HB4_AD;
-      
+
       if (!(header->hb4 & HB4_CD) && ad_reqd && cache_secure)
 	header->hb4 |= HB4_AD;
-      
+
       /* If the requestor didn't set the DO bit, don't return DNSSEC info. */
       if (!do_bit)
 	n = rrfilter(header, n, 1);
@@ -712,7 +712,7 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
 
   /* do this after extract_addresses. Ensure NODATA reply and remove
      nameserver info. */
-  
+
   if (munged)
     {
       header->ancount = htons(0);
@@ -720,7 +720,7 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
       header->arcount = htons(0);
       header->hb3 &= ~HB3_TC;
     }
-  
+
   /* the bogus-nxdomain stuff, doctor and NXDOMAIN->NODATA munging can all elide
      sections of the packet. Find the new length here and put back pseudoheader
      if it was removed. */
@@ -746,43 +746,43 @@ void reply_query(int fd, int family, time_t now)
 
   /* packet buffer overwritten */
   daemon->srv_save = NULL;
-  
+
   /* Determine the address of the server replying  so that we can mark that as good */
   serveraddr.sa.sa_family = family;
 #ifdef HAVE_IPV6
   if (serveraddr.sa.sa_family == AF_INET6)
     serveraddr.in6.sin6_flowinfo = 0;
 #endif
-  
+
   header = (struct dns_header *)daemon->packet;
-  
+
   if (n < (int)sizeof(struct dns_header) || !(header->hb3 & HB3_QR))
     return;
-  
+
   /* spoof check: answer must come from known server, */
   for (server = daemon->servers; server; server = server->next)
     if (!(server->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR)) &&
 	sockaddr_isequal(&server->addr, &serveraddr))
       break;
-  
+
   if (!server)
     return;
-  
+
 #ifdef HAVE_DNSSEC
   hash = hash_questions(header, n, daemon->namebuff);
 #else
   hash = &crc;
   crc = questions_crc(header, n, daemon->namebuff);
 #endif
-  
+
   if (!(forward = lookup_frec(ntohs(header->id), hash)))
     return;
-  
-  /* log_query gets called indirectly all over the place, so 
+
+  /* log_query gets called indirectly all over the place, so
      pass these in global variables - sorry. */
   daemon->log_display_id = forward->log_id;
   daemon->log_source_addr = &forward->source;
-  
+
   if (daemon->ignore_addr && RCODE(header) == NOERROR &&
       check_for_ignored_address(header, n, daemon->ignore_addr))
     return;
@@ -797,7 +797,7 @@ void reply_query(int fd, int family, time_t now)
       unsigned char *pheader;
       size_t plen;
       int is_sign;
-      
+
       /* recreate query from reply */
       pheader = find_pseudoheader(header, (size_t)n, &plen, NULL, &is_sign, NULL);
       if (!is_sign)
@@ -819,8 +819,8 @@ void reply_query(int fd, int family, time_t now)
 	      return;
 	    }
 	}
-    }   
-   
+    }
+
   server = forward->sentto;
   if ((forward->sentto->flags & SERV_TYPE) == 0)
     {
@@ -829,8 +829,8 @@ void reply_query(int fd, int family, time_t now)
       else
 	{
 	  struct server *last_server;
-	  
-	  /* find good server by address if possible, otherwise assume the last one we sent to */ 
+
+	  /* find good server by address if possible, otherwise assume the last one we sent to */
 	  for (last_server = daemon->servers; last_server; last_server = last_server->next)
 	    if (!(last_server->flags & (SERV_LITERAL_ADDRESS | SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_NO_ADDR)) &&
 		sockaddr_isequal(&last_server->addr, &serveraddr))
@@ -838,18 +838,18 @@ void reply_query(int fd, int family, time_t now)
 		server = last_server;
 		break;
 	      }
-	} 
+	}
       if (!option_bool(OPT_ALL_SERVERS))
 	daemon->last_server = server;
     }
- 
+
   /* We tried resending to this server with a smaller maximum size and got an answer.
      Make that permanent. To avoid reduxing the packet size for an single dropped packet,
      only do this when we get a truncated answer, or one larger than the safe size. */
-  if (server && (forward->flags & FREC_TEST_PKTSZ) && 
+  if (server && (forward->flags & FREC_TEST_PKTSZ) &&
       ((header->hb3 & HB3_TC) || n >= SAFE_PKTSZ))
     server->edns_pktsz = SAFE_PKTSZ;
-  
+
   /* If the answer is an error, keep the forward record in place in case
      we get a good reply from another server. Kill it when we've
      had replies from all to avoid filling the forwarding table when
@@ -861,14 +861,14 @@ void reply_query(int fd, int family, time_t now)
 
       if (option_bool(OPT_NO_REBIND))
 	check_rebind = !(forward->flags & FREC_NOREBIND);
-      
+
       /*   Don't cache replies where DNSSEC validation was turned off, either
 	   the upstream server told us so, or the original query specified it.  */
       if ((header->hb4 & HB4_CD) || (forward->flags & FREC_CHECKING_DISABLED))
 	no_cache_dnssec = 1;
-      
+
 #ifdef HAVE_DNSSEC
-      if (server && (server->flags & SERV_DO_DNSSEC) && 
+      if (server && (server->flags & SERV_DO_DNSSEC) &&
 	  option_bool(OPT_DNSSEC_VALID) && !(forward->flags & FREC_CHECKING_DISABLED))
 	{
 	  int status = 0;
@@ -876,7 +876,7 @@ void reply_query(int fd, int family, time_t now)
 	  /* We've had a reply already, which we're validating. Ignore this duplicate */
 	  if (forward->blocking_query)
 	    return;
-	  
+
 	   /* Truncated answer can't be validated.
 	      If this is an answer to a DNSSEC-generated query, we still
 	      need to get the client to retry over TCP, so return
@@ -884,7 +884,7 @@ void reply_query(int fd, int family, time_t now)
 	   */
 	  if (header->hb3 & HB3_TC)
 	    status = STAT_TRUNCATED;
-	  
+
 	  while (1)
 	    {
 	      /* As soon as anything returns BOGUS, we stop and unwind, to do otherwise
@@ -897,28 +897,28 @@ void reply_query(int fd, int family, time_t now)
 		  else if (forward->flags & FREC_DS_QUERY)
 		    status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
 		  else
-		    status = dnssec_validate_reply(now, header, n, daemon->namebuff, daemon->keyname, &forward->class, 
+		    status = dnssec_validate_reply(now, header, n, daemon->namebuff, daemon->keyname, &forward->class,
 						   option_bool(OPT_DNSSEC_NO_SIGN) && (server->flags & SERV_DO_DNSSEC), NULL, NULL);
 		}
-	      
+
 	      /* Can't validate, as we're missing key data. Put this
-		 answer aside, whilst we get that. */     
+		 answer aside, whilst we get that. */
 	      if (status == STAT_NEED_DS || status == STAT_NEED_KEY)
 		{
 		  struct frec *new, *orig;
-		  
+
 		  /* Free any saved query */
 		  if (forward->stash)
 		    blockdata_free(forward->stash);
-		  
+
 		  /* Now save reply pending receipt of key data */
 		  if (!(forward->stash = blockdata_alloc((char *)header, n)))
 		    return;
 		  forward->stash_len = n;
-		  
+
 		  /* Find the original query that started it all.... */
 		  for (orig = forward; orig->dependent; orig = orig->dependent);
-		  
+
 		  if (--orig->work_counter == 0 || !(new = get_new_frec(now, NULL, 1)))
 		    status = STAT_ABANDONED;
 		  else
@@ -926,18 +926,18 @@ void reply_query(int fd, int family, time_t now)
 		      int fd, type = SERV_DO_DNSSEC;
 		      struct frec *next = new->next;
 		      char *domain;
-		      
+
 		      *new = *forward; /* copy everything, then overwrite */
 		      new->next = next;
 		      new->blocking_query = NULL;
 
-		      /* Find server to forward to. This will normally be the 
+		      /* Find server to forward to. This will normally be the
 			 same as for the original query, but may be another if
-			 servers for domains are involved. */		      
+			 servers for domains are involved. */
 		      if (search_servers(now, NULL, F_DNSSECOK, daemon->keyname, &type, &domain, NULL) == 0)
 			{
 			  struct server *start = server, *new_server = NULL;
-			  
+
 			  while (1)
 			    {
 			      if (type == (start->flags & (SERV_TYPE | SERV_DO_DNSSEC)) &&
@@ -951,34 +951,34 @@ void reply_query(int fd, int family, time_t now)
 				      break;
 				    }
 				}
-			      
+
 			      if (!(start = start->next))
 				start = daemon->servers;
 			      if (start == server)
 				break;
 			    }
-			  
+
 			  if (new_server)
 			    server = new_server;
 			}
-		      
+
 		      new->sentto = server;
 		      new->rfd4 = NULL;
 #ifdef HAVE_IPV6
 		      new->rfd6 = NULL;
 #endif
 		      new->flags &= ~(FREC_DNSKEY_QUERY | FREC_DS_QUERY);
-		      
+
 		      new->dependent = forward; /* to find query awaiting new one. */
 		      forward->blocking_query = new; /* for garbage cleaning */
 		      /* validate routines leave name of required record in daemon->keyname */
 		      if (status == STAT_NEED_KEY)
 			{
-			  new->flags |= FREC_DNSKEY_QUERY; 
+			  new->flags |= FREC_DNSKEY_QUERY;
 			  nn = dnssec_generate_query(header, ((unsigned char *) header) + server->edns_pktsz,
 						     daemon->keyname, forward->class, T_DNSKEY, &server->addr, server->edns_pktsz);
 			}
-		      else 
+		      else
 			{
 			  new->flags |= FREC_DS_QUERY;
 			  nn = dnssec_generate_query(header,((unsigned char *) header) + server->edns_pktsz,
@@ -991,10 +991,10 @@ void reply_query(int fd, int family, time_t now)
 		      /* Save query for retransmission */
 		      new->stash = blockdata_alloc((char *)header, nn);
 		      new->stash_len = nn;
-		      
+
 		      /* Don't resend this. */
 		      daemon->srv_save = NULL;
-		      
+
 		      if (server->sfd)
 			fd = server->sfd->fd;
 		      else
@@ -1013,7 +1013,7 @@ void reply_query(int fd, int family, time_t now)
 				fd = new->rfd4->fd;
 			    }
 			}
-		      
+
 		      if (fd != -1)
 			{
 #ifdef HAVE_CONNTRACK
@@ -1025,19 +1025,19 @@ void reply_query(int fd, int family, time_t now)
 				setsockopt(fd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
 			    }
 #endif
-			  while (retry_send(sendto(fd, (char *)header, nn, 0, 
-						   &server->addr.sa, 
-						   sa_len(&server->addr)))); 
+			  while (retry_send(sendto(fd, (char *)header, nn, 0,
+						   &server->addr.sa,
+						   sa_len(&server->addr))));
 			  server->queries++;
 			}
-		    }		  
+		    }
 		  return;
 		}
-	  
+
 	      /* Validated original answer, all done. */
 	      if (!forward->dependent)
 		break;
-	      
+
 	      /* validated subsidiary query, (and cached result)
 		 pop that and return to the previous query we were working on. */
 	      struct frec *prev = forward->dependent;
@@ -1047,16 +1047,16 @@ void reply_query(int fd, int family, time_t now)
 	      blockdata_retrieve(forward->stash, forward->stash_len, (void *)header);
 	      n = forward->stash_len;
 	    }
-	
-	  
+
+
 	  no_cache_dnssec = 0;
-	  
+
 	  if (status == STAT_TRUNCATED)
 	    header->hb3 |= HB3_TC;
 	  else
 	    {
 	      char *result, *domain = "result";
-	      
+
 	      if (status == STAT_ABANDONED)
 		{
 		  result = "ABANDONED";
@@ -1064,13 +1064,13 @@ void reply_query(int fd, int family, time_t now)
 		}
 	      else
 		result = (status == STAT_SECURE ? "SECURE" : (status == STAT_INSECURE ? "INSECURE" : "BOGUS"));
-	      
+
 	      if (status == STAT_BOGUS && extract_request(header, n, daemon->namebuff, NULL))
 		domain = daemon->namebuff;
-	      
+
 	      log_query(F_KEYTAG | F_SECSTAT, domain, NULL, result);
 	    }
-	  
+
 	  if (status == STAT_SECURE)
 	    cache_secure = 1;
 	  else if (status == STAT_BOGUS)
@@ -1079,16 +1079,16 @@ void reply_query(int fd, int family, time_t now)
 	      bogusanswer = 1;
 	    }
 	}
-#endif     
-      
+#endif
+
       /* restore CD bit to the value in the query */
       if (forward->flags & FREC_CHECKING_DISABLED)
 	header->hb4 |= HB4_CD;
       else
 	header->hb4 &= ~HB4_CD;
-      
-      if ((nn = process_reply(header, now, forward->sentto, (size_t)n, check_rebind, no_cache_dnssec, cache_secure, bogusanswer, 
-			      forward->flags & FREC_AD_QUESTION, forward->flags & FREC_DO_QUESTION, 
+
+      if ((nn = process_reply(header, now, forward->sentto, (size_t)n, check_rebind, no_cache_dnssec, cache_secure, bogusanswer,
+			      forward->flags & FREC_AD_QUESTION, forward->flags & FREC_DO_QUESTION,
 			      forward->flags & FREC_ADDED_PHEADER, forward->flags & FREC_HAS_SUBNET, &forward->source)))
 	{
 	  header->id = htons(forward->orig_id);
@@ -1106,7 +1106,7 @@ void reply_query(int fd, int family, time_t now)
 	      nn = resize_packet(header, nn, NULL, 0);
 	    }
 #endif
-	  send_from(forward->fd, option_bool(OPT_NOWILD) || option_bool (OPT_CLEVERBIND), daemon->packet, nn, 
+	  send_from(forward->fd, option_bool(OPT_NOWILD) || option_bool (OPT_CLEVERBIND), daemon->packet, nn,
 		    &forward->source, &forward->dest, forward->iface);
 	}
       free_frec(forward); /* cancel */
@@ -1155,24 +1155,24 @@ void receive_query(struct listener *listen, time_t now)
 
   /* packet buffer overwritten */
   daemon->srv_save = NULL;
-  
+
   dst_addr_4.s_addr = dst_addr.addr.addr4.s_addr = 0;
   netmask.s_addr = 0;
-  
+
   if (option_bool(OPT_NOWILD) && listen->iface)
     {
       auth_dns = listen->iface->dns_auth;
-     
+
       if (listen->family == AF_INET)
 	{
 	  dst_addr_4 = dst_addr.addr.addr4 = listen->iface->addr.in.sin_addr;
 	  netmask = listen->iface->netmask;
 	}
     }
-  
+
   iov[0].iov_base = daemon->packet;
   iov[0].iov_len = daemon->edns_pktsz;
-    
+
   msg.msg_control = control_u.control;
   msg.msg_controllen = sizeof(control_u);
   msg.msg_flags = 0;
@@ -1180,11 +1180,11 @@ void receive_query(struct listener *listen, time_t now)
   msg.msg_namelen = sizeof(source_addr);
   msg.msg_iov = iov;
   msg.msg_iovlen = 1;
-  
+
   if ((n = recvmsg(listen->fd, &msg, 0)) == -1)
     return;
-  
-  if (n < (int)sizeof(struct dns_header) || 
+
+  if (n < (int)sizeof(struct dns_header) ||
       (msg.msg_flags & MSG_TRUNC) ||
       (header->hb3 & HB3_QR))
     return;
@@ -1192,12 +1192,12 @@ void receive_query(struct listener *listen, time_t now)
   /* Clear buffer beyond request to avoid risk of
      information disclosure. */
   memset(daemon->packet + n, 0, daemon->edns_pktsz - n);
-  
+
   source_addr.sa.sa_family = listen->family;
-  
+
   if (listen->family == AF_INET)
     {
-       /* Source-port == 0 is an error, we can't send back to that. 
+       /* Source-port == 0 is an error, we can't send back to that.
 	  http://www.ietf.org/mail-archive/web/dnsop/current/msg11441.html */
       if (source_addr.in.sin_port == 0)
 	return;
@@ -1211,13 +1211,13 @@ void receive_query(struct listener *listen, time_t now)
       source_addr.in6.sin6_flowinfo = 0;
     }
 #endif
-  
+
   /* We can be configured to only accept queries from at-most-one-hop-away addresses. */
   if (option_bool(OPT_LOCAL_SERVICE))
     {
       struct addrlist *addr;
 #ifdef HAVE_IPV6
-      if (listen->family == AF_INET6) 
+      if (listen->family == AF_INET6)
 	{
 	  for (addr = daemon->interface_addrs; addr; addr = addr->next)
 	    if ((addr->flags & ADDRLIST_IPV6) &&
@@ -1247,7 +1247,7 @@ void receive_query(struct listener *listen, time_t now)
 	  return;
 	}
     }
-		
+
   if (check_dst)
     {
       struct ifreq ifr;
@@ -1293,7 +1293,7 @@ void receive_query(struct listener *listen, time_t now)
 	    }
 	}
 #endif
-      
+
 #ifdef HAVE_IPV6
       if (listen->family == AF_INET6)
 	{
@@ -1305,22 +1305,22 @@ void receive_query(struct listener *listen, time_t now)
 		  struct in6_pktinfo *p;
 		} p;
 		p.c = CMSG_DATA(cmptr);
-		  
+
 		dst_addr.addr.addr6 = p.p->ipi6_addr;
 		if_index = p.p->ipi6_ifindex;
 	      }
 	}
 #endif
-      
+
       /* enforce available interface configuration */
-      
+
       if (!indextoname(listen->fd, if_index, ifr.ifr_name))
 	return;
-      
+
       if (!iface_check(listen->family, &dst_addr, ifr.ifr_name, &auth_dns))
 	{
 	   if (!option_bool(OPT_CLEVERBIND))
-	     enumerate_interfaces(0); 
+	     enumerate_interfaces(0);
 	   if (!loopback_exception(listen->fd, listen->family, &dst_addr, ifr.ifr_name) &&
 	       !label_exception(if_index, listen->family, &dst_addr))
 	     return;
@@ -1329,24 +1329,24 @@ void receive_query(struct listener *listen, time_t now)
       if (listen->family == AF_INET && option_bool(OPT_LOCALISE))
 	{
 	  struct irec *iface;
-	  
+
 	  /* get the netmask of the interface which has the address we were sent to.
 	     This is no necessarily the interface we arrived on. */
-	  
+
 	  for (iface = daemon->interfaces; iface; iface = iface->next)
 	    if (iface->addr.sa.sa_family == AF_INET &&
 		iface->addr.in.sin_addr.s_addr == dst_addr_4.s_addr)
 	      break;
-	  
+
 	  /* interface may be new */
 	  if (!iface && !option_bool(OPT_CLEVERBIND))
-	    enumerate_interfaces(0); 
-	  
+	    enumerate_interfaces(0);
+
 	  for (iface = daemon->interfaces; iface; iface = iface->next)
 	    if (iface->addr.sa.sa_family == AF_INET &&
 		iface->addr.in.sin_addr.s_addr == dst_addr_4.s_addr)
 	      break;
-	  
+
 	  /* If we failed, abandon localisation */
 	  if (iface)
 	    netmask = iface->netmask;
@@ -1354,25 +1354,25 @@ void receive_query(struct listener *listen, time_t now)
 	    dst_addr_4.s_addr = 0;
 	}
     }
-   
-  /* log_query gets called indirectly all over the place, so 
+
+  /* log_query gets called indirectly all over the place, so
      pass these in global variables - sorry. */
   daemon->log_display_id = ++daemon->log_id;
   daemon->log_source_addr = &source_addr;
-  
+
   if (extract_request(header, (size_t)n, daemon->namebuff, &type))
     {
 #ifdef HAVE_AUTH
       struct auth_zone *zone;
 #endif
       char *types = querystr(auth_dns ? "auth" : "query", type);
-      
-      if (listen->family == AF_INET) 
-	log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff, 
+
+      if (listen->family == AF_INET)
+	log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
 		  (struct all_addr *)&source_addr.in.sin_addr, types);
 #ifdef HAVE_IPV6
       else
-	log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff, 
+	log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff,
 		  (struct all_addr *)&source_addr.in6.sin6_addr, types);
 #endif
 
@@ -1387,26 +1387,26 @@ void receive_query(struct listener *listen, time_t now)
 	      break;
 	    }
 #endif
-      
+
 #ifdef HAVE_LOOP
       /* Check for forwarding loop */
       if (detect_loop(daemon->namebuff, type))
 	return;
 #endif
     }
-  
+
   if (find_pseudoheader(header, (size_t)n, NULL, &pheader, NULL, NULL))
-    { 
+    {
       unsigned short flags;
-      
+
       have_pseudoheader = 1;
       GETSHORT(udp_size, pheader);
       pheader += 2; /* ext_rcode */
       GETSHORT(flags, pheader);
-      
+
       if (flags & 0x8000)
-	do_bit = 1;/* do bit */ 
-	
+	do_bit = 1;/* do bit */
+
       /* If the client provides an EDNS0 UDP size, use that to limit our reply.
 	 (bounded by the maximum configured). If no EDNS0, then it
 	 defaults to 512 */
@@ -1419,7 +1419,7 @@ void receive_query(struct listener *listen, time_t now)
 #ifdef HAVE_AUTH
   if (auth_dns)
     {
-      m = answer_auth(header, ((char *) header) + udp_size, (size_t)n, now, &source_addr, 
+      m = answer_auth(header, ((char *) header) + udp_size, (size_t)n, now, &source_addr,
 		      local_auth, do_bit, have_pseudoheader);
       if (m >= 1)
 	{
@@ -1436,9 +1436,9 @@ void receive_query(struct listener *listen, time_t now)
       if (header->hb4 & HB4_AD)
 	ad_reqd = 1;
 
-      m = answer_request(header, ((char *) header) + udp_size, (size_t)n, 
+      m = answer_request(header, ((char *) header) + udp_size, (size_t)n,
 			 dst_addr_4, netmask, now, ad_reqd, do_bit, have_pseudoheader);
-      
+
       if (m >= 1)
 	{
 	  send_from(listen->fd, option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND),
@@ -1455,8 +1455,8 @@ void receive_query(struct listener *listen, time_t now)
 
 #ifdef HAVE_DNSSEC
 /* Recurse up the key hierarchy */
-static int tcp_key_recurse(time_t now, int status, struct dns_header *header, size_t n, 
-			   int class, char *name, char *keyname, struct server *server, 
+static int tcp_key_recurse(time_t now, int status, struct dns_header *header, size_t n,
+			   int class, char *name, char *keyname, struct server *server,
 			   int have_mark, unsigned int mark, int *keycount)
 {
   int new_status;
@@ -1464,15 +1464,15 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
   unsigned char *payload = NULL;
   struct dns_header *new_header = NULL;
   u16 *length = NULL;
- 
+
   while (1)
     {
       int type = SERV_DO_DNSSEC;
       char *domain;
-      size_t m; 
+      size_t m;
       unsigned char c1, c2;
       struct server *firstsendto = NULL;
-      
+
       /* limit the amount of work we do, to avoid cycling forever on loops in the DNS */
       if (--(*keycount) == 0)
 	new_status = STAT_ABANDONED;
@@ -1480,10 +1480,10 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
 	new_status = dnssec_validate_by_ds(now, header, n, name, keyname, class);
       else if (status == STAT_NEED_DS)
 	new_status = dnssec_validate_ds(now, header, n, name, keyname, class);
-      else 
+      else
 	new_status = dnssec_validate_reply(now, header, n, name, keyname, &class,
 					   option_bool(OPT_DNSSEC_NO_SIGN) && (server->flags & SERV_DO_DNSSEC), NULL, NULL);
-      
+
       if (new_status != STAT_NEED_DS && new_status != STAT_NEED_KEY)
 	break;
 
@@ -1496,27 +1496,27 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
 	  new_header = (struct dns_header *)payload;
 	  length = (u16 *)packet;
 	}
-      
+
       if (!packet)
 	{
 	  new_status = STAT_ABANDONED;
 	  break;
 	}
-	 
-      m = dnssec_generate_query(new_header, ((unsigned char *) new_header) + 65536, keyname, class, 
+
+      m = dnssec_generate_query(new_header, ((unsigned char *) new_header) + 65536, keyname, class,
 				new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS, &server->addr, server->edns_pktsz);
-      
+
       *length = htons(m);
 
-      /* Find server to forward to. This will normally be the 
+      /* Find server to forward to. This will normally be the
 	 same as for the original query, but may be another if
-	 servers for domains are involved. */		      
+	 servers for domains are involved. */
       if (search_servers(now, NULL, F_DNSSECOK, keyname, &type, &domain, NULL) != 0)
 	{
 	  new_status = STAT_ABANDONED;
 	  break;
 	}
-	
+
       while (1)
 	{
 	  if (!firstsendto)
@@ -1532,25 +1532,25 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
 		  break;
 		}
 	    }
-	  
+
 	  if (type != (server->flags & (SERV_TYPE | SERV_DO_DNSSEC)) ||
 	      (type == SERV_HAS_DOMAIN && !hostname_isequal(domain, server->domain)) ||
 	      (server->flags & (SERV_LITERAL_ADDRESS | SERV_LOOP)))
 	    continue;
-	    
+
 	  retry:
 	    /* may need to make new connection. */
 	    if (server->tcpfd == -1)
 	      {
 		if ((server->tcpfd = socket(server->addr.sa.sa_family, SOCK_STREAM, 0)) == -1)
 		  continue; /* No good, next server */
-		
+
 #ifdef HAVE_CONNTRACK
 		/* Copy connection mark of incoming query to outgoing connection. */
 		if (have_mark)
 		  setsockopt(server->tcpfd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
-#endif	
-		
+#endif
+
 		if (!local_bind(server->tcpfd,  &server->source_addr, server->interface, 1) ||
 		    connect(server->tcpfd, &server->addr.sa, sa_len(&server->addr)) == -1)
 		  {
@@ -1558,10 +1558,10 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
 		    server->tcpfd = -1;
 		    continue; /* No good, next server */
 		  }
-		
+
 		server->flags &= ~SERV_GOT_TCP;
 	      }
-	  
+
 	  if (!read_write(server->tcpfd, packet, m + sizeof(u16), 0) ||
 	      !read_write(server->tcpfd, &c1, 1, 1) ||
 	      !read_write(server->tcpfd, &c2, 1, 1) ||
@@ -1577,21 +1577,21 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
 	      else
 		continue;
 	    }
-	  
+
 	  server->flags |= SERV_GOT_TCP;
-	  
+
 	  m = (c1 << 8) | c2;
 	  new_status = tcp_key_recurse(now, new_status, new_header, m, class, name, keyname, server, have_mark, mark, keycount);
 	  break;
 	}
-      
+
       if (new_status != STAT_OK)
 	break;
     }
-    
+
   if (packet)
     free(packet);
-    
+
   return new_status;
 }
 #endif
@@ -1641,23 +1641,23 @@ unsigned char *tcp_request(int confd, time_t now,
   if (option_bool(OPT_CONNTRACK))
     {
       struct all_addr local;
-#ifdef HAVE_IPV6		      
+#ifdef HAVE_IPV6
       if (local_addr->sa.sa_family == AF_INET6)
 	local.addr.addr6 = local_addr->in6.sin6_addr;
       else
 #endif
 	local.addr.addr4 = local_addr->in.sin_addr;
-      
+
       have_mark = get_incoming_mark(&peer_addr, &local, 1, &mark);
     }
-#endif	
+#endif
 
   /* We can be configured to only accept queries from at-most-one-hop-away addresses. */
   if (option_bool(OPT_LOCAL_SERVICE))
     {
       struct addrlist *addr;
 #ifdef HAVE_IPV6
-      if (peer_addr.sa.sa_family == AF_INET6) 
+      if (peer_addr.sa.sa_family == AF_INET6)
 	{
 	  for (addr = daemon->interface_addrs; addr; addr = addr->next)
 	    if ((addr->flags & ADDRLIST_IPV6) &&
@@ -1671,7 +1671,7 @@ unsigned char *tcp_request(int confd, time_t now,
 	  for (addr = daemon->interface_addrs; addr; addr = addr->next)
 	    {
 	      netmask.s_addr = htonl(~(in_addr_t)0 << (32 - addr->prefixlen));
-	      if (!(addr->flags & ADDRLIST_IPV6) && 
+	      if (!(addr->flags & ADDRLIST_IPV6) &&
 		  is_same_net(addr->addr.addr.addr4, peer_addr.in.sin_addr, netmask))
 		break;
 	    }
@@ -1690,42 +1690,42 @@ unsigned char *tcp_request(int confd, time_t now,
 	  !read_write(confd, &c1, 1, 1) || !read_write(confd, &c2, 1, 1) ||
 	  !(size = c1 << 8 | c2) ||
 	  !read_write(confd, payload, size, 1))
-       	return packet; 
-  
+       	return packet;
+
       if (size < (int)sizeof(struct dns_header))
 	continue;
 
       /* Clear buffer beyond request to avoid risk of
 	 information disclosure. */
       memset(payload + size, 0, 65536 - size);
-      
+
       query_count++;
 
-      /* log_query gets called indirectly all over the place, so 
+      /* log_query gets called indirectly all over the place, so
 	 pass these in global variables - sorry. */
       daemon->log_display_id = ++daemon->log_id;
       daemon->log_source_addr = &peer_addr;
-      
+
       /* save state of "cd" flag in query */
       if ((checking_disabled = header->hb4 & HB4_CD))
 	no_cache_dnssec = 1;
-       
+
       if ((gotname = extract_request(header, (unsigned int)size, daemon->namebuff, &qtype)))
 	{
 #ifdef HAVE_AUTH
 	  struct auth_zone *zone;
 #endif
 	  char *types = querystr(auth_dns ? "auth" : "query", qtype);
-	  
-	  if (peer_addr.sa.sa_family == AF_INET) 
-	    log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff, 
+
+	  if (peer_addr.sa.sa_family == AF_INET)
+	    log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
 		      (struct all_addr *)&peer_addr.in.sin_addr, types);
 #ifdef HAVE_IPV6
 	  else
-	    log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff, 
+	    log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff,
 		      (struct all_addr *)&peer_addr.in6.sin6_addr, types);
 #endif
-	  
+
 #ifdef HAVE_AUTH
 	  /* find queries for zones we're authoritative for, and answer them directly */
 	  if (!auth_dns && !option_bool(OPT_LOCALISE))
@@ -1738,29 +1738,29 @@ unsigned char *tcp_request(int confd, time_t now,
 		}
 #endif
 	}
-      
+
       if (local_addr->sa.sa_family == AF_INET)
 	dst_addr_4 = local_addr->in.sin_addr;
       else
 	dst_addr_4.s_addr = 0;
-      
+
       do_bit = 0;
 
       if (find_pseudoheader(header, (size_t)size, NULL, &pheader, NULL, NULL))
-	{ 
+	{
 	  unsigned short flags;
-	  
+
 	  have_pseudoheader = 1;
 	  pheader += 4; /* udp_size, ext_rcode */
 	  GETSHORT(flags, pheader);
-      
+
 	  if (flags & 0x8000)
-	    do_bit = 1; /* do bit */ 
+	    do_bit = 1; /* do bit */
 	}
 
 #ifdef HAVE_AUTH
       if (auth_dns)
-	m = answer_auth(header, ((char *) header) + 65536, (size_t)size, now, &peer_addr, 
+	m = answer_auth(header, ((char *) header) + 65536, (size_t)size, now, &peer_addr,
 			local_auth, do_bit, have_pseudoheader);
       else
 #endif
@@ -1769,14 +1769,14 @@ unsigned char *tcp_request(int confd, time_t now,
 	   /* RFC 6840 5.7 */
 	   if (header->hb4 & HB4_AD)
 	     ad_reqd = 1;
-	   
+
 	   /* m > 0 if answered from cache */
-	   m = answer_request(header, ((char *) header) + 65536, (size_t)size, 
+	   m = answer_request(header, ((char *) header) + 65536, (size_t)size,
 			      dst_addr_4, netmask, now, ad_reqd, do_bit, have_pseudoheader);
-	  
+
 	  /* Do this by steam now we're not in the select() loop */
-	  check_log_writer(1); 
-	  
+	  check_log_writer(1);
+
 	  if (m == 0)
 	    {
 	      unsigned int flags = 0;
@@ -1790,17 +1790,17 @@ unsigned char *tcp_request(int confd, time_t now,
 		  added_pheader = 1;
 		  size = new_size;
 		}
-	      
+
 	      if (gotname)
 		flags = search_servers(now, &addrp, gotname, daemon->namebuff, &type, &domain, &norebind);
-	      
+
 	      type &= ~SERV_DO_DNSSEC;
-	      
+
 	      if (type != 0  || option_bool(OPT_ORDER) || !daemon->last_server)
 		last_server = daemon->servers;
 	      else
 		last_server = daemon->last_server;
-	      
+
 	      if (!flags && last_server)
 		{
 		  struct server *firstsendto = NULL;
@@ -1812,11 +1812,11 @@ unsigned char *tcp_request(int confd, time_t now,
 		    memset(hash, 0, HASH_SIZE);
 #else
 		  unsigned int crc = questions_crc(header, (unsigned int)size, daemon->namebuff);
-#endif		  
+#endif
 		  /* Loop round available servers until we succeed in connecting to one.
 		     Note that this code subtly ensures that consecutive queries on this connection
 		     which can go to the same server, do so. */
-		  while (1) 
+		  while (1)
 		    {
 		      if (!firstsendto)
 			firstsendto = last_server;
@@ -1824,11 +1824,11 @@ unsigned char *tcp_request(int confd, time_t now,
 			{
 			  if (!(last_server = last_server->next))
 			    last_server = daemon->servers;
-			  
+
 			  if (last_server == firstsendto)
 			    break;
 			}
-		      
+
 		      /* server for wrong domain */
 		      if (type != (last_server->flags & SERV_TYPE) ||
 			  (type == SERV_HAS_DOMAIN && !hostname_isequal(domain, last_server->domain)) ||
@@ -1840,13 +1840,13 @@ unsigned char *tcp_request(int confd, time_t now,
 			{
 			  if ((last_server->tcpfd = socket(last_server->addr.sa.sa_family, SOCK_STREAM, 0)) == -1)
 			    continue;
-			  
+
 #ifdef HAVE_CONNTRACK
 			  /* Copy connection mark of incoming query to outgoing connection. */
 			  if (have_mark)
 			    setsockopt(last_server->tcpfd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
-#endif	
-		      
+#endif
+
 			  if ((!local_bind(last_server->tcpfd,  &last_server->source_addr, last_server->interface, 1) ||
 			       connect(last_server->tcpfd, &last_server->addr.sa, sa_len(&last_server->addr)) == -1))
 			    {
@@ -1854,34 +1854,34 @@ unsigned char *tcp_request(int confd, time_t now,
 			      last_server->tcpfd = -1;
 			      continue;
 			    }
-			  
+
 			  last_server->flags &= ~SERV_GOT_TCP;
 			}
-		      
+
 #ifdef HAVE_DNSSEC
 		      if (option_bool(OPT_DNSSEC_VALID) && (last_server->flags & SERV_DO_DNSSEC))
 			{
 			  new_size = add_do_bit(header, size, ((unsigned char *) header) + 65536);
-			  
+
 			  if (size != new_size)
 			    {
 			      added_pheader = 1;
 			      size = new_size;
 			    }
-			  
+
 			  /* For debugging, set Checking Disabled, otherwise, have the upstream check too,
 			     this allows it to select auth servers when one is returning bad data. */
 			  if (option_bool(OPT_DNSSEC_DEBUG))
 			    header->hb4 |= HB4_CD;
 			}
 #endif
-					      
+
 		      *length = htons(size);
 
 		      /* get query name again for logging - may have been overwritten */
 		      if (!(gotname = extract_request(header, (unsigned int)size, daemon->namebuff, &qtype)))
 			strcpy(daemon->namebuff, "query");
-		      
+
 		      if (!read_write(last_server->tcpfd, packet, size + sizeof(u16), 0) ||
 			  !read_write(last_server->tcpfd, &c1, 1, 1) ||
 			  !read_write(last_server->tcpfd, &c2, 1, 1) ||
@@ -1897,28 +1897,28 @@ unsigned char *tcp_request(int confd, time_t now,
 			  else
 			    continue;
 			}
-		      
+
 		      last_server->flags |= SERV_GOT_TCP;
 
 		      m = (c1 << 8) | c2;
-		      
+
 		      if (last_server->addr.sa.sa_family == AF_INET)
-			log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff, 
-				  (struct all_addr *)&last_server->addr.in.sin_addr, NULL); 
+			log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff,
+				  (struct all_addr *)&last_server->addr.in.sin_addr, NULL);
 #ifdef HAVE_IPV6
 		      else
-			log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff, 
+			log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff,
 				  (struct all_addr *)&last_server->addr.in6.sin6_addr, NULL);
-#endif 
+#endif
 
 #ifdef HAVE_DNSSEC
 		      if (option_bool(OPT_DNSSEC_VALID) && !checking_disabled && (last_server->flags & SERV_DO_DNSSEC))
 			{
 			  int keycount = DNSSEC_WORK; /* Limit to number of DNSSEC questions, to catch loops and avoid filling cache. */
-			  int status = tcp_key_recurse(now, STAT_OK, header, m, 0, daemon->namebuff, daemon->keyname, 
+			  int status = tcp_key_recurse(now, STAT_OK, header, m, 0, daemon->namebuff, daemon->keyname,
 						       last_server, have_mark, mark, &keycount);
 			  char *result, *domain = "result";
-			  
+
 			  if (status == STAT_ABANDONED)
 			    {
 			      result = "ABANDONED";
@@ -1926,12 +1926,12 @@ unsigned char *tcp_request(int confd, time_t now,
 			    }
 			  else
 			    result = (status == STAT_SECURE ? "SECURE" : (status == STAT_INSECURE ? "INSECURE" : "BOGUS"));
-			  
+
 			  if (status == STAT_BOGUS && extract_request(header, m, daemon->namebuff, NULL))
 			    domain = daemon->namebuff;
 
 			  log_query(F_KEYTAG | F_SECSTAT, domain, NULL, result);
-			  
+
 			  if (status == STAT_BOGUS)
 			    {
 			      no_cache_dnssec = 1;
@@ -1948,21 +1948,21 @@ unsigned char *tcp_request(int confd, time_t now,
 			header->hb4 |= HB4_CD;
 		      else
 			header->hb4 &= ~HB4_CD;
-		      
+
 		      /* There's no point in updating the cache, since this process will exit and
-			 lose the information after a few queries. We make this call for the alias and 
+			 lose the information after a few queries. We make this call for the alias and
 			 bogus-nxdomain side-effects. */
 		      /* If the crc of the question section doesn't match the crc we sent, then
-			 someone might be attempting to insert bogus values into the cache by 
+			 someone might be attempting to insert bogus values into the cache by
 			 sending replies containing questions and bogus answers. */
 #ifdef HAVE_DNSSEC
 		      newhash = hash_questions(header, (unsigned int)m, daemon->namebuff);
 		      if (!newhash || memcmp(hash, newhash, HASH_SIZE) != 0)
-			{ 
+			{
 			  m = 0;
 			  break;
 			}
-#else			  
+#else
 		      if (crc != questions_crc(header, (unsigned int)m, daemon->namebuff))
 			{
 			  m = 0;
@@ -1970,24 +1970,24 @@ unsigned char *tcp_request(int confd, time_t now,
 			}
 #endif
 
-		      m = process_reply(header, now, last_server, (unsigned int)m, 
+		      m = process_reply(header, now, last_server, (unsigned int)m,
 					option_bool(OPT_NO_REBIND) && !norebind, no_cache_dnssec, cache_secure, bogusanswer,
-					ad_reqd, do_bit, added_pheader, check_subnet, &peer_addr); 
-		      
+					ad_reqd, do_bit, added_pheader, check_subnet, &peer_addr);
+
 		      break;
 		    }
 		}
-	
+
 	      /* In case of local answer or no connections made. */
 	      if (m == 0)
 		m = setup_reply(header, (unsigned int)size, addrp, flags, daemon->local_ttl);
 	    }
 	}
-	  
+
       check_log_writer(1);
-      
+
       *length = htons(m);
-           
+
       if (m == 0 || !read_write(confd, packet, m + sizeof(u16), 0))
 	return packet;
     }
@@ -1996,7 +1996,7 @@ unsigned char *tcp_request(int confd, time_t now,
 static struct frec *allocate_frec(time_t now)
 {
   struct frec *f;
-  
+
   if ((f = (struct frec *)whine_malloc(sizeof(struct frec))))
     {
       f->next = daemon->frec_list;
@@ -2023,7 +2023,7 @@ struct randfd *allocate_rfd(int family)
   static int finger = 0;
   int i;
 
-  /* limit the number of sockets we have open to avoid starvation of 
+  /* limit the number of sockets we have open to avoid starvation of
      (eg) TFTP. Once we have a reasonable number, randomness should be OK */
 
   for (i = 0; i < RANDOM_SOCKS; i++)
@@ -2031,7 +2031,7 @@ struct randfd *allocate_rfd(int family)
       {
 	if ((daemon->randomsocks[i].fd = random_sock(family)) == -1)
 	  break;
-      
+
 	daemon->randomsocks[i].refcount = 1;
 	daemon->randomsocks[i].family = family;
 	return &daemon->randomsocks[i];
@@ -2042,7 +2042,7 @@ struct randfd *allocate_rfd(int family)
     {
       int j = (i+finger) % RANDOM_SOCKS;
       if (daemon->randomsocks[j].refcount != 0 &&
-	  daemon->randomsocks[j].family == family && 
+	  daemon->randomsocks[j].family == family &&
 	  daemon->randomsocks[j].refcount != 0xffff)
 	{
 	  finger = j;
@@ -2066,7 +2066,7 @@ static void free_frec(struct frec *f)
   f->rfd4 = NULL;
   f->sentto = NULL;
   f->flags = 0;
-  
+
 #ifdef HAVE_IPV6
   free_rfd(f->rfd6);
   f->rfd6 = NULL;
@@ -2099,18 +2099,18 @@ struct frec *get_new_frec(time_t now, int *wait, int force)
 {
   struct frec *f, *oldest, *target;
   int count;
-  
+
   if (wait)
     *wait = 0;
 
   for (f = daemon->frec_list, oldest = NULL, target =  NULL, count = 0; f; f = f->next, count++)
     if (!f->sentto)
       target = f;
-    else 
+    else
       {
 #ifdef HAVE_DNSSEC
 	    /* Don't free DNSSEC sub-queries here, as we may end up with
-	       dangling references to them. They'll go when their "real" query 
+	       dangling references to them. They'll go when their "real" query
 	       is freed. */
 	    if (!f->dependent)
 #endif
@@ -2120,8 +2120,8 @@ struct frec *get_new_frec(time_t now, int *wait, int force)
 		    free_frec(f);
 		    target = f;
 		  }
-	     
-	    
+
+
 		if (!oldest || difftime(f->time, oldest->time) <= 0)
 		  oldest = f;
 	      }
@@ -2132,14 +2132,14 @@ struct frec *get_new_frec(time_t now, int *wait, int force)
       target->time = now;
       return target;
     }
-  
+
   /* can't find empty one, use oldest if there is one
      and it's older than timeout */
   if (!force && oldest && ((int)difftime(now, oldest->time)) >= TIMEOUT)
-    { 
+    {
       /* keep stuff for twice timeout if we can by allocating a new
 	 record instead */
-      if (difftime(now, oldest->time) < 2*TIMEOUT && 
+      if (difftime(now, oldest->time) < 2*TIMEOUT &&
 	  count <= daemon->ftabsize &&
 	  (f = allocate_frec(now)))
 	return f;
@@ -2151,15 +2151,15 @@ struct frec *get_new_frec(time_t now, int *wait, int force)
 	}
       return oldest;
     }
-  
+
   /* none available, calculate time 'till oldest record expires */
   if (!force && count > daemon->ftabsize)
     {
       static time_t last_log = 0;
-      
+
       if (oldest && wait)
 	*wait = oldest->time + (time_t)TIMEOUT - now;
-      
+
       if ((int)difftime(now, last_log) > 5)
 	{
 	  last_log = now;
@@ -2168,7 +2168,7 @@ struct frec *get_new_frec(time_t now, int *wait, int force)
 
       return NULL;
     }
-  
+
   if (!(f = allocate_frec(now)) && wait)
     /* wait one second on malloc failure */
     *wait = 1;
@@ -2182,10 +2182,10 @@ static struct frec *lookup_frec(unsigned short id, void *hash)
   struct frec *f;
 
   for(f = daemon->frec_list; f; f = f->next)
-    if (f->sentto && f->new_id == id && 
+    if (f->sentto && f->new_id == id &&
 	(!hash || memcmp(hash, f->hash, HASH_SIZE) == 0))
       return f;
-      
+
   return NULL;
 }
 
@@ -2194,34 +2194,34 @@ static struct frec *lookup_frec_by_sender(unsigned short id,
 					  void *hash)
 {
   struct frec *f;
-  
+
   for(f = daemon->frec_list; f; f = f->next)
     if (f->sentto &&
-	f->orig_id == id && 
+	f->orig_id == id &&
 	memcmp(hash, f->hash, HASH_SIZE) == 0 &&
 	sockaddr_isequal(&f->source, addr))
       return f;
-   
+
   return NULL;
 }
- 
+
 /* Send query packet again, if we can. */
 void resend_query()
 {
   if (daemon->srv_save)
     {
       int fd;
-      
+
       if (daemon->srv_save->sfd)
 	fd = daemon->srv_save->sfd->fd;
       else if (daemon->rfd_save && daemon->rfd_save->refcount != 0)
 	fd = daemon->rfd_save->fd;
       else
 	return;
-      
+
       while(retry_send(sendto(fd, daemon->packet, daemon->packet_len, 0,
-			      &daemon->srv_save->addr.sa, 
-			      sa_len(&daemon->srv_save->addr)))); 
+			      &daemon->srv_save->addr.sa,
+			      sa_len(&daemon->srv_save->addr))));
     }
 }
 
@@ -2229,11 +2229,11 @@ void resend_query()
 void server_gone(struct server *server)
 {
   struct frec *f;
-  
+
   for (f = daemon->frec_list; f; f = f->next)
     if (f->sentto && f->sentto == server)
       free_frec(f);
-  
+
   if (daemon->last_server == server)
     daemon->last_server = NULL;
 
@@ -2245,11 +2245,11 @@ void server_gone(struct server *server)
 static unsigned short get_id(void)
 {
   unsigned short ret = 0;
-  
-  do 
+
+  do
     ret = rand16();
   while (lookup_frec(ret, NULL));
-  
+
   return ret;
 }
 
diff --git a/src/helper.c b/src/helper.c
index 281cb4a..b8a9207 100644
--- a/src/helper.c
+++ b/src/helper.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -18,15 +18,15 @@
 
 #ifdef HAVE_SCRIPT
 
-/* This file has code to fork a helper process which receives data via a pipe 
+/* This file has code to fork a helper process which receives data via a pipe
    shared with the main process and which is responsible for calling a script when
    DHCP leases change.
 
-   The helper process is forked before the main process drops root, so it retains root 
-   privs to pass on to the script. For this reason it tries to be paranoid about 
+   The helper process is forked before the main process drops root, so it retains root
+   privs to pass on to the script. For this reason it tries to be paranoid about
    data received from the main process, in case that has been compromised. We don't
    want the helper to give an attacker root. In particular, the script to be run is
-   not settable via the pipe, once the fork has taken place it is not alterable by the 
+   not settable via the pipe, once the fork has taken place it is not alterable by the
    main process.
 */
 
@@ -35,9 +35,9 @@ static unsigned char *grab_extradata(unsigned char *buf, unsigned char *end,  ch
 
 #ifdef HAVE_LUASCRIPT
 #define LUA_COMPAT_ALL
-#include <lua.h>  
-#include <lualib.h>  
-#include <lauxlib.h>  
+#include <lua.h>
+#include <lualib.h>
+#include <lauxlib.h>
 
 #ifndef lua_open
 #define lua_open()     luaL_newstate()
@@ -108,8 +108,8 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
   if (!option_bool(OPT_DEBUG) && uid != 0)
     {
       gid_t dummy;
-      if (setgroups(0, &dummy) == -1 || 
-	  setgid(gid) == -1 || 
+      if (setgroups(0, &dummy) == -1 ||
+	  setgid(gid) == -1 ||
 	  setuid(uid) == -1)
 	{
 	  if (option_bool(OPT_NO_FORK))
@@ -126,13 +126,13 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 	}
     }
 
-  /* close all the sockets etc, we don't need them here. 
+  /* close all the sockets etc, we don't need them here.
      Don't close err_fd, in case the lua-init fails.
      Note that we have to do this before lua init
      so we don't close any lua fds. */
   for (max_fd--; max_fd >= 0; max_fd--)
-    if (max_fd != STDOUT_FILENO && max_fd != STDERR_FILENO && 
-	max_fd != STDIN_FILENO && max_fd != pipefd[0] && 
+    if (max_fd != STDOUT_FILENO && max_fd != STDERR_FILENO &&
+	max_fd != STDIN_FILENO && max_fd != pipefd[0] &&
 	max_fd != event_fd && max_fd != err_fd)
       close(max_fd);
 
@@ -142,17 +142,17 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
       const char *lua_err = NULL;
       lua = lua_open();
       luaL_openlibs(lua);
-      
+
       /* get Lua to load our script file */
       if (luaL_dofile(lua, daemon->luascript) != 0)
 	lua_err = lua_tostring(lua, -1);
       else
 	{
 	  lua_getglobal(lua, "lease");
-	  if (lua_type(lua, -1) != LUA_TFUNCTION) 
+	  if (lua_type(lua, -1) != LUA_TFUNCTION)
 	    lua_err = _("lease() function missing in Lua script");
 	}
-      
+
       if (lua_err)
 	{
 	  if (option_bool(OPT_NO_FORK) || option_bool(OPT_DEBUG))
@@ -167,20 +167,20 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 	    }
 	  _exit(0);
 	}
-      
+
       lua_pop(lua, 1);  /* remove nil from stack */
       lua_getglobal(lua, "init");
       if (lua_type(lua, -1) == LUA_TFUNCTION)
 	lua_call(lua, 0, 0);
       else
-	lua_pop(lua, 1);  /* remove nil from stack */	
+	lua_pop(lua, 1);  /* remove nil from stack */
     }
 #endif
 
   /* All init done, close our copy of the error pipe, so that main process can return */
   if (err_fd != -1)
     close(err_fd);
-    
+
   /* loop here */
   while(1)
     {
@@ -192,8 +192,8 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
       int pipeout[2];
 
       free(alloc_buff);
-      
-      /* we read zero bytes when pipe closed: this is our signal to exit */ 
+
+      /* we read zero bytes when pipe closed: this is our signal to exit */
       if (!read_write(pipefd[0], (unsigned char *)&data, sizeof(data), 1))
 	{
 #ifdef HAVE_LUASCRIPT
@@ -206,9 +206,9 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 #endif
 	  _exit(0);
 	}
- 
+
       is6 = !!(data.flags & (LEASE_TA | LEASE_NA));
-      
+
       if (data.action == ACTION_DEL)
 	action_str = "del";
       else if (data.action == ACTION_ADD)
@@ -231,13 +231,13 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 	  is6 = (data.flags != AF_INET);
 	  data.action = ACTION_ARP;
 	}
-       else 
+       else
 	continue;
 
-      	
+
       /* stringify MAC into dhcp_buff */
       p = daemon->dhcp_buff;
-      if (data.hwaddr_type != ARPHRD_ETHER || data.hwaddr_len == 0) 
+      if (data.hwaddr_type != ARPHRD_ETHER || data.hwaddr_len == 0)
 	p += sprintf(p, "%.2x-", data.hwaddr_type);
       for (i = 0; (i < data.hwaddr_len) && (i < DHCP_CHADDR_MAX); i++)
 	{
@@ -245,13 +245,13 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 	  if (i != data.hwaddr_len - 1)
 	    p += sprintf(p, ":");
 	}
-      
+
       /* supplied data may just exceed normal buffer (unlikely) */
-      if ((data.hostname_len + data.ed_len + data.clid_len) > MAXDNAME && 
+      if ((data.hostname_len + data.ed_len + data.clid_len) > MAXDNAME &&
 	  !(alloc_buff = buf = malloc(data.hostname_len + data.ed_len + data.clid_len)))
 	continue;
-      
-      if (!read_write(pipefd[0], buf, 
+
+      if (!read_write(pipefd[0], buf,
 		      data.hostname_len + data.ed_len + data.clid_len, 1))
 	continue;
 
@@ -259,7 +259,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
       for (p = daemon->packet, i = 0; i < data.clid_len; i++)
 	{
 	  p += sprintf(p, "%.2x", buf[i]);
-	  if (i != data.clid_len - 1) 
+	  if (i != data.clid_len - 1)
 	      p += sprintf(p, ":");
 	}
 
@@ -267,11 +267,11 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
       if (is6)
 	{
 	  /* or IAID and server DUID for IPv6 */
-	  sprintf(daemon->dhcp_buff3, "%s%u", data.flags & LEASE_TA ? "T" : "", data.iaid);	
+	  sprintf(daemon->dhcp_buff3, "%s%u", data.flags & LEASE_TA ? "T" : "", data.iaid);
 	  for (p = daemon->dhcp_packet.iov_base, i = 0; i < daemon->duid_len; i++)
 	    {
 	      p += sprintf(p, "%.2x", daemon->duid[i]);
-	      if (i != daemon->duid_len - 1) 
+	      if (i != daemon->duid_len - 1)
 		p += sprintf(p, ":");
 	    }
 
@@ -293,12 +293,12 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 		{
 		  domain = dot+1;
 		  *dot = 0;
-		} 
+		}
 	    }
 	}
-    
+
       extradata = buf + data.hostname_len;
-    
+
       if (!is6)
 	inet_ntop(AF_INET, &data.addr, daemon->addrbuff, ADDRSTRLEN);
 #ifdef HAVE_IPV6
@@ -317,7 +317,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 	{
 	  if (data.action == ACTION_TFTP)
 	    {
-	      lua_getglobal(lua, "tftp"); 
+	      lua_getglobal(lua, "tftp");
 	      if (lua_type(lua, -1) != LUA_TFUNCTION)
 		lua_pop(lua, 1); /* tftp function optional */
 	      else
@@ -327,7 +327,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 		  lua_pushstring(lua, daemon->addrbuff);
 		  lua_setfield(lua, -2, "destination_address");
 		  lua_pushstring(lua, hostname);
-		  lua_setfield(lua, -2, "file_name"); 
+		  lua_setfield(lua, -2, "file_name");
 		  lua_pushstring(lua, is6 ? daemon->packet : daemon->dhcp_buff);
 		  lua_setfield(lua, -2, "file_size");
 		  lua_call(lua, 2, 0);	/* pass 2 values, expect 0 */
@@ -335,7 +335,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 	    }
 	  else if (data.action == ACTION_ARP)
 	    {
-	      lua_getglobal(lua, "arp"); 
+	      lua_getglobal(lua, "arp");
 	      if (lua_type(lua, -1) != LUA_TFUNCTION)
 		lua_pop(lua, 1); /* arp function optional */
 	      else
@@ -354,7 +354,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 	      lua_getglobal(lua, "lease");     /* function to call */
 	      lua_pushstring(lua, action_str); /* arg1 - action */
 	      lua_newtable(lua);               /* arg2 - data table */
-	      
+
 	      if (is6)
 		{
 		  lua_pushstring(lua, daemon->packet);
@@ -364,42 +364,42 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 		  lua_pushstring(lua, daemon->dhcp_buff3);
 		  lua_setfield(lua, -2, "iaid");
 		}
-	      
+
 	      if (!is6 && data.clid_len != 0)
 		{
 		  lua_pushstring(lua, daemon->packet);
 		  lua_setfield(lua, -2, "client_id");
 		}
-	      
+
 	      if (strlen(data.interface) != 0)
 		{
 		  lua_pushstring(lua, data.interface);
 		  lua_setfield(lua, -2, "interface");
 		}
-	      
-#ifdef HAVE_BROKEN_RTC	
+
+#ifdef HAVE_BROKEN_RTC
 	      lua_pushnumber(lua, data.length);
 	      lua_setfield(lua, -2, "lease_length");
 #else
 	      lua_pushnumber(lua, data.expires);
 	      lua_setfield(lua, -2, "lease_expires");
 #endif
-	      
+
 	      if (hostname)
 		{
 		  lua_pushstring(lua, hostname);
 		  lua_setfield(lua, -2, "hostname");
 		}
-	      
+
 	      if (domain)
 		{
 		  lua_pushstring(lua, domain);
 		  lua_setfield(lua, -2, "domain");
 		}
-	      
+
 	      end = extradata + data.ed_len;
 	      buf = extradata;
-	      
+
 	      if (!is6)
 		buf = grab_extradata_lua(buf, end, "vendor_class");
 #ifdef HAVE_DHCP6
@@ -414,21 +414,21 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 		    }
 		}
 #endif
-	      
+
 	      buf = grab_extradata_lua(buf, end, "supplied_hostname");
-	      
+
 	      if (!is6)
 		{
 		  buf = grab_extradata_lua(buf, end, "cpewan_oui");
-		  buf = grab_extradata_lua(buf, end, "cpewan_serial");   
+		  buf = grab_extradata_lua(buf, end, "cpewan_serial");
 		  buf = grab_extradata_lua(buf, end, "cpewan_class");
 		  buf = grab_extradata_lua(buf, end, "circuit_id");
 		  buf = grab_extradata_lua(buf, end, "subscriber_id");
 		  buf = grab_extradata_lua(buf, end, "remote_id");
 		}
-	      
+
 	      buf = grab_extradata_lua(buf, end, "tags");
-	      
+
 	      if (is6)
 		buf = grab_extradata_lua(buf, end, "relay_address");
 	      else if (data.giaddr.s_addr != 0)
@@ -436,34 +436,34 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 		  lua_pushstring(lua, inet_ntoa(data.giaddr));
 		  lua_setfield(lua, -2, "relay_address");
 		}
-	      
+
 	      for (i = 0; buf; i++)
 		{
 		  sprintf(daemon->dhcp_buff2, "user_class%i", i);
 		  buf = grab_extradata_lua(buf, end, daemon->dhcp_buff2);
 		}
-	      
+
 	      if (data.action != ACTION_DEL && data.remaining_time != 0)
 		{
 		  lua_pushnumber(lua, data.remaining_time);
 		  lua_setfield(lua, -2, "time_remaining");
 		}
-	      
+
 	      if (data.action == ACTION_OLD_HOSTNAME && hostname)
 		{
 		  lua_pushstring(lua, hostname);
 		  lua_setfield(lua, -2, "old_hostname");
 		}
-	      
+
 	      if (!is6 || data.hwaddr_len != 0)
 		{
 		  lua_pushstring(lua, daemon->dhcp_buff);
 		  lua_setfield(lua, -2, "mac_address");
 		}
-	      
+
 	      lua_pushstring(lua, daemon->addrbuff);
 	      lua_setfield(lua, -2, "ip_address");
-	    
+
 	      lua_call(lua, 2, 0);	/* pass 2 values, expect 0 */
 	    }
 	}
@@ -476,7 +476,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
       /* Pipe to capture stdout and stderr from script */
       if (!option_bool(OPT_DEBUG) && pipe(pipeout) == -1)
 	continue;
-      
+
       /* possible fork errors are all temporary resource problems */
       while ((pid = fork()) == -1 && (errno == EAGAIN || errno == ENOMEM))
 	sleep(2);
@@ -490,16 +490,16 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 	    }
 	  continue;
         }
-      
+
       /* wait for child to complete */
       if (pid != 0)
 	{
 	  if (!option_bool(OPT_DEBUG))
 	    {
 	      FILE *fp;
-	  
+
 	      close(pipeout[1]);
-	      
+
 	      /* Read lines sent to stdout/err by the script and pass them back to be logged */
 	      if (!(fp = fdopen(pipeout[0], "r")))
 		close(pipeout[0]);
@@ -520,13 +520,13 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 		  fclose(fp);
 		}
 	    }
-	  
+
 	  /* reap our children's children, if necessary */
 	  while (1)
 	    {
 	      int status;
 	      pid_t rc = wait(&status);
-	      
+
 	      if (rc == pid)
 		{
 		  /* On error send event back to main process for logging */
@@ -536,11 +536,11 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 		    send_event(event_fd, EVENT_EXITED, WEXITSTATUS(status), NULL);
 		  break;
 		}
-	      
+
 	      if (rc == -1 && errno != EINTR)
 		break;
 	    }
-	  
+
 	  continue;
 	}
 
@@ -552,31 +552,31 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 	  dup2(pipeout[1], STDERR_FILENO);
 	  close(pipeout[1]);
 	}
-      
+
       if (data.action != ACTION_TFTP && data.action != ACTION_ARP)
 	{
 #ifdef HAVE_DHCP6
 	  my_setenv("DNSMASQ_IAID", is6 ? daemon->dhcp_buff3 : NULL, &err);
-	  my_setenv("DNSMASQ_SERVER_DUID", is6 ? daemon->dhcp_packet.iov_base : NULL, &err); 
+	  my_setenv("DNSMASQ_SERVER_DUID", is6 ? daemon->dhcp_packet.iov_base : NULL, &err);
 	  my_setenv("DNSMASQ_MAC", is6 && data.hwaddr_len != 0 ? daemon->dhcp_buff : NULL, &err);
 #endif
-	  
+
 	  my_setenv("DNSMASQ_CLIENT_ID", !is6 && data.clid_len != 0 ? daemon->packet : NULL, &err);
 	  my_setenv("DNSMASQ_INTERFACE", strlen(data.interface) != 0 ? data.interface : NULL, &err);
-	  
+
 #ifdef HAVE_BROKEN_RTC
 	  sprintf(daemon->dhcp_buff2, "%u", data.length);
 	  my_setenv("DNSMASQ_LEASE_LENGTH", daemon->dhcp_buff2, &err);
 #else
 	  sprintf(daemon->dhcp_buff2, "%lu", (unsigned long)data.expires);
-	  my_setenv("DNSMASQ_LEASE_EXPIRES", daemon->dhcp_buff2, &err); 
+	  my_setenv("DNSMASQ_LEASE_EXPIRES", daemon->dhcp_buff2, &err);
 #endif
-	  
+
 	  my_setenv("DNSMASQ_DOMAIN", domain, &err);
-	  
+
 	  end = extradata + data.ed_len;
 	  buf = extradata;
-	  
+
 	  if (!is6)
 	    buf = grab_extradata(buf, end, "DNSMASQ_VENDOR_CLASS", &err);
 #ifdef HAVE_DHCP6
@@ -593,43 +593,43 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
 		}
 	    }
 #endif
-	  
+
 	  buf = grab_extradata(buf, end, "DNSMASQ_SUPPLIED_HOSTNAME", &err);
-	  
+
 	  if (!is6)
 	    {
 	      buf = grab_extradata(buf, end, "DNSMASQ_CPEWAN_OUI", &err);
-	      buf = grab_extradata(buf, end, "DNSMASQ_CPEWAN_SERIAL", &err);   
+	      buf = grab_extradata(buf, end, "DNSMASQ_CPEWAN_SERIAL", &err);
 	      buf = grab_extradata(buf, end, "DNSMASQ_CPEWAN_CLASS", &err);
 	      buf = grab_extradata(buf, end, "DNSMASQ_CIRCUIT_ID", &err);
 	      buf = grab_extradata(buf, end, "DNSMASQ_SUBSCRIBER_ID", &err);
 	      buf = grab_extradata(buf, end, "DNSMASQ_REMOTE_ID", &err);
 	      buf = grab_extradata(buf, end, "DNSMASQ_REQUESTED_OPTIONS", &err);
 	    }
-	  
+
 	  buf = grab_extradata(buf, end, "DNSMASQ_TAGS", &err);
 
 	  if (is6)
 	    buf = grab_extradata(buf, end, "DNSMASQ_RELAY_ADDRESS", &err);
-	  else 
-	    my_setenv("DNSMASQ_RELAY_ADDRESS", data.giaddr.s_addr != 0 ? inet_ntoa(data.giaddr) : NULL, &err); 
-	  
+	  else
+	    my_setenv("DNSMASQ_RELAY_ADDRESS", data.giaddr.s_addr != 0 ? inet_ntoa(data.giaddr) : NULL, &err);
+
 	  for (i = 0; buf; i++)
 	    {
 	      sprintf(daemon->dhcp_buff2, "DNSMASQ_USER_CLASS%i", i);
 	      buf = grab_extradata(buf, end, daemon->dhcp_buff2, &err);
 	    }
-	  
+
 	  sprintf(daemon->dhcp_buff2, "%u", data.remaining_time);
 	  my_setenv("DNSMASQ_TIME_REMAINING", data.action != ACTION_DEL && data.remaining_time != 0 ? daemon->dhcp_buff2 : NULL, &err);
-	  
+
 	  my_setenv("DNSMASQ_OLD_HOSTNAME", data.action == ACTION_OLD_HOSTNAME ? hostname : NULL, &err);
 	  if (data.action == ACTION_OLD_HOSTNAME)
 	    hostname = NULL;
-	  
+
 	  my_setenv("DNSMASQ_LOG_DHCP", option_bool(OPT_LOG_OPTS) ? "1" : NULL, &err);
 	}
-      
+
       /* we need to have the event_fd around if exec fails */
       if ((i = fcntl(event_fd, F_GETFD)) != -1)
 	fcntl(event_fd, F_SETFD, i | FD_CLOEXEC);
@@ -638,15 +638,15 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
       p =  strrchr(daemon->lease_change_command, '/');
       if (err == 0)
 	{
-	  execl(daemon->lease_change_command, 
-		p ? p+1 : daemon->lease_change_command, action_str, 
-		(is6 && data.action != ACTION_ARP) ? daemon->packet : daemon->dhcp_buff, 
+	  execl(daemon->lease_change_command,
+		p ? p+1 : daemon->lease_change_command, action_str,
+		(is6 && data.action != ACTION_ARP) ? daemon->packet : daemon->dhcp_buff,
 		daemon->addrbuff, hostname, (char*)NULL);
 	  err = errno;
 	}
       /* failed, send event so the main process logs the problem */
       send_event(event_fd, EVENT_EXEC_ERR, err, NULL);
-      _exit(0); 
+      _exit(0);
     }
 }
 
@@ -660,7 +660,7 @@ static void my_setenv(const char *name, const char *value, int *error)
 	*error = errno;
     }
 }
- 
+
 static unsigned char *grab_extradata(unsigned char *buf, unsigned char *end,  char *env, int *err)
 {
   unsigned char *next = NULL;
@@ -686,9 +686,9 @@ static unsigned char *grab_extradata(unsigned char *buf, unsigned char *end,  ch
 	  val = (char *)buf;
 	}
     }
-  
+
   my_setenv(env, val, err);
-   
+
   return next ? next + 1 : NULL;
 }
 
@@ -703,7 +703,7 @@ static unsigned char *grab_extradata_lua(unsigned char *buf, unsigned char *end,
   for (next = buf; *next != 0; next++)
     if (next == end)
       return NULL;
-  
+
   if (next != buf)
     {
       lua_pushstring(lua,  (char *)buf);
@@ -719,7 +719,7 @@ static void buff_alloc(size_t size)
   if (size > buf_size)
     {
       struct script_data *new;
-      
+
       /* start with reasonable size, will almost never need extending. */
       if (size < sizeof(struct script_data) + 200)
 	size = sizeof(struct script_data) + 200;
@@ -733,13 +733,13 @@ static void buff_alloc(size_t size)
     }
 }
 
-/* pack up lease data into a buffer */    
+/* pack up lease data into a buffer */
 void queue_script(int action, struct dhcp_lease *lease, char *hostname, time_t now)
 {
   unsigned char *p;
   unsigned int hostname_len = 0, clid_len = 0, ed_len = 0;
   int fd = daemon->dhcpfd;
-#ifdef HAVE_DHCP6 
+#ifdef HAVE_DHCP6
   if (!daemon->dhcp)
     fd = daemon->dhcp6fd;
 #endif
@@ -759,7 +759,7 @@ void queue_script(int action, struct dhcp_lease *lease, char *hostname, time_t n
 
   buf->action = action;
   buf->flags = lease->flags;
-#ifdef HAVE_DHCP6 
+#ifdef HAVE_DHCP6
   buf->vendorclass_count = lease->vendorclass_count;
   buf->addr6 = lease->addr6;
   buf->iaid = lease->iaid;
@@ -774,8 +774,8 @@ void queue_script(int action, struct dhcp_lease *lease, char *hostname, time_t n
   memcpy(buf->hwaddr, lease->hwaddr, DHCP_CHADDR_MAX);
   if (!indextoname(fd, lease->last_interface, buf->interface))
     buf->interface[0] = 0;
-  
-#ifdef HAVE_BROKEN_RTC 
+
+#ifdef HAVE_BROKEN_RTC
   buf->length = lease->length;
 #else
   buf->expires = lease->expires;
@@ -814,7 +814,7 @@ void queue_tftp(off_t file_len, char *filename, union mysockaddr *peer)
   /* no script */
   if (daemon->helperfd == -1)
     return;
-  
+
   filename_len = strlen(filename) + 1;
   buff_alloc(sizeof(struct script_data) +  filename_len);
   memset(buf, 0, sizeof(struct script_data));
@@ -831,7 +831,7 @@ void queue_tftp(off_t file_len, char *filename, union mysockaddr *peer)
 #endif
 
   memcpy((unsigned char *)(buf+1), filename, filename_len);
-  
+
   bytes_in_buf = sizeof(struct script_data) +  filename_len;
 }
 #endif
@@ -841,22 +841,22 @@ void queue_arp(int action, unsigned char *mac, int maclen, int family, struct al
   /* no script */
   if (daemon->helperfd == -1)
     return;
-  
+
   buff_alloc(sizeof(struct script_data));
   memset(buf, 0, sizeof(struct script_data));
 
   buf->action = action;
   buf->hwaddr_len = maclen;
-  buf->hwaddr_type =  ARPHRD_ETHER; 
+  buf->hwaddr_type =  ARPHRD_ETHER;
   if ((buf->flags = family) == AF_INET)
     buf->addr = addr->addr.addr4;
 #ifdef HAVE_IPV6
   else
     buf->addr6 = addr->addr.addr6;
 #endif
-  
+
   memcpy(buf->hwaddr, mac, maclen);
-  
+
   bytes_in_buf = sizeof(struct script_data);
 }
 
@@ -871,11 +871,11 @@ void helper_write(void)
 
   if (bytes_in_buf == 0)
     return;
-  
+
   if ((rc = write(daemon->helperfd, buf, bytes_in_buf)) != -1)
     {
       if (bytes_in_buf != (size_t)rc)
-	memmove(buf, buf + rc, bytes_in_buf - rc); 
+	memmove(buf, buf + rc, bytes_in_buf - rc);
       bytes_in_buf -= rc;
     }
   else
diff --git a/src/inotify.c b/src/inotify.c
index b5a17dd..78a3f67 100644
--- a/src/inotify.c
+++ b/src/inotify.c
@@ -1,15 +1,15 @@
 /* dnsmasq is Copyright (c) 2000-2017 Simon Kelley
- 
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -21,16 +21,16 @@
 #include <sys/param.h> /* For MAXSYMLINKS */
 
 /* the strategy is to set a inotify on the directories containing
-   resolv files, for any files in the directory which are close-write 
+   resolv files, for any files in the directory which are close-write
    or moved into the directory.
-   
+
    When either of those happen, we look to see if the file involved
    is actually a resolv-file, and if so, call poll-resolv with
    the "force" argument, to ensure it's read.
 
    This adds one new error condition: the directories containing
    all specified resolv-files must exist at start-up, even if the actual
-   files don't. 
+   files don't.
 */
 
 static char *inotify_buffer;
@@ -49,7 +49,7 @@ static char *my_readlink(char *path)
     {
       buf = safe_malloc(size);
       rc = readlink(path, buf, (size_t)size);
-      
+
       if (rc == -1)
 	{
 	  /* Not link or doesn't exist. */
@@ -64,7 +64,7 @@ static char *my_readlink(char *path)
       else if (rc < size-1)
 	{
 	  char *d;
-	  
+
 	  buf[rc] = 0;
 	  if (buf[0] != '/' && ((d = strrchr(path, '/'))))
 	    {
@@ -90,13 +90,13 @@ void inotify_dnsmasq_init()
   struct resolvc *res;
   inotify_buffer = safe_malloc(INOTIFY_SZ);
   daemon->inotifyfd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
-  
+
   if (daemon->inotifyfd == -1)
     die(_("failed to create inotify: %s"), NULL, EC_MISC);
 
   if (option_bool(OPT_NO_RESOLV))
     return;
-  
+
   for (res = daemon->resolv_files; res; res = res->next)
     {
       char *d, *new_path, *path = safe_malloc(strlen(res->name) + 1);
@@ -122,14 +122,14 @@ void inotify_dnsmasq_init()
 
 	  res->file = d+1; /* pointer to filename */
 	  *d = '/';
-	  
+
 	  if (res->wd == -1 && errno == ENOENT)
 	    die(_("directory %s for resolv-file is missing, cannot poll"), res->name, EC_MISC);
-	}	  
-	 
+	}
+
       if (res->wd == -1)
 	die(_("failed to create inotify for %s: %s"), res->name, EC_MISC);
-	
+
     }
 }
 
@@ -138,23 +138,23 @@ void inotify_dnsmasq_init()
 void set_dynamic_inotify(int flag, int total_size, struct crec **rhash, int revhashsz)
 {
   struct hostsfile *ah;
-  
+
   for (ah = daemon->dynamic_dirs; ah; ah = ah->next)
     {
       DIR *dir_stream = NULL;
       struct dirent *ent;
       struct stat buf;
-     
+
       if (!(ah->flags & flag))
 	continue;
- 
+
       if (stat(ah->fname, &buf) == -1 || !(S_ISDIR(buf.st_mode)))
 	{
-	  my_syslog(LOG_ERR, _("bad dynamic directory %s: %s"), 
+	  my_syslog(LOG_ERR, _("bad dynamic directory %s: %s"),
 		    ah->fname, strerror(errno));
 	  continue;
 	}
-      
+
        if (!(ah->flags & AH_WD_DONE))
 	 {
 	   ah->wd = inotify_add_watch(daemon->inotifyfd, ah->fname, IN_CLOSE_WRITE | IN_MOVED_TO);
@@ -175,20 +175,20 @@ void set_dynamic_inotify(int flag, int total_size, struct crec **rhash, int revh
 	   size_t lendir = strlen(ah->fname);
 	   size_t lenfile = strlen(ent->d_name);
 	   char *path;
-	   
+
 	   /* ignore emacs backups and dotfiles */
-	   if (lenfile == 0 || 
+	   if (lenfile == 0 ||
 	       ent->d_name[lenfile - 1] == '~' ||
 	       (ent->d_name[0] == '#' && ent->d_name[lenfile - 1] == '#') ||
 	       ent->d_name[0] == '.')
 	     continue;
-	   
+
 	   if ((path = whine_malloc(lendir + lenfile + 2)))
 	     {
 	       strcpy(path, ah->fname);
 	       strcat(path, "/");
 	       strcat(path, ent->d_name);
-	       
+
 	       /* ignore non-regular files */
 	       if (stat(path, &buf) != -1 && S_ISREG(buf.st_mode))
 		 {
@@ -197,7 +197,7 @@ void set_dynamic_inotify(int flag, int total_size, struct crec **rhash, int revh
 #ifdef HAVE_DHCP
 		   else if (ah->flags & (AH_DHCP_HST | AH_DHCP_OPT))
 		     option_read_dynfile(path, ah->flags);
-#endif		   
+#endif
 		 }
 
 	       free(path);
@@ -221,49 +221,49 @@ int inotify_check(time_t now)
       struct inotify_event *in;
 
       while ((rc = read(daemon->inotifyfd, inotify_buffer, INOTIFY_SZ)) == -1 && errno == EINTR);
-      
+
       if (rc <= 0)
 	break;
-      
-      for (p = inotify_buffer; rc - (p - inotify_buffer) >= (int)sizeof(struct inotify_event); p += sizeof(struct inotify_event) + in->len) 
+
+      for (p = inotify_buffer; rc - (p - inotify_buffer) >= (int)sizeof(struct inotify_event); p += sizeof(struct inotify_event) + in->len)
 	{
 	  in = (struct inotify_event*)p;
-	  
+
 	  for (res = daemon->resolv_files; res; res = res->next)
 	    if (res->wd == in->wd && in->len != 0 && strcmp(res->file, in->name) == 0)
 	      hit = 1;
 
 	  /* ignore emacs backups and dotfiles */
-	  if (in->len == 0 || 
+	  if (in->len == 0 ||
 	      in->name[in->len - 1] == '~' ||
 	      (in->name[0] == '#' && in->name[in->len - 1] == '#') ||
 	      in->name[0] == '.')
 	    continue;
-	  
+
 	  for (ah = daemon->dynamic_dirs; ah; ah = ah->next)
 	    if (ah->wd == in->wd)
 	      {
 		size_t lendir = strlen(ah->fname);
 		char *path;
-		
+
 		if ((path = whine_malloc(lendir + in->len + 2)))
 		  {
 		    strcpy(path, ah->fname);
 		    strcat(path, "/");
 		    strcat(path, in->name);
-		     
+
 		    my_syslog(LOG_INFO, _("inotify, new or changed file %s"), path);
 
 		    if (ah->flags & AH_HOSTS)
 		      {
 			read_hostsfile(path, ah->index, 0, NULL, 0);
 #ifdef HAVE_DHCP
-			if (daemon->dhcp || daemon->doing_dhcp6) 
+			if (daemon->dhcp || daemon->doing_dhcp6)
 			  {
 			    /* Propagate the consequences of loading a new dhcp-host */
 			    dhcp_update_configs(daemon->dhcp_conf);
-			    lease_update_from_configs(); 
-			    lease_update_file(now); 
+			    lease_update_from_configs();
+			    lease_update_file(now);
 			    lease_update_dns(1);
 			  }
 #endif
@@ -275,15 +275,15 @@ int inotify_check(time_t now)
 			  {
 			    /* Propagate the consequences of loading a new dhcp-host */
 			    dhcp_update_configs(daemon->dhcp_conf);
-			    lease_update_from_configs(); 
-			    lease_update_file(now); 
+			    lease_update_from_configs();
+			    lease_update_file(now);
 			    lease_update_dns(1);
 			  }
 		      }
 		    else if (ah->flags & AH_DHCP_OPT)
 		      option_read_dynfile(path, AH_DHCP_OPT);
 #endif
-		    
+
 		    free(path);
 		  }
 	      }
@@ -293,4 +293,4 @@ int inotify_check(time_t now)
 }
 
 #endif  /* INOTIFY */
-  
+
diff --git a/src/ip6addr.h b/src/ip6addr.h
index 82f2a57..3a9550a 100644
--- a/src/ip6addr.h
+++ b/src/ip6addr.h
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
diff --git a/src/ipset.c b/src/ipset.c
index 3a5ecc5..3093df1 100644
--- a/src/ipset.c
+++ b/src/ipset.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -90,10 +90,10 @@ void ipset_init(void)
   struct utsname utsname;
   int version;
   char *split;
-  
+
   if (uname(&utsname) < 0)
     die(_("failed to find kernel version: %s"), NULL, EC_MISC);
-  
+
   split = strtok(utsname.release, ".");
   version = (split ? atoi(split) : 0);
   split = strtok(NULL, ".");
@@ -101,16 +101,16 @@ void ipset_init(void)
   split = strtok(NULL, ".");
   version = version * 256 + (split ? atoi(split) : 0);
   old_kernel = (version < KERNEL_VERSION(2,6,32));
-  
+
   if (old_kernel && (ipset_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) != -1)
     return;
-  
-  if (!old_kernel && 
+
+  if (!old_kernel &&
       (buffer = safe_malloc(BUFF_SZ)) &&
       (ipset_sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_NETFILTER)) != -1 &&
       (bind(ipset_sock, (struct sockaddr *)&snl, sizeof(snl)) != -1))
     return;
-  
+
   die (_("failed to create IPset control socket: %s"), NULL, EC_MISC);
 }
 
@@ -126,26 +126,26 @@ static int new_add_to_ipset(const char *setname, const struct all_addr *ipaddr,
   if (af == AF_INET6)
     addrsz = IN6ADDRSZ;
 #endif
-    
-  if (strlen(setname) >= IPSET_MAXNAMELEN) 
+
+  if (strlen(setname) >= IPSET_MAXNAMELEN)
     {
       errno = ENAMETOOLONG;
       return -1;
     }
-  
+
   memset(buffer, 0, BUFF_SZ);
 
   nlh = (struct nlmsghdr *)buffer;
   nlh->nlmsg_len = NL_ALIGN(sizeof(struct nlmsghdr));
   nlh->nlmsg_type = (remove ? IPSET_CMD_DEL : IPSET_CMD_ADD) | (NFNL_SUBSYS_IPSET << 8);
   nlh->nlmsg_flags = NLM_F_REQUEST;
-  
+
   nfg = (struct my_nfgenmsg *)(buffer + nlh->nlmsg_len);
   nlh->nlmsg_len += NL_ALIGN(sizeof(struct my_nfgenmsg));
   nfg->nfgen_family = af;
   nfg->version = NFNETLINK_V0;
   nfg->res_id = htons(0);
-  
+
   proto = IPSET_PROTOCOL;
   add_attr(nlh, IPSET_ATTR_PROTOCOL, sizeof(proto), &proto);
   add_attr(nlh, IPSET_ATTR_SETNAME, strlen(setname) + 1, setname);
@@ -155,15 +155,15 @@ static int new_add_to_ipset(const char *setname, const struct all_addr *ipaddr,
   nested[1] = (struct my_nlattr *)(buffer + NL_ALIGN(nlh->nlmsg_len));
   nlh->nlmsg_len += NL_ALIGN(sizeof(struct my_nlattr));
   nested[1]->nla_type = NLA_F_NESTED | IPSET_ATTR_IP;
-  add_attr(nlh, 
+  add_attr(nlh,
 	   (af == AF_INET ? IPSET_ATTR_IPADDR_IPV4 : IPSET_ATTR_IPADDR_IPV6) | NLA_F_NET_BYTEORDER,
 	   addrsz, &ipaddr->addr);
   nested[1]->nla_len = (void *)buffer + NL_ALIGN(nlh->nlmsg_len) - (void *)nested[1];
   nested[0]->nla_len = (void *)buffer + NL_ALIGN(nlh->nlmsg_len) - (void *)nested[0];
-	
+
   while (retry_send(sendto(ipset_sock, buffer, nlh->nlmsg_len, 0,
 			   (struct sockaddr *)&snl, sizeof(snl))));
-								    
+
   return errno == 0 ? 0 : -1;
 }
 
@@ -185,13 +185,13 @@ static int old_add_to_ipset(const char *setname, const struct all_addr *ipaddr,
     uint16_t index;
     uint32_t ip;
   } req_adt;
-  
-  if (strlen(setname) >= sizeof(req_adt_get.set.name)) 
+
+  if (strlen(setname) >= sizeof(req_adt_get.set.name))
     {
       errno = ENAMETOOLONG;
       return -1;
     }
-  
+
   req_adt_get.op = 0x10;
   req_adt_get.version = 3;
   strcpy(req_adt_get.set.name, setname);
@@ -203,7 +203,7 @@ static int old_add_to_ipset(const char *setname, const struct all_addr *ipaddr,
   req_adt.ip = ntohl(ipaddr->addr.addr4.s_addr);
   if (setsockopt(ipset_sock, SOL_IP, 83, &req_adt, sizeof(req_adt)) < 0)
     return -1;
-  
+
   return 0;
 }
 
@@ -225,8 +225,8 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr, int flags,
 	}
     }
 #endif
-  
-  if (ret != -1) 
+
+  if (ret != -1)
     ret = old_kernel ? old_add_to_ipset(setname, ipaddr, remove) : new_add_to_ipset(setname, ipaddr, af, remove);
 
   if (ret == -1)
diff --git a/src/lease.c b/src/lease.c
index 634372d..4fa3f4b 100644
--- a/src/lease.c
+++ b/src/lease.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -45,7 +45,7 @@ static int read_leases(time_t now, FILE *leasestream)
       {
 	*daemon->namebuff = *daemon->dhcp_buff = *daemon->packet = '\0';
 	hw_len = hw_type = clid_len = 0;
-	
+
 #ifdef HAVE_DHCP6
 	if (strcmp(daemon->dhcp_buff3, "duid") == 0)
 	  {
@@ -57,20 +57,20 @@ static int read_leases(time_t now, FILE *leasestream)
 	    continue;
 	  }
 #endif
-	
+
 	if (fscanf(leasestream, " %64s %255s %764s",
 		   daemon->namebuff, daemon->dhcp_buff, daemon->packet) != 3)
 	  return 0;
-	
+
 	if (inet_pton(AF_INET, daemon->namebuff, &addr.addr.addr4))
 	  {
 	    if ((lease = lease4_allocate(addr.addr.addr4)))
 	      domain = get_domain(lease->addr);
-	    
+
 	    hw_len = parse_hex(daemon->dhcp_buff2, (unsigned char *)daemon->dhcp_buff2, DHCP_CHADDR_MAX, NULL, &hw_type);
 	    /* For backwards compatibility, no explicit MAC address type means ether. */
 	    if (hw_type == 0 && hw_len != 0)
-	      hw_type = ARPHRD_ETHER; 
+	      hw_type = ARPHRD_ETHER;
 	  }
 #ifdef HAVE_DHCP6
 	else if (inet_pton(AF_INET6, daemon->namebuff, &addr.addr.addr6))
@@ -83,7 +83,7 @@ static int read_leases(time_t now, FILE *leasestream)
 		lease_type = LEASE_TA;
 		s++;
 	      }
-	    
+
 	    if ((lease = lease6_allocate(&addr.addr.addr6, lease_type)))
 	      {
 		lease_set_iaid(lease, strtoul(s, NULL, 10));
@@ -99,10 +99,10 @@ static int read_leases(time_t now, FILE *leasestream)
 
 	if (strcmp(daemon->packet, "*") != 0)
 	  clid_len = parse_hex(daemon->packet, (unsigned char *)daemon->packet, 255, NULL, NULL);
-	
-	lease_set_hwaddr(lease, (unsigned char *)daemon->dhcp_buff2, (unsigned char *)daemon->packet, 
+
+	lease_set_hwaddr(lease, (unsigned char *)daemon->dhcp_buff2, (unsigned char *)daemon->packet,
 			 hw_len, hw_type, clid_len, now, 0);
-	
+
 	if (strcmp(daemon->dhcp_buff, "*") !=  0)
 	  lease_set_hostname(lease, daemon->dhcp_buff, 0, domain, NULL);
 
@@ -119,14 +119,14 @@ static int read_leases(time_t now, FILE *leasestream)
 	   even when sizeof(time_t) == 8 */
 	lease->expires = (time_t)ei;
 #endif
-	
+
 	/* set these correctly: the "old" events are generated later from
 	   the startup synthesised SIGHUP. */
 	lease->flags &= ~(LEASE_NEW | LEASE_CHANGED);
-	
+
 	*daemon->dhcp_buff3 = *daemon->dhcp_buff2 = '\0';
       }
-    
+
     return (items == 0 || items == EOF);
 }
 
@@ -179,7 +179,7 @@ void lease_init(time_t now)
       if (ferror(leasestream))
 	die(_("failed to read lease file %s: %s"), daemon->lease_file, EC_FILE);
     }
-  
+
 #ifdef HAVE_SCRIPT
   if (!daemon->lease_stream)
     {
@@ -195,7 +195,7 @@ void lease_init(time_t now)
 
 	  die(_("cannot run lease-init script %s: %s"), daemon->lease_change_command, EC_FILE);
 	}
-      
+
       if (WEXITSTATUS(rc) != 0)
 	{
 	  sprintf(daemon->dhcp_buff, "%d", WEXITSTATUS(rc));
@@ -213,16 +213,16 @@ void lease_init(time_t now)
 void lease_update_from_configs(void)
 {
   /* changes to the config may change current leases. */
-  
+
   struct dhcp_lease *lease;
   struct dhcp_config *config;
   char *name;
-  
+
   for (lease = leases; lease; lease = lease->next)
     if (lease->flags & (LEASE_TA | LEASE_NA))
       continue;
-    else if ((config = find_config(daemon->dhcp_conf, NULL, lease->clid, lease->clid_len, 
-				   lease->hwaddr, lease->hwaddr_len, lease->hwaddr_type, NULL)) && 
+    else if ((config = find_config(daemon->dhcp_conf, NULL, lease->clid, lease->clid_len,
+				   lease->hwaddr, lease->hwaddr_len, lease->hwaddr_type, NULL)) &&
 	     (config->flags & CONFIG_NAME) &&
 	     (!(config->flags & CONFIG_ADDR) || config->addr.s_addr == lease->addr.s_addr))
       lease_set_hostname(lease, config->hostname, 1, get_domain(lease->addr), NULL);
@@ -233,7 +233,7 @@ void lease_update_from_configs(void)
 static void ourprintf(int *errp, char *format, ...)
 {
   va_list ap;
-  
+
   va_start(ap, format);
   if (!(*errp) && vfprintf(daemon->lease_stream, format, ap) < 0)
     *errp = errno;
@@ -252,7 +252,7 @@ void lease_update_file(time_t now)
       rewind(daemon->lease_stream);
       if (errno != 0 || ftruncate(fileno(daemon->lease_stream), 0) != 0)
 	err = errno;
-      
+
       for (lease = leases; lease; lease = lease->next)
 	{
 
@@ -267,7 +267,7 @@ void lease_update_file(time_t now)
 	  ourprintf(&err, "%lu ", (unsigned long)lease->expires);
 #endif
 
-	  if (lease->hwaddr_type != ARPHRD_ETHER || lease->hwaddr_len == 0) 
+	  if (lease->hwaddr_type != ARPHRD_ETHER || lease->hwaddr_len == 0)
 	    ourprintf(&err, "%.2x-", lease->hwaddr_type);
 	  for (i = 0; i < lease->hwaddr_len; i++)
 	    {
@@ -275,12 +275,12 @@ void lease_update_file(time_t now)
 	      if (i != lease->hwaddr_len - 1)
 		ourprintf(&err, ":");
 	    }
-	  
-	  inet_ntop(AF_INET, &lease->addr, daemon->addrbuff, ADDRSTRLEN); 
+
+	  inet_ntop(AF_INET, &lease->addr, daemon->addrbuff, ADDRSTRLEN);
 
 	  ourprintf(&err, " %s ", daemon->addrbuff);
 	  ourprintf(&err, "%s ", lease->hostname ? lease->hostname : "*");
-	  	  
+
 	  if (lease->clid && lease->clid_len != 0)
 	    {
 	      for (i = 0; i < lease->clid_len - 1; i++)
@@ -288,20 +288,20 @@ void lease_update_file(time_t now)
 	      ourprintf(&err, "%.2x\n", lease->clid[i]);
 	    }
 	  else
-	    ourprintf(&err, "*\n");	  
+	    ourprintf(&err, "*\n");
 	}
-      
-#ifdef HAVE_DHCP6  
+
+#ifdef HAVE_DHCP6
       if (daemon->duid)
 	{
 	  ourprintf(&err, "duid ");
 	  for (i = 0; i < daemon->duid_len - 1; i++)
 	    ourprintf(&err, "%.2x:", daemon->duid[i]);
 	  ourprintf(&err, "%.2x\n", daemon->duid[i]);
-	  
+
 	  for (lease = leases; lease; lease = lease->next)
 	    {
-	      
+
 	      if (!(lease->flags & (LEASE_TA | LEASE_NA)))
 		continue;
 
@@ -310,13 +310,13 @@ void lease_update_file(time_t now)
 #else
 	      ourprintf(&err, "%lu ", (unsigned long)lease->expires);
 #endif
-    
+
 	      inet_ntop(AF_INET6, &lease->addr6, daemon->addrbuff, ADDRSTRLEN);
-	 
+
 	      ourprintf(&err, "%s%u %s ", (lease->flags & LEASE_TA) ? "T" : "",
 			lease->iaid, daemon->addrbuff);
 	      ourprintf(&err, "%s ", lease->hostname ? lease->hostname : "*");
-	      
+
 	      if (lease->clid && lease->clid_len != 0)
 		{
 		  for (i = 0; i < lease->clid_len - 1; i++)
@@ -324,19 +324,19 @@ void lease_update_file(time_t now)
 		  ourprintf(&err, "%.2x\n", lease->clid[i]);
 		}
 	      else
-		ourprintf(&err, "*\n");	  
+		ourprintf(&err, "*\n");
 	    }
 	}
-#endif      
-	  
+#endif
+
       if (fflush(daemon->lease_stream) != 0 ||
 	  fsync(fileno(daemon->lease_stream)) < 0)
 	err = errno;
-      
+
       if (!err)
 	file_dirty = 0;
     }
-  
+
   /* Set alarm for when the first lease expires. */
   next_event = 0;
 
@@ -345,13 +345,13 @@ void lease_update_file(time_t now)
   if (daemon->doing_ra)
     {
       time_t event;
-      
+
       if ((event = periodic_slaac(now, leases)) != 0)
 	{
 	  if (next_event == 0 || difftime(next_event, event) > 0.0)
 	    next_event = event;
 	}
-      
+
       if ((event = periodic_ra(now)) != 0)
 	{
 	  if (next_event == 0 || difftime(next_event, event) > 0.0)
@@ -364,13 +364,13 @@ void lease_update_file(time_t now)
     if (lease->expires != 0 &&
 	(next_event == 0 || difftime(next_event, lease->expires) > 0.0))
       next_event = lease->expires;
-   
+
   if (err)
     {
       if (next_event == 0 || difftime(next_event, LEASE_RETRY + now) > 0.0)
 	next_event = LEASE_RETRY + now;
-      
-      my_syslog(MS_DHCP | LOG_ERR, _("failed to write %s: %s (retry in %us)"), 
+
+      my_syslog(MS_DHCP | LOG_ERR, _("failed to write %s: %s (retry in %us)"),
 		daemon->lease_file, strerror(err),
 		(unsigned int)difftime(next_event, now));
     }
@@ -391,8 +391,8 @@ static int find_interface_v4(struct in_addr local, int if_index, char *label,
 
   for (lease = leases; lease; lease = lease->next)
     if (!(lease->flags & (LEASE_TA | LEASE_NA)) &&
-	is_same_net(local, lease->addr, netmask) && 
-	prefix > lease->new_prefixlen) 
+	is_same_net(local, lease->addr, netmask) &&
+	prefix > lease->new_prefixlen)
       {
 	lease->new_interface = if_index;
         lease->new_prefixlen = prefix;
@@ -403,7 +403,7 @@ static int find_interface_v4(struct in_addr local, int if_index, char *label,
 
 #ifdef HAVE_DHCP6
 static int find_interface_v6(struct in6_addr *local,  int prefix,
-			     int scope, int if_index, int flags, 
+			     int scope, int if_index, int flags,
 			     int preferred, int valid, void *vparam)
 {
   struct dhcp_lease *lease;
@@ -441,7 +441,7 @@ void lease_update_slaac(time_t now)
      new SLAAC addresses to existing leases. */
 
   struct dhcp_lease *lease;
-  
+
   if (daemon->dhcp)
     for (lease = leases; lease; lease = lease->next)
       slaac_add_addrs(lease, now, 0);
@@ -457,7 +457,7 @@ void lease_update_slaac(time_t now)
 void lease_find_interfaces(time_t now)
 {
   struct dhcp_lease *lease;
-  
+
   for (lease = leases; lease; lease = lease->next)
     lease->new_prefixlen = lease->new_interface = 0;
 
@@ -467,7 +467,7 @@ void lease_find_interfaces(time_t now)
 #endif
 
   for (lease = leases; lease; lease = lease->next)
-    if (lease->new_interface != 0) 
+    if (lease->new_interface != 0)
       lease_set_interface(lease, lease->new_interface, now);
 }
 
@@ -496,13 +496,13 @@ void lease_update_dns(int force)
       /* force transfer to authoritative secondaries */
       daemon->soa_sn++;
 #endif
-      
+
       cache_unhash_dhcp();
 
       for (lease = leases; lease; lease = lease->next)
 	{
 	  int prot = AF_INET;
-	  
+
 #ifdef HAVE_DHCP6
 	  if (lease->flags & (LEASE_TA | LEASE_NA))
 	    prot = AF_INET6;
@@ -519,26 +519,26 @@ void lease_update_dns(int force)
 		      cache_add_dhcp_entry(lease->hostname, AF_INET6, (struct all_addr *)&slaac->addr, lease->expires);
 		  }
 	    }
-	  
+
 	  if (lease->fqdn)
-	    cache_add_dhcp_entry(lease->fqdn, prot, 
+	    cache_add_dhcp_entry(lease->fqdn, prot,
 				 prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->addr6,
 				 lease->expires);
-	     
+
 	  if (!option_bool(OPT_DHCP_FQDN) && lease->hostname)
-	    cache_add_dhcp_entry(lease->hostname, prot, 
-				 prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->addr6, 
+	    cache_add_dhcp_entry(lease->hostname, prot,
+				 prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->addr6,
 				 lease->expires);
-       
+
 #else
 	  if (lease->fqdn)
 	    cache_add_dhcp_entry(lease->fqdn, prot, (struct all_addr *)&lease->addr, lease->expires);
-	  
+
 	  if (!option_bool(OPT_DHCP_FQDN) && lease->hostname)
 	    cache_add_dhcp_entry(lease->hostname, prot, (struct all_addr *)&lease->addr, lease->expires);
 #endif
 	}
-      
+
       dns_dirty = 0;
     }
 }
@@ -555,22 +555,22 @@ void lease_prune(struct dhcp_lease *target, time_t now)
 	  file_dirty = 1;
 	  if (lease->hostname)
 	    dns_dirty = 1;
-	  
+
  	  *up = lease->next; /* unlink */
-	  
+
 	  /* Put on old_leases list 'till we
 	     can run the script */
 	  lease->next = old_leases;
 	  old_leases = lease;
-	  
+
 	  leases_left++;
 	}
       else
 	up = &lease->next;
     }
-} 
-	
-  
+}
+
+
 struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr, int hw_len, int hw_type,
 					unsigned char *clid, int clid_len)
 {
@@ -587,15 +587,15 @@ struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr, int hw_len, int h
 	    memcmp(clid, lease->clid, clid_len) == 0)
 	  return lease;
       }
-  
-  for (lease = leases; lease; lease = lease->next)	
+
+  for (lease = leases; lease; lease = lease->next)
     {
 #ifdef HAVE_DHCP6
       if (lease->flags & (LEASE_TA | LEASE_NA))
 	continue;
-#endif   
-      if ((!lease->clid || !clid) && 
-	  hw_len != 0 && 
+#endif
+      if ((!lease->clid || !clid) &&
+	  hw_len != 0 &&
 	  lease->hwaddr_len == hw_len &&
 	  lease->hwaddr_type == hw_type &&
 	  memcmp(hwaddr, lease->hwaddr, hw_len) == 0)
@@ -614,7 +614,7 @@ struct dhcp_lease *lease_find_by_addr(struct in_addr addr)
 #ifdef HAVE_DHCP6
       if (lease->flags & (LEASE_TA | LEASE_NA))
 	continue;
-#endif  
+#endif
       if (lease->addr.s_addr == addr.s_addr)
 	return lease;
     }
@@ -624,11 +624,11 @@ struct dhcp_lease *lease_find_by_addr(struct in_addr addr)
 
 #ifdef HAVE_DHCP6
 /* find address for {CLID, IAID, address} */
-struct dhcp_lease *lease6_find(unsigned char *clid, int clid_len, 
+struct dhcp_lease *lease6_find(unsigned char *clid, int clid_len,
 			       int lease_type, int iaid, struct in6_addr *addr)
 {
   struct dhcp_lease *lease;
-  
+
   for (lease = leases; lease; lease = lease->next)
     {
       if (!(lease->flags & lease_type) || lease->iaid != iaid)
@@ -636,14 +636,14 @@ struct dhcp_lease *lease6_find(unsigned char *clid, int clid_len,
 
       if (!IN6_ARE_ADDR_EQUAL(&lease->addr6, addr))
 	continue;
-      
+
       if ((clid_len != lease->clid_len ||
 	   memcmp(clid, lease->clid, clid_len) != 0))
 	continue;
-      
+
       return lease;
     }
-  
+
   return NULL;
 }
 
@@ -651,7 +651,7 @@ struct dhcp_lease *lease6_find(unsigned char *clid, int clid_len,
 void lease6_reset(void)
 {
   struct dhcp_lease *lease;
-  
+
   for (lease = leases; lease; lease = lease->next)
     lease->flags &= ~LEASE_USED;
 }
@@ -673,40 +673,40 @@ struct dhcp_lease *lease6_find_by_client(struct dhcp_lease *first, int lease_typ
 
       if (!(lease->flags & lease_type) || lease->iaid != iaid)
 	continue;
- 
+
       if ((clid_len != lease->clid_len ||
 	   memcmp(clid, lease->clid, clid_len) != 0))
 	continue;
 
       return lease;
     }
-  
+
   return NULL;
 }
 
 struct dhcp_lease *lease6_find_by_addr(struct in6_addr *net, int prefix, u64 addr)
 {
   struct dhcp_lease *lease;
-    
+
   for (lease = leases; lease; lease = lease->next)
     {
       if (!(lease->flags & (LEASE_TA | LEASE_NA)))
 	continue;
-      
+
       if (is_same_net6(&lease->addr6, net, prefix) &&
 	  (prefix == 128 || addr6part(&lease->addr6) == addr))
 	return lease;
     }
-  
+
   return NULL;
-} 
+}
 
 /* Find largest assigned address in context */
 u64 lease_find_max_addr6(struct dhcp_context *context)
 {
   struct dhcp_lease *lease;
   u64 addr = addr6part(&context->start6);
-  
+
   if (!(context->flags & (CONTEXT_STATIC | CONTEXT_PROXY)))
     for (lease = leases; lease; lease = lease->next)
       {
@@ -719,7 +719,7 @@ u64 lease_find_max_addr6(struct dhcp_context *context)
 	    addr6part(&lease->addr6) > addr)
 	  addr = addr6part(&lease->addr6);
       }
-  
+
   return addr;
 }
 
@@ -730,7 +730,7 @@ struct in_addr lease_find_max_addr(struct dhcp_context *context)
 {
   struct dhcp_lease *lease;
   struct in_addr addr = context->start;
-  
+
   if (!(context->flags & (CONTEXT_STATIC | CONTEXT_PROXY)))
     for (lease = leases; lease; lease = lease->next)
       {
@@ -743,7 +743,7 @@ struct in_addr lease_find_max_addr(struct dhcp_context *context)
 	    ((unsigned)ntohl(lease->addr.s_addr)) > ((unsigned)ntohl(addr.s_addr)))
 	  addr = lease->addr;
       }
-  
+
   return addr;
 }
 
@@ -762,7 +762,7 @@ static struct dhcp_lease *lease_allocate(void)
   lease->hwaddr_len = 256; /* illegal value */
   lease->next = leases;
   leases = lease;
-  
+
   file_dirty = 1;
   leases_left--;
 
@@ -774,7 +774,7 @@ struct dhcp_lease *lease4_allocate(struct in_addr addr)
   struct dhcp_lease *lease = lease_allocate();
   if (lease)
     lease->addr = addr;
-  
+
   return lease;
 }
 
@@ -822,16 +822,16 @@ void lease_set_expires(struct dhcp_lease *lease, unsigned int len, time_t now)
       file_dirty = 1;
 #endif
     }
-  
+
 #ifdef HAVE_BROKEN_RTC
   if (len != lease->length)
     {
       lease->length = len;
       lease->flags |= LEASE_AUX_CHANGED;
-      file_dirty = 1; 
+      file_dirty = 1;
     }
 #endif
-} 
+}
 
 #ifdef HAVE_DHCP6
 void lease_set_iaid(struct dhcp_lease *lease, int iaid)
@@ -857,7 +857,7 @@ void lease_set_hwaddr(struct dhcp_lease *lease, const unsigned char *hwaddr,
   (void)now;
 
   if (hw_len != lease->hwaddr_len ||
-      hw_type != lease->hwaddr_type || 
+      hw_type != lease->hwaddr_type ||
       (hw_len != 0 && memcmp(lease->hwaddr, hwaddr, hw_len) != 0))
     {
       if (hw_len != 0)
@@ -885,7 +885,7 @@ void lease_set_hwaddr(struct dhcp_lease *lease, const unsigned char *hwaddr,
 	    return;
 #ifdef HAVE_DHCP6
 	  change = 1;
-#endif	   
+#endif
 	}
       else if (memcmp(lease->clid, clid, clid_len) != 0)
 	{
@@ -893,13 +893,13 @@ void lease_set_hwaddr(struct dhcp_lease *lease, const unsigned char *hwaddr,
 	  file_dirty = 1;
 #ifdef HAVE_DHCP6
 	  change = 1;
-#endif	
+#endif
 	}
-      
+
       lease->clid_len = clid_len;
       memcpy(lease->clid, clid, clid_len);
     }
-  
+
 #ifdef HAVE_DHCP6
   if (change)
     slaac_add_addrs(lease, now, force);
@@ -909,11 +909,11 @@ void lease_set_hwaddr(struct dhcp_lease *lease, const unsigned char *hwaddr,
 static void kill_name(struct dhcp_lease *lease)
 {
   /* run script to say we lost our old name */
-  
+
   /* this shouldn't happen unless updates are very quick and the
      script very slow, we just avoid a memory leak if it does. */
   free(lease->old_hostname);
-  
+
   /* If we know the fqdn, pass that. The helper will derive the
      unqualified name from it, free the unqualified name here. */
 
@@ -935,25 +935,25 @@ void lease_set_hostname(struct dhcp_lease *lease, const char *name, int auth, ch
 
   if (config_domain && (!domain || !hostname_isequal(domain, config_domain)))
     my_syslog(MS_DHCP | LOG_WARNING, _("Ignoring domain %s for DHCP host name %s"), config_domain, name);
-  
+
   if (lease->hostname && name && hostname_isequal(lease->hostname, name))
     {
       if (auth)
 	lease->flags |= LEASE_AUTH_NAME;
       return;
     }
-  
+
   if (!name && !lease->hostname)
     return;
 
   /* If a machine turns up on a new net without dropping the old lease,
      or two machines claim the same name, then we end up with two interfaces with
      the same name. Check for that here and remove the name from the old lease.
-     Note that IPv6 leases are different. All the leases to the same DUID are 
+     Note that IPv6 leases are different. All the leases to the same DUID are
      allowed the same name.
 
      Don't allow a name from the client to override a name from dnsmasq config. */
-  
+
   if (name)
     {
       if ((new_name = whine_malloc(strlen(name) + 1)))
@@ -966,7 +966,7 @@ void lease_set_hostname(struct dhcp_lease *lease, const char *name, int auth, ch
 	      strcat(new_fqdn, domain);
 	    }
 	}
-	  
+
       /* Depending on mode, we check either unqualified name or FQDN. */
       for (lease_tmp = leases; lease_tmp; lease_tmp = lease_tmp->next)
 	{
@@ -978,7 +978,7 @@ void lease_set_hostname(struct dhcp_lease *lease, const char *name, int auth, ch
 	  else
 	    {
 	      if (!new_name || !lease_tmp->hostname || !hostname_isequal(lease_tmp->hostname, new_name) )
-		continue; 
+		continue;
 	    }
 
 	  if (lease->flags & (LEASE_TA | LEASE_NA))
@@ -990,18 +990,18 @@ void lease_set_hostname(struct dhcp_lease *lease, const char *name, int auth, ch
 	      if (lease->clid_len == lease_tmp->clid_len &&
 		  lease->clid && lease_tmp->clid &&
 		  memcmp(lease->clid, lease_tmp->clid, lease->clid_len) == 0)
-		continue;	      
+		continue;
 	    }
 	  else if (lease_tmp->flags & (LEASE_TA | LEASE_NA))
 	    continue;
-		   
+
 	  if ((lease_tmp->flags & LEASE_AUTH_NAME) && !auth)
 	    {
 	      free(new_name);
 	      free(new_fqdn);
 	      return;
 	    }
-	
+
 	  kill_name(lease_tmp);
 	  break;
 	}
@@ -1012,12 +1012,12 @@ void lease_set_hostname(struct dhcp_lease *lease, const char *name, int auth, ch
 
   lease->hostname = new_name;
   lease->fqdn = new_fqdn;
-  
+
   if (auth)
     lease->flags |= LEASE_AUTH_NAME;
-  
+
   file_dirty = 1;
-  dns_dirty = 1; 
+  dns_dirty = 1;
   lease->flags |= LEASE_CHANGED; /* run script on change */
 }
 
@@ -1029,7 +1029,7 @@ void lease_set_interface(struct dhcp_lease *lease, int interface, time_t now)
     return;
 
   lease->last_interface = interface;
-  lease->flags |= LEASE_CHANGED; 
+  lease->flags |= LEASE_CHANGED;
 
 #ifdef HAVE_DHCP6
   slaac_add_addrs(lease, now, 0);
@@ -1039,9 +1039,9 @@ void lease_set_interface(struct dhcp_lease *lease, int interface, time_t now)
 void rerun_scripts(void)
 {
   struct dhcp_lease *lease;
-  
+
   for (lease = leases; lease; lease = lease->next)
-    lease->flags |= LEASE_CHANGED; 
+    lease->flags |= LEASE_CHANGED;
 }
 
 /* deleted leases get transferred to the old_leases list.
@@ -1065,7 +1065,7 @@ int do_script_run(time_t now)
   if (old_leases)
     {
       lease = old_leases;
-                  
+
       /* If the lease still has an old_hostname, do the "old" action on that first */
       if (lease->old_hostname)
 	{
@@ -1076,7 +1076,7 @@ int do_script_run(time_t now)
 	  lease->old_hostname = NULL;
 	  return 1;
 	}
-      else 
+      else
 	{
 #ifdef HAVE_DHCP6
 	  struct slaac_address *slaac, *tmp;
@@ -1094,20 +1094,20 @@ int do_script_run(time_t now)
 	  emit_dbus_signal(ACTION_DEL, lease, lease->old_hostname);
 #endif
 	  old_leases = lease->next;
-	  
-	  free(lease->old_hostname); 
+
+	  free(lease->old_hostname);
 	  free(lease->clid);
 	  free(lease->extradata);
 	  free(lease);
-	    
-	  return 1; 
+
+	  return 1;
 	}
     }
-  
+
   /* make sure we announce the loss of a hostname before its new location. */
   for (lease = leases; lease; lease = lease->next)
     if (lease->old_hostname)
-      {	
+      {
 #ifdef HAVE_SCRIPT
 	queue_script(ACTION_OLD_HOSTNAME, lease, lease->old_hostname, now);
 #endif
@@ -1115,13 +1115,13 @@ int do_script_run(time_t now)
 	lease->old_hostname = NULL;
 	return 1;
       }
-  
+
   for (lease = leases; lease; lease = lease->next)
-    if ((lease->flags & (LEASE_NEW | LEASE_CHANGED)) || 
+    if ((lease->flags & (LEASE_NEW | LEASE_CHANGED)) ||
 	((lease->flags & LEASE_AUX_CHANGED) && option_bool(OPT_LEASE_RO)))
       {
 #ifdef HAVE_SCRIPT
-	queue_script((lease->flags & LEASE_NEW) ? ACTION_ADD : ACTION_OLD, lease, 
+	queue_script((lease->flags & LEASE_NEW) ? ACTION_ADD : ACTION_OLD, lease,
 		     lease->fqdn ? lease->fqdn : lease->hostname, now);
 #endif
 #ifdef HAVE_DBUS
@@ -1129,11 +1129,11 @@ int do_script_run(time_t now)
 			 lease->fqdn ? lease->fqdn : lease->hostname);
 #endif
 	lease->flags &= ~(LEASE_NEW | LEASE_CHANGED | LEASE_AUX_CHANGED);
-	
+
 	/* this is used for the "add" call, then junked, since they're not in the database */
 	free(lease->extradata);
 	lease->extradata = NULL;
-	
+
 	return 1;
       }
 
@@ -1145,7 +1145,7 @@ int do_script_run(time_t now)
 void lease_add_extradata(struct dhcp_lease *lease, unsigned char *data, unsigned int len, int delim)
 {
   unsigned int i;
-  
+
   if (delim == -1)
     delim = 0;
   else
@@ -1156,15 +1156,15 @@ void lease_add_extradata(struct dhcp_lease *lease, unsigned char *data, unsigned
 	  len = i;
 	  break;
 	}
-  
+
   if ((lease->extradata_size - lease->extradata_len) < (len + 1))
     {
       size_t newsz = lease->extradata_len + len + 100;
       unsigned char *new = whine_malloc(newsz);
-  
+
       if (!new)
 	return;
-      
+
       if (lease->extradata)
 	{
 	  memcpy(new, lease->extradata, lease->extradata_len);
@@ -1178,12 +1178,12 @@ void lease_add_extradata(struct dhcp_lease *lease, unsigned char *data, unsigned
   if (len != 0)
     memcpy(lease->extradata + lease->extradata_len, data, len);
   lease->extradata[lease->extradata_len + len] = delim;
-  lease->extradata_len += len + 1; 
+  lease->extradata_len += len + 1;
 }
 #endif
 
 #endif
-	  
 
-      
+
+
 
diff --git a/src/log.c b/src/log.c
index 9c296a3..ec9c1f8 100644
--- a/src/log.c
+++ b/src/log.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -20,10 +20,10 @@
 #  include <android/log.h>
 #endif
 
-/* Implement logging to /dev/log asynchronously. If syslogd is 
+/* Implement logging to /dev/log asynchronously. If syslogd is
    making DNS lookups through dnsmasq, and dnsmasq blocks awaiting
    syslogd, then the two daemons can deadlock. We get around this
-   by not blocking when talking to syslog, instead we queue up to 
+   by not blocking when talking to syslog, instead we queue up to
    MAX_LOGS messages. If more are queued, they will be dropped,
    and the drop event itself logged. */
 
@@ -69,7 +69,7 @@ int log_start(struct passwd *ent_pw, int errfd)
 #endif
 
   if (daemon->log_file)
-    { 
+    {
       log_to_file = 1;
       daemon->max_logs = 0;
       if (strcmp(daemon->log_file, "-") == 0)
@@ -79,7 +79,7 @@ int log_start(struct passwd *ent_pw, int errfd)
 	  log_fd = dup(STDERR_FILENO);
 	}
     }
-  
+
   max_logs = daemon->max_logs;
 
   if (!log_reopen(daemon->log_file))
@@ -91,7 +91,7 @@ int log_start(struct passwd *ent_pw, int errfd)
   /* if queuing is inhibited, make sure we allocate
      the one required buffer now. */
   if (max_logs == 0)
-    {  
+    {
       free_entries = safe_malloc(sizeof(struct log_entry));
       free_entries->next = NULL;
       entries_alloced = 1;
@@ -101,7 +101,7 @@ int log_start(struct passwd *ent_pw, int errfd)
      change the ownership here so that the file is always owned by
      the dnsmasq user. Then logrotate can just copy the owner.
      Failure of the chown call is OK, (for instance when started as non-root) */
-  if (log_to_file && !log_stderr && ent_pw && ent_pw->pw_uid != 0 && 
+  if (log_to_file && !log_stderr && ent_pw && ent_pw->pw_uid != 0 &&
       fchown(log_fd, ent_pw->pw_uid, -1) != 0)
     ret = errno;
 
@@ -111,14 +111,14 @@ int log_start(struct passwd *ent_pw, int errfd)
 int log_reopen(char *log_file)
 {
   if (!log_stderr)
-    {      
+    {
       if (log_fd != -1)
 	close(log_fd);
-      
+
       /* NOTE: umask is set to 022 by the time this gets called */
-      
+
       if (log_file)
-	log_fd = open(log_file, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP);      
+	log_fd = open(log_file, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP);
       else
 	{
 #if defined(HAVE_SOLARIS_NETWORK) || defined(__ANDROID__)
@@ -129,14 +129,14 @@ int log_reopen(char *log_file)
 #else
 	  int flags;
 	  log_fd = socket(AF_UNIX, connection_type, 0);
-	  
+
 	  /* if max_logs is zero, leave the socket blocking */
 	  if (log_fd != -1 && max_logs != 0 && (flags = fcntl(log_fd, F_GETFL)) != -1)
 	    fcntl(log_fd, F_SETFL, flags | O_NONBLOCK);
 #endif
 	}
     }
-  
+
   return log_fd != -1;
 }
 
@@ -146,19 +146,19 @@ static void free_entry(void)
   entries = tmp->next;
   tmp->next = free_entries;
   free_entries = tmp;
-}      
+}
 
 static void log_write(void)
 {
   ssize_t rc;
-   
+
   while (entries)
     {
-      /* The data in the payload is written with a terminating zero character 
-	 and the length reflects this. For a stream connection we need to 
-	 send the zero as a record terminator, but this isn't done for a 
-	 datagram connection, so treat the length as one less than reality 
-	 to elide the zero. If we're logging to a file, turn the zero into 
+      /* The data in the payload is written with a terminating zero character
+	 and the length reflects this. For a stream connection we need to
+	 send the zero as a record terminator, but this isn't done for a
+	 datagram connection, so treat the length as one less than reality
+	 to elide the zero. If we're logging to a file, turn the zero into
 	 a newline, and leave the length alone. */
       int len_adjust = 0;
 
@@ -188,24 +188,24 @@ static void log_write(void)
 		  int e = entries_lost;
 		  entries_lost = 0; /* avoid wild recursion */
 		  my_syslog(LOG_WARNING, _("overflow: %d log entries lost"), e);
-		}	  
+		}
 	    }
 	  continue;
 	}
-      
+
       if (errno == EINTR)
 	continue;
 
       if (errno == EAGAIN || errno == EWOULDBLOCK)
 	return; /* syslogd busy, go again when select() or poll() says so */
-      
+
       if (errno == ENOBUFS)
 	{
 	  connection_good = 0;
 	  return;
 	}
 
-      /* errors handling after this assumes sockets */ 
+      /* errors handling after this assumes sockets */
       if (!log_to_file)
 	{
 	  /* Once a stream socket hits EPIPE, we have to close and re-open
@@ -215,43 +215,43 @@ static void log_write(void)
 	      if (log_reopen(NULL))
 		continue;
 	    }
-	  else if (errno == ECONNREFUSED || 
-		   errno == ENOTCONN || 
-		   errno == EDESTADDRREQ || 
+	  else if (errno == ECONNREFUSED ||
+		   errno == ENOTCONN ||
+		   errno == EDESTADDRREQ ||
 		   errno == ECONNRESET)
 	    {
 	      /* socket went (syslogd down?), try and reconnect. If we fail,
-		 stop trying until the next call to my_syslog() 
+		 stop trying until the next call to my_syslog()
 		 ECONNREFUSED -> connection went down
 		 ENOTCONN -> nobody listening
 		 (ECONNRESET, EDESTADDRREQ are *BSD equivalents) */
-	      
+
 	      struct sockaddr_un logaddr;
-	      
+
 #ifdef HAVE_SOCKADDR_SA_LEN
-	      logaddr.sun_len = sizeof(logaddr) - sizeof(logaddr.sun_path) + strlen(_PATH_LOG) + 1; 
+	      logaddr.sun_len = sizeof(logaddr) - sizeof(logaddr.sun_path) + strlen(_PATH_LOG) + 1;
 #endif
 	      logaddr.sun_family = AF_UNIX;
 	      strncpy(logaddr.sun_path, _PATH_LOG, sizeof(logaddr.sun_path));
-	      
+
 	      /* Got connection back? try again. */
 	      if (connect(log_fd, (struct sockaddr *)&logaddr, sizeof(logaddr)) != -1)
 		continue;
-	      
+
 	      /* errors from connect which mean we should keep trying */
-	      if (errno == ENOENT || 
-		  errno == EALREADY || 
+	      if (errno == ENOENT ||
+		  errno == EALREADY ||
 		  errno == ECONNREFUSED ||
-		  errno == EISCONN || 
+		  errno == EISCONN ||
 		  errno == EINTR ||
-		  errno == EAGAIN || 
+		  errno == EAGAIN ||
 		  errno == EWOULDBLOCK)
 		{
 		  /* try again on next syslog() call */
 		  connection_good = 0;
 		  return;
 		}
-	      
+
 	      /* try the other sort of socket... */
 	      if (errno == EPROTOTYPE)
 		{
@@ -290,7 +290,7 @@ void my_syslog(int priority, const char *format, ...)
     func = "-dhcp";
   else if ((LOG_FACMASK & priority) == MS_SCRIPT)
     func = "-script";
-	    
+
 #ifdef LOG_PRI
   priority = LOG_PRI(priority);
 #else
@@ -298,7 +298,7 @@ void my_syslog(int priority, const char *format, ...)
   priority &= LOG_PRIMASK;
 #endif
 
-  if (echo_stderr) 
+  if (echo_stderr)
     {
       fprintf(stderr, "dnsmasq%s: ", func);
       va_start(ap, format);
@@ -310,10 +310,10 @@ void my_syslog(int priority, const char *format, ...)
   if (log_fd == -1)
     {
 #ifdef __ANDROID__
-      /* do android-specific logging. 
+      /* do android-specific logging.
 	 log_fd is always -1 on Android except when logging to a file. */
       int alog_lvl;
-      
+
       if (priority <= LOG_ERR)
 	alog_lvl = ANDROID_LOG_ERROR;
       else if (priority == LOG_WARNING)
@@ -327,7 +327,7 @@ void my_syslog(int priority, const char *format, ...)
       __android_log_vprint(alog_lvl, "dnsmasq", format, ap);
       va_end(ap);
 #else
-      /* fall-back to syslog if we die during startup or 
+      /* fall-back to syslog if we die during startup or
 	 fail during running (always on Solaris). */
       static int isopen = 0;
 
@@ -336,19 +336,19 @@ void my_syslog(int priority, const char *format, ...)
 	  openlog("dnsmasq", LOG_PID, log_fac);
 	  isopen = 1;
 	}
-      va_start(ap, format);  
+      va_start(ap, format);
       vsyslog(priority, format, ap);
       va_end(ap);
 #endif
 
       return;
     }
-  
+
   if ((entry = free_entries))
     free_entries = entry->next;
   else if (entries_alloced < max_logs && (entry = malloc(sizeof(struct log_entry))))
     entries_alloced++;
-  
+
   if (!entry)
     entries_lost++;
   else
@@ -363,36 +363,36 @@ void my_syslog(int priority, const char *format, ...)
 	  for (tmp = entries; tmp->next; tmp = tmp->next);
 	  tmp->next = entry;
 	}
-      
+
       time(&time_now);
       p = entry->payload;
       if (!log_to_file)
 	p += sprintf(p, "<%d>", priority | log_fac);
 
       /* Omit timestamp for default daemontools situation */
-      if (!log_stderr || !option_bool(OPT_NO_FORK)) 
+      if (!log_stderr || !option_bool(OPT_NO_FORK))
 	p += sprintf(p, "%.15s ", ctime(&time_now) + 4);
-      
+
       p += sprintf(p, "dnsmasq%s[%d]: ", func, (int)pid);
-        
+
       len = p - entry->payload;
-      va_start(ap, format);  
+      va_start(ap, format);
       len += vsnprintf(p, MAX_MESSAGE - len, format, ap) + 1; /* include zero-terminator */
       va_end(ap);
       entry->length = len > MAX_MESSAGE ? MAX_MESSAGE : len;
       entry->offset = 0;
       entry->pid = pid;
     }
-  
+
   /* almost always, logging won't block, so try and write this now,
      to save collecting too many log messages during a select loop. */
   log_write();
-  
+
   /* Since we're doing things asynchronously, a cache-dump, for instance,
      can now generate log lines very fast. With a small buffer (desirable),
      that means it can overflow the log-buffer very quickly,
-     so that the cache dump becomes mainly a count of how many lines 
-     overflowed. To avoid this, we delay here, the delay is controlled 
+     so that the cache dump becomes mainly a count of how many lines
+     overflowed. To avoid this, we delay here, the delay is controlled
      by queue-occupancy, and grows exponentially. The delay is limited to (2^8)ms.
      The scaling stuff ensures that when the queue is bigger than 8, the delay
      only occurs for the last 8 entries. Once the queue is full, we stop delaying
@@ -402,9 +402,9 @@ void my_syslog(int priority, const char *format, ...)
   if (entries && max_logs != 0)
     {
       int d;
-      
+
       for (d = 0,entry = entries; entry; entry = entry->next, d++);
-      
+
       if (d == max_logs)
 	d = 0;
       else if (max_logs > 8)
@@ -416,11 +416,11 @@ void my_syslog(int priority, const char *format, ...)
 	  waiter.tv_sec = 0;
 	  waiter.tv_nsec = 1000000 << (d - 1); /* 1 ms */
 	  nanosleep(&waiter, NULL);
-      
+
 	  /* Have another go now */
 	  log_write();
 	}
-    } 
+    }
 }
 
 void set_log_writer(void)
@@ -445,7 +445,7 @@ void flush_log(void)
       log_write();
       if (!entries || !connection_good)
 	{
-	  close(log_fd);	
+	  close(log_fd);
 	  break;
 	}
       waiter.tv_sec = 0;
@@ -457,7 +457,7 @@ void flush_log(void)
 void die(char *message, char *arg1, int exit_code)
 {
   char *errmess = strerror(errno);
-  
+
   if (!arg1)
     arg1 = errmess;
 
@@ -470,6 +470,6 @@ void die(char *message, char *arg1, int exit_code)
   echo_stderr = 0;
   my_syslog(LOG_CRIT, _("FAILED to start up"));
   flush_log();
-  
+
   exit(exit_code);
 }
diff --git a/src/loop.c b/src/loop.c
index c7f9aaa..dcc07a9 100644
--- a/src/loop.c
+++ b/src/loop.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -22,36 +22,36 @@ static ssize_t loop_make_probe(u32 uid);
 void loop_send_probes()
 {
    struct server *serv;
-   
+
    if (!option_bool(OPT_LOOP_DETECT))
      return;
 
    /* Loop through all upstream servers not for particular domains, and send a query to that server which is
       identifiable, via the uid. If we see that query back again, then the server is looping, and we should not use it. */
    for (serv = daemon->servers; serv; serv = serv->next)
-     if (!(serv->flags & 
+     if (!(serv->flags &
 	   (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND | SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_LOOP)))
        {
 	 ssize_t len = loop_make_probe(serv->uid);
 	 int fd;
 	 struct randfd *rfd = NULL;
-	 
+
 	 if (serv->sfd)
 	   fd = serv->sfd->fd;
-	 else 
+	 else
 	   {
 	     if (!(rfd = allocate_rfd(serv->addr.sa.sa_family)))
 	       continue;
 	     fd = rfd->fd;
 	   }
 
-	 while (retry_send(sendto(fd, daemon->packet, len, 0, 
+	 while (retry_send(sendto(fd, daemon->packet, len, 0,
 				  &serv->addr.sa, sa_len(&serv->addr))));
-	 
+
 	 free_rfd(rfd);
        }
 }
-  
+
 static ssize_t loop_make_probe(u32 uid)
 {
   struct dns_header *header = (struct dns_header *)daemon->packet;
@@ -59,7 +59,7 @@ static ssize_t loop_make_probe(u32 uid)
 
   /* packet buffer overwritten */
   daemon->srv_save = NULL;
-  
+
   header->id = rand16();
   header->ancount = header->nscount = header->arcount = htons(0);
   header->qdcount = htons(1);
@@ -79,14 +79,14 @@ static ssize_t loop_make_probe(u32 uid)
 
   return p - (unsigned char *)header;
 }
-  
+
 
 int detect_loop(char *query, int type)
 {
   int i;
   u32 uid;
   struct server *serv;
-  
+
   if (!option_bool(OPT_LOOP_DETECT))
     return 0;
 
@@ -102,7 +102,7 @@ int detect_loop(char *query, int type)
   uid = strtol(query, NULL, 16);
 
   for (serv = daemon->servers; serv; serv = serv->next)
-     if (!(serv->flags & 
+     if (!(serv->flags &
 	   (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND | SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_LOOP)) &&
 	 uid == serv->uid)
        {
diff --git a/src/netlink.c b/src/netlink.c
index 4d4ca56..e21529f 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -22,7 +22,7 @@
 #include <linux/netlink.h>
 #include <linux/rtnetlink.h>
 
-/* linux 2.6.19 buggers up the headers, patch it up here. */ 
+/* linux 2.6.19 buggers up the headers, patch it up here. */
 #ifndef IFA_RTA
 #  define IFA_RTA(r)  \
        ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
@@ -31,8 +31,8 @@
 #endif
 
 #ifndef NDA_RTA
-#  define NDA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg)))) 
-#endif 
+#  define NDA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg))))
+#endif
 
 
 static struct iovec iov;
@@ -50,7 +50,7 @@ void netlink_init(void)
   addr.nl_pid = 0; /* autobind */
   addr.nl_groups = RTMGRP_IPV4_ROUTE;
   if (option_bool(OPT_CLEVERBIND))
-    addr.nl_groups |= RTMGRP_IPV4_IFADDR;  
+    addr.nl_groups |= RTMGRP_IPV4_IFADDR;
 #ifdef HAVE_IPV6
   addr.nl_groups |= RTMGRP_IPV6_ROUTE;
   if (option_bool(OPT_CLEVERBIND))
@@ -60,7 +60,7 @@ void netlink_init(void)
   if (daemon->doing_ra || daemon->doing_dhcp6)
     addr.nl_groups |= RTMGRP_IPV6_IFADDR;
 #endif
-  
+
   /* May not be able to have permission to set multicast groups don't die in that case */
   if ((daemon->netlinkfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE)) != -1)
     {
@@ -71,14 +71,14 @@ void netlink_init(void)
 	    daemon->netlinkfd = -1;
 	}
     }
-  
-  if (daemon->netlinkfd == -1 || 
+
+  if (daemon->netlinkfd == -1 ||
       getsockname(daemon->netlinkfd, (struct sockaddr *)&addr, &slen) == -1)
     die(_("cannot create netlink socket: %s"), NULL, EC_MISC);
-   
-  /* save pid assigned by bind() and retrieved by getsockname() */ 
+
+  /* save pid assigned by bind() and retrieved by getsockname() */
   netlink_pid = addr.nl_pid;
-  
+
   iov.iov_len = 100;
   iov.iov_base = safe_malloc(iov.iov_len);
 }
@@ -98,9 +98,9 @@ static ssize_t netlink_recv(void)
       msg.msg_iov = &iov;
       msg.msg_iovlen = 1;
       msg.msg_flags = 0;
-      
+
       while ((rc = recvmsg(daemon->netlinkfd, &msg, MSG_PEEK | MSG_TRUNC)) == -1 && errno == EINTR);
-      
+
       /* make buffer big enough */
       if (rc != -1 && (msg.msg_flags & MSG_TRUNC))
 	{
@@ -117,22 +117,22 @@ static ssize_t netlink_recv(void)
       /* read it for real */
       msg.msg_flags = 0;
       while ((rc = recvmsg(daemon->netlinkfd, &msg, 0)) == -1 && errno == EINTR);
-      
+
       /* Make sure this is from the kernel */
       if (rc == -1 || nladdr.nl_pid == 0)
 	break;
     }
-      
+
   /* discard stuff which is truncated at this point (expand_buf() may fail) */
   if (msg.msg_flags & MSG_TRUNC)
     {
       rc = -1;
       errno = ENOMEM;
     }
-  
+
   return rc;
 }
-  
+
 
 /* family = AF_UNSPEC finds ARP table entries.
    family = AF_LOCAL finds MAC addresses. */
@@ -146,15 +146,15 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 
   struct {
     struct nlmsghdr nlh;
-    struct rtgenmsg g; 
+    struct rtgenmsg g;
   } req;
 
   addr.nl_family = AF_NETLINK;
   addr.nl_pad = 0;
   addr.nl_groups = 0;
   addr.nl_pid = 0; /* address to kernel */
- 
- again: 
+
+ again:
   if (family == AF_UNSPEC)
     req.nlh.nlmsg_type = RTM_GETNEIGH;
   else if (family == AF_LOCAL)
@@ -163,18 +163,18 @@ int iface_enumerate(int family, void *parm, int (*callback)())
     req.nlh.nlmsg_type = RTM_GETADDR;
 
   req.nlh.nlmsg_len = sizeof(req);
-  req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST | NLM_F_ACK; 
+  req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST | NLM_F_ACK;
   req.nlh.nlmsg_pid = 0;
   req.nlh.nlmsg_seq = ++seq;
-  req.g.rtgen_family = family; 
+  req.g.rtgen_family = family;
 
   /* Don't block in recvfrom if send fails */
-  while(retry_send(sendto(daemon->netlinkfd, (void *)&req, sizeof(req), 0, 
+  while(retry_send(sendto(daemon->netlinkfd, (void *)&req, sizeof(req), 0,
 			  (struct sockaddr *)&addr, sizeof(addr))));
 
   if (errno != 0)
     return 0;
-    
+
   while (1)
     {
       if ((len = netlink_recv()) == -1)
@@ -203,10 +203,10 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 	  return callback_ok;
 	else if (h->nlmsg_type == RTM_NEWADDR && family != AF_UNSPEC && family != AF_LOCAL)
 	  {
-	    struct ifaddrmsg *ifa = NLMSG_DATA(h);  
+	    struct ifaddrmsg *ifa = NLMSG_DATA(h);
 	    struct rtattr *rta = IFA_RTA(ifa);
 	    unsigned int len1 = h->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa));
-	    
+
 	    if (ifa->ifa_family == family)
 	      {
 		if (ifa->ifa_family == AF_INET)
@@ -218,7 +218,7 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 
 		    addr.s_addr = 0;
 		    broadcast.s_addr = 0;
-		    
+
 		    while (RTA_OK(rta, len1))
 		      {
 			if (rta->rta_type == IFA_LOCAL)
@@ -227,10 +227,10 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 			  broadcast = *((struct in_addr *)(rta+1));
 			else if (rta->rta_type == IFA_LABEL)
 			  label = RTA_DATA(rta);
-			
+
 			rta = RTA_NEXT(rta, len1);
 		      }
-		    
+
 		    if (addr.s_addr && callback_ok)
 		      if (!((*callback)(addr, ifa->ifa_index, label,  netmask, broadcast, parm)))
 			callback_ok = 0;
@@ -241,11 +241,11 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 		    struct in6_addr *addrp = NULL;
 		    u32 valid = 0, preferred = 0;
 		    int flags = 0;
-		    
+
 		    while (RTA_OK(rta, len1))
 		      {
 			if (rta->rta_type == IFA_ADDRESS)
-			  addrp = ((struct in6_addr *)(rta+1)); 
+			  addrp = ((struct in6_addr *)(rta+1));
 			else if (rta->rta_type == IFA_CACHEINFO)
 			  {
 			    struct ifa_cacheinfo *ifc = (struct ifa_cacheinfo *)(rta+1);
@@ -254,19 +254,19 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 			  }
 			rta = RTA_NEXT(rta, len1);
 		      }
-		    
+
 		    if (ifa->ifa_flags & IFA_F_TENTATIVE)
 		      flags |= IFACE_TENTATIVE;
-		    
+
 		    if (ifa->ifa_flags & IFA_F_DEPRECATED)
 		      flags |= IFACE_DEPRECATED;
-		    
+
 		    if (!(ifa->ifa_flags & IFA_F_TEMPORARY))
 		      flags |= IFACE_PERMANENT;
-    		    
+
 		    if (addrp && callback_ok)
-		      if (!((*callback)(addrp, (int)(ifa->ifa_prefixlen), (int)(ifa->ifa_scope), 
-					(int)(ifa->ifa_index), flags, 
+		      if (!((*callback)(addrp, (int)(ifa->ifa_prefixlen), (int)(ifa->ifa_scope),
+					(int)(ifa->ifa_index), flags,
 					(int) preferred, (int)valid, parm)))
 			callback_ok = 0;
 		  }
@@ -275,12 +275,12 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 	  }
 	else if (h->nlmsg_type == RTM_NEWNEIGH && family == AF_UNSPEC)
 	  {
-	    struct ndmsg *neigh = NLMSG_DATA(h);  
+	    struct ndmsg *neigh = NLMSG_DATA(h);
 	    struct rtattr *rta = NDA_RTA(neigh);
 	    unsigned int len1 = h->nlmsg_len - NLMSG_LENGTH(sizeof(*neigh));
 	    size_t maclen = 0;
 	    char *inaddr = NULL, *mac = NULL;
-	    
+
 	    while (RTA_OK(rta, len1))
 	      {
 		if (rta->rta_type == NDA_DST)
@@ -290,7 +290,7 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 		    maclen = rta->rta_len - sizeof(struct rtattr);
 		    mac = (char *)(rta+1);
 		  }
-		
+
 		rta = RTA_NEXT(rta, len1);
 	      }
 
@@ -315,11 +315,11 @@ int iface_enumerate(int family, void *parm, int (*callback)())
 		    maclen = rta->rta_len - sizeof(struct rtattr);
 		    mac = (char *)(rta+1);
 		  }
-		
+
 		rta = RTA_NEXT(rta, len1);
 	      }
 
-	    if (mac && callback_ok && !((link->ifi_flags & (IFF_LOOPBACK | IFF_POINTOPOINT))) && 
+	    if (mac && callback_ok && !((link->ifi_flags & (IFF_LOOPBACK | IFF_POINTOPOINT))) &&
 		!((*callback)((int)link->ifi_index, (unsigned int)link->ifi_type, mac, maclen, parm)))
 	      callback_ok = 0;
 	  }
@@ -332,16 +332,16 @@ void netlink_multicast(void)
   ssize_t len;
   struct nlmsghdr *h;
   int flags;
-  
+
   /* don't risk blocking reading netlink messages here. */
   if ((flags = fcntl(daemon->netlinkfd, F_GETFL)) == -1 ||
-      fcntl(daemon->netlinkfd, F_SETFL, flags | O_NONBLOCK) == -1) 
+      fcntl(daemon->netlinkfd, F_SETFL, flags | O_NONBLOCK) == -1)
     return;
-  
+
   if ((len = netlink_recv()) != -1)
     for (h = (struct nlmsghdr *)iov.iov_base; NLMSG_OK(h, (size_t)len); h = NLMSG_NEXT(h, len))
       nl_async(h);
-  
+
   /* restore non-blocking status */
   fcntl(daemon->netlinkfd, F_SETFL, flags);
 }
@@ -354,21 +354,21 @@ static void nl_async(struct nlmsghdr *h)
       if (err->error != 0)
 	my_syslog(LOG_ERR, _("netlink returns error: %s"), strerror(-(err->error)));
     }
-  else if (h->nlmsg_pid == 0 && h->nlmsg_type == RTM_NEWROUTE) 
+  else if (h->nlmsg_pid == 0 && h->nlmsg_type == RTM_NEWROUTE)
     {
       /* We arrange to receive netlink multicast messages whenever the network route is added.
 	 If this happens and we still have a DNS packet in the buffer, we re-send it.
 	 This helps on DoD links, where frequently the packet which triggers dialling is
 	 a DNS query, which then gets lost. By re-sending, we can avoid the lookup
-	 failing. */ 
+	 failing. */
       struct rtmsg *rtm = NLMSG_DATA(h);
-      
+
       if (rtm->rtm_type == RTN_UNICAST && rtm->rtm_scope == RT_SCOPE_LINK)
 	queue_event(EVENT_NEWROUTE);
     }
-  else if (h->nlmsg_type == RTM_NEWADDR || h->nlmsg_type == RTM_DELADDR) 
+  else if (h->nlmsg_type == RTM_NEWADDR || h->nlmsg_type == RTM_DELADDR)
     queue_event(EVENT_NEWADDR);
 }
 #endif
 
-      
+
diff --git a/src/network.c b/src/network.c
index c87b879..f6ac03b 100644
--- a/src/network.c
+++ b/src/network.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -21,7 +21,7 @@
 int indextoname(int fd, int index, char *name)
 {
   struct ifreq ifr;
-  
+
   if (index == 0)
     return 0;
 
@@ -50,42 +50,42 @@ int indextoname(int fd, int index, char *name)
   int numifs, bufsize, i;
   struct lifconf lifc;
   struct lifreq *lifrp;
-  
+
   if (index == 0)
     return 0;
-  
-  if (getzoneid() == GLOBAL_ZONEID) 
+
+  if (getzoneid() == GLOBAL_ZONEID)
     {
       if (!if_indextoname(index, name))
 	return 0;
       return 1;
     }
-  
+
   lifc_flags = LIFC_NOXMIT | LIFC_TEMPORARY | LIFC_ALLZONES | LIFC_UNDER_IPMP;
   lifn.lifn_family = AF_UNSPEC;
   lifn.lifn_flags = lifc_flags;
-  if (ioctl(fd, SIOCGLIFNUM, &lifn) < 0) 
+  if (ioctl(fd, SIOCGLIFNUM, &lifn) < 0)
     return 0;
-  
+
   numifs = lifn.lifn_count;
   bufsize = numifs * sizeof(struct lifreq);
-  
+
   lifc.lifc_family = AF_UNSPEC;
   lifc.lifc_flags = lifc_flags;
   lifc.lifc_len = bufsize;
   lifc.lifc_buf = alloca(bufsize);
-  
-  if (ioctl(fd, SIOCGLIFCONF, &lifc) < 0)  
+
+  if (ioctl(fd, SIOCGLIFCONF, &lifc) < 0)
     return 0;
-  
+
   lifrp = lifc.lifc_req;
-  for (i = lifc.lifc_len / sizeof(struct lifreq); i; i--, lifrp++) 
+  for (i = lifc.lifc_len / sizeof(struct lifreq); i; i--, lifrp++)
     {
       struct lifreq lifr;
       strncpy(lifr.lifr_name, lifrp->lifr_name, IF_NAMESIZE);
-      if (ioctl(fd, SIOCGLIFINDEX, &lifr) < 0) 
+      if (ioctl(fd, SIOCGLIFINDEX, &lifr) < 0)
 	return 0;
-      
+
       if (lifr.lifr_index == index) {
 	strncpy(name, lifr.lifr_name, IF_NAMESIZE);
 	return 1;
@@ -98,7 +98,7 @@ int indextoname(int fd, int index, char *name)
 #else
 
 int indextoname(int fd, int index, char *name)
-{ 
+{
   (void)fd;
 
   if (index == 0 || !if_indextoname(index, name))
@@ -118,10 +118,10 @@ int iface_check(int family, struct all_addr *addr, char *name, int *auth)
      "used" flags.
 
      May be called with family == AF_LOCALto check interface by name only. */
-  
+
   if (auth)
     *auth = 0;
-  
+
   if (daemon->if_names || daemon->if_addrs)
     {
       ret = 0;
@@ -129,7 +129,7 @@ int iface_check(int family, struct all_addr *addr, char *name, int *auth)
       for (tmp = daemon->if_names; tmp; tmp = tmp->next)
 	if (tmp->name && wildcard_match(tmp->name, name))
 	  ret = tmp->used = 1;
-	        
+
       if (addr)
 	for (tmp = daemon->if_addrs; tmp; tmp = tmp->next)
 	  if (tmp->addr.sa.sa_family == family)
@@ -139,18 +139,18 @@ int iface_check(int family, struct all_addr *addr, char *name, int *auth)
 		ret = match_addr = tmp->used = 1;
 #ifdef HAVE_IPV6
 	      else if (family == AF_INET6 &&
-		       IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, 
+		       IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr,
 					  &addr->addr.addr6))
 		ret = match_addr = tmp->used = 1;
 #endif
-	    }          
+	    }
     }
-  
+
   if (!match_addr)
     for (tmp = daemon->if_except; tmp; tmp = tmp->next)
       if (tmp->name && wildcard_match(tmp->name, name))
 	ret = 0;
-    
+
 
   for (tmp = daemon->authinterface; tmp; tmp = tmp->next)
     if (tmp->name)
@@ -166,24 +166,24 @@ int iface_check(int family, struct all_addr *addr, char *name, int *auth)
     else if (addr && tmp->addr.sa.sa_family == AF_INET6 && family == AF_INET6 &&
 	     IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, &addr->addr.addr6))
       break;
-#endif      
+#endif
 
-  if (tmp && auth) 
+  if (tmp && auth)
     {
       *auth = 1;
       ret = 1;
     }
 
-  return ret; 
+  return ret;
 }
 
 
 /* Fix for problem that the kernel sometimes reports the loopback interface as the
-   arrival interface when a packet originates locally, even when sent to address of 
-   an interface other than the loopback. Accept packet if it arrived via a loopback 
+   arrival interface when a packet originates locally, even when sent to address of
+   an interface other than the loopback. Accept packet if it arrived via a loopback
    interface, even when we're not accepting packets that way, as long as the destination
    address is one we're believing. Interface list must be up-to-date before calling. */
-int loopback_exception(int fd, int family, struct all_addr *addr, char *name)    
+int loopback_exception(int fd, int family, struct all_addr *addr, char *name)
 {
   struct ifreq ifr;
   struct irec *iface;
@@ -204,7 +204,7 @@ int loopback_exception(int fd, int family, struct all_addr *addr, char *name)
 	    else if (IN6_ARE_ADDR_EQUAL(&iface->addr.in6.sin6_addr, &addr->addr.addr6))
 	      return 1;
 #endif
-	    
+
 	  }
     }
   return 0;
@@ -212,7 +212,7 @@ int loopback_exception(int fd, int family, struct all_addr *addr, char *name)
 
 /* If we're configured with something like --interface=eth0:0 then we'll listen correctly
    on the relevant address, but the name of the arrival interface, derived from the
-   index won't match the config. Check that we found an interface address for the arrival 
+   index won't match the config. Check that we found an interface address for the arrival
    interface: daemon->interfaces must be up-to-date. */
 int label_exception(int index, int family, struct all_addr *addr)
 {
@@ -236,7 +236,7 @@ struct iface_param {
 };
 
 static int iface_allowed(struct iface_param *param, int if_index, char *label,
-			 union mysockaddr *addr, struct in_addr netmask, int prefixlen, int iface_flags) 
+			 union mysockaddr *addr, struct in_addr netmask, int prefixlen, int iface_flags)
 {
   struct irec *iface;
   int mtu = 0, loopback;
@@ -254,20 +254,20 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
   if (!indextoname(param->fd, if_index, ifr.ifr_name) ||
       ioctl(param->fd, SIOCGIFFLAGS, &ifr) == -1)
     return 0;
-   
+
   loopback = ifr.ifr_flags & IFF_LOOPBACK;
-  
+
   if (loopback)
     dhcp_ok = 0;
-  
+
   if (ioctl(param->fd, SIOCGIFMTU, &ifr) != -1)
     mtu = ifr.ifr_mtu;
-  
+
   if (!label)
     label = ifr.ifr_name;
   else
     is_label = strcmp(label, ifr.ifr_name);
- 
+
   /* maintain a list of all addresses on all interfaces for --local-service option */
   if (option_bool(OPT_LOCAL_SERVICE))
     {
@@ -280,13 +280,13 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 	}
       else
 	al = whine_malloc(sizeof(struct addrlist));
-      
+
       if (al)
 	{
 	  al->next = daemon->interface_addrs;
 	  daemon->interface_addrs = al;
 	  al->prefixlen = prefixlen;
-	  
+
 	  if (addr->sa.sa_family == AF_INET)
 	    {
 	      al->addr.addr.addr4 = addr->in.sin_addr;
@@ -297,11 +297,11 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 	    {
 	      al->addr.addr.addr6 = addr->in6.sin6_addr;
 	      al->flags = ADDRLIST_IPV6;
-	    } 
+	    }
 #endif
 	}
     }
-  
+
 #ifdef HAVE_IPV6
   if (addr->sa.sa_family != AF_INET6 || !IN6_IS_ADDR_LINKLOCAL(&addr->in6.sin6_addr))
 #endif
@@ -326,7 +326,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 		    }
 		  else
 		    al = whine_malloc(sizeof(struct addrlist));
-		  
+
 		  if (al)
 		    {
 		      al->next = zone->subnet;
@@ -336,7 +336,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 		      al->flags = 0;
 		    }
 		}
-	      
+
 #ifdef HAVE_IPV6
 	      if (addr->sa.sa_family == AF_INET6 && (name->flags & AUTH6))
 		{
@@ -347,7 +347,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 		    }
 		  else
 		    al = whine_malloc(sizeof(struct addrlist));
-		  
+
 		  if (al)
 		    {
 		      al->next = zone->subnet;
@@ -356,16 +356,16 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 		      al->addr.addr.addr6 = addr->in6.sin6_addr;
 		      al->flags = ADDRLIST_IPV6;
 		    }
-		} 
+		}
 #endif
-	      
+
 	    }
 #endif
-       
+
       /* Update addresses from interface_names. These are a set independent
-	 of the set we're listening on. */  
+	 of the set we're listening on. */
       for (int_name = daemon->int_names; int_name; int_name = int_name->next)
-	if (strncmp(label, int_name->intr, IF_NAMESIZE) == 0 && 
+	if (strncmp(label, int_name->intr, IF_NAMESIZE) == 0 &&
 	    (addr->sa.sa_family == int_name->family || int_name->family == 0))
 	  {
 	    if (param->spare)
@@ -375,12 +375,12 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 	      }
 	    else
 	      al = whine_malloc(sizeof(struct addrlist));
-	    
+
 	    if (al)
 	      {
 		al->next = int_name->addr;
 		int_name->addr = al;
-		
+
 		if (addr->sa.sa_family == AF_INET)
 		  {
 		    al->addr.addr.addr4 = addr->in.sin_addr;
@@ -395,15 +395,15 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 		       don't appear in forward queries, but will in reverse ones. */
 		    if (!(iface_flags & IFACE_PERMANENT) || (iface_flags & (IFACE_DEPRECATED | IFACE_TENTATIVE)))
 		      al->flags |= ADDRLIST_REVONLY;
-		 } 
+		 }
 #endif
 	      }
 	  }
     }
- 
-  /* check whether the interface IP has been added already 
+
+  /* check whether the interface IP has been added already
      we call this routine multiple times. */
-  for (iface = daemon->interfaces; iface; iface = iface->next) 
+  for (iface = daemon->interfaces; iface; iface = iface->next)
     if (sockaddr_isequal(&iface->addr, addr))
       {
 	iface->dad = !!(iface_flags & IFACE_TENTATIVE);
@@ -419,8 +419,8 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
       for (lo = daemon->if_names; lo; lo = lo->next)
 	if (lo->name && strcmp(lo->name, ifr.ifr_name) == 0)
 	  break;
-      
-      if (!lo && (lo = whine_malloc(sizeof(struct iname)))) 
+
+      if (!lo && (lo = whine_malloc(sizeof(struct iname))))
 	{
 	  if ((lo->name = whine_malloc(strlen(ifr.ifr_name)+1)))
 	    {
@@ -433,7 +433,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 	    free(lo);
 	}
     }
-  
+
   if (addr->sa.sa_family == AF_INET &&
       !iface_check(AF_INET, (struct all_addr *)&addr->in.sin_addr, label, &auth_dns))
     return 1;
@@ -443,7 +443,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
       !iface_check(AF_INET6, (struct all_addr *)&addr->in6.sin6_addr, label, &auth_dns))
     return 1;
 #endif
-    
+
 #ifdef HAVE_DHCP
   /* No DHCP where we're doing auth DNS. */
   if (auth_dns)
@@ -459,8 +459,8 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 	  dhcp_ok = 0;
 	}
 #endif
- 
-  
+
+
 #ifdef HAVE_TFTP
   if (daemon->tftp_interfaces)
     {
@@ -471,7 +471,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
 	  tftp_ok = 1;
     }
 #endif
-  
+
   /* add to list */
   if ((iface = whine_malloc(sizeof(struct irec))))
     {
@@ -496,14 +496,14 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
       free(iface);
 
     }
-  
-  errno = ENOMEM; 
+
+  errno = ENOMEM;
   return 0;
 }
 
 #ifdef HAVE_IPV6
-static int iface_allowed_v6(struct in6_addr *local, int prefix, 
-			    int scope, int if_index, int flags, 
+static int iface_allowed_v6(struct in6_addr *local, int prefix,
+			    int scope, int if_index, int flags,
 			    int preferred, int valid, void *vparam)
 {
   union mysockaddr addr;
@@ -513,7 +513,7 @@ static int iface_allowed_v6(struct in6_addr *local, int prefix,
   (void)scope; /* warning */
   (void)preferred;
   (void)valid;
-  
+
   memset(&addr, 0, sizeof(addr));
 #ifdef HAVE_SOCKADDR_SA_LEN
   addr.in6.sin6_len = sizeof(addr.in6);
@@ -526,7 +526,7 @@ static int iface_allowed_v6(struct in6_addr *local, int prefix,
     addr.in6.sin6_scope_id = if_index;
   else
     addr.in6.sin6_scope_id = 0;
-  
+
   return iface_allowed((struct iface_param *)vparam, if_index, NULL, &addr, netmask, prefix, flags);
 }
 #endif
@@ -536,7 +536,7 @@ static int iface_allowed_v4(struct in_addr local, int if_index, char *label,
 {
   union mysockaddr addr;
   int prefix, bit;
- 
+
   (void)broadcast; /* warning */
 
   memset(&addr, 0, sizeof(addr));
@@ -552,7 +552,7 @@ static int iface_allowed_v4(struct in_addr local, int if_index, char *label,
 
   return iface_allowed((struct iface_param *)vparam, if_index, label, &addr, netmask, prefix, 0);
 }
-   
+
 int enumerate_interfaces(int reset)
 {
   static struct addrlist *spare = NULL;
@@ -582,9 +582,9 @@ int enumerate_interfaces(int reset)
 
   if ((param.fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
     return 0;
- 
+
   /* Mark interfaces for garbage collection */
-  for (iface = daemon->interfaces; iface; iface = iface->next) 
+  for (iface = daemon->interfaces; iface; iface = iface->next)
     iface->found = 0;
 
   /* remove addresses stored against interface_names */
@@ -596,7 +596,7 @@ int enumerate_interfaces(int reset)
 	  addr->next = spare;
 	  spare = addr;
 	}
-      
+
       intname->addr = NULL;
     }
 
@@ -608,9 +608,9 @@ int enumerate_interfaces(int reset)
       spare = addr;
     }
   daemon->interface_addrs = NULL;
-  
+
 #ifdef HAVE_AUTH
-  /* remove addresses stored against auth_zone subnets, but not 
+  /* remove addresses stored against auth_zone subnets, but not
    ones configured as address literals */
   for (zone = daemon->auth_zones; zone; zone = zone->next)
     if (zone->interface_names)
@@ -632,55 +632,55 @@ int enumerate_interfaces(int reset)
 #endif
 
   param.spare = spare;
-  
+
 #ifdef HAVE_IPV6
   ret = iface_enumerate(AF_INET6, &param, iface_allowed_v6);
 #endif
 
   if (ret)
-    ret = iface_enumerate(AF_INET, &param, iface_allowed_v4); 
- 
+    ret = iface_enumerate(AF_INET, &param, iface_allowed_v4);
+
   errsave = errno;
   close(param.fd);
-  
+
   if (option_bool(OPT_CLEVERBIND))
-    { 
+    {
       /* Garbage-collect listeners listening on addresses that no longer exist.
-	 Does nothing when not binding interfaces or for listeners on localhost, 
+	 Does nothing when not binding interfaces or for listeners on localhost,
 	 since the ->iface field is NULL. Note that this needs the protections
 	 against reentrancy, hence it's here.  It also means there's a possibility,
 	 in OPT_CLEVERBIND mode, that at listener will just disappear after
 	 a call to enumerate_interfaces, this is checked OK on all calls. */
       struct listener *l, *tmp, **up;
-      
+
       for (up = &daemon->listeners, l = daemon->listeners; l; l = tmp)
 	{
 	  tmp = l->next;
-	  
+
 	  if (!l->iface || l->iface->found)
 	    up = &l->next;
 	  else
 	    {
 	      *up = l->next;
-	      
+
 	      /* In case it ever returns */
 	      l->iface->done = 0;
-	      
+
 	      if (l->fd != -1)
 		close(l->fd);
 	      if (l->tcpfd != -1)
 		close(l->tcpfd);
 	      if (l->tftpfd != -1)
 		close(l->tftpfd);
-	      
+
 	      free(l);
 	    }
 	}
     }
-  
+
   errno = errsave;
   spare = param.spare;
-    
+
   return ret;
 }
 
@@ -692,7 +692,7 @@ int fix_fd(int fd)
   if ((flags = fcntl(fd, F_GETFL)) == -1 ||
       fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1)
     return 0;
-  
+
   return 1;
 }
 
@@ -700,7 +700,7 @@ static int make_sock(union mysockaddr *addr, int type, int dienow)
 {
   int family = addr->sa.sa_family;
   int fd, rc, opt = 1;
-  
+
   if ((fd = socket(family, type, 0)) == -1)
     {
       int port, errsave;
@@ -711,17 +711,17 @@ static int make_sock(union mysockaddr *addr, int type, int dienow)
 	  errno == EAFNOSUPPORT ||
 	  errno == EINVAL)
 	return -1;
-      
+
     err:
       errsave = errno;
       port = prettyprint_addr(addr, daemon->addrbuff);
       if (!option_bool(OPT_NOWILD) && !option_bool(OPT_CLEVERBIND))
 	sprintf(daemon->addrbuff, "port %d", port);
       s = _("failed to create listening socket for %s: %s");
-      
+
       if (fd != -1)
 	close (fd);
-	
+
       errno = errsave;
 
       if (dienow)
@@ -733,21 +733,21 @@ static int make_sock(union mysockaddr *addr, int type, int dienow)
 	}
       else
 	my_syslog(LOG_WARNING, s, daemon->addrbuff, strerror(errno));
-      
+
       return -1;
-    }	
-  
+    }
+
   if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || !fix_fd(fd))
     goto err;
-  
+
 #ifdef HAVE_IPV6
   if (family == AF_INET6 && setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt)) == -1)
     goto err;
 #endif
-  
+
   if ((rc = bind(fd, (struct sockaddr *)addr, sa_len(addr))) == -1)
     goto err;
-  
+
   if (type == SOCK_STREAM)
     {
       if (listen(fd, TCP_BACKLOG) == -1)
@@ -757,7 +757,7 @@ static int make_sock(union mysockaddr *addr, int type, int dienow)
     {
       if (!option_bool(OPT_NOWILD))
 	{
-#if defined(HAVE_LINUX_NETWORK) 
+#if defined(HAVE_LINUX_NETWORK)
 	  if (setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &opt, sizeof(opt)) == -1)
 	    goto err;
 #elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
@@ -771,11 +771,11 @@ static int make_sock(union mysockaddr *addr, int type, int dienow)
   else if (!set_ipv6pktinfo(fd))
     goto err;
 #endif
-  
+
   return fd;
 }
 
-#ifdef HAVE_IPV6  
+#ifdef HAVE_IPV6
 int set_ipv6pktinfo(int fd)
 {
   int opt = 1;
@@ -784,7 +784,7 @@ int set_ipv6pktinfo(int fd)
      handle all combinations of headers and kernel.
      OpenWrt note that this fixes the problem addressed by your very broken patch. */
   daemon->v6pktinfo = IPV6_PKTINFO;
-  
+
 #ifdef IPV6_RECVPKTINFO
   if (setsockopt(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &opt, sizeof(opt)) != -1)
     return 1;
@@ -794,7 +794,7 @@ int set_ipv6pktinfo(int fd)
       daemon->v6pktinfo = IPV6_2292PKTINFO;
       return 1;
     }
-# endif 
+# endif
 #else
   if (setsockopt(fd, IPPROTO_IPV6, IPV6_PKTINFO, &opt, sizeof(opt)) != -1)
     return 1;
@@ -807,7 +807,7 @@ int set_ipv6pktinfo(int fd)
 
 /* Find the interface on which a TCP connection arrived, if possible, or zero otherwise. */
 int tcp_interface(int fd, int af)
-{ 
+{
   int if_index = 0;
 
 #ifdef HAVE_LINUX_NETWORK
@@ -815,14 +815,14 @@ int tcp_interface(int fd, int af)
   struct cmsghdr *cmptr;
   struct msghdr msg;
   socklen_t len;
-  
+
   /* use mshdr so that the CMSDG_* macros are available */
   msg.msg_control = daemon->packet;
   msg.msg_controllen = len = daemon->packet_buff_sz;
-  
+
   /* we overwrote the buffer... */
   daemon->srv_save = NULL;
-  
+
   if (af == AF_INET)
     {
       if (setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &opt, sizeof(opt)) != -1 &&
@@ -836,7 +836,7 @@ int tcp_interface(int fd, int af)
 		  unsigned char *c;
 		  struct in_pktinfo *p;
 		} p;
-		
+
 		p.c = CMSG_DATA(cmptr);
 		if_index = p.p->ipi_ifindex;
 	      }
@@ -846,12 +846,12 @@ int tcp_interface(int fd, int af)
   else
     {
       /* Only the RFC-2292 API has the ability to find the interface for TCP connections,
-	 it was removed in RFC-3542 !!!! 
+	 it was removed in RFC-3542 !!!!
 
 	 Fortunately, Linux kept the 2292 ABI when it moved to 3542. The following code always
 	 uses the old ABI, and should work with pre- and post-3542 kernel headers */
 
-#ifdef IPV6_2292PKTOPTIONS   
+#ifdef IPV6_2292PKTOPTIONS
 #  define PKTOPTIONS IPV6_2292PKTOPTIONS
 #else
 #  define PKTOPTIONS IPV6_PKTOPTIONS
@@ -869,17 +869,17 @@ int tcp_interface(int fd, int af)
                   struct in6_pktinfo *p;
                 } p;
                 p.c = CMSG_DATA(cmptr);
-		
+
 		if_index = p.p->ipi6_ifindex;
               }
 	}
     }
 #endif /* IPV6 */
 #endif /* Linux */
- 
+
   return if_index;
 }
-      
+
 static struct listener *create_listeners(union mysockaddr *addr, int do_tftp, int dienow)
 {
   struct listener *l = NULL;
@@ -892,7 +892,7 @@ static struct listener *create_listeners(union mysockaddr *addr, int do_tftp, in
       fd = make_sock(addr, SOCK_DGRAM, dienow);
       tcpfd = make_sock(addr, SOCK_STREAM, dienow);
     }
-  
+
 #ifdef HAVE_TFTP
   if (do_tftp)
     {
@@ -911,7 +911,7 @@ static struct listener *create_listeners(union mysockaddr *addr, int do_tftp, in
 	  addr->in6.sin6_port = htons(TFTP_PORT);
 	  tftpfd = make_sock(addr, SOCK_DGRAM, dienow);
 	  addr->in6.sin6_port = save;
-	}  
+	}
 #  endif
     }
 #endif
@@ -923,7 +923,7 @@ static struct listener *create_listeners(union mysockaddr *addr, int do_tftp, in
       l->family = addr->sa.sa_family;
       l->fd = fd;
       l->tcpfd = tcpfd;
-      l->tftpfd = tftpfd;	
+      l->tftpfd = tftpfd;
       l->iface = NULL;
     }
 
@@ -953,11 +953,11 @@ void create_wildcard_listeners(void)
   addr.in6.sin6_family = AF_INET6;
   addr.in6.sin6_addr = in6addr_any;
   addr.in6.sin6_port = htons(daemon->port);
- 
+
   l6 = create_listeners(&addr, !!option_bool(OPT_TFTP), 1);
-  if (l) 
+  if (l)
     l->next = l6;
-  else 
+  else
     l = l6;
 #endif
 
@@ -984,7 +984,7 @@ void create_bound_listeners(int dienow)
      no interface with a matching address. These may be valid: eg it's possible
      to listen on 127.0.1.1 even if the loopback interface is 127.0.0.1
 
-     If the address isn't valid the bind() will fail and we'll die() 
+     If the address isn't valid the bind() will fail and we'll die()
      (except in bind-dynamic mode, when we'll complain but keep trying.)
 
      The resulting listeners have the ->iface field NULL, and this has to be
@@ -992,7 +992,7 @@ void create_bound_listeners(int dienow)
      (no netmask) and some MTU login the tftp code. */
 
   for (if_tmp = daemon->if_addrs; if_tmp; if_tmp = if_tmp->next)
-    if (!if_tmp->used && 
+    if (!if_tmp->used &&
 	(new = create_listeners(&if_tmp->addr, !!option_bool(OPT_TFTP), dienow)))
       {
 	new->next = daemon->listeners;
@@ -1000,10 +1000,10 @@ void create_bound_listeners(int dienow)
       }
 }
 
-/* In --bind-interfaces, the only access control is the addresses we're listening on. 
+/* In --bind-interfaces, the only access control is the addresses we're listening on.
    There's nothing to avoid a query to the address of an internal interface arriving via
-   an external interface where we don't want to accept queries, except that in the usual 
-   case the addresses of internal interfaces are RFC1918. When bind-interfaces in use, 
+   an external interface where we don't want to accept queries, except that in the usual
+   case the addresses of internal interfaces are RFC1918. When bind-interfaces in use,
    and we listen on an address that looks like it's probably globally routeable, shout.
 
    The fix is to use --bind-dynamic, which actually checks the arrival interface too.
@@ -1015,7 +1015,7 @@ void create_bound_listeners(int dienow)
 
 void warn_bound_listeners(void)
 {
-  struct irec *iface; 	
+  struct irec *iface;
   int advice = 0;
 
   for (iface = daemon->interfaces; iface; iface = iface->next)
@@ -1027,15 +1027,15 @@ void warn_bound_listeners(void)
 	      {
 		inet_ntop(AF_INET, &iface->addr.in.sin_addr, daemon->addrbuff, ADDRSTRLEN);
 		iface->warned = advice = 1;
-		my_syslog(LOG_WARNING, 
+		my_syslog(LOG_WARNING,
 			  _("LOUD WARNING: listening on %s may accept requests via interfaces other than %s"),
 			  daemon->addrbuff, iface->name);
 	      }
 	  }
       }
-  
+
   if (advice)
-    my_syslog(LOG_WARNING, _("LOUD WARNING: use --bind-dynamic rather than --bind-interfaces to avoid DNS amplification attacks via these interface(s)")); 
+    my_syslog(LOG_WARNING, _("LOUD WARNING: use --bind-dynamic rather than --bind-interfaces to avoid DNS amplification attacks via these interface(s)"));
 }
 
 void warn_wild_labels(void)
@@ -1050,65 +1050,65 @@ void warn_wild_labels(void)
 void warn_int_names(void)
 {
   struct interface_name *intname;
- 
+
   for (intname = daemon->int_names; intname; intname = intname->next)
     if (!intname->addr)
       my_syslog(LOG_WARNING, _("warning: no addresses found for interface %s"), intname->intr);
 }
- 
+
 int is_dad_listeners(void)
 {
   struct irec *iface;
-  
+
   if (option_bool(OPT_NOWILD))
     for (iface = daemon->interfaces; iface; iface = iface->next)
       if (iface->dad && !iface->done)
 	return 1;
-  
+
   return 0;
 }
 
 #ifdef HAVE_DHCP6
-void join_multicast(int dienow)      
+void join_multicast(int dienow)
 {
   struct irec *iface, *tmp;
 
   for (iface = daemon->interfaces; iface; iface = iface->next)
     if (iface->addr.sa.sa_family == AF_INET6 && iface->dhcp_ok && !iface->multicast_done)
       {
-	/* There's an irec per address but we only want to join for multicast 
+	/* There's an irec per address but we only want to join for multicast
 	   once per interface. Weed out duplicates. */
 	for (tmp = daemon->interfaces; tmp; tmp = tmp->next)
 	  if (tmp->multicast_done && tmp->index == iface->index)
 	    break;
-	
+
 	iface->multicast_done = 1;
-	
+
 	if (!tmp)
 	  {
 	    struct ipv6_mreq mreq;
 	    int err = 0;
 
 	    mreq.ipv6mr_interface = iface->index;
-	    
+
 	    inet_pton(AF_INET6, ALL_RELAY_AGENTS_AND_SERVERS, &mreq.ipv6mr_multiaddr);
-	    
+
 	    if ((daemon->doing_dhcp6 || daemon->relay6) &&
 		setsockopt(daemon->dhcp6fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq)) == -1)
 	      err = errno;
-	    
+
 	    inet_pton(AF_INET6, ALL_SERVERS, &mreq.ipv6mr_multiaddr);
-	    
-	    if (daemon->doing_dhcp6 && 
+
+	    if (daemon->doing_dhcp6 &&
 		setsockopt(daemon->dhcp6fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq)) == -1)
 	      err = errno;
-	    
+
 	    inet_pton(AF_INET6, ALL_ROUTERS, &mreq.ipv6mr_multiaddr);
-	    
+
 	    if (daemon->doing_ra &&
 		setsockopt(daemon->icmp6fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq)) == -1)
 	      err = errno;
-	    
+
 	    if (err)
 	      {
 		char *s = _("interface %s failed to join DHCPv6 multicast group: %s");
@@ -1150,11 +1150,11 @@ int random_sock(int family)
 	while(tries--)
 	  {
 	    unsigned short port = rand16();
-	    
+
             if (daemon->min_port != 0 || daemon->max_port != MAX_PORT)
               port = htons(daemon->min_port + (port % ((unsigned short)ports_avail)));
-	    
-	    if (family == AF_INET) 
+
+	    if (family == AF_INET)
 	      {
 		addr.in.sin_addr.s_addr = INADDR_ANY;
 		addr.in.sin_port = port;
@@ -1165,17 +1165,17 @@ int random_sock(int family)
 #ifdef HAVE_IPV6
 	    else
 	      {
-		addr.in6.sin6_addr = in6addr_any; 
+		addr.in6.sin6_addr = in6addr_any;
 		addr.in6.sin6_port = port;
 #ifdef HAVE_SOCKADDR_SA_LEN
 		addr.in6.sin6_len = sizeof(struct sockaddr_in6);
 #endif
 	      }
 #endif
-	    
+
 	    if (bind(fd, (struct sockaddr *)&addr, sa_len(&addr)) == 0)
 	      return fd;
-	    
+
 	    if (errno != EADDRINUSE && errno != EACCES)
 	      break;
 	  }
@@ -1183,9 +1183,9 @@ int random_sock(int family)
       close(fd);
     }
 
-  return -1; 
+  return -1;
 }
-  
+
 
 int local_bind(int fd, union mysockaddr *addr, char *intname, int is_tcp)
 {
@@ -1201,10 +1201,10 @@ int local_bind(int fd, union mysockaddr *addr, char *intname, int is_tcp)
 	addr_copy.in6.sin6_port = 0;
 #endif
     }
-  
+
   if (bind(fd, (struct sockaddr *)&addr_copy, sa_len(&addr_copy)) == -1)
     return 0;
-    
+
 #if defined(SO_BINDTODEVICE)
   if (intname[0] != 0 &&
       setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, intname, IF_NAMESIZE) == -1)
@@ -1225,43 +1225,43 @@ static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname)
   if (!daemon->osport && intname[0] == 0)
     {
       errno = 0;
-      
+
       if (addr->sa.sa_family == AF_INET &&
 	  addr->in.sin_addr.s_addr == INADDR_ANY &&
-	  addr->in.sin_port == htons(0)) 
+	  addr->in.sin_port == htons(0))
 	return NULL;
 
 #ifdef HAVE_IPV6
       if (addr->sa.sa_family == AF_INET6 &&
 	  memcmp(&addr->in6.sin6_addr, &in6addr_any, sizeof(in6addr_any)) == 0 &&
-	  addr->in6.sin6_port == htons(0)) 
+	  addr->in6.sin6_port == htons(0))
 	return NULL;
 #endif
     }
 
   if (intname && strlen(intname) != 0)
     ifindex = if_nametoindex(intname); /* index == 0 when not binding to an interface */
-      
+
   /* may have a suitable one already */
   for (sfd = daemon->sfds; sfd; sfd = sfd->next )
     if (sockaddr_isequal(&sfd->source_addr, addr) &&
 	strcmp(intname, sfd->interface) == 0 &&
-	ifindex == sfd->ifindex) 
+	ifindex == sfd->ifindex)
       return sfd;
-  
+
   /* need to make a new one. */
   errno = ENOMEM; /* in case malloc fails. */
   if (!(sfd = whine_malloc(sizeof(struct serverfd))))
     return NULL;
-  
+
   if ((sfd->fd = socket(addr->sa.sa_family, SOCK_DGRAM, 0)) == -1)
     {
       free(sfd);
       return NULL;
     }
-  
+
   if (!local_bind(sfd->fd, addr, intname, 0) || !fix_fd(sfd->fd))
-    { 
+    {
       errsave = errno; /* save error from bind. */
       close(sfd->fd);
       free(sfd);
@@ -1269,13 +1269,13 @@ static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname)
       return NULL;
     }
 
-  strcpy(sfd->interface, intname); 
+  strcpy(sfd->interface, intname);
   sfd->source_addr = *addr;
   sfd->next = daemon->sfds;
   sfd->ifindex = ifindex;
   daemon->sfds = sfd;
 
-  return sfd; 
+  return sfd;
 }
 
 /* create upstream sockets during startup, before root is dropped which may be needed
@@ -1283,7 +1283,7 @@ static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname)
 void pre_allocate_sfds(void)
 {
   struct server *srv;
-  
+
   if (daemon->query_port != 0)
     {
       union  mysockaddr addr;
@@ -1306,7 +1306,7 @@ void pre_allocate_sfds(void)
       allocate_sfd(&addr, "");
 #endif
     }
-  
+
   for (srv = daemon->servers; srv; srv = srv->next)
     if (!(srv->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND)) &&
 	!allocate_sfd(&srv->source_addr, srv->interface) &&
@@ -1321,7 +1321,7 @@ void pre_allocate_sfds(void)
 	  }
 	die(_("failed to bind server socket for %s: %s"),
 	    daemon->namebuff, EC_BADNET);
-      }  
+      }
 }
 
 void mark_servers(int flag)
@@ -1345,7 +1345,7 @@ void cleanup_servers(void)
   struct server *serv, *tmp, **up;
 
   /* unlink and free anything still marked. */
-  for (serv = daemon->servers, up = &daemon->servers; serv; serv = tmp) 
+  for (serv = daemon->servers, up = &daemon->servers; serv; serv = tmp)
     {
       tmp = serv->next;
       if (serv->flags & SERV_MARK)
@@ -1356,7 +1356,7 @@ void cleanup_servers(void)
 	   free(serv->domain);
 	 free(serv);
        }
-      else 
+      else
        up = &serv->next;
     }
 
@@ -1374,7 +1374,7 @@ void add_update_server(int flags,
 {
   struct server *serv, *next = NULL;
   char *domain_str = NULL;
-  
+
   /* See if there is a suitable candidate, and unmark */
   for (serv = daemon->servers; serv; serv = serv->next)
     if (serv->flags & SERV_MARK)
@@ -1389,7 +1389,7 @@ void add_update_server(int flags,
 	    if (serv->flags & SERV_HAS_DOMAIN)
 	      continue;
 	  }
-	
+
         break;
       }
 
@@ -1421,7 +1421,7 @@ void add_update_server(int flags,
 	    strcpy(domain_str, domain);
 	}
     }
-  
+
   if (serv)
     {
       memset(serv, 0, sizeof(struct server));
@@ -1431,13 +1431,13 @@ void add_update_server(int flags,
       serv->queries = serv->failed_queries = 0;
 #ifdef HAVE_LOOP
       serv->uid = rand32();
-#endif      
+#endif
 
       if (domain)
 	serv->flags |= SERV_HAS_DOMAIN;
-      
+
       if (interface)
-	strcpy(serv->interface, interface);      
+	strcpy(serv->interface, interface);
       if (addr)
 	serv->addr = *addr;
       if (source_addr)
@@ -1456,7 +1456,7 @@ void check_servers(void)
   /* interface may be new since startup */
   if (!option_bool(OPT_NOWILD))
     enumerate_interfaces(0);
-  
+
   for (sfd = daemon->sfds; sfd; sfd = sfd->next)
     sfd->used = 0;
 
@@ -1474,33 +1474,33 @@ void check_servers(void)
 	  /* Init edns_pktsz for newly created server records. */
 	  if (serv->edns_pktsz == 0)
 	    serv->edns_pktsz = daemon->edns_pktsz;
-	  
+
 #ifdef HAVE_DNSSEC
 	  if (option_bool(OPT_DNSSEC_VALID))
-	    { 
+	    {
 	      if (serv->flags & SERV_HAS_DOMAIN)
 		{
 		  struct ds_config *ds;
 		  char *domain = serv->domain;
-		  
+
 		  /* .example.com is valid */
 		  while (*domain == '.')
 		    domain++;
-		  
+
 		  for (ds = daemon->ds; ds; ds = ds->next)
 		    if (ds->name[0] != 0 && hostname_isequal(domain, ds->name))
 		      break;
-		  
+
 		  if (!ds)
 		    serv->flags &= ~SERV_DO_DNSSEC;
 		}
-	      else if (serv->flags & SERV_FOR_NODOTS) 
+	      else if (serv->flags & SERV_FOR_NODOTS)
 		serv->flags &= ~SERV_DO_DNSSEC;
 	    }
 #endif
 
 	  port = prettyprint_addr(&serv->addr, daemon->namebuff);
-	  
+
 	  /* 0.0.0.0 is nothing, the stack treats it like 127.0.0.1 */
 	  if (serv->addr.sa.sa_family == AF_INET &&
 	      serv->addr.in.sin_addr.s_addr == 0)
@@ -1518,28 +1518,28 @@ void check_servers(void)
 	      serv->flags |= SERV_MARK;
 	      continue;
 	    }
-	  
+
 	  /* Do we need a socket set? */
-	  if (!serv->sfd && 
+	  if (!serv->sfd &&
 	      !(serv->sfd = allocate_sfd(&serv->source_addr, serv->interface)) &&
 	      errno != 0)
 	    {
-	      my_syslog(LOG_WARNING, 
+	      my_syslog(LOG_WARNING,
 			_("ignoring nameserver %s - cannot make/bind socket: %s"),
 			daemon->namebuff, strerror(errno));
 	      serv->flags |= SERV_MARK;
 	      continue;
 	    }
-	  
+
 	  if (serv->sfd)
 	    serv->sfd->used = 1;
 	}
-      
+
       if (!(serv->flags & SERV_NO_REBIND) && !(serv->flags & SERV_LITERAL_ADDRESS))
 	{
 	  if (++count > SERVERS_LOGGED)
 	    continue;
-	  
+
 	  if (serv->flags & (SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_USE_RESOLV))
 	    {
 	      char *s1, *s2, *s3 = "";
@@ -1553,7 +1553,7 @@ void check_servers(void)
 		s1 = _("default"), s2 = "";
 	      else
 		s1 = _("domain"), s2 = serv->domain;
-	      
+
 	      if (serv->flags & SERV_NO_ADDR)
 		{
 		  count--;
@@ -1562,20 +1562,20 @@ void check_servers(void)
 	        }
 	      else if (serv->flags & SERV_USE_RESOLV)
 		my_syslog(LOG_INFO, _("using standard nameservers for %s %s"), s1, s2);
-	      else 
+	      else
 		my_syslog(LOG_INFO, _("using nameserver %s#%d for %s %s %s"), daemon->namebuff, port, s1, s2, s3);
 	    }
 #ifdef HAVE_LOOP
 	  else if (serv->flags & SERV_LOOP)
-	    my_syslog(LOG_INFO, _("NOT using nameserver %s#%d - query loop detected"), daemon->namebuff, port); 
+	    my_syslog(LOG_INFO, _("NOT using nameserver %s#%d - query loop detected"), daemon->namebuff, port);
 #endif
 	  else if (serv->interface[0] != 0)
-	    my_syslog(LOG_INFO, _("using nameserver %s#%d(via %s)"), daemon->namebuff, port, serv->interface); 
+	    my_syslog(LOG_INFO, _("using nameserver %s#%d(via %s)"), daemon->namebuff, port, serv->interface);
 	  else
-	    my_syslog(LOG_INFO, _("using nameserver %s#%d"), daemon->namebuff, port); 
+	    my_syslog(LOG_INFO, _("using nameserver %s#%d"), daemon->namebuff, port);
 	}
     }
-  
+
   if (locals > LOCALS_LOGGED)
     my_syslog(LOG_INFO, _("using %d more local addresses"), locals - LOCALS_LOGGED);
   if (count - 1 > SERVERS_LOGGED)
@@ -1585,16 +1585,16 @@ void check_servers(void)
   for (sfd = daemon->sfds, up = &daemon->sfds; sfd; sfd = tmp)
     {
        tmp = sfd->next;
-       if (!sfd->used) 
+       if (!sfd->used)
 	{
 	  *up = sfd->next;
 	  close(sfd->fd);
 	  free(sfd);
-	} 
+	}
       else
 	up = &sfd->next;
     }
-  
+
   cleanup_servers();
 }
 
@@ -1612,24 +1612,24 @@ int reload_servers(char *fname)
       my_syslog(LOG_ERR, _("failed to read %s: %s"), fname, strerror(errno));
       return 0;
     }
-   
+
   mark_servers(SERV_FROM_RESOLV);
-    
+
   while ((line = fgets(daemon->namebuff, MAXDNAME, f)))
     {
       union mysockaddr addr, source_addr;
       char *token = strtok(line, " \t\n\r");
-      
+
       if (!token)
 	continue;
       if (strcmp(token, "nameserver") != 0 && strcmp(token, "server") != 0)
 	continue;
       if (!(token = strtok(NULL, " \t\n\r")))
 	continue;
-      
+
       memset(&addr, 0, sizeof(addr));
       memset(&source_addr, 0, sizeof(source_addr));
-      
+
       if ((addr.in.sin_addr.s_addr = inet_addr(token)) != (in_addr_t) -1)
 	{
 #ifdef HAVE_SOCKADDR_SA_LEN
@@ -1641,17 +1641,17 @@ int reload_servers(char *fname)
 	  source_addr.in.sin_port = htons(daemon->query_port);
 	}
 #ifdef HAVE_IPV6
-      else 
-	{	
+      else
+	{
 	  int scope_index = 0;
 	  char *scope_id = strchr(token, '%');
-	  
+
 	  if (scope_id)
 	    {
 	      *(scope_id++) = 0;
 	      scope_index = if_nametoindex(scope_id);
 	    }
-	  
+
 	  if (inet_pton(AF_INET6, token, &addr.in6.sin6_addr) > 0)
 	    {
 #ifdef HAVE_SOCKADDR_SA_LEN
@@ -1671,12 +1671,12 @@ int reload_servers(char *fname)
 #else /* IPV6 */
       else
 	continue;
-#endif 
+#endif
 
       add_update_server(SERV_FROM_RESOLV, &addr, &source_addr, NULL, NULL);
       gotone = 1;
     }
-  
+
   fclose(f);
   cleanup_servers();
 
@@ -1687,21 +1687,21 @@ int reload_servers(char *fname)
 void newaddress(time_t now)
 {
   (void)now;
-  
+
   if (option_bool(OPT_CLEVERBIND) || option_bool(OPT_LOCAL_SERVICE) ||
       daemon->doing_dhcp6 || daemon->relay6 || daemon->doing_ra)
     enumerate_interfaces(0);
-  
+
   if (option_bool(OPT_CLEVERBIND))
     create_bound_listeners(0);
-  
+
 #ifdef HAVE_DHCP6
   if (daemon->doing_dhcp6 || daemon->relay6 || daemon->doing_ra)
     join_multicast(0);
-  
+
   if (daemon->doing_dhcp6 || daemon->doing_ra)
     dhcp_construct_contexts(now);
-  
+
   if (daemon->doing_dhcp6)
     lease_find_interfaces(now);
 #endif
diff --git a/src/option.c b/src/option.c
index f4d22a2..be08a34 100644
--- a/src/option.c
+++ b/src/option.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -129,7 +129,7 @@ struct myoption {
 #define LOPT_AUTHPEER      318
 #define LOPT_IPSET         319
 #define LOPT_SYNTH         320
-#ifdef OPTION6_PREFIX_CLASS 
+#ifdef OPTION6_PREFIX_CLASS
 #define LOPT_PREF_CLSS     321
 #endif
 #define LOPT_RELAY         323
@@ -160,13 +160,13 @@ struct myoption {
 #define LOPT_DHCPTTL       348
 #define LOPT_TFTP_MTU      349
 #define LOPT_REPLY_DELAY   350
- 
+
 #ifdef HAVE_GETOPT_LONG
-static const struct option opts[] =  
+static const struct option opts[] =
 #else
-static const struct myoption opts[] = 
+static const struct myoption opts[] =
 #endif
-  { 
+  {
     { "version", 0, 0, 'v' },
     { "no-hosts", 0, 0, 'h' },
     { "no-poll", 0, 0, 'n' },
@@ -267,8 +267,8 @@ static const struct myoption opts[] =
     { "tftp-port-range", 1, 0, LOPT_TFTPPORTS },
     { "stop-dns-rebind", 0, 0, LOPT_REBIND },
     { "rebind-domain-ok", 1, 0, LOPT_NO_REBIND },
-    { "all-servers", 0, 0, LOPT_NOLAST }, 
-    { "dhcp-match", 1, 0, LOPT_MATCH }, 
+    { "all-servers", 0, 0, LOPT_NOLAST },
+    { "dhcp-match", 1, 0, LOPT_MATCH },
     { "dhcp-broadcast", 2, 0, LOPT_BROADCAST },
     { "neg-ttl", 1, 0, LOPT_NEGTTL },
     { "max-ttl", 1, 0, LOPT_MAXTTL },
@@ -304,7 +304,7 @@ static const struct myoption opts[] =
     { "auth-ttl", 1, 0, LOPT_AUTHTTL },
     { "auth-soa", 1, 0, LOPT_AUTHSOA },
     { "auth-sec-servers", 1, 0, LOPT_AUTHSFS },
-    { "auth-peer", 1, 0, LOPT_AUTHPEER }, 
+    { "auth-peer", 1, 0, LOPT_AUTHPEER },
     { "ipset", 1, 0, LOPT_IPSET },
     { "synth-domain", 1, 0, LOPT_SYNTH },
     { "dnssec", 0, 0, LOPT_SEC_VALID },
@@ -313,7 +313,7 @@ static const struct myoption opts[] =
     { "dnssec-check-unsigned", 0, 0, LOPT_DNSSEC_CHECK },
     { "dnssec-no-timecheck", 0, 0, LOPT_DNSSEC_TIME },
     { "dnssec-timestamp", 1, 0, LOPT_DNSSEC_STAMP },
-#ifdef OPTION6_PREFIX_CLASS 
+#ifdef OPTION6_PREFIX_CLASS
     { "dhcp-prefix-class", 1, 0, LOPT_PREF_CLSS },
 #endif
     { "dhcp-relay", 1, 0, LOPT_RELAY },
@@ -344,11 +344,11 @@ static struct {
   { 'a', ARG_DUP, "<ipaddr>",  gettext_noop("Specify local address(es) to listen on."), NULL },
   { 'A', ARG_DUP, "/<domain>/<ipaddr>", gettext_noop("Return ipaddr for all hosts in specified domains."), NULL },
   { 'b', OPT_BOGUSPRIV, NULL, gettext_noop("Fake reverse lookups for RFC1918 private address ranges."), NULL },
-  { 'B', ARG_DUP, "<ipaddr>", gettext_noop("Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."), NULL }, 
+  { 'B', ARG_DUP, "<ipaddr>", gettext_noop("Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)."), NULL },
   { 'c', ARG_ONE, "<integer>", gettext_noop("Specify the size of the cache in entries (defaults to %s)."), "$" },
   { 'C', ARG_DUP, "<path>", gettext_noop("Specify configuration file (defaults to %s)."), CONFFILE },
   { 'd', OPT_DEBUG, NULL, gettext_noop("Do NOT fork into the background: run in debug mode."), NULL },
-  { 'D', OPT_NODOTS_LOCAL, NULL, gettext_noop("Do NOT forward queries with no domain part."), NULL }, 
+  { 'D', OPT_NODOTS_LOCAL, NULL, gettext_noop("Do NOT forward queries with no domain part."), NULL },
   { 'e', OPT_SELFMX, NULL, gettext_noop("Return self-pointing MX records for local hosts."), NULL },
   { 'E', OPT_EXPAND, NULL, gettext_noop("Expand simple names in /etc/hosts with domain-suffix."), NULL },
   { 'f', OPT_FILTER, NULL, gettext_noop("Don't forward spurious DNS requests from Windows hosts."), NULL },
@@ -357,8 +357,8 @@ static struct {
   { 'G', ARG_DUP, "<hostspec>", gettext_noop("Set address or hostname for a specified machine."), NULL },
   { LOPT_DHCP_HOST, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from file."), NULL },
   { LOPT_DHCP_OPTS, ARG_DUP, "<path>", gettext_noop("Read DHCP option specs from file."), NULL },
-  { LOPT_DHCP_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from a directory."), NULL }, 
-  { LOPT_DHOPT_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read DHCP options from a directory."), NULL }, 
+  { LOPT_DHCP_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from a directory."), NULL },
+  { LOPT_DHOPT_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read DHCP options from a directory."), NULL },
   { LOPT_TAG_IF, ARG_DUP, "tag-expression", gettext_noop("Evaluate conditional tag expression."), NULL },
   { 'h', OPT_NO_HOSTS, NULL, gettext_noop("Do NOT load %s file."), HOSTSFILE },
   { 'H', ARG_DUP, "<path>", gettext_noop("Specify a hosts file to be read in addition to %s."), HOSTSFILE },
@@ -370,14 +370,14 @@ static struct {
   { LOPT_REMOTE, ARG_DUP, "set:<tag>,<remote>", gettext_noop("Map RFC3046 remote-id to tag."), NULL },
   { LOPT_SUBSCR, ARG_DUP, "set:<tag>,<remote>", gettext_noop("Map RFC3993 subscriber-id to tag."), NULL },
   { 'J', ARG_DUP, "tag:<tag>...", gettext_noop("Don't do DHCP for hosts with tag set."), NULL },
-  { LOPT_BROADCAST, ARG_DUP, "[=tag:<tag>...]", gettext_noop("Force broadcast replies for hosts with tag set."), NULL }, 
+  { LOPT_BROADCAST, ARG_DUP, "[=tag:<tag>...]", gettext_noop("Force broadcast replies for hosts with tag set."), NULL },
   { 'k', OPT_NO_FORK, NULL, gettext_noop("Do NOT fork into the background, do NOT run in debug mode."), NULL },
   { 'K', OPT_AUTHORITATIVE, NULL, gettext_noop("Assume we are the only DHCP server on the local network."), NULL },
   { 'l', ARG_ONE, "<path>", gettext_noop("Specify where to store DHCP leases (defaults to %s)."), LEASEFILE },
   { 'L', OPT_LOCALMX, NULL, gettext_noop("Return MX records for local hosts."), NULL },
   { 'm', ARG_DUP, "<host_name>,<target>,<pref>", gettext_noop("Specify an MX record."), NULL },
   { 'M', ARG_DUP, "<bootp opts>", gettext_noop("Specify BOOTP options to DHCP server."), NULL },
-  { 'n', OPT_NO_POLL, NULL, gettext_noop("Do NOT poll %s file, reload only on SIGHUP."), RESOLVFILE }, 
+  { 'n', OPT_NO_POLL, NULL, gettext_noop("Do NOT poll %s file, reload only on SIGHUP."), RESOLVFILE },
   { 'N', OPT_NO_NEG, NULL, gettext_noop("Do NOT cache failed search results."), NULL },
   { 'o', OPT_ORDER, NULL, gettext_noop("Use nameservers strictly in the order given in %s."), RESOLVFILE },
   { 'O', ARG_DUP, "<optspec>", gettext_noop("Specify options to be sent to DHCP clients."), NULL },
@@ -387,7 +387,7 @@ static struct {
   { 'q', ARG_DUP, NULL, gettext_noop("Log DNS queries."), NULL },
   { 'Q', ARG_ONE, "<integer>", gettext_noop("Force the originating port for upstream DNS queries."), NULL },
   { 'R', OPT_NO_RESOLV, NULL, gettext_noop("Do NOT read resolv.conf."), NULL },
-  { 'r', ARG_DUP, "<path>", gettext_noop("Specify path to resolv.conf (defaults to %s)."), RESOLVFILE }, 
+  { 'r', ARG_DUP, "<path>", gettext_noop("Specify path to resolv.conf (defaults to %s)."), RESOLVFILE },
   { LOPT_SERVERS_FILE, ARG_ONE, "<path>", gettext_noop("Specify path to file with server= options"), NULL },
   { 'S', ARG_DUP, "/<domain>/<ipaddr>", gettext_noop("Specify address(es) of upstream servers with optional domains."), NULL },
   { LOPT_REV_SERV, ARG_DUP, "<addr>/<prefix>,<ipaddr>", gettext_noop("Specify address of upstream servers for reverse address queries"), NULL },
@@ -399,7 +399,7 @@ static struct {
   { LOPT_MAXTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live in seconds for maximum TTL to send to clients."), NULL },
   { LOPT_MAXCTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live ceiling for cache."), NULL },
   { LOPT_MINCTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live floor for cache."), NULL },
-  { 'u', ARG_ONE, "<username>", gettext_noop("Change to this user after startup. (defaults to %s)."), CHUSER }, 
+  { 'u', ARG_ONE, "<username>", gettext_noop("Change to this user after startup. (defaults to %s)."), CHUSER },
   { 'U', ARG_DUP, "set:<tag>,<class>", gettext_noop("Map DHCP vendor class to tag."), NULL },
   { 'v', 0, NULL, gettext_noop("Display dnsmasq version and copyright information."), NULL },
   { 'V', ARG_DUP, "<ipaddr>,<ipaddr>,<netmask>", gettext_noop("Translate IPv4 addresses from upstream servers."), NULL },
@@ -426,7 +426,7 @@ static struct {
   { '7', ARG_DUP, "<path>", gettext_noop("Read configuration from all the files in this directory."), NULL },
   { '8', ARG_ONE, "<facility>|<file>", gettext_noop("Log to this syslog facility or file. (defaults to DAEMON)"), NULL },
   { '9', OPT_LEASE_RO, NULL, gettext_noop("Do not use leasefile."), NULL },
-  { '0', ARG_ONE, "<integer>", gettext_noop("Maximum number of concurrent DNS queries. (defaults to %s)"), "!" }, 
+  { '0', ARG_ONE, "<integer>", gettext_noop("Maximum number of concurrent DNS queries. (defaults to %s)"), "!" },
   { LOPT_RELOAD, OPT_RELOAD, NULL, gettext_noop("Clear DNS cache when reloading %s."), RESOLVFILE },
   { LOPT_NO_NAMES, ARG_DUP, "[=tag:<tag>]...", gettext_noop("Ignore hostnames provided by DHCP clients."), NULL },
   { LOPT_OVERRIDE, OPT_NO_OVERRIDE, NULL, gettext_noop("Do NOT reuse filename and server fields for extra DHCP options."), NULL },
@@ -485,7 +485,7 @@ static struct {
   { LOPT_DNSSEC_CHECK, OPT_DNSSEC_NO_SIGN, NULL, gettext_noop("Ensure answers without DNSSEC are in unsigned zones."), NULL },
   { LOPT_DNSSEC_TIME, OPT_DNSSEC_TIME, NULL, gettext_noop("Don't check DNSSEC signature timestamps until first cache-reload"), NULL },
   { LOPT_DNSSEC_STAMP, ARG_ONE, "<path>", gettext_noop("Timestamp file to verify system clock for DNSSEC"), NULL },
-#ifdef OPTION6_PREFIX_CLASS 
+#ifdef OPTION6_PREFIX_CLASS
   { LOPT_PREF_CLSS, ARG_DUP, "set:tag,<class>", gettext_noop("Specify DHCPv6 prefix class"), NULL },
 #endif
   { LOPT_RA_PARAM, ARG_DUP, "<iface>,[mtu:<value>|<interface>|off,][<prio>,]<intval>[,<lifetime>]", gettext_noop("Set MTU, priority, resend-interval and router-lifetime"), NULL },
@@ -494,18 +494,18 @@ static struct {
   { LOPT_QUIET_RA, OPT_QUIET_RA, NULL, gettext_noop("Do not log RA."), NULL },
   { LOPT_LOCAL_SERVICE, OPT_LOCAL_SERVICE, NULL, gettext_noop("Accept queries only from directly-connected networks."), NULL },
   { LOPT_LOOP_DETECT, OPT_LOOP_DETECT, NULL, gettext_noop("Detect and remove DNS forwarding loops."), NULL },
-  { LOPT_IGNORE_ADDR, ARG_DUP, "<ipaddr>", gettext_noop("Ignore DNS responses containing ipaddr."), NULL }, 
-  { LOPT_DHCPTTL, ARG_ONE, "<ttl>", gettext_noop("Set TTL in DNS responses with DHCP-derived addresses."), NULL }, 
+  { LOPT_IGNORE_ADDR, ARG_DUP, "<ipaddr>", gettext_noop("Ignore DNS responses containing ipaddr."), NULL },
+  { LOPT_DHCPTTL, ARG_ONE, "<ttl>", gettext_noop("Set TTL in DNS responses with DHCP-derived addresses."), NULL },
   { LOPT_REPLY_DELAY, ARG_ONE, "<integer>", gettext_noop("Delay DHCP replies for at least number of seconds."), NULL },
   { 0, 0, NULL, NULL, NULL }
-}; 
+};
 
 /* We hide metacharacters in quoted strings by mapping them into the ASCII control
    character space. Note that the \0, \t \b \r \033 and \n characters are carefully placed in the
    following sequence so that they map to themselves: it is therefore possible to call
    unhide_metas repeatedly on string without breaking things.
-   The transformation gets undone by opt_canonicalise, atoi_check and opt_string_alloc, and a 
-   couple of other places. 
+   The transformation gets undone by opt_canonicalise, atoi_check and opt_string_alloc, and a
+   couple of other places.
    Note that space is included here so that
    --dhcp-option=3, string
    has five characters, whilst
@@ -522,17 +522,17 @@ static char hide_meta(char c)
   for (i = 0; i < (sizeof(meta) - 1); i++)
     if (c == meta[i])
       return (char)i;
-  
+
   return c;
 }
 
 static char unhide_meta(char cr)
-{ 
+{
   unsigned int c = cr;
-  
+
   if (c < (sizeof(meta) - 1))
     cr = meta[c];
-  
+
   return cr;
 }
 
@@ -555,23 +555,23 @@ static void *opt_malloc(size_t size)
     }
   else
     ret = safe_malloc(size);
-  
+
   return ret;
 }
 
 static char *opt_string_alloc(char *cp)
 {
   char *ret = NULL;
-  
+
   if (cp && strlen(cp) != 0)
     {
       ret = opt_malloc(strlen(cp)+1);
-      strcpy(ret, cp); 
-      
+      strcpy(ret, cp);
+
       /* restore hidden metachars */
       unhide_metas(ret);
     }
-    
+
   return ret;
 }
 
@@ -585,15 +585,15 @@ static char *split_chr(char *s, char c)
 
   if (!s || !(comma = strchr(s, c)))
     return NULL;
-  
+
   p = comma;
   *comma = ' ';
-  
+
   for (; *comma == ' '; comma++);
- 
+
   for (; (p >= s) && *p == ' '; p--)
     *p = 0;
-    
+
   return comma;
 }
 
@@ -630,7 +630,7 @@ static int atoi_check(char *a, int *res)
     return 0;
 
   unhide_metas(a);
-  
+
   for (p = a; *p; p++)
      if (*p < '0' || *p > '9')
        return 0;
@@ -705,15 +705,15 @@ static void do_usage(void)
   printf(_("Use short options only on the command line.\n"));
 #endif
   printf(_("Valid options are:\n"));
-  
+
   for (i = 0; usage[i].opt != 0; i++)
     {
-      char *desc = usage[i].flagdesc; 
+      char *desc = usage[i].flagdesc;
       char *eq = "=";
-      
+
       if (!desc || *desc == '[')
 	eq = "";
-      
+
       if (!desc)
 	desc = "";
 
@@ -724,10 +724,10 @@ static void do_usage(void)
 	sprintf(buff, "-%c, ", usage[i].opt);
       else
 	sprintf(buff, "    ");
-      
+
       sprintf(buff+4, "--%s%s%s", opts[j].name, eq, desc);
       printf("%-55.55s", buff);
-	     
+
       if (usage[i].arg)
 	{
 	  strcpy(buff, usage[i].arg);
@@ -742,7 +742,7 @@ static void do_usage(void)
 
 #define ret_err(x) do { strcpy(errstr, (x)); return 0; } while (0)
 
-static char *parse_mysockaddr(char *arg, union mysockaddr *addr) 
+static char *parse_mysockaddr(char *arg, union mysockaddr *addr)
 {
   if (inet_pton(AF_INET, arg, &addr->in.sin_addr) > 0)
     addr->sa.sa_family = AF_INET;
@@ -752,7 +752,7 @@ static char *parse_mysockaddr(char *arg, union mysockaddr *addr)
 #endif
   else
     return _("bad address");
-   
+
   return NULL;
 }
 
@@ -765,7 +765,7 @@ char *parse_server(char *arg, union mysockaddr *addr, union mysockaddr *source_a
   int scope_index = 0;
   char *scope_id;
 #endif
-  
+
   if (!arg || strlen(arg) == 0)
     {
       *flags |= SERV_NO_ADDR;
@@ -777,15 +777,15 @@ char *parse_server(char *arg, union mysockaddr *addr, union mysockaddr *source_a
       (portno = split_chr(source, '#')) &&
       !atoi_check16(portno, &source_port))
     return _("bad port");
-  
+
   if ((portno = split_chr(arg, '#')) && /* is there a port no. */
       !atoi_check16(portno, &serv_port))
     return _("bad port");
-  
+
 #ifdef HAVE_IPV6
   scope_id = split_chr(arg, '%');
 #endif
-  
+
   if (source) {
     interface_opt = split_chr(source, '@');
 
@@ -801,14 +801,14 @@ char *parse_server(char *arg, union mysockaddr *addr, union mysockaddr *source_a
 
   if (inet_pton(AF_INET, arg, &addr->in.sin_addr) > 0)
     {
-      addr->in.sin_port = htons(serv_port);	
+      addr->in.sin_port = htons(serv_port);
       addr->sa.sa_family = source_addr->sa.sa_family = AF_INET;
 #ifdef HAVE_SOCKADDR_SA_LEN
       source_addr->in.sin_len = addr->in.sin_len = sizeof(struct sockaddr_in);
 #endif
       source_addr->in.sin_addr.s_addr = INADDR_ANY;
       source_addr->in.sin_port = htons(daemon->query_port);
-      
+
       if (source)
 	{
 	  if (flags)
@@ -819,7 +819,7 @@ char *parse_server(char *arg, union mysockaddr *addr, union mysockaddr *source_a
 #if defined(SO_BINDTODEVICE)
 	      if (interface_opt)
 		return _("interface can only be specified once");
-	      
+
 	      source_addr->in.sin_addr.s_addr = INADDR_ANY;
 	      strncpy(interface, source, IF_NAMESIZE - 1);
 #else
@@ -833,10 +833,10 @@ char *parse_server(char *arg, union mysockaddr *addr, union mysockaddr *source_a
     {
       if (scope_id && (scope_index = if_nametoindex(scope_id)) == 0)
 	return _("bad interface name");
-      
+
       addr->in6.sin6_port = htons(serv_port);
       addr->in6.sin6_scope_id = scope_index;
-      source_addr->in6.sin6_addr = in6addr_any; 
+      source_addr->in6.sin6_addr = in6addr_any;
       source_addr->in6.sin6_port = htons(daemon->query_port);
       source_addr->in6.sin6_scope_id = 0;
       addr->sa.sa_family = source_addr->sa.sa_family = AF_INET6;
@@ -854,7 +854,7 @@ char *parse_server(char *arg, union mysockaddr *addr, union mysockaddr *source_a
 #if defined(SO_BINDTODEVICE)
 	      if (interface_opt)
 		return _("interface can only be specified once");
-	      
+
 	      source_addr->in6.sin6_addr = in6addr_any;
 	      strncpy(interface, source, IF_NAMESIZE - 1);
 #else
@@ -898,7 +898,7 @@ static struct server *add_rev4(struct in_addr addr, int msize)
     }
 
   p += sprintf(p, "in-addr.arpa");
-  
+
   serv->flags = SERV_HAS_DOMAIN;
   serv->next = daemon->servers;
   daemon->servers = serv;
@@ -912,21 +912,21 @@ static struct server *add_rev6(struct in6_addr *addr, int msize)
   struct server *serv = opt_malloc(sizeof(struct server));
   char *p;
   int i;
-				  
+
   memset(serv, 0, sizeof(struct server));
   p = serv->domain = opt_malloc(73); /* strlen("32*<n.>ip6.arpa")+1 */
-  
+
   for (i = msize-1; i >= 0; i -= 4)
-    { 
+    {
       int dig = ((unsigned char *)addr)[i>>3];
       p += sprintf(p, "%.1x.", (i>>2) & 1 ? dig & 15 : dig >> 4);
     }
   p += sprintf(p, "ip6.arpa");
-  
+
   serv->flags = SERV_HAS_DOMAIN;
   serv->next = daemon->servers;
   daemon->servers = serv;
-  
+
   return serv;
 }
 
@@ -936,7 +936,7 @@ static int is_tag_prefix(char *arg)
 {
   if (arg && (strstr(arg, "net:") == arg || strstr(arg, "tag:") == arg))
     return 1;
-  
+
   return 0;
 }
 
@@ -944,7 +944,7 @@ static char *set_prefix(char *arg)
 {
    if (strstr(arg, "set:") == arg)
      return arg+4;
-   
+
    return arg;
 }
 
@@ -965,15 +965,15 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
   new->netid = NULL;
   new->val = NULL;
   new->opt = 0;
-  
+
   while (arg)
     {
-      comma = split(arg);      
+      comma = split(arg);
 
       for (cp = arg; *cp; cp++)
 	if (*cp < '0' || *cp > '9')
 	  break;
-      
+
       if (!*cp)
 	{
 	  new->opt = atoi(arg);
@@ -981,7 +981,7 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	  option_ok = 1;
 	  break;
 	}
-      
+
       if (strstr(arg, "option:") == arg)
 	{
 	  if ((new->opt = lookup_dhcp_opt(AF_INET, arg+7)) != -1)
@@ -999,7 +999,7 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	  for (cp = arg+8; *cp; cp++)
 	    if (*cp < '0' || *cp > '9')
 	      break;
-	 
+
 	  if (!*cp)
 	    {
 	      new->opt = atoi(arg+8);
@@ -1051,8 +1051,8 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	  new->netid->next = np;
 	  np = new->netid;
 	}
-      
-      arg = comma; 
+
+      arg = comma;
     }
 
 #ifdef HAVE_DHCP6
@@ -1060,7 +1060,7 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
     {
       if (new->flags & (DHOPT_VENDOR | DHOPT_ENCAPSULATE))
 	ret_err(_("unsupported encapsulation for IPv6 option"));
-      
+
       if (opt_len == 0 &&
 	  !(new->flags & DHOPT_RFC3925))
 	opt_len = lookup_dhcp_len(AF_INET6, new->opt);
@@ -1070,11 +1070,11 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
     if (opt_len == 0 &&
 	!(new->flags & (DHOPT_VENDOR | DHOPT_ENCAPSULATE | DHOPT_RFC3925)))
       opt_len = lookup_dhcp_len(AF_INET, new->opt);
-  
+
   /* option may be missing with rfc3925 match */
   if (!option_ok)
     ret_err(_("bad dhcp-option"));
-  
+
   if (comma)
     {
       /* characterise the value */
@@ -1094,13 +1094,13 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	    digs++;
 	    is_dec = is_addr = 0;
 	  }
-	else if (c == '/') 
+	else if (c == '/')
 	  {
 	    is_addr6 = is_dec = is_hex = 0;
 	    if (cp == comma) /* leading / means a pathname */
 	      is_addr = 0;
-	  } 
-	else if (c == '.')	
+	  }
+	else if (c == '.')
 	  {
 	    is_addr6 = is_dec = is_hex = 0;
 	    dots++;
@@ -1121,7 +1121,7 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	    else
 	      is_dec = 0;
 	    if (!((c >='A' && c <= 'F') ||
-		  (c >='a' && c <= 'f') || 
+		  (c >='a' && c <= 'f') ||
 		  (c == '*' && (flags & DHOPT_MATCH))))
 	      {
 		is_hex = 0;
@@ -1131,15 +1131,15 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	  }
 	else
 	  found_dig = 1;
-     
+
       if (!found_dig)
 	is_dec = is_addr = 0;
-     
+
       /* We know that some options take addresses */
       if (opt_len & OT_ADDR_LIST)
 	{
 	  is_string = is_dec = is_hex = 0;
-	  
+
 	  if (!is6 && (!is_addr || dots == 0))
 	    ret_err(_("bad IP address"));
 
@@ -1149,7 +1149,7 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
       /* or names */
       else if (opt_len & (OT_NAME | OT_RFC1035_NAME | OT_CSTRING))
 	is_addr6 = is_addr = is_dec = is_hex = 0;
-      
+
       if (found_dig && (opt_len & OT_TIME) && strlen(comma) > 0)
 	{
 	  int val, fac = 1;
@@ -1176,12 +1176,12 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	    case 'S':
 	      comma[strlen(comma) - 1] = 0;
 	    }
-	  
+
 	  new->len = 4;
 	  new->val = opt_malloc(4);
 	  val = atoi(comma);
-	  *((int *)new->val) = htonl(val * fac);	  
-	}  
+	  *((int *)new->val) = htonl(val * fac);
+	}
       else if (is_hex && digs > 1)
 	{
 	  new->len = digs;
@@ -1210,12 +1210,12 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	    new->len = 2;
 	  else if (lenchar == 'i')
 	    new->len = 4;
-	  
+
 	  new->val = opt_malloc(new->len);
 	  for (i=0; i<new->len; i++)
 	    new->val[i] = val>>((new->len - i - 1)*8);
 	}
-      else if (is_addr && !is6)	
+      else if (is_addr && !is6)
 	{
 	  struct in_addr in;
 	  unsigned char *op;
@@ -1225,13 +1225,13 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	  new->val = op = opt_malloc((5 * addrs) + 1);
 	  new->flags |= DHOPT_ADDR;
 
-	  if (!(new->flags & (DHOPT_ENCAPSULATE | DHOPT_VENDOR | DHOPT_RFC3925)) && 
+	  if (!(new->flags & (DHOPT_ENCAPSULATE | DHOPT_VENDOR | DHOPT_RFC3925)) &&
 	      new->opt == OPTION_SIP_SERVER)
 	    {
 	      *(op++) = 1; /* RFC 3361 "enc byte" */
 	      new->flags &= ~DHOPT_ADDR;
 	    }
-	  while (addrs--) 
+	  while (addrs--)
 	    {
 	      cp = comma;
 	      comma = split(cp);
@@ -1257,7 +1257,7 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 		  if (netsize > 24)
 		    *op++ = *p++;
 		  new->flags &= ~DHOPT_ADDR; /* cannot re-write descriptor format */
-		} 
+		}
 	    }
 	  new->len = op - new->val;
 	}
@@ -1266,25 +1266,25 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	  unsigned char *op;
 	  new->val = op = opt_malloc(16 * addrs);
 	  new->flags |= DHOPT_ADDR6;
-	  while (addrs--) 
+	  while (addrs--)
 	    {
 	      cp = comma;
 	      comma = split(cp);
-	      
+
 	      /* check for [1234::7] */
 	      if (*cp == '[')
 		cp++;
 	      if (strlen(cp) > 1 && cp[strlen(cp)-1] == ']')
 		cp[strlen(cp)-1] = 0;
-	      
+
 	      if (inet_pton(AF_INET6, cp, op))
 		{
 		  op += IN6ADDRSZ;
 		  continue;
 		}
-	  
+
 	      ret_err(_("bad IPv6 address"));
-	    } 
+	    }
 	  new->len = op - new->val;
 	}
       else if (is_string)
@@ -1298,10 +1298,10 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	      unsigned char *p, *m = NULL, *newp;
 	      size_t newlen, len = 0;
 	      int header_size = (new->opt == OPTION_DOMAIN_SEARCH) ? 0 : 1;
-	      
+
 	      arg = comma;
 	      comma = split(arg);
-	      
+
 	      while (arg && *arg)
 		{
 		  char *in, *dom = NULL;
@@ -1311,10 +1311,10 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 		    {
 		      if (!(dom = canonicalise_opt(arg)))
 			ret_err(_("bad domain in dhcp-option"));
-			
+
 		      domlen = strlen(dom) + 2;
 		    }
-		      
+
 		  newp = opt_malloc(len + domlen + header_size);
 		  if (m)
 		    {
@@ -1324,9 +1324,9 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 		  m = newp;
 		  p = m + header_size;
 		  q = p + len;
-		  
+
 		  /* add string on the end in RFC1035 format */
-		  for (in = dom; in && *in;) 
+		  for (in = dom; in && *in;)
 		    {
 		      unsigned char *cp = q++;
 		      int j;
@@ -1338,24 +1338,24 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 		    }
 		  *q++ = 0;
 		  free(dom);
-		  
+
 		  /* Now tail-compress using earlier names. */
 		  newlen = q - p;
 		  for (tail = p + len; *tail; tail += (*tail) + 1)
 		    for (r = p; r - p < (int)len; r += (*r) + 1)
 		      if (strcmp((char *)r, (char *)tail) == 0)
 			{
-			  PUTSHORT((r - p) | 0xc000, tail); 
+			  PUTSHORT((r - p) | 0xc000, tail);
 			  newlen = tail - p;
 			  goto end;
 			}
 		end:
 		  len = newlen;
-		  
+
 		  arg = comma;
 		  comma = split(arg);
 		}
-      
+
 	      /* RFC 3361, enc byte is zero for names */
 	      if (new->opt == OPTION_SIP_SERVER)
 		m[0] = 0;
@@ -1372,19 +1372,19 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	      for (i = 0; comma[i]; i++)
 		if (comma[i] == ',')
 		  commas++;
-	      
-	      newp = opt_malloc(strlen(comma)+(2*commas));	  
+
+	      newp = opt_malloc(strlen(comma)+(2*commas));
 	      p = newp;
 	      arg = comma;
 	      comma = split(arg);
-	      
+
 	      while (arg && *arg)
 		{
 		  u16 len = strlen(arg);
 		  unhide_metas(arg);
 		  PUTSHORT(len, p);
 		  memcpy(p, arg, len);
-		  p += len; 
+		  p += len;
 
 		  arg = comma;
 		  comma = split(arg);
@@ -1399,21 +1399,21 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	      int len = 0;
 	      arg = comma;
 	      comma = split(arg);
-	      
+
 	      while (arg && *arg)
 		{
 		  char *dom = canonicalise_opt(arg);
 		  if (!dom)
 		    ret_err(_("bad domain in dhcp-option"));
-		    		  
+
 		  newp = opt_malloc(len + strlen(dom) + 2);
-		  
+
 		  if (p)
 		    {
 		      memcpy(newp, p, len);
 		      free(p);
 		    }
-		  
+
 		  p = newp;
 		  end = do_rfc1035_name(p + len, dom, NULL);
 		  *end++ = 0;
@@ -1423,7 +1423,7 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 		  arg = comma;
 		  comma = split(arg);
 		}
-	      
+
 	      new->val = p;
 	      new->len = len;
 	    }
@@ -1438,19 +1438,19 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
 	}
     }
 
-  if (!is6 && 
-      ((new->len > 255) || 
+  if (!is6 &&
+      ((new->len > 255) ||
       (new->len > 253 && (new->flags & (DHOPT_VENDOR | DHOPT_ENCAPSULATE))) ||
        (new->len > 250 && (new->flags & DHOPT_RFC3925))))
     ret_err(_("dhcp-option too long"));
-  
+
   if (flags == DHOPT_MATCH)
     {
       if ((new->flags & (DHOPT_ENCAPSULATE | DHOPT_VENDOR)) ||
 	  !new->netid ||
 	  new->netid->next)
 	ret_err(_("illegal dhcp-match"));
-       
+
       if (is6)
 	{
 	  new->next = daemon->dhcp_match6;
@@ -1472,7 +1472,7 @@ static int parse_dhcp_opt(char *errstr, char *arg, int flags)
       new->next = daemon->dhcp_opts;
       daemon->dhcp_opts = new;
     }
-    
+
   return 1;
 }
 
@@ -1495,18 +1495,18 @@ void reset_option_bool(unsigned int opt)
 }
 
 static int one_opt(int option, char *arg, char *errstr, char *gen_err, int command_line, int servers_only)
-{      
+{
   int i;
   char *comma;
 
   if (option == '?')
     ret_err(gen_err);
-  
+
   for (i=0; usage[i].opt != 0; i++)
     if (usage[i].opt == option)
       {
 	 int rept = usage[i].rept;
-	 
+
 	 if (command_line)
 	   {
 	     /* command line */
@@ -1524,17 +1524,17 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	       usage[i].rept = ARG_USED_FILE;
 	   }
 
-	 if (rept != ARG_DUP && rept != ARG_ONE && rept != ARG_USED_CL) 
+	 if (rept != ARG_DUP && rept != ARG_ONE && rept != ARG_USED_CL)
 	   {
 	     set_option_bool(rept);
 	     return 1;
 	   }
-       
+
 	 break;
       }
-  
+
   switch (option)
-    { 
+    {
     case 'C': /* --conf-file */
       {
 	char *file = opt_string_alloc(arg);
@@ -1546,7 +1546,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	break;
       }
 
-    case '7': /* --conf-dir */	      
+    case '7': /* --conf-dir */
       {
 	DIR *dir_stream;
 	struct dirent *ent;
@@ -1555,12 +1555,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	  char *suffix;
 	  struct list *next;
 	} *ignore_suffix = NULL, *match_suffix = NULL, *li;
-	
+
 	comma = split(arg);
 	if (!(directory = opt_string_alloc(arg)))
 	  break;
-	
-	for (arg = comma; arg; arg = comma) 
+
+	for (arg = comma; arg; arg = comma)
 	  {
 	    comma = split(arg);
 	    if (strlen(arg) != 0)
@@ -1588,15 +1588,15 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		  }
 	      }
 	  }
-	
+
 	if (!(dir_stream = opendir(directory)))
 	  die(_("cannot access directory %s: %s"), directory, EC_FILE);
-	
+
 	while ((ent = readdir(dir_stream)))
 	  {
 	    size_t len = strlen(ent->d_name);
 	    struct stat buf;
-	    
+
 	    /* ignore emacs backups and dotfiles */
 	    if (len == 0 ||
 		ent->d_name[len - 1] == '~' ||
@@ -1617,7 +1617,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		if (!li)
 		  continue;
 	      }
-	    
+
 	    for (li = ignore_suffix; li; li = li->next)
 	      {
 		/* check for proscribed suffices */
@@ -1628,7 +1628,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	      }
 	    if (li)
 	      continue;
-	    
+
 	    path = opt_malloc(strlen(directory) + len + 2);
 	    strcpy(path, directory);
 	    strcat(path, "/");
@@ -1637,14 +1637,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    /* files must be readable */
 	    if (stat(path, &buf) == -1)
 	      die(_("cannot access %s: %s"), path, EC_FILE);
-	    
+
 	    /* only reg files allowed. */
 	    if (S_ISREG(buf.st_mode))
 	      one_file(path, 0);
-	    
+
 	    free(path);
 	  }
-     
+
 	closedir(dir_stream);
 	free(directory);
 	for(; ignore_suffix; ignore_suffix = li)
@@ -1679,10 +1679,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	      if (!atoi_check(end, &new->mask))
 		ret_err(gen_err);
 	      new->addr_used = 1;
-	    } 
+	    }
 	  else if (!atoi_check(arg, &new->mask))
 	    ret_err(gen_err);
-	    
+
           daemon->add_subnet4 = new;
 
           if (comma)
@@ -1703,7 +1703,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
                   if (!atoi_check(comma, &new->mask))
                     ret_err(gen_err);
                 }
-          
+
 	      daemon->add_subnet6 = new;
 	    }
 	}
@@ -1716,20 +1716,20 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
       else
 	daemon->dbus_name = DNSMASQ_SERVICE;
       break;
-      
+
     case '8': /* --log-facility */
       /* may be a filename */
       if (strchr(arg, '/') || strcmp (arg, "-") == 0)
 	daemon->log_file = opt_string_alloc(arg);
       else
-	{	  
+	{
 #ifdef __ANDROID__
 	  ret_err(_("setting log facility is not possible under Android"));
 #else
 	  for (i = 0; facilitynames[i].c_name; i++)
 	    if (hostname_isequal((char *)facilitynames[i].c_name, arg))
 	      break;
-	  
+
 	  if (facilitynames[i].c_name)
 	    daemon->log_fac = facilitynames[i].c_val;
 	  else
@@ -1737,7 +1737,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 #endif
 	}
       break;
-      
+
     case 'x': /* --pid-file */
       daemon->runfile = opt_string_alloc(arg);
       break;
@@ -1746,7 +1746,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
       {
 	char *name = opt_string_alloc(arg);
 	struct resolvc *new, *list = daemon->resolv_files;
-	
+
 	if (list && list->is_default)
 	  {
 	    /* replace default resolv file - possibly with nothing */
@@ -1775,7 +1775,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
     case LOPT_SERVERS_FILE:
       daemon->servers_file = opt_string_alloc(arg);
       break;
-      
+
     case 'm':  /* --mx-host */
       {
 	int pref = 1;
@@ -1788,11 +1788,11 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    if ((prefstr = split(comma)) && !atoi_check16(prefstr, &pref))
 	      ret_err(_("bad MX preference"));
 	  }
-	
-	if (!(name = canonicalise_opt(arg)) || 
+
+	if (!(name = canonicalise_opt(arg)) ||
 	    (comma && !(target = canonicalise_opt(comma))))
 	  ret_err(_("bad MX name"));
-	
+
 	new = opt_malloc(sizeof(struct mx_srv_record));
 	new->next = daemon->mxnames;
 	daemon->mxnames = new;
@@ -1802,17 +1802,17 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	new->weight = pref;
 	break;
       }
-      
+
     case 't': /*  --mx-target */
       if (!(daemon->mxtarget = canonicalise_opt(arg)))
 	ret_err(_("bad MX target"));
       break;
 
-#ifdef HAVE_DHCP      
+#ifdef HAVE_DHCP
     case 'l':  /* --dhcp-leasefile */
       daemon->lease_file = opt_string_alloc(arg);
       break;
-      
+
       /* Sorry about the gross pre-processor abuse */
     case '6':             /* --dhcp-script */
     case LOPT_LUASCRIPT:  /* --dhcp-luascript */
@@ -1859,11 +1859,11 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	  {
 	    new->next = daemon->dhcp_opts_file;
 	    daemon->dhcp_opts_file = new;
-	  } 	  
-	else 
+	  }
+	else
 	  {
 	    new->next = daemon->dynamic_dirs;
-	    daemon->dynamic_dirs = new; 
+	    daemon->dynamic_dirs = new;
 	    if (option == LOPT_DHCP_INOTIFY)
 	      new->flags |= AH_DHCP_HST;
 	    else if (option == LOPT_DHOPT_INOTIFY)
@@ -1871,16 +1871,16 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    else if (option == LOPT_HOST_INOTIFY)
 	      new->flags |= AH_HOSTS;
 	  }
-	
+
 	break;
       }
-      
+
 
 #ifdef HAVE_AUTH
     case LOPT_AUTHSERV: /* --auth-server */
       if (!(comma = split(arg)))
 	ret_err(gen_err);
-      
+
       daemon->authserver = opt_string_alloc(arg);
       arg = comma;
       do {
@@ -1909,14 +1909,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 #endif
 		else
 		  ret_err(gen_err);
-	      } 
+	      }
 	  }
 	new->next = daemon->authinterface;
 	daemon->authinterface = new;
-	
+
 	arg = comma;
       } while (arg);
-            
+
       break;
 
     case LOPT_AUTHSFS: /* --auth-sec-servers */
@@ -1933,13 +1933,13 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	} while (arg);
 	break;
       }
-	
+
     case LOPT_AUTHZONE: /* --auth-zone */
       {
 	struct auth_zone *new;
-	
+
 	comma = split(arg);
-		
+
 	new = opt_malloc(sizeof(struct auth_zone));
 	new->domain = opt_string_alloc(arg);
 	new->subnet = NULL;
@@ -1958,10 +1958,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 
 	    comma = split(arg);
 	    prefix = split_chr(arg, '/');
-	    
+
 	    if (prefix && !atoi_check(prefix, &prefixlen))
 	      ret_err(gen_err);
-	    
+
 	    if (strstr(arg, "exclude:") == arg)
 	      {
 		    is_exclude = 1;
@@ -1982,7 +1982,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		subnet->flags = ADDRLIST_LITERAL | ADDRLIST_IPV6;
 	      }
 #endif
-	    else 
+	    else
 	      {
 		struct auth_name_list *name =  opt_malloc(sizeof(struct auth_name_list));
 		name->name = opt_string_alloc(arg);
@@ -2001,7 +2001,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		      ret_err(gen_err);
 		  }
 	      }
-	    
+
 	    if (subnet)
 	      {
 		subnet->addr = addr;
@@ -2020,7 +2020,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	  }
 	break;
       }
-      
+
     case  LOPT_AUTHSOA: /* --auth-soa */
       comma = split(arg);
       daemon->soa_sn = (u32)atoi(arg);
@@ -2037,12 +2037,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	  if (comma)
 	    {
 	      arg = comma;
-	      comma = split(arg); 
+	      comma = split(arg);
 	      daemon->soa_refresh = (u32)atoi(arg);
 	      if (comma)
 		{
 		  arg = comma;
-		  comma = split(arg); 
+		  comma = split(arg);
 		  daemon->soa_retry = (u32)atoi(arg);
 		  if (comma)
 		    daemon->soa_expiry = (u32)atoi(comma);
@@ -2069,7 +2069,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		{
 		  struct cond_domain *new = opt_malloc(sizeof(struct cond_domain));
 		  char *netpart;
-		  
+
 		  new->prefix = NULL;
 
 		  unhide_metas(comma);
@@ -2083,7 +2083,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		      else if (inet_pton(AF_INET, comma, &new->start))
 			{
 			  int mask = (1 << (32 - msize)) - 1;
-			  new->is6 = 0; 			  
+			  new->is6 = 0;
 			  new->start.s_addr = ntohl(htonl(new->start.s_addr) & ~mask);
 			  new->end.s_addr = new->start.s_addr | htonl(mask);
 			  if (arg)
@@ -2123,15 +2123,15 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 			  u64 mask = (1LLU << (128 - msize)) - 1LLU;
 			  u64 addrpart = addr6part(&new->start6);
 			  new->is6 = 1;
-			  
+
 			  /* prefix==64 overflows the mask calculation above */
 			  if (msize == 64)
 			    mask = (u64)-1LL;
-			  
+
 			  new->end6 = new->start6;
 			  setaddr6part(&new->start6, addrpart & ~mask);
 			  setaddr6part(&new->end6, addrpart | mask);
-			  
+
 			  if (msize < 64)
 			    ret_err(gen_err);
 			  else if (arg)
@@ -2141,16 +2141,16 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 				  if (!(new->prefix = canonicalise_opt(arg)) ||
 				      strlen(new->prefix) > MAXLABEL - INET6_ADDRSTRLEN)
 				    ret_err(_("bad prefix"));
-				}	
+				}
 			      else if (strcmp(arg, "local") != 0 || ((msize & 4) != 0))
 				ret_err(gen_err);
-			      else 
+			      else
 				{
 				  /* generate the equivalent of
 				     local=/xxx.yyy.zzz.ip6.arpa/ */
 				  struct server *serv = add_rev6(&new->start6, msize);
 				  serv->flags |= SERV_NO_ADDR;
-				  
+
 				  /* local=/<domain>/ */
 				  serv = opt_malloc(sizeof(struct server));
 				  memset(serv, 0, sizeof(struct server));
@@ -2189,7 +2189,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 			    ret_err(gen_err);
 			}
 #endif
-		      else 
+		      else
 			ret_err(gen_err);
 
 		      if (option != 's' && prefstr)
@@ -2214,12 +2214,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		}
 	      else if (option == 's')
 		daemon->domain_suffix = d;
-	      else 
+	      else
 		ret_err(gen_err);
 	    }
 	}
       break;
-      
+
     case LOPT_CPE_ID: /* --add-dns-client */
       if (arg)
 	daemon->dns_client_id = opt_string_alloc(arg);
@@ -2243,7 +2243,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
     case 'u':  /* --user */
       daemon->username = opt_string_alloc(arg);
       break;
-      
+
     case 'g':  /* --group */
       daemon->groupname = opt_string_alloc(arg);
       daemon->group_set = 1;
@@ -2254,7 +2254,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
       daemon->scriptuser = opt_string_alloc(arg);
       break;
 #endif
-      
+
     case 'i':  /* --interface */
       do {
 	struct iname *new = opt_malloc(sizeof(struct iname));
@@ -2268,7 +2268,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	arg = comma;
       } while (arg);
       break;
-      
+
     case LOPT_TFTP: /* --enable-tftp */
       set_option_bool(OPT_TFTP);
       if (!arg)
@@ -2299,7 +2299,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	arg = comma;
       } while (arg);
       break;
-      
+
     case 'B':  /* --bogus-nxdomain */
     case LOPT_IGNORE_ADDR: /* --ignore-address */
      {
@@ -2322,9 +2322,9 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	  }
 	else
 	  ret_err(gen_err); /* error */
-	break;	
+	break;
       }
-      
+
     case 'a':  /* --listen-address */
     case LOPT_AUTHPEER: /* --auth-peer */
       do {
@@ -2364,20 +2364,20 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	  {
 	    new->next = daemon->auth_peers;
 	    daemon->auth_peers = new;
-	  } 
+	  }
 	arg = comma;
       } while (arg);
       break;
-      
+
     case 'S':            /*  --server */
     case LOPT_LOCAL:     /*  --local */
     case 'A':            /*  --address */
     case LOPT_NO_REBIND: /*  --rebind-domain-ok */
       {
 	struct server *serv, *newlist = NULL;
-	
+
 	unhide_metas(arg);
-	
+
 	if (arg && (*arg == '/' || option == LOPT_NO_REBIND))
 	  {
 	    int rebind = !(*arg == '/');
@@ -2415,10 +2415,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    newlist->uid = rand32();
 #endif
 	  }
-	
+
 	if (servers_only && option == 'S')
 	  newlist->flags |= SERV_FROM_FILE;
-	
+
 	if (option == 'A')
 	  {
 	    newlist->flags |= SERV_LITERAL_ADDRESS;
@@ -2427,7 +2427,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	  }
 	else if (option == LOPT_NO_REBIND)
 	  newlist->flags |= SERV_NO_REBIND;
-	
+
 	if (!arg || !*arg)
 	  {
 	    if (!(newlist->flags & SERV_NO_REBIND))
@@ -2446,7 +2446,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    if (err)
 	      ret_err(err);
 	  }
-	
+
 	serv = newlist;
 	while (serv->next)
 	  {
@@ -2470,7 +2470,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 #ifdef HAVE_IPV6
 	struct in6_addr addr6;
 #endif
- 
+
 	unhide_metas(arg);
 	if (!arg || !(comma=split(arg)) || !(string = split_chr(arg, '/')) || !atoi_check(string, &size))
 	  ret_err(gen_err);
@@ -2487,15 +2487,15 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 #endif
 	else
 	  ret_err(gen_err);
- 
+
 	string = parse_server(comma, &serv->addr, &serv->source_addr, serv->interface, &serv->flags);
-	
+
 	if (string)
 	  ret_err(string);
-	
+
 	if (servers_only)
 	  serv->flags |= SERV_FROM_FILE;
-	
+
 	break;
       }
 
@@ -2512,10 +2512,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	 char **sets, **sets_pos;
 	 memset(ipsets, 0, sizeof(struct ipsets));
 	 unhide_metas(arg);
-	 if (arg && *arg == '/') 
+	 if (arg && *arg == '/')
 	   {
 	     arg++;
-	     while ((end = split_chr(arg, '/'))) 
+	     while ((end = split_chr(arg, '/')))
 	       {
 		 char *domain = NULL;
 		 /* elide leading dots - they are implied in the search algorithm */
@@ -2532,8 +2532,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		 ipsets->domain = domain;
 		 arg = end;
 	       }
-	   } 
-	 else 
+	   }
+	 else
 	   {
 	     ipsets->next = opt_malloc(sizeof(struct ipsets));
 	     ipsets = ipsets->next;
@@ -2546,12 +2546,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	     break;
 	   }
 	 size = 2;
-	 for (end = arg; *end; ++end) 
+	 for (end = arg; *end; ++end)
 	   if (*end == ',')
 	       ++size;
-     
+
 	 sets = sets_pos = opt_malloc(sizeof(char *) * size);
-	 
+
 	 do {
 	   end = split(arg);
 	   *sets_pos++ = opt_string_alloc(arg);
@@ -2562,36 +2562,36 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	   ipsets->next->sets = sets;
 	 ipsets->next = daemon->ipsets;
 	 daemon->ipsets = ipsets_head.next;
-	 
+
 	 break;
       }
 #endif
-      
+
     case 'c':  /* --cache-size */
       {
 	int size;
-	
+
 	if (!atoi_check(arg, &size))
 	  ret_err(gen_err);
 	else
 	  {
 	    /* zero is OK, and means no caching. */
-	    
+
 	    if (size < 0)
 	      size = 0;
 	    else if (size > 10000)
 	      size = 10000;
-	    
+
 	    daemon->cachesize = size;
 	  }
 	break;
       }
-      
+
     case 'p':  /* --port */
       if (!atoi_check16(arg, &daemon->port))
 	ret_err(gen_err);
       break;
-    
+
     case LOPT_MINPORT:  /* --min-port */
       if (!atoi_check16(arg, &daemon->min_port))
 	ret_err(gen_err);
@@ -2605,8 +2605,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
     case '0':  /* --dns-forward-max */
       if (!atoi_check(arg, &daemon->ftabsize))
 	ret_err(gen_err);
-      break;  
-    
+      break;
+
     case 'q': /* --log-queries */
       set_option_bool(OPT_LOG);
       if (arg && strcmp(arg, "extra") == 0)
@@ -2619,17 +2619,17 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	ret_err(gen_err);
       else if (daemon->max_logs > 100)
 	daemon->max_logs = 100;
-      break;  
+      break;
 
     case 'P': /* --edns-packet-max */
       {
 	int i;
 	if (!atoi_check(arg, &i))
 	  ret_err(gen_err);
-	daemon->edns_pktsz = (unsigned short)i;	
+	daemon->edns_pktsz = (unsigned short)i;
 	break;
       }
-      
+
     case 'Q':  /* --query-port */
       if (!atoi_check16(arg, &daemon->query_port))
 	ret_err(gen_err);
@@ -2638,7 +2638,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
       if (daemon->query_port == 0)
 	daemon->osport = 1;
       break;
-      
+
     case 'T':         /* --local-ttl */
     case LOPT_NEGTTL: /* --neg-ttl */
     case LOPT_MAXTTL: /* --max-ttl */
@@ -2673,19 +2673,19 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	  daemon->local_ttl = (unsigned long)ttl;
 	break;
       }
-      
+
 #ifdef HAVE_DHCP
     case 'X': /* --dhcp-lease-max */
       if (!atoi_check(arg, &daemon->dhcp_max))
 	ret_err(gen_err);
       break;
 #endif
-      
+
 #ifdef HAVE_TFTP
     case LOPT_TFTP_MAX:  /*  --tftp-max */
       if (!atoi_check(arg, &daemon->tftp_max))
 	ret_err(gen_err);
-      break;  
+      break;
 
     case LOPT_TFTP_MTU:  /*  --tftp-mtu */
       if (!atoi_check(arg, &daemon->tftp_mtu))
@@ -2707,18 +2707,18 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
       break;
 
     case LOPT_TFTPPORTS: /* --tftp-port-range */
-      if (!(comma = split(arg)) || 
+      if (!(comma = split(arg)) ||
 	  !atoi_check16(arg, &daemon->start_tftp_port) ||
 	  !atoi_check16(comma, &daemon->end_tftp_port))
 	ret_err(_("bad port range"));
-      
+
       if (daemon->start_tftp_port > daemon->end_tftp_port)
 	{
 	  int tmp = daemon->start_tftp_port;
 	  daemon->start_tftp_port = daemon->end_tftp_port;
 	  daemon->end_tftp_port = tmp;
-	} 
-      
+	}
+
       break;
 
     case LOPT_APREF: /* --tftp-unique-root */
@@ -2730,13 +2730,13 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
         ret_err(gen_err);
       break;
 #endif
-	      
+
     case LOPT_BRIDGE:   /* --bridge-interface */
       {
 	struct dhcp_bridge *new = opt_malloc(sizeof(struct dhcp_bridge));
 	if (!(comma = split(arg)) || strlen(arg) > IF_NAMESIZE - 1 )
 	  ret_err(_("bad bridge-interface"));
-	
+
 	strcpy(new->iface, arg);
 	new->alias = NULL;
 	new->next = daemon->bridges;
@@ -2747,13 +2747,13 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	  comma = split(arg);
 	  if (strlen(arg) != 0 && strlen(arg) <= IF_NAMESIZE - 1)
 	    {
-	      struct dhcp_bridge *b = opt_malloc(sizeof(struct dhcp_bridge)); 
+	      struct dhcp_bridge *b = opt_malloc(sizeof(struct dhcp_bridge));
 	      b->next = new->alias;
 	      new->alias = b;
 	      strcpy(b->iface, arg);
 	    }
 	} while (comma);
-	
+
 	break;
       }
 
@@ -2763,24 +2763,24 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	int k, leasepos = 2;
 	char *cp, *a[8] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
 	struct dhcp_context *new = opt_malloc(sizeof(struct dhcp_context));
-	
+
 	memset (new, 0, sizeof(*new));
 	new->lease_time = DEFLEASE;
-	
+
 	if (!arg)
 	  {
 	    option = '?';
 	    break;
 	  }
-	
+
 	while(1)
 	  {
 	    for (cp = arg; *cp; cp++)
-	      if (!(*cp == ' ' || *cp == '.' || *cp == ':' || 
+	      if (!(*cp == ' ' || *cp == '.' || *cp == ':' ||
 		    (*cp >= 'a' && *cp <= 'f') || (*cp >= 'A' && *cp <= 'F') ||
 		    (*cp >='0' && *cp <= '9')))
 		break;
-	    
+
 	    if (*cp != ',' && (comma = split(arg)))
 	      {
 		if (is_tag_prefix(arg))
@@ -2809,14 +2809,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		break;
 	      }
 	  }
-	
+
 	for (k = 1; k < 8; k++)
 	  if (!(a[k] = split(a[k-1])))
 	    break;
-	
+
 	if (k < 2)
 	  ret_err(_("bad dhcp-range"));
-	
+
 	if (inet_pton(AF_INET, a[0], &new->start))
 	  {
 	    new->next = daemon->dhcp;
@@ -2828,24 +2828,24 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	      new->flags |= CONTEXT_PROXY;
 	    else if (!inet_pton(AF_INET, a[1], &new->end))
 	      ret_err(_("bad dhcp-range"));
-	    
+
 	    if (ntohl(new->start.s_addr) > ntohl(new->end.s_addr))
 	      {
 		struct in_addr tmp = new->start;
 		new->start = new->end;
 		new->end = tmp;
 	      }
-	    
-	    if (k >= 3 && strchr(a[2], '.') &&  
+
+	    if (k >= 3 && strchr(a[2], '.') &&
 		(inet_pton(AF_INET, a[2], &new->netmask) > 0))
 	      {
 		new->flags |= CONTEXT_NETMASK;
 		leasepos = 3;
 		if (!is_same_net(new->start, new->end, new->netmask))
 		  ret_err(_("inconsistent DHCP range"));
-		
-	    
-		if (k >= 4 && strchr(a[3], '.') &&  
+
+
+		if (k >= 4 && strchr(a[3], '.') &&
 		    (inet_pton(AF_INET, a[3], &new->broadcast) > 0))
 		  {
 		    new->flags |= CONTEXT_BRDCAST;
@@ -2856,7 +2856,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 #ifdef HAVE_DHCP6
 	else if (inet_pton(AF_INET6, a[0], &new->start6))
 	  {
-	    new->flags |= CONTEXT_V6; 
+	    new->flags |= CONTEXT_V6;
 	    new->prefix = 64; /* default */
 	    new->end6 = new->start6;
 	    new->next = daemon->dhcp6;
@@ -2877,16 +2877,16 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		else if (strcmp(a[leasepos], "off-link") == 0)
 		  new->flags |= CONTEXT_RA_OFF_LINK;
 		else if (leasepos == 1 && inet_pton(AF_INET6, a[leasepos], &new->end6))
-		  new->flags |= CONTEXT_DHCP; 
+		  new->flags |= CONTEXT_DHCP;
 		else if (strstr(a[leasepos], "constructor:") == a[leasepos])
 		  {
 		    new->template_interface = opt_string_alloc(a[leasepos] + 12);
 		    new->flags |= CONTEXT_TEMPLATE;
 		  }
-		else  
+		else
 		  break;
 	      }
-	   	    	     
+
 	    /* bare integer < 128 is prefix value */
 	    if (leasepos < k)
 	      {
@@ -2900,7 +2900,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		    leasepos++;
 		  }
 	      }
-	    
+
 	    if (new->prefix != 64)
 	      {
 		if (new->flags & CONTEXT_RA)
@@ -2911,14 +2911,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 
 	    if (new->prefix < 64)
 	      ret_err(_("prefix length must be at least 64"));
-	    
+
 	    if (!is_same_net6(&new->start6, &new->end6, new->prefix))
 	      ret_err(_("inconsistent DHCPv6 range"));
 
 	    /* dhcp-range=:: enables DHCP stateless on any interface */
 	    if (IN6_IS_ADDR_UNSPECIFIED(&new->start6) && !(new->flags & CONTEXT_TEMPLATE))
 	      new->prefix = 0;
-	    
+
 	    if (new->flags & CONTEXT_TEMPLATE)
 	      {
 		struct in6_addr zero;
@@ -2926,7 +2926,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		if (!is_same_net6(&zero, &new->start6, new->prefix))
 		  ret_err(_("prefix must be zero with \"constructor:\" argument"));
 	      }
-	    
+
 	    if (addr6part(&new->start6) > addr6part(&new->end6))
 	      {
 		struct in6_addr tmp = new->start6;
@@ -2937,12 +2937,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 #endif
 	else
 	  ret_err(_("bad dhcp-range"));
-	
+
 	if (leasepos < k)
 	  {
 	    if (leasepos != k-1)
 	      ret_err(_("bad dhcp-range"));
-	    
+
 	    if (strcmp(a[leasepos], "infinite") == 0)
 	      new->lease_time = 0xffffffff;
 	    else if (strcmp(a[leasepos], "deprecated") == 0)
@@ -2974,14 +2974,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		      case 'S':
 			a[leasepos][strlen(a[leasepos]) - 1] = 0;
 		      }
-		    
+
 		    for (cp = a[leasepos]; *cp; cp++)
 		      if (!(*cp >= '0' && *cp <= '9'))
 			break;
 
 		    if (*cp || (leasepos+1 < k))
 		      ret_err(_("bad dhcp-range"));
-		    
+
 		    new->lease_time = atoi(a[leasepos]) * fac;
 		    /* Leases of a minute or less confuse
 		       some clients, notably Apple's */
@@ -3000,9 +3000,9 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	char *a[7] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL };
 	struct dhcp_config *new;
 	struct in_addr in;
-	
+
 	new = opt_malloc(sizeof(struct dhcp_config));
-	
+
 	new->next = daemon->dhcp_conf;
 	new->flags = (option == LOPT_BANK) ? CONFIG_BANK : 0;
 	new->hwaddr = NULL;
@@ -3012,12 +3012,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	  for (k = 1; k < 7; k++)
 	    if (!(a[k] = split(a[k-1])))
 	      break;
-	
+
 	for (j = 0; j < k; j++)
 	  if (strchr(a[j], ':')) /* ethernet address, netid or binary CLID */
 	    {
 	      char *arg = a[j];
-	      
+
 	      if ((arg[0] == 'i' || arg[0] == 'I') &&
 		  (arg[1] == 'd' || arg[1] == 'D') &&
 		  arg[2] == ':')
@@ -3065,7 +3065,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		{
 		  arg[strlen(arg)-1] = 0;
 		  arg++;
-		  
+
 		  if (!inet_pton(AF_INET6, arg, &new->addr6))
 		    ret_err(_("bad IPv6 address"));
 
@@ -3076,46 +3076,46 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		  /* set WILDCARD if network part all zeros */
 		  if (i == 8)
 		    new->flags |= CONFIG_WILDCARD;
-		  
+
 		  new->flags |= CONFIG_ADDR6;
 		}
 #endif
 	      else
 		{
 		  struct hwaddr_config *newhw = opt_malloc(sizeof(struct hwaddr_config));
-		  if ((newhw->hwaddr_len = parse_hex(a[j], newhw->hwaddr, DHCP_CHADDR_MAX, 
+		  if ((newhw->hwaddr_len = parse_hex(a[j], newhw->hwaddr, DHCP_CHADDR_MAX,
 						     &newhw->wildcard_mask, &newhw->hwaddr_type)) == -1)
 		    ret_err(_("bad hex constant"));
 		  else
 		    {
-		      
+
 		      newhw->next = new->hwaddr;
 		      new->hwaddr = newhw;
-		    }		    
+		    }
 		}
 	    }
 	  else if (strchr(a[j], '.') && (inet_pton(AF_INET, a[j], &in) > 0))
 	    {
 	      struct dhcp_config *configs;
-	      
+
 	      new->addr = in;
 	      new->flags |= CONFIG_ADDR;
 
 	      /* If the same IP appears in more than one host config, then DISCOVER
 		 for one of the hosts will get the address, but REQUEST will be NAKed,
 		 since the address is reserved by the other one -> protocol loop. */
-	      for (configs = daemon->dhcp_conf; configs; configs = configs->next) 
+	      for (configs = daemon->dhcp_conf; configs; configs = configs->next)
 		if ((configs->flags & CONFIG_ADDR) && configs->addr.s_addr == in.s_addr)
 		  {
 		    sprintf(errstr, _("duplicate dhcp-host IP address %s"),  inet_ntoa(in));
 		    return 0;
-		  }	      
+		  }
 	    }
 	  else
 	    {
 	      char *cp, *lastp = NULL, last = 0;
 	      int fac = 1, isdig = 0;
-	      
+
 	      if (strlen(a[j]) > 1)
 		{
 		  lastp = a[j] + strlen(a[j]) - 1;
@@ -3143,7 +3143,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		      *lastp = 0;
 		    }
 		}
-	      
+
 	      for (cp = a[j]; *cp; cp++)
 		if (isdigit((unsigned char)*cp))
 		  isdig = 1;
@@ -3166,14 +3166,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		      if (!(new->hostname = canonicalise_opt(a[j])) ||
 			  !legal_hostname(new->hostname))
 			ret_err(_("bad DHCP host name"));
-		     
+
 		      new->flags |= CONFIG_NAME;
-		      new->domain = strip_hostname(new->hostname);			
+		      new->domain = strip_hostname(new->hostname);
 		    }
 		}
 	      else if (isdig)
 		{
-		  new->lease_time = atoi(a[j]) * fac; 
+		  new->lease_time = atoi(a[j]) * fac;
 		  /* Leases of a minute or less confuse
 		     some clients, notably Apple's */
 		  if (new->lease_time < 120)
@@ -3181,7 +3181,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		  new->flags |= CONFIG_TIME;
 		}
 	    }
-	
+
 	daemon->dhcp_conf = new;
 	break;
       }
@@ -3189,11 +3189,11 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
     case LOPT_TAG_IF:  /* --tag-if */
       {
 	struct tag_if *new = opt_malloc(sizeof(struct tag_if));
-		
+
 	new->tag = NULL;
 	new->set = NULL;
 	new->next = NULL;
-	
+
 	/* preserve order */
 	if (!daemon->tag_if)
 	  daemon->tag_if = new;
@@ -3235,33 +3235,33 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 		    newtag->next = new->tag;
 		    new->tag = newtag;
 		  }
-		else 
+		else
 		  {
 		    new->set = NULL;
 		    free(newtag);
 		    break;
 		  }
 	      }
-	    
+
 	    arg = comma;
 	  }
 
 	if (!new->set)
 	  ret_err(_("bad tag-if"));
-	  
+
 	break;
       }
 
-      
+
     case 'O':           /* --dhcp-option */
     case LOPT_FORCE:    /* --dhcp-option-force */
     case LOPT_OPTS:
     case LOPT_MATCH:    /* --dhcp-match */
-      return parse_dhcp_opt(errstr, arg, 
-			    option == LOPT_FORCE ? DHOPT_FORCE : 
+      return parse_dhcp_opt(errstr, arg,
+			    option == LOPT_FORCE ? DHOPT_FORCE :
 			    (option == LOPT_MATCH ? DHOPT_MATCH :
 			     (option == LOPT_OPTS ? DHOPT_BANK : 0)));
-     
+
     case 'M': /* --dhcp-boot */
       {
 	struct dhcp_netid *id = NULL;
@@ -3274,10 +3274,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    newid->net = opt_string_alloc(arg+4);
 	    arg = comma;
 	  };
-	
+
 	if (!arg)
 	  ret_err(gen_err);
-	else 
+	else
 	  {
 	    char *dhcp_file, *dhcp_sname = NULL, *tftp_sname = NULL;
 	    struct in_addr dhcp_next_server;
@@ -3299,14 +3299,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 			 * The user may have specified the tftp hostname here.
 			 * save it so that it can be resolved/looked up during
 			 * actual dhcp_reply().
-			 */	
-			
+			 */
+
 			tftp_sname = opt_string_alloc(comma);
 			dhcp_next_server.s_addr = 0;
 		      }
 		  }
 	      }
-	    
+
 	    new = opt_malloc(sizeof(struct dhcp_boot));
 	    new->file = dhcp_file;
 	    new->sname = dhcp_sname;
@@ -3316,7 +3316,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    new->next = daemon->boot_config;
 	    daemon->boot_config = new;
 	  }
-      
+
 	break;
       }
 
@@ -3332,7 +3332,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    newid->net = opt_string_alloc(arg+4);
 	    arg = comma;
 	  };
-	
+
 	if (!arg)
 	  ret_err(gen_err);
 	else
@@ -3341,22 +3341,22 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    int delay;
 	    if (!atoi_check(arg, &delay))
               ret_err(gen_err);
-	    
+
 	    new = opt_malloc(sizeof(struct delay_config));
 	    new->delay = delay;
 	    new->netid = id;
             new->next = daemon->delay_conf;
             daemon->delay_conf = new;
 	  }
-	
+
 	break;
       }
-      
+
     case LOPT_PXE_PROMT:  /* --pxe-prompt */
        {
 	 struct dhcp_opt *new = opt_malloc(sizeof(struct dhcp_opt));
 	 int timeout;
-	 
+
 	 new->netid = NULL;
 	 new->opt = 10; /* PXE_MENU_PROMPT */
 
@@ -3369,7 +3369,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	     nn->net = opt_string_alloc(arg+4);
 	     arg = comma;
 	   }
-	 
+
 	 if (!arg)
 	   ret_err(gen_err);
 	 else
@@ -3379,10 +3379,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	     new->len = strlen(arg) + 1;
 	     new->val = opt_malloc(new->len);
 	     memcpy(new->val + 1, arg, new->len - 1);
-	     
+
 	     new->u.vendor_class = (unsigned char *)"PXEClient";
 	     new->flags = DHOPT_VENDOR;
-	     
+
 	     if (comma && atoi_check(comma, &timeout))
 	       *(new->val) = timeout;
 	     else
@@ -3392,18 +3392,18 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	     daemon->dhcp_opts = new;
 	     daemon->enable_pxe = 1;
 	   }
-	 
+
 	 break;
        }
-       
+
     case LOPT_PXE_SERV:  /* --pxe-service */
        {
 	 struct pxe_service *new = opt_malloc(sizeof(struct pxe_service));
 	 char *CSA[] = { "x86PC", "PC98", "IA64_EFI", "Alpha", "Arc_x86", "Intel_Lean_Client",
 			 "IA32_EFI", "x86-64_EFI", "Xscale_EFI", "BC_EFI",
-			 "ARM32_EFI", "ARM64_EFI", NULL };  
+			 "ARM32_EFI", "ARM64_EFI", NULL };
 	 static int boottype = 32768;
-	 
+
 	 new->netid = NULL;
 	 new->sname = NULL;
 	 new->server.s_addr = 0;
@@ -3417,21 +3417,21 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	     nn->net = opt_string_alloc(arg+4);
 	     arg = comma;
 	   }
-       
+
 	 if (arg && (comma = split(arg)))
 	   {
 	     for (i = 0; CSA[i]; i++)
 	       if (strcasecmp(CSA[i], arg) == 0)
 		 break;
-	     
+
 	     if (CSA[i] || atoi_check(arg, &i))
 	       {
 		 arg = comma;
 		 comma = split(arg);
-		 
+
 		 new->CSA = i;
 		 new->menu = opt_string_alloc(arg);
-		 
+
 		 if (!comma)
 		   {
 		     new->type = 0; /* local boot */
@@ -3451,7 +3451,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 			 new->type = boottype++;
 			 new->basename = opt_string_alloc(arg);
 		       }
-		     
+
 		     if (comma)
 		       {
 			 if (!inet_pton(AF_INET, comma, &new->server))
@@ -3459,30 +3459,30 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 			     new->server.s_addr = 0;
 			     new->sname = opt_string_alloc(comma);
 			   }
-		       
+
 		       }
 		   }
-		 
+
 		 /* Order matters */
 		 new->next = NULL;
 		 if (!daemon->pxe_services)
-		   daemon->pxe_services = new; 
+		   daemon->pxe_services = new;
 		 else
 		   {
 		     struct pxe_service *s;
 		     for (s = daemon->pxe_services; s->next; s = s->next);
 		     s->next = new;
 		   }
-		 
+
 		 daemon->enable_pxe = 1;
 		 break;
-		
+
 	       }
 	   }
-	 
+
 	 ret_err(gen_err);
        }
-	 
+
     case '4':  /* --dhcp-mac */
       {
 	if (!(comma = split(arg)))
@@ -3504,23 +3504,23 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
       }
       break;
 
-#ifdef OPTION6_PREFIX_CLASS 
+#ifdef OPTION6_PREFIX_CLASS
     case LOPT_PREF_CLSS: /* --dhcp-prefix-class */
       {
 	struct prefix_class *new = opt_malloc(sizeof(struct prefix_class));
-	
+
 	if (!(comma = split(arg)) ||
 	    !atoi_check16(comma, &new->class))
 	  ret_err(gen_err);
-	
+
 	new->tag.net = opt_string_alloc(set_prefix(arg));
 	new->next = daemon->prefix_classes;
 	daemon->prefix_classes = new;
-	
+
 	break;
       }
 #endif
-			      
+
 
     case 'U':           /* --dhcp-vendorclass */
     case 'j':           /* --dhcp-userclass */
@@ -3531,14 +3531,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	 unsigned char *p;
 	 int dig = 0;
 	 struct dhcp_vendor *new = opt_malloc(sizeof(struct dhcp_vendor));
-	 
+
 	 if (!(comma = split(arg)))
 	   ret_err(gen_err);
-	
+
 	 new->netid.net = opt_string_alloc(set_prefix(arg));
-	 /* check for hex string - must digits may include : must not have nothing else, 
+	 /* check for hex string - must digits may include : must not have nothing else,
 	    only allowed for agent-options. */
-	 
+
 	 arg = comma;
 	 if ((comma = split(arg)))
 	   {
@@ -3549,7 +3549,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	   }
 	 else
 	   comma = arg;
-	 
+
 	 for (p = (unsigned char *)comma; *p; p++)
 	   if (isxdigit(*p))
 	     dig = 1;
@@ -3558,7 +3558,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	 unhide_metas(comma);
 	 if (option == 'U' || option == 'j' || *p || !dig)
 	   {
-	     new->len = strlen(comma);  
+	     new->len = strlen(comma);
 	     new->data = opt_malloc(new->len);
 	     memcpy(new->data, comma, new->len);
 	   }
@@ -3568,7 +3568,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	     new->data = opt_malloc(new->len);
 	     memcpy(new->data, comma, new->len);
 	   }
-	 
+
 	 switch (option)
 	   {
 	   case 'j':
@@ -3576,7 +3576,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	     break;
 	   case 'U':
 	     new->match_type = MATCH_VENDOR;
-	     break; 
+	     break;
 	   case LOPT_CIRCUIT:
 	     new->match_type = MATCH_CIRCUIT;
 	     break;
@@ -3592,7 +3592,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 
 	 break;
       }
-      
+
     case LOPT_ALTPORT:   /* --dhcp-alternate-port */
       if (!arg)
 	{
@@ -3602,11 +3602,11 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
       else
 	{
 	  comma = split(arg);
-	  if (!atoi_check16(arg, &daemon->dhcp_server_port) || 
+	  if (!atoi_check16(arg, &daemon->dhcp_server_port) ||
 	      (comma && !atoi_check16(comma, &daemon->dhcp_client_port)))
 	    ret_err(_("invalid port number"));
 	  if (!comma)
-	    daemon->dhcp_client_port = daemon->dhcp_server_port+1; 
+	    daemon->dhcp_client_port = daemon->dhcp_server_port+1;
 	}
       break;
 
@@ -3643,7 +3643,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    new->next = daemon->dhcp_ignore_names;
 	    daemon->dhcp_ignore_names = new;
 	  }
-	
+
 	while (arg) {
 	  struct dhcp_netid *member = opt_malloc(sizeof(struct dhcp_netid));
 	  comma = split(arg);
@@ -3655,7 +3655,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	    member->net = opt_string_alloc(arg);
 	  arg = comma;
 	}
-	
+
 	new->list = list;
 	break;
       }
@@ -3693,12 +3693,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 #endif
 	else
 	  ret_err(_("Bad dhcp-relay"));
-	
+
 	break;
       }
 
 #endif
-      
+
 #ifdef HAVE_DHCP6
     case LOPT_RA_PARAM: /* --ra-param */
       if ((comma = split(arg)))
@@ -3730,16 +3730,16 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
 	      comma = split(comma);
 	    }
 	   arg = split(comma);
-	   if (!atoi_check(comma, &new->interval) || 
+	   if (!atoi_check(comma, &new->interval) ||
 	      (arg && !atoi_check(arg, &new->lifetime)))
 err:
 	    ret_err(_("bad RA-params"));
-	  
+
 	  new->next = daemon->ra_interfaces;
 	  daemon->ra_interfaces = new;
 	}
       break;
-      
+
     case LOPT_DUID: /* --dhcp-duid */
       if (!(comma = split(arg)) || !atoi_check(arg, (int *)&daemon->duid_enterprise))
 	ret_err(_("bad DUID"));
@@ -3769,40 +3769,40 @@ err:
 		break;
 	      unhide_metas(a[k]);
 	    }
-	
+
 	dash = split_chr(a[0], '-');
 
-	if ((k < 2) || 
+	if ((k < 2) ||
 	    (!(inet_pton(AF_INET, a[0], &new->in) > 0)) ||
 	    (!(inet_pton(AF_INET, a[1], &new->out) > 0)))
 	  option = '?';
-	
+
 	if (k == 3 && !inet_pton(AF_INET, a[2], &new->mask))
 	  option = '?';
-	
-	if (dash && 
+
+	if (dash &&
 	    (!(inet_pton(AF_INET, dash, &new->end) > 0) ||
 	     !is_same_net(new->in, new->end, new->mask) ||
 	     ntohl(new->in.s_addr) > ntohl(new->end.s_addr)))
 	  ret_err(_("invalid alias range"));
-	
+
 	break;
       }
-      
+
     case LOPT_INTNAME:  /* --interface-name */
       {
 	struct interface_name *new, **up;
 	char *domain = NULL;
 
 	comma = split(arg);
-	
+
 	if (!comma || !(domain = canonicalise_opt(arg)))
 	  ret_err(_("bad interface name"));
-	
+
 	new = opt_malloc(sizeof(struct interface_name));
 	new->next = NULL;
 	new->addr = NULL;
-	
+
 	/* Add to the end of the list, so that first name
 	   of an interface is used for PTR lookups. */
 	for (up = &daemon->int_names; *up; up = &((*up)->next));
@@ -3820,11 +3820,11 @@ err:
 #endif
 	    else
 	      ret_err(gen_err);
-	  } 
+	  }
 	new->intr = opt_string_alloc(comma);
 	break;
       }
-      
+
     case LOPT_CNAME: /* --cname */
       {
 	struct cname *new;
@@ -3839,10 +3839,10 @@ err:
 
 	if (!pen)
 	  ret_err(_("bad CNAME"));
-	
+
 	if (pen != arg && atoi_check(last, &ttl))
 	  last = pen;
-	  	
+
     	target = canonicalise_opt(last);
 
 	while (arg != last)
@@ -3851,7 +3851,7 @@ err:
 
 	    if (!alias || !target)
 	      ret_err(_("bad CNAME"));
-	    
+
 	    for (new = daemon->cnames; new; new = new->next)
 	      if (hostname_isequal(new->alias, alias))
 		ret_err(_("duplicate CNAME"));
@@ -3864,7 +3864,7 @@ err:
 
 	    arg += strlen(arg)+1;
 	  }
-      
+
 	break;
       }
 
@@ -3874,7 +3874,7 @@ err:
 	char *dom, *target = NULL;
 
 	comma = split(arg);
-	
+
 	if (!(dom = canonicalise_opt(arg)) ||
 	    (comma && !(target = canonicalise_opt(comma))))
 	  ret_err(_("bad PTR record"));
@@ -3901,11 +3901,11 @@ err:
 	  for (k = 1; k < 7; k++)
 	    if (!(a[k] = split(a[k-1])))
 	      break;
-	
-	
-	if (k < 6 || 
+
+
+	if (k < 6 ||
 	    !(name = canonicalise_opt(a[0])) ||
-	    !atoi_check16(a[1], &order) || 
+	    !atoi_check16(a[1], &order) ||
 	    !atoi_check16(a[2], &pref) ||
 	    (k == 7 && !(replace = canonicalise_opt(a[6]))))
 	  ret_err(_("bad NAPTR record"));
@@ -3934,26 +3934,26 @@ err:
 
 	comma = split(arg);
 	data = split(comma);
-		
+
 	new = opt_malloc(sizeof(struct txt_record));
 	new->next = daemon->rr;
 	daemon->rr = new;
-	
-	if (!atoi_check(comma, &val) || 
+
+	if (!atoi_check(comma, &val) ||
 	    !(new->name = canonicalise_opt(arg)) ||
 	    (data && (len = parse_hex(data, (unsigned char *)data, -1, NULL, NULL)) == -1U))
 	  ret_err(_("bad RR record"));
-	   	
+
 	new->class = val;
 	new->len = 0;
-	
+
 	if (data)
 	  {
 	    new->txt=opt_malloc(len);
 	    new->len = len;
 	    memcpy(new->txt, data, len);
 	  }
-	
+
 	break;
       }
 
@@ -3964,7 +3964,7 @@ err:
 	size_t len;
 
 	comma = split(arg);
-		
+
 	new = opt_malloc(sizeof(struct txt_record));
 	new->next = daemon->txt;
 	daemon->txt = new;
@@ -3973,14 +3973,14 @@ err:
 
 	if (!(new->name = canonicalise_opt(arg)))
 	  ret_err(_("bad TXT record"));
-	
+
 	len = comma ? strlen(comma) : 0;
 	len += (len/255) + 1; /* room for extra counts */
 	new->txt = p = opt_malloc(len);
 
 	cnt = p++;
 	*cnt = 0;
-	
+
 	while (comma && *comma)
 	  {
 	    unsigned char c = (unsigned char)*comma++;
@@ -4003,45 +4003,45 @@ err:
 
 	break;
       }
-      
+
     case 'W':  /* --srv-host */
       {
 	int port = 1, priority = 0, weight = 0;
 	char *name, *target = NULL;
 	struct mx_srv_record *new;
-	
+
 	comma = split(arg);
-	
+
 	if (!(name = canonicalise_opt(arg)))
 	  ret_err(_("bad SRV record"));
-	
+
 	if (comma)
 	  {
 	    arg = comma;
 	    comma = split(arg);
 	    if (!(target = canonicalise_opt(arg)))
 	      ret_err(_("bad SRV target"));
-		
+
 	    if (comma)
 	      {
 		arg = comma;
 		comma = split(arg);
 		if (!atoi_check16(arg, &port))
 		  ret_err(_("invalid port number"));
-		
+
 		if (comma)
 		  {
 		    arg = comma;
 		    comma = split(arg);
 		    if (!atoi_check16(arg, &priority))
 		      ret_err(_("invalid priority"));
-			
+
 		    if (comma && !atoi_check16(comma, &weight))
 		      ret_err(_("invalid weight"));
 		  }
 	      }
 	  }
-	
+
 	new = opt_malloc(sizeof(struct mx_srv_record));
 	new->next = daemon->mxnames;
 	daemon->mxnames = new;
@@ -4053,7 +4053,7 @@ err:
 	new->weight = weight;
 	break;
       }
-      
+
     case LOPT_HOST_REC: /* --host-record */
       {
 	struct host_record *new = opt_malloc(sizeof(struct host_record));
@@ -4062,7 +4062,7 @@ err:
 
 	if (!arg || !(comma = split(arg)))
 	  ret_err(_("Bad host-record"));
-	
+
 	while (arg)
 	  {
 	    struct all_addr addr;
@@ -4093,13 +4093,13 @@ err:
 		if (!new->names)
 		  new->names = nl;
 		else
-		  { 
+		  {
 		    struct name_list *tmp;
 		    for (tmp = new->names; tmp->next; tmp = tmp->next);
 		    tmp->next = nl;
 		  }
 	      }
-	    
+
 	    arg = comma;
 	    comma = split(arg);
 	  }
@@ -4116,7 +4116,7 @@ err:
 
 #ifdef HAVE_DNSSEC
     case LOPT_DNSSEC_STAMP:
-      daemon->timestamp_file = opt_string_alloc(arg); 
+      daemon->timestamp_file = opt_string_alloc(arg);
       break;
 
     case LOPT_TRUST_ANCHOR:
@@ -4124,7 +4124,7 @@ err:
 	struct ds_config *new = opt_malloc(sizeof(struct ds_config));
       	char *cp, *cp1, *keyhex, *digest, *algo = NULL;
 	int len;
-	
+
 	new->class = C_IN;
 
 	if ((comma = split(arg)) && (algo = split(comma)))
@@ -4136,7 +4136,7 @@ err:
 	      class = C_CHAOS;
 	    else if (strcmp(comma, "HS") == 0)
 	      class = C_HESIOD;
-	    
+
 	    if (class != 0)
 	      {
 		new->class = class;
@@ -4144,14 +4144,14 @@ err:
 		algo = split(comma);
 	      }
 	  }
-		  
+
        	if (!comma || !algo || !(digest = split(algo)) || !(keyhex = split(digest)) ||
-	    !atoi_check16(comma, &new->keytag) || 
+	    !atoi_check16(comma, &new->keytag) ||
 	    !atoi_check8(algo, &new->algo) ||
 	    !atoi_check8(digest, &new->digest_type) ||
 	    !(new->name = canonicalise_opt(arg)))
 	  ret_err(_("bad trust anchor"));
-	    
+
 	/* Upper bound on length */
 	len = (2*strlen(keyhex))+1;
 	new->digest = opt_malloc(len);
@@ -4165,27 +4165,27 @@ err:
 	    cp++;
 	if ((new->digestlen = parse_hex(keyhex, (unsigned char *)new->digest, len, NULL, NULL)) == -1)
 	  ret_err(_("bad HEX in trust anchor"));
-	
+
 	new->next = daemon->ds;
 	daemon->ds = new;
-	
+
 	break;
       }
 #endif
-		
+
     default:
       ret_err(_("unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"));
-      
+
     }
-  
+
   return 1;
 }
 
-static void read_file(char *file, FILE *f, int hard_opt)	
+static void read_file(char *file, FILE *f, int hard_opt)
 {
   volatile int lineno = 0;
   char *buff = daemon->namebuff;
-  
+
   while (fgets(buff, MAXDNAME, f))
     {
       int white, i;
@@ -4193,19 +4193,19 @@ static void read_file(char *file, FILE *f, int hard_opt)
       char *errmess, *p, *arg, *start;
       size_t len;
 
-      /* Memory allocation failure longjmps here if mem_recover == 1 */ 
+      /* Memory allocation failure longjmps here if mem_recover == 1 */
       if (option != 0 || hard_opt == LOPT_REV_SERV)
 	{
 	  if (setjmp(mem_jmp))
 	    continue;
 	  mem_recover = 1;
 	}
-      
+
       arg = NULL;
       lineno++;
       errmess = NULL;
-      
-      /* Implement quotes, inside quotes we allow \\ \" \n and \t 
+
+      /* Implement quotes, inside quotes we allow \\ \" \n and \t
 	 metacharacters get hidden also strip comments */
       for (white = 1, p = buff; *p; p++)
 	{
@@ -4232,10 +4232,10 @@ static void read_file(char *file, FILE *f, int hard_opt)
 		  *p = hide_meta(*p);
 		}
 
-	      if (*p == 0) 
+	      if (*p == 0)
 		{
 		  errmess = _("missing \"");
-		  goto oops; 
+		  goto oops;
 		}
 
 	      memmove(p, p+1, strlen(p+1)+1);
@@ -4246,29 +4246,29 @@ static void read_file(char *file, FILE *f, int hard_opt)
 	      *p = ' ';
 	      white = 1;
 	    }
-	  else 
+	  else
 	    {
 	      if (white && *p == '#')
-		{ 
+		{
 		  *p = 0;
 		  break;
 		}
 	      white = 0;
-	    } 
+	    }
 	}
 
-      
+
       /* strip leading spaces */
       for (start = buff; *start && *start == ' '; start++);
-      
+
       /* strip trailing spaces */
       for (len = strlen(start); (len != 0) && (start[len-1] == ' '); len--);
-      
+
       if (len == 0)
-	continue; 
+	continue;
       else
 	start[len] = 0;
-      
+
       if (option != 0)
 	arg = start;
       else if ((p=strchr(start, '=')))
@@ -4283,13 +4283,13 @@ static void read_file(char *file, FILE *f, int hard_opt)
 
       if (option == 0)
 	{
-	  for (option = 0, i = 0; opts[i].name; i++) 
+	  for (option = 0, i = 0; opts[i].name; i++)
 	    if (strcmp(opts[i].name, start) == 0)
 	      {
 		option = opts[i].val;
 		break;
 	      }
-	  
+
 	  if (!option)
 	    errmess = _("bad option");
 	  else if (opts[i].has_arg == 0 && arg)
@@ -4303,7 +4303,7 @@ static void read_file(char *file, FILE *f, int hard_opt)
     oops:
       if (errmess)
 	strcpy(daemon->namebuff, errmess);
-	  
+
       if (errmess || !one_opt(option, arg, buff, _("error"), 0, hard_opt == LOPT_REV_SERV))
 	{
 	  sprintf(daemon->namebuff + strlen(daemon->namebuff), _(" at line %d of %s"), lineno, file);
@@ -4322,12 +4322,12 @@ static void read_file(char *file, FILE *f, int hard_opt)
 int option_read_dynfile(char *file, int flags)
 {
   my_syslog(MS_DHCP | LOG_INFO, _("read %s"), file);
-  
+
   if (flags & AH_DHCP_HST)
     return one_file(file, LOPT_BANK);
   else if (flags & AH_DHCP_OPT)
     return one_file(file, LOPT_OPTS);
-  
+
   return 0;
 }
 #endif
@@ -4342,7 +4342,7 @@ static int one_file(char *file, int hard_opt)
     ino_t ino;
     struct fileread *next;
   } *filesread = NULL;
-  
+
   if (hard_opt == '7')
     {
       /* default conf-file reading */
@@ -4362,24 +4362,24 @@ static int one_file(char *file, int hard_opt)
     {
       /* ignore repeated files. */
       struct stat statbuf;
-    
+
       if (hard_opt == 0 && stat(file, &statbuf) == 0)
 	{
 	  struct fileread *r;
-	  
+
 	  for (r = filesread; r; r = r->next)
 	    if (r->dev == statbuf.st_dev && r->ino == statbuf.st_ino)
 	      return 1;
-	  
+
 	  r = safe_malloc(sizeof(struct fileread));
 	  r->next = filesread;
 	  filesread = r;
 	  r->dev = statbuf.st_dev;
 	  r->ino = statbuf.st_ino;
 	}
-      
+
       if (!(f = fopen(file, "r")))
-	{   
+	{
 	  if (errno == ENOENT && nofile_ok)
 	    return 1; /* No conffile, all done. */
 	  else
@@ -4393,9 +4393,9 @@ static int one_file(char *file, int hard_opt)
 	      else
 		die(str, file, EC_FILE);
 	    }
-	} 
+	}
     }
-  
+
   read_file(file, f, hard_opt);
   return 1;
 }
@@ -4426,12 +4426,12 @@ struct hostsfile *expand_filelist(struct hostsfile *list)
 	  {
 	    DIR *dir_stream;
 	    struct dirent *ent;
-	    
+
 	    /* don't read this as a file */
 	    ah->flags |= AH_INACTIVE;
-	    
+
 	    if (!(dir_stream = opendir(ah->fname)))
-	      my_syslog(LOG_ERR, _("cannot access directory %s: %s"), 
+	      my_syslog(LOG_ERR, _("cannot access directory %s: %s"),
 			ah->fname, strerror(errno));
 	    else
 	      {
@@ -4441,19 +4441,19 @@ struct hostsfile *expand_filelist(struct hostsfile *list)
 		    size_t lenfile = strlen(ent->d_name);
 		    struct hostsfile *ah1;
 		    char *path;
-		    
+
 		    /* ignore emacs backups and dotfiles */
-		    if (lenfile == 0 || 
+		    if (lenfile == 0 ||
 			ent->d_name[lenfile - 1] == '~' ||
 			(ent->d_name[0] == '#' && ent->d_name[lenfile - 1] == '#') ||
 			ent->d_name[0] == '.')
 		      continue;
-		    
+
 		    /* see if we have an existing record.
-		       dir is ah->fname 
+		       dir is ah->fname
 		       file is ent->d_name
 		       path to match is ah1->fname */
-		    
+
 		    for (ah1 = list; ah1; ah1 = ah1->next)
 		      {
 			if (lendir < strlen(ah1->fname) &&
@@ -4465,19 +4465,19 @@ struct hostsfile *expand_filelist(struct hostsfile *list)
 			    break;
 			  }
 		      }
-		    
+
 		    /* make new record */
 		    if (!ah1)
 		      {
 			if (!(ah1 = whine_malloc(sizeof(struct hostsfile))))
 			  continue;
-			
+
 			if (!(path = whine_malloc(lendir + lenfile + 2)))
 			  {
 			    free(ah1);
 			    continue;
 			  }
-		      	
+
 			strcpy(path, ah->fname);
 			strcat(path, "/");
 			strcat(path, ent->d_name);
@@ -4487,17 +4487,17 @@ struct hostsfile *expand_filelist(struct hostsfile *list)
 			ah1->next = list;
 			list = ah1;
 		      }
-		    
+
 		    /* inactivate record if not regular file */
 		    if ((ah1->flags & AH_DIR) && stat(ah1->fname, &buf) != -1 && !S_ISREG(buf.st_mode))
-		      ah1->flags |= AH_INACTIVE; 
-		    
+		      ah1->flags |= AH_INACTIVE;
+
 		  }
 		closedir(dir_stream);
 	      }
 	  }
       }
-  
+
   return list;
 }
 
@@ -4510,13 +4510,13 @@ void read_servers_file(void)
        my_syslog(LOG_ERR, _("cannot read %s: %s"), daemon->servers_file, strerror(errno));
        return;
     }
-  
+
   mark_servers(SERV_FROM_FILE);
   cleanup_servers();
-  
+
   read_file(daemon->servers_file, f, LOPT_REV_SERV);
 }
- 
+
 
 #ifdef HAVE_DHCP
 void reread_dhcp(void)
@@ -4526,17 +4526,17 @@ void reread_dhcp(void)
   if (daemon->dhcp_hosts_file)
     {
       struct dhcp_config *configs, *cp, **up;
-  
+
       /* remove existing... */
       for (up = &daemon->dhcp_conf, configs = daemon->dhcp_conf; configs; configs = cp)
 	{
 	  cp = configs->next;
-	  
+
 	  if (configs->flags & CONFIG_BANK)
 	    {
 	      struct hwaddr_config *mac, *tmp;
 	      struct dhcp_netid_list *list, *tmplist;
-	      
+
 	      for (mac = configs->hwaddr; mac; mac = tmp)
 		{
 		  tmp = mac->next;
@@ -4552,22 +4552,22 @@ void reread_dhcp(void)
 		  tmplist = list->next;
 		  free(list);
 		}
-	      
+
 	      if (configs->flags & CONFIG_NAME)
 		free(configs->hostname);
-	      
+
 	      *up = configs->next;
 	      free(configs);
 	    }
 	  else
 	    up = &configs->next;
 	}
-      
+
       daemon->dhcp_hosts_file = expand_filelist(daemon->dhcp_hosts_file);
       for (hf = daemon->dhcp_hosts_file; hf; hf = hf->next)
 	 if (!(hf->flags & AH_INACTIVE))
 	   {
-	     if (one_file(hf->fname, LOPT_BANK))  
+	     if (one_file(hf->fname, LOPT_BANK))
 	       my_syslog(MS_DHCP | LOG_INFO, _("read %s"), hf->fname);
 	   }
     }
@@ -4580,7 +4580,7 @@ void reread_dhcp(void)
       for (up = &daemon->dhcp_opts, opts = daemon->dhcp_opts; opts; opts = cp)
 	{
 	  cp = opts->next;
-	  
+
 	  if (opts->flags & DHOPT_BANK)
 	    {
 	      if ((opts->flags & DHOPT_VENDOR))
@@ -4598,24 +4598,24 @@ void reread_dhcp(void)
 	  else
 	    up = &opts->next;
 	}
-      
+
       daemon->dhcp_opts_file = expand_filelist(daemon->dhcp_opts_file);
       for (hf = daemon->dhcp_opts_file; hf; hf = hf->next)
 	if (!(hf->flags & AH_INACTIVE))
 	  {
-	    if (one_file(hf->fname, LOPT_OPTS))  
+	    if (one_file(hf->fname, LOPT_OPTS))
 	      my_syslog(MS_DHCP | LOG_INFO, _("read %s"), hf->fname);
 	  }
     }
 }
 #endif
-    
+
 void read_opts(int argc, char **argv, char *compile_opts)
 {
   char *buff = opt_malloc(MAXDNAME);
   int option, conffile_opt = '7', testmode = 0;
   char *arg, *conffile = CONFFILE;
-      
+
   opterr = 0;
 
   daemon = opt_malloc(sizeof(struct daemon));
@@ -4637,7 +4637,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
   daemon->tftp_max = TFTP_MAX_CONNECTIONS;
   daemon->edns_pktsz = EDNS_PKTSZ;
   daemon->log_fac = -1;
-  daemon->auth_ttl = AUTH_TTL; 
+  daemon->auth_ttl = AUTH_TTL;
   daemon->soa_refresh = SOA_REFRESH;
   daemon->soa_retry = SOA_RETRY;
   daemon->soa_expiry = SOA_EXPIRY;
@@ -4658,14 +4658,14 @@ void read_opts(int argc, char **argv, char *compile_opts)
   add_txt("servers.bind", NULL, TXT_STAT_SERVERS);
 #endif
 
-  while (1) 
+  while (1)
     {
 #ifdef HAVE_GETOPT_LONG
       option = getopt_long(argc, argv, OPTSTRING, opts, NULL);
 #else
       option = getopt(argc, argv, OPTSTRING);
 #endif
-      
+
       if (option == -1)
 	{
 	  for (; optind < argc; optind++)
@@ -4687,7 +4687,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
 	}
       else
 	arg = NULL;
-      
+
       /* command-line only stuff */
       if (option == LOPT_TEST)
 	testmode = 1;
@@ -4709,7 +4709,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
       else if (option == 'v')
 	{
 	  printf(_("Dnsmasq version %s  %s\n"), VERSION, COPYRIGHT);
-	  printf(_("Compile time options: %s\n\n"), compile_opts); 
+	  printf(_("Compile time options: %s\n\n"), compile_opts);
 	  printf(_("This software comes with ABSOLUTELY NO WARRANTY.\n"));
 	  printf(_("Dnsmasq is free software, and you are welcome to redistribute it\n"));
 	  printf(_("under the terms of the GNU General Public License, version 2 or 3.\n"));
@@ -4724,9 +4724,9 @@ void read_opts(int argc, char **argv, char *compile_opts)
 	{
 #ifdef HAVE_GETOPT_LONG
 	  if (!one_opt(option, arg, daemon->namebuff, _("try --help"), 1, 0))
-#else 
-	    if (!one_opt(option, arg, daemon->namebuff, _("try -w"), 1, 0)) 
-#endif  
+#else
+	    if (!one_opt(option, arg, daemon->namebuff, _("try -w"), 1, 0))
+#endif
 	    die(_("bad command line options: %s"), daemon->namebuff, EC_BADCONF);
 	}
     }
@@ -4750,14 +4750,14 @@ void read_opts(int argc, char **argv, char *compile_opts)
 #ifdef HAVE_IPV6
 	    else if (tmp->source_addr.sa.sa_family == AF_INET6)
 	      tmp->source_addr.in6.sin6_port = htons(daemon->query_port);
-#endif 
+#endif
 	  }
-    } 
-  
+    }
+
   if (daemon->host_records)
     {
       struct host_record *hr;
-      
+
       for (hr = daemon->host_records; hr; hr = hr->next)
 	if (hr->ttl == -1)
 	  hr->ttl = daemon->local_ttl;
@@ -4768,7 +4768,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
       struct cname *cn, *cn2, *cn3;
 
 #define NOLOOP 1
-#define TESTLOOP 2      
+#define TESTLOOP 2
 
       /* Fill in TTL for CNAMES noe we have local_ttl.
 	 Also prepare to do loop detection. */
@@ -4785,7 +4785,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
 		break;
 	      }
 	}
-      
+
       /* Find any CNAME loops.*/
       for (cn = daemon->cnames; cn; cn = cn->next)
 	{
@@ -4793,20 +4793,20 @@ void read_opts(int argc, char **argv, char *compile_opts)
 	    {
 	      if (cn2->flag == NOLOOP)
 		break;
-	      
+
 	      if (cn2->flag == TESTLOOP)
 		die(_("CNAME loop involving %s"), cn->alias, EC_BADCONF);
-	      
+
 	      cn2->flag = TESTLOOP;
 	    }
-	  
+
 	  for (cn3 = cn->targetp; cn3 != cn2; cn3 = cn3->targetp)
 	    cn3->flag = NOLOOP;
 	}
     }
 
   if (daemon->if_addrs)
-    {  
+    {
       struct iname *tmp;
       for(tmp = daemon->if_addrs; tmp; tmp = tmp->next)
 	if (tmp->addr.sa.sa_family == AF_INET)
@@ -4816,7 +4816,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
 	  tmp->addr.in6.sin6_port = htons(daemon->port);
 #endif /* IPv6 */
     }
-	
+
   /* create default, if not specified */
   if (daemon->authserver && !daemon->hostmaster)
     {
@@ -4824,19 +4824,19 @@ void read_opts(int argc, char **argv, char *compile_opts)
       strcat(buff, daemon->authserver);
       daemon->hostmaster = opt_string_alloc(buff);
     }
-  
+
   /* only one of these need be specified: the other defaults to the host-name */
   if (option_bool(OPT_LOCALMX) || daemon->mxnames || daemon->mxtarget)
     {
       struct mx_srv_record *mx;
-      
+
       if (gethostname(buff, MAXDNAME) == -1)
 	die(_("cannot get host-name: %s"), NULL, EC_MISC);
-      
+
       for (mx = daemon->mxnames; mx; mx = mx->next)
 	if (!mx->issrv && hostname_isequal(mx->name, buff))
 	  break;
-      
+
       if ((daemon->mxtarget || option_bool(OPT_LOCALMX)) && !mx)
 	{
 	  mx = opt_malloc(sizeof(struct mx_srv_record));
@@ -4846,7 +4846,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
 	  mx->name = opt_string_alloc(buff);
 	  daemon->mxnames = mx;
 	}
-      
+
       if (!daemon->mxtarget)
 	daemon->mxtarget = opt_string_alloc(buff);
 
@@ -4856,32 +4856,32 @@ void read_opts(int argc, char **argv, char *compile_opts)
     }
 
   if (!option_bool(OPT_NO_RESOLV) &&
-      daemon->resolv_files && 
-      daemon->resolv_files->next && 
+      daemon->resolv_files &&
+      daemon->resolv_files->next &&
       option_bool(OPT_NO_POLL))
     die(_("only one resolv.conf file allowed in no-poll mode."), NULL, EC_BADCONF);
-  
+
   if (option_bool(OPT_RESOLV_DOMAIN))
     {
       char *line;
       FILE *f;
 
       if (option_bool(OPT_NO_RESOLV) ||
-	  !daemon->resolv_files || 
+	  !daemon->resolv_files ||
 	  (daemon->resolv_files)->next)
 	die(_("must have exactly one resolv.conf to read domain from."), NULL, EC_BADCONF);
-      
+
       if (!(f = fopen((daemon->resolv_files)->name, "r")))
 	die(_("failed to read %s: %s"), (daemon->resolv_files)->name, EC_FILE);
-      
+
       while ((line = fgets(buff, MAXDNAME, f)))
 	{
 	  char *token = strtok(line, " \t\n\r");
-	  
+
 	  if (!token || strcmp(token, "search") != 0)
 	    continue;
-	  
-	  if ((token = strtok(NULL, " \t\n\r")) &&  
+
+	  if ((token = strtok(NULL, " \t\n\r")) &&
 	      (daemon->domain_suffix = canonicalise_opt(token)))
 	    break;
 	}
@@ -4896,10 +4896,10 @@ void read_opts(int argc, char **argv, char *compile_opts)
     {
        /* add domain for any srv record without one. */
       struct mx_srv_record *srv;
-      
+
       for (srv = daemon->mxnames; srv; srv = srv->next)
 	if (srv->issrv &&
-	    strchr(srv->name, '.') && 
+	    strchr(srv->name, '.') &&
 	    strchr(srv->name, '.') == strrchr(srv->name, '.'))
 	  {
 	    strcpy(buff, srv->name);
@@ -4915,11 +4915,11 @@ void read_opts(int argc, char **argv, char *compile_opts)
   /* If there's access-control config, then ignore --local-service, it's intended
      as a system default to keep otherwise unconfigured installations safe. */
   if (daemon->if_names || daemon->if_except || daemon->if_addrs || daemon->authserver)
-    reset_option_bool(OPT_LOCAL_SERVICE); 
+    reset_option_bool(OPT_LOCAL_SERVICE);
 
   if (testmode)
     {
       fprintf(stderr, "dnsmasq: %s.\n", _("syntax check OK"));
       exit(0);
     }
-}  
+}
diff --git a/src/outpacket.c b/src/outpacket.c
index e14bde0..7deed11 100644
--- a/src/outpacket.c
+++ b/src/outpacket.c
@@ -4,19 +4,19 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 
 #include "dnsmasq.h"
- 
+
 #ifdef HAVE_DHCP6
 
 static size_t outpacket_counter;
@@ -25,7 +25,7 @@ void end_opt6(int container)
 {
    void *p = daemon->outpacket.iov_base + container + 2;
    u16 len = outpacket_counter - container - 4 ;
-   
+
    PUTSHORT(len, p);
 }
 
@@ -34,14 +34,14 @@ void reset_counter(void)
   /* Clear out buffer when starting from beginning */
   if (daemon->outpacket.iov_base)
     memset(daemon->outpacket.iov_base, 0, daemon->outpacket.iov_len);
- 
+
   save_counter(0);
 }
 
 int save_counter(int newval)
 {
   int ret = outpacket_counter;
-  
+
   if (newval != -1)
     outpacket_counter = newval;
 
@@ -58,10 +58,10 @@ void *expand(size_t headroom)
       outpacket_counter += headroom;
       return ret;
     }
-  
+
   return NULL;
 }
-    
+
 int new_opt6(int opt)
 {
   int ret = outpacket_counter;
@@ -81,16 +81,16 @@ void *put_opt6(void *data, size_t len)
   void *p;
 
   if ((p = expand(len)) && data)
-    memcpy(p, data, len);   
-  
+    memcpy(p, data, len);
+
   return p;
 }
-  
+
 void put_opt6_long(unsigned int val)
 {
   void *p;
-  
-  if ((p = expand(4)))  
+
+  if ((p = expand(4)))
     PUTLONG(val, p);
 }
 
@@ -99,7 +99,7 @@ void put_opt6_short(unsigned int val)
   void *p;
 
   if ((p = expand(2)))
-    PUTSHORT(val, p);   
+    PUTSHORT(val, p);
 }
 
 void put_opt6_char(unsigned int val)
@@ -107,7 +107,7 @@ void put_opt6_char(unsigned int val)
   unsigned char *p;
 
   if ((p = expand(1)))
-    *p = val;   
+    *p = val;
 }
 
 void put_opt6_string(char *s)
diff --git a/src/poll.c b/src/poll.c
index 17ca999..0e558f2 100644
--- a/src/poll.c
+++ b/src/poll.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -48,22 +48,22 @@ static nfds_t nfds, arrsize = 0;
 static nfds_t fd_search(int fd)
 {
   nfds_t left, right, mid;
-  
+
   if ((right = nfds) == 0)
     return 0;
-  
+
   left = 0;
-  
+
   while (1)
     {
       if (right == left + 1)
 	return (pollfds[left].fd >= fd) ? left : right;
-      
+
       mid = (left + right)/2;
-      
+
       if (pollfds[mid].fd > fd)
 	right = mid;
-      else 
+      else
 	left = mid;
     }
 }
@@ -81,7 +81,7 @@ int do_poll(int timeout)
 int poll_check(int fd, short event)
 {
   nfds_t i = fd_search(fd);
-  
+
   if (i < nfds && pollfds[i].fd == fd)
     return pollfds[i].revents & event;
 
@@ -91,7 +91,7 @@ int poll_check(int fd, short event)
 void poll_listen(int fd, short event)
 {
    nfds_t i = fd_search(fd);
-  
+
    if (i < nfds && pollfds[i].fd == fd)
      pollfds[i].events |= event;
    else
@@ -114,10 +114,10 @@ void poll_listen(int fd, short event)
 	       memcpy(&new[i+1], &pollfds[i], (nfds - i) * sizeof(struct pollfd));
 	       free(pollfds);
 	     }
-	   
+
 	   pollfds = new;
 	 }
-       
+
        pollfds[i].fd = fd;
        pollfds[i].events = event;
        nfds++;
diff --git a/src/radv-protocol.h b/src/radv-protocol.h
index aec5135..e319109 100644
--- a/src/radv-protocol.h
+++ b/src/radv-protocol.h
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
diff --git a/src/radv.c b/src/radv.c
index 9b7e52c..fd44880 100644
--- a/src/radv.c
+++ b/src/radv.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -54,10 +54,10 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
                     int send_iface);
 static int send_ra_to_aliases(int index, unsigned int type, char *mac, size_t maclen, void *parm);
 static int add_prefixes(struct in6_addr *local,  int prefix,
-			int scope, int if_index, int flags, 
+			int scope, int if_index, int flags,
 			unsigned int preferred, unsigned int valid, void *vparam);
 static int iface_search(struct in6_addr *local,  int prefix,
-			int scope, int if_index, int flags, 
+			int scope, int if_index, int flags,
 			int prefered, int valid, void *vparam);
 static int add_lla(int index, unsigned int type, char *mac, size_t maclen, void *parm);
 static void new_timeout(struct dhcp_context *context, char *iface_name, time_t now);
@@ -78,15 +78,15 @@ void ra_init(time_t now)
   int val = 255; /* radvd uses this value */
   socklen_t len = sizeof(int);
   struct dhcp_context *context;
-  
+
   /* ensure this is around even if we're not doing DHCPv6 */
   expand_buf(&daemon->outpacket, sizeof(struct dhcp_packet));
- 
+
   /* See if we're guessing SLAAC addresses, if so we need to receive ping replies */
   for (context = daemon->dhcp6; context; context = context->next)
     if ((context->flags & CONTEXT_RA_NAME))
       break;
-  
+
   /* Need ICMP6 socket for transmission for DHCPv6 even when not doing RA. */
 
   ICMP6_FILTER_SETBLOCKALL(&filter);
@@ -96,7 +96,7 @@ void ra_init(time_t now)
       if (context)
 	ICMP6_FILTER_SETPASS(ICMP6_ECHO_REPLY, &filter);
     }
-  
+
   if ((fd = socket(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) == -1 ||
       getsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &hop_limit, &len) ||
 #if defined(IPV6_TCLASS) && defined(IPTOS_CLASS_CS6)
@@ -108,20 +108,20 @@ void ra_init(time_t now)
       setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &val, sizeof(val)) ||
       setsockopt(fd, IPPROTO_ICMPV6, ICMP6_FILTER, &filter, sizeof(filter)) == -1)
     die (_("cannot create ICMPv6 socket: %s"), NULL, EC_BADNET);
-  
+
    daemon->icmp6fd = fd;
-   
+
    if (daemon->doing_ra)
      ra_start_unsolicited(now, NULL);
 }
 
 void ra_start_unsolicited(time_t now, struct dhcp_context *context)
-{   
+{
    /* init timers so that we do ra's for some/all soon. some ra_times will end up zeroed
      if it's not appropriate to advertise those contexts.
      This gets re-called on a netlink route-change to re-do the advertisement
      and pick up new interfaces */
-  
+
   if (context)
     context->ra_short_period_start = context->ra_time = now;
   else
@@ -137,7 +137,7 @@ void ra_start_unsolicited(time_t now, struct dhcp_context *context)
 void icmp6_packet(time_t now)
 {
   char interface[IF_NAMESIZE+1];
-  ssize_t sz; 
+  ssize_t sz;
   int if_index = 0;
   struct cmsghdr *cmptr;
   struct msghdr msg;
@@ -157,12 +157,12 @@ void icmp6_packet(time_t now)
   msg.msg_namelen = sizeof(from);
   msg.msg_iov = &daemon->outpacket;
   msg.msg_iovlen = 1;
-  
+
   if ((sz = recv_dhcp_packet(daemon->icmp6fd, &msg)) == -1 || sz < 8)
     return;
-   
+
   packet = (unsigned char *)daemon->outpacket.iov_base;
-  
+
   for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
     if (cmptr->cmsg_level == IPPROTO_IPV6 && cmptr->cmsg_type == daemon->v6pktinfo)
       {
@@ -171,30 +171,30 @@ void icmp6_packet(time_t now)
 	  struct in6_pktinfo *p;
 	} p;
 	p.c = CMSG_DATA(cmptr);
-        
+
 	if_index = p.p->ipi6_ifindex;
       }
-  
+
   if (!indextoname(daemon->icmp6fd, if_index, interface))
     return;
-    
+
   if (!iface_check(AF_LOCAL, NULL, interface, NULL))
     return;
-  
+
   for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
     if (tmp->name && wildcard_match(tmp->name, interface))
       return;
- 
+
   if (packet[1] != 0)
     return;
-  
+
   if (packet[0] == ICMP6_ECHO_REPLY)
-    lease_ping_reply(&from.sin6_addr, packet, interface); 
+    lease_ping_reply(&from.sin6_addr, packet, interface);
   else if (packet[0] == ND_ROUTER_SOLICIT)
     {
       char *mac = "";
       struct dhcp_bridge *bridge, *alias;
-      
+
       /* look for link-layer address option for logging */
       if (sz >= 16 && packet[8] == ICMP6_OPT_SOURCE_MAC && (packet[9] * 8) + 8 <= sz)
 	{
@@ -204,7 +204,7 @@ void icmp6_packet(time_t now)
 	  print_mac(daemon->namebuff, &packet[10], (packet[9] * 8) - 2);
 	  mac = daemon->namebuff;
 	}
-         
+
       if (!option_bool(OPT_QUIET_RA))
 	my_syslog(MS_DHCP | LOG_INFO, "RTR-SOLICIT(%s) %s", interface, mac);
 
@@ -251,7 +251,7 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
 #ifdef HAVE_LINUX_NETWORK
   FILE *f;
 #endif
-  
+
   parm.ind = iface;
   parm.managed = 0;
   parm.other = 0;
@@ -263,12 +263,12 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
   parm.glob_pref_time = parm.link_pref_time = parm.ula_pref_time = 0;
   parm.adv_interval = calc_interval(ra_param);
   parm.prio = calc_prio(ra_param);
-  
+
   reset_counter();
-  
+
   if (!(ra = expand(sizeof(struct ra_packet))))
     return;
-  
+
   ra->type = ND_ROUTER_ADVERT;
   ra->code = 0;
   ra->hop_limit = hop_limit;
@@ -280,8 +280,8 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
   /* set tag with name == interface */
   iface_id.net = iface_name;
   iface_id.next = NULL;
-  parm.tags = &iface_id; 
-  
+  parm.tags = &iface_id;
+
   for (context = daemon->dhcp6; context; context = context->next)
     {
       context->flags &= ~CONTEXT_RA_DONE;
@@ -296,14 +296,14 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
   min_pref_time = 0xffffffff;
   if (parm.glob_pref_time != 0 && parm.glob_pref_time < min_pref_time)
     min_pref_time = parm.glob_pref_time;
-  
+
   if (parm.ula_pref_time != 0 && parm.ula_pref_time < min_pref_time)
     min_pref_time = parm.ula_pref_time;
 
   if (parm.link_pref_time != 0 && parm.link_pref_time < min_pref_time)
     min_pref_time = parm.link_pref_time;
 
-  /* Look for constructed contexts associated with addresses which have gone, 
+  /* Look for constructed contexts associated with addresses which have gone,
      and advertise them with preferred_time == 0  RFC 6204 4.3 L-13 */
   for (up = &daemon->dhcp6, context = daemon->dhcp6; context; context = tmp)
     {
@@ -312,16 +312,16 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
       if (context->if_index == iface && (context->flags & CONTEXT_OLD))
 	{
 	  unsigned int old = difftime(now, context->address_lost_time);
-	  
+
 	  if (old > context->saved_valid)
-	    { 
+	    {
 	      /* We've advertised this enough, time to go */
-	     
+
 	      /* If this context held the timeout, and there's another context in use
 		 transfer the timeout there. */
 	      if (context->ra_time != 0 && parm.found_context && parm.found_context->ra_time == 0)
 		new_timeout(parm.found_context, iface_name, now);
-	      
+
 	      *up = context->next;
 	      free(context);
 	    }
@@ -335,14 +335,14 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
 
 	      /* zero net part of address */
 	      setaddr6part(&local, addr6part(&local) & ~((context->prefix == 64) ? (u64)-1LL : (1LLU << (128 - context->prefix)) - 1LLU));
-	     
-	      
+
+
 	      if (context->flags & CONTEXT_RA)
 		{
 		  do_slaac = 1;
 		  if (context->flags & CONTEXT_DHCP)
 		    {
-		      parm.other = 1; 
+		      parm.other = 1;
 		      if (!(context->flags & CONTEXT_RA_STATELESS))
 			parm.managed = 1;
 		    }
@@ -368,29 +368,29 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
                     ((context->flags & CONTEXT_RA_OFF_LINK) ? 0 : 0x80);
 		  opt->valid_lifetime = htonl(context->saved_valid - old);
 		  opt->preferred_lifetime = htonl(0);
-		  opt->reserved = 0; 
+		  opt->reserved = 0;
 		  opt->prefix = local;
-		  
+
 		  inet_ntop(AF_INET6, &local, daemon->addrbuff, ADDRSTRLEN);
 		  if (!option_bool(OPT_QUIET_RA))
-		    my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s old prefix", iface_name, daemon->addrbuff); 		    
+		    my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s old prefix", iface_name, daemon->addrbuff);
 		}
-	   
+
 	      up = &context->next;
 	    }
 	}
       else
 	up = &context->next;
     }
-    
+
   /* If we're advertising only old prefixes, set router lifetime to zero. */
   if (old_prefix && !parm.found_context)
     ra->lifetime = htons(0);
 
   /* No prefixes to advertise. */
   if (!old_prefix && !parm.found_context)
-    return; 
-  
+    return;
+
   /* If we're sending router address instead of prefix in at least on prefix,
      include the advertisement interval option. */
   if (parm.adv_router)
@@ -428,20 +428,20 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
       put_opt6_short(0);
       put_opt6_long(mtu);
     }
-     
+
   iface_enumerate(AF_LOCAL, &send_iface, add_lla);
- 
+
   /* RDNSS, RFC 6106, use relevant DHCP6 options */
   (void)option_filter(parm.tags, NULL, daemon->dhcp_opts6);
-  
+
   for (opt_cfg = daemon->dhcp_opts6; opt_cfg; opt_cfg = opt_cfg->next)
     {
       int i;
-      
+
       /* netids match and not encapsulated? */
       if (!(opt_cfg->flags & DHOPT_TAGOK))
         continue;
-      
+
       if (opt_cfg->opt == OPTION6_DNS_SERVER)
         {
 	  struct in6_addr *a;
@@ -451,9 +451,9 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
 
           if (opt_cfg->len == 0)
 	    continue;
-	  
+
 	  /* reduce len for any addresses we can't substitute */
-	  for (a = (struct in6_addr *)opt_cfg->val, len = opt_cfg->len, i = 0; 
+	  for (a = (struct in6_addr *)opt_cfg->val, len = opt_cfg->len, i = 0;
 	       i < opt_cfg->len; i += IN6ADDRSZ, a++)
 	    if ((IN6_IS_ADDR_UNSPECIFIED(a) && parm.glob_pref_time == 0) ||
 		(IN6_IS_ADDR_ULA_ZERO(a) && parm.ula_pref_time == 0) ||
@@ -466,7 +466,7 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
 	      put_opt6_char((len/8) + 1);
 	      put_opt6_short(0);
 	      put_opt6_long(min_pref_time);
-	 
+
 	      for (a = (struct in6_addr *)opt_cfg->val, i = 0; i <  opt_cfg->len; i += IN6ADDRSZ, a++)
 		if (IN6_IS_ADDR_UNSPECIFIED(a))
 		  {
@@ -487,30 +487,30 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
 		  put_opt6(a, IN6ADDRSZ);
 	    }
 	}
-      
+
       if (opt_cfg->opt == OPTION6_DOMAIN_SEARCH && opt_cfg->len != 0)
 	{
 	  int len = ((opt_cfg->len+7)/8);
-	  
+
 	  put_opt6_char(ICMP6_OPT_DNSSL);
 	  put_opt6_char(len + 1);
 	  put_opt6_short(0);
-	  put_opt6_long(min_pref_time); 
+	  put_opt6_long(min_pref_time);
 	  put_opt6(opt_cfg->val, opt_cfg->len);
-	  
+
 	  /* pad */
 	  for (i = opt_cfg->len; i < len * 8; i++)
 	    put_opt6_char(0);
 	}
     }
-	
+
   if (daemon->port == NAMESERVER_PORT && !done_dns && parm.link_pref_time != 0)
     {
       /* default == us, as long as we are supplying DNS service. */
       put_opt6_char(ICMP6_OPT_RDNSS);
       put_opt6_char(3);
       put_opt6_short(0);
-      put_opt6_long(min_pref_time); 
+      put_opt6_long(min_pref_time);
       put_opt6(&parm.link_local, IN6ADDRSZ);
     }
 
@@ -518,8 +518,8 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
   if (parm.managed)
     ra->flags |= 0x80; /* M flag, managed, */
    if (parm.other)
-    ra->flags |= 0x40; /* O flag, other */ 
-			
+    ra->flags |= 0x40; /* O flag, other */
+
   /* decide where we're sending */
   memset(&addr, 0, sizeof(addr));
 #ifdef HAVE_SOCKADDR_SA_LEN
@@ -536,14 +536,14 @@ static void send_ra_alias(time_t now, int iface, char *iface_name, struct in6_ad
     }
   else
     {
-      inet_pton(AF_INET6, ALL_NODES, &addr.sin6_addr); 
+      inet_pton(AF_INET6, ALL_NODES, &addr.sin6_addr);
       setsockopt(daemon->icmp6fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, &send_iface, sizeof(send_iface));
     }
-  
-  while (retry_send(sendto(daemon->icmp6fd, daemon->outpacket.iov_base, 
-			   save_counter(-1), 0, (struct sockaddr *)&addr, 
+
+  while (retry_send(sendto(daemon->icmp6fd, daemon->outpacket.iov_base,
+			   save_counter(-1), 0, (struct sockaddr *)&addr,
 			   sizeof(addr))));
-  
+
 }
 
 static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *dest)
@@ -554,19 +554,19 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de
 }
 
 static int add_prefixes(struct in6_addr *local,  int prefix,
-			int scope, int if_index, int flags, 
+			int scope, int if_index, int flags,
 			unsigned int preferred, unsigned int valid, void *vparam)
 {
   struct ra_param *param = vparam;
 
   (void)scope; /* warning */
-  
+
   if (if_index == param->ind)
     {
       if (IN6_IS_ADDR_LINKLOCAL(local))
 	{
 	  /* Can there be more than one LL address?
-	     Select the one with the longest preferred time 
+	     Select the one with the longest preferred time
 	     if there is. */
 	  if (preferred > param->link_pref_time)
 	    {
@@ -585,7 +585,7 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
 	  int off_link = 0;
 	  unsigned int time = 0xffffffff;
 	  struct dhcp_context *context;
-	  
+
 	  for (context = daemon->dhcp6; context; context = context->next)
 	    if (!(context->flags & (CONTEXT_TEMPLATE | CONTEXT_OLD)) &&
 		prefix <= context->prefix &&
@@ -594,12 +594,12 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
 	      {
 		context->saved_valid = valid;
 
-		if (context->flags & CONTEXT_RA) 
+		if (context->flags & CONTEXT_RA)
 		  {
 		    do_slaac = 1;
 		    if (context->flags & CONTEXT_DHCP)
 		      {
-			param->other = 1; 
+			param->other = 1;
 			if (!(context->flags & CONTEXT_RA_STATELESS))
 			  param->managed = 1;
 		      }
@@ -613,8 +613,8 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
 		    param->other = 1;
 		  }
 
-		/* Configured to advertise router address, not prefix. See RFC 3775 7.2 
-		 In this case we do all addresses associated with a context, 
+		/* Configured to advertise router address, not prefix. See RFC 3775 7.2
+		 In this case we do all addresses associated with a context,
 		 hence the real_prefix setting here. */
 		if (context->flags & CONTEXT_RA_ROUTER)
 		  {
@@ -633,7 +633,7 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
 
 		if (context->flags & CONTEXT_DEPRECATE)
 		  deprecate = 1;
-		
+
 		if (context->flags & CONTEXT_CONSTRUCTED)
 		  constructed = 1;
 
@@ -644,8 +644,8 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
 		    context->netid.next = param->tags;
 		    param->tags = &context->netid;
 		  }
-		  
-		/* subsequent prefixes on the same interface 
+
+		/* subsequent prefixes on the same interface
 		   and subsequent instances of this prefix don't need timers.
 		   Be careful not to find the same prefix twice with different
 		   addresses unless we're advertising the actual addresses. */
@@ -659,7 +659,7 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
 		  }
 
 		param->first = 0;
-		/* found_context is the _last_ one we found, so if there's 
+		/* found_context is the _last_ one we found, so if there's
 		   more than one, it's not the first. */
 		param->found_context = context;
 	      }
@@ -667,17 +667,17 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
 	  /* configured time is ceiling */
 	  if (!constructed || valid > time)
 	    valid = time;
-	  
+
 	  if (flags & IFACE_DEPRECATED)
 	    preferred = 0;
-	  
+
 	  if (deprecate)
 	    time = 0;
-	  
+
 	  /* configured time is ceiling */
 	  if (!constructed || preferred > time)
 	    preferred = time;
-	  
+
 	  if (IN6_IS_ADDR_ULA(local))
 	    {
 	      if (preferred > param->ula_pref_time)
@@ -686,7 +686,7 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
 		  param->ula = *local;
 		}
 	    }
-	  else 
+	  else
 	    {
 	      if (preferred > param->glob_pref_time)
 		{
@@ -694,17 +694,17 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
 		  param->link_global = *local;
 		}
 	    }
-	  
+
 	  if (real_prefix != 0)
 	    {
 	      struct prefix_opt *opt;
-	     	      
+
 	      if ((opt = expand(sizeof(struct prefix_opt))))
 		{
 		  /* zero net part of address */
 		  if (!adv_router)
 		    setaddr6part(local, addr6part(local) & ~((real_prefix == 64) ? (u64)-1LL : (1LLU << (128 - real_prefix)) - 1LLU));
-		  
+
 		  opt->type = ICMP6_OPT_PREFIX;
 		  opt->len = 4;
 		  opt->prefix_len = real_prefix;
@@ -717,16 +717,16 @@ static int add_prefixes(struct in6_addr *local,  int prefix,
 		    opt->flags |= 0x20;
 		  opt->valid_lifetime = htonl(valid);
 		  opt->preferred_lifetime = htonl(preferred);
-		  opt->reserved = 0; 
+		  opt->reserved = 0;
 		  opt->prefix = *local;
-		  
+
 		  inet_ntop(AF_INET6, local, daemon->addrbuff, ADDRSTRLEN);
 		  if (!option_bool(OPT_QUIET_RA))
-		    my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s", param->if_name, daemon->addrbuff); 		    
+		    my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s", param->if_name, daemon->addrbuff);
 		}
 	    }
 	}
-    }          
+    }
   return 1;
 }
 
@@ -757,7 +757,7 @@ time_t periodic_ra(time_t now)
   struct dhcp_context *context;
   time_t next_event;
   struct alias_param aparam;
-    
+
   param.now = now;
   param.iface = 0;
 
@@ -769,20 +769,20 @@ time_t periodic_ra(time_t now)
 	  {
 	    if (difftime(context->ra_time, now) <= 0.0)
 	      break; /* overdue */
-	    
+
 	    if (next_event == 0 || difftime(next_event, context->ra_time) > 0.0)
 	      next_event = context->ra_time;
 	  }
-      
+
       /* none overdue */
       if (!context)
 	break;
-      
-      if ((context->flags & CONTEXT_OLD) && 
-	  context->if_index != 0 && 
+
+      if ((context->flags & CONTEXT_OLD) &&
+	  context->if_index != 0 &&
 	  indextoname(daemon->icmp6fd, context->if_index, param.name))
 	{
-	  /* A context for an old address. We'll not find the interface by 
+	  /* A context for an old address. We'll not find the interface by
 	     looking for addresses, but we know it anyway, since the context is
 	     constructed */
 	  param.iface = context->if_index;
@@ -790,12 +790,12 @@ time_t periodic_ra(time_t now)
 	}
       else if (iface_enumerate(AF_INET6, &param, iface_search))
 	/* There's a context overdue, but we can't find an interface
-	   associated with it, because it's for a subnet we dont 
+	   associated with it, because it's for a subnet we dont
 	   have an interface on. Probably we're doing DHCP on
 	   a remote subnet via a relay. Zero the timer, since we won't
 	   ever be able to send ra's and satisfy it. */
 	context->ra_time = 0;
-      
+
       if (param.iface != 0 &&
 	  iface_check(AF_LOCAL, NULL, param.name, NULL))
 	{
@@ -805,7 +805,7 @@ time_t periodic_ra(time_t now)
 	      break;
 	  if (!tmp)
             {
-              send_ra(now, param.iface, param.name, NULL); 
+              send_ra(now, param.iface, param.name, NULL);
 
               /* Also send on all interfaces that are aliases of this
                  one. */
@@ -856,7 +856,7 @@ time_t periodic_ra(time_t now)
                   }
             }
 	}
-    }      
+    }
   return next_event;
 }
 
@@ -883,7 +883,7 @@ static int send_ra_to_aliases(int index, unsigned int type, char *mac, size_t ma
 }
 
 static int iface_search(struct in6_addr *local,  int prefix,
-			int scope, int if_index, int flags, 
+			int scope, int if_index, int flags,
 			int preferred, int valid, void *vparam)
 {
   struct search_param *param = vparam;
@@ -892,45 +892,45 @@ static int iface_search(struct in6_addr *local,  int prefix,
   (void)scope;
   (void)preferred;
   (void)valid;
- 
+
   for (context = daemon->dhcp6; context; context = context->next)
     if (!(context->flags & (CONTEXT_TEMPLATE | CONTEXT_OLD)) &&
 	prefix <= context->prefix &&
 	is_same_net6(local, &context->start6, context->prefix) &&
 	is_same_net6(local, &context->end6, context->prefix) &&
-	context->ra_time != 0 && 
+	context->ra_time != 0 &&
 	difftime(context->ra_time, param->now) <= 0.0)
       {
-	/* found an interface that's overdue for RA determine new 
+	/* found an interface that's overdue for RA determine new
 	   timeout value and arrange for RA to be sent unless interface is
 	   still doing DAD.*/
-	
+
 	if (!(flags & IFACE_TENTATIVE))
 	  param->iface = if_index;
-	
+
 	/* should never fail */
 	if (!indextoname(daemon->icmp6fd, if_index, param->name))
 	  {
 	    param->iface = 0;
 	    return 0;
 	  }
-	
+
 	new_timeout(context, param->name, param->now);
-	
-	/* zero timers for other contexts on the same subnet, so they don't timeout 
+
+	/* zero timers for other contexts on the same subnet, so they don't timeout
 	   independently */
 	for (context = context->next; context; context = context->next)
 	  if (prefix <= context->prefix &&
 	      is_same_net6(local, &context->start6, context->prefix) &&
 	      is_same_net6(local, &context->end6, context->prefix))
 	    context->ra_time = 0;
-	
+
 	return 0; /* found, abort */
       }
-  
+
   return 1; /* keep searching */
 }
- 
+
 static void new_timeout(struct dhcp_context *context, char *iface_name, time_t now)
 {
   if (difftime(now, context->ra_short_period_start) < 60.0)
@@ -947,7 +947,7 @@ static void new_timeout(struct dhcp_context *context, char *iface_name, time_t n
 static struct ra_interface *find_iface_param(char *iface)
 {
   struct ra_interface *ra;
-  
+
   for (ra = daemon->ra_interfaces; ra; ra = ra->next)
     if (wildcard_match(ra->name, iface))
       return ra;
@@ -958,7 +958,7 @@ static struct ra_interface *find_iface_param(char *iface)
 static unsigned int calc_interval(struct ra_interface *ra)
 {
   int interval = 600;
-  
+
   if (ra && ra->interval != 0)
     {
       interval = ra->interval;
@@ -967,14 +967,14 @@ static unsigned int calc_interval(struct ra_interface *ra)
       else if (interval < 4)
 	interval = 4;
     }
-  
+
   return (unsigned int)interval;
 }
 
 static unsigned int calc_lifetime(struct ra_interface *ra)
 {
   int lifetime, interval = (int)calc_interval(ra);
-  
+
   if (!ra || ra->lifetime == -1) /* not specified */
     lifetime = 3 * interval;
   else
@@ -985,7 +985,7 @@ static unsigned int calc_lifetime(struct ra_interface *ra)
       else if (lifetime > 9000)
 	lifetime = 9000;
     }
-  
+
   return (unsigned int)lifetime;
 }
 
@@ -993,7 +993,7 @@ static unsigned int calc_prio(struct ra_interface *ra)
 {
   if (ra)
     return ra->prio;
-  
+
   return 0;
 }
 
diff --git a/src/rfc1035.c b/src/rfc1035.c
index 56ab88b..7c17770 100644
--- a/src/rfc1035.c
+++ b/src/rfc1035.c
@@ -4,42 +4,42 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
 
-int extract_name(struct dns_header *header, size_t plen, unsigned char **pp, 
+int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
 		 char *name, int isExtract, int extrabytes)
 {
   unsigned char *cp = (unsigned char *)name, *p = *pp, *p1 = NULL;
   unsigned int j, l, namelen = 0, hops = 0;
   int retvalue = 1;
-  
+
   if (isExtract)
     *cp = 0;
 
   while (1)
-    { 
+    {
       unsigned int label_type;
 
       if (!CHECK_LEN(header, p, plen, 1))
 	return 0;
-      
-      if ((l = *p++) == 0) 
+
+      if ((l = *p++) == 0)
 	/* end marker */
 	{
 	  /* check that there are the correct no of bytes after the name */
 	  if (!CHECK_LEN(header, p1 ? p1 : p, plen, extrabytes))
 	    return 0;
-	  
+
 	  if (isExtract)
 	    {
 	      if (cp != (unsigned char *)name)
@@ -48,33 +48,33 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
 	    }
 	  else if (*cp != 0)
 	    retvalue = 2;
-	  
+
 	  if (p1) /* we jumped via compression */
 	    *pp = p1;
 	  else
 	    *pp = p;
-	  
+
 	  return retvalue;
 	}
 
       label_type = l & 0xc0;
-      
+
       if (label_type == 0xc0) /* pointer */
-	{ 
+	{
 	  if (!CHECK_LEN(header, p, plen, 1))
 	    return 0;
-	      
+
 	  /* get offset */
 	  l = (l&0x3f) << 8;
 	  l |= *p++;
-	  
+
 	  if (!p1) /* first jump, save location to go back to */
 	    p1 = p;
-	      
+
 	  hops++; /* break malicious infinite loops */
 	  if (hops > 255)
 	    return 0;
-	  
+
 	  p = l + (unsigned char *)header;
 	}
       else if (label_type == 0x00)
@@ -84,7 +84,7 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
 	    return 0;
 	  if (!CHECK_LEN(header, p, plen, l))
 	    return 0;
-	  
+
 	  for(j=0; j<l; j++, p++)
 	    if (isExtract)
 	      {
@@ -98,7 +98,7 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
 			*cp++ = c+1;
 		      }
 		    else
-		      *cp++ = c; 
+		      *cp++ = c;
 		  }
 		else
 #endif
@@ -107,13 +107,13 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
 		else
 		  return 0;
 	      }
-	    else 
+	    else
 	      {
 		unsigned char c1 = *cp, c2 = *p;
-		
+
 		if (c1 == 0)
 		  retvalue = 2;
-		else 
+		else
 		  {
 		    cp++;
 		    if (c1 >= 'A' && c1 <= 'Z')
@@ -122,15 +122,15 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
 		    if (option_bool(OPT_DNSSEC_VALID) && c1 == NAME_ESCAPE)
 		      c1 = (*cp++)-1;
 #endif
-		    
+
 		    if (c2 >= 'A' && c2 <= 'Z')
 		      c2 += 'a' - 'A';
-		     
+
 		    if (c1 != c2)
 		      retvalue =  2;
 		  }
 	      }
-	    
+
 	  if (isExtract)
 	    *cp++ = '.';
 	  else if (*cp != 0 && *cp++ != '.')
@@ -140,7 +140,7 @@ int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
 	return 0; /* label types 0x40 and 0x80 not supported */
     }
 }
- 
+
 /* Max size of input string (for IPv6) is 75 chars.) */
 #define MAXARPANAME 75
 int in_arpa_name_2_addr(char *namein, struct all_addr *addrp)
@@ -149,7 +149,7 @@ int in_arpa_name_2_addr(char *namein, struct all_addr *addrp)
   char name[MAXARPANAME+1], *cp1;
   unsigned char *addr = (unsigned char *)addrp;
   char *lastchunk = NULL, *penchunk = NULL;
-  
+
   if (strlen(namein) > MAXARPANAME)
     return 0;
 
@@ -167,7 +167,7 @@ int in_arpa_name_2_addr(char *namein, struct all_addr *addrp)
       }
     else
       *cp1 = *namein;
-  
+
   *cp1 = 0;
 
   if (j<3)
@@ -183,13 +183,13 @@ int in_arpa_name_2_addr(char *namein, struct all_addr *addrp)
       for (cp1 = name; cp1 != penchunk; cp1 += strlen(cp1)+1)
 	{
 	  /* check for digits only (weeds out things like
-	     50.0/24.67.28.64.in-addr.arpa which are used 
+	     50.0/24.67.28.64.in-addr.arpa which are used
 	     as CNAME targets according to RFC 2317 */
 	  char *cp;
 	  for (cp = cp1; *cp; cp++)
 	    if (!isdigit((unsigned char)*cp))
 	      return 0;
-	  
+
 	  addr[3] = addr[2];
 	  addr[2] = addr[1];
 	  addr[1] = addr[0];
@@ -199,21 +199,21 @@ int in_arpa_name_2_addr(char *namein, struct all_addr *addrp)
       return F_IPV4;
     }
 #ifdef HAVE_IPV6
-  else if (hostname_isequal(penchunk, "ip6") && 
+  else if (hostname_isequal(penchunk, "ip6") &&
 	   (hostname_isequal(lastchunk, "int") || hostname_isequal(lastchunk, "arpa")))
     {
       /* IP v6:
          Address arrives as 0.1.2.3.4.5.6.7.8.9.a.b.c.d.e.f.ip6.[int|arpa]
     	 or \[xfedcba9876543210fedcba9876543210/128].ip6.[int|arpa]
-      
-	 Note that most of these the various representations are obsolete and 
+
+	 Note that most of these the various representations are obsolete and
 	 left-over from the many DNS-for-IPv6 wars. We support all the formats
 	 that we can since there is no reason not to.
       */
 
-      if (*name == '\\' && *(name+1) == '[' && 
+      if (*name == '\\' && *(name+1) == '[' &&
 	  (*(name+2) == 'x' || *(name+2) == 'X'))
-	{	  
+	{
 	  for (j = 0, cp1 = name+3; *cp1 && isxdigit((unsigned char) *cp1) && j < 32; cp1++, j++)
 	    {
 	      char xdig[2];
@@ -224,7 +224,7 @@ int in_arpa_name_2_addr(char *namein, struct all_addr *addrp)
 	      else
 		addr[j/2] = strtol(xdig, NULL, 16) << 4;
 	    }
-	  
+
 	  if (*cp1 == '/' && j == 32)
 	    return F_IPV6;
 	}
@@ -234,17 +234,17 @@ int in_arpa_name_2_addr(char *namein, struct all_addr *addrp)
 	    {
 	      if (*(cp1+1) || !isxdigit((unsigned char)*cp1))
 		return 0;
-	      
+
 	      for (j = sizeof(struct all_addr)-1; j>0; j--)
 		addr[j] = (addr[j] >> 4) | (addr[j-1] << 4);
 	      addr[0] = (addr[0] >> 4) | (strtol(cp1, NULL, 16) << 4);
 	    }
-	  
+
 	  return F_IPV6;
 	}
     }
 #endif
-  
+
   return 0;
 }
 
@@ -253,16 +253,16 @@ unsigned char *skip_name(unsigned char *ansp, struct dns_header *header, size_t
   while(1)
     {
       unsigned int label_type;
-      
+
       if (!CHECK_LEN(header, ansp, plen, 1))
 	return NULL;
-      
+
       label_type = (*ansp) & 0xc0;
 
       if (label_type == 0xc0)
 	{
 	  /* pointer for compression. */
-	  ansp += 2;	
+	  ansp += 2;
 	  break;
 	}
       else if (label_type == 0x80)
@@ -271,15 +271,15 @@ unsigned char *skip_name(unsigned char *ansp, struct dns_header *header, size_t
 	{
 	  /* Extended label type */
 	  unsigned int count;
-	  
+
 	  if (!CHECK_LEN(header, ansp, plen, 2))
 	    return NULL;
-	  
+
 	  if (((*ansp++) & 0x3f) != 1)
 	    return NULL; /* we only understand bitstrings */
-	  
+
 	  count = *(ansp++); /* Bits in bitstring */
-	  
+
 	  if (count == 0) /* count == 0 means 256 bits */
 	    ansp += 32;
 	  else
@@ -288,7 +288,7 @@ unsigned char *skip_name(unsigned char *ansp, struct dns_header *header, size_t
       else
 	{ /* label type == 0 Bottom six bits is length */
 	  unsigned int len = (*ansp++) & 0x3f;
-	  
+
 	  if (!ADD_RDLEN(header, ansp, plen, len))
 	    return NULL;
 
@@ -299,7 +299,7 @@ unsigned char *skip_name(unsigned char *ansp, struct dns_header *header, size_t
 
   if (!CHECK_LEN(header, ansp, plen, extrabytes))
     return NULL;
-  
+
   return ansp;
 }
 
@@ -314,18 +314,18 @@ unsigned char *skip_questions(struct dns_header *header, size_t plen)
 	return NULL;
       ansp += 4; /* class and type */
     }
-  
+
   return ansp;
 }
 
 unsigned char *skip_section(unsigned char *ansp, int count, struct dns_header *header, size_t plen)
 {
   int i, rdlen;
-  
+
   for (i = 0; i < count; i++)
     {
       if (!(ansp = skip_name(ansp, header, plen, 10)))
-	return NULL; 
+	return NULL;
       ansp += 8; /* type, class, TTL */
       GETSHORT(rdlen, ansp);
       if (!ADD_RDLEN(header, ansp, plen, rdlen))
@@ -335,10 +335,10 @@ unsigned char *skip_section(unsigned char *ansp, int count, struct dns_header *h
   return ansp;
 }
 
-/* CRC the question section. This is used to safely detect query 
-   retransmission and to detect answers to questions we didn't ask, which 
-   might be poisoning attacks. Note that we decode the name rather 
-   than CRC the raw bytes, since replies might be compressed differently. 
+/* CRC the question section. This is used to safely detect query
+   retransmission and to detect answers to questions we didn't ask, which
+   might be poisoning attacks. Note that we decode the name rather
+   than CRC the raw bytes, since replies might be compressed differently.
    We ignore case in the names for the same reason. Return all-ones
    if there is not question section. */
 #ifndef HAVE_DNSSEC
@@ -348,11 +348,11 @@ unsigned int questions_crc(struct dns_header *header, size_t plen, char *name)
   unsigned int crc = 0xffffffff;
   unsigned char *p1, *p = (unsigned char *)(header+1);
 
-  for (q = ntohs(header->qdcount); q != 0; q--) 
+  for (q = ntohs(header->qdcount); q != 0; q--)
     {
       if (!extract_name(header, plen, &p, name, 1, 4))
 	return crc; /* bad packet */
-      
+
       for (p1 = (unsigned char *)name; *p1; p1++)
 	{
 	  int i = 8;
@@ -365,7 +365,7 @@ unsigned int questions_crc(struct dns_header *header, size_t plen, char *name)
 	  while (i--)
 	    crc = crc & 0x80000000 ? (crc << 1) ^ 0x04c11db7 : crc << 1;
 	}
-      
+
       /* CRC the class and type as well */
       for (p1 = p; p1 < p+4; p1++)
 	{
@@ -387,15 +387,15 @@ unsigned int questions_crc(struct dns_header *header, size_t plen, char *name)
 size_t resize_packet(struct dns_header *header, size_t plen, unsigned char *pheader, size_t hlen)
 {
   unsigned char *ansp = skip_questions(header, plen);
-    
+
   /* if packet is malformed, just return as-is. */
   if (!ansp)
     return plen;
-  
+
   if (!(ansp = skip_section(ansp, ntohs(header->ancount) + ntohs(header->nscount) + ntohs(header->arcount),
 			    header, plen)))
     return plen;
-    
+
   /* restore pseudoheader */
   if (pheader && ntohs(header->arcount) == 0)
     {
@@ -408,8 +408,8 @@ size_t resize_packet(struct dns_header *header, size_t plen, unsigned char *phea
   return ansp - (unsigned char *)header;
 }
 
-/* is addr in the non-globally-routed IP space? */ 
-int private_net(struct in_addr addr, int ban_localhost) 
+/* is addr in the non-globally-routed IP space? */
+int private_net(struct in_addr addr, int ban_localhost)
 {
   in_addr_t ip_addr = ntohl(addr.s_addr);
 
@@ -429,7 +429,7 @@ int private_net(struct in_addr addr, int ban_localhost)
 #ifdef HAVE_IPV6
 static int private_net6(struct in6_addr *a)
 {
-  return 
+  return
     IN6_IS_ADDR_UNSPECIFIED(a) || /* RFC 6303 4.3 */
     IN6_IS_ADDR_LOOPBACK(a) ||    /* RFC 6303 4.3 */
     IN6_IS_ADDR_LINKLOCAL(a) ||   /* RFC 6303 4.5 */
@@ -452,23 +452,23 @@ static unsigned char *do_doctor(unsigned char *p, int count, struct dns_header *
 	}
       else if (!(p = skip_name(p, header, qlen, 10)))
 	return 0; /* bad packet */
-      
-      GETSHORT(qtype, p); 
+
+      GETSHORT(qtype, p);
       GETSHORT(qclass, p);
       p += 4; /* ttl */
       GETSHORT(rdlen, p);
-      
+
       if (qclass == C_IN && qtype == T_A)
 	{
 	  struct doctor *doctor;
 	  struct in_addr addr;
-	  
+
 	  if (!CHECK_LEN(header, p, qlen, INADDRSZ))
 	    return 0;
-	  
+
 	  /* alignment */
 	  memcpy(&addr, p, INADDRSZ);
-	  
+
 	  for (doctor = daemon->doctors; doctor; doctor = doctor->next)
 	    {
 	      if (doctor->end.s_addr == 0)
@@ -476,10 +476,10 @@ static unsigned char *do_doctor(unsigned char *p, int count, struct dns_header *
 		  if (!is_same_net(doctor->in, addr, doctor->mask))
 		    continue;
 		}
-	      else if (ntohl(doctor->in.s_addr) > ntohl(addr.s_addr) || 
+	      else if (ntohl(doctor->in.s_addr) > ntohl(addr.s_addr) ||
 		       ntohl(doctor->end.s_addr) < ntohl(addr.s_addr))
 		continue;
-	      
+
 	      addr.s_addr &= ~doctor->mask.s_addr;
 	      addr.s_addr |= (doctor->out.s_addr & doctor->mask.s_addr);
 	      /* Since we munged the data, the server it came from is no longer authoritative */
@@ -505,7 +505,7 @@ static unsigned char *do_doctor(unsigned char *p, int count, struct dns_header *
 		{
 		  if (!isprint((int)*(p2+1)))
 		    break;
-		  
+
 		  *p2 = *(p2+1);
 		  p2++;
 		}
@@ -516,13 +516,13 @@ static unsigned char *do_doctor(unsigned char *p, int count, struct dns_header *
 	      *p1 = len;
 	      p1 += len+1;
 	    }
-	}		  
-      
+	}
+
       if (!ADD_RDLEN(header, p, qlen, rdlen))
 	 return 0; /* bad packet */
     }
-  
-  return p; 
+
+  return p;
 }
 
 static int find_soa(struct dns_header *header, size_t qlen, char *name, int *doctored)
@@ -531,22 +531,22 @@ static int find_soa(struct dns_header *header, size_t qlen, char *name, int *doc
   int qtype, qclass, rdlen;
   unsigned long ttl, minttl = ULONG_MAX;
   int i, found_soa = 0;
-  
+
   /* first move to NS section and find TTL from any SOA section */
   if (!(p = skip_questions(header, qlen)) ||
       !(p = do_doctor(p, ntohs(header->ancount), header, qlen, name, doctored)))
     return 0;  /* bad packet */
-  
+
   for (i = ntohs(header->nscount); i != 0; i--)
     {
       if (!(p = skip_name(p, header, qlen, 10)))
 	return 0; /* bad packet */
-      
-      GETSHORT(qtype, p); 
+
+      GETSHORT(qtype, p);
       GETSHORT(qclass, p);
       GETLONG(ttl, p);
       GETSHORT(rdlen, p);
-      
+
       if ((qclass == C_IN) && (qtype == T_SOA))
 	{
 	  found_soa = 1;
@@ -560,7 +560,7 @@ static int find_soa(struct dns_header *header, size_t qlen, char *name, int *doc
 	  if (!(p = skip_name(p, header, qlen, 20)))
 	    return 0;
 	  p += 16; /* SERIAL REFRESH RETRY EXPIRE */
-	  
+
 	  GETLONG(ttl, p); /* minTTL */
 	  if (ttl < minttl)
 	    minttl = ttl;
@@ -568,11 +568,11 @@ static int find_soa(struct dns_header *header, size_t qlen, char *name, int *doc
       else if (!ADD_RDLEN(header, p, qlen, rdlen))
 	return 0; /* bad packet */
     }
-  
+
   /* rewrite addresses in additional section too */
   if (!do_doctor(p, ntohs(header->arcount), header, qlen, NULL, doctored))
     return 0;
-  
+
   if (!found_soa)
     minttl = daemon->neg_ttl;
 
@@ -580,10 +580,10 @@ static int find_soa(struct dns_header *header, size_t qlen, char *name, int *doc
 }
 
 /* Note that the following code can create CNAME chains that don't point to a real record,
-   either because of lack of memory, or lack of SOA records.  These are treated by the cache code as 
-   expired and cleaned out that way. 
+   either because of lack of memory, or lack of SOA records.  These are treated by the cache code as
+   expired and cleaned out that way.
    Return 1 if we reject an address because it look like part of dns-rebinding attack. */
-int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t now, 
+int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t now,
 		      char **ipsets, int is_sign, int check_rebind, int no_cache_dnssec, int secure, int *doctored)
 {
   unsigned char *p, *p1, *endrr, *namep;
@@ -595,7 +595,7 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 #else
   (void)ipsets; /* unused */
 #endif
-  
+
   cache_start_insert();
 
   /* find_soa is needed for dns_doctor and logging side-effects, so don't call it lazily if there are any. */
@@ -608,10 +608,10 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 	return 0;
 #endif
     }
-  
+
   /* go through the questions. */
   p = (unsigned char *)(header+1);
-  
+
   for (i = ntohs(header->qdcount); i != 0; i--)
     {
       int found = 0, cname_count = CNAME_CHAIN;
@@ -623,19 +623,19 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
       namep = p;
       if (!extract_name(header, qlen, &p, name, 1, 4))
 	return 0; /* bad packet */
-           
-      GETSHORT(qtype, p); 
+
+      GETSHORT(qtype, p);
       GETSHORT(qclass, p);
-      
+
       if (qclass != C_IN)
 	continue;
 
-      /* PTRs: we chase CNAMEs here, since we have no way to 
+      /* PTRs: we chase CNAMEs here, since we have no way to
 	 represent them in the cache. */
       if (qtype == T_PTR)
-	{ 
+	{
 	  int name_encoding = in_arpa_name_2_addr(name, &addr);
-	  
+
 	  if (!name_encoding)
 	    continue;
 
@@ -644,16 +644,16 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 	    cname_loop:
 	      if (!(p1 = skip_questions(header, qlen)))
 		return 0;
-	      
-	      for (j = ntohs(header->ancount); j != 0; j--) 
+
+	      for (j = ntohs(header->ancount); j != 0; j--)
 		{
 		  unsigned char *tmp = namep;
 		  /* the loop body overwrites the original name, so get it back here. */
 		  if (!extract_name(header, qlen, &tmp, name, 1, 0) ||
 		      !(res = extract_name(header, qlen, &p1, name, 0, 10)))
 		    return 0; /* bad packet */
-		  
-		  GETSHORT(aqtype, p1); 
+
+		  GETSHORT(aqtype, p1);
 		  GETSHORT(aqclass, p1);
 		  GETLONG(attl, p1);
 		  if ((daemon->max_ttl != 0) && (attl > daemon->max_ttl) && !is_sign)
@@ -663,7 +663,7 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 		    }
 		  GETSHORT(ardlen, p1);
 		  endrr = p1+ardlen;
-		  
+
 		  /* TTL of record is minimum of CNAMES and PTR */
 		  if (attl < cttl)
 		    cttl = attl;
@@ -672,24 +672,24 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 		    {
 		      if (!extract_name(header, qlen, &p1, name, 1, 0))
 			return 0;
-		      
+
 		      if (aqtype == T_CNAME)
 			{
 			  if (!cname_count-- || secure)
 			    return 0; /* looped CNAMES, or DNSSEC, which we can't cache. */
 			  goto cname_loop;
 			}
-		      
+
 		      cache_insert(name, &addr, now, cttl, name_encoding | secflag | F_REVERSE);
-		      found = 1; 
+		      found = 1;
 		    }
-		  
+
 		  p1 = endrr;
 		  if (!CHECK_LEN(header, p1, qlen, 0))
 		    return 0; /* bad packet */
 		}
 	    }
-	  
+
 	   if (!found && !option_bool(OPT_NO_NEG))
 	    {
 	      if (!searched_soa)
@@ -698,7 +698,7 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 		  ttl = find_soa(header, qlen, NULL, doctored);
 		}
 	      if (ttl)
-		cache_insert(NULL, &addr, now, ttl, name_encoding | F_REVERSE | F_NEG | flags | secflag);	
+		cache_insert(NULL, &addr, now, ttl, name_encoding | F_REVERSE | F_NEG | flags | secflag);
 	    }
 	}
       else
@@ -719,19 +719,19 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 	      flags |= F_IPV6;
 	    }
 #endif
-	  else 
+	  else
 	    continue;
-	    
+
 	cname_loop1:
 	  if (!(p1 = skip_questions(header, qlen)))
 	    return 0;
-	  
-	  for (j = ntohs(header->ancount); j != 0; j--) 
+
+	  for (j = ntohs(header->ancount); j != 0; j--)
 	    {
 	      if (!(res = extract_name(header, qlen, &p1, name, 0, 10)))
 		return 0; /* bad packet */
-	      
-	      GETSHORT(aqtype, p1); 
+
+	      GETSHORT(aqtype, p1);
 	      GETSHORT(aqclass, p1);
 	      GETLONG(attl, p1);
 	      if ((daemon->max_ttl != 0) && (attl > daemon->max_ttl) && !is_sign)
@@ -741,7 +741,7 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 		}
 	      GETSHORT(ardlen, p1);
 	      endrr = p1+ardlen;
-	      
+
 	      if (aqclass == C_IN && res != 2 && (aqtype == T_CNAME || aqtype == qtype))
 		{
 		  if (aqtype == T_CNAME)
@@ -752,19 +752,19 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 		      if (newc)
 			{
 			  newc->addr.cname.target.cache = NULL;
-			  /* anything other than zero, to avoid being mistaken for CNAME to interface-name */ 
-			  newc->addr.cname.uid = 1; 
+			  /* anything other than zero, to avoid being mistaken for CNAME to interface-name */
+			  newc->addr.cname.uid = 1;
 			  if (cpp)
 			    {
 			      cpp->addr.cname.target.cache = newc;
 			      cpp->addr.cname.uid = newc->uid;
 			    }
 			}
-		      
+
 		      cpp = newc;
 		      if (attl < cttl)
 			cttl = attl;
-		      
+
 		      if (!extract_name(header, qlen, &p1, name, 1, 0))
 			return 0;
 		      goto cname_loop1;
@@ -772,19 +772,19 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 		  else if (!(flags & F_NXDOMAIN))
 		    {
 		      found = 1;
-		      
+
 		      /* copy address into aligned storage */
 		      if (!CHECK_LEN(header, p1, qlen, addrlen))
 			return 0; /* bad packet */
 		      memcpy(&addr, p1, addrlen);
-		      
+
 		      /* check for returned address in private space */
 		      if (check_rebind)
 			{
 			  if ((flags & F_IPV4) &&
 			      private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
 			    return 1;
-			  
+
 #ifdef HAVE_IPV6
 			  if ((flags & F_IPV6) &&
 			      IN6_IS_ADDR_V4MAPPED(&addr.addr.addr6))
@@ -796,7 +796,7 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 			    }
 #endif
 			}
-		      
+
 #ifdef HAVE_IPSET
 		      if (ipsets && (flags & (F_IPV4 | F_IPV6)))
 			{
@@ -808,7 +808,7 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 			    }
 			}
 #endif
-		      
+
 		      newc = cache_insert(name, &addr, now, attl, flags | F_FORWARD | secflag);
 		      if (newc && cpp)
 			{
@@ -818,12 +818,12 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 		      cpp = NULL;
 		    }
 		}
-	      
+
 	      p1 = endrr;
 	      if (!CHECK_LEN(header, p1, qlen, 0))
 		return 0; /* bad packet */
 	    }
-	  
+
 	  if (!found && !option_bool(OPT_NO_NEG))
 	    {
 	      if (!searched_soa)
@@ -831,11 +831,11 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 		  searched_soa = 1;
 		  ttl = find_soa(header, qlen, NULL, doctored);
 		}
-	      /* If there's no SOA to get the TTL from, but there is a CNAME 
+	      /* If there's no SOA to get the TTL from, but there is a CNAME
 		 pointing at this, inherit its TTL */
 	      if (ttl || cpp)
 		{
-		  newc = cache_insert(name, NULL, now, ttl ? ttl : cttl, F_FORWARD | F_NEG | flags | secflag);	
+		  newc = cache_insert(name, NULL, now, ttl ? ttl : cttl, F_FORWARD | F_NEG | flags | secflag);
 		  if (newc && cpp)
 		    {
 		      cpp->addr.cname.target.cache = newc;
@@ -845,12 +845,12 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
 	    }
 	}
     }
-  
+
   /* Don't put stuff from a truncated packet into the cache.
-     Don't cache replies from non-recursive nameservers, since we may get a 
-     reply containing a CNAME but not its target, even though the target 
+     Don't cache replies from non-recursive nameservers, since we may get a
+     reply containing a CNAME but not its target, even though the target
      does exist. */
-  if (!(header->hb3 & HB3_TC) && 
+  if (!(header->hb3 & HB3_TC) &&
       !(header->hb4 & HB4_CD) &&
       (header->hb4 & HB4_RA) &&
       !no_cache_dnssec)
@@ -871,11 +871,11 @@ unsigned int extract_request(struct dns_header *header, size_t qlen, char *name,
 
   if (ntohs(header->qdcount) != 1 || OPCODE(header) != QUERY)
     return 0; /* must be exactly one query. */
-  
+
   if (!extract_name(header, qlen, &p, name, 1, 4))
     return 0; /* bad packet */
-   
-  GETSHORT(qtype, p); 
+
+  GETSHORT(qtype, p);
   GETSHORT(qclass, p);
 
   if (typep)
@@ -890,7 +890,7 @@ unsigned int extract_request(struct dns_header *header, size_t qlen, char *name,
       if (qtype == T_ANY)
 	return  F_IPV4 | F_IPV6;
     }
-  
+
   return F_QUERY;
 }
 
@@ -902,7 +902,7 @@ size_t setup_reply(struct dns_header *header, size_t qlen,
 
   if (!(p = skip_questions(header, qlen)))
     return 0;
-  
+
   /* clear authoritative and truncated flags, set QR flag */
   header->hb3 = (header->hb3 & ~(HB3_AA | HB3_TC)) | HB3_QR;
   /* set RA flag */
@@ -933,7 +933,7 @@ size_t setup_reply(struct dns_header *header, size_t qlen,
 #endif
   else /* nowhere to forward to */
     SET_RCODE(header, REFUSED);
- 
+
   return p - (unsigned char *)header;
 }
 
@@ -953,7 +953,7 @@ int check_for_local_domain(char *name, time_t now)
   if ((crecp = cache_find_by_name(NULL, name, now, F_IPV4 | F_IPV6 | F_CNAME |F_NO_RR)) &&
       (crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)))
     return 1;
-  
+
   for (naptr = daemon->naptr; naptr; naptr = naptr->next)
      if (hostname_isequal(name, naptr->name))
       return 1;
@@ -973,14 +973,14 @@ int check_for_local_domain(char *name, time_t now)
   for (ptr = daemon->ptr; ptr; ptr = ptr->next)
     if (hostname_isequal(name, ptr->name))
       return 1;
- 
+
   return 0;
 }
 
 /* Is the packet a reply with the answer address equal to addr?
    If so mung is into an NXDOMAIN reply and also put that information
    in the cache. */
-int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name, 
+int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name,
 			     struct bogus_addr *baddr, time_t now)
 {
   unsigned char *p;
@@ -996,17 +996,17 @@ int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name,
     {
       if (!extract_name(header, qlen, &p, name, 1, 10))
 	return 0; /* bad packet */
-  
-      GETSHORT(qtype, p); 
+
+      GETSHORT(qtype, p);
       GETSHORT(qclass, p);
       GETLONG(ttl, p);
       GETSHORT(rdlen, p);
-      
+
       if (qclass == C_IN && qtype == T_A)
 	{
 	  if (!CHECK_LEN(header, p, qlen, INADDRSZ))
 	    return 0;
-	  
+
 	  for (baddrp = baddr; baddrp; baddrp = baddrp->next)
 	    if (memcmp(&baddrp->addr, p, INADDRSZ) == 0)
 	      {
@@ -1015,15 +1015,15 @@ int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name,
 		cache_start_insert();
 		cache_insert(name, NULL, now, ttl, F_IPV4 | F_FORWARD | F_NEG | F_NXDOMAIN);
 		cache_end_insert();
-		
+
 		return 1;
 	      }
 	}
-      
+
       if (!ADD_RDLEN(header, p, qlen, rdlen))
 	return 0;
     }
-  
+
   return 0;
 }
 
@@ -1041,31 +1041,31 @@ int check_for_ignored_address(struct dns_header *header, size_t qlen, struct bog
     {
       if (!(p = skip_name(p, header, qlen, 10)))
 	return 0; /* bad packet */
-      
-      GETSHORT(qtype, p); 
+
+      GETSHORT(qtype, p);
       GETSHORT(qclass, p);
       p += 4; /* TTL */
       GETSHORT(rdlen, p);
-      
+
       if (qclass == C_IN && qtype == T_A)
 	{
 	  if (!CHECK_LEN(header, p, qlen, INADDRSZ))
 	    return 0;
-	  
+
 	  for (baddrp = baddr; baddrp; baddrp = baddrp->next)
 	    if (memcmp(&baddrp->addr, p, INADDRSZ) == 0)
 	      return 1;
 	}
-      
+
       if (!ADD_RDLEN(header, p, qlen, rdlen))
 	return 0;
     }
-  
+
   return 0;
 }
 
 
-int add_resource_record(struct dns_header *header, char *limit, int *truncp, int nameoffset, unsigned char **pp, 
+int add_resource_record(struct dns_header *header, char *limit, int *truncp, int nameoffset, unsigned char **pp,
 			unsigned long ttl, int *offset, unsigned short type, unsigned short class, char *format, ...)
 {
   va_list ap;
@@ -1099,7 +1099,7 @@ int add_resource_record(struct dns_header *header, char *limit, int *truncp, int
 	  va_end(ap);
 	  goto truncated;
 	}
-      
+
       if (nameoffset < 0)
 	{
 	  CHECK_LIMIT(2);
@@ -1114,7 +1114,7 @@ int add_resource_record(struct dns_header *header, char *limit, int *truncp, int
 
   /* type (2) + class (2) + ttl (4) + rdlen (2) */
   CHECK_LIMIT(10);
-  
+
   PUTSHORT(type, p);
   PUTSHORT(class, p);
   PUTLONG(ttl, p);      /* TTL */
@@ -1128,37 +1128,37 @@ int add_resource_record(struct dns_header *header, char *limit, int *truncp, int
 #ifdef HAVE_IPV6
       case '6':
         CHECK_LIMIT(IN6ADDRSZ);
-	sval = va_arg(ap, char *); 
+	sval = va_arg(ap, char *);
 	memcpy(p, sval, IN6ADDRSZ);
 	p += IN6ADDRSZ;
 	break;
 #endif
-	
+
       case '4':
         CHECK_LIMIT(INADDRSZ);
-	sval = va_arg(ap, char *); 
+	sval = va_arg(ap, char *);
 	memcpy(p, sval, INADDRSZ);
 	p += INADDRSZ;
 	break;
-	
+
       case 'b':
         CHECK_LIMIT(1);
 	usval = va_arg(ap, int);
 	*p++ = usval;
 	break;
-	
+
       case 's':
         CHECK_LIMIT(2);
 	usval = va_arg(ap, int);
 	PUTSHORT(usval, p);
 	break;
-	
+
       case 'l':
         CHECK_LIMIT(4);
 	lval = va_arg(ap, long);
 	PUTLONG(lval, p);
 	break;
-	
+
       case 'd':
         /* get domain-name answer arg and store it in RDATA field */
         if (offset)
@@ -1172,7 +1172,7 @@ int add_resource_record(struct dns_header *header, char *limit, int *truncp, int
         CHECK_LIMIT(1);
         *p++ = 0;
 	break;
-	
+
       case 't':
 	usval = va_arg(ap, int);
         CHECK_LIMIT(usval);
@@ -1196,11 +1196,11 @@ int add_resource_record(struct dns_header *header, char *limit, int *truncp, int
 
 #undef CHECK_LIMIT
   va_end(ap);	/* clean up variable argument pointer */
-  
+
   j = p - sav - 2;
  /* this has already been checked against limit before */
  PUTSHORT(j, sav);     /* Now, store real RDLength */
-  
+
   /* check for overflow of buffer */
   if (limit && ((unsigned char *)limit - p) < 0)
     {
@@ -1209,7 +1209,7 @@ truncated:
 	*truncp = 1;
       return 0;
     }
-  
+
   *pp = p;
   return 1;
 }
@@ -1222,14 +1222,14 @@ static unsigned long crec_ttl(struct crec *crecp, time_t now)
   if (crecp->flags & F_DHCP)
     {
       int conf_ttl = daemon->use_dhcp_ttl ? daemon->dhcp_ttl : daemon->local_ttl;
-      
+
       /* Apply ceiling of actual lease length to configured TTL. */
       if (!(crecp->flags & F_IMMORTAL) && (crecp->ttd - now) < conf_ttl)
 	return crecp->ttd - now;
-      
+
       return conf_ttl;
-    }	  
-  
+    }
+
   /* Immortal entries other than DHCP are local, and hold TTL in TTD field. */
   if (crecp->flags & F_IMMORTAL)
     return crecp->ttd;
@@ -1240,12 +1240,12 @@ static unsigned long crec_ttl(struct crec *crecp, time_t now)
   else
     return daemon->max_ttl;
 }
-  
+
 
 /* return zero if we can't answer from cache, or packet size if we can */
-size_t answer_request(struct dns_header *header, char *limit, size_t qlen,  
-		      struct in_addr local_addr, struct in_addr local_netmask, 
-		      time_t now, int ad_reqd, int do_bit, int have_pseudoheader) 
+size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+		      struct in_addr local_addr, struct in_addr local_netmask,
+		      time_t now, int ad_reqd, int do_bit, int have_pseudoheader)
 {
   char *name = daemon->namebuff;
   unsigned char *p, *ansp;
@@ -1262,14 +1262,14 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 
   if (ntohs(header->ancount) != 0 ||
       ntohs(header->nscount) != 0 ||
-      ntohs(header->qdcount) == 0 || 
+      ntohs(header->qdcount) == 0 ||
       OPCODE(header) != QUERY )
     return 0;
-  
+
   /* Don't return AD set if checking disabled. */
   if (header->hb4 & HB4_CD)
     sec_data = 0;
-  
+
   /* If there is an  additional data section then it will be overwritten by
      partial replies, so we have to do a dry run to see if we can answer
      the query. */
@@ -1278,12 +1278,12 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 
   for (rec = daemon->mxnames; rec; rec = rec->next)
     rec->offset = 0;
-  
+
  rerun:
   /* determine end of question section (we put answers there) */
   if (!(ansp = skip_questions(header, qlen)))
     return 0; /* bad packet */
-   
+
   /* now process each question, answers go in RRs after the question */
   p = (unsigned char *)(header+1);
 
@@ -1295,12 +1295,12 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
       /* now extract name as .-concatenated string into name */
       if (!extract_name(header, qlen, &p, name, 1, 4))
 	return 0; /* bad packet */
-            
-      GETSHORT(qtype, p); 
+
+      GETSHORT(qtype, p);
       GETSHORT(qclass, p);
 
       ans = 0; /* have we answered this question */
-      
+
       if (qtype == T_TXT || qtype == T_ANY)
 	{
 	  struct txt_record *t;
@@ -1323,7 +1323,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 			    ok = 0;
 			}
 #endif
-		      if (ok && add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+		      if (ok && add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 						    ttl, NULL,
 						    T_TXT, t->class, "t", t->len, t->txt))
 			anscount++;
@@ -1345,13 +1345,13 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		if (!dryrun)
 		  {
 		    log_query(F_CONFIG | F_RRNAME, name, NULL, "<RR>");
-		    if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+		    if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 					    daemon->local_ttl, NULL,
 					    t->class, C_IN, "t", t->len, t->txt))
 		      anscount ++;
 		  }
 	      }
-		
+
 	  if (qtype == T_PTR || qtype == T_ANY)
 	    {
 	      /* see if it's w.z.y.z.in-addr.arpa format */
@@ -1367,11 +1367,11 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		for (intr = daemon->int_names; intr; intr = intr->next)
 		  {
 		    struct addrlist *addrlist;
-		    
+
 		    for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
 		      if (!(addrlist->flags & ADDRLIST_IPV6) && addr.addr.addr4.s_addr == addrlist->addr.addr.addr4.s_addr)
 			break;
-		    
+
 		    if (addrlist)
 		      break;
 		    else
@@ -1383,11 +1383,11 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		for (intr = daemon->int_names; intr; intr = intr->next)
 		  {
 		    struct addrlist *addrlist;
-		    
+
 		    for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
 		      if ((addrlist->flags & ADDRLIST_IPV6) && IN6_ARE_ADDR_EQUAL(&addr.addr.addr6, &addrlist->addr.addr.addr6))
 			break;
-		    
+
 		    if (addrlist)
 		      break;
 		    else
@@ -1395,7 +1395,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 			intr = intr->next;
 		  }
 #endif
-	      
+
 	      if (intr)
 		{
 		  sec_data = 0;
@@ -1403,7 +1403,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		  if (!dryrun)
 		    {
 		      log_query(is_arpa | F_REVERSE | F_CONFIG, intr->name, &addr, NULL);
-		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 					      daemon->local_ttl, NULL,
 					      T_PTR, C_IN, "d", intr->name))
 			anscount++;
@@ -1418,11 +1418,11 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		      log_query(F_CONFIG | F_RRNAME, name, NULL, "<PTR>");
 		      for (ptr = daemon->ptr; ptr; ptr = ptr->next)
 			if (hostname_isequal(name, ptr->name) &&
-			    add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+			    add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 						daemon->local_ttl, NULL,
 						T_PTR, C_IN, "d", ptr->ptr))
 			  anscount++;
-			 
+
 		    }
 		}
 	      else if ((crecp = cache_find_by_addr(NULL, &addr, now, is_arpa)))
@@ -1430,21 +1430,21 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		  /* Don't use cache when DNSSEC data required, unless we know that
 		     the zone is unsigned, which implies that we're doing
 		     validation. */
-		  if ((crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) || 
-		      !do_bit || 
+		  if ((crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) ||
+		      !do_bit ||
 		      (option_bool(OPT_DNSSEC_VALID) && !(crecp->flags & F_DNSSECOK)))
 		    {
-		      do 
-			{ 
+		      do
+			{
 			  /* don't answer wildcard queries with data not from /etc/hosts or dhcp leases */
 			  if (qtype == T_ANY && !(crecp->flags & (F_HOSTS | F_DHCP)))
 			    continue;
-			  
+
 			  if (!(crecp->flags & F_DNSSECOK))
 			    sec_data = 0;
-			   
+
 			  ans = 1;
-			   
+
 			  if (crecp->flags & F_NEG)
 			    {
 			      auth = 0;
@@ -1459,10 +1459,10 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 				auth = 0;
 			      if (!dryrun)
 				{
-				  log_query(crecp->flags & ~F_FORWARD, cache_get_name(crecp), &addr, 
+				  log_query(crecp->flags & ~F_FORWARD, cache_get_name(crecp), &addr,
 					    record_source(crecp->uid));
-				  
-				  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+
+				  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 							  crec_ttl(crecp, now), NULL,
 							  T_PTR, C_IN, "d", cache_get_name(crecp)))
 				    anscount++;
@@ -1477,9 +1477,9 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		  sec_data = 0;
 		  if (!dryrun)
 		    {
-		      log_query(F_CONFIG | F_REVERSE | is_arpa, name, &addr, NULL); 
-		      
-		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+		      log_query(F_CONFIG | F_REVERSE | is_arpa, name, &addr, NULL);
+
+		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 					      daemon->local_ttl, NULL,
 					      T_PTR, C_IN, "d", name))
 			      anscount++;
@@ -1526,7 +1526,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		    }
 		}
 	    }
-	  
+
 	  for (flag = F_IPV4; flag; flag = (flag == F_IPV4) ? F_IPV6 : 0)
 	    {
 	      unsigned short type = T_A;
@@ -1538,11 +1538,11 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 #else
 	        break;
 #endif
-	      
+
 	      if (qtype != type && qtype != T_ANY)
 		continue;
-	      
-	      /* Check for "A for A"  queries; be rather conservative 
+
+	      /* Check for "A for A"  queries; be rather conservative
 		 about what looks like dotted-quad.  */
 	      if (qtype == T_A)
 		{
@@ -1552,18 +1552,18 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 
 		  for (cp = name, i = 0, a = 0; *cp; i++)
 		    {
-		      if (!isdigit((unsigned char)*cp) || (x = strtol(cp, &cp, 10)) > 255) 
+		      if (!isdigit((unsigned char)*cp) || (x = strtol(cp, &cp, 10)) > 255)
 			{
 			  i = 5;
 			  break;
 			}
-		      
+
 		      a = (a << 8) + x;
-		      
-		      if (*cp == '.') 
+
+		      if (*cp == '.')
 			cp++;
 		    }
-		  
+
 		  if (i == 4)
 		    {
 		      ans = 1;
@@ -1572,7 +1572,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 			{
 			  addr.addr.addr4.s_addr = htonl(a);
 			  log_query(F_FORWARD | F_CONFIG | F_IPV4, name, &addr, NULL);
-			  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+			  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 						  daemon->local_ttl, NULL, type, C_IN, "4", &addr))
 			    anscount++;
 			}
@@ -1585,14 +1585,14 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 	      for (intr = daemon->int_names; intr; intr = intr->next)
 		if (hostname_isequal(name, intr->name))
 		  break;
-	      
+
 	      if (intr)
 		{
 		  struct addrlist *addrlist;
 		  int gotit = 0, localise = 0;
 
 		  enumerate_interfaces(0);
-		    
+
 		  /* See if a putative address is on the network from which we received
 		     the query, is so we'll filter other answers. */
 		  if (local_addr.s_addr != 0 && option_bool(OPT_LOCALISE) && type == T_A)
@@ -1607,7 +1607,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 				localise = 1;
 				break;
 			      }
-		  
+
 		  for (intr = daemon->int_names; intr; intr = intr->next)
 		    if (hostname_isequal(name, intr->name))
 		      {
@@ -1616,31 +1616,31 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 			  if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == type)
 #endif
 			    {
-			      if (localise && 
+			      if (localise &&
 				  !is_same_net(*((struct in_addr *)&addrlist->addr), local_addr, local_netmask))
 				continue;
 
 #ifdef HAVE_IPV6
 			      if (addrlist->flags & ADDRLIST_REVONLY)
 				continue;
-#endif	
-			      ans = 1;	
+#endif
+			      ans = 1;
 			      sec_data = 0;
 			      if (!dryrun)
 				{
 				  gotit = 1;
 				  log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
-				  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
-							  daemon->local_ttl, NULL, type, C_IN, 
+				  if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
+							  daemon->local_ttl, NULL, type, C_IN,
 							  type == T_A ? "4" : "6", &addrlist->addr))
 				    anscount++;
 				}
 			    }
 		      }
-		  
+
 		  if (!dryrun && !gotit)
 		    log_query(F_FORWARD | F_CONFIG | flag | F_NEG, name, NULL, NULL);
-		     
+
 		  continue;
 		}
 
@@ -1648,7 +1648,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 	      if ((crecp = cache_find_by_name(NULL, name, now, flag | F_CNAME | (dryrun ? F_NO_RR : 0))))
 		{
 		  int localise = 0;
-		  
+
 		  /* See if a putative address is on the network from which we received
 		     the query, is so we'll filter other answers. */
 		  if (local_addr.s_addr != 0 && option_bool(OPT_LOCALISE) && flag == F_IPV4)
@@ -1660,7 +1660,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 			  {
 			    localise = 1;
 			    break;
-			  } 
+			  }
 			} while ((crecp = cache_find_by_name(crecp, name, now, flag | F_CNAME)));
 		      crecp = save;
 		    }
@@ -1668,28 +1668,28 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		  /* If the client asked for DNSSEC  don't use cached data. */
 		  if ((crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) || !do_bit || !(crecp->flags & F_DNSSECOK))
 		    do
-		      { 
+		      {
 			/* don't answer wildcard queries with data not from /etc/hosts
 			   or DHCP leases */
 			if (qtype == T_ANY && !(crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)))
 			  break;
-			
+
 			if (!(crecp->flags & F_DNSSECOK))
 			  sec_data = 0;
-			
+
 			if (crecp->flags & F_CNAME)
 			  {
 			    char *cname_target = cache_get_cname_target(crecp);
-			    
+
 			    if (!dryrun)
 			      {
 				log_query(crecp->flags, name, NULL, record_source(crecp->uid));
-				if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+				if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 							crec_ttl(crecp, now), &nameoffset,
 							T_CNAME, C_IN, "d", cname_target))
 				  anscount++;
 			      }
-			    
+
 			    strcpy(name, cname_target);
 			    /* check if target interface_name */
 			    if (crecp->addr.cname.uid == SRC_INTERFACE)
@@ -1697,7 +1697,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 			    else
 			      goto cname_restart;
 			  }
-			
+
 			if (crecp->flags & F_NEG)
 			  {
 			    ans = 1;
@@ -1707,26 +1707,26 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 			    if (!dryrun)
 			      log_query(crecp->flags, name, NULL, NULL);
 			  }
-			else 
+			else
 			  {
 			    /* If we are returning local answers depending on network,
 			       filter here. */
-			    if (localise && 
+			    if (localise &&
 				(crecp->flags & F_HOSTS) &&
 				!is_same_net(*((struct in_addr *)&crecp->addr), local_addr, local_netmask))
 			      continue;
-			    
+
 			    if (!(crecp->flags & (F_HOSTS | F_DHCP)))
 			      auth = 0;
-			    
+
 			    ans = 1;
 			    if (!dryrun)
 			      {
 				log_query(crecp->flags & ~F_REVERSE, name, &crecp->addr.addr,
 					  record_source(crecp->uid));
-				
-				if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
-							crec_ttl(crecp, now), NULL, type, C_IN, 
+
+				if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
+							crec_ttl(crecp, now), NULL, type, C_IN,
 							type == T_A ? "4" : "6", &crecp->addr))
 				  anscount++;
 			      }
@@ -1739,7 +1739,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		  if (!dryrun)
 		    {
 		      log_query(F_FORWARD | F_CONFIG | flag, name, &addr, NULL);
-		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 					      daemon->local_ttl, NULL, type, C_IN, type == T_A ? "4" : "6", &addr))
 			anscount++;
 		    }
@@ -1753,12 +1753,12 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		{
 		  if (!(crecp->flags & F_DNSSECOK))
 		    sec_data = 0;
-		  
+
 		  ans = 1;
 		  if (!dryrun)
 		    {
 		      log_query(crecp->flags, name, NULL, record_source(crecp->uid));
-		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
 					      crec_ttl(crecp, now), &nameoffset,
 					      T_CNAME, C_IN, "d", cache_get_cname_target(crecp)))
 			anscount++;
@@ -1786,22 +1786,22 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 			}
 		    }
 		  }
-	      
-	      if (!found && (option_bool(OPT_SELFMX) || option_bool(OPT_LOCALMX)) && 
+
+	      if (!found && (option_bool(OPT_SELFMX) || option_bool(OPT_LOCALMX)) &&
 		  cache_find_by_name(NULL, name, now, F_HOSTS | F_DHCP | F_NO_RR))
-		{ 
+		{
 		  ans = 1;
 		  if (!dryrun)
 		    {
 		      log_query(F_CONFIG | F_RRNAME, name, NULL, "<MX>");
-		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl, NULL, 
-					      T_MX, C_IN, "sd", 1, 
+		      if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl, NULL,
+					      T_MX, C_IN, "sd", 1,
 					      option_bool(OPT_SELFMX) ? name : daemon->mxtarget))
 			anscount++;
 		    }
 		}
 	    }
-	  	  
+
 	  if (qtype == T_SRV || qtype == T_ANY)
 	    {
 	      int found = 0;
@@ -1815,8 +1815,8 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		      {
 			int offset;
 			log_query(F_CONFIG | F_RRNAME, name, NULL, "<SRV>");
-			if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl, 
-						&offset, T_SRV, C_IN, "sssd", 
+			if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl,
+						&offset, T_SRV, C_IN, "sssd",
 						rec->priority, rec->weight, rec->srvport, rec->target))
 			  {
 			    anscount++;
@@ -1824,7 +1824,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 			      rec->offset = offset;
 			  }
 		      }
-		    
+
 		    /* unlink first SRV record found */
 		    if (!move)
 		      {
@@ -1832,7 +1832,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 			*up = rec->next;
 		      }
 		    else
-		      up = &rec->next;      
+		      up = &rec->next;
 		  }
 		else
 		  up = &rec->next;
@@ -1843,7 +1843,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		  *up = move;
 		  move->next = NULL;
 		}
-	      
+
 	      if (!found && option_bool(OPT_FILTER) && (qtype == T_SRV || (qtype == T_ANY && strchr(name, '_'))))
 		{
 		  ans = 1;
@@ -1862,20 +1862,20 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 		    if (!dryrun)
 		      {
 			log_query(F_CONFIG | F_RRNAME, name, NULL, "<NAPTR>");
-			if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl, 
-						NULL, T_NAPTR, C_IN, "sszzzd", 
+			if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->local_ttl,
+						NULL, T_NAPTR, C_IN, "sszzzd",
 						na->order, na->pref, na->flags, na->services, na->regexp, na->replace))
 			  anscount++;
 		      }
 		  }
 	    }
-	  
+
 	  if (qtype == T_MAILB)
 	    ans = 1, nxdomain = 1;
 
 	  if (qtype == T_SOA && option_bool(OPT_FILTER))
 	    {
-	      ans = 1; 
+	      ans = 1;
 	      if (!dryrun)
 		log_query(F_CONFIG | F_NEG, name, &addr, NULL);
 	    }
@@ -1884,13 +1884,13 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
       if (!ans)
 	return 0; /* failed to answer a question */
     }
-  
+
   if (dryrun)
     {
       dryrun = 0;
       goto rerun;
     }
-  
+
   /* create an additional data section, for stuff in SRV and MX record replies. */
   for (rec = daemon->mxnames; rec; rec = rec->next)
     if (rec->offset != 0)
@@ -1900,7 +1900,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 	for (tmp = rec->next; tmp; tmp = tmp->next)
 	  if (tmp->offset != 0 && hostname_isequal(rec->target, tmp->target))
 	    tmp->offset = 0;
-	
+
 	crecp = NULL;
 	while ((crecp = cache_find_by_name(crecp, rec->target, now, F_IPV4 | F_IPV6)))
 	  {
@@ -1912,27 +1912,27 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
 	    if (crecp->flags & F_NEG)
 	      continue;
 
-	    if (add_resource_record(header, limit, NULL, rec->offset, &ansp, 
-				    crec_ttl(crecp, now), NULL, type, C_IN, 
+	    if (add_resource_record(header, limit, NULL, rec->offset, &ansp,
+				    crec_ttl(crecp, now), NULL, type, C_IN,
 				    crecp->flags & F_IPV4 ? "4" : "6", &crecp->addr))
 	      addncount++;
 	  }
       }
-  
+
   /* done all questions, set up header and return length of result */
   /* clear authoritative and truncated flags, set QR flag */
   header->hb3 = (header->hb3 & ~(HB3_AA | HB3_TC)) | HB3_QR;
   /* set RA flag */
   header->hb4 |= HB4_RA;
-   
+
   /* authoritative - only hosts and DHCP derived names. */
   if (auth)
     header->hb3 |= HB3_AA;
-  
+
   /* truncation */
   if (trunc)
     header->hb3 |= HB3_TC;
-  
+
   if (nxdomain)
     SET_RCODE(header, NXDOMAIN);
   else
@@ -1942,15 +1942,15 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
   header->arcount = htons(addncount);
 
   len = ansp - (unsigned char *)header;
-  
+
   /* Advertise our packet size limit in our reply */
   if (have_pseudoheader)
     len = add_pseudoheader(header, len, (unsigned char *)limit, daemon->edns_pktsz, 0, NULL, 0, do_bit, 0);
-  
+
   if (ad_reqd && sec_data)
     header->hb4 |= HB4_AD;
   else
     header->hb4 &= ~HB4_AD;
-  
+
   return len;
 }
diff --git a/src/rfc2131.c b/src/rfc2131.c
index f3a7e53..5dd52c0 100644
--- a/src/rfc2131.c
+++ b/src/rfc2131.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -29,11 +29,11 @@ static int sanitise(unsigned char *opt, char *buf);
 static struct in_addr server_id(struct dhcp_context *context, struct in_addr override, struct in_addr fallback);
 static unsigned int calc_time(struct dhcp_context *context, struct dhcp_config *config, unsigned char *opt);
 static void option_put(struct dhcp_packet *mess, unsigned char *end, int opt, int len, unsigned int val);
-static void option_put_string(struct dhcp_packet *mess, unsigned char *end, 
+static void option_put_string(struct dhcp_packet *mess, unsigned char *end,
 			      int opt, char *string, int null_term);
 static struct in_addr option_addr(unsigned char *opt);
 static unsigned int option_uint(unsigned char *opt, int offset, int size);
-static void log_packet(char *type, void *addr, unsigned char *ext_mac, 
+static void log_packet(char *type, void *addr, unsigned char *ext_mac,
 		       int mac_len, char *interface, char *string, char *err, u32 xid);
 static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt_type, int minsize);
 static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt, int minsize);
@@ -44,10 +44,10 @@ static void do_options(struct dhcp_context *context,
 		       struct dhcp_packet *mess,
 		       unsigned char *end,
 		       unsigned char *req_options,
-		       char *hostname, 
+		       char *hostname,
 		       char *domain,
 		       struct dhcp_netid *netid,
-		       struct in_addr subnet_addr, 
+		       struct in_addr subnet_addr,
 		       unsigned char fqdn_flags,
 		       int null_term, int pxe_arch,
 		       unsigned char *uuid,
@@ -57,7 +57,7 @@ static void do_options(struct dhcp_context *context,
 		       unsigned short fuzz);
 
 
-static void match_vendor_opts(unsigned char *opt, struct dhcp_opt *dopt); 
+static void match_vendor_opts(unsigned char *opt, struct dhcp_opt *dopt);
 static int do_encap_opts(struct dhcp_opt *opt, int encap, int flag, struct dhcp_packet *mess, unsigned char *end, int null_term);
 static void pxe_misc(struct dhcp_packet *mess, unsigned char *end, unsigned char *uuid);
 static int prune_vendor_opts(struct dhcp_netid *netid);
@@ -77,8 +77,8 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
   struct dhcp_netid_list *id_list;
   int clid_len = 0, ignore = 0, do_classes = 0, selecting = 0, pxearch = -1;
   struct dhcp_packet *mess = (struct dhcp_packet *)daemon->dhcp_packet.iov_base;
-  unsigned char *end = (unsigned char *)(mess + 1); 
-  unsigned char *real_end = (unsigned char *)(mess + 1); 
+  unsigned char *end = (unsigned char *)(mess + 1);
+  unsigned char *real_end = (unsigned char *)(mess + 1);
   char *hostname = NULL, *offer_hostname = NULL, *client_hostname = NULL, *domain = NULL;
   int hostname_auth = 0, borken_opt = 0;
   unsigned char *req_options = NULL;
@@ -106,11 +106,11 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
   /* set tag with name == interface */
   iface_id.net = iface_name;
   iface_id.next = NULL;
-  netid = &iface_id; 
-  
+  netid = &iface_id;
+
   if (mess->op != BOOTREQUEST || mess->hlen > DHCP_CHADDR_MAX)
     return 0;
-   
+
   if (mess->htype == 0 && mess->hlen != 0)
     return 0;
 
@@ -118,25 +118,25 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
   if ((opt = option_find(mess, sz, OPTION_MESSAGE_TYPE, 1)))
     {
       u32 cookie = htonl(DHCP_COOKIE);
-      
+
       /* only insist on a cookie for DHCP. */
       if (memcmp(mess->options, &cookie, sizeof(u32)) != 0)
 	return 0;
-      
+
       mess_type = option_uint(opt, 0, 1);
-      
+
       /* two things to note here: expand_buf may move the packet,
 	 so reassign mess from daemon->packet. Also, the size
 	 sent includes the IP and UDP headers, hence the magic "-28" */
       if ((opt = option_find(mess, sz, OPTION_MAXMESSAGE, 2)))
 	{
 	  size_t size = (size_t)option_uint(opt, 0, 2) - 28;
-	  
+
 	  if (size > DHCP_PACKET_MAX)
 	    size = DHCP_PACKET_MAX;
 	  else if (size < sizeof(struct dhcp_packet))
 	    size = sizeof(struct dhcp_packet);
-	  
+
 	  if (expand_buf(&daemon->dhcp_packet, size))
 	    {
 	      mess = (struct dhcp_packet *)daemon->dhcp_packet.iov_base;
@@ -153,7 +153,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       if ((opt = option_find(mess, sz, OPTION_VENDOR_IDENT_OPT, 5)))
 	{
 	  unsigned  int elen, offset, len = option_len(opt);
-	  
+
 	  for (offset = 0; offset < (len - 5); offset += elen + 5)
 	    {
 	      elen = option_uint(opt, offset + 4 , 1);
@@ -164,9 +164,9 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		  oui = option_find1(x, y, 1, 1);
 		  serial = option_find1(x, y, 2, 1);
 #ifdef HAVE_SCRIPT
-		  class = option_find1(x, y, 3, 1);		  
+		  class = option_find1(x, y, 3, 1);
 #endif
-		  /* If TR069-id is present set the tag "cpewan-id" to facilitate echoing 
+		  /* If TR069-id is present set the tag "cpewan-id" to facilitate echoing
 		     the gateway id back. Note that the device class is optional */
 		  if (oui && serial)
 		    {
@@ -178,13 +178,13 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		}
 	    }
 	}
-      
+
       if ((opt = option_find(mess, sz, OPTION_AGENT_ID, 1)))
 	{
 	  /* Any agent-id needs to be copied back out, verbatim, as the last option
 	     in the packet. Here, we shift it to the very end of the buffer, if it doesn't
 	     get overwritten, then it will be shuffled back at the end of processing.
-	     Note that the incoming options must not be overwritten here, so there has to 
+	     Note that the incoming options must not be overwritten here, so there has to
 	     be enough free space at the end of the packet to copy the option. */
 	  unsigned char *sopt;
 	  unsigned int total = option_len(opt) + 2;
@@ -204,19 +204,19 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	  /* look for RFC5107 server-identifier-override */
 	  if ((sopt = option_find1(option_ptr(opt, 0), option_ptr(opt, option_len(opt)), SUBOPT_SERVER_OR, INADDRSZ)))
 	    override = option_addr(sopt);
-	  
-	  /* if a circuit-id or remote-is option is provided, exact-match to options. */ 
+
+	  /* if a circuit-id or remote-is option is provided, exact-match to options. */
 	  for (vendor = daemon->dhcp_vendors; vendor; vendor = vendor->next)
 	    {
 	      int search;
-	      
+
 	      if (vendor->match_type == MATCH_CIRCUIT)
 		search = SUBOPT_CIRCUIT_ID;
 	      else if (vendor->match_type == MATCH_REMOTE)
 		search = SUBOPT_REMOTE_ID;
 	      else if (vendor->match_type == MATCH_SUBSCRIBER)
 		search = SUBOPT_SUBSCR_ID;
-	      else 
+	      else
 		continue;
 
 	      if ((sopt = option_find1(option_ptr(opt, 0), option_ptr(opt, option_len(opt)), search, 1)) &&
@@ -225,14 +225,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		{
 		  vendor->netid.next = netid;
 		  netid = &vendor->netid;
-		} 
+		}
 	    }
 	}
 
       /* Check for RFC3011 subnet selector - only if RFC3527 one not present */
       if (subnet_addr.s_addr == 0 && (opt = option_find(mess, sz, OPTION_SUBNET_SELECT, INADDRSZ)))
 	subnet_addr = option_addr(opt);
-      
+
       /* If there is no client identifier option, use the hardware address */
       if ((opt = option_find(mess, sz, OPTION_CLIENT_ID, 1)))
 	{
@@ -243,7 +243,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       /* do we have a lease in store? */
       lease = lease_find_by_client(mess->chaddr, mess->hlen, mess->htype, clid, clid_len);
 
-      /* If this request is missing a clid, but we've seen one before, 
+      /* If this request is missing a clid, but we've seen one before,
 	 use it again for option matching etc. */
       if (lease && !clid && lease->clid)
 	{
@@ -254,7 +254,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       /* find mac to use for logging and hashing */
       emac = extended_hwaddr(mess->htype, mess->hlen, mess->chaddr, clid_len, clid, &emac_len);
     }
-  
+
   for (mac = daemon->dhcp_macs; mac; mac = mac->next)
     if (mac->hwaddr_len == mess->hlen &&
 	(mac->hwaddr_type == mess->htype || mac->hwaddr_type == 0) &&
@@ -263,20 +263,20 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	mac->netid.next = netid;
 	netid = &mac->netid;
       }
-  
-  /* Determine network for this packet. Our caller will have already linked all the 
-     contexts which match the addresses of the receiving interface but if the 
-     machine has an address already, or came via a relay, or we have a subnet selector, 
-     we search again. If we don't have have a giaddr or explicit subnet selector, 
-     use the ciaddr. This is necessary because a  machine which got a lease via a 
-     relay won't use the relay to renew. If matching a ciaddr fails but we have a context 
+
+  /* Determine network for this packet. Our caller will have already linked all the
+     contexts which match the addresses of the receiving interface but if the
+     machine has an address already, or came via a relay, or we have a subnet selector,
+     we search again. If we don't have have a giaddr or explicit subnet selector,
+     use the ciaddr. This is necessary because a  machine which got a lease via a
+     relay won't use the relay to renew. If matching a ciaddr fails but we have a context
      from the physical network, continue using that to allow correct DHCPNAK generation later. */
   if (mess->giaddr.s_addr || subnet_addr.s_addr || mess->ciaddr.s_addr)
     {
       struct dhcp_context *context_tmp, *context_new = NULL;
       struct in_addr addr;
       int force = 0;
-      
+
       if (subnet_addr.s_addr)
 	{
 	  addr = subnet_addr;
@@ -292,15 +292,15 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	  /* If ciaddr is in the hardware derived set of contexts, leave that unchanged */
 	  addr = mess->ciaddr;
 	  for (context_tmp = context; context_tmp; context_tmp = context_tmp->current)
-	    if (context_tmp->netmask.s_addr && 
+	    if (context_tmp->netmask.s_addr &&
 		is_same_net(addr, context_tmp->start, context_tmp->netmask) &&
 		is_same_net(addr, context_tmp->end, context_tmp->netmask))
 	      {
 		context_new = context;
 		break;
 	      }
-	} 
-		
+	}
+
       if (!context_new)
 	for (context_tmp = daemon->dhcp; context_tmp; context_tmp = context_tmp->next)
 	  {
@@ -314,12 +314,12 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		else if (IN_CLASSB(ntohl(context_tmp->start.s_addr)) && IN_CLASSB(ntohl(context_tmp->end.s_addr)))
 		  netmask.s_addr = htonl(0xffff0000);
 		else if (IN_CLASSC(ntohl(context_tmp->start.s_addr)) && IN_CLASSC(ntohl(context_tmp->end.s_addr)))
-		  netmask.s_addr = htonl(0xffffff00); 
+		  netmask.s_addr = htonl(0xffffff00);
 	      }
-	    
+
 	    /* This section fills in context mainly when a client which is on a remote (relayed)
 	       network renews a lease without using the relay, after dnsmasq has restarted. */
-	    if (netmask.s_addr != 0  && 
+	    if (netmask.s_addr != 0  &&
 		is_same_net(addr, context_tmp->start, netmask) &&
 		is_same_net(addr, context_tmp->end, netmask))
 	      {
@@ -328,23 +328,23 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		  context_tmp->local = fallback;
 		if (context_tmp->router.s_addr == 0)
 		  context_tmp->router = mess->giaddr;
-	   
+
 		/* fill in missing broadcast addresses for relayed ranges */
 		if (!(context_tmp->flags & CONTEXT_BRDCAST) && context_tmp->broadcast.s_addr == 0 )
 		  context_tmp->broadcast.s_addr = context_tmp->start.s_addr | ~context_tmp->netmask.s_addr;
-		
+
 		context_tmp->current = context_new;
 		context_new = context_tmp;
 	      }
 	  }
-      
+
       if (context_new || force)
-	context = context_new; 
+	context = context_new;
     }
-  
+
   if (!context)
     {
-      my_syslog(MS_DHCP | LOG_WARNING, _("no address range available for DHCP request %s %s"), 
+      my_syslog(MS_DHCP | LOG_WARNING, _("no address range available for DHCP request %s %s"),
 		subnet_addr.s_addr ? _("with subnet selector") : _("via"),
 		subnet_addr.s_addr ? inet_ntoa(subnet_addr) : (mess->giaddr.s_addr ? inet_ntoa(mess->giaddr) : iface_name));
       return 0;
@@ -360,14 +360,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	    my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP subnet: %s/%s"),
 		      ntohl(mess->xid), daemon->namebuff, inet_ntoa(context_tmp->netmask));
 	  else
-	    my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP range: %s -- %s"), 
+	    my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP range: %s -- %s"),
 		      ntohl(mess->xid), daemon->namebuff, inet_ntoa(context_tmp->end));
 	}
     }
-  
+
   /* dhcp-match. If we have hex-and-wildcards, look for a left-anchored match.
-     Otherwise assume the option is an array, and look for a matching element. 
-     If no data given, existence of the option is enough. This code handles 
+     Otherwise assume the option is an array, and look for a matching element.
+     If no data given, existence of the option is enough. This code handles
      rfc3925 V-I classes too. */
   for (o = daemon->dhcp_match; o; o = o->next)
     {
@@ -378,7 +378,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	{
 	  if (!(opt = option_find(mess, sz, OPTION_VENDOR_IDENT, 5)))
 	    continue;
-	  
+
 	  for (offset = 0; offset < (option_len(opt) - 5u); offset += len + 5)
 	    {
 	      len = option_uint(opt, offset + 4 , 1);
@@ -386,23 +386,23 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	      if ((offset + len + 5 <= (unsigned)(option_len(opt))) &&
 		  (option_uint(opt, offset, 4) == (unsigned int)o->u.encap))
 		for (o2 = offset + 5; o2 < offset + len + 5; o2 += elen + 1)
-		  { 
+		  {
 		    elen = option_uint(opt, o2, 1);
 		    if ((o2 + elen + 1 <= option_len(opt)) &&
 			(match = match_bytes(o, option_ptr(opt, o2 + 1), elen)))
 		      break;
 		  }
-	      if (match) 
+	      if (match)
 		break;
-	    }	  
+	    }
 	}
       else
 	{
 	  if (!(opt = option_find(mess, sz, o->opt, 1)))
 	    continue;
-	  
+
 	  match = match_bytes(o, option_ptr(opt, 0), option_len(opt));
-	} 
+	}
 
       if (match)
 	{
@@ -410,13 +410,13 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	  netid = o->netid;
 	}
     }
-	
+
   /* user-class options are, according to RFC3004, supposed to contain
      a set of counted strings. Here we check that this is so (by seeing
      if the counts are consistent with the overall option length) and if
-     so zero the counts so that we don't get spurious matches between 
+     so zero the counts so that we don't get spurious matches between
      the vendor string and the counts. If the lengths don't add up, we
-     assume that the option is a single string and non RFC3004 compliant 
+     assume that the option is a single string and non RFC3004 compliant
      and just do the substring match. dhclient provides these broken options.
      The code, later, which sends user-class data to the lease-change script
      relies on the transformation done here.
@@ -434,15 +434,15 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	    ucp[j] = 0;
 	  }
     }
-    
+
   for (vendor = daemon->dhcp_vendors; vendor; vendor = vendor->next)
     {
       int mopt;
-      
+
       if (vendor->match_type == MATCH_VENDOR)
 	mopt = OPTION_VENDOR_ID;
       else if (vendor->match_type == MATCH_USER)
-	mopt = OPTION_USER_CLASS; 
+	mopt = OPTION_USER_CLASS;
       else
 	continue;
 
@@ -467,7 +467,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       vendor_class_len = option_len(opt);
     }
   match_vendor_opts(opt, daemon->dhcp_opts);
-  
+
   if (option_bool(OPT_LOG_OPTS))
     {
       if (sanitise(opt, daemon->namebuff))
@@ -477,8 +477,8 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
     }
 
   mess->op = BOOTREPLY;
-  
-  config = find_config(daemon->dhcp_conf, context, clid, clid_len, 
+
+  config = find_config(daemon->dhcp_conf, context, clid, clid_len,
 		       mess->chaddr, mess->hlen, mess->htype, NULL);
 
   /* set "known" tag for known hosts */
@@ -488,14 +488,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       known_id.next = netid;
       netid = &known_id;
     }
-  else if (find_config(daemon->dhcp_conf, NULL, clid, clid_len, 
+  else if (find_config(daemon->dhcp_conf, NULL, clid, clid_len,
 		       mess->chaddr, mess->hlen, mess->htype, NULL))
     {
       known_id.net = "known-othernet";
       known_id.next = netid;
       netid = &known_id;
     }
-  
+
   if (mess_type == 0 && !pxe)
     {
       /* BOOTP request */
@@ -505,12 +505,12 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       /* must have a MAC addr for bootp */
       if (mess->htype == 0 || mess->hlen == 0 || (context->flags & CONTEXT_PROXY))
 	return 0;
-      
+
       if (have_config(config, CONFIG_DISABLE))
 	message = _("disabled");
 
       end = mess->options + 64; /* BOOTP vend area is only 64 bytes */
-            
+
       if (have_config(config, CONFIG_NAME))
 	{
 	  hostname = config->hostname;
@@ -543,13 +543,13 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       bootp_id.net = "bootp";
       bootp_id.next = netid;
       netid = &bootp_id;
-      
+
       tagif_netid = run_tag_if(netid);
 
       for (id_list = daemon->dhcp_ignore; id_list; id_list = id_list->next)
 	if (match_netid(id_list->list, tagif_netid, 0))
 	  message = _("ignored");
-      
+
       if (!message)
 	{
 	  int nailed = 0;
@@ -582,7 +582,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	      else
 		mess->yiaddr = lease->addr;
 	    }
-	  
+
 	  if (!message && !(context = narrow_context(context, mess->yiaddr, netid)))
 	    message = _("wrong network");
 	  else if (context->netid.net)
@@ -592,7 +592,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	    }
 
 	  log_tags(tagif_netid, ntohl(mess->xid));
-	    
+
 	  if (!message && !nailed)
 	    {
 	      for (id_list = daemon->bootp_dynamic; id_list; id_list = id_list->next)
@@ -602,47 +602,47 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		message = _("no address configured");
 	    }
 
-	  if (!message && 
-	      !lease && 
+	  if (!message &&
+	      !lease &&
 	      (!(lease = lease4_allocate(mess->yiaddr))))
 	    message = _("no leases left");
-	  
+
 	  if (!message)
 	    {
 	      logaddr = &mess->yiaddr;
-		
+
 	      lease_set_hwaddr(lease, mess->chaddr, NULL, mess->hlen, mess->htype, 0, now, 1);
 	      if (hostname)
-		lease_set_hostname(lease, hostname, 1, get_domain(lease->addr), domain); 
+		lease_set_hostname(lease, hostname, 1, get_domain(lease->addr), domain);
 	      /* infinite lease unless nailed in dhcp-host line. */
-	      lease_set_expires(lease,  
-				have_config(config, CONFIG_TIME) ? config->lease_time : 0xffffffff, 
-				now); 
+	      lease_set_expires(lease,
+				have_config(config, CONFIG_TIME) ? config->lease_time : 0xffffffff,
+				now);
 	      lease_set_interface(lease, int_index, now);
-	      
+
 	      clear_packet(mess, end);
-	      do_options(context, mess, end, NULL, hostname, get_domain(mess->yiaddr), 
+	      do_options(context, mess, end, NULL, hostname, get_domain(mess->yiaddr),
 			 netid, subnet_addr, 0, 0, -1, NULL, vendor_class_len, now, 0xffffffff, 0);
 	    }
 	}
-      
+
       log_packet("BOOTP", logaddr, mess->chaddr, mess->hlen, iface_name, NULL, message, mess->xid);
-      
+
       return message ? 0 : dhcp_packet_size(mess, agent_id, real_end);
     }
-      
+
   if ((opt = option_find(mess, sz, OPTION_CLIENT_FQDN, 3)))
     {
       /* http://tools.ietf.org/wg/dhc/draft-ietf-dhc-fqdn-option/draft-ietf-dhc-fqdn-option-10.txt */
       int len = option_len(opt);
       char *pq = daemon->dhcp_buff;
       unsigned char *pp, *op = option_ptr(opt, 0);
-      
+
       fqdn_flags = *op;
       len -= 3;
       op += 3;
       pp = op;
-      
+
       /* NB, the following always sets at least one bit */
       if (option_bool(OPT_FQDN_UPDATE))
 	{
@@ -653,13 +653,13 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	    }
 	  fqdn_flags |= 0x08; /* set N */
 	}
-      else 
+      else
 	{
 	  if (!(fqdn_flags & 0x01))
 	    fqdn_flags |= 0x03; /* set S and O */
 	  fqdn_flags &= ~0x08; /* clear N */
 	}
-      
+
       if (fqdn_flags & 0x04)
 	while (*op != 0 && ((op + (*op)) - pp) < len)
 	  {
@@ -675,12 +675,12 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	    borken_opt = 1;
 	  pq += len + 1;
 	}
-      
+
       if (pq != daemon->dhcp_buff)
 	pq--;
-      
+
       *pq = 0;
-      
+
       if (legal_hostname(daemon->dhcp_buff))
 	offer_hostname = client_hostname = daemon->dhcp_buff;
     }
@@ -701,7 +701,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 
   if (client_hostname && option_bool(OPT_LOG_OPTS))
     my_syslog(MS_DHCP | LOG_INFO, _("%u client provides name: %s"), ntohl(mess->xid), client_hostname);
-  
+
   if (have_config(config, CONFIG_NAME))
     {
       hostname = config->hostname;
@@ -714,17 +714,17 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
   else if (client_hostname)
     {
       domain = strip_hostname(client_hostname);
-      
+
       if (strlen(client_hostname) != 0)
 	{
 	  hostname = client_hostname;
 	  if (!config)
 	    {
-	      /* Search again now we have a hostname. 
+	      /* Search again now we have a hostname.
 		 Only accept configs without CLID and HWADDR here, (they won't match)
 		 to avoid impersonation by name. */
 	      struct dhcp_config *new = find_config(daemon->dhcp_conf, context, NULL, 0,
-						    mess->chaddr, mess->hlen, 
+						    mess->chaddr, mess->hlen,
 						    mess->htype, hostname);
 	      if (new && !have_config(new, CONFIG_CLID) && !new->hwaddr)
 		{
@@ -737,26 +737,26 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	    }
 	}
     }
-  
+
   if (config)
     {
       struct dhcp_netid_list *list;
-      
+
       for (list = config->netid; list; list = list->next)
 	{
 	  list->list->next = netid;
 	  netid = list->list;
 	}
     }
-  
+
   tagif_netid = run_tag_if(netid);
-  
+
   /* if all the netids in the ignore list are present, ignore this client */
   for (id_list = daemon->dhcp_ignore; id_list; id_list = id_list->next)
     if (match_netid(id_list->list, tagif_netid, 0))
       ignore = 1;
 
-  /* If configured, we can override the server-id to be the address of the relay, 
+  /* If configured, we can override the server-id to be the address of the relay,
      so that all traffic goes via the relay and can pick up agent-id info. This can be
      configured for all relays, or by address. */
   if (daemon->override && mess->giaddr.s_addr != 0 && override.s_addr == 0)
@@ -777,10 +777,10 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
   /* Can have setting to ignore the client ID for a particular MAC address or hostname */
   if (have_config(config, CONFIG_NOCLID))
     clid = NULL;
-          
+
   /* Check if client is PXE client. */
-  if (daemon->enable_pxe && 
-      (opt = option_find(mess, sz, OPTION_VENDOR_ID, 9)) && 
+  if (daemon->enable_pxe &&
+      (opt = option_find(mess, sz, OPTION_VENDOR_ID, 9)) &&
       strncmp(option_ptr(opt, 0), "PXEClient", 9) == 0)
     {
       if ((opt = option_find(mess, sz, OPTION_PXE_UUID, 17)))
@@ -810,41 +810,41 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	    }
 
 	  memcpy(save71, option_ptr(opt, 0), 4);
-	  
+
 	  for (service = daemon->pxe_services; service; service = service->next)
 	    if (service->type == type)
 	      break;
-	  
+
 	  for (; context; context = context->current)
 	    if (match_netid(context->filter, tagif_netid, 1) &&
 		is_same_net(mess->ciaddr, context->start, context->netmask))
 	      break;
-	  
+
 	  if (!service || !service->basename || !context)
 	    return 0;
-	  	  
+
 	  clear_packet(mess, end);
-	  
+
 	  mess->yiaddr = mess->ciaddr;
 	  mess->ciaddr.s_addr = 0;
 	  if (service->sname)
 	    mess->siaddr = a_record_from_hosts(service->sname, now);
 	  else if (service->server.s_addr != 0)
-	    mess->siaddr = service->server; 
+	    mess->siaddr = service->server;
 	  else
-	    mess->siaddr = context->local; 
-	  
+	    mess->siaddr = context->local;
+
 	  if (strchr(service->basename, '.'))
 	    snprintf((char *)mess->file, sizeof(mess->file),
 		"%s", service->basename);
 	  else
 	    snprintf((char *)mess->file, sizeof(mess->file),
 		"%s.%d", service->basename, layer);
-	  
+
 	  option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK);
 	  option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, htonl(context->local.s_addr));
 	  pxe_misc(mess, end, uuid);
-	  
+
 	  prune_vendor_opts(tagif_netid);
 	  opt71.val = save71;
 	  opt71.opt = SUBOPT_PXE_BOOT_ITEM;
@@ -853,12 +853,12 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	  opt71.netid = NULL;
 	  opt71.next = daemon->dhcp_opts;
 	  do_encap_opts(&opt71, OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0);
-	  
+
 	  log_packet("PXE", &mess->yiaddr, emac, emac_len, iface_name, (char *)mess->file, NULL, mess->xid);
 	  log_tags(tagif_netid, ntohl(mess->xid));
-	  return dhcp_packet_size(mess, agent_id, real_end);	  
+	  return dhcp_packet_size(mess, agent_id, real_end);
 	}
-      
+
       if ((opt = option_find(mess, sz, OPTION_ARCH, 2)))
 	{
 	  pxearch = option_uint(opt, 0, 2);
@@ -868,12 +868,12 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	    {
 	      struct dhcp_context *tmp;
 	      int workaround = 0;
-	      
+
 	      for (tmp = context; tmp; tmp = tmp->current)
 		if ((tmp->flags & CONTEXT_PROXY) &&
 		    match_netid(tmp->filter, tagif_netid, 1))
 		  break;
-	      
+
 	      if (tmp)
 		{
 		  struct dhcp_boot *boot;
@@ -884,55 +884,55 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		      tmp->netid.next = netid;
 		      tagif_netid = run_tag_if(&tmp->netid);
 		    }
-		  
+
 		  boot = find_boot(tagif_netid);
-		  
+
 		  mess->yiaddr.s_addr = 0;
 		  if  (mess_type == DHCPDISCOVER || mess->ciaddr.s_addr == 0)
 		    {
 		      mess->ciaddr.s_addr = 0;
 		      mess->flags |= htons(0x8000); /* broadcast */
 		    }
-		  
+
 		  clear_packet(mess, end);
-		  
+
 		  /* Redirect EFI clients to port 4011 */
 		  if (pxearch >= 6)
 		    {
 		      redirect4011 = 1;
 		      mess->siaddr = tmp->local;
 		    }
-		  
-		  /* Returns true if only one matching service is available. On port 4011, 
+
+		  /* Returns true if only one matching service is available. On port 4011,
 		     it also inserts the boot file and server name. */
 		  workaround = pxe_uefi_workaround(pxearch, tagif_netid, mess, tmp->local, now, pxe);
-		  
+
 		  if (!workaround && boot)
 		    {
 		      /* Provide the bootfile here, for gPXE, and in case we have no menu items
 			 and set discovery_control = 8 */
-		      if (boot->next_server.s_addr) 
+		      if (boot->next_server.s_addr)
 			mess->siaddr = boot->next_server;
-		      else if (boot->tftp_sname) 
+		      else if (boot->tftp_sname)
 			mess->siaddr = a_record_from_hosts(boot->tftp_sname, now);
-		      
+
 		      if (boot->file)
 			strncpy((char *)mess->file, boot->file, sizeof(mess->file)-1);
 		    }
-		  
-		  option_put(mess, end, OPTION_MESSAGE_TYPE, 1, 
+
+		  option_put(mess, end, OPTION_MESSAGE_TYPE, 1,
 			     mess_type == DHCPDISCOVER ? DHCPOFFER : DHCPACK);
 		  option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, htonl(tmp->local.s_addr));
 		  pxe_misc(mess, end, uuid);
 		  prune_vendor_opts(tagif_netid);
 		  if ((pxe && !workaround) || !redirect4011)
 		    do_encap_opts(pxe_opts(pxearch, tagif_netid, tmp->local, now), OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0);
-	    
+
 		  log_packet("PXE", NULL, emac, emac_len, iface_name, ignore ? "proxy-ignored" : "proxy", NULL, mess->xid);
 		  log_tags(tagif_netid, ntohl(mess->xid));
 		  if (!ignore)
 		    apply_delay(mess->xid, recvtime, tagif_netid);
-		  return ignore ? 0 : dhcp_packet_size(mess, agent_id, real_end);	  
+		  return ignore ? 0 : dhcp_packet_size(mess, agent_id, real_end);
 		}
 	    }
 	}
@@ -941,37 +941,37 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
   /* if we're just a proxy server, go no further */
   if ((context->flags & CONTEXT_PROXY) || pxe)
     return 0;
-  
+
   if ((opt = option_find(mess, sz, OPTION_REQUESTED_OPTIONS, 0)))
     {
       req_options = (unsigned char *)daemon->dhcp_buff2;
       memcpy(req_options, option_ptr(opt, 0), option_len(opt));
       req_options[option_len(opt)] = OPTION_END;
     }
-  
+
   switch (mess_type)
     {
     case DHCPDECLINE:
       if (!(opt = option_find(mess, sz, OPTION_SERVER_IDENTIFIER, INADDRSZ)) ||
 	  option_addr(opt).s_addr != server_id(context, override, fallback).s_addr)
 	return 0;
-      
+
       /* sanitise any message. Paranoid? Moi? */
       sanitise(option_find(mess, sz, OPTION_MESSAGE, 1), daemon->dhcp_buff);
-      
+
       if (!(opt = option_find(mess, sz, OPTION_REQUESTED_IP, INADDRSZ)))
 	return 0;
-      
+
       log_packet("DHCPDECLINE", option_ptr(opt, 0), emac, emac_len, iface_name, NULL, daemon->dhcp_buff, mess->xid);
-      
+
       if (lease && lease->addr.s_addr == option_addr(opt).s_addr)
 	lease_prune(lease, now);
-      
-      if (have_config(config, CONFIG_ADDR) && 
+
+      if (have_config(config, CONFIG_ADDR) &&
 	  config->addr.s_addr == option_addr(opt).s_addr)
 	{
 	  prettyprint_time(daemon->dhcp_buff, DECLINE_BACKOFF);
-	  my_syslog(MS_DHCP | LOG_WARNING, _("disabling DHCP static address %s for %s"), 
+	  my_syslog(MS_DHCP | LOG_WARNING, _("disabling DHCP static address %s for %s"),
 		    inet_ntoa(config->addr), daemon->dhcp_buff);
 	  config->flags |= CONFIG_DECLINED;
 	  config->decline_time = now;
@@ -980,7 +980,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	/* make sure this host gets a different address next time. */
 	for (; context; context = context->current)
 	  context->addr_epoch++;
-      
+
       return 0;
 
     case DHCPRELEASE:
@@ -988,16 +988,16 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	  !(opt = option_find(mess, sz, OPTION_SERVER_IDENTIFIER, INADDRSZ)) ||
 	  option_addr(opt).s_addr != server_id(context, override, fallback).s_addr)
 	return 0;
-      
+
       if (lease && lease->addr.s_addr == mess->ciaddr.s_addr)
 	lease_prune(lease, now);
       else
 	message = _("unknown lease");
 
       log_packet("DHCPRELEASE", &mess->ciaddr, emac, emac_len, iface_name, NULL, message, mess->xid);
-	
+
       return 0;
-      
+
     case DHCPDISCOVER:
       if (ignore || have_config(config, CONFIG_DISABLE))
 	{
@@ -1006,20 +1006,20 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	  message = _("ignored");
 	  opt = NULL;
 	}
-      else 
+      else
 	{
 	  struct in_addr addr, conf;
-	  
+
 	  addr.s_addr = conf.s_addr = 0;
 
-	  if ((opt = option_find(mess, sz, OPTION_REQUESTED_IP, INADDRSZ)))	 
+	  if ((opt = option_find(mess, sz, OPTION_REQUESTED_IP, INADDRSZ)))
 	    addr = option_addr(opt);
-	  
+
 	  if (have_config(config, CONFIG_ADDR))
 	    {
 	      char *addrs = inet_ntoa(config->addr);
-	      
-	      if ((ltmp = lease_find_by_addr(config->addr)) && 
+
+	      if ((ltmp = lease_find_by_addr(config->addr)) &&
 		  ltmp != lease &&
 		  !config_has_mac(config, ltmp->hwaddr, ltmp->hwaddr_len, ltmp->hwaddr_type))
 		{
@@ -1044,23 +1044,23 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		    conf = config->addr;
 		}
 	    }
-	  
+
 	  if (conf.s_addr)
 	    mess->yiaddr = conf;
-	  else if (lease && 
-		   address_available(context, lease->addr, tagif_netid) && 
+	  else if (lease &&
+		   address_available(context, lease->addr, tagif_netid) &&
 		   !config_find_by_address(daemon->dhcp_conf, lease->addr))
 	    mess->yiaddr = lease->addr;
-	  else if (opt && address_available(context, addr, tagif_netid) && !lease_find_by_addr(addr) && 
+	  else if (opt && address_available(context, addr, tagif_netid) && !lease_find_by_addr(addr) &&
 		   !config_find_by_address(daemon->dhcp_conf, addr) && do_icmp_ping(now, addr, 0, loopback))
 	    mess->yiaddr = addr;
 	  else if (emac_len == 0)
 	    message = _("no unique-id");
 	  else if (!address_allocate(context, &mess->yiaddr, emac, emac_len, tagif_netid, now, loopback))
-	    message = _("no address available");      
+	    message = _("no address available");
 	}
-      
-      log_packet("DHCPDISCOVER", opt ? option_ptr(opt, 0) : NULL, emac, emac_len, iface_name, NULL, message, mess->xid); 
+
+      log_packet("DHCPDISCOVER", opt ? option_ptr(opt, 0) : NULL, emac, emac_len, iface_name, NULL, message, mess->xid);
 
       if (message || !(context = narrow_context(context, mess->yiaddr, tagif_netid)))
 	return 0;
@@ -1074,18 +1074,18 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       log_tags(tagif_netid, ntohl(mess->xid));
       apply_delay(mess->xid, recvtime, tagif_netid);
       log_packet("DHCPOFFER" , &mess->yiaddr, emac, emac_len, iface_name, NULL, NULL, mess->xid);
-      
+
       time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4));
       clear_packet(mess, end);
       option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPOFFER);
       option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr));
       option_put(mess, end, OPTION_LEASE_TIME, 4, time);
       /* T1 and T2 are required in DHCPOFFER by HP's wacky Jetdirect client. */
-      do_options(context, mess, end, req_options, offer_hostname, get_domain(mess->yiaddr), 
+      do_options(context, mess, end, req_options, offer_hostname, get_domain(mess->yiaddr),
 		 netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len, now, time, fuzz);
-      
+
       return dhcp_packet_size(mess, agent_id, real_end);
-      
+
     case DHCPREQUEST:
       if (ignore || have_config(config, CONFIG_DISABLE))
 	return 0;
@@ -1093,33 +1093,33 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	{
 	  /* SELECTING  or INIT_REBOOT */
 	  mess->yiaddr = option_addr(opt);
-	  
+
 	  /* send vendor and user class info for new or recreated lease */
 	  do_classes = 1;
-	  
+
 	  if ((opt = option_find(mess, sz, OPTION_SERVER_IDENTIFIER, INADDRSZ)))
 	    {
 	      /* SELECTING */
 	      selecting = 1;
-	      
+
 	      if (override.s_addr != 0)
 		{
 		  if (option_addr(opt).s_addr != override.s_addr)
 		    return 0;
 		}
-	      else 
+	      else
 		{
 		  for (; context; context = context->current)
 		    if (context->local.s_addr == option_addr(opt).s_addr)
 		      break;
-		  
+
 		  if (!context)
 		    {
 		      /* Handle very strange configs where clients have more than one route to the server.
 			 If a clients idea of its server-id matches any of our DHCP interfaces, we let it pass.
 			 Have to set override to make sure we echo back the correct server-id */
 		      struct irec *intr;
-		      
+
 		      enumerate_interfaces(0);
 
 		      for (intr = daemon->interfaces; intr; intr = intr->next)
@@ -1133,7 +1133,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		      else
 			{
 			  /* In auth mode, a REQUEST sent to the wrong server
-			     should be faulted, so that the client establishes 
+			     should be faulted, so that the client establishes
 			     communication with us, otherwise, silently ignore. */
 			  if (!option_bool(OPT_AUTHORITATIVE))
 			    return 0;
@@ -1154,14 +1154,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	      /* INIT-REBOOT */
 	      if (!lease && !option_bool(OPT_AUTHORITATIVE))
 		return 0;
-	      
+
 	      if (lease && lease->addr.s_addr != mess->yiaddr.s_addr)
 		message = _("wrong address");
 	    }
 	}
       else
 	{
-	  /* RENEWING or REBINDING */ 
+	  /* RENEWING or REBINDING */
 	  /* Check existing lease for this address.
 	     We allow it to be missing if dhcp-authoritative mode
 	     as long as we can allocate the lease now - checked below.
@@ -1169,8 +1169,8 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	  if ((lease && mess->ciaddr.s_addr != lease->addr.s_addr) ||
 	      (!lease && !option_bool(OPT_AUTHORITATIVE)))
 	    {
-	      /* A client rebinding will broadcast the request, so we may see it even 
-		 if the lease is held by another server. Just ignore it in that case. 
+	      /* A client rebinding will broadcast the request, so we may see it even
+		 if the lease is held by another server. Just ignore it in that case.
 		 If the request is unicast to us, then somethings wrong, NAK */
 	      if (!unicast_dest)
 		return 0;
@@ -1183,19 +1183,19 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	  fuzz = rand16();
 	  mess->yiaddr = mess->ciaddr;
 	}
-      
+
       log_packet("DHCPREQUEST", &mess->yiaddr, emac, emac_len, iface_name, NULL, NULL, mess->xid);
- 
+
       if (!message)
 	{
 	  struct dhcp_config *addr_config;
 	  struct dhcp_context *tmp = NULL;
-	  
+
 	  if (have_config(config, CONFIG_ADDR))
 	    for (tmp = context; tmp; tmp = tmp->current)
 	      if (context->router.s_addr == config->addr.s_addr)
 		break;
-	  
+
 	  if (!(context = narrow_context(context, mess->yiaddr, tagif_netid)))
 	    {
 	      /* If a machine moves networks whilst it has a lease, we catch that here. */
@@ -1203,17 +1203,17 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	      /* ensure we broadcast NAK */
 	      unicast_dest = 0;
 	    }
-	  
+
 	  /* Check for renewal of a lease which is outside the allowed range. */
 	  else if (!address_available(context, mess->yiaddr, tagif_netid) &&
 		   (!have_config(config, CONFIG_ADDR) || config->addr.s_addr != mess->yiaddr.s_addr))
 	    message = _("address not available");
-	  
+
 	  /* Check if a new static address has been configured. Be very sure that
 	     when the client does DISCOVER, it will get the static address, otherwise
 	     an endless protocol loop will ensue. */
 	  else if (!tmp && !selecting &&
-		   have_config(config, CONFIG_ADDR) && 
+		   have_config(config, CONFIG_ADDR) &&
 		   (!have_config(config, CONFIG_DECLINED) ||
 		    difftime(now, config->decline_time) > (float)DECLINE_BACKOFF) &&
 		   config->addr.s_addr != mess->yiaddr.s_addr &&
@@ -1226,12 +1226,12 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 
 	  else if (!lease && (ltmp = lease_find_by_addr(mess->yiaddr)))
 	    {
-	      /* If a host is configured with more than one MAC address, it's OK to 'nix 
+	      /* If a host is configured with more than one MAC address, it's OK to 'nix
 		 a lease from one of it's MACs to give the address to another. */
 	      if (config && config_has_mac(config, ltmp->hwaddr, ltmp->hwaddr_len, ltmp->hwaddr_type))
 		{
 		  my_syslog(MS_DHCP | LOG_INFO, _("abandoning lease to %s of %s"),
-			    print_mac(daemon->namebuff, ltmp->hwaddr, ltmp->hwaddr_len), 
+			    print_mac(daemon->namebuff, ltmp->hwaddr, ltmp->hwaddr_len),
 			    inet_ntoa(ltmp->addr));
 		  lease = ltmp;
 		}
@@ -1243,9 +1243,9 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	    {
 	      if (emac_len == 0)
 		message = _("no unique-id");
-	      
+
 	      else if (!lease)
-		{	     
+		{
 		  if ((lease = lease4_allocate(mess->yiaddr)))
 		    do_classes = 1;
 		  else
@@ -1257,15 +1257,15 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       if (message)
 	{
 	  log_packet("DHCPNAK", &mess->yiaddr, emac, emac_len, iface_name, NULL, message, mess->xid);
-	  
+
 	  mess->yiaddr.s_addr = 0;
 	  clear_packet(mess, end);
 	  option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPNAK);
 	  option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr));
 	  option_put_string(mess, end, OPTION_MESSAGE, message, borken_opt);
-	  /* This fixes a problem with the DHCP spec, broadcasting a NAK to a host on 
+	  /* This fixes a problem with the DHCP spec, broadcasting a NAK to a host on
 	     a distant subnet which unicast a REQ to us won't work. */
-	  if (!unicast_dest || mess->giaddr.s_addr != 0 || 
+	  if (!unicast_dest || mess->giaddr.s_addr != 0 ||
 	      mess->ciaddr.s_addr == 0 || is_same_net(context->local, mess->ciaddr, context->netmask))
 	    {
 	      mess->flags |= htons(0x8000); /* broadcast */
@@ -1281,7 +1281,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	    }
 
 	  log_tags(tagif_netid, ntohl(mess->xid));
-	  
+
 	  if (do_classes)
 	    {
 	      /* pick up INIT-REBOOT events. */
@@ -1291,14 +1291,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	      if (daemon->lease_change_command)
 		{
 		  struct dhcp_netid *n;
-		  
+
 		  if (mess->giaddr.s_addr)
 		    lease->giaddr = mess->giaddr;
-		  
+
 		  free(lease->extradata);
 		  lease->extradata = NULL;
 		  lease->extradata_size = lease->extradata_len = 0;
-		  
+
 		  add_extradata_opt(lease, option_find(mess, sz, OPTION_VENDOR_ID, 1));
 		  add_extradata_opt(lease, option_find(mess, sz, OPTION_HOSTNAME, 1));
 		  add_extradata_opt(lease, oui);
@@ -1329,7 +1329,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		        {
 		          q += snprintf(q, MAXDNAME - (q - daemon->namebuff), "%d%s", rop[i], i + 1 == len ? "" : ",");
 		        }
-		      lease_add_extradata(lease, (unsigned char *)daemon->namebuff, (q - daemon->namebuff), 0); 
+		      lease_add_extradata(lease, (unsigned char *)daemon->namebuff, (q - daemon->namebuff), 0);
 		    }
 		  else
 		    {
@@ -1348,9 +1348,9 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 			  if (strcmp(n->net, n1->net) == 0)
 			    break;
 			if (!n1)
-			  lease_add_extradata(lease, (unsigned char *)n->net, strlen(n->net), n->next ? ' ' : 0); 
+			  lease_add_extradata(lease, (unsigned char *)n->net, strlen(n->net), n->next ? ' ' : 0);
 		      }
-		  
+
 		  if ((opt = option_find(mess, sz, OPTION_USER_CLASS, 1)))
 		    {
 		      int len = option_len(opt);
@@ -1363,17 +1363,17 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 		}
 #endif
 	    }
-	  
+
 	  if (!hostname_auth && (client_hostname = host_from_dns(mess->yiaddr)))
 	    {
 	      domain = get_domain(mess->yiaddr);
 	      hostname = client_hostname;
 	      hostname_auth = 1;
 	    }
-	  
+
 	  time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4));
 	  lease_set_hwaddr(lease, mess->chaddr, clid, mess->hlen, mess->htype, clid_len, now, do_classes);
-	  
+
 	  /* if all the netids in the ignore_name list are present, ignore client-supplied name */
 	  if (!hostname_auth)
 	    {
@@ -1383,7 +1383,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	      if (id_list)
 		hostname = NULL;
 	    }
-	  
+
 	  /* Last ditch, if configured, generate hostname from mac address */
 	  if (!hostname && emac_len != 0)
 	    {
@@ -1404,7 +1404,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 
 	  if (hostname)
 	    lease_set_hostname(lease, hostname, hostname_auth, get_domain(lease->addr), domain);
-	  
+
 	  lease_set_expires(lease, time, now);
 	  lease_set_interface(lease, int_index, now);
 
@@ -1413,40 +1413,40 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	  else
 	    override = lease->override;
 
-	  log_packet("DHCPACK", &mess->yiaddr, emac, emac_len, iface_name, hostname, NULL, mess->xid);  
-	  
+	  log_packet("DHCPACK", &mess->yiaddr, emac, emac_len, iface_name, hostname, NULL, mess->xid);
+
 	  clear_packet(mess, end);
 	  option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK);
 	  option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr));
 	  option_put(mess, end, OPTION_LEASE_TIME, 4, time);
-	  do_options(context, mess, end, req_options, hostname, get_domain(mess->yiaddr), 
+	  do_options(context, mess, end, req_options, hostname, get_domain(mess->yiaddr),
 		     netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len, now, time, fuzz);
 	}
 
-      return dhcp_packet_size(mess, agent_id, real_end); 
-      
+      return dhcp_packet_size(mess, agent_id, real_end);
+
     case DHCPINFORM:
       if (ignore || have_config(config, CONFIG_DISABLE))
 	message = _("ignored");
-      
+
       log_packet("DHCPINFORM", &mess->ciaddr, emac, emac_len, iface_name, message, NULL, mess->xid);
-     
+
       if (message || mess->ciaddr.s_addr == 0)
 	return 0;
 
       /* For DHCPINFORM only, cope without a valid context */
       context = narrow_context(context, mess->ciaddr, tagif_netid);
-      
+
       /* Find a least based on IP address if we didn't
 	 get one from MAC address/client-d */
       if (!lease &&
-	  (lease = lease_find_by_addr(mess->ciaddr)) && 
+	  (lease = lease_find_by_addr(mess->ciaddr)) &&
 	  lease->hostname)
 	hostname = lease->hostname;
-      
+
       if (!hostname)
 	hostname = host_from_dns(mess->ciaddr);
-      
+
       if (context && context->netid.net)
 	{
 	  context->netid.next = netid;
@@ -1454,9 +1454,9 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 	}
 
       log_tags(tagif_netid, ntohl(mess->xid));
-      
+
       log_packet("DHCPACK", &mess->ciaddr, emac, emac_len, iface_name, hostname, NULL, mess->xid);
-      
+
       if (lease)
 	{
 	  lease_set_interface(lease, int_index, now);
@@ -1469,11 +1469,11 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       clear_packet(mess, end);
       option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK);
       option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr));
-     
-      /* RFC 2131 says that DHCPINFORM shouldn't include lease-time parameters, but 
+
+      /* RFC 2131 says that DHCPINFORM shouldn't include lease-time parameters, but
 	 we supply a utility which makes DHCPINFORM requests to get this information.
 	 Only include lease time if OPTION_LEASE_TIME is in the parameter request list,
-	 which won't be true for ordinary clients, but will be true for the 
+	 which won't be true for ordinary clients, but will be true for the
 	 dhcp_lease_time utility. */
       if (lease && in_list(req_options, OPTION_LEASE_TIME))
 	{
@@ -1486,23 +1486,23 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 
       do_options(context, mess, end, req_options, hostname, get_domain(mess->ciaddr),
 		 netid, subnet_addr, fqdn_flags, borken_opt, pxearch, uuid, vendor_class_len, now, 0xffffffff, 0);
-      
+
       *is_inform = 1; /* handle reply differently */
-      return dhcp_packet_size(mess, agent_id, real_end); 
+      return dhcp_packet_size(mess, agent_id, real_end);
     }
-  
+
   return 0;
 }
 
 /* find a good value to use as MAC address for logging and address-allocation hashing.
    This is normally just the chaddr field from the DHCP packet,
-   but eg Firewire will have hlen == 0 and use the client-id instead. 
+   but eg Firewire will have hlen == 0 and use the client-id instead.
    This could be anything, but will normally be EUI64 for Firewire.
    We assume that if the first byte of the client-id equals the htype byte
-   then the client-id is using the usual encoding and use the rest of the 
+   then the client-id is using the usual encoding and use the rest of the
    client-id: if not we can use the whole client-id. This should give
    sane MAC address logs. */
-unsigned char *extended_hwaddr(int hwtype, int hwlen, unsigned char *hwaddr, 
+unsigned char *extended_hwaddr(int hwtype, int hwlen, unsigned char *hwaddr,
 				      int clid_len, unsigned char *clid, int *len_out)
 {
   if (hwlen == 0 && clid && clid_len > 3)
@@ -1520,11 +1520,11 @@ unsigned char *extended_hwaddr(int hwtype, int hwlen, unsigned char *hwaddr,
 	  return clid + 1;
 	}
 #endif
-      
+
       *len_out = clid_len;
       return clid;
     }
-  
+
   *len_out = hwlen;
   return hwaddr;
 }
@@ -1532,9 +1532,9 @@ unsigned char *extended_hwaddr(int hwtype, int hwlen, unsigned char *hwaddr,
 static unsigned int calc_time(struct dhcp_context *context, struct dhcp_config *config, unsigned char *opt)
 {
   unsigned int time = have_config(config, CONFIG_TIME) ? config->lease_time : context->lease_time;
-  
+
   if (opt)
-    { 
+    {
       unsigned int req_time = option_uint(opt, 0, 4);
       if (req_time < 120 )
 	req_time = 120; /* sanity */
@@ -1559,9 +1559,9 @@ static int sanitise(unsigned char *opt, char *buf)
 {
   char *p;
   int i;
-  
+
   *buf = 0;
-  
+
   if (!opt)
     return 0;
 
@@ -1574,7 +1574,7 @@ static int sanitise(unsigned char *opt, char *buf)
 	*buf++ = c;
     }
   *buf = 0; /* add terminator */
-  
+
   return 1;
 }
 
@@ -1584,29 +1584,29 @@ static void add_extradata_opt(struct dhcp_lease *lease, unsigned char *opt)
   if (!opt)
     lease_add_extradata(lease, NULL, 0, 0);
   else
-    lease_add_extradata(lease, option_ptr(opt, 0), option_len(opt), 0); 
+    lease_add_extradata(lease, option_ptr(opt, 0), option_len(opt), 0);
 }
 #endif
 
-static void log_packet(char *type, void *addr, unsigned char *ext_mac, 
+static void log_packet(char *type, void *addr, unsigned char *ext_mac,
 		       int mac_len, char *interface, char *string, char *err, u32 xid)
 {
   struct in_addr a;
- 
+
   if (!err && !option_bool(OPT_LOG_OPTS) && option_bool(OPT_QUIET_DHCP))
     return;
-  
+
   /* addr may be misaligned */
   if (addr)
     memcpy(&a, addr, sizeof(a));
-  
+
   print_mac(daemon->namebuff, ext_mac, mac_len);
-  
+
   if(option_bool(OPT_LOG_OPTS))
      my_syslog(MS_DHCP | LOG_INFO, "%u %s(%s) %s%s%s %s%s",
-	       ntohl(xid), 
+	       ntohl(xid),
 	       type,
-	       interface, 
+	       interface,
 	       addr ? inet_ntoa(a) : "",
 	       addr ? " " : "",
 	       daemon->namebuff,
@@ -1615,7 +1615,7 @@ static void log_packet(char *type, void *addr, unsigned char *ext_mac,
   else
     my_syslog(MS_DHCP | LOG_INFO, "%s(%s) %s%s%s %s%s",
 	      type,
-	      interface, 
+	      interface,
 	      addr ? inet_ntoa(a) : "",
 	      addr ? " " : "",
 	      daemon->namebuff,
@@ -1628,8 +1628,8 @@ static void log_options(unsigned char *start, u32 xid)
   while (*start != OPTION_END)
     {
       char *optname = option_string(AF_INET, start[0], option_ptr(start, 0), option_len(start), daemon->namebuff, MAXDNAME);
-      
-      my_syslog(MS_DHCP | LOG_INFO, "%u sent size:%3d option:%3d %s  %s", 
+
+      my_syslog(MS_DHCP | LOG_INFO, "%u sent size:%3d option:%3d %s  %s",
 		ntohl(xid), option_len(start), start[0], optname, daemon->namebuff);
       start += start[1] + 2;
     }
@@ -1637,7 +1637,7 @@ static void log_options(unsigned char *start, u32 xid)
 
 static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt, int minsize)
 {
-  while (1) 
+  while (1)
     {
       if (p >= end)
 	return NULL;
@@ -1645,8 +1645,8 @@ static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt
 	return opt == OPTION_END ? p : NULL;
       else if (*p == OPTION_PAD)
 	p++;
-      else 
-	{ 
+      else
+	{
 	  int opt_len;
 	  if (p > end - 2)
 	    return NULL; /* malformed packet */
@@ -1659,11 +1659,11 @@ static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt
 	}
     }
 }
- 
+
 static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt_type, int minsize)
 {
   unsigned char *ret, *overload;
-  
+
   /* skip over DHCP cookie; */
   if ((ret = option_find1(&mess->options[0] + sizeof(u32), ((unsigned char *)mess) + size, opt_type, minsize)))
     return ret;
@@ -1671,7 +1671,7 @@ static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt
   /* look for overload option. */
   if (!(overload = option_find1(&mess->options[0] + sizeof(u32), ((unsigned char *)mess) + size, OPTION_OVERLOAD, 1)))
     return NULL;
-  
+
   /* Can we look in filename area ? */
   if ((overload[2] & 1) &&
       (ret = option_find1(&mess->file[0], &mess->file[128], opt_type, minsize)))
@@ -1702,7 +1702,7 @@ static unsigned int option_uint(unsigned char *opt, int offset, int size)
   unsigned int ret = 0;
   int i;
   unsigned char *p = option_ptr(opt, offset);
-  
+
   for (i = 0; i < size; i++)
     ret = (ret << 8) | *p++;
 
@@ -1716,11 +1716,11 @@ static unsigned char *dhcp_skip_opts(unsigned char *start)
   return start;
 }
 
-/* only for use when building packet: doesn't check for bad data. */ 
+/* only for use when building packet: doesn't check for bad data. */
 static unsigned char *find_overload(struct dhcp_packet *mess)
 {
   unsigned char *p = &mess->options[0] + sizeof(u32);
-  
+
   while (*p != 0)
     {
       if (*p == OPTION_OVERLOAD)
@@ -1735,7 +1735,7 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, unsigned char *agent_id
   unsigned char *p = dhcp_skip_opts(&mess->options[0] + sizeof(u32));
   unsigned char *overload;
   size_t ret;
-  
+
   /* move agent_id back down to the end of the packet */
   if (agent_id)
     {
@@ -1743,10 +1743,10 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, unsigned char *agent_id
       p += real_end - agent_id;
       memset(p, 0, real_end - p); /* in case of overlap */
     }
-  
+
   /* add END options to the regions. */
   overload = find_overload(mess);
-  
+
   if (overload && (option_uint(overload, 0, 1) & 1))
     {
       *dhcp_skip_opts(mess->file) = OPTION_END;
@@ -1755,7 +1755,7 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, unsigned char *agent_id
     }
   else if (option_bool(OPT_LOG_OPTS) && strlen((char *)mess->file) != 0)
     my_syslog(MS_DHCP | LOG_INFO, _("%u bootfile name: %s"), ntohl(mess->xid), (char *)mess->file);
-  
+
   if (overload && (option_uint(overload, 0, 1) & 2))
     {
       *dhcp_skip_opts(mess->sname) = OPTION_END;
@@ -1767,35 +1767,35 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, unsigned char *agent_id
 
 
   *p++ = OPTION_END;
-  
+
   if (option_bool(OPT_LOG_OPTS))
     {
       if (mess->siaddr.s_addr != 0)
 	my_syslog(MS_DHCP | LOG_INFO, _("%u next server: %s"), ntohl(mess->xid), inet_ntoa(mess->siaddr));
-      
+
       if ((mess->flags & htons(0x8000)) && mess->ciaddr.s_addr == 0)
 	my_syslog(MS_DHCP | LOG_INFO, _("%u broadcast response"), ntohl(mess->xid));
-      
+
       log_options(&mess->options[0] + sizeof(u32), mess->xid);
-    } 
-  
+    }
+
   ret = (size_t)(p - (unsigned char *)mess);
-  
+
   if (ret < MIN_PACKETSZ)
     ret = MIN_PACKETSZ;
-  
+
   return ret;
 }
 
 static unsigned char *free_space(struct dhcp_packet *mess, unsigned char *end, int opt, int len)
 {
   unsigned char *p = dhcp_skip_opts(&mess->options[0] + sizeof(u32));
-  
+
   if (p + len + 3 >= end)
     /* not enough space in options area, try and use overload, if poss */
     {
       unsigned char *overload;
-      
+
       if (!(overload = find_overload(mess)) &&
 	  (mess->file[0] == 0 || mess->sname[0] == 0))
 	{
@@ -1805,28 +1805,28 @@ static unsigned char *free_space(struct dhcp_packet *mess, unsigned char *end, i
 	  *(p++) = OPTION_OVERLOAD;
 	  *(p++) = 1;
 	}
-      
+
       p = NULL;
-      
+
       /* using filename field ? */
       if (overload)
 	{
 	  if (mess->file[0] == 0)
 	    overload[2] |= 1;
-	  
+
 	  if (overload[2] & 1)
 	    {
 	      p = dhcp_skip_opts(mess->file);
 	      if (p + len + 3 >= mess->file + sizeof(mess->file))
 		p = NULL;
 	    }
-	  
+
 	  if (!p)
 	    {
 	      /* try to bring sname into play (it may be already) */
 	      if (mess->sname[0] == 0)
 		overload[2] |= 2;
-	      
+
 	      if (overload[2] & 2)
 		{
 		  p = dhcp_skip_opts(mess->sname);
@@ -1835,11 +1835,11 @@ static unsigned char *free_space(struct dhcp_packet *mess, unsigned char *end, i
 		}
 	    }
 	}
-      
+
       if (!p)
 	my_syslog(MS_DHCP | LOG_WARNING, _("cannot send DHCP/BOOTP option %d: no space left in packet"), opt);
     }
- 
+
   if (p)
     {
       *(p++) = opt;
@@ -1848,18 +1848,18 @@ static unsigned char *free_space(struct dhcp_packet *mess, unsigned char *end, i
 
   return p;
 }
-	      
+
 static void option_put(struct dhcp_packet *mess, unsigned char *end, int opt, int len, unsigned int val)
 {
   int i;
   unsigned char *p = free_space(mess, end, opt, len);
-  
-  if (p) 
+
+  if (p)
     for (i = 0; i < len; i++)
       *(p++) = val >> (8 * (len - (i + 1)));
 }
 
-static void option_put_string(struct dhcp_packet *mess, unsigned char *end, int opt, 
+static void option_put_string(struct dhcp_packet *mess, unsigned char *end, int opt,
 			      char *string, int null_term)
 {
   unsigned char *p;
@@ -1876,7 +1876,7 @@ static void option_put_string(struct dhcp_packet *mess, unsigned char *end, int
 static int do_opt(struct dhcp_opt *opt, unsigned char *p, struct dhcp_context *context, int null_term)
 {
   int len = opt->len;
-  
+
   if ((opt->flags & DHOPT_STRING) && null_term && len != 255)
     len++;
 
@@ -1899,7 +1899,7 @@ static int do_opt(struct dhcp_opt *opt, unsigned char *p, struct dhcp_context *c
       else
 	/* empty string may be extended to "\0" by null_term */
 	memcpy(p, opt->val ? opt->val : (unsigned char *)"", len);
-    }  
+    }
   return len;
 }
 
@@ -1910,7 +1910,7 @@ static int in_list(unsigned char *list, int opt)
    /* If no requested options, send everything, not nothing. */
   if (!list)
     return 1;
-  
+
   for (i = 0; list[i] != OPTION_END; i++)
     if (opt == list[i])
       return 1;
@@ -1921,11 +1921,11 @@ static int in_list(unsigned char *list, int opt)
 static struct dhcp_opt *option_find2(int opt)
 {
   struct dhcp_opt *opts;
-  
+
   for (opts = daemon->dhcp_opts; opts; opts = opts->next)
     if (opts->opt == opt && (opts->flags & DHOPT_TAGOK))
       return opts;
-  
+
   return NULL;
 }
 
@@ -1951,13 +1951,13 @@ static void match_vendor_opts(unsigned char *opt, struct dhcp_opt *dopt)
     }
 }
 
-static int do_encap_opts(struct dhcp_opt *opt, int encap, int flag,  
+static int do_encap_opts(struct dhcp_opt *opt, int encap, int flag,
 			 struct dhcp_packet *mess, unsigned char *end, int null_term)
 {
   int len, enc_len, ret = 0;
   struct dhcp_opt *start;
   unsigned char *p;
-    
+
   /* find size in advance */
   for (enc_len = 0, start = opt; opt; opt = opt->next)
     if (opt->flags & flag)
@@ -1981,7 +1981,7 @@ static int do_encap_opts(struct dhcp_opt *opt, int encap, int flag,
 	    start = opt;
 	  }
       }
-  
+
   if (enc_len != 0 &&
       (p = free_space(mess, end, encap, enc_len + 1)))
     {
@@ -2038,64 +2038,64 @@ static int pxe_uefi_workaround(int pxe_arch, struct dhcp_netid *netid, struct dh
   /* Only workaround UEFI archs. */
   if (pxe_arch < 6)
     return 0;
-  
+
   for (found = NULL, service = daemon->pxe_services; service; service = service->next)
     if (pxe_arch == service->CSA && service->basename && match_netid(service->netid, netid, 1))
       {
 	if (found)
 	  return 0; /* More than one relevant menu item */
-	  
+
 	found = service;
       }
 
   if (!found)
     return 0; /* No relevant menu items. */
-  
+
   if (!pxe)
      return 1;
-  
+
   if (found->sname)
     {
       mess->siaddr = a_record_from_hosts(found->sname, now);
       snprintf((char *)mess->sname, sizeof(mess->sname), "%s", found->sname);
     }
-  else 
+  else
     {
       if (found->server.s_addr != 0)
-	mess->siaddr = found->server; 
+	mess->siaddr = found->server;
       else
 	mess->siaddr = local;
-  
+
       inet_ntop(AF_INET, &mess->siaddr, (char *)mess->sname, INET_ADDRSTRLEN);
     }
-  
-  snprintf((char *)mess->file, sizeof(mess->file), 
+
+  snprintf((char *)mess->file, sizeof(mess->file),
 	   strchr(found->basename, '.') ? "%s" : "%s.0", found->basename);
-  
+
   return 1;
 }
 
 static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct in_addr local, time_t now)
 {
-#define NUM_OPTS 4  
+#define NUM_OPTS 4
 
   unsigned  char *p, *q;
   struct pxe_service *service;
   static struct dhcp_opt *o, *ret;
   int i, j = NUM_OPTS - 1;
   struct in_addr boot_server;
-  
+
   /* We pass back references to these, hence they are declared static */
   static unsigned char discovery_control;
-  static unsigned char fake_prompt[] = { 0, 'P', 'X', 'E' }; 
+  static unsigned char fake_prompt[] = { 0, 'P', 'X', 'E' };
   static struct dhcp_opt *fake_opts = NULL;
-  
+
   /* Disable multicast, since we don't support it, and broadcast
      unless we need it */
   discovery_control = 3;
-  
+
   ret = daemon->dhcp_opts;
-  
+
   if (!fake_opts && !(fake_opts = whine_malloc(NUM_OPTS * sizeof(struct dhcp_opt))))
     return ret;
 
@@ -2105,7 +2105,7 @@ static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct
       fake_opts[i].netid = NULL;
       fake_opts[i].next = i == (NUM_OPTS - 1) ? ret : &fake_opts[i+1];
     }
-  
+
   /* create the data for the PXE_MENU and PXE_SERVERS options. */
   p = (unsigned char *)daemon->dhcp_buff;
   q = (unsigned char *)daemon->dhcp_buff3;
@@ -2131,15 +2131,15 @@ static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct
 	    my_syslog(MS_DHCP | LOG_ERR, _("PXE menu too large"));
 	    return daemon->dhcp_opts;
 	  }
-	
-	boot_server = service->basename ? local : 
+
+	boot_server = service->basename ? local :
 	  (service->sname ? a_record_from_hosts(service->sname, now) : service->server);
-	
+
 	if (boot_server.s_addr != 0)
 	  {
 	    if (q - (unsigned char *)daemon->dhcp_buff3 + 3 + INADDRSZ >= 253)
 	      goto toobig;
-	    
+
 	    /* Boot service with known address - give it */
 	    *(q++) = service->type >> 8;
 	    *(q++) = service->type;
@@ -2156,7 +2156,7 @@ static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct
 
   /* if no prompt, wait forever if there's a choice */
   fake_prompt[0] = (i > 1) ? 255 : 0;
-  
+
   if (i == 0)
     discovery_control = 8; /* no menu - just use use mess->filename */
   else
@@ -2168,7 +2168,7 @@ static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct
 
       if (q - (unsigned char *)daemon->dhcp_buff3 != 0)
 	{
-	  ret = &fake_opts[j--]; 
+	  ret = &fake_opts[j--];
 	  ret->len = q - (unsigned char *)daemon->dhcp_buff3;
 	  ret->val = (unsigned char *)daemon->dhcp_buff3;
 	  ret->opt = SUBOPT_PXE_SERVERS;
@@ -2178,23 +2178,23 @@ static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct
   for (o = daemon->dhcp_opts; o; o = o->next)
     if ((o->flags & DHOPT_VENDOR_MATCH) && o->opt == SUBOPT_PXE_MENU_PROMPT)
       break;
-  
+
   if (!o)
     {
-      ret = &fake_opts[j--]; 
+      ret = &fake_opts[j--];
       ret->len = sizeof(fake_prompt);
       ret->val = fake_prompt;
       ret->opt = SUBOPT_PXE_MENU_PROMPT;
     }
-  
-  ret = &fake_opts[j--]; 
+
+  ret = &fake_opts[j--];
   ret->len = 1;
   ret->opt = SUBOPT_PXE_DISCOVERY;
   ret->val= &discovery_control;
- 
+
   return ret;
 }
-  
+
 static void clear_packet(struct dhcp_packet *mess, unsigned char *end)
 {
   memset(mess->sname, 0, sizeof(mess->sname));
@@ -2222,9 +2222,9 @@ struct dhcp_boot *find_boot(struct dhcp_netid *netid)
 
 static void do_options(struct dhcp_context *context,
 		       struct dhcp_packet *mess,
-		       unsigned char *end, 
+		       unsigned char *end,
 		       unsigned char *req_options,
-		       char *hostname, 
+		       char *hostname,
 		       char *domain,
 		       struct dhcp_netid *netid,
 		       struct in_addr subnet_addr,
@@ -2250,7 +2250,7 @@ static void do_options(struct dhcp_context *context,
   if (context)
     context->netid.next = NULL;
   tagif = option_filter(netid, context && context->netid.net ? &context->netid : NULL, config_opts);
-	
+
   /* logging */
   if (option_bool(OPT_LOG_OPTS) && req_options)
     {
@@ -2259,10 +2259,10 @@ static void do_options(struct dhcp_context *context,
 	{
 	  char *s = option_string(AF_INET, req_options[i], NULL, 0, NULL, 0);
 	  q += snprintf(q, MAXDNAME - (q - daemon->namebuff),
-			"%d%s%s%s", 
+			"%d%s%s%s",
 			req_options[i],
 			strlen(s) != 0 ? ":" : "",
-			s, 
+			s,
 			req_options[i+1] == OPTION_END ? "" : ", ");
 	  if (req_options[i+1] == OPTION_END || (q - daemon->namebuff) > 40)
 	    {
@@ -2271,45 +2271,45 @@ static void do_options(struct dhcp_context *context,
 	    }
 	}
     }
-      
+
   for (id_list = daemon->force_broadcast; id_list; id_list = id_list->next)
     if ((!id_list->list) || match_netid(id_list->list, netid, 0))
       break;
   if (id_list)
     mess->flags |= htons(0x8000); /* force broadcast */
-  
+
   if (context)
     mess->siaddr = context->local;
-  
+
   /* See if we can send the boot stuff as options.
      To do this we need a requested option list, BOOTP
-     and very old DHCP clients won't have this, we also 
+     and very old DHCP clients won't have this, we also
      provide an manual option to disable it.
-     Some PXE ROMs have bugs (surprise!) and need zero-terminated 
+     Some PXE ROMs have bugs (surprise!) and need zero-terminated
      names, so we always send those.  */
   if ((boot = find_boot(tagif)))
     {
       if (boot->sname)
-	{	  
+	{
 	  if (!option_bool(OPT_NO_OVERRIDE) &&
-	      req_options && 
+	      req_options &&
 	      in_list(req_options, OPTION_SNAME))
 	    option_put_string(mess, end, OPTION_SNAME, boot->sname, 1);
 	  else
 	    strncpy((char *)mess->sname, boot->sname, sizeof(mess->sname)-1);
 	}
-      
+
       if (boot->file)
 	{
 	  if (!option_bool(OPT_NO_OVERRIDE) &&
-	      req_options && 
+	      req_options &&
 	      in_list(req_options, OPTION_FILENAME))
 	    option_put_string(mess, end, OPTION_FILENAME, boot->file, 1);
 	  else
 	    strncpy((char *)mess->file, boot->file, sizeof(mess->file)-1);
 	}
-      
-      if (boot->next_server.s_addr) 
+
+      if (boot->next_server.s_addr)
 	mess->siaddr = boot->next_server;
       else if (boot->tftp_sname)
 	mess->siaddr = a_record_from_hosts(boot->tftp_sname, now);
@@ -2326,18 +2326,18 @@ static void do_options(struct dhcp_context *context,
 	  strncpy((char *)mess->file, (char *)opt->val, sizeof(mess->file)-1);
 	  done_file = 1;
 	}
-      
+
       if ((!req_options || !in_list(req_options, OPTION_SNAME)) &&
 	  (opt = option_find2(OPTION_SNAME)) && !(opt->flags & DHOPT_FORCE))
 	{
 	  strncpy((char *)mess->sname, (char *)opt->val, sizeof(mess->sname)-1);
 	  done_server = 1;
 	}
-      
+
       if ((opt = option_find2(OPTION_END)))
-	mess->siaddr.s_addr = ((struct in_addr *)opt->val)->s_addr;	
+	mess->siaddr.s_addr = ((struct in_addr *)opt->val)->s_addr;
     }
-        
+
   /* We don't want to do option-overload for BOOTP, so make the file and sname
      fields look like they are in use, even when they aren't. This gets restored
      at the end of this function. */
@@ -2349,7 +2349,7 @@ static void do_options(struct dhcp_context *context,
       s0 = mess->sname[0];
       mess->sname[0] = 1;
     }
-      
+
   /* At this point, if mess->sname or mess->file are zeroed, they are available
      for option overload, reserve space for the overload option. */
   if (mess->file[0] == 0 || mess->sname[0] == 0)
@@ -2358,13 +2358,13 @@ static void do_options(struct dhcp_context *context,
   /* rfc3011 says this doesn't need to be in the requested options list. */
   if (subnet_addr.s_addr)
     option_put(mess, end, OPTION_SUBNET_SELECT, INADDRSZ, ntohl(subnet_addr.s_addr));
-   
+
   if (lease_time != 0xffffffff)
-    { 
-      unsigned int t1val = lease_time/2; 
+    {
+      unsigned int t1val = lease_time/2;
       unsigned int t2val = (lease_time*7)/8;
       unsigned int hval;
-      
+
       /* If set by user, sanity check, so not longer than lease. */
       if ((opt = option_find2(OPTION_T1)))
 	{
@@ -2379,17 +2379,17 @@ static void do_options(struct dhcp_context *context,
 	  if (hval < lease_time && hval > 2)
 	    t2val = hval;
 	}
-       	  
+
        /* ensure T1 is still < T2 */
        if (t2val <= t1val)
-	 t1val = t2val - 1; 
+	 t1val = t2val - 1;
 
        while (fuzz > (t1val/8))
 	 fuzz = fuzz/2;
-	 
+
        t1val -= fuzz;
        t2val -= fuzz;
-       
+
        option_put(mess, end, OPTION_T1, 4, t1val);
        option_put(mess, end, OPTION_T2, 4, t2val);
     }
@@ -2399,41 +2399,41 @@ static void do_options(struct dhcp_context *context,
     {
       if (!option_find2(OPTION_NETMASK))
 	option_put(mess, end, OPTION_NETMASK, INADDRSZ, ntohl(context->netmask.s_addr));
-  
+
       /* May not have a "guessed" broadcast address if we got no packets via a relay
 	 from this net yet (ie just unicast renewals after a restart */
       if (context->broadcast.s_addr &&
 	  !option_find2(OPTION_BROADCAST))
 	option_put(mess, end, OPTION_BROADCAST, INADDRSZ, ntohl(context->broadcast.s_addr));
-      
+
       /* Same comments as broadcast apply, and also may not be able to get a sensible
 	 default when using subnet select.  User must configure by steam in that case. */
       if (context->router.s_addr &&
 	  in_list(req_options, OPTION_ROUTER) &&
 	  !option_find2(OPTION_ROUTER))
 	option_put(mess, end, OPTION_ROUTER, INADDRSZ, ntohl(context->router.s_addr));
-      
+
       if (daemon->port == NAMESERVER_PORT &&
 	  in_list(req_options, OPTION_DNSSERVER) &&
 	  !option_find2(OPTION_DNSSERVER))
 	option_put(mess, end, OPTION_DNSSERVER, INADDRSZ, ntohl(context->local.s_addr));
     }
 
-  if (domain && in_list(req_options, OPTION_DOMAINNAME) && 
+  if (domain && in_list(req_options, OPTION_DOMAINNAME) &&
       !option_find2(OPTION_DOMAINNAME))
     option_put_string(mess, end, OPTION_DOMAINNAME, domain, null_term);
- 
+
   /* Note that we ignore attempts to set the fqdn using --dhc-option=81,<name> */
   if (hostname)
     {
       if (in_list(req_options, OPTION_HOSTNAME) &&
 	  !option_find2(OPTION_HOSTNAME))
 	option_put_string(mess, end, OPTION_HOSTNAME, hostname, null_term);
-      
+
       if (fqdn_flags != 0)
 	{
 	  len = strlen(hostname) + 3;
-	  
+
 	  if (fqdn_flags & 0x04)
 	    len += 2;
 	  else if (null_term)
@@ -2446,7 +2446,7 @@ static void do_options(struct dhcp_context *context,
 
 	  if ((p = free_space(mess, end, OPTION_CLIENT_FQDN, len)))
 	    {
-	      *(p++) = fqdn_flags & 0x0f; /* MBZ bits to zero */ 
+	      *(p++) = fqdn_flags & 0x0f; /* MBZ bits to zero */
 	      *(p++) = 255;
 	      *(p++) = 255;
 
@@ -2474,7 +2474,7 @@ static void do_options(struct dhcp_context *context,
 		}
 	    }
 	}
-    }      
+    }
 
   for (opt = config_opts; opt; opt = opt->next)
     {
@@ -2483,11 +2483,11 @@ static void do_options(struct dhcp_context *context,
       /* netids match and not encapsulated? */
       if (!(opt->flags & DHOPT_TAGOK))
 	continue;
-      
+
       /* was it asked for, or are we sending it anyway? */
       if (!(opt->flags & DHOPT_FORCE) && !in_list(req_options, optno))
 	continue;
-      
+
       /* prohibit some used-internally options. T1 and T2 already handled. */
       if (optno == OPTION_CLIENT_FQDN ||
 	  optno == OPTION_MAXMESSAGE ||
@@ -2503,15 +2503,15 @@ static void do_options(struct dhcp_context *context,
 
       if (optno == OPTION_FILENAME && done_file)
 	continue;
-      
+
       /* For the options we have default values on
 	 dhc-option=<optionno> means "don't include this option"
 	 not "include a zero-length option" */
-      if (opt->len == 0 && 
+      if (opt->len == 0 &&
 	  (optno == OPTION_NETMASK ||
 	   optno == OPTION_BROADCAST ||
 	   optno == OPTION_ROUTER ||
-	   optno == OPTION_DNSSERVER || 
+	   optno == OPTION_DNSSERVER ||
 	   optno == OPTION_DOMAINNAME ||
 	   optno == OPTION_HOSTNAME))
 	continue;
@@ -2519,27 +2519,27 @@ static void do_options(struct dhcp_context *context,
       /* vendor-class comes from elsewhere for PXE */
       if (pxe_arch != -1 && optno == OPTION_VENDOR_ID)
 	continue;
-      
+
       /* always force null-term for filename and servername - buggy PXE again. */
-      len = do_opt(opt, NULL, context, 
+      len = do_opt(opt, NULL, context,
 		   (optno == OPTION_SNAME || optno == OPTION_FILENAME) ? 1 : null_term);
 
       if ((p = free_space(mess, end, optno, len)))
 	{
-	  do_opt(opt, p, context, 
+	  do_opt(opt, p, context,
 		 (optno == OPTION_SNAME || optno == OPTION_FILENAME) ? 1 : null_term);
-	  
-	  /* If we send a vendor-id, revisit which vendor-ops we consider 
+
+	  /* If we send a vendor-id, revisit which vendor-ops we consider
 	     it appropriate to send. */
 	  if (optno == OPTION_VENDOR_ID)
 	    {
 	      match_vendor_opts(p - 2, config_opts);
 	      done_vendor_class = 1;
 	    }
-	}  
+	}
     }
 
-  /* Now send options to be encapsulated in arbitrary options, 
+  /* Now send options to be encapsulated in arbitrary options,
      eg dhcp-option=encap:172,17,.......
      Also handle vendor-identifying vendor-encapsulated options,
      dhcp-option = vi-encap:13,17,.......
@@ -2547,11 +2547,11 @@ static void do_options(struct dhcp_context *context,
      all the options which match each outer in turn. */
   for (opt = config_opts; opt; opt = opt->next)
     opt->flags &= ~DHOPT_ENCAP_DONE;
-  
+
   for (opt = config_opts; opt; opt = opt->next)
     {
       int flags;
-      
+
       if ((flags = (opt->flags & (DHOPT_ENCAPSULATE | DHOPT_RFC3925))))
 	{
 	  int found = 0;
@@ -2565,10 +2565,10 @@ static void do_options(struct dhcp_context *context,
 	      int outer = flags & DHOPT_ENCAPSULATE ? o->u.encap : OPTION_VENDOR_IDENT_OPT;
 
 	      o->flags &= ~DHOPT_ENCAP_MATCH;
-	      
+
 	      if (!(o->flags & flags) || opt->u.encap != o->u.encap)
 		continue;
-	      
+
 	      o->flags |= DHOPT_ENCAP_DONE;
 	      if (match_netid(o->netid, tagif, 1) &&
 		  ((o->flags & DHOPT_FORCE) || in_list(req_options, outer)))
@@ -2577,10 +2577,10 @@ static void do_options(struct dhcp_context *context,
 		  found = 1;
 		  len += do_opt(o, NULL, NULL, 0) + 2;
 		}
-	    } 
-	  
+	    }
+
 	  if (found)
-	    { 
+	    {
 	      if (flags & DHOPT_ENCAPSULATE)
 		do_encap_opts(config_opts, opt->u.encap, DHOPT_ENCAP_MATCH, mess, end, null_term);
 	      else if (len > 250)
@@ -2598,14 +2598,14 @@ static void do_options(struct dhcp_context *context,
 			*(p++) = o->opt;
 			*(p++) = len;
 			p += len;
-		      }     
+		      }
 		}
 	    }
 	}
-    }      
+    }
 
   force_encap = prune_vendor_opts(tagif);
-  
+
   if (context && pxe_arch != -1)
     {
       pxe_misc(mess, end, uuid);
@@ -2614,13 +2614,13 @@ static void do_options(struct dhcp_context *context,
     }
 
   if ((force_encap || in_list(req_options, OPTION_VENDOR_CLASS_OPT)) &&
-      do_encap_opts(config_opts, OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, null_term) && 
+      do_encap_opts(config_opts, OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, null_term) &&
       pxe_arch == -1 && !done_vendor_class && vendor_class_len != 0 &&
       (p = free_space(mess, end, OPTION_VENDOR_ID, vendor_class_len)))
     /* If we send vendor encapsulated options, and haven't already sent option 60,
        echo back the value we got from the client. */
-    memcpy(p, daemon->dhcp_buff3, vendor_class_len);	    
-   
+    memcpy(p, daemon->dhcp_buff3, vendor_class_len);
+
    /* restore BOOTP anti-overload hack */
   if (!req_options || option_bool(OPT_NO_OVERRIDE))
     {
@@ -2632,12 +2632,12 @@ static void do_options(struct dhcp_context *context,
 static void apply_delay(u32 xid, time_t recvtime, struct dhcp_netid *netid)
 {
   struct delay_config *delay_conf;
-  
+
   /* Decide which delay_config option we're using */
   for (delay_conf = daemon->delay_conf; delay_conf; delay_conf = delay_conf->next)
     if (match_netid(delay_conf->netid, netid, 0))
       break;
-  
+
   if (!delay_conf)
     /* No match, look for one without a netid */
     for (delay_conf = daemon->delay_conf; delay_conf; delay_conf = delay_conf->next)
@@ -2653,10 +2653,10 @@ static void apply_delay(u32 xid, time_t recvtime, struct dhcp_netid *netid)
 }
 
 #endif
-  
 
-  
-  
 
 
-  
+
+
+
+
diff --git a/src/rfc3315.c b/src/rfc3315.c
index 4ca43e0..df0d5c0 100644
--- a/src/rfc3315.c
+++ b/src/rfc3315.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -36,7 +36,7 @@ struct state {
 #endif
 };
 
-static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, 
+static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
 			     struct in6_addr *client_addr, int is_unicast, time_t now);
 static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_t sz, int is_unicast, time_t now);
 static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_opts);
@@ -55,12 +55,12 @@ static struct prefix_class *prefix_class_from_context(struct dhcp_context *conte
 static void mark_context_used(struct state *state, struct in6_addr *addr);
 static void mark_config_used(struct dhcp_context *context, struct in6_addr *addr);
 static int check_address(struct state *state, struct in6_addr *addr);
-static void add_address(struct state *state, struct dhcp_context *context, unsigned int lease_time, void *ia_option, 
+static void add_address(struct state *state, struct dhcp_context *context, unsigned int lease_time, void *ia_option,
 			unsigned int *min_time, struct in6_addr *addr, time_t now);
 static void update_leases(struct state *state, struct dhcp_context *context, struct in6_addr *addr, unsigned int lease_time, time_t now);
 static int add_local_addrs(struct dhcp_context *context);
 static struct dhcp_netid *add_options(struct state *state, int do_refresh);
-static void calculate_times(struct dhcp_context *context, unsigned int *min_time, unsigned int *valid_timep, 
+static void calculate_times(struct dhcp_context *context, unsigned int *min_time, unsigned int *valid_timep,
 			    unsigned int *preferred_timep, unsigned int lease_time);
 
 #define opt6_len(opt) ((int)(opt6_uint(opt, -2, 2)))
@@ -70,7 +70,7 @@ static void calculate_times(struct dhcp_context *context, unsigned int *min_time
 #define opt6_user_vendor_ptr(opt, i) ((void *)&(((unsigned char *)(opt))[2+(i)]))
 #define opt6_user_vendor_len(opt) ((int)(opt6_uint(opt, -4, 2)))
 #define opt6_user_vendor_next(opt, end) (opt6_next(((void *) opt) - 2, end))
- 
+
 
 unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name,
 			   struct in6_addr *fallback,  struct in6_addr *ll_addr, struct in6_addr *ula_addr,
@@ -79,16 +79,16 @@ unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *if
   struct dhcp_vendor *vendor;
   int msg_type;
   struct state state;
-  
+
   if (sz <= 4)
     return 0;
-  
+
   msg_type = *((unsigned char *)daemon->dhcp_packet.iov_base);
-  
+
   /* Mark these so we only match each at most once, to avoid tangled linked lists */
   for (vendor = daemon->dhcp_vendors; vendor; vendor = vendor->next)
     vendor->netid.next = &vendor->netid;
-  
+
   reset_counter();
   state.context = context;
   state.interface = interface;
@@ -100,7 +100,7 @@ unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *if
   state.tags = NULL;
   state.link_address = NULL;
 
-  if (dhcp6_maybe_relay(&state, daemon->dhcp_packet.iov_base, sz, client_addr, 
+  if (dhcp6_maybe_relay(&state, daemon->dhcp_packet.iov_base, sz, client_addr,
 			IN6_IS_ADDR_MULTICAST(client_addr), now))
     return msg_type == DHCP6RELAYFORW ? DHCPV6_SERVER_PORT : DHCPV6_CLIENT_PORT;
 
@@ -108,7 +108,7 @@ unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *if
 }
 
 /* This cost me blood to write, it will probably cost you blood to understand - srk. */
-static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, 
+static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
 			     struct in6_addr *client_addr, int is_unicast, time_t now)
 {
   void *end = inbuff + sz;
@@ -121,21 +121,21 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
   /* if not an encapsulated relayed message, just do the stuff */
   if (msg_type != DHCP6RELAYFORW)
     {
-      /* if link_address != NULL if points to the link address field of the 
+      /* if link_address != NULL if points to the link address field of the
 	 innermost nested RELAYFORW message, which is where we find the
 	 address of the network on which we can allocate an address.
-	 Recalculate the available contexts using that information. 
+	 Recalculate the available contexts using that information.
 
-      link_address == NULL means there's no relay in use, so we try and find the client's 
+      link_address == NULL means there's no relay in use, so we try and find the client's
       MAC address from the local ND cache. */
-      
+
       if (!state->link_address)
 	get_client_mac(client_addr, state->interface, state->mac, &state->mac_len, &state->mac_type, now);
       else
 	{
 	  struct dhcp_context *c;
 	  state->context = NULL;
-	   
+
 	  if (!IN6_IS_ADDR_LOOPBACK(state->link_address) &&
 	      !IN6_IS_ADDR_LINKLOCAL(state->link_address) &&
 	      !IN6_IS_ADDR_MULTICAST(state->link_address))
@@ -149,20 +149,20 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
 		  c->current = state->context;
 		  state->context = c;
 		}
-	  
+
 	  if (!state->context)
 	    {
-	      inet_ntop(AF_INET6, state->link_address, daemon->addrbuff, ADDRSTRLEN); 
-	      my_syslog(MS_DHCP | LOG_WARNING, 
+	      inet_ntop(AF_INET6, state->link_address, daemon->addrbuff, ADDRSTRLEN);
+	      my_syslog(MS_DHCP | LOG_WARNING,
 			_("no address range available for DHCPv6 request from relay at %s"),
 			daemon->addrbuff);
 	      return 0;
 	    }
 	}
-	  
+
       if (!state->context)
 	{
-	  my_syslog(MS_DHCP | LOG_WARNING, 
+	  my_syslog(MS_DHCP | LOG_WARNING,
 		    _("no address range available for DHCPv6 request via %s"), state->iface_name);
 	  return 0;
 	}
@@ -174,7 +174,7 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
      which is               1   +    1   +    16      +     16     + 2 + 2 = 38 */
   if (sz < 38)
     return 0;
-  
+
   /* copy header stuff into reply message and set type to reply */
   if (!(outmsgtypep = put_opt6(inbuff, 34)))
     return 0;
@@ -184,11 +184,11 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
   for (vendor = daemon->dhcp_vendors; vendor; vendor = vendor->next)
     {
       int mopt;
-      
+
       if (vendor->match_type == MATCH_SUBSCRIBER)
 	mopt = OPTION6_SUBSCRIBER_ID;
       else if (vendor->match_type == MATCH_REMOTE)
-	mopt = OPTION6_REMOTE_ID; 
+	mopt = OPTION6_REMOTE_ID;
       else
 	continue;
 
@@ -202,7 +202,7 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
 	  break;
 	}
     }
-  
+
   /* RFC-6939 */
   if ((opt = opt6_find(opts, end, OPTION6_CLIENT_MAC, 3)))
     {
@@ -213,7 +213,7 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
       state->mac_len = opt6_len(opt) - 2;
       memcpy(&state->mac[0], opt6_ptr(opt, 2), state->mac_len);
     }
-  
+
   for (opt = opts; opt; opt = opt6_next(opt, end))
     {
       if (opt6_ptr(opt, 0) + opt6_len(opt) >= end) {
@@ -224,18 +224,18 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
 	{
 	  struct in6_addr align;
 	  /* the packet data is unaligned, copy to aligned storage */
-	  memcpy(&align, inbuff + 2, IN6ADDRSZ); 
+	  memcpy(&align, inbuff + 2, IN6ADDRSZ);
 	  state->link_address = &align;
-	  /* zero is_unicast since that is now known to refer to the 
+	  /* zero is_unicast since that is now known to refer to the
 	     relayed packet, not the original sent by the client */
 	  if (!dhcp6_maybe_relay(state, opt6_ptr(opt, 0), opt6_len(opt), client_addr, 0, now))
 	    return 0;
 	}
       else if (opt6_type(opt) != OPTION6_CLIENT_MAC)
 	put_opt6(opt6_ptr(opt, 0), opt6_len(opt));
-      end_opt6(o);	    
+      end_opt6(o);
     }
-  
+
   return 1;
 }
 
@@ -276,7 +276,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
   /* set tag with name == interface */
   iface_id.net = state->iface_name;
   iface_id.next = state->tags;
-  state->tags = &iface_id; 
+  state->tags = &iface_id;
 
   /* set tag "dhcpv6" */
   v6_id.net = "dhcpv6";
@@ -288,8 +288,8 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
     return 0;
   start_opts = save_counter(-1);
   state->xid = outmsgtypep[3] | outmsgtypep[2] << 8 | outmsgtypep[1] << 16;
-   
-  /* We're going to be linking tags from all context we use. 
+
+  /* We're going to be linking tags from all context we use.
      mark them as unused so we don't link one twice and break the list */
   for (context_tmp = state->context; context_tmp; context_tmp = context_tmp->current)
     {
@@ -297,13 +297,13 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 
       if (option_bool(OPT_LOG_OPTS))
 	{
-	   inet_ntop(AF_INET6, &context_tmp->start6, daemon->dhcp_buff, ADDRSTRLEN); 
-	   inet_ntop(AF_INET6, &context_tmp->end6, daemon->dhcp_buff2, ADDRSTRLEN); 
+	   inet_ntop(AF_INET6, &context_tmp->start6, daemon->dhcp_buff, ADDRSTRLEN);
+	   inet_ntop(AF_INET6, &context_tmp->end6, daemon->dhcp_buff2, ADDRSTRLEN);
 	   if (context_tmp->flags & (CONTEXT_STATIC))
 	     my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCPv6 subnet: %s/%d"),
 		       state->xid, daemon->dhcp_buff, context_tmp->prefix);
 	   else
-	     my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP range: %s -- %s"), 
+	     my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP range: %s -- %s"),
 		       state->xid, daemon->dhcp_buff, daemon->dhcp_buff2);
 	}
     }
@@ -325,15 +325,15 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
        opt6_len(opt) != daemon->duid_len ||
        memcmp(opt6_ptr(opt, 0), daemon->duid, daemon->duid_len) != 0))
     return 0;
-  
+
   o = new_opt6(OPTION6_SERVER_ID);
   put_opt6(daemon->duid, daemon->duid_len);
   end_opt6(o);
 
   if (is_unicast &&
       (msg_type == DHCP6REQUEST || msg_type == DHCP6RENEW || msg_type == DHCP6RELEASE || msg_type == DHCP6DECLINE))
-    
-    {  
+
+    {
       *outmsgtypep = DHCP6REPLY;
       o1 = new_opt6(OPTION6_STATUS_CODE);
       put_opt6_short(DHCP6USEMULTI);
@@ -346,11 +346,11 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
   for (vendor = daemon->dhcp_vendors; vendor; vendor = vendor->next)
     {
       int mopt;
-      
+
       if (vendor->match_type == MATCH_VENDOR)
 	mopt = OPTION6_VENDOR_CLASS;
       else if (vendor->match_type == MATCH_USER)
-	mopt = OPTION6_USER_CLASS; 
+	mopt = OPTION6_USER_CLASS;
       else
 	continue;
 
@@ -358,18 +358,18 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	{
 	  void *enc_opt, *enc_end = opt6_ptr(opt, opt6_len(opt));
 	  int offset = 0;
-	  
+
 	  if (mopt == OPTION6_VENDOR_CLASS)
 	    {
 	      if (opt6_len(opt) < 4)
 		continue;
-	      
+
 	      if (vendor->enterprise != opt6_uint(opt, 0, 4))
 		continue;
-	    
+
 	      offset = 4;
 	    }
- 
+
 	  /* Note that format if user/vendor classes is different to DHCP options - no option types. */
 	  for (enc_opt = opt6_ptr(opt, offset); enc_opt; enc_opt = opt6_user_vendor_next(enc_opt, enc_end))
 	    for (i = 0; i <= (opt6_user_vendor_len(enc_opt) - vendor->len); i++)
@@ -384,15 +384,15 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 
   if (option_bool(OPT_LOG_OPTS) && (opt = opt6_find(state->packet_options, state->end, OPTION6_VENDOR_CLASS, 4)))
     my_syslog(MS_DHCP | LOG_INFO, _("%u vendor class: %u"), state->xid, opt6_uint(opt, 0, 4));
-  
+
   /* dhcp-match. If we have hex-and-wildcards, look for a left-anchored match.
-     Otherwise assume the option is an array, and look for a matching element. 
-     If no data given, existence of the option is enough. This code handles 
+     Otherwise assume the option is an array, and look for a matching element.
+     If no data given, existence of the option is enough. This code handles
      V-I opts too. */
   for (opt_cfg = daemon->dhcp_match6; opt_cfg; opt_cfg = opt_cfg->next)
     {
       int match = 0;
-      
+
       if (opt_cfg->flags & DHOPT_RFC3925)
 	{
 	  for (opt = opt6_find(state->packet_options, state->end, OPTION6_VENDOR_OPTS, 4);
@@ -401,7 +401,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	    {
 	      void *vopt;
 	      void *vend = opt6_ptr(opt, opt6_len(opt));
-	      
+
 	      for (vopt = opt6_find(opt6_ptr(opt, 4), vend, opt_cfg->opt, 0);
 		   vopt;
 		   vopt = opt6_find(opt6_next(vopt, vend), vend, opt_cfg->opt, 0))
@@ -415,10 +415,10 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	{
 	  if (!(opt = opt6_find(state->packet_options, state->end, opt_cfg->opt, 1)))
 	    continue;
-	  
+
 	  match = match_bytes(opt_cfg, opt6_ptr(opt, 0), opt6_len(opt));
-	} 
-  
+	}
+
       if (match)
 	{
 	  opt_cfg->netid->next = state->tags;
@@ -443,25 +443,25 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	    state->tags = &mac_opt->netid;
 	  }
     }
-  
+
   if ((opt = opt6_find(state->packet_options, state->end, OPTION6_FQDN, 1)))
     {
       /* RFC4704 refers */
        int len = opt6_len(opt) - 1;
-       
+
        state->fqdn_flags = opt6_uint(opt, 0, 1);
-       
+
        /* Always force update, since the client has no way to do it itself. */
        if (!option_bool(OPT_FQDN_UPDATE) && !(state->fqdn_flags & 0x01))
 	 state->fqdn_flags |= 0x03;
- 
+
        state->fqdn_flags &= ~0x04;
 
        if (len != 0 && len < 255)
 	 {
 	   unsigned char *pp, *op = opt6_ptr(opt, 1);
 	   char *pq = daemon->dhcp_buff;
-	   
+
 	   pp = op;
 	   while (*op != 0 && ((op + (*op)) - pp) < len)
 	     {
@@ -470,24 +470,24 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	       op += (*op)+1;
 	       *(pq++) = '.';
 	     }
-	   
+
 	   if (pq != daemon->dhcp_buff)
 	     pq--;
 	   *pq = 0;
-	   
+
 	   if (legal_hostname(daemon->dhcp_buff))
 	     {
 	       state->client_hostname = daemon->dhcp_buff;
 	       if (option_bool(OPT_LOG_OPTS))
-		 my_syslog(MS_DHCP | LOG_INFO, _("%u client provides name: %s"), state->xid, state->client_hostname); 
+		 my_syslog(MS_DHCP | LOG_INFO, _("%u client provides name: %s"), state->xid, state->client_hostname);
 	     }
 	 }
-    }	 
-  
+    }
+
   if (state->clid)
     {
       config = find_config(daemon->dhcp_conf, state->context, state->clid, state->clid_len, state->mac, state->mac_len, state->mac_type, NULL);
-      
+
       if (have_config(config, CONFIG_NAME))
 	{
 	  state->hostname = config->hostname;
@@ -497,13 +497,13 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
       else if (state->client_hostname)
 	{
 	  state->domain = strip_hostname(state->client_hostname);
-	  
+
 	  if (strlen(state->client_hostname) != 0)
 	    {
 	      state->hostname = state->client_hostname;
 	      if (!config)
 		{
-		  /* Search again now we have a hostname. 
+		  /* Search again now we have a hostname.
 		     Only accept configs without CLID here, (it won't match)
 		     to avoid impersonation by name. */
 		  struct dhcp_config *new = find_config(daemon->dhcp_conf, state->context, NULL, 0, NULL, 0, 0, state->hostname);
@@ -517,7 +517,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
   if (config)
     {
       struct dhcp_netid_list *list;
-      
+
       for (list = config->netid; list; list = list->next)
         {
           list->list->next = state->tags;
@@ -539,13 +539,13 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
       known_id.next = state->tags;
       state->tags = &known_id;
     }
-  
+
 #ifdef OPTION6_PREFIX_CLASS
   /* OPTION_PREFIX_CLASS in ORO, send addresses in all prefix classes */
   if (daemon->prefix_classes && (msg_type == DHCP6SOLICIT || msg_type == DHCP6REQUEST))
     {
       void *oro;
-      
+
       if ((oro = opt6_find(state->packet_options, state->end, OPTION6_ORO, 0)))
 	for (i = 0; i <  opt6_len(oro) - 1; i += 2)
 	  if (opt6_uint(oro, i, 2) == OPTION6_PREFIX_CLASS)
@@ -553,7 +553,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	      dump_all_prefix_classes = 1;
 	      break;
 	    }
-      
+
       if (msg_type != DHCP6SOLICIT || dump_all_prefix_classes)
 	/* Add the tags associated with prefix classes so we can use the DHCP ranges.
 	   Not done for SOLICIT as we add them  one-at-time. */
@@ -562,49 +562,49 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	    p->tag.next = state->tags;
 	    state->tags = &p->tag;
 	  }
-    }    
+    }
 #endif
 
   tagif = run_tag_if(state->tags);
-  
+
   /* if all the netids in the ignore list are present, ignore this client */
   if (daemon->dhcp_ignore)
     {
       struct dhcp_netid_list *id_list;
-     
+
       for (id_list = daemon->dhcp_ignore; id_list; id_list = id_list->next)
 	if (match_netid(id_list->list, tagif, 0))
 	  ignore = 1;
     }
-  
+
   /* if all the netids in the ignore_name list are present, ignore client-supplied name */
   if (!state->hostname_auth)
     {
        struct dhcp_netid_list *id_list;
-       
+
        for (id_list = daemon->dhcp_ignore_names; id_list; id_list = id_list->next)
 	 if ((!id_list->list) || match_netid(id_list->list, tagif, 0))
 	   break;
        if (id_list)
 	 state->hostname = NULL;
     }
-  
+
 
   switch (msg_type)
     {
     default:
       return 0;
-      
-      
+
+
     case DHCP6SOLICIT:
       {
       	int address_assigned = 0;
 	/* tags without all prefix-class tags */
 	struct dhcp_netid *solicit_tags;
 	struct dhcp_context *c;
-	
+
 	*outmsgtypep = DHCP6ADVERTISE;
-	
+
 	if (opt6_find(state->packet_options, state->end, OPTION6_RAPID_COMMIT, 0))
 	  {
 	    *outmsgtypep = DHCP6REPLY;
@@ -612,15 +612,15 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	    o = new_opt6(OPTION6_RAPID_COMMIT);
 	    end_opt6(o);
 	  }
-	
+
   	log6_quiet(state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL);
 
       request_no_address:
 	solicit_tags = tagif;
-	
+
 	if (ignore)
 	  return 0;
-	
+
 	/* reset USED bits in leases */
 	lease6_reset();
 
@@ -629,7 +629,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	  c->flags &= ~CONTEXT_CONF_USED;
 
 	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
-	  {   
+	  {
 	    void *ia_option, *ia_end;
 	    unsigned int min_time = 0xffffffff;
 	    int t1cntr;
@@ -644,7 +644,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 
 	    if (!check_ia(state, opt, &ia_end, &ia_option))
 	      continue;
-	    
+
 	    /* reset USED bits in contexts - one address per prefix per IAID */
 	    for (c = state->context; c; c = c->current)
 	      c->flags &= ~CONTEXT_USED;
@@ -654,21 +654,21 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	      {
 		void *prefix_opt;
 		int prefix_class;
-		
+
 		if (dump_all_prefix_classes)
 		  /* OPTION_PREFIX_CLASS in ORO, send addresses in all prefix classes */
 		  plain_range = 0;
-		else 
-		  { 
+		else
+		  {
 		    if ((prefix_opt = opt6_find(opt6_ptr(opt, 12), ia_end, OPTION6_PREFIX_CLASS, 2)))
 		      {
-			
+
 			prefix_class = opt6_uint(prefix_opt, 0, 2);
-			
+
 			for (p = daemon->prefix_classes; p ; p = p->next)
 			  if (p->class == prefix_class)
 			    break;
-			
+
 			if (!p)
 			  my_syslog(MS_DHCP | LOG_WARNING, _("unknown prefix-class %d"), prefix_class);
 			else
@@ -689,7 +689,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 			    if (match_netid(&p->tag, solicit_tags, 1))
 			      break;
 			  }
-			
+
 			if (p)
 			  {
 			    plain_range = 0;
@@ -698,7 +698,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		      }
 
 		    if (p && option_bool(OPT_LOG_OPTS))
-		      my_syslog(MS_DHCP | LOG_INFO, "%u prefix class %d tag:%s", state->xid, p->class, p->tag.net); 
+		      my_syslog(MS_DHCP | LOG_INFO, "%u prefix class %d tag:%s", state->xid, p->class, p->tag.net);
 		  }
 	      }
 #endif
@@ -710,11 +710,11 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	    for (ia_counter = 0; ia_option; ia_counter++, ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
 	      {
 		req_addr = opt6_ptr(ia_option, 0);
-				
+
 		if ((c = address6_valid(state->context, req_addr, solicit_tags, plain_range)))
 		  {
 		    lease_time = c->lease_time;
-		    /* If the client asks for an address on the same network as a configured address, 
+		    /* If the client asks for an address on the same network as a configured address,
 		       offer the configured address instead, to make moving to newly-configured
 		       addresses automatic. */
 		    if (!(c->flags & CONTEXT_CONF_USED) && config_valid(config, c, &addr) && check_address(state, &addr))
@@ -728,24 +728,24 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		      continue; /* not an address we're allowed */
 		    else if (!check_address(state, req_addr))
 		      continue; /* address leased elsewhere */
-		    
+
 		    /* add address to output packet */
 #ifdef OPTION6_PREFIX_CLASS
 		    if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA)
 		      state->send_prefix_class = prefix_class_from_context(c);
-#endif		    
+#endif
 		    add_address(state, c, lease_time, ia_option, &min_time, req_addr, now);
 		    mark_context_used(state, req_addr);
 		    get_context_tag(state, c);
 		    address_assigned = 1;
 		  }
 	      }
-	    
+
 	    /* Suggest configured address(es) */
-	    for (c = state->context; c; c = c->current) 
+	    for (c = state->context; c; c = c->current)
 	      if (!(c->flags & CONTEXT_CONF_USED) &&
 		  match_netid(c->filter, solicit_tags, plain_range) &&
-		  config_valid(config, c, &addr) && 
+		  config_valid(config, c, &addr) &&
 		  check_address(state, &addr))
 		{
 		  mark_config_used(state->context, &addr);
@@ -763,7 +763,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		  get_context_tag(state, c);
 		  address_assigned = 1;
 		}
-	    
+
 	    /* return addresses for existing leases */
 	    ltmp = NULL;
 	    while ((ltmp = lease6_find_by_client(ltmp, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, state->clid, state->clid_len, state->iaid)))
@@ -781,7 +781,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		    address_assigned = 1;
 		  }
 	      }
-		 	   
+
 	    /* Return addresses for all valid contexts which don't yet have one */
 	    while ((c = address6_allocate(state->context, state->clid, state->clid_len, state->ia_type == OPTION6_IA_TA,
 					  state->iaid, ia_counter, solicit_tags, plain_range, &addr)))
@@ -795,7 +795,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		get_context_tag(state, c);
 		address_assigned = 1;
 	      }
-	    
+
 	    if (address_assigned != 1)
 	      {
 		/* If the server will not assign any addresses to any IAs in a
@@ -806,7 +806,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		    save_counter(o);
 		    continue;
 		  }
-		
+
 		/* If the server cannot assign any addresses to an IA in the message
 		   from the client, the server MUST include the IA in the Reply message
 		   with no addresses in the IA and a Status Code option in the IA
@@ -816,18 +816,18 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		put_opt6_string(_("address unavailable"));
 		end_opt6(o1);
 	      }
-	    
+
 	    end_ia(t1cntr, min_time, 0);
-	    end_opt6(o);	
+	    end_opt6(o);
 	  }
 
-	if (address_assigned) 
+	if (address_assigned)
 	  {
 	    o1 = new_opt6(OPTION6_STATUS_CODE);
 	    put_opt6_short(DHCP6SUCCESS);
 	    put_opt6_string(_("success"));
 	    end_opt6(o1);
-	    
+
 	    /* If --dhcp-authoritative is set, we can tell client not to wait for
 	       other possible servers */
 	    o = new_opt6(OPTION6_PREFERENCE);
@@ -836,7 +836,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	    tagif = add_options(state, 0);
 	  }
 	else
-	  { 
+	  {
 	    /* no address, return error */
 	    o1 = new_opt6(OPTION6_STATUS_CODE);
 	    put_opt6_short(DHCP6NOADDRS);
@@ -856,7 +856,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 
 	break;
       }
-      
+
     case DHCP6REQUEST:
       {
 	int address_assigned = 0;
@@ -867,16 +867,16 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	state->lease_allocate = 1;
 
 	log6_quiet(state, "DHCPREQUEST", NULL, ignore ? _("ignored") : NULL);
-	
+
 	if (ignore)
 	  return 0;
-	
+
 	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
-	  {   
+	  {
 	    void *ia_option, *ia_end;
 	    unsigned int min_time = 0xffffffff;
 	    int t1cntr;
-	    
+
 	     if (!check_ia(state, opt, &ia_end, &ia_option))
 	       continue;
 
@@ -885,11 +885,11 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		 /* If we get a request with a IA_*A without addresses, treat it exactly like
 		    a SOLICT with rapid commit set. */
 		 save_counter(start);
-		 goto request_no_address; 
+		 goto request_no_address;
 	       }
 
 	    o = build_ia(state, &t1cntr);
-	      
+
 	    for (; ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
 	      {
 		struct in6_addr *req_addr = opt6_ptr(ia_option, 0);
@@ -897,10 +897,10 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		unsigned int lease_time;
 		struct in6_addr addr;
 		int config_ok = 0;
-		
+
 		if ((c = address6_valid(state->context, req_addr, tagif, 1)))
 		  config_ok = config_valid(config, c, &addr) && IN6_ARE_ADDR_EQUAL(&addr, req_addr);
-		
+
 		if ((dynamic = address6_available(state->context, req_addr, tagif, 1)) || c)
 		  {
 		    if (!dynamic && !config_ok)
@@ -918,14 +918,14 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 			put_opt6_short(DHCP6UNSPEC);
 			put_opt6_string(_("address in use"));
 			end_opt6(o1);
-		      } 
-		    else 
+		      }
+		    else
 		      {
 			if (!dynamic)
 			  dynamic = c;
 
 			lease_time = dynamic->lease_time;
-			
+
 			if (config_ok && have_config(config, CONFIG_TIME))
 			  lease_time = config->lease_time;
 
@@ -938,7 +938,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 			address_assigned = 1;
 		      }
 		  }
-		else 
+		else
 		  {
 		    /* requested address not on the correct link */
 		    o1 = new_opt6(OPTION6_STATUS_CODE);
@@ -947,12 +947,12 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		    end_opt6(o1);
 		  }
 	      }
-	 
+
 	    end_ia(t1cntr, min_time, 0);
-	    end_opt6(o);	
+	    end_opt6(o);
 	  }
 
-	if (address_assigned) 
+	if (address_assigned)
 	  {
 	    o1 = new_opt6(OPTION6_STATUS_CODE);
 	    put_opt6_short(DHCP6SUCCESS);
@@ -960,7 +960,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	    end_opt6(o1);
 	  }
 	else
-	  { 
+	  {
 	    /* no address, return error */
 	    o1 = new_opt6(OPTION6_STATUS_CODE);
 	    put_opt6_short(DHCP6NOADDRS);
@@ -972,13 +972,13 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	tagif = add_options(state, 0);
 	break;
       }
-      
-  
+
+
     case DHCP6RENEW:
       {
 	/* set reply message type */
 	*outmsgtypep = DHCP6REPLY;
-	
+
 	log6_quiet(state, "DHCPRENEW", NULL, NULL);
 
 	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
@@ -986,13 +986,13 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	    void *ia_option, *ia_end;
 	    unsigned int min_time = 0xffffffff;
 	    int t1cntr, iacntr;
-	    
+
 	    if (!check_ia(state, opt, &ia_end, &ia_option))
 	      continue;
-	    
+
 	    o = build_ia(state, &t1cntr);
-	    iacntr = save_counter(-1); 
-	    
+	    iacntr = save_counter(-1);
+
 	    for (; ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
 	      {
 		struct dhcp_lease *lease = NULL;
@@ -1001,9 +1001,9 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		unsigned int valid_time =  opt6_uint(ia_option, 20, 4);
 		char *message = NULL;
 		struct dhcp_context *this_context;
-		
+
 		if (!(lease = lease6_find(state->clid, state->clid_len,
-					  state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, 
+					  state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA,
 					  state->iaid, req_addr)))
 		  {
 		    /* If the server cannot find a client entry for the IA the server
@@ -1011,9 +1011,9 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		       to NoBinding in the Reply message. */
 		    save_counter(iacntr);
 		    t1cntr = 0;
-		    
+
 		    log6_packet(state, "DHCPREPLY", req_addr, _("lease not found"));
-		    
+
 		    o1 = new_opt6(OPTION6_STATUS_CODE);
 		    put_opt6_short(DHCP6NOBINDING);
 		    put_opt6_string(_("no binding found"));
@@ -1022,8 +1022,8 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		    preferred_time = valid_time = 0;
 		    break;
 		  }
-		
-		
+
+
 		if ((this_context = address6_available(state->context, req_addr, tagif, 1)) ||
 		    (this_context = address6_valid(state->context, req_addr, tagif, 1)))
 		  {
@@ -1031,14 +1031,14 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		    unsigned int lease_time;
 
 		    get_context_tag(state, this_context);
-		    
+
 		    if (config_valid(config, this_context, &addr) && IN6_ARE_ADDR_EQUAL(&addr, req_addr) && have_config(config, CONFIG_TIME))
 		      lease_time = config->lease_time;
-		    else 
+		    else
 		      lease_time = this_context->lease_time;
-		    
-		    calculate_times(this_context, &min_time, &valid_time, &preferred_time, lease_time); 
-		    
+
+		    calculate_times(this_context, &min_time, &valid_time, &preferred_time, lease_time);
+
 		    lease_set_expires(lease, valid_time, now);
 		    /* Update MAC record in case it's new information. */
 		    if (state->mac_len != 0)
@@ -1048,11 +1048,11 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 			char *addr_domain = get_domain6(req_addr);
 			if (!state->send_domain)
 			  state->send_domain = addr_domain;
-			lease_set_hostname(lease, state->hostname, state->hostname_auth, addr_domain, state->domain); 
+			lease_set_hostname(lease, state->hostname, state->hostname_auth, addr_domain, state->domain);
 			message = state->hostname;
 		      }
-		    
-		    
+
+
 		    if (preferred_time == 0)
 		      message = _("deprecated");
 		  }
@@ -1060,48 +1060,48 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		  {
 		    preferred_time = valid_time = 0;
 		    message = _("address invalid");
-		  } 
+		  }
 
 		if (message && (message != state->hostname))
-		  log6_packet(state, "DHCPREPLY", req_addr, message);	
+		  log6_packet(state, "DHCPREPLY", req_addr, message);
 		else
 		  log6_quiet(state, "DHCPREPLY", req_addr, message);
-	
+
 		o1 =  new_opt6(OPTION6_IAADDR);
 		put_opt6(req_addr, sizeof(*req_addr));
 		put_opt6_long(preferred_time);
 		put_opt6_long(valid_time);
 		end_opt6(o1);
 	      }
-	    
+
 	    end_ia(t1cntr, min_time, 1);
 	    end_opt6(o);
 	  }
-	
+
 	tagif = add_options(state, 0);
 	break;
-	
+
       }
-      
+
     case DHCP6CONFIRM:
       {
 	int good_addr = 0;
 
 	/* set reply message type */
 	*outmsgtypep = DHCP6REPLY;
-	
+
 	log6_quiet(state, "DHCPCONFIRM", NULL, NULL);
-	
+
 	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
 	  {
 	    void *ia_option, *ia_end;
-	    
+
 	    for (check_ia(state, opt, &ia_end, &ia_option);
 		 ia_option;
 		 ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
 	      {
 		struct in6_addr *req_addr = opt6_ptr(ia_option, 0);
-		
+
 		if (!address6_valid(state->context, req_addr, tagif, 1))
 		  {
 		    o1 = new_opt6(OPTION6_STATUS_CODE);
@@ -1114,8 +1114,8 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		good_addr = 1;
 		log6_quiet(state, "DHCPREPLY", req_addr, state->hostname);
 	      }
-	  }	 
-	
+	  }
+
 	/* No addresses, no reply: RFC 3315 18.2.2 */
 	if (!good_addr)
 	  return 0;
@@ -1126,7 +1126,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	end_opt6(o1);
 	break;
     }
-      
+
     case DHCP6IREQ:
       {
 	/* We can't discriminate contexts based on address, as we don't know it.
@@ -1138,7 +1138,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	  }
 
 	/* Similarly, we can't determine domain from address, but if the FQDN is
-	   given in --dhcp-host, we can use that, and failing that we can use the 
+	   given in --dhcp-host, we can use that, and failing that we can use the
 	   unqualified configured domain, if any. */
 	if (state->hostname_auth)
 	  state->send_domain = state->domain;
@@ -1152,8 +1152,8 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	tagif = add_options(state, 1);
 	break;
       }
-      
-      
+
+
     case DHCP6RELEASE:
       {
 	/* set reply message type */
@@ -1165,13 +1165,13 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 	  {
 	    void *ia_option, *ia_end;
 	    int made_ia = 0;
-	    	    
+
 	    for (check_ia(state, opt, &ia_end, &ia_option);
 		 ia_option;
-		 ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) 
+		 ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
 	      {
 		struct dhcp_lease *lease;
-		
+
 		if ((lease = lease6_find(state->clid, state->clid_len, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA,
 					 state->iaid, opt6_ptr(ia_option, 0))))
 		  lease_prune(lease, now);
@@ -1184,11 +1184,11 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 			if (state->ia_type == OPTION6_IA_NA)
 			  {
 			    put_opt6_long(0);
-			    put_opt6_long(0); 
+			    put_opt6_long(0);
 			  }
 			made_ia = 1;
 		      }
-		    
+
 		    o1 = new_opt6(OPTION6_IAADDR);
 		    put_opt6(opt6_ptr(ia_option, 0), IN6ADDRSZ);
 		    put_opt6_long(0);
@@ -1196,23 +1196,23 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		    end_opt6(o1);
 		  }
 	      }
-	    
+
 	    if (made_ia)
 	      {
 		o1 = new_opt6(OPTION6_STATUS_CODE);
 		put_opt6_short(DHCP6NOBINDING);
 		put_opt6_string(_("no binding found"));
 		end_opt6(o1);
-		
+
 		end_opt6(o);
 	      }
 	  }
-	
+
 	o1 = new_opt6(OPTION6_STATUS_CODE);
 	put_opt6_short(DHCP6SUCCESS);
 	put_opt6_string(_("release received"));
 	end_opt6(o1);
-	
+
 	break;
       }
 
@@ -1220,17 +1220,17 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
       {
 	/* set reply message type */
 	*outmsgtypep = DHCP6REPLY;
-	
+
 	log6_quiet(state, "DHCPDECLINE", NULL, NULL);
 
 	for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end))
 	  {
 	    void *ia_option, *ia_end;
 	    int made_ia = 0;
-	    	    
+
 	    for (check_ia(state, opt, &ia_end, &ia_option);
 		 ia_option;
-		 ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) 
+		 ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
 	      {
 		struct dhcp_lease *lease;
 		struct in6_addr *addrp = opt6_ptr(ia_option, 0);
@@ -1239,7 +1239,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		  {
 		    prettyprint_time(daemon->dhcp_buff3, DECLINE_BACKOFF);
 		    inet_ntop(AF_INET6, addrp, daemon->addrbuff, ADDRSTRLEN);
-		    my_syslog(MS_DHCP | LOG_WARNING, _("disabling DHCP static address %s for %s"), 
+		    my_syslog(MS_DHCP | LOG_WARNING, _("disabling DHCP static address %s for %s"),
 			      daemon->addrbuff, daemon->dhcp_buff3);
 		    config->flags |= CONFIG_DECLINED;
 		    config->decline_time = now;
@@ -1248,7 +1248,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		  /* make sure this host gets a different address next time. */
 		  for (context_tmp = state->context; context_tmp; context_tmp = context_tmp->current)
 		    context_tmp->addr_epoch++;
-		
+
 		if ((lease = lease6_find(state->clid, state->clid_len, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA,
 					 state->iaid, opt6_ptr(ia_option, 0))))
 		  lease_prune(lease, now);
@@ -1261,11 +1261,11 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 			if (state->ia_type == OPTION6_IA_NA)
 			  {
 			    put_opt6_long(0);
-			    put_opt6_long(0); 
+			    put_opt6_long(0);
 			  }
 			made_ia = 1;
 		      }
-		    
+
 		    o1 = new_opt6(OPTION6_IAADDR);
 		    put_opt6(opt6_ptr(ia_option, 0), IN6ADDRSZ);
 		    put_opt6_long(0);
@@ -1273,17 +1273,17 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
 		    end_opt6(o1);
 		  }
 	      }
-	    
+
 	    if (made_ia)
 	      {
 		o1 = new_opt6(OPTION6_STATUS_CODE);
 		put_opt6_short(DHCP6NOBINDING);
 		put_opt6_string(_("no binding found"));
 		end_opt6(o1);
-		
+
 		end_opt6(o);
 	      }
-	    
+
 	  }
 
 	/* We must answer with 'success' in global section anyway */
@@ -1295,15 +1295,15 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
       }
 
     }
-  
+
   log_tags(tagif, state->xid);
   log6_opts(0, state->xid, daemon->outpacket.iov_base + start_opts, daemon->outpacket.iov_base + save_counter(-1));
-  
+
   return 1;
 
 }
 
-static struct dhcp_netid *add_options(struct state *state, int do_refresh)  
+static struct dhcp_netid *add_options(struct state *state, int do_refresh)
 {
   void *oro;
   /* filter options based on tags, those we want get DHOPT_TAGOK bit set */
@@ -1313,46 +1313,46 @@ static struct dhcp_netid *add_options(struct state *state, int do_refresh)
   int i, o, o1;
 
   oro = opt6_find(state->packet_options, state->end, OPTION6_ORO, 0);
-  
+
   for (opt_cfg = daemon->dhcp_opts6; opt_cfg; opt_cfg = opt_cfg->next)
     {
       /* netids match and not encapsulated? */
       if (!(opt_cfg->flags & DHOPT_TAGOK))
 	continue;
-      
+
       if (!(opt_cfg->flags & DHOPT_FORCE) && oro)
 	{
 	  for (i = 0; i <  opt6_len(oro) - 1; i += 2)
 	    if (opt6_uint(oro, i, 2) == (unsigned)opt_cfg->opt)
 	      break;
-	  
+
 	  /* option not requested */
 	  if (i >=  opt6_len(oro) - 1)
 	    continue;
 	}
-      
+
       if (opt_cfg->opt == OPTION6_REFRESH_TIME)
 	done_refresh = 1;
-       
+
       if (opt_cfg->opt == OPTION6_DNS_SERVER)
 	done_dns = 1;
-      
+
       if (opt_cfg->flags & DHOPT_ADDR6)
 	{
 	  int len, j;
 	  struct in6_addr *a;
-	  
-	  for (a = (struct in6_addr *)opt_cfg->val, len = opt_cfg->len, j = 0; 
+
+	  for (a = (struct in6_addr *)opt_cfg->val, len = opt_cfg->len, j = 0;
 	       j < opt_cfg->len; j += IN6ADDRSZ, a++)
 	    if ((IN6_IS_ADDR_ULA_ZERO(a) && IN6_IS_ADDR_UNSPECIFIED(state->ula_addr)) ||
 		(IN6_IS_ADDR_LINK_LOCAL_ZERO(a) && IN6_IS_ADDR_UNSPECIFIED(state->ll_addr)))
 	      len -= IN6ADDRSZ;
-	  
+
 	  if (len != 0)
 	    {
-	      
+
 	      o = new_opt6(opt_cfg->opt);
-	      	  
+
 	      for (a = (struct in6_addr *)opt_cfg->val, j = 0; j < opt_cfg->len; j+=IN6ADDRSZ, a++)
 		{
 		  if (IN6_IS_ADDR_UNSPECIFIED(a))
@@ -1385,22 +1385,22 @@ static struct dhcp_netid *add_options(struct state *state, int do_refresh)
 	  end_opt6(o);
 	}
     }
-  
+
   if (daemon->port == NAMESERVER_PORT && !done_dns)
     {
       o = new_opt6(OPTION6_DNS_SERVER);
       if (!add_local_addrs(state->context))
 	put_opt6(state->fallback, IN6ADDRSZ);
-      end_opt6(o); 
+      end_opt6(o);
     }
 
   if (state->context && !done_refresh)
     {
       struct dhcp_context *c;
       unsigned int lease_time = 0xffffffff;
-      
+
       /* Find the smallest lease tie of all contexts,
-	 subject to the RFC-4242 stipulation that this must not 
+	 subject to the RFC-4242 stipulation that this must not
 	 be less than 600. */
       for (c = state->context; c; c = c->next)
 	if (c->lease_time < lease_time)
@@ -1413,36 +1413,36 @@ static struct dhcp_netid *add_options(struct state *state, int do_refresh)
 
       o = new_opt6(OPTION6_REFRESH_TIME);
       put_opt6_long(lease_time);
-      end_opt6(o); 
+      end_opt6(o);
     }
-   
+
     /* handle vendor-identifying vendor-encapsulated options,
        dhcp-option = vi-encap:13,17,....... */
   for (opt_cfg = daemon->dhcp_opts6; opt_cfg; opt_cfg = opt_cfg->next)
     opt_cfg->flags &= ~DHOPT_ENCAP_DONE;
-    
+
   if (oro)
     for (i = 0; i <  opt6_len(oro) - 1; i += 2)
       if (opt6_uint(oro, i, 2) == OPTION6_VENDOR_OPTS)
 	do_encap = 1;
-  
+
   for (opt_cfg = daemon->dhcp_opts6; opt_cfg; opt_cfg = opt_cfg->next)
-    { 
+    {
       if (opt_cfg->flags & DHOPT_RFC3925)
 	{
 	  int found = 0;
 	  struct dhcp_opt *oc;
-	  
+
 	  if (opt_cfg->flags & DHOPT_ENCAP_DONE)
 	    continue;
-	  
+
 	  for (oc = daemon->dhcp_opts6; oc; oc = oc->next)
 	    {
 	      oc->flags &= ~DHOPT_ENCAP_MATCH;
-	      
+
 	      if (!(oc->flags & DHOPT_RFC3925) || opt_cfg->u.encap != oc->u.encap)
 		continue;
-	      
+
 	      oc->flags |= DHOPT_ENCAP_DONE;
 	      if (match_netid(oc->netid, tagif, 1))
 		{
@@ -1452,14 +1452,14 @@ static struct dhcp_netid *add_options(struct state *state, int do_refresh)
 		      oc->flags |= DHOPT_ENCAP_MATCH;
 		      found = 1;
 		    }
-		} 
+		}
 	    }
-	  
+
 	  if (found)
-	    { 
-	      o = new_opt6(OPTION6_VENDOR_OPTS);	      
-	      put_opt6_long(opt_cfg->u.encap);	
-	     
+	    {
+	      o = new_opt6(OPTION6_VENDOR_OPTS);
+	      put_opt6_long(opt_cfg->u.encap);
+
 	      for (oc = daemon->dhcp_opts6; oc; oc = oc->next)
 		if (oc->flags & DHOPT_ENCAP_MATCH)
 		  {
@@ -1470,14 +1470,14 @@ static struct dhcp_netid *add_options(struct state *state, int do_refresh)
 	      end_opt6(o);
 	    }
 	}
-    }      
+    }
 
 
   if (state->hostname)
     {
       unsigned char *p;
       size_t len = strlen(state->hostname);
-      
+
       if (state->send_domain)
 	len += strlen(state->send_domain) + 2;
 
@@ -1504,10 +1504,10 @@ static struct dhcp_netid *add_options(struct state *state, int do_refresh)
 	{
 	  char *s = option_string(AF_INET6, opt6_uint(oro, i, 2), NULL, 0, NULL, 0);
 	  q += snprintf(q, MAXDNAME - (q - daemon->namebuff),
-			"%d%s%s%s", 
+			"%d%s%s%s",
 			opt6_uint(oro, i, 2),
 			strlen(s) != 0 ? ":" : "",
-			s, 
+			s,
 			(i > opt6_len(oro) - 3) ? "" : ", ");
 	  if ( i >  opt6_len(oro) - 3 || (q - daemon->namebuff) > 40)
 	    {
@@ -1515,15 +1515,15 @@ static struct dhcp_netid *add_options(struct state *state, int do_refresh)
 	      my_syslog(MS_DHCP | LOG_INFO, _("%u requested options: %s"), state->xid, daemon->namebuff);
 	    }
 	}
-    } 
+    }
 
   return tagif;
 }
- 
+
 static int add_local_addrs(struct dhcp_context *context)
 {
   int done = 0;
-  
+
   for (; context; context = context->current)
     if ((context->flags & CONTEXT_USED) && !IN6_IS_ADDR_UNSPECIFIED(&context->local6))
       {
@@ -1533,9 +1533,9 @@ static int add_local_addrs(struct dhcp_context *context)
 	  if ((c->flags & CONTEXT_USED) &&
 	      IN6_ARE_ADDR_EQUAL(&context->local6, &c->local6))
 	    break;
-	
+
 	if (!c)
-	  { 
+	  {
 	    done = 1;
 	    put_opt6(&context->local6, IN6ADDRSZ);
 	  }
@@ -1555,7 +1555,7 @@ static void get_context_tag(struct state *state, struct dhcp_context *context)
       if (!state->hostname_auth)
 	{
 	  struct dhcp_netid_list *id_list;
-	  
+
 	  for (id_list = daemon->dhcp_ignore_names; id_list; id_list = id_list->next)
 	    if ((!id_list->list) || match_netid(id_list->list, &context->netid, 0))
 	      break;
@@ -1563,19 +1563,19 @@ static void get_context_tag(struct state *state, struct dhcp_context *context)
 	    state->hostname = NULL;
 	}
     }
-} 
+}
 
 #ifdef OPTION6_PREFIX_CLASS
 static struct prefix_class *prefix_class_from_context(struct dhcp_context *context)
 {
   struct prefix_class *p;
   struct dhcp_netid *t;
-  
+
   for (p = daemon->prefix_classes; p ; p = p->next)
     for (t = context->filter; t; t = t->next)
       if (strcmp(p->tag.net, t->net) == 0)
 	return p;
-  
+
  return NULL;
 }
 #endif
@@ -1587,13 +1587,13 @@ static int check_ia(struct state *state, void *opt, void **endp, void **ia_optio
 
   if (state->ia_type != OPTION6_IA_NA && state->ia_type != OPTION6_IA_TA)
     return 0;
-  
+
   if (state->ia_type == OPTION6_IA_NA && opt6_len(opt) < 12)
     return 0;
-	    
+
   if (state->ia_type == OPTION6_IA_TA && opt6_len(opt) < 4)
     return 0;
-  
+
   *endp = opt6_ptr(opt, opt6_len(opt));
   state->iaid = opt6_uint(opt, 0, 4);
   *ia_option = opt6_find(opt6_ptr(opt, state->ia_type == OPTION6_IA_NA ? 12 : 4), *endp, OPTION6_IAADDR, 24);
@@ -1605,17 +1605,17 @@ static int check_ia(struct state *state, void *opt, void **endp, void **ia_optio
 static int build_ia(struct state *state, int *t1cntr)
 {
   int  o = new_opt6(state->ia_type);
- 
+
   put_opt6_long(state->iaid);
   *t1cntr = 0;
-	    
+
   if (state->ia_type == OPTION6_IA_NA)
     {
       /* save pointer */
       *t1cntr = save_counter(-1);
       /* so we can fill these in later */
       put_opt6_long(0);
-      put_opt6_long(0); 
+      put_opt6_long(0);
     }
 
   return o;
@@ -1632,20 +1632,20 @@ static void end_ia(int t1cntr, unsigned int min_time, int do_fuzz)
       if (do_fuzz)
 	{
 	  fuzz = rand16();
-      
+
 	  while (fuzz > (min_time/16))
 	    fuzz = fuzz/2;
 	}
-      
+
       t1 = (min_time == 0xffffffff) ? 0xffffffff : min_time/2 - fuzz;
       t2 = (min_time == 0xffffffff) ? 0xffffffff : ((min_time/8)*7) - fuzz;
       put_opt6_long(t1);
       put_opt6_long(t2);
       save_counter(sav);
-    }	
+    }
 }
 
-static void add_address(struct state *state, struct dhcp_context *context, unsigned int lease_time, void *ia_option, 
+static void add_address(struct state *state, struct dhcp_context *context, unsigned int lease_time, void *ia_option,
 			unsigned int *min_time, struct in6_addr *addr, time_t now)
 {
   unsigned int valid_time = 0, preferred_time = 0;
@@ -1659,12 +1659,12 @@ static void add_address(struct state *state, struct dhcp_context *context, unsig
       valid_time =  opt6_uint(ia_option, 20, 4);
     }
 
-  calculate_times(context, min_time, &valid_time, &preferred_time, lease_time); 
-  
+  calculate_times(context, min_time, &valid_time, &preferred_time, lease_time);
+
   put_opt6(addr, sizeof(*addr));
   put_opt6_long(preferred_time);
-  put_opt6_long(valid_time); 		    
-  
+  put_opt6_long(valid_time);
+
 #ifdef OPTION6_PREFIX_CLASS
   if (state->send_prefix_class)
     {
@@ -1675,7 +1675,7 @@ static void add_address(struct state *state, struct dhcp_context *context, unsig
 #endif
 
   end_opt6(o);
-  
+
   if (state->lease_allocate)
     update_leases(state, context, addr, valid_time, now);
 
@@ -1687,11 +1687,11 @@ static void add_address(struct state *state, struct dhcp_context *context, unsig
     {
       context->netid.next = state->context_tags;
       state->context_tags = &context->netid;
-      
+
       if (!state->hostname_auth)
 	{
 	  struct dhcp_netid_list *id_list;
-	  
+
 	  for (id_list = daemon->dhcp_ignore_names; id_list; id_list = id_list->next)
 	    if ((!id_list->list) || match_netid(id_list->list, &context->netid, 0))
 	      break;
@@ -1730,13 +1730,13 @@ static void mark_config_used(struct dhcp_context *context, struct in6_addr *addr
 
 /* make sure address not leased to another CLID/IAID */
 static int check_address(struct state *state, struct in6_addr *addr)
-{ 
+{
   struct dhcp_lease *lease;
 
   if (!(lease = lease6_find_by_addr(addr, 128, 0)))
     return 1;
 
-  if (lease->clid_len != state->clid_len || 
+  if (lease->clid_len != state->clid_len ||
       memcmp(lease->clid, state->clid, state->clid_len) != 0 ||
       lease->iaid != state->iaid)
     return 0;
@@ -1745,7 +1745,7 @@ static int check_address(struct state *state, struct in6_addr *addr)
 }
 
 
-/* Calculate valid and preferred times to send in leases/renewals. 
+/* Calculate valid and preferred times to send in leases/renewals.
 
    Inputs are:
 
@@ -1756,17 +1756,17 @@ static int check_address(struct state *state, struct in6_addr *addr)
    *min_time - smallest valid time sent so far.
 
    Outputs are :
-   
+
    *valid_timep, *preferred_timep - times to be send in IAADDR option.
    *min_time - smallest valid time sent so far, to calculate T1 and T2.
-   
+
    */
-static void calculate_times(struct dhcp_context *context, unsigned int *min_time, unsigned int *valid_timep, 
+static void calculate_times(struct dhcp_context *context, unsigned int *min_time, unsigned int *valid_timep,
 			    unsigned int *preferred_timep, unsigned int lease_time)
 {
   unsigned int req_preferred = *preferred_timep, req_valid = *valid_timep;
   unsigned int valid_time = lease_time, preferred_time = lease_time;
-  
+
   /* RFC 3315: "A server ignores the lifetimes set
      by the client if the preferred lifetime is greater than the valid
      lifetime. */
@@ -1777,33 +1777,33 @@ static void calculate_times(struct dhcp_context *context, unsigned int *min_time
 	  /* 0 == "no preference from client" */
 	  if (req_preferred < 120u)
 	    req_preferred = 120u; /* sanity */
-	  
+
 	  if (req_preferred < preferred_time)
 	    preferred_time = req_preferred;
 	}
-      
+
       if (req_valid != 0)
 	/* 0 == "no preference from client" */
 	{
 	  if (req_valid < 120u)
 	    req_valid = 120u; /* sanity */
-	  
+
 	  if (req_valid < valid_time)
 	    valid_time = req_valid;
 	}
     }
 
-  /* deprecate (preferred == 0) which configured, or when local address 
+  /* deprecate (preferred == 0) which configured, or when local address
      is deprecated */
   if ((context->flags & CONTEXT_DEPRECATE) || context->preferred == 0)
     preferred_time = 0;
-  
+
   if (preferred_time != 0 && preferred_time < *min_time)
     *min_time = preferred_time;
-  
+
   if (valid_time != 0 && valid_time < *min_time)
     *min_time = valid_time;
-  
+
   *valid_timep = valid_time;
   *preferred_timep = preferred_time;
 }
@@ -1819,11 +1819,11 @@ static void update_leases(struct state *state, struct dhcp_context *context, str
 
   if (!lease)
     lease = lease6_allocate(addr, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA);
-  
+
   if (lease)
     {
       lease_set_expires(lease, lease_time, now);
-      lease_set_iaid(lease, state->iaid); 
+      lease_set_iaid(lease, state->iaid);
       lease_set_hwaddr(lease, state->mac, state->clid, state->mac_len, state->mac_type, state->clid_len, now, 0);
       lease_set_interface(lease, state->interface, now);
       if (state->hostname && state->ia_type == OPTION6_IA_NA)
@@ -1833,7 +1833,7 @@ static void update_leases(struct state *state, struct dhcp_context *context, str
 	    state->send_domain = addr_domain;
 	  lease_set_hostname(lease, state->hostname, state->hostname_auth, addr_domain, state->domain);
 	}
-      
+
 #ifdef HAVE_SCRIPT
       if (daemon->lease_change_command)
 	{
@@ -1842,8 +1842,8 @@ static void update_leases(struct state *state, struct dhcp_context *context, str
 	  free(lease->extradata);
 	  lease->extradata = NULL;
 	  lease->extradata_size = lease->extradata_len = 0;
-	  lease->vendorclass_count = 0; 
-	  
+	  lease->vendorclass_count = 0;
+
 	  if ((class_opt = opt6_find(state->packet_options, state->end, OPTION6_VENDOR_CLASS, 4)))
 	    {
 	      void *enc_opt, *enc_end = opt6_ptr(class_opt, opt6_len(class_opt));
@@ -1851,18 +1851,18 @@ static void update_leases(struct state *state, struct dhcp_context *context, str
 	      /* send enterprise number first  */
 	      sprintf(daemon->dhcp_buff2, "%u", opt6_uint(class_opt, 0, 4));
 	      lease_add_extradata(lease, (unsigned char *)daemon->dhcp_buff2, strlen(daemon->dhcp_buff2), 0);
-	      
-	      if (opt6_len(class_opt) >= 6) 
+
+	      if (opt6_len(class_opt) >= 6)
 		for (enc_opt = opt6_ptr(class_opt, 4); enc_opt; enc_opt = opt6_next(enc_opt, enc_end))
 		  {
 		    lease->vendorclass_count++;
 		    lease_add_extradata(lease, opt6_ptr(enc_opt, 0), opt6_len(enc_opt), 0);
 		  }
 	    }
-	  
-	  lease_add_extradata(lease, (unsigned char *)state->client_hostname, 
-			      state->client_hostname ? strlen(state->client_hostname) : 0, 0);				
-	  
+
+	  lease_add_extradata(lease, (unsigned char *)state->client_hostname,
+			      state->client_hostname ? strlen(state->client_hostname) : 0, 0);
+
 	  /* space-concat tag set */
 	  if (!tagif && !context->netid.net)
 	    lease_add_extradata(lease, NULL, 0, 0);
@@ -1870,7 +1870,7 @@ static void update_leases(struct state *state, struct dhcp_context *context, str
 	    {
 	      if (context->netid.net)
 		lease_add_extradata(lease, (unsigned char *)context->netid.net, strlen(context->netid.net), tagif ? ' ' : 0);
-	      
+
 	      if (tagif)
 		{
 		  struct dhcp_netid *n;
@@ -1882,16 +1882,16 @@ static void update_leases(struct state *state, struct dhcp_context *context, str
 			if (strcmp(n->net, n1->net) == 0)
 			  break;
 		      if (!n1)
-			lease_add_extradata(lease, (unsigned char *)n->net, strlen(n->net), n->next ? ' ' : 0); 
+			lease_add_extradata(lease, (unsigned char *)n->net, strlen(n->net), n->next ? ' ' : 0);
 		    }
 		}
 	    }
-	  
+
 	  if (state->link_address)
 	    inet_ntop(AF_INET6, state->link_address, daemon->addrbuff, ADDRSTRLEN);
-	  
+
 	  lease_add_extradata(lease, (unsigned char *)daemon->addrbuff, state->link_address ? strlen(daemon->addrbuff) : 0, 0);
-	  
+
 	  if ((class_opt = opt6_find(state->packet_options, state->end, OPTION6_USER_CLASS, 2)))
 	    {
 	      void *enc_opt, *enc_end = opt6_ptr(class_opt, opt6_len(class_opt));
@@ -1899,27 +1899,27 @@ static void update_leases(struct state *state, struct dhcp_context *context, str
 		lease_add_extradata(lease, opt6_ptr(enc_opt, 0), opt6_len(enc_opt), 0);
 	    }
 	}
-#endif	
-      
+#endif
+
     }
 }
-			  
-			
-	
+
+
+
 static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_opts)
 {
   void *opt;
   char *desc = nest ? "nest" : "sent";
-  
+
   if (!option_bool(OPT_LOG_OPTS) || start_opts == end_opts)
     return;
-  
+
   for (opt = start_opts; opt; opt = opt6_next(opt, end_opts))
     {
       int type = opt6_type(opt);
       void *ia_options = NULL;
       char *optname;
-      
+
       if (type == OPTION6_IA_NA)
 	{
 	  sprintf(daemon->namebuff, "IAID=%u T1=%u T2=%u",
@@ -1936,7 +1936,7 @@ static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_op
       else if (type == OPTION6_IAADDR)
 	{
 	  inet_ntop(AF_INET6, opt6_ptr(opt, 0), daemon->addrbuff, ADDRSTRLEN);
-	  sprintf(daemon->namebuff, "%s PL=%u VL=%u", 
+	  sprintf(daemon->namebuff, "%s PL=%u VL=%u",
 		  daemon->addrbuff, opt6_uint(opt, 16, 4), opt6_uint(opt, 20, 4));
 	  optname = "iaaddr";
 	  ia_options = opt6_ptr(opt, 24);
@@ -1961,15 +1961,15 @@ static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_op
 	  int offset = type == OPTION6_FQDN ? 1 : 0;
 	  optname = option_string(AF_INET6, type, opt6_ptr(opt, offset), opt6_len(opt) - offset, daemon->namebuff, MAXDNAME);
 	}
-      
-      my_syslog(MS_DHCP | LOG_INFO, "%u %s size:%3d option:%3d %s  %s", 
+
+      my_syslog(MS_DHCP | LOG_INFO, "%u %s size:%3d option:%3d %s  %s",
 		xid, desc, opt6_len(opt), type, optname, daemon->namebuff);
-      
+
       if (ia_options)
 	log6_opts(1, xid, ia_options, opt6_ptr(opt, opt6_len(opt)));
     }
-}		 
- 
+}
+
 static void log6_quiet(struct state *state, char *type, struct in6_addr *addr, char *string)
 {
   if (option_bool(OPT_LOG_OPTS) || !option_bool(OPT_QUIET_DHCP6))
@@ -1983,7 +1983,7 @@ static void log6_packet(struct state *state, char *type, struct in6_addr *addr,
   /* avoid buffer overflow */
   if (clid_len > 100)
     clid_len = 100;
-  
+
   print_mac(daemon->namebuff, state->clid, clid_len);
 
   if (addr)
@@ -1996,16 +1996,16 @@ static void log6_packet(struct state *state, char *type, struct in6_addr *addr,
 
   if(option_bool(OPT_LOG_OPTS))
     my_syslog(MS_DHCP | LOG_INFO, "%u %s(%s) %s%s %s",
-	      state->xid, 
+	      state->xid,
 	      type,
-	      state->iface_name, 
+	      state->iface_name,
 	      daemon->dhcp_buff2,
 	      daemon->namebuff,
 	      string ? string : "");
   else
     my_syslog(MS_DHCP | LOG_INFO, "%s(%s) %s%s %s",
 	      type,
-	      state->iface_name, 
+	      state->iface_name,
 	      daemon->dhcp_buff2,
 	      daemon->namebuff,
 	      string ? string : "");
@@ -2015,25 +2015,25 @@ static void *opt6_find (void *opts, void *end, unsigned int search, unsigned int
 {
   u16 opt, opt_len;
   void *start;
-  
+
   if (!opts)
     return NULL;
-    
+
   while (1)
     {
-      if (end - opts < 4) 
+      if (end - opts < 4)
 	return NULL;
-      
+
       start = opts;
       GETSHORT(opt, opts);
       GETSHORT(opt_len, opts);
-      
+
       if (opt_len > (end - opts))
 	return NULL;
-      
+
       if (opt == search && (opt_len >= minsize))
 	return start;
-      
+
       opts += opt_len;
     }
 }
@@ -2041,16 +2041,16 @@ static void *opt6_find (void *opts, void *end, unsigned int search, unsigned int
 static void *opt6_next(void *opts, void *end)
 {
   u16 opt_len;
-  
-  if (end - opts < 4) 
+
+  if (end - opts < 4)
     return NULL;
-  
+
   opts += 2;
   GETSHORT(opt_len, opts);
-  
+
   if (opt_len >= (end - opts))
     return NULL;
-  
+
   return opts + opt_len;
 }
 
@@ -2060,18 +2060,18 @@ static unsigned int opt6_uint(unsigned char *opt, int offset, int size)
   unsigned int ret = 0;
   int i;
   unsigned char *p = opt6_ptr(opt, offset);
-  
+
   for (i = 0; i < size; i++)
     ret = (ret << 8) | *p++;
-  
+
   return ret;
-} 
+}
 
-void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, 
+void relay_upstream6(struct dhcp_relay *relay, ssize_t sz,
 		     struct in6_addr *peer_address, u32 scope_id, time_t now)
 {
   /* ->local is same value for all relays on ->current chain */
-  
+
   struct all_addr from;
   unsigned char *header;
   unsigned char *inbuff = daemon->dhcp_packet.iov_base;
@@ -2086,8 +2086,8 @@ void relay_upstream6(struct dhcp_relay *relay, ssize_t sz,
 
   /* source address == relay address */
   from.addr.addr6 = relay->local.addr.addr6;
-    
-  /* Get hop count from nested relayed message */ 
+
+  /* Get hop count from nested relayed message */
   if (msg_type == DHCP6RELAYFORW)
     hopcount = *((unsigned char *)inbuff+1) + 1;
   else
@@ -2107,7 +2107,7 @@ void relay_upstream6(struct dhcp_relay *relay, ssize_t sz,
       header[1] = hopcount;
       memcpy(&header[2],  &relay->local.addr.addr6, IN6ADDRSZ);
       memcpy(&header[18], peer_address, IN6ADDRSZ);
- 
+
       /* RFC-6939 */
       if (maclen != 0)
 	{
@@ -2116,15 +2116,15 @@ void relay_upstream6(struct dhcp_relay *relay, ssize_t sz,
 	  put_opt6(mac, maclen);
 	  end_opt6(o);
 	}
-      
+
       o = new_opt6(OPTION6_RELAY_MSG);
       put_opt6(inbuff, sz);
       end_opt6(o);
-      
+
       for (; relay; relay = relay->current)
 	{
 	  union mysockaddr to;
-	  
+
 	  to.sa.sa_family = AF_INET6;
 	  to.in6.sin6_addr = relay->server.addr.addr6;
 	  to.in6.sin6_port = htons(DHCPV6_SERVER_PORT);
@@ -2139,9 +2139,9 @@ void relay_upstream6(struct dhcp_relay *relay, ssize_t sz,
 		  setsockopt(daemon->dhcp6fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, &multicast_iface, sizeof(multicast_iface)) == -1)
 		my_syslog(MS_DHCP | LOG_ERR, _("Cannot multicast to DHCPv6 server without correct interface"));
 	    }
-		
+
 	  send_from(daemon->dhcp6fd, 0, daemon->outpacket.iov_base, save_counter(-1), &to, &from, 0);
-	  
+
 	  if (option_bool(OPT_LOG_OPTS))
 	    {
 	      inet_ntop(AF_INET6, &relay->local, daemon->addrbuff, ADDRSTRLEN);
@@ -2160,20 +2160,20 @@ unsigned short relay_reply6(struct sockaddr_in6 *peer, ssize_t sz, char *arrival
   struct dhcp_relay *relay;
   struct in6_addr link;
   unsigned char *inbuff = daemon->dhcp_packet.iov_base;
-  
+
   /* must have at least msg_type+hopcount+link_address+peer_address+minimal size option
      which is               1   +    1   +    16      +     16     + 2 + 2 = 38 */
-  
+
   if (sz < 38 || *inbuff != DHCP6RELAYREPL)
     return 0;
-  
-  memcpy(&link, &inbuff[2], IN6ADDRSZ); 
-  
+
+  memcpy(&link, &inbuff[2], IN6ADDRSZ);
+
   for (relay = daemon->relay6; relay; relay = relay->next)
     if (IN6_ARE_ADDR_EQUAL(&link, &relay->local.addr.addr6) &&
 	(!relay->interface || wildcard_match(relay->interface, arrival_interface)))
       break;
-      
+
   reset_counter();
 
   if (relay)
@@ -2185,7 +2185,7 @@ unsigned short relay_reply6(struct sockaddr_in6 *peer, ssize_t sz, char *arrival
 	  {
 	    int encap_type = *((unsigned char *)opt6_ptr(opt, 0));
 	    put_opt6(opt6_ptr(opt, 0), opt6_len(opt));
-	    memcpy(&peer->sin6_addr, &inbuff[18], IN6ADDRSZ); 
+	    memcpy(&peer->sin6_addr, &inbuff[18], IN6ADDRSZ);
 	    peer->sin6_scope_id = relay->iface_index;
 	    return encap_type == DHCP6RELAYREPL ? DHCPV6_SERVER_PORT : DHCPV6_CLIENT_PORT;
 	  }
diff --git a/src/rrfilter.c b/src/rrfilter.c
index 36ff347..26a0499 100644
--- a/src/rrfilter.c
+++ b/src/rrfilter.c
@@ -4,17 +4,17 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-/* Code to safely remove RRs from an DNS answer */ 
+/* Code to safely remove RRs from an DNS answer */
 
 #include "dnsmasq.h"
 
@@ -27,10 +27,10 @@ static int check_name(unsigned char **namep, struct dns_header *header, size_t p
   while(1)
     {
       unsigned int label_type;
-      
+
       if (!CHECK_LEN(header, ansp, plen, 1))
 	return 0;
-      
+
       label_type = (*ansp) & 0xc0;
 
       if (label_type == 0xc0)
@@ -39,7 +39,7 @@ static int check_name(unsigned char **namep, struct dns_header *header, size_t p
 	  unsigned int offset;
 	  int i;
 	  unsigned char *p;
-	  
+
 	  if (!CHECK_LEN(header, ansp, plen, 2))
 	    return 0;
 
@@ -47,7 +47,7 @@ static int check_name(unsigned char **namep, struct dns_header *header, size_t p
 	  offset |= *ansp++;
 
 	  p = offset + (unsigned char *)header;
-	  
+
 	  for (i = 0; i < rr_count; i++)
 	    if (p < rrs[i])
 	      break;
@@ -74,15 +74,15 @@ static int check_name(unsigned char **namep, struct dns_header *header, size_t p
 	{
 	  /* Extended label type */
 	  unsigned int count;
-	  
+
 	  if (!CHECK_LEN(header, ansp, plen, 2))
 	    return 0;
-	  
+
 	  if (((*ansp++) & 0x3f) != 1)
 	    return 0; /* we only understand bitstrings */
-	  
+
 	  count = *(ansp++); /* Bits in bitstring */
-	  
+
 	  if (count == 0) /* count == 0 means 256 bits */
 	    ansp += 32;
 	  else
@@ -91,7 +91,7 @@ static int check_name(unsigned char **namep, struct dns_header *header, size_t p
       else
 	{ /* label type == 0 Bottom six bits is length */
 	  unsigned int len = (*ansp++) & 0x3f;
-	  
+
 	  if (!ADD_RDLEN(header, ansp, plen, len))
 	    return 0;
 
@@ -110,15 +110,15 @@ static int check_rrs(unsigned char *p, struct dns_header *header, size_t plen, i
 {
   int i, j, type, class, rdlen;
   unsigned char *pp;
-  
+
   for (i = 0; i < ntohs(header->ancount) + ntohs(header->nscount) + ntohs(header->arcount); i++)
     {
       pp = p;
 
       if (!(p = skip_name(p, header, plen, 10)))
 	return 0;
-      
-      GETSHORT(type, p); 
+
+      GETSHORT(type, p);
       GETSHORT(class, p);
       p += 4; /* TTL */
       GETSHORT(rdlen, p);
@@ -133,11 +133,11 @@ static int check_rrs(unsigned char *p, struct dns_header *header, size_t plen, i
 	  /* fixup name of RR */
 	  if (!check_name(&pp, header, plen, fixup, rrs, rr_count))
 	    return 0;
-	  
+
 	  if (class == C_IN)
 	    {
 	      u16 *d;
- 
+
 	      for (pp = p, d = rrfilter_desc(type); *d != (u16)-1; d++)
 		{
 		  if (*d != 0)
@@ -147,14 +147,14 @@ static int check_rrs(unsigned char *p, struct dns_header *header, size_t plen, i
 		}
 	    }
 	}
-      
+
       if (!ADD_RDLEN(header, p, plen, rdlen))
 	return 0;
     }
-  
+
   return 1;
 }
-	
+
 
 /* mode is 0 to remove EDNS0, 1 to filter DNSSEC RRs */
 size_t rrfilter(struct dns_header *header, size_t plen, int mode)
@@ -168,13 +168,13 @@ size_t rrfilter(struct dns_header *header, size_t plen, int mode)
   if (ntohs(header->qdcount) != 1 ||
       !(p = skip_name(p, header, plen, 4)))
     return plen;
-  
+
   GETSHORT(qtype, p);
   GETSHORT(qclass, p);
 
   /* First pass, find pointers to start and end of all the records we wish to elide:
      records added for DNSSEC, unless explicitly queried for */
-  for (rr_found = 0, chop_ns = 0, chop_an = 0, chop_ar = 0, i = 0; 
+  for (rr_found = 0, chop_ns = 0, chop_an = 0, chop_ar = 0, i = 0;
        i < ntohs(header->ancount) + ntohs(header->nscount) + ntohs(header->arcount);
        i++)
     {
@@ -183,19 +183,19 @@ size_t rrfilter(struct dns_header *header, size_t plen, int mode)
 
       if (!(p = skip_name(p, header, plen, 10)))
 	return plen;
-      
-      GETSHORT(type, p); 
+
+      GETSHORT(type, p);
       GETSHORT(class, p);
       p += 4; /* TTL */
       GETSHORT(rdlen, p);
-        
+
       if (!ADD_RDLEN(header, p, plen, rdlen))
 	return plen;
 
       /* Don't remove the answer. */
       if (i < ntohs(header->ancount) && type == qtype && class == qclass)
 	continue;
-      
+
       if (mode == 0) /* EDNS */
 	{
 	  /* EDNS mode, remove T_OPT from additional section only */
@@ -205,14 +205,14 @@ size_t rrfilter(struct dns_header *header, size_t plen, int mode)
       else if (type != T_NSEC && type != T_NSEC3 && type != T_RRSIG)
 	/* DNSSEC mode, remove SIGs and NSECs from all three sections. */
 	continue;
-      
-      
+
+
       if (!expand_workspace(&rrs, &rr_sz, rr_found + 1))
-	return plen; 
-      
+	return plen;
+
       rrs[rr_found++] = pstart;
       rrs[rr_found++] = p;
-      
+
       if (i < ntohs(header->ancount))
 	chop_an++;
       else if (i < (ntohs(header->nscount) + ntohs(header->ancount)))
@@ -220,7 +220,7 @@ size_t rrfilter(struct dns_header *header, size_t plen, int mode)
       else
 	chop_ar++;
     }
-  
+
   /* Nothing to do. */
   if (rr_found == 0)
     return plen;
@@ -229,22 +229,22 @@ size_t rrfilter(struct dns_header *header, size_t plen, int mode)
      point to records we're going to elide. This is theoretically possible, but unlikely. If
      it happens, we give up and leave the answer unchanged. */
   p = (unsigned char *)(header+1);
-  
+
   /* question first */
   if (!check_name(&p, header, plen, 0, rrs, rr_found))
     return plen;
   p += 4; /* qclass, qtype */
-  
+
   /* Now answers and NS */
   if (!check_rrs(p, header, plen, 0, rrs, rr_found))
     return plen;
-  
+
   /* Third pass, actually fix up pointers in the records */
   p = (unsigned char *)(header+1);
-  
+
   check_name(&p, header, plen, 1, rrs, rr_found);
   p += 4; /* qclass, qtype */
-  
+
   check_rrs(p, header, plen, 1, rrs, rr_found);
 
   /*  Fouth pass, elide records */
@@ -252,11 +252,11 @@ size_t rrfilter(struct dns_header *header, size_t plen, int mode)
     {
       unsigned char *start = rrs[i];
       unsigned char *end = (i != rr_found - 1) ? rrs[i+1] : ((unsigned char *)header) + plen;
-      
+
       memmove(p, start, end-start);
       p += end-start;
     }
-     
+
   plen = p - (unsigned char *)header;
   header->ancount = htons(ntohs(header->ancount) - chop_an);
   header->nscount = htons(ntohs(header->nscount) - chop_ns);
@@ -276,10 +276,10 @@ u16 *rrfilter_desc(int type)
      zero is not a valid RRtype, so the final entry is returned for
      anything which needs no mangling.
   */
-  
-  static u16 rr_desc[] = 
-    { 
-      T_NS, 0, -1, 
+
+  static u16 rr_desc[] =
+    {
+      T_NS, 0, -1,
       T_MD, 0, -1,
       T_MF, 0, -1,
       T_CNAME, 0, -1,
@@ -300,10 +300,10 @@ u16 *rrfilter_desc(int type)
       T_SRV, 6, 0, -1,
       T_DNAME, 0, -1,
       0, -1 /* wildcard/catchall */
-    }; 
-  
+    };
+
   u16 *p = rr_desc;
-  
+
   while (*p != type && *p != 0)
     while (*p++ != (u16)-1);
 
@@ -322,16 +322,16 @@ int expand_workspace(unsigned char ***wkspc, int *szp, int new)
     return 0;
 
   new += 5;
-  
+
   if (!(p = whine_malloc(new * sizeof(unsigned char *))))
-    return 0;  
-  
+    return 0;
+
   if (old != 0 && *wkspc)
     {
       memcpy(p, *wkspc, old * sizeof(unsigned char *));
       free(*wkspc);
     }
-  
+
   *wkspc = p;
   *szp = new;
 
diff --git a/src/slaac.c b/src/slaac.c
index 50c58aa..748ce81 100644
--- a/src/slaac.c
+++ b/src/slaac.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -27,18 +27,18 @@ void slaac_add_addrs(struct dhcp_lease *lease, time_t now, int force)
   struct slaac_address *slaac, *old, **up;
   struct dhcp_context *context;
   int dns_dirty = 0;
-  
-  if (!(lease->flags & LEASE_HAVE_HWADDR) || 
+
+  if (!(lease->flags & LEASE_HAVE_HWADDR) ||
       (lease->flags & (LEASE_TA | LEASE_NA)) ||
       lease->last_interface == 0 ||
       !lease->hostname)
     return ;
-  
+
   old = lease->slaac_address;
   lease->slaac_address = NULL;
 
-  for (context = daemon->dhcp6; context; context = context->next) 
-    if ((context->flags & CONTEXT_RA_NAME) && 
+  for (context = daemon->dhcp6; context; context = context->next)
+    if ((context->flags & CONTEXT_RA_NAME) &&
 	!(context->flags & CONTEXT_OLD) &&
 	lease->last_interface == context->if_index)
       {
@@ -58,7 +58,7 @@ void slaac_add_addrs(struct dhcp_lease *lease, time_t now, int force)
 	  memcpy(&addr.s6_addr[8], lease->hwaddr, 8);
 #endif
 #if defined(ARPHRD_IEEE1394) && defined(ARPHRD_EUI64)
-	else if (lease->clid_len == 9 && 
+	else if (lease->clid_len == 9 &&
 		 lease->clid[0] ==  ARPHRD_EUI64 &&
 		 lease->hwaddr_type == ARPHRD_IEEE1394)
 	  /* firewire has EUI-64 identifier as clid */
@@ -66,9 +66,9 @@ void slaac_add_addrs(struct dhcp_lease *lease, time_t now, int force)
 #endif
 	else
 	  continue;
-	
+
 	addr.s6_addr[8] ^= 0x02;
-	
+
 	/* check if we already have this one */
 	for (up = &old, slaac = old; slaac; slaac = slaac->next)
 	  {
@@ -86,7 +86,7 @@ void slaac_add_addrs(struct dhcp_lease *lease, time_t now, int force)
 	      }
 	    up = &slaac->next;
 	  }
-	    
+
 	/* No, make new one */
 	if (!slaac && (slaac = whine_malloc(sizeof(struct slaac_address))))
 	  {
@@ -96,17 +96,17 @@ void slaac_add_addrs(struct dhcp_lease *lease, time_t now, int force)
 	    /* Do RA's to prod it */
 	    ra_start_unsolicited(now, context);
 	  }
-	
+
 	if (slaac)
 	  {
 	    slaac->next = lease->slaac_address;
 	    lease->slaac_address = slaac;
 	  }
       }
-  
+
   if (old || dns_dirty)
     lease_update_dns(1);
-  
+
   /* Free any no reused */
   for (; old; old = slaac)
     {
@@ -122,7 +122,7 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases)
   struct dhcp_lease *lease;
   struct slaac_address *slaac;
   time_t next_event = 0;
-  
+
   for (context = daemon->dhcp6; context; context = context->next)
     if ((context->flags & CONTEXT_RA_NAME) && !(context->flags & CONTEXT_OLD))
       break;
@@ -140,12 +140,12 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases)
 	/* confirmed or given up? */
 	if (slaac->backoff == 0 || slaac->ping_time == 0)
 	  continue;
-	
+
 	if (difftime(slaac->ping_time, now) <= 0.0)
 	  {
 	    struct ping_packet *ping;
 	    struct sockaddr_in6 addr;
- 
+
 	    reset_counter();
 
 	    if (!(ping = expand(sizeof(struct ping_packet))))
@@ -155,7 +155,7 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases)
 	    ping->code = 0;
 	    ping->identifier = ping_id;
 	    ping->sequence_no = slaac->backoff;
-	    
+
 	    memset(&addr, 0, sizeof(addr));
 #ifdef HAVE_SOCKADDR_SA_LEN
 	    addr.sin6_len = sizeof(struct sockaddr_in6);
@@ -163,11 +163,11 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases)
 	    addr.sin6_family = AF_INET6;
 	    addr.sin6_port = htons(IPPROTO_ICMPV6);
 	    addr.sin6_addr = slaac->addr;
-	    
+
 	    if (sendto(daemon->icmp6fd, daemon->outpacket.iov_base, save_counter(-1), 0,
 		       (struct sockaddr *)&addr,  sizeof(addr)) == -1 &&
 		errno == EHOSTUNREACH)
-	      slaac->ping_time = 0; /* Give up */ 
+	      slaac->ping_time = 0; /* Give up */
 	    else
 	      {
 		slaac->ping_time += (1 << (slaac->backoff - 1)) + (rand16()/21785); /* 0 - 3 */
@@ -177,7 +177,7 @@ time_t periodic_slaac(time_t now, struct dhcp_lease *leases)
 		  slaac->backoff++;
 	      }
 	  }
-	
+
 	if (slaac->ping_time != 0 &&
 	    (next_event == 0 || difftime(next_event, slaac->ping_time) >= 0.0))
 	  next_event = slaac->ping_time;
@@ -193,7 +193,7 @@ void slaac_ping_reply(struct in6_addr *sender, unsigned char *packet, char *inte
   struct slaac_address *slaac;
   struct ping_packet *ping = (struct ping_packet *)packet;
   int gotone = 0;
-  
+
   if (ping->identifier == ping_id)
     for (lease = leases; lease; lease = lease->next)
       for (slaac = lease->slaac_address; slaac; slaac = slaac->next)
@@ -203,10 +203,10 @@ void slaac_ping_reply(struct in6_addr *sender, unsigned char *packet, char *inte
 	    gotone = 1;
 	    inet_ntop(AF_INET6, sender, daemon->addrbuff, ADDRSTRLEN);
 	    if (!option_bool(OPT_QUIET_DHCP6))
-	      my_syslog(MS_DHCP | LOG_INFO, "SLAAC-CONFIRM(%s) %s %s", interface, daemon->addrbuff, lease->hostname); 
+	      my_syslog(MS_DHCP | LOG_INFO, "SLAAC-CONFIRM(%s) %s %s", interface, daemon->addrbuff, lease->hostname);
 	  }
-  
+
   lease_update_dns(gotone);
 }
-	
+
 #endif
diff --git a/src/tables.c b/src/tables.c
index a3382ce..86efe9d 100644
--- a/src/tables.c
+++ b/src/tables.c
@@ -1,17 +1,17 @@
 /* tables.c is Copyright (c) 2014 Sven Falempin  All Rights Reserved.
 
-   Author's email: sfalempin at citypassenger.com 
+   Author's email: sfalempin at citypassenger.com
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -40,7 +40,7 @@ static int dev = -1;
 
 static char *pfr_strerror(int errnum)
 {
-  switch (errnum) 
+  switch (errnum)
     {
     case ESRCH:
       return "Table does not exist";
@@ -52,7 +52,7 @@ static char *pfr_strerror(int errnum)
 }
 
 
-void ipset_init(void) 
+void ipset_init(void)
 {
   dev = open( pf_device, O_RDWR);
   if (dev == -1)
@@ -69,7 +69,7 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr,
   struct pfioc_table io;
   struct pfr_table table;
 
-  if (dev == -1) 
+  if (dev == -1)
     {
       my_syslog(LOG_ERR, _("warning: no opened pf devices %s"), pf_device);
       return -1;
@@ -83,14 +83,14 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr,
       errno = ENAMETOOLONG;
       return -1;
     }
-  
+
   if (strlcpy(table.pfrt_name, setname,
-	      sizeof(table.pfrt_name)) >= sizeof(table.pfrt_name)) 
+	      sizeof(table.pfrt_name)) >= sizeof(table.pfrt_name))
     {
       my_syslog(LOG_ERR, _("error: cannot strlcpy table name %s"), setname);
       return -1;
     }
-  
+
   bzero(&io, sizeof io);
   io.pfrio_flags = 0;
   io.pfrio_buffer = &table;
@@ -99,23 +99,23 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr,
   if (ioctl(dev, DIOCRADDTABLES, &io))
     {
       my_syslog(LOG_WARNING, _("IPset: error:%s"), pfr_strerror(errno));
-      
+
       return -1;
     }
-  
+
   table.pfrt_flags &= ~PFR_TFLAG_PERSIST;
   if (io.pfrio_nadd)
     my_syslog(LOG_INFO, _("info: table created"));
- 
+
   bzero(&addr, sizeof(addr));
 #ifdef HAVE_IPV6
-  if (flags & F_IPV6) 
+  if (flags & F_IPV6)
     {
       addr.pfra_af = AF_INET6;
       addr.pfra_net = 0x80;
       memcpy(&(addr.pfra_ip6addr), &(ipaddr->addr), sizeof(struct in6_addr));
-    } 
-  else 
+    }
+  else
 #endif
     {
       addr.pfra_af = AF_INET;
@@ -129,15 +129,15 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr,
   io.pfrio_buffer = &addr;
   io.pfrio_esize = sizeof(addr);
   io.pfrio_size = 1;
-  if (ioctl(dev, ( remove ? DIOCRDELADDRS : DIOCRADDADDRS ), &io)) 
+  if (ioctl(dev, ( remove ? DIOCRDELADDRS : DIOCRADDADDRS ), &io))
     {
       my_syslog(LOG_WARNING, _("warning: DIOCR%sADDRS: %s"), ( remove ? "DEL" : "ADD" ), pfr_strerror(errno));
       return -1;
     }
-  
+
   my_syslog(LOG_INFO, _("%d addresses %s"),
             io.pfrio_nadd, ( remove ? "removed" : "added" ));
-  
+
   return io.pfrio_nadd;
 }
 
diff --git a/src/tftp.c b/src/tftp.c
index 131e6de..5713d88 100644
--- a/src/tftp.c
+++ b/src/tftp.c
@@ -4,12 +4,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -78,7 +78,7 @@ void tftp_request(struct listener *listen, time_t now)
 #elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
     char control[CMSG_SPACE(sizeof(struct sockaddr_dl))];
 #endif
-  } control_u; 
+  } control_u;
 
   msg.msg_controllen = sizeof(control_u);
   msg.msg_control = control_u.control;
@@ -123,9 +123,9 @@ void tftp_request(struct listener *listen, time_t now)
 
       if (msg.msg_controllen < sizeof(struct cmsghdr))
         return;
-      
+
       addr.sa.sa_family = listen->family;
-      
+
 #if defined(HAVE_LINUX_NETWORK)
       if (listen->family == AF_INET)
 	for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
@@ -139,7 +139,7 @@ void tftp_request(struct listener *listen, time_t now)
 	      addr.in.sin_addr = p.p->ipi_spec_dst;
 	      if_index = p.p->ipi_ifindex;
 	    }
-      
+
 #elif defined(HAVE_SOLARIS_NETWORK)
       if (listen->family == AF_INET)
 	for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
@@ -155,7 +155,7 @@ void tftp_request(struct listener *listen, time_t now)
 	    else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
 	    if_index = *(p.i);
 	  }
-      
+
 #elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
       if (listen->family == AF_INET)
 	for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
@@ -171,7 +171,7 @@ void tftp_request(struct listener *listen, time_t now)
 	    else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF)
 	      if_index = p.s->sdl_index;
 	  }
-	  
+
 #endif
 
 #ifdef HAVE_IPV6
@@ -185,18 +185,18 @@ void tftp_request(struct listener *listen, time_t now)
                   struct in6_pktinfo *p;
                 } p;
                 p.c = CMSG_DATA(cmptr);
-                  
+
                 addr.in6.sin6_addr = p.p->ipi6_addr;
                 if_index = p.p->ipi6_ifindex;
               }
         }
 #endif
-      
+
       if (!indextoname(listen->tftpfd, if_index, namebuff))
 	return;
 
       name = namebuff;
-      
+
       addra.addr.addr4 = addr.in.sin_addr;
 
 #ifdef HAVE_IPV6
@@ -220,13 +220,13 @@ void tftp_request(struct listener *listen, time_t now)
 	  if (!iface_check(listen->family, &addra, name, NULL))
 	    {
 	      if (!option_bool(OPT_CLEVERBIND))
-		enumerate_interfaces(0); 
+		enumerate_interfaces(0);
 	      if (!loopback_exception(listen->tftpfd, listen->family, &addra, name) &&
 		  !label_exception(if_index, listen->family, &addra) )
 		return;
 	    }
-	  
-#ifdef HAVE_DHCP      
+
+#ifdef HAVE_DHCP
 	  /* allowed interfaces are the same as for DHCP */
 	  for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
 	    if (tmp->name && wildcard_match(tmp->name, name))
@@ -237,9 +237,9 @@ void tftp_request(struct listener *listen, time_t now)
       strncpy(ifr.ifr_name, name, IF_NAMESIZE);
       if (ioctl(listen->tftpfd, SIOCGIFMTU, &ifr) != -1)
 	{
-	  mtu = ifr.ifr_mtu;  
+	  mtu = ifr.ifr_mtu;
 	  if (daemon->tftp_mtu != 0 && daemon->tftp_mtu < mtu)
-	    mtu = daemon->tftp_mtu;    
+	    mtu = daemon->tftp_mtu;
 	}
     }
 
@@ -249,10 +249,10 @@ void tftp_request(struct listener *listen, time_t now)
 
   if (name)
     {
-      /* check for per-interface prefix */ 
+      /* check for per-interface prefix */
       for (pref = daemon->if_prefix; pref; pref = pref->next)
 	if (strcmp(pref->interface, name) == 0)
-	  prefix = pref->prefix;  
+	  prefix = pref->prefix;
     }
 
   if (listen->family == AF_INET)
@@ -276,13 +276,13 @@ void tftp_request(struct listener *listen, time_t now)
 
   if (!(transfer = whine_malloc(sizeof(struct tftp_transfer))))
     return;
-  
+
   if ((transfer->sockfd = socket(listen->family, SOCK_DGRAM, 0)) == -1)
     {
       free(transfer);
       return;
     }
-  
+
   transfer->peer = peer;
   transfer->timeout = now + 2;
   transfer->backoff = 1;
@@ -292,9 +292,9 @@ void tftp_request(struct listener *listen, time_t now)
   transfer->file = NULL;
   transfer->opt_blocksize = transfer->opt_transize = 0;
   transfer->netascii = transfer->carrylf = 0;
- 
+
   prettyprint_addr(&peer, daemon->addrbuff);
-  
+
   /* if we have a nailed-down range, iterate until we find a free one. */
   while (1)
     {
@@ -307,7 +307,7 @@ void tftp_request(struct listener *listen, time_t now)
 	  if (errno == EADDRINUSE && daemon->start_tftp_port != 0)
 	    {
 	      if (++port <= daemon->end_tftp_port)
-		{ 
+		{
 		  if (listen->family == AF_INET)
 		    addr.in.sin_port = htons(port);
 #ifdef HAVE_IPV6
@@ -323,7 +323,7 @@ void tftp_request(struct listener *listen, time_t now)
 	}
       break;
     }
-  
+
   p = packet + 2;
   end = packet + len;
 
@@ -339,7 +339,7 @@ void tftp_request(struct listener *listen, time_t now)
     {
       if (strcasecmp(mode, "netascii") == 0)
 	transfer->netascii = 1;
-      
+
       while ((opt = next(&p, end)))
 	{
 	  if (strcasecmp(opt, "blksize") == 0)
@@ -372,7 +372,7 @@ void tftp_request(struct listener *listen, time_t now)
 	  *p = '/';
 	else if (option_bool(OPT_TFTP_LC))
 	  *p = tolower(*p);
-		
+
       strcpy(daemon->namebuff, "/");
       if (prefix)
 	{
@@ -386,20 +386,20 @@ void tftp_request(struct listener *listen, time_t now)
 	    {
 	      size_t oldlen = strlen(daemon->namebuff);
 	      struct stat statbuf;
-	      
+
 	      strncat(daemon->namebuff, daemon->addrbuff, (MAXDNAME-1) - strlen(daemon->namebuff));
 	      strncat(daemon->namebuff, "/", (MAXDNAME-1) - strlen(daemon->namebuff));
-	      
+
 	      /* remove unique-directory if it doesn't exist */
 	      if (stat(daemon->namebuff, &statbuf) == -1 || !S_ISDIR(statbuf.st_mode))
 		daemon->namebuff[oldlen] = 0;
 	    }
-	  
+
 	  if (option_bool(OPT_TFTP_APREF_MAC))
 	    {
 	      unsigned char *macaddr = NULL;
 	      unsigned char macbuf[DHCP_CHADDR_MAX];
-	      
+
 #ifdef HAVE_DHCP
 	      if (daemon->dhcp && peer.sa.sa_family == AF_INET)
 	        {
@@ -409,11 +409,11 @@ void tftp_request(struct listener *listen, time_t now)
 		    macaddr = lease->hwaddr;
 		}
 #endif
-	      
+
 	      /* If no luck, try to find in ARP table. This only works if client is in same (V)LAN */
 	      if (!macaddr && find_mac(&peer, macbuf, 1, now) > 0)
 		macaddr = macbuf;
-	      
+
 	      if (macaddr)
 	        {
 		  size_t oldlen = strlen(daemon->namebuff);
@@ -421,13 +421,13 @@ void tftp_request(struct listener *listen, time_t now)
 
 		  snprintf(daemon->namebuff + oldlen, (MAXDNAME-1) - oldlen, "%.2x-%.2x-%.2x-%.2x-%.2x-%.2x/",
 			   macaddr[0], macaddr[1], macaddr[2], macaddr[3], macaddr[4], macaddr[5]);
-		  
+
 		  /* remove unique-directory if it doesn't exist */
 		  if (stat(daemon->namebuff, &statbuf) == -1 || !S_ISDIR(statbuf.st_mode))
 		    daemon->namebuff[oldlen] = 0;
 		}
 	    }
-	  
+
 	  /* Absolute pathnames OK if they match prefix */
 	  if (filename[0] == '/')
 	    {
@@ -440,7 +440,7 @@ void tftp_request(struct listener *listen, time_t now)
       else if (filename[0] == '/')
 	daemon->namebuff[0] = 0;
       strncat(daemon->namebuff, filename, (MAXDNAME-1) - strlen(daemon->namebuff));
-      
+
       /* check permissions and open file */
       if ((transfer->file = check_tftp_fileperm(&len, prefix)))
 	{
@@ -450,10 +450,10 @@ void tftp_request(struct listener *listen, time_t now)
 	    is_err = 0;
 	}
     }
-  
-  while (sendto(transfer->sockfd, packet, len, 0, 
+
+  while (sendto(transfer->sockfd, packet, len, 0,
 		(struct sockaddr *)&peer, sa_len(&peer)) == -1 && errno == EINTR);
-  
+
   if (is_err)
     free_transfer(transfer);
   else
@@ -462,7 +462,7 @@ void tftp_request(struct listener *listen, time_t now)
       daemon->tftp_trans = transfer;
     }
 }
- 
+
 static struct tftp_file *check_tftp_fileperm(ssize_t *len, char *prefix)
 {
   char *packet = daemon->packet, *namebuff = daemon->namebuff;
@@ -475,7 +475,7 @@ static struct tftp_file *check_tftp_fileperm(ssize_t *len, char *prefix)
   /* trick to ban moving out of the subtree */
   if (prefix && strstr(namebuff, "/../"))
     goto perm;
-  
+
   if ((fd = open(namebuff, O_RDONLY)) == -1)
     {
       if (errno == ENOENT)
@@ -488,11 +488,11 @@ static struct tftp_file *check_tftp_fileperm(ssize_t *len, char *prefix)
       else
 	goto oops;
     }
-  
+
   /* stat the file descriptor to avoid stat->open races */
   if (fstat(fd, &statbuf) == -1)
     goto oops;
-  
+
   /* running as root, must be world-readable */
   if (uid == 0)
     {
@@ -502,14 +502,14 @@ static struct tftp_file *check_tftp_fileperm(ssize_t *len, char *prefix)
   /* in secure mode, must be owned by user running dnsmasq */
   else if (option_bool(OPT_TFTP_SECURE) && uid != statbuf.st_uid)
     goto perm;
-      
-  /* If we're doing many transfers from the same file, only 
-     open it once this saves lots of file descriptors 
-     when mass-booting a big cluster, for instance. 
+
+  /* If we're doing many transfers from the same file, only
+     open it once this saves lots of file descriptors
+     when mass-booting a big cluster, for instance.
      Be conservative and only share when inode and name match
      this keeps error messages sane. */
   for (t = daemon->tftp_trans; t; t = t->next)
-    if (t->file->dev == statbuf.st_dev && 
+    if (t->file->dev == statbuf.st_dev &&
 	t->file->inode == statbuf.st_ino &&
 	strcmp(t->file->filename, namebuff) == 0)
       {
@@ -517,7 +517,7 @@ static struct tftp_file *check_tftp_fileperm(ssize_t *len, char *prefix)
 	t->file->refcount++;
 	return t->file;
       }
-  
+
   if (!(file = whine_malloc(sizeof(struct tftp_file) + strlen(namebuff) + 1)))
     {
       errno = ENOMEM;
@@ -531,7 +531,7 @@ static struct tftp_file *check_tftp_fileperm(ssize_t *len, char *prefix)
   file->refcount = 1;
   strcpy(file->filename, namebuff);
   return file;
-  
+
  perm:
   errno = EACCES;
   *len =  tftp_err(ERR_PERM, packet, _("cannot access %s: %s"), namebuff);
@@ -550,26 +550,26 @@ void check_tftp_listeners(time_t now)
 {
   struct tftp_transfer *transfer, *tmp, **up;
   ssize_t len;
-  
+
   struct ack {
     unsigned short op, block;
   } *mess = (struct ack *)daemon->packet;
-  
+
   /* Check for activity on any existing transfers */
   for (transfer = daemon->tftp_trans, up = &daemon->tftp_trans; transfer; transfer = tmp)
     {
       tmp = transfer->next;
-      
+
       prettyprint_addr(&transfer->peer, daemon->addrbuff);
-     
+
       if (poll_check(transfer->sockfd, POLLIN))
 	{
 	  /* we overwrote the buffer... */
 	  daemon->srv_save = NULL;
-	  
+
 	  if ((len = recv(transfer->sockfd, daemon->packet, daemon->packet_buff_sz, 0)) >= (ssize_t)sizeof(struct ack))
 	    {
-	      if (ntohs(mess->op) == OP_ACK && ntohs(mess->block) == (unsigned short)transfer->block) 
+	      if (ntohs(mess->op) == OP_ACK && ntohs(mess->block) == (unsigned short)transfer->block)
 		{
 		  /* Got ack, ensure we take the (re)transmit path */
 		  transfer->timeout = now;
@@ -582,34 +582,34 @@ void check_tftp_listeners(time_t now)
 		  char *p = daemon->packet + sizeof(struct ack);
 		  char *end = daemon->packet + len;
 		  char *err = next(&p, end);
-		  
+
 		  /* Sanitise error message */
 		  if (!err)
 		    err = "";
 		  else
 		    sanitise(err);
-		  
+
 		  my_syslog(MS_TFTP | LOG_ERR, _("error %d %s received from %s"),
-			    (int)ntohs(mess->block), err, 
-			    daemon->addrbuff);	
-		  
+			    (int)ntohs(mess->block), err,
+			    daemon->addrbuff);
+
 		  /* Got err, ensure we take abort */
 		  transfer->timeout = now;
 		  transfer->backoff = 100;
 		}
 	    }
 	}
-      
+
       if (difftime(now, transfer->timeout) >= 0.0)
 	{
 	  int endcon = 0;
 
 	  /* timeout, retransmit */
 	  transfer->timeout += 1 + (1<<transfer->backoff);
-	  	  
+
 	  /* we overwrote the buffer... */
 	  daemon->srv_save = NULL;
-	 
+
 	  if ((len = get_block(daemon->packet, transfer)) == -1)
 	    {
 	      len = tftp_err_oops(daemon->packet, transfer->file->filename);
@@ -624,9 +624,9 @@ void check_tftp_listeners(time_t now)
 	    }
 
 	  if (len != 0)
-	    while(sendto(transfer->sockfd, daemon->packet, len, 0, 
+	    while(sendto(transfer->sockfd, daemon->packet, len, 0,
 			 (struct sockaddr *)&transfer->peer, sa_len(&transfer->peer)) == -1 && errno == EINTR);
-	  
+
 	  if (endcon || len == 0)
 	    {
 	      strcpy(daemon->namebuff, transfer->file->filename);
@@ -647,7 +647,7 @@ void check_tftp_listeners(time_t now)
 	}
 
       up = &transfer->next;
-    }    
+    }
 }
 
 static void free_transfer(struct tftp_transfer *transfer)
@@ -666,7 +666,7 @@ static char *next(char **p, char *end)
   char *ret = *p;
   size_t len;
 
-  if (*(end-1) != 0 || 
+  if (*(end-1) != 0 ||
       *p == end ||
       (len = strlen(ret)) == 0)
     return NULL;
@@ -685,7 +685,7 @@ static void sanitise(char *buf)
 
 }
 
-#define MAXMESSAGE 500 /* limit to make packet < 512 bytes and definitely smaller than buffer */ 
+#define MAXMESSAGE 500 /* limit to make packet < 512 bytes and definitely smaller than buffer */
 static ssize_t tftp_err(int err, char *packet, char *message, char *file)
 {
   struct errmess {
@@ -694,17 +694,17 @@ static ssize_t tftp_err(int err, char *packet, char *message, char *file)
   } *mess = (struct errmess *)packet;
   ssize_t len, ret = 4;
   char *errstr = strerror(errno);
-  
+
   memset(packet, 0, daemon->packet_buff_sz);
   sanitise(file);
-  
+
   mess->op = htons(OP_ERR);
   mess->err = htons(err);
   len = snprintf(mess->message, MAXMESSAGE,  message, file, errstr);
   ret += (len < MAXMESSAGE) ? len + 1 : MAXMESSAGE; /* include terminating zero */
-  
+
   my_syslog(MS_TFTP | LOG_ERR, "%s", mess->message);
-  
+
   return  ret;
 }
 
@@ -719,7 +719,7 @@ static ssize_t tftp_err_oops(char *packet, char *file)
 static ssize_t get_block(char *packet, struct tftp_transfer *transfer)
 {
   memset(packet, 0, daemon->packet_buff_sz);
-  
+
   if (transfer->block == 0)
     {
       /* send OACK */
@@ -728,7 +728,7 @@ static ssize_t get_block(char *packet, struct tftp_transfer *transfer)
 	unsigned short op;
 	char data[];
       } *mess = (struct oackmess *)packet;
-      
+
       p = mess->data;
       mess->op = htons(OP_OACK);
       if (transfer->opt_blocksize)
@@ -751,24 +751,24 @@ static ssize_t get_block(char *packet, struct tftp_transfer *transfer)
 	unsigned short op, block;
 	unsigned char data[];
       } *mess = (struct datamess *)packet;
-      
-      size_t size = transfer->file->size - transfer->offset; 
-      
+
+      size_t size = transfer->file->size - transfer->offset;
+
       if (transfer->offset > transfer->file->size)
 	return 0; /* finished */
-      
+
       if (size > transfer->blocksize)
 	size = transfer->blocksize;
-      
+
       mess->op = htons(OP_DATA);
       mess->block = htons((unsigned short)(transfer->block));
-      
+
       if (lseek(transfer->file->fd, transfer->offset, SEEK_SET) == (off_t)-1 ||
 	  !read_write(transfer->file->fd, mess->data, size, 1))
 	return -1;
-      
+
       transfer->expansion = 0;
-      
+
       /* Map '\n' to CR-LF in netascii mode */
       if (transfer->netascii)
 	{
@@ -784,15 +784,15 @@ static ssize_t get_block(char *packet, struct tftp_transfer *transfer)
 		  size++; /* room in this block */
 		else  if (i == size - 1)
 		  newcarrylf = 1; /* don't expand LF again if it moves to the next block */
-		  
+
 		/* make space and insert CR */
 		memmove(&mess->data[i+1], &mess->data[i], size - (i + 1));
 		mess->data[i] = '\r';
-		
+
 		i++;
 	      }
 	  transfer->carrylf = newcarrylf;
-	  
+
 	}
 
       return size + 4;
diff --git a/src/util.c b/src/util.c
index 2a1d448..97cf1f4 100644
--- a/src/util.c
+++ b/src/util.c
@@ -4,17 +4,17 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991, or
    (at your option) version 3 dated 29 June, 2007.
- 
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-      
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-/* The SURF random number generator was taken from djbdns-1.05, by 
+/* The SURF random number generator was taken from djbdns-1.05, by
    Daniel J Bernstein, which is public domain. */
 
 
@@ -40,12 +40,12 @@ static int outleft = 0;
 void rand_init()
 {
   int fd = open(RANDFILE, O_RDONLY);
-  
+
   if (fd == -1 ||
       !read_write(fd, (unsigned char *)&seed, sizeof(seed), 1) ||
       !read_write(fd, (unsigned char *)&in, sizeof(in), 1))
     die(_("failed to seed the random number generator: %s"), NULL, EC_MISC);
-  
+
   close(fd);
 }
 
@@ -73,26 +73,26 @@ static void surf(void)
 
 unsigned short rand16(void)
 {
-  if (!outleft) 
+  if (!outleft)
     {
       if (!++in[0]) if (!++in[1]) if (!++in[2]) ++in[3];
       surf();
       outleft = 8;
     }
-  
+
   return (unsigned short) out[--outleft];
 }
 
 u32 rand32(void)
 {
- if (!outleft) 
+ if (!outleft)
     {
       if (!++in[0]) if (!++in[1]) if (!++in[2]) ++in[3];
       surf();
       outleft = 8;
     }
-  
-  return out[--outleft]; 
+
+  return out[--outleft];
 }
 
 u64 rand64(void)
@@ -105,7 +105,7 @@ u64 rand64(void)
       surf();
       outleft = 8;
     }
-  
+
   outleft -= 2;
 
   return (u64)out[outleft+1] + (((u64)out[outleft]) << 32);
@@ -114,15 +114,15 @@ u64 rand64(void)
 /* returns 2 if names is OK but contains one or more underscores */
 static int check_name(char *in)
 {
-  /* remove trailing . 
+  /* remove trailing .
      also fail empty string and label > 63 chars */
   size_t dotgap = 0, l = strlen(in);
   char c;
   int nowhite = 0;
   int hasuscore = 0;
-  
+
   if (l == 0 || l > MAXDNAME) return 0;
-  
+
   if (in[l-1] == '.')
     {
       in[l-1] = 0;
@@ -135,7 +135,7 @@ static int check_name(char *in)
 	dotgap = 0;
       else if (++dotgap > MAXLABEL)
 	return 0;
-      else if (isascii((unsigned char)c) && iscntrl((unsigned char)c)) 
+      else if (isascii((unsigned char)c) && iscntrl((unsigned char)c))
 	/* iscntrl only gives expected results for ascii */
 	return 0;
 #if !defined(HAVE_IDN) && !defined(HAVE_LIBIDN2)
@@ -157,8 +157,8 @@ static int check_name(char *in)
 }
 
 /* Hostnames have a more limited valid charset than domain names
-   so check for legal char a-z A-Z 0-9 - _ 
-   Note that this may receive a FQDN, so only check the first label 
+   so check for legal char a-z A-Z 0-9 - _
+   Note that this may receive a FQDN, so only check the first label
    for the tighter criteria. */
 int legal_hostname(char *name)
 {
@@ -178,28 +178,28 @@ int legal_hostname(char *name)
 
       if (!first && (c == '-' || c == '_'))
 	continue;
-      
+
       /* end of hostname part */
       if (c == '.')
 	return 1;
-      
+
       return 0;
     }
-  
+
   return 1;
 }
-  
+
 char *canonicalise(char *in, int *nomem)
 {
   char *ret = NULL;
   int rc;
-  
+
   if (nomem)
     *nomem = 0;
-  
+
   if (!(rc = check_name(in)))
     return NULL;
-  
+
 #if defined(HAVE_LIBIDN2) && (!defined(IDN2_VERSION_NUMBER) || IDN2_VERSION_NUMBER < 0x02000003)
   /* older libidn2 strips underscores, so don't do IDN processing
      if the name has an underscore (check_name() returned 2) */
@@ -218,24 +218,24 @@ char *canonicalise(char *in, int *nomem)
 	{
 	  if (ret)
 	    free(ret);
-	  
+
 	  if (nomem && (rc == IDNA_MALLOC_ERROR || rc == IDNA_DLOPEN_ERROR))
 	    {
 	      my_syslog(LOG_ERR, _("failed to allocate memory"));
 	      *nomem = 1;
 	    }
-	  
+
 	  return NULL;
 	}
-      
+
       return ret;
     }
 #endif
-  
+
   if ((ret = whine_malloc(strlen(in)+1)))
     strcpy(ret, in);
   else if (nomem)
-    *nomem = 1;    
+    *nomem = 1;
 
   return ret;
 }
@@ -243,7 +243,7 @@ char *canonicalise(char *in, int *nomem)
 unsigned char *do_rfc1035_name(unsigned char *p, char *sval, char *limit)
 {
   int j;
-  
+
   while (sval && *sval)
     {
       if (limit && p + 1 > (unsigned char*)limit)
@@ -258,7 +258,7 @@ unsigned char *do_rfc1035_name(unsigned char *p, char *sval, char *limit)
 	  if (option_bool(OPT_DNSSEC_VALID) && *sval == NAME_ESCAPE)
 	    *p++ = (*(++sval))-1;
 	  else
-#endif		
+#endif
 	    *p++ = *sval;
 	}
       *cp  = j;
@@ -272,16 +272,16 @@ unsigned char *do_rfc1035_name(unsigned char *p, char *sval, char *limit)
 void *safe_malloc(size_t size)
 {
   void *ret = calloc(1, size);
-  
+
   if (!ret)
     die(_("could not get memory"), NULL, EC_NOMEM);
-      
+
   return ret;
-}    
+}
 
 void safe_pipe(int *fd, int read_noblock)
 {
-  if (pipe(fd) == -1 || 
+  if (pipe(fd) == -1 ||
       !fix_fd(fd[1]) ||
       (read_noblock && !fix_fd(fd[0])))
     die(_("cannot create pipe: %s"), NULL, EC_MISC);
@@ -293,19 +293,19 @@ void *whine_malloc(size_t size)
 
   if (!ret)
     my_syslog(LOG_ERR, _("failed to allocate %d bytes"), (int) size);
-  
+
   return ret;
 }
 
 int sockaddr_isequal(union mysockaddr *s1, union mysockaddr *s2)
 {
   if (s1->sa.sa_family == s2->sa.sa_family)
-    { 
+    {
       if (s1->sa.sa_family == AF_INET &&
 	  s1->in.sin_port == s2->in.sin_port &&
 	  s1->in.sin_addr.s_addr == s2->in.sin_addr.s_addr)
 	return 1;
-#ifdef HAVE_IPV6      
+#ifdef HAVE_IPV6
       if (s1->sa.sa_family == AF_INET6 &&
 	  s1->in6.sin6_port == s2->in6.sin6_port &&
 	  s1->in6.sin6_scope_id == s2->in6.sin6_scope_id &&
@@ -326,7 +326,7 @@ int sa_len(union mysockaddr *addr)
     return sizeof(addr->in6);
   else
 #endif
-    return sizeof(addr->in); 
+    return sizeof(addr->in);
 #endif
 }
 
@@ -334,20 +334,20 @@ int sa_len(union mysockaddr *addr)
 int hostname_isequal(const char *a, const char *b)
 {
   unsigned int c1, c2;
-  
+
   do {
     c1 = (unsigned char) *a++;
     c2 = (unsigned char) *b++;
-    
+
     if (c1 >= 'A' && c1 <= 'Z')
       c1 += 'a' - 'A';
     if (c2 >= 'A' && c2 <= 'Z')
       c2 += 'a' - 'A';
-    
+
     if (c1 != c2)
       return 0;
   } while (c1);
-  
+
   return 1;
 }
 
@@ -370,19 +370,19 @@ int netmask_length(struct in_addr mask)
 {
   int zero_count = 0;
 
-  while (0x0 == (mask.s_addr & 0x1) && zero_count < 32) 
+  while (0x0 == (mask.s_addr & 0x1) && zero_count < 32)
     {
       mask.s_addr >>= 1;
       zero_count++;
     }
-  
+
   return 32 - zero_count;
 }
 
 int is_same_net(struct in_addr a, struct in_addr b, struct in_addr mask)
 {
   return (a.s_addr & mask.s_addr) == (b.s_addr & mask.s_addr);
-} 
+}
 
 #ifdef HAVE_IPV6
 int is_same_net6(struct in6_addr *a, struct in6_addr *b, int prefixlen)
@@ -424,13 +424,13 @@ void setaddr6part(struct in6_addr *addr, u64 host)
 }
 
 #endif
- 
+
 
 /* returns port number from address */
 int prettyprint_addr(union mysockaddr *addr, char *buf)
 {
   int port = 0;
-  
+
 #ifdef HAVE_IPV6
   if (addr->sa.sa_family == AF_INET)
     {
@@ -452,9 +452,9 @@ int prettyprint_addr(union mysockaddr *addr, char *buf)
     }
 #else
   strcpy(buf, inet_ntoa(addr->in.sin_addr));
-  port = ntohs(addr->in.sin_port); 
+  port = ntohs(addr->in.sin_port);
 #endif
-  
+
   return port;
 }
 
@@ -477,26 +477,26 @@ void prettyprint_time(char *buf, unsigned int t)
 }
 
 
-/* in may equal out, when maxlen may be -1 (No max len). 
+/* in may equal out, when maxlen may be -1 (No max len).
    Return -1 for extraneous no-hex chars found. */
-int parse_hex(char *in, unsigned char *out, int maxlen, 
+int parse_hex(char *in, unsigned char *out, int maxlen,
 	      unsigned int *wildcard_mask, int *mac_type)
 {
   int mask = 0, i = 0;
   char *r;
-    
+
   if (mac_type)
     *mac_type = 0;
-  
+
   while (maxlen == -1 || i < maxlen)
     {
       for (r = in; *r != 0 && *r != ':' && *r != '-' && *r != ' '; r++)
 	if (*r != '*' && !isxdigit((unsigned char)*r))
 	  return -1;
-      
+
       if (*r == 0)
 	maxlen = i;
-      
+
       if (r != in )
 	{
 	  if (*r == '-' && i == 0 && mac_type)
@@ -517,7 +517,7 @@ int parse_hex(char *in, unsigned char *out, int maxlen,
 		{
 		  int j, bytes = (1 + (r - in))/2;
 		  for (j = 0; j < bytes; j++)
-		    { 
+		    {
 		      char sav = sav;
 		      if (j < bytes - 1)
 			{
@@ -531,7 +531,7 @@ int parse_hex(char *in, unsigned char *out, int maxlen,
 		      out[i] = strtol(&in[j*2], NULL, 16);
 		      mask = mask << 1;
 		      if (++i == maxlen)
-			break; 
+			break;
 		      if (j < bytes - 1)
 			in[(j+1)*2] = sav;
 		    }
@@ -540,7 +540,7 @@ int parse_hex(char *in, unsigned char *out, int maxlen,
 	}
       in = r+1;
     }
-  
+
   if (wildcard_mask)
     *wildcard_mask = mask;
 
@@ -592,13 +592,13 @@ char *print_mac(char *buff, unsigned char *mac, int len)
 {
   char *p = buff;
   int i;
-   
+
   if (len == 0)
     sprintf(p, "<null>");
   else
     for (i = 0; i < len; i++)
       p += sprintf(p, "%.2x%s", mac[i], (i == len - 1) ? "" : ":");
-  
+
   return buff;
 }
 
@@ -609,17 +609,17 @@ int retry_send(ssize_t rc)
 {
   static int retries = 0;
   struct timespec waiter;
-  
+
   if (rc != -1)
     {
       retries = 0;
       errno = 0;
       return 0;
     }
-  
+
   /* Linux kernels can return EAGAIN in perpetuity when calling
      sendmsg() and the relevant interface has gone. Here we loop
-     retrying in EAGAIN for 1 second max, to avoid this hanging 
+     retrying in EAGAIN for 1 second max, to avoid this hanging
      dnsmasq. */
 
   if (errno == EAGAIN || errno == EWOULDBLOCK)
@@ -630,36 +630,36 @@ int retry_send(ssize_t rc)
        if (retries++ < 1000)
 	 return 1;
      }
-  
+
   retries = 0;
-  
+
   if (errno == EINTR)
     return 1;
-  
+
   return 0;
 }
 
 int read_write(int fd, unsigned char *packet, int size, int rw)
 {
   ssize_t n, done;
-  
+
   for (done = 0; done < size; done += n)
     {
-      do { 
+      do {
 	if (rw)
 	  n = read(fd, &packet[done], (size_t)(size - done));
 	else
 	  n = write(fd, &packet[done], (size_t)(size - done));
-	
+
 	if (n == 0)
 	  return 0;
-	
+
       } while (retry_send(n) || errno == ENOMEM || errno == ENOBUFS);
 
       if (errno != 0)
 	return 0;
     }
-     
+
   return 1;
 }
 
@@ -672,7 +672,7 @@ int wildcard_match(const char* wildcard, const char* match)
         return 1;
 
       if (*wildcard != *match)
-        return 0; 
+        return 0;
 
       ++wildcard;
       ++match;
@@ -690,7 +690,7 @@ int wildcard_matchn(const char* wildcard, const char* match, int num)
         return 1;
 
       if (*wildcard != *match)
-        return 0; 
+        return 0;
 
       ++wildcard;
       ++match;
-- 
2.13.6




More information about the Dnsmasq-discuss mailing list