Hello community,

here is the log from the commit of package dnsmasq for openSUSE:Factory checked 
in at 2020-08-03 14:13:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dnsmasq (Old)
 and      /work/SRC/openSUSE:Factory/.dnsmasq.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "dnsmasq"

Mon Aug  3 14:13:03 2020 rev:78 rq:823748 version:2.82

Changes:
--------
--- /work/SRC/openSUSE:Factory/dnsmasq/dnsmasq.changes  2020-06-04 
17:49:32.483714030 +0200
+++ /work/SRC/openSUSE:Factory/.dnsmasq.new.3592/dnsmasq.changes        
2020-08-03 14:13:49.360405026 +0200
@@ -1,0 +2,18 @@
+Tue Jul 28 08:00:51 UTC 2020 - Martin Rey <m...@suse.com>
+
+- Update to 2.82:
+  * Improve behaviour in the face of network interfaces which come
+    and go and change index.
+  * Convert hard startup failure on NETLINK_NO_ENOBUFS under
+    qemu-user to a warning.
+  * Allow IPv6 addresses ofthe form [::ffff:1.2.3.4] in
+    --dhcp-option.
+  * Fix crash under heavy TCP connection load introduced in 2.81.
+  * Change default lease time for DHCPv6 to one day.
+  * Alter calculation of preferred and valid times in router
+    advertisements, so that these do not have a floor applied of
+    the lease time in the dhcp-range if this is not explicitly
+    specified and is merely the default.
+- Reformat spec file with spec-cleaner
+
+-------------------------------------------------------------------

Old:
----
  dnsmasq-2.81.tar.xz
  dnsmasq-2.81.tar.xz.asc

New:
----
  dnsmasq-2.82.tar.xz
  dnsmasq-2.82.tar.xz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ dnsmasq.spec ++++++
--- /var/tmp/diff_new_pack.tuL7cC/_old  2020-08-03 14:13:50.924406594 +0200
+++ /var/tmp/diff_new_pack.tuL7cC/_new  2020-08-03 14:13:50.928406599 +0200
@@ -21,14 +21,12 @@
 %else
 %bcond_without tftp_user_package
 %endif
-
 Name:           dnsmasq
+Version:        2.82
+Release:        0
 Summary:        DNS Forwarder and DHCP Server
 License:        GPL-2.0-only OR GPL-3.0-only
 Group:          Productivity/Networking/DNS/Servers
-Version:        2.81
-Release:        0
-Provides:       dns_daemon
 URL:            http://www.thekelleys.org.uk/dnsmasq/
 Source0:        http://www.thekelleys.org.uk/%{name}/%{name}-%{version}.tar.xz
 Source1:        
http://www.thekelleys.org.uk/%{name}/%{name}-%{version}.tar.xz.asc
@@ -38,20 +36,20 @@
 Source5:        rc.dnsmasq-suse
 Source8:        %{name}-rpmlintrc
 Patch0:         dnsmasq-groups.patch
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  dbus-1-devel
 BuildRequires:  dos2unix
 BuildRequires:  libidn2-devel
 BuildRequires:  libnettle-devel
 BuildRequires:  lua-devel
-BuildRequires:  pkg-config
+BuildRequires:  pkgconfig
 BuildRequires:  pkgconfig(libnetfilter_conntrack)
 BuildRequires:  pkgconfig(systemd)
 Requires(pre):  group(nogroup)
+Provides:       dns_daemon
 %if %{with tftp_user_package}
 Requires(pre):  user(tftp)
 %else
-Requires(pre):  /usr/sbin/useradd
+Requires(pre):  %{_sbindir}/useradd
 %endif
 
 %description
@@ -83,7 +81,7 @@
 dos2unix contrib/systemd/dbus_activation
 
 # SED-FIX-UPSTREAM -- Fix paths
-sed -i -e 's|\(PREFIX *= *\)/usr/local|\1/usr|;
+sed -i -e 's|\(PREFIX *= *\)%{_prefix}/local|\1/usr|;
           s|$(LDFLAGS)|$(CFLAGS) $(LDFLAGS)|' \
        Makefile
 
@@ -101,31 +99,31 @@
        src/config.h
 
 # Fix trust-anchor.conf location and include /etc/dnsmasq.d/*.conf by default
-sed -i -e '/trust-anchors.conf/c\#conf-file=/etc/dnsmasq.d/trust-anchors.conf' 
\
+sed -i -e 
'/trust-anchors.conf/c\#conf-file=%{_sysconfdir}/dnsmasq.d/trust-anchors.conf' \
        -e '/conf-dir=.*conf/s/^\#//' \
        dnsmasq.conf.example
 
 %build
 mv po/no.po po/nb.po
-export CFLAGS="%optflags -std=gnu99 -fPIC -DPIC -fpie"
+export CFLAGS="%{optflags} -std=gnu99 -fPIC -DPIC -fpie"
 export LDFLAGS="-Wl,-z,relro,-z,now -pie"
 # the dnsmasq make system hashes the configuration flags, so we have to supply 
the
 # same flags for make and make install, else everything gets recompiled
 %define _copts   "-DHAVE_DBUS -DHAVE_CONNTRACK -DHAVE_LIBIDN2 -DHAVE_DNSSEC 
-DHAVE_LUASCRIPT"
-make %{?_smp_mflags} AWK=gawk all-i18n CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" 
COPTS=%{_copts}
+%make_build AWK=gawk all-i18n CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" 
COPTS=%{_copts}
 
 %pre
 %if %{without tftp_user_package}
-if ! /usr/bin/getent group tftp >/dev/null; then
+if ! %{_bindir}/getent group tftp >/dev/null; then
     %{_sbindir}/groupadd -r tftp
 fi
-if ! /usr/bin/getent passwd tftp >/dev/null; then
+if ! %{_bindir}/getent passwd tftp >/dev/null; then
     %{_sbindir}/useradd -c "TFTP account" -d /srv/tftpboot -G tftp -g tftp \
     -r -s /bin/false tftp
 fi
 %endif
-if ! /usr/bin/getent passwd dnsmasq >/dev/null; then
-    /usr/sbin/useradd -r -d /var/lib/empty -s /bin/false -c "dnsmasq" -g 
nogroup -G tftp dnsmasq
+if ! %{_bindir}/getent passwd dnsmasq >/dev/null; then
+    %{_sbindir}/useradd -r -d %{_localstatedir}/lib/empty -s /bin/false -c 
"dnsmasq" -g nogroup -G tftp dnsmasq
 fi
 
 %service_add_pre %{name}.service
@@ -133,8 +131,8 @@
 %post
 %service_add_post %{name}.service
 # reload dbus after install or upgrade to apply new policies
-if [ -z "${TRANSACTIONAL_UPDATE}" -a -x /usr/bin/systemctl ]; then
-        /usr/bin/systemctl reload dbus.service 2>/dev/null || :
+if [ -z "${TRANSACTIONAL_UPDATE}" -a -x %{_bindir}/systemctl ]; then
+        %{_bindir}/systemctl reload dbus.service 2>/dev/null || :
 fi
 
 %preun
@@ -144,22 +142,22 @@
 %service_del_postun %{name}.service
 # reload dbus after uninstall, our policies are gone again
 if [ $1 -eq 0 -a -z "${TRANSACTIONAL_UPDATE}" \
-     -a -x /usr/bin/systemctl ]; then
-        /usr/bin/systemctl reload dbus.service 2>/dev/null || :
+     -a -x %{_bindir}/systemctl ]; then
+        %{_bindir}/systemctl reload dbus.service 2>/dev/null || :
 fi
 
 %install
-make install-i18n DESTDIR=%{buildroot} PREFIX=/usr AWK=gawk COPTS=%{_copts}
+make install-i18n DESTDIR=%{buildroot} PREFIX=%{_prefix} AWK=gawk 
COPTS=%{_copts}
 install -d -m 755 %{buildroot}/%{_sysconfdir}/slp.reg.d
 install -m 644 dnsmasq.conf.example %{buildroot}/%{_sysconfdir}/dnsmasq.conf
-install -m 644 %SOURCE3 %{buildroot}/%{_sysconfdir}/slp.reg.d/
-install -d 755 %{buildroot}/etc/dbus-1/system.d/
-install -m 644 dbus/dnsmasq.conf %{buildroot}/etc/dbus-1/system.d/dnsmasq.conf
-install -D -m 0644 %SOURCE4 %{buildroot}%{_unitdir}/dnsmasq.service
+install -m 644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/slp.reg.d/
+install -d 755 %{buildroot}%{_sysconfdir}/dbus-1/system.d/
+install -m 644 dbus/dnsmasq.conf 
%{buildroot}%{_sysconfdir}/dbus-1/system.d/dnsmasq.conf
+install -D -m 0644 %{SOURCE4} %{buildroot}%{_unitdir}/dnsmasq.service
 %if %{without tftp_user_package}
 install -d -m 0755 %{buildroot}/srv/tftpboot
 %endif
-ln -sf %{_sbindir}/service %{buildroot}/usr/sbin/rcdnsmasq
+ln -sf %{_sbindir}/service %{buildroot}%{_sbindir}/rcdnsmasq
 install -d -m 755 %{buildroot}/%{_sysconfdir}/dnsmasq.d
 install -m 644 trust-anchors.conf 
%{buildroot}/%{_sysconfdir}/dnsmasq.d/trust-anchors.conf
 
@@ -189,8 +187,8 @@
 %{_sbindir}/rcdnsmasq
 %dir %{_sysconfdir}/slp.reg.d/
 %config %attr(0644,root,root) /%{_sysconfdir}/slp.reg.d/dnsmasq.reg
-%{_mandir}/man8/dnsmasq.8.gz
-%config(noreplace) /etc/dbus-1/system.d/dnsmasq.conf
+%{_mandir}/man8/dnsmasq.8%{?ext_man}
+%config(noreplace) %{_sysconfdir}/dbus-1/system.d/dnsmasq.conf
 %{_unitdir}/dnsmasq.service
 %dir %{_sysconfdir}/dnsmasq.d
 %config(noreplace) %{_sysconfdir}/dnsmasq.d/trust-anchors.conf

++++++ dnsmasq-2.81.tar.xz -> dnsmasq-2.82.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/CHANGELOG new/dnsmasq-2.82/CHANGELOG
--- old/dnsmasq-2.81/CHANGELOG  2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/CHANGELOG  2020-07-19 22:54:44.000000000 +0200
@@ -1,6 +1,27 @@
+version 2.82
+       Improve behaviour in the face of network interfaces which come
+       and go and change index. Thanks to Petr Mensik for the patch.
+
+       Convert hard startup failure on NETLINK_NO_ENOBUFS under qemu-user
+       to a warning.
+
+       Allow IPv6 addresses ofthe form [::ffff:1.2.3.4] in --dhcp-option.
+
+       Fix crash under heavy TCP connection load introduced in 2.81.
+       Thanks to Frank for good work chasing this down.
+
+       Change default lease time for DHCPv6 to one day.
+
+       Alter calculation of preferred and valid times in router
+       advertisements, so that these do not have a floor applied
+       of the lease time in the dhcp-range if this is not explicitly
+       specified and is merely the default.
+       Thanks to Martin-Éric Racine for suggestions on this.
+
+       
 version 2.81
        Improve cache behaviour for TCP connections. For ease of
-       implementaion, dnsmasq has always forked a new process to handle
+       implementation, dnsmasq has always forked a new process to handle
        each incoming TCP connection. A side-effect of this is that
        any DNS queries answered from TCP connections are not cached:
        when TCP connections were rare, this was not a problem.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/VERSION new/dnsmasq-2.82/VERSION
--- old/dnsmasq-2.81/VERSION    2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/VERSION    2020-07-19 22:54:44.000000000 +0200
@@ -1 +1 @@
- (HEAD -> master, tag: v2.81, origin/master, origin/HEAD)
+ (HEAD -> master, tag: v2.82, origin/master, origin/HEAD)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/man/dnsmasq.8 
new/dnsmasq-2.82/man/dnsmasq.8
--- old/dnsmasq-2.81/man/dnsmasq.8      2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/man/dnsmasq.8      2020-07-19 22:54:44.000000000 +0200
@@ -428,7 +428,7 @@
 or domain parts, to upstream nameservers. If the name is not known
 from /etc/hosts or DHCP then a "not found" answer is returned.
 .TP
-.B \-S, --local, 
--server=[/[<domain>]/[domain/]][<ipaddr>[#<port>][@<source-ip>|<interface>[#<port>]]
+.B \-S, --local, 
--server=[/[<domain>]/[domain/]][<ipaddr>[#<port>]][@<source-ip>|<interface>[#<port>]]
 Specify IP address of upstream servers directly. Setting this flag does
 not suppress reading of /etc/resolv.conf, use \fB--no-resolv\fP to do that. If 
one or more
 optional domains are given, that server is used only for those domains
@@ -861,7 +861,7 @@
 options. If the lease time is given, then leases
 will be given for that length of time. The lease time is in seconds,
 or minutes (eg 45m) or hours (eg 1h) or "infinite". If not given,
-the default lease time is one hour. The
+the default lease time is one hour for IPv4 and one day for IPv6. The
 minimum lease time is two minutes. For IPv6 ranges, the lease time
 maybe "deprecated"; this sets the preferred lifetime sent in a DHCP
 lease or router advertisement to zero, which causes clients to use
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/cache.c new/dnsmasq-2.82/src/cache.c
--- old/dnsmasq-2.81/src/cache.c        2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/cache.c        2020-07-19 22:54:44.000000000 +0200
@@ -472,16 +472,29 @@
 struct crec *cache_insert(char *name, union all_addr *addr, unsigned short 
class,
                          time_t now,  unsigned long ttl, unsigned int flags)
 {
-  /* Don't log DNSSEC records here, done elsewhere */
-  if (flags & (F_IPV4 | F_IPV6 | F_CNAME | F_SRV))
+#ifdef HAVE_DNSSEC
+  if (flags & (F_DNSKEY | F_DS)) 
     {
+      /* The DNSSEC validation process works by getting needed records into the
+        cache, then retrying the validation until they are all in place.
+        This can be messed up by very short TTLs, and _really_ messed up by
+        zero TTLs, so we force the TTL to be at least long enough to do a 
validation.
+        Ideally, we should use some kind of reference counting so that records 
are
+        locked until the validation that asked for them is complete, but this
+        is much easier, and just as effective. */
+      if (ttl < DNSSEC_MIN_TTL)
+       ttl = DNSSEC_MIN_TTL;
+    }
+  else
+#endif
+    {
+      /* Don't log DNSSEC records here, done elsewhere */
       log_query(flags | F_UPSTREAM, name, addr, NULL);
-      /* Don't mess with TTL for DNSSEC records. */
       if (daemon->max_cache_ttl != 0 && daemon->max_cache_ttl < ttl)
        ttl = daemon->max_cache_ttl;
       if (daemon->min_cache_ttl != 0 && daemon->min_cache_ttl > ttl)
        ttl = daemon->min_cache_ttl;
-    }
+    }  
   
   return really_insert(name, addr, class, now, ttl, flags);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/config.h 
new/dnsmasq-2.82/src/config.h
--- old/dnsmasq-2.81/src/config.h       2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/config.h       2020-07-19 22:54:44.000000000 +0200
@@ -40,9 +40,11 @@
 #define DHCP_PACKET_MAX 16384 /* hard limit on DHCP packet size */
 #define SMALLDNAME 50 /* most domain names are smaller than this */
 #define CNAME_CHAIN 10 /* chains longer than this atr dropped for loop 
protection */
+#define DNSSEC_MIN_TTL 60 /* DNSKEY and DS records in cache last at least this 
long */
 #define HOSTSFILE "/etc/hosts"
 #define ETHERSFILE "/etc/ethers"
-#define DEFLEASE 3600 /* default lease time, 1 hour */
+#define DEFLEASE 3600 /* default DHCPv4 lease time, one hour */
+#define DEFLEASE6 (3600*24) /* default lease time for DHCPv6. One day. */
 #define CHUSER "nobody"
 #define CHGRP "dip"
 #define TFTP_MAX_CONNECTIONS 50 /* max simultaneous connections */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/dbus.c new/dnsmasq-2.82/src/dbus.c
--- old/dnsmasq-2.81/src/dbus.c 2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/dbus.c 2020-07-19 22:54:44.000000000 +0200
@@ -237,7 +237,7 @@
   for (serv = daemon->servers; serv; serv = serv->next)
     if (serv->flags & SERV_LOOP)
       {
-       prettyprint_addr(&serv->addr, daemon->addrbuff);
+       (void)prettyprint_addr(&serv->addr, daemon->addrbuff);
        dbus_message_iter_append_basic (&args_iter, DBUS_TYPE_STRING, 
&daemon->addrbuff);
       }
   
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/dhcp-common.c 
new/dnsmasq-2.82/src/dhcp-common.c
--- old/dnsmasq-2.81/src/dhcp-common.c  2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/dhcp-common.c  2020-07-19 22:54:44.000000000 +0200
@@ -38,7 +38,7 @@
 
 ssize_t recv_dhcp_packet(int fd, struct msghdr *msg)
 {  
-  ssize_t sz;
+  ssize_t sz, new_sz;
  
   while (1)
     {
@@ -65,9 +65,18 @@
        }
     }
   
-  while ((sz = recvmsg(fd, msg, 0)) == -1 && errno == EINTR);
+  while ((new_sz = recvmsg(fd, msg, 0)) == -1 && errno == EINTR);
+
+  /* Some kernels seem to ignore MSG_PEEK, and dequeue the packet anyway. 
+     If that happens we get EAGAIN here because the socket is non-blocking.
+     Use the result of the original testing recvmsg as long as the buffer
+     was big enough. There's a small race here that may lose the odd packet,
+     but it's UDP anyway. */
+  
+  if (new_sz == -1 && (errno == EWOULDBLOCK || errno == EAGAIN))
+    new_sz = sz;
   
-  return (msg->msg_flags & MSG_TRUNC) ? -1 : sz;
+  return (msg->msg_flags & MSG_TRUNC) ? -1 : new_sz;
 }
 
 struct dhcp_netid *run_tag_if(struct dhcp_netid *tags)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/dnsmasq.c 
new/dnsmasq-2.82/src/dnsmasq.c
--- old/dnsmasq-2.81/src/dnsmasq.c      2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/dnsmasq.c      2020-07-19 22:54:44.000000000 +0200
@@ -58,6 +58,7 @@
   char *bound_device = NULL;
   int did_bind = 0;
   struct server *serv;
+  char *netlink_warn;
 #endif 
 #if defined(HAVE_DHCP) || defined(HAVE_DHCP6)
   struct dhcp_context *context;
@@ -327,7 +328,7 @@
 #endif
 
 #if  defined(HAVE_LINUX_NETWORK)
-  netlink_init();
+  netlink_warn = netlink_init();
 #elif defined(HAVE_BSD_NETWORK)
   route_init();
 #endif
@@ -946,6 +947,9 @@
 #  ifdef HAVE_LINUX_NETWORK
   if (did_bind)
     my_syslog(MS_DHCP | LOG_INFO, _("DHCP, sockets bound exclusively to 
interface %s"), bound_device);
+
+  if (netlink_warn)
+    my_syslog(LOG_WARNING, netlink_warn);
 #  endif
 
   /* after dhcp_construct_contexts */
@@ -1820,7 +1824,8 @@
                    addr.addr4 = tcp_addr.in.sin_addr;
                  
                  for (iface = daemon->interfaces; iface; iface = iface->next)
-                   if (iface->index == if_index)
+                   if (iface->index == if_index &&
+                       iface->addr.sa.sa_family == tcp_addr.sa.sa_family)
                      break;
                  
                  if (!iface && !loopback_exception(listener->tcpfd, 
tcp_addr.sa.sa_family, &addr, intr_name))
@@ -1859,31 +1864,30 @@
              else
                {
                  int i;
+#ifdef HAVE_LINUX_NETWORK
+                 /* The child process inherits the netlink socket, 
+                    which it never uses, but when the parent (us) 
+                    uses it in the future, the answer may go to the 
+                    child, resulting in the parent blocking
+                    forever awaiting the result. To avoid this
+                    the child closes the netlink socket, but there's
+                    a nasty race, since the parent may use netlink
+                    before the child has done the close.
+                    
+                    To avoid this, the parent blocks here until a 
+                    single byte comes back up the pipe, which
+                    is sent by the child after it has closed the
+                    netlink socket. */
+                 
+                 unsigned char a;
+                 read_write(pipefd[0], &a, 1, 1);
+#endif
 
                  for (i = 0; i < MAX_PROCS; i++)
                    if (daemon->tcp_pids[i] == 0 && daemon->tcp_pipes[i] == -1)
                      {
-                       char a;
-                       (void)a; /* suppress potential unused warning */
-
                        daemon->tcp_pids[i] = p;
                        daemon->tcp_pipes[i] = pipefd[0];
-#ifdef HAVE_LINUX_NETWORK
-                       /* The child process inherits the netlink socket, 
-                          which it never uses, but when the parent (us) 
-                          uses it in the future, the answer may go to the 
-                          child, resulting in the parent blocking
-                          forever awaiting the result. To avoid this
-                          the child closes the netlink socket, but there's
-                          a nasty race, since the parent may use netlink
-                          before the child has done the close.
-
-                          To avoid this, the parent blocks here until a 
-                          single byte comes back up the pipe, which
-                          is sent by the child after it has closed the
-                          netlink socket. */
-                       retry_send(read(pipefd[0], &a, 1));
-#endif
                        break;
                      }
                }
@@ -1915,16 +1919,16 @@
                 terminate the process. */
              if (!option_bool(OPT_DEBUG))
                {
-                 char a = 0;
-                 (void)a; /* suppress potential unused warning */
+#ifdef HAVE_LINUX_NETWORK
+                 /* See comment above re: netlink socket. */
+                 unsigned char a = 0;
+
+                 close(daemon->netlinkfd);
+                 read_write(pipefd[1], &a, 1, 0);
+#endif           
                  alarm(CHILD_LIFETIME);
                  close(pipefd[0]); /* close read end in child. */
                  daemon->pipe_to_parent = pipefd[1];
-#ifdef HAVE_LINUX_NETWORK
-                 /* See comment above re netlink socket. */
-                 close(daemon->netlinkfd);
-                 retry_send(write(pipefd[1], &a, 1));
-#endif
                }
 
              /* start with no upstream connections. */
@@ -1951,8 +1955,10 @@
                    shutdown(s->tcpfd, SHUT_RDWR);
                    close(s->tcpfd);
                  }
+             
              if (!option_bool(OPT_DEBUG))
                {
+                 close(daemon->pipe_to_parent);
                  flush_log();
                  _exit(0);
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/dnsmasq.h 
new/dnsmasq-2.82/src/dnsmasq.h
--- old/dnsmasq-2.81/src/dnsmasq.h      2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/dnsmasq.h      2020-07-19 22:54:44.000000000 +0200
@@ -572,7 +572,8 @@
 };
 
 struct listener {
-  int fd, tcpfd, tftpfd, family;
+  int fd, tcpfd, tftpfd, used;
+  union mysockaddr addr;
   struct irec *iface; /* only sometimes valid for non-wildcard */
   struct listener *next;
 };
@@ -941,6 +942,7 @@
 #define CONTEXT_OLD            (1u<<16)
 #define CONTEXT_V6             (1u<<17)
 #define CONTEXT_RA_OFF_LINK    (1u<<18)
+#define CONTEXT_SETLEASE       (1u<<19)
 
 struct ping_result {
   struct in_addr addr;
@@ -1450,7 +1452,7 @@
 
 /* netlink.c */
 #ifdef HAVE_LINUX_NETWORK
-void netlink_init(void);
+char *netlink_init(void);
 void netlink_multicast(void);
 #endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/forward.c 
new/dnsmasq-2.82/src/forward.c
--- old/dnsmasq-2.81/src/forward.c      2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/forward.c      2020-07-19 22:54:44.000000000 +0200
@@ -676,7 +676,7 @@
   if (!(header->hb4 & HB4_RA) && rcode == NOERROR &&
       server && !(server->flags & SERV_WARNED_RECURSIVE))
     {
-      prettyprint_addr(&server->addr, daemon->namebuff);
+      (void)prettyprint_addr(&server->addr, daemon->namebuff);
       my_syslog(LOG_WARNING, _("nameserver %s refused to do a recursive 
query"), daemon->namebuff);
       if (!option_bool(OPT_LOG))
        server->flags |= SERV_WARNED_RECURSIVE;
@@ -960,7 +960,7 @@
     {
       forward->sentto->edns_pktsz = SAFE_PKTSZ;
       forward->sentto->pktsz_reduced = now;
-      prettyprint_addr(&forward->sentto->addr, daemon->addrbuff);
+      (void)prettyprint_addr(&forward->sentto->addr, daemon->addrbuff);
       my_syslog(LOG_WARNING, _("reducing DNS packet size for nameserver %s to 
%d"), daemon->addrbuff, SAFE_PKTSZ);
     }
 
@@ -1284,8 +1284,9 @@
                 CMSG_SPACE(sizeof(struct sockaddr_dl))];
 #endif
   } control_u;
+  int family = listen->addr.sa.sa_family;
    /* Can always get recvd interface for IPv6 */
-  int check_dst = !option_bool(OPT_NOWILD) || listen->family == AF_INET6;
+  int check_dst = !option_bool(OPT_NOWILD) || family == AF_INET6;
 
   /* packet buffer overwritten */
   daemon->srv_save = NULL;
@@ -1297,7 +1298,7 @@
     {
       auth_dns = listen->iface->dns_auth;
      
-      if (listen->family == AF_INET)
+      if (family == AF_INET)
        {
          dst_addr_4 = dst_addr.addr4 = listen->iface->addr.in.sin_addr;
          netmask = listen->iface->netmask;
@@ -1327,9 +1328,9 @@
      information disclosure. */
   memset(daemon->packet + n, 0, daemon->edns_pktsz - n);
   
-  source_addr.sa.sa_family = listen->family;
+  source_addr.sa.sa_family = family;
   
-  if (listen->family == AF_INET)
+  if (family == AF_INET)
     {
        /* Source-port == 0 is an error, we can't send back to that. 
          http://www.ietf.org/mail-archive/web/dnsop/current/msg11441.html */
@@ -1349,7 +1350,7 @@
     {
       struct addrlist *addr;
 
-      if (listen->family == AF_INET6) 
+      if (family == AF_INET6) 
        {
          for (addr = daemon->interface_addrs; addr; addr = addr->next)
            if ((addr->flags & ADDRLIST_IPV6) &&
@@ -1387,7 +1388,7 @@
        return;
 
 #if defined(HAVE_LINUX_NETWORK)
-      if (listen->family == AF_INET)
+      if (family == AF_INET)
        for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, 
cmptr))
          if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_PKTINFO)
            {
@@ -1400,7 +1401,7 @@
              if_index = p.p->ipi_ifindex;
            }
 #elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
-      if (listen->family == AF_INET)
+      if (family == AF_INET)
        {
          for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, 
cmptr))
            {
@@ -1425,7 +1426,7 @@
        }
 #endif
       
-      if (listen->family == AF_INET6)
+      if (family == AF_INET6)
        {
          for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, 
cmptr))
            if (cmptr->cmsg_level == IPPROTO_IPV6 && cmptr->cmsg_type == 
daemon->v6pktinfo)
@@ -1446,16 +1447,16 @@
       if (!indextoname(listen->fd, if_index, ifr.ifr_name))
        return;
       
-      if (!iface_check(listen->family, &dst_addr, ifr.ifr_name, &auth_dns))
+      if (!iface_check(family, &dst_addr, ifr.ifr_name, &auth_dns))
        {
           if (!option_bool(OPT_CLEVERBIND))
             enumerate_interfaces(0); 
-          if (!loopback_exception(listen->fd, listen->family, &dst_addr, 
ifr.ifr_name) &&
-              !label_exception(if_index, listen->family, &dst_addr))
+          if (!loopback_exception(listen->fd, family, &dst_addr, ifr.ifr_name) 
&&
+              !label_exception(if_index, family, &dst_addr))
             return;
        }
 
-      if (listen->family == AF_INET && option_bool(OPT_LOCALISE))
+      if (family == AF_INET && option_bool(OPT_LOCALISE))
        {
          struct irec *iface;
          
@@ -1500,7 +1501,7 @@
 #endif
       char *types = querystr(auth_dns ? "auth" : "query", type);
       
-      if (listen->family == AF_INET) 
+      if (family == AF_INET) 
        log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff, 
                  (union all_addr *)&source_addr.in.sin_addr, types);
       else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/netlink.c 
new/dnsmasq-2.82/src/netlink.c
--- old/dnsmasq-2.81/src/netlink.c      2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/netlink.c      2020-07-19 22:54:44.000000000 +0200
@@ -49,7 +49,7 @@
 
 static void nl_async(struct nlmsghdr *h);
 
-void netlink_init(void)
+char *netlink_init(void)
 {
   struct sockaddr_nl addr;
   socklen_t slen = sizeof(addr);
@@ -82,16 +82,21 @@
     }
   
   if (daemon->netlinkfd == -1 || 
-      (daemon->kernel_version >= KERNEL_VERSION(2,6,30) &&
-       setsockopt(daemon->netlinkfd, SOL_NETLINK, NETLINK_NO_ENOBUFS, &opt, 
sizeof(opt)) == -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() */ 
   netlink_pid = addr.nl_pid;
   
   iov.iov_len = 100;
   iov.iov_base = safe_malloc(iov.iov_len);
+  
+  if (daemon->kernel_version >= KERNEL_VERSION(2,6,30) &&
+      setsockopt(daemon->netlinkfd, SOL_NETLINK, NETLINK_NO_ENOBUFS, &opt, 
sizeof(opt)) == -1)
+    return _("warning: failed to set NETLINK_NO_ENOBUFS on netlink socket");
+  
+  return NULL;
 }
 
 static ssize_t netlink_recv(void)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/network.c 
new/dnsmasq-2.82/src/network.c
--- old/dnsmasq-2.81/src/network.c      2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/network.c      2020-07-19 22:54:44.000000000 +0200
@@ -388,10 +388,11 @@
   /* check whether the interface IP has been added already 
      we call this routine multiple times. */
   for (iface = daemon->interfaces; iface; iface = iface->next) 
-    if (sockaddr_isequal(&iface->addr, addr))
+    if (sockaddr_isequal(&iface->addr, addr) && iface->index == if_index)
       {
        iface->dad = !!(iface_flags & IFACE_TENTATIVE);
        iface->found = 1; /* for garbage collection */
+       iface->netmask = netmask;
        return 1;
       }
 
@@ -532,7 +533,82 @@
 
   return iface_allowed((struct iface_param *)vparam, if_index, label, &addr, 
netmask, prefix, 0);
 }
-   
+
+/*
+ * Clean old interfaces no longer found.
+ */
+static void clean_interfaces()
+{
+  struct irec *iface;
+  struct irec **up = &daemon->interfaces;
+
+  for (iface = *up; iface; iface = *up)
+  {
+    if (!iface->found && !iface->done)
+      {
+        *up = iface->next;
+        free(iface->name);
+        free(iface);
+      }
+    else
+      {
+        up = &iface->next;
+      }
+  }
+}
+
+/** Release listener if no other interface needs it.
+ *
+ * @return 1 if released, 0 if still required
+ */
+static int release_listener(struct listener *l)
+{
+  if (l->used > 1)
+    {
+      struct irec *iface;
+      for (iface = daemon->interfaces; iface; iface = iface->next)
+       if (iface->done && sockaddr_isequal(&l->addr, &iface->addr))
+         {
+           if (iface->found)
+             {
+               /* update listener to point to active interface instead */
+               if (!l->iface->found)
+                 l->iface = iface;
+             }
+           else
+             {
+               l->used--;
+               iface->done = 0;
+             }
+         }
+
+      /* Someone is still using this listener, skip its deletion */
+      if (l->used > 0)
+       return 0;
+    }
+
+  if (l->iface->done)
+    {
+      int port;
+
+      port = prettyprint_addr(&l->iface->addr, daemon->addrbuff);
+      my_syslog(LOG_DEBUG, _("stopped listening on %s(#%d): %s port %d"),
+               l->iface->name, l->iface->index, daemon->addrbuff, port);
+      /* 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);
+  return 1;
+}
+
 int enumerate_interfaces(int reset)
 {
   static struct addrlist *spare = NULL;
@@ -630,6 +706,7 @@
         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;
+      int freed = 0;
       
       for (up = &daemon->listeners, l = daemon->listeners; l; l = tmp)
        {
@@ -637,25 +714,17 @@
          
          if (!l->iface || l->iface->found)
            up = &l->next;
-         else
+         else if (release_listener(l))
            {
-             *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);
+             *up = tmp;
+             freed = 1;
            }
        }
+
+      if (freed)
+       clean_interfaces();
     }
-  
+
   errno = errsave;
   spare = param.spare;
     
@@ -895,10 +964,11 @@
     {
       l = safe_malloc(sizeof(struct listener));
       l->next = NULL;
-      l->family = addr->sa.sa_family;
       l->fd = fd;
       l->tcpfd = tcpfd;
-      l->tftpfd = tftpfd;      
+      l->tftpfd = tftpfd;
+      l->addr = *addr;
+      l->used = 1;
       l->iface = NULL;
     }
 
@@ -937,20 +1007,48 @@
   daemon->listeners = l;
 }
 
+static struct listener *find_listener(union mysockaddr *addr)
+{
+  struct listener *l;
+  for (l = daemon->listeners; l; l = l->next)
+    if (sockaddr_isequal(&l->addr, addr))
+      return l;
+  return NULL;
+}
+
 void create_bound_listeners(int dienow)
 {
   struct listener *new;
   struct irec *iface;
   struct iname *if_tmp;
+  struct listener *existing;
 
   for (iface = daemon->interfaces; iface; iface = iface->next)
-    if (!iface->done && !iface->dad && iface->found &&
-       (new = create_listeners(&iface->addr, iface->tftp_ok, dienow)))
+    if (!iface->done && !iface->dad && iface->found)
       {
-       new->iface = iface;
-       new->next = daemon->listeners;
-       daemon->listeners = new;
-       iface->done = 1;
+       existing = find_listener(&iface->addr);
+       if (existing)
+         {
+           iface->done = 1;
+           existing->used++; /* increase usage counter */
+         }
+       else if ((new = create_listeners(&iface->addr, iface->tftp_ok, dienow)))
+         {
+           new->iface = iface;
+           new->next = daemon->listeners;
+           daemon->listeners = new;
+           iface->done = 1;
+
+           /* Don't log the initial set of listen addresses created
+               at startup, since this is happening before the logging
+               system is initialised and the sign-on printed. */
+            if (!dienow)
+              {
+               int port = prettyprint_addr(&iface->addr, daemon->addrbuff);
+               my_syslog(LOG_DEBUG, _("listening on %s(#%d): %s port %d"),
+                         iface->name, iface->index, daemon->addrbuff, port);
+             }
+         }
       }
 
   /* Check for --listen-address options that haven't been used because there's
@@ -970,6 +1068,12 @@
       {
        new->next = daemon->listeners;
        daemon->listeners = new;
+
+       if (!dienow)
+         {
+           int port = prettyprint_addr(&if_tmp->addr, daemon->addrbuff);
+           my_syslog(LOG_DEBUG, _("listening on %s port %d"), 
daemon->addrbuff, port);
+         }
       }
 }
 
@@ -1301,7 +1405,7 @@
        errno != 0 &&
        option_bool(OPT_NOWILD))
       {
-       prettyprint_addr(&srv->source_addr, daemon->namebuff);
+       (void)prettyprint_addr(&srv->source_addr, daemon->namebuff);
        if (srv->interface[0] != 0)
          {
            strcat(daemon->namebuff, " ");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/option.c 
new/dnsmasq-2.82/src/option.c
--- old/dnsmasq-2.81/src/option.c       2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/option.c       2020-07-19 22:54:44.000000000 +0200
@@ -1225,7 +1225,7 @@
          } 
        else if (c == '.')      
          {
-           is_addr6 = is_dec = is_hex = 0;
+           is_dec = is_hex = 0;
            dots++;
          }
        else if (c == '-')
@@ -2991,7 +2991,6 @@
        struct dhcp_context *new = opt_malloc(sizeof(struct dhcp_context));
        
        memset (new, 0, sizeof(*new));
-       new->lease_time = DEFLEASE;
        
        while(1)
          {
@@ -3041,6 +3040,7 @@
        if (inet_pton(AF_INET, a[0], &new->start))
          {
            new->next = daemon->dhcp;
+           new->lease_time = DEFLEASE;
            daemon->dhcp = new;
            new->end = new->start;
            if (strcmp(a[1], "static") == 0)
@@ -3088,6 +3088,7 @@
            new->flags |= CONTEXT_V6; 
            new->prefix = 64; /* default */
            new->end6 = new->start6;
+           new->lease_time = DEFLEASE6;
            new->next = daemon->dhcp6;
            daemon->dhcp6 = new;
 
@@ -3187,7 +3188,10 @@
              }
            
            if (strcmp(a[leasepos], "infinite") == 0)
-             new->lease_time = 0xffffffff;
+             {
+               new->lease_time = 0xffffffff;
+               new->flags |= CONTEXT_SETLEASE;
+             }
            else if (strcmp(a[leasepos], "deprecated") == 0)
              new->flags |= CONTEXT_DEPRECATE;
            else
@@ -3226,6 +3230,7 @@
                      ret_err_free(_("bad dhcp-range"), new);
                    
                    new->lease_time = atoi(a[leasepos]) * fac;
+                   new->flags |= CONTEXT_SETLEASE;
                    /* Leases of a minute or less confuse
                       some clients, notably Apple's */
                    if (new->lease_time < 120)
@@ -3233,6 +3238,7 @@
                  }
              }
          }
+
        break;
       }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/radv.c new/dnsmasq-2.82/src/radv.c
--- old/dnsmasq-2.81/src/radv.c 2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/radv.c 2020-07-19 22:54:44.000000000 +0200
@@ -626,8 +626,11 @@
                    real_prefix = context->prefix;
                  }
 
-               /* find floor time, don't reduce below 3 * RA interval. */
-               if (time > context->lease_time)
+               /* find floor time, don't reduce below 3 * RA interval.
+                  If the lease time has been left as default, don't
+                  use that as a floor. */
+               if ((context->flags & CONTEXT_SETLEASE) &&
+                   time > context->lease_time)
                  {
                    time = context->lease_time;
                    if (time < ((unsigned int)(3 * param->adv_interval)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dnsmasq-2.81/src/tftp.c new/dnsmasq-2.82/src/tftp.c
--- old/dnsmasq-2.81/src/tftp.c 2020-04-08 18:32:53.000000000 +0200
+++ new/dnsmasq-2.82/src/tftp.c 2020-07-19 22:54:44.000000000 +0200
@@ -61,8 +61,9 @@
   char *prefix = daemon->tftp_prefix;
   struct tftp_prefix *pref;
   union all_addr addra;
+  int family = listen->addr.sa.sa_family;
   /* Can always get recvd interface for IPv6 */
-  int check_dest = !option_bool(OPT_NOWILD) || listen->family == AF_INET6;
+  int check_dest = !option_bool(OPT_NOWILD) || family == AF_INET6;
   union {
     struct cmsghdr align; /* this ensures alignment */
     char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
@@ -121,10 +122,10 @@
       if (msg.msg_controllen < sizeof(struct cmsghdr))
         return;
       
-      addr.sa.sa_family = listen->family;
+      addr.sa.sa_family = family;
       
 #if defined(HAVE_LINUX_NETWORK)
-      if (listen->family == AF_INET)
+      if (family == AF_INET)
        for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, 
cmptr))
          if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_PKTINFO)
            {
@@ -138,7 +139,7 @@
            }
       
 #elif defined(HAVE_SOLARIS_NETWORK)
-      if (listen->family == AF_INET)
+      if (family == AF_INET)
        for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, 
cmptr))
          {
            union {
@@ -154,7 +155,7 @@
          }
       
 #elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
-      if (listen->family == AF_INET)
+      if (family == AF_INET)
        for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, 
cmptr))
          {
            union {
@@ -171,7 +172,7 @@
          
 #endif
 
-      if (listen->family == AF_INET6)
+      if (family == AF_INET6)
         {
           for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, 
cmptr))
             if (cmptr->cmsg_level == IPPROTO_IPV6 && cmptr->cmsg_type == 
daemon->v6pktinfo)
@@ -194,7 +195,7 @@
       
       addra.addr4 = addr.in.sin_addr;
 
-      if (listen->family == AF_INET6)
+      if (family == AF_INET6)
        addra.addr6 = addr.in6.sin6_addr;
 
       if (daemon->tftp_interfaces)
@@ -210,12 +211,12 @@
       else
        {
          /* Do the same as DHCP */
-         if (!iface_check(listen->family, &addra, name, NULL))
+         if (!iface_check(family, &addra, name, NULL))
            {
              if (!option_bool(OPT_CLEVERBIND))
                enumerate_interfaces(0); 
-             if (!loopback_exception(listen->tftpfd, listen->family, &addra, 
name) &&
-                 !label_exception(if_index, listen->family, &addra))
+             if (!loopback_exception(listen->tftpfd, family, &addra, name) &&
+                 !label_exception(if_index, family, &addra))
                return;
            }
          
@@ -281,7 +282,7 @@
          prefix = pref->prefix;  
     }
 
-  if (listen->family == AF_INET)
+  if (family == AF_INET)
     {
       addr.in.sin_port = htons(port);
 #ifdef HAVE_SOCKADDR_SA_LEN
@@ -304,7 +305,7 @@
   
   if (option_bool(OPT_SINGLE_PORT))
     transfer->sockfd = listen->tftpfd;
-  else if ((transfer->sockfd = socket(listen->family, SOCK_DGRAM, 0)) == -1)
+  else if ((transfer->sockfd = socket(family, SOCK_DGRAM, 0)) == -1)
     {
       free(transfer);
       return;
@@ -322,7 +323,7 @@
   transfer->opt_blocksize = transfer->opt_transize = 0;
   transfer->netascii = transfer->carrylf = 0;
  
-  prettyprint_addr(&peer, daemon->addrbuff);
+  (void)prettyprint_addr(&peer, daemon->addrbuff);
   
   /* if we have a nailed-down range, iterate until we find a free one. */
   while (!option_bool(OPT_SINGLE_PORT))
@@ -337,7 +338,7 @@
            {
              if (++port <= daemon->end_tftp_port)
                { 
-                 if (listen->family == AF_INET)
+                 if (family == AF_INET)
                    addr.in.sin_port = htons(port);
                  else
                    addr.in6.sin6_port = htons(port);
@@ -375,7 +376,7 @@
              if ((opt = next(&p, end)) && !option_bool(OPT_TFTP_NOBLOCK))
                {
                  /* 32 bytes for IP, UDP and TFTP headers, 52 bytes for IPv6 */
-                 int overhead = (listen->family == AF_INET) ? 32 : 52;
+                 int overhead = (family == AF_INET) ? 32 : 52;
                  transfer->blocksize = atoi(opt);
                  if (transfer->blocksize < 1)
                    transfer->blocksize = 1;
@@ -624,7 +625,7 @@
            {
              strcpy(daemon->namebuff, transfer->file->filename);
              sanitise(daemon->namebuff);
-             prettyprint_addr(&transfer->peer, daemon->addrbuff);
+             (void)prettyprint_addr(&transfer->peer, daemon->addrbuff);
              my_syslog(MS_TFTP | LOG_INFO, endcon ? _("failed sending %s to 
%s") : _("sent %s to %s"), daemon->namebuff, daemon->addrbuff);
              /* unlink */
              *up = tmp;
@@ -667,7 +668,7 @@
          char *end = daemon->packet + len;
          char *err = next(&p, end);
          
-         prettyprint_addr(&transfer->peer, daemon->addrbuff);
+         (void)prettyprint_addr(&transfer->peer, daemon->addrbuff);
          
          /* Sanitise error message */
          if (!err)



Reply via email to