dnsmasq: bump to 2.72
Signed-off-by: Steven Barth <steven@midlink.org> SVN-Revision: 42668
This commit is contained in:
parent
e5ef34ba02
commit
dd948b7990
4 changed files with 3 additions and 404 deletions
|
@ -8,12 +8,12 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=dnsmasq
|
PKG_NAME:=dnsmasq
|
||||||
PKG_VERSION:=2.71
|
PKG_VERSION:=2.72
|
||||||
PKG_RELEASE:=5
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq
|
PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq
|
||||||
PKG_MD5SUM:=15a68f7f6cc0119e843f67d2f79598f1
|
PKG_MD5SUM:=cf82f81cf09ad3d47612985012240483
|
||||||
|
|
||||||
PKG_LICENSE:=GPLv2
|
PKG_LICENSE:=GPLv2
|
||||||
PKG_LICENSE_FILES:=COPYING
|
PKG_LICENSE_FILES:=COPYING
|
||||||
|
|
|
@ -1,77 +0,0 @@
|
||||||
From 063efb330a3f341c2548e2cf1f67f83e49cd6395 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon Kelley <simon@thekelleys.org.uk>
|
|
||||||
Date: Tue, 17 Jun 2014 19:49:31 +0100
|
|
||||||
Subject: [PATCH] Build config: add -DNO_GMP for use with nettle/mini-gmp
|
|
||||||
|
|
||||||
---
|
|
||||||
Makefile | 2 +-
|
|
||||||
bld/pkg-wrapper | 9 +++++++--
|
|
||||||
src/config.h | 7 +++++++
|
|
||||||
src/dnssec.c | 3 ++-
|
|
||||||
4 files changed, 17 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -61,7 +61,7 @@ lua_cflags = `echo $(COPTS) | $(top)/
|
|
||||||
lua_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --libs lua5.1`
|
|
||||||
nettle_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --cflags nettle hogweed`
|
|
||||||
nettle_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --libs nettle hogweed`
|
|
||||||
-gmp_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --copy -lgmp`
|
|
||||||
+gmp_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC NO_GMP --copy -lgmp`
|
|
||||||
sunos_libs = `if uname | grep SunOS >/dev/null 2>&1; then echo -lsocket -lnsl -lposix4; fi`
|
|
||||||
version = -DVERSION='\"`$(top)/bld/get-version $(top)`\"'
|
|
||||||
|
|
||||||
--- a/bld/pkg-wrapper
|
|
||||||
+++ b/bld/pkg-wrapper
|
|
||||||
@@ -11,9 +11,14 @@ in=`cat`
|
|
||||||
|
|
||||||
if grep "^\#[[:space:]]*define[[:space:]]*$search" config.h >/dev/null 2>&1 || \
|
|
||||||
echo $in | grep $search >/dev/null 2>&1; then
|
|
||||||
-
|
|
||||||
+# Nasty, nasty, in --copy, arg 2 is another config to search for, use with NO_GMP
|
|
||||||
if [ $op = "--copy" ]; then
|
|
||||||
- pkg="$*"
|
|
||||||
+ if grep "^\#[[:space:]]*define[[:space:]]*$pkg" config.h >/dev/null 2>&1 || \
|
|
||||||
+ echo $in | grep $pkg >/dev/null 2>&1; then
|
|
||||||
+ pkg=""
|
|
||||||
+ else
|
|
||||||
+ pkg="$*"
|
|
||||||
+ fi
|
|
||||||
elif grep "^\#[[:space:]]*define[[:space:]]*${search}_STATIC" config.h >/dev/null 2>&1 || \
|
|
||||||
echo $in | grep ${search}_STATIC >/dev/null 2>&1; then
|
|
||||||
pkg=`$pkg --static $op $*`
|
|
||||||
--- a/src/config.h
|
|
||||||
+++ b/src/config.h
|
|
||||||
@@ -105,6 +105,8 @@ HAVE_AUTH
|
|
||||||
define this to include the facility to act as an authoritative DNS
|
|
||||||
server for one or more zones.
|
|
||||||
|
|
||||||
+HAVE_DNSSEC
|
|
||||||
+ include DNSSEC validator.
|
|
||||||
|
|
||||||
NO_IPV6
|
|
||||||
NO_TFTP
|
|
||||||
@@ -118,6 +120,11 @@ NO_AUTH
|
|
||||||
which are enabled by default in the distributed source tree. Building dnsmasq
|
|
||||||
with something like "make COPTS=-DNO_SCRIPT" will do the trick.
|
|
||||||
|
|
||||||
+NO_NETTLE_ECC
|
|
||||||
+ Don't include the ECDSA cypher in DNSSEC validation. Needed for older Nettle versions.
|
|
||||||
+NO_GMP
|
|
||||||
+ Don't use and link against libgmp, Useful if nettle is built with --enable-mini-gmp.
|
|
||||||
+
|
|
||||||
LEASEFILE
|
|
||||||
CONFFILE
|
|
||||||
RESOLVFILE
|
|
||||||
--- a/src/dnssec.c
|
|
||||||
+++ b/src/dnssec.c
|
|
||||||
@@ -26,7 +26,8 @@
|
|
||||||
# include <nettle/ecc-curve.h>
|
|
||||||
#endif
|
|
||||||
#include <nettle/nettle-meta.h>
|
|
||||||
-#include <gmp.h>
|
|
||||||
+#include <nettle/bignum.h>
|
|
||||||
+
|
|
||||||
|
|
||||||
#define SERIAL_UNDEF -100
|
|
||||||
#define SERIAL_EQ 0
|
|
|
@ -1,277 +0,0 @@
|
||||||
From a0358e5ddbc1ef3dec791f11f95f5dbe56087a5e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon Kelley <simon@thekelleys.org.uk>
|
|
||||||
Date: Sat, 7 Jun 2014 13:38:48 +0100
|
|
||||||
Subject: [PATCH] Handle async notification of address changes using the event
|
|
||||||
system.
|
|
||||||
|
|
||||||
---
|
|
||||||
CHANGELOG | 4 ++++
|
|
||||||
src/bpf.c | 6 +++---
|
|
||||||
src/dhcp6.c | 10 ----------
|
|
||||||
src/dnsmasq.c | 13 +++++++++++--
|
|
||||||
src/dnsmasq.h | 6 ++++--
|
|
||||||
src/netlink.c | 39 ++++++++++-----------------------------
|
|
||||||
src/network.c | 11 +++--------
|
|
||||||
7 files changed, 35 insertions(+), 54 deletions(-)
|
|
||||||
|
|
||||||
--- a/CHANGELOG
|
|
||||||
+++ b/CHANGELOG
|
|
||||||
@@ -15,6 +15,10 @@ version 2.71
|
|
||||||
regression introduced in 2.69. Thanks to James Hunt and
|
|
||||||
the Ubuntu crowd for assistance in fixing this.
|
|
||||||
|
|
||||||
+ Fix race condition which could lock up dnsmasq when an
|
|
||||||
+ interface goes down and up rapidly. Thanks to Conrad
|
|
||||||
+ Kostecki for helping to chase this down.
|
|
||||||
+
|
|
||||||
|
|
||||||
version 2.70
|
|
||||||
Fix crash, introduced in 2.69, on TCP request when dnsmasq
|
|
||||||
--- a/src/bpf.c
|
|
||||||
+++ b/src/bpf.c
|
|
||||||
@@ -376,7 +376,7 @@ void route_init(void)
|
|
||||||
die(_("cannot create PF_ROUTE socket: %s"), NULL, EC_BADNET);
|
|
||||||
}
|
|
||||||
|
|
||||||
-void route_sock(time_t now)
|
|
||||||
+void route_sock(void)
|
|
||||||
{
|
|
||||||
struct if_msghdr *msg;
|
|
||||||
int rc = recv(daemon->routefd, daemon->packet, daemon->packet_buff_sz, 0);
|
|
||||||
@@ -401,7 +401,7 @@ void route_sock(time_t now)
|
|
||||||
else if (msg->ifm_type == RTM_NEWADDR)
|
|
||||||
{
|
|
||||||
del_family = 0;
|
|
||||||
- newaddress(now);
|
|
||||||
+ send_newaddr();
|
|
||||||
}
|
|
||||||
else if (msg->ifm_type == RTM_DELADDR)
|
|
||||||
{
|
|
||||||
@@ -439,7 +439,7 @@ void route_sock(time_t now)
|
|
||||||
of += sizeof(long) - (diff & (sizeof(long) - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
- newaddress(now);
|
|
||||||
+ send_newaddr();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
--- a/src/dnsmasq.c
|
|
||||||
+++ b/src/dnsmasq.c
|
|
||||||
@@ -917,10 +917,10 @@ int main (int argc, char **argv)
|
|
||||||
|
|
||||||
#if defined(HAVE_LINUX_NETWORK)
|
|
||||||
if (FD_ISSET(daemon->netlinkfd, &rset))
|
|
||||||
- netlink_multicast(now);
|
|
||||||
+ netlink_multicast();
|
|
||||||
#elif defined(HAVE_BSD_NETWORK)
|
|
||||||
if (FD_ISSET(daemon->routefd, &rset))
|
|
||||||
- route_sock(now);
|
|
||||||
+ route_sock();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Check for changes to resolv files once per second max. */
|
|
||||||
@@ -1037,6 +1037,11 @@ void send_alarm(time_t event, time_t now
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+void send_newaddr(void)
|
|
||||||
+{
|
|
||||||
+ send_event(pipewrite, EVENT_NEWADDR, 0, NULL);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void send_event(int fd, int event, int data, char *msg)
|
|
||||||
{
|
|
||||||
struct event_desc ev;
|
|
||||||
@@ -1230,6 +1235,10 @@ static void async_event(int pipe, time_t
|
|
||||||
if (daemon->log_file != NULL)
|
|
||||||
log_reopen(daemon->log_file);
|
|
||||||
break;
|
|
||||||
+
|
|
||||||
+ case EVENT_NEWADDR:
|
|
||||||
+ newaddress(now);
|
|
||||||
+ break;
|
|
||||||
|
|
||||||
case EVENT_TERM:
|
|
||||||
/* Knock all our children on the head. */
|
|
||||||
--- a/src/dnsmasq.h
|
|
||||||
+++ b/src/dnsmasq.h
|
|
||||||
@@ -165,6 +165,7 @@ struct event_desc {
|
|
||||||
#define EVENT_LUA_ERR 19
|
|
||||||
#define EVENT_TFTP_ERR 20
|
|
||||||
#define EVENT_INIT 21
|
|
||||||
+#define EVENT_NEWADDR 22
|
|
||||||
|
|
||||||
/* Exit codes. */
|
|
||||||
#define EC_GOOD 0
|
|
||||||
@@ -1289,6 +1290,7 @@ unsigned char *extended_hwaddr(int hwtyp
|
|
||||||
int make_icmp_sock(void);
|
|
||||||
int icmp_ping(struct in_addr addr);
|
|
||||||
#endif
|
|
||||||
+void send_newaddr(void);
|
|
||||||
void send_alarm(time_t event, time_t now);
|
|
||||||
void send_event(int fd, int event, int data, char *msg);
|
|
||||||
void clear_cache_and_reload(time_t now);
|
|
||||||
@@ -1297,7 +1299,7 @@ void poll_resolv(int force, int do_reloa
|
|
||||||
/* netlink.c */
|
|
||||||
#ifdef HAVE_LINUX_NETWORK
|
|
||||||
void netlink_init(void);
|
|
||||||
-void netlink_multicast(time_t now);
|
|
||||||
+void netlink_multicast(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* bpf.c */
|
|
||||||
@@ -1306,7 +1308,7 @@ void init_bpf(void);
|
|
||||||
void send_via_bpf(struct dhcp_packet *mess, size_t len,
|
|
||||||
struct in_addr iface_addr, struct ifreq *ifr);
|
|
||||||
void route_init(void);
|
|
||||||
-void route_sock(time_t now);
|
|
||||||
+void route_sock(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* bpf.c or netlink.c */
|
|
||||||
--- a/src/netlink.c
|
|
||||||
+++ b/src/netlink.c
|
|
||||||
@@ -38,7 +38,7 @@
|
|
||||||
static struct iovec iov;
|
|
||||||
static u32 netlink_pid;
|
|
||||||
|
|
||||||
-static int nl_async(struct nlmsghdr *h);
|
|
||||||
+static void nl_async(struct nlmsghdr *h);
|
|
||||||
|
|
||||||
void netlink_init(void)
|
|
||||||
{
|
|
||||||
@@ -142,7 +142,7 @@ int iface_enumerate(int family, void *pa
|
|
||||||
struct nlmsghdr *h;
|
|
||||||
ssize_t len;
|
|
||||||
static unsigned int seq = 0;
|
|
||||||
- int callback_ok = 1, newaddr = 0;
|
|
||||||
+ int callback_ok = 1;
|
|
||||||
|
|
||||||
struct {
|
|
||||||
struct nlmsghdr nlh;
|
|
||||||
@@ -191,21 +191,10 @@ int iface_enumerate(int family, void *pa
|
|
||||||
if (h->nlmsg_seq != seq || h->nlmsg_pid != netlink_pid || h->nlmsg_type == NLMSG_ERROR)
|
|
||||||
{
|
|
||||||
/* May be multicast arriving async */
|
|
||||||
- if (nl_async(h))
|
|
||||||
- {
|
|
||||||
- newaddr = 1;
|
|
||||||
- enumerate_interfaces(1); /* reset */
|
|
||||||
- }
|
|
||||||
+ nl_async(h);
|
|
||||||
}
|
|
||||||
else if (h->nlmsg_type == NLMSG_DONE)
|
|
||||||
- {
|
|
||||||
- /* handle async new interface address arrivals, these have to be done
|
|
||||||
- after we complete as we're not re-entrant */
|
|
||||||
- if (newaddr)
|
|
||||||
- newaddress(dnsmasq_time());
|
|
||||||
-
|
|
||||||
- return callback_ok;
|
|
||||||
- }
|
|
||||||
+ return callback_ok;
|
|
||||||
else if (h->nlmsg_type == RTM_NEWADDR && family != AF_UNSPEC && family != AF_LOCAL)
|
|
||||||
{
|
|
||||||
struct ifaddrmsg *ifa = NLMSG_DATA(h);
|
|
||||||
@@ -330,11 +319,11 @@ int iface_enumerate(int family, void *pa
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-void netlink_multicast(time_t now)
|
|
||||||
+void netlink_multicast(void)
|
|
||||||
{
|
|
||||||
ssize_t len;
|
|
||||||
struct nlmsghdr *h;
|
|
||||||
- int flags, newaddr = 0;
|
|
||||||
+ int flags;
|
|
||||||
|
|
||||||
/* don't risk blocking reading netlink messages here. */
|
|
||||||
if ((flags = fcntl(daemon->netlinkfd, F_GETFL)) == -1 ||
|
|
||||||
@@ -343,24 +332,19 @@ void netlink_multicast(time_t now)
|
|
||||||
|
|
||||||
if ((len = netlink_recv()) != -1)
|
|
||||||
for (h = (struct nlmsghdr *)iov.iov_base; NLMSG_OK(h, (size_t)len); h = NLMSG_NEXT(h, len))
|
|
||||||
- if (nl_async(h))
|
|
||||||
- newaddr = 1;
|
|
||||||
+ nl_async(h);
|
|
||||||
|
|
||||||
/* restore non-blocking status */
|
|
||||||
fcntl(daemon->netlinkfd, F_SETFL, flags);
|
|
||||||
-
|
|
||||||
- if (newaddr)
|
|
||||||
- newaddress(now);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int nl_async(struct nlmsghdr *h)
|
|
||||||
+static void nl_async(struct nlmsghdr *h)
|
|
||||||
{
|
|
||||||
if (h->nlmsg_type == NLMSG_ERROR)
|
|
||||||
{
|
|
||||||
struct nlmsgerr *err = NLMSG_DATA(h);
|
|
||||||
if (err->error != 0)
|
|
||||||
my_syslog(LOG_ERR, _("netlink returns error: %s"), strerror(-(err->error)));
|
|
||||||
- return 0;
|
|
||||||
}
|
|
||||||
else if (h->nlmsg_pid == 0 && h->nlmsg_type == RTM_NEWROUTE)
|
|
||||||
{
|
|
||||||
@@ -385,18 +369,15 @@ static int nl_async(struct nlmsghdr *h)
|
|
||||||
else if (daemon->rfd_save && daemon->rfd_save->refcount != 0)
|
|
||||||
fd = daemon->rfd_save->fd;
|
|
||||||
else
|
|
||||||
- return 0;
|
|
||||||
+ return;
|
|
||||||
|
|
||||||
while(sendto(fd, daemon->packet, daemon->packet_len, 0,
|
|
||||||
&daemon->srv_save->addr.sa, sa_len(&daemon->srv_save->addr)) == -1 && retry_send());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- return 0;
|
|
||||||
}
|
|
||||||
else if (h->nlmsg_type == RTM_NEWADDR || h->nlmsg_type == RTM_DELADDR)
|
|
||||||
- return 1; /* clever bind mode - rescan */
|
|
||||||
-
|
|
||||||
- return 0;
|
|
||||||
+ send_newaddr();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
--- a/src/network.c
|
|
||||||
+++ b/src/network.c
|
|
||||||
@@ -551,7 +551,7 @@ static int iface_allowed_v4(struct in_ad
|
|
||||||
int enumerate_interfaces(int reset)
|
|
||||||
{
|
|
||||||
static struct addrlist *spare = NULL;
|
|
||||||
- static int done = 0, active = 0;
|
|
||||||
+ static int done = 0;
|
|
||||||
struct iface_param param;
|
|
||||||
int errsave, ret = 1;
|
|
||||||
struct addrlist *addr, *tmp;
|
|
||||||
@@ -570,14 +570,11 @@ int enumerate_interfaces(int reset)
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (done || active)
|
|
||||||
+ if (done)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
done = 1;
|
|
||||||
|
|
||||||
- /* protect against recusive calls from iface_enumerate(); */
|
|
||||||
- active = 1;
|
|
||||||
-
|
|
||||||
if ((param.fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
@@ -677,10 +674,8 @@ int enumerate_interfaces(int reset)
|
|
||||||
}
|
|
||||||
|
|
||||||
errno = errsave;
|
|
||||||
-
|
|
||||||
spare = param.spare;
|
|
||||||
- active = 0;
|
|
||||||
-
|
|
||||||
+
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
From 5782649ad95382dd558df97b33b64e854d8789fb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon Kelley <simon@thekelleys.org.uk>
|
|
||||||
Date: Thu, 18 Sep 2014 22:08:58 +0100
|
|
||||||
Subject: [PATCH] Fix bug which caused dnsmasq to become unresponsive when an
|
|
||||||
interface goes.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/src/util.c b/src/util.c
|
|
||||||
index df751c7..a729f33 100644
|
|
||||||
--- a/src/util.c
|
|
||||||
+++ b/src/util.c
|
|
||||||
@@ -570,18 +570,28 @@ void bump_maxfd(int fd, int *max)
|
|
||||||
|
|
||||||
int retry_send(void)
|
|
||||||
{
|
|
||||||
- struct timespec waiter;
|
|
||||||
+ /* 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
|
|
||||||
+ dnsmasq. */
|
|
||||||
+
|
|
||||||
+ static int retries = 0;
|
|
||||||
+ struct timespec waiter;
|
|
||||||
+
|
|
||||||
if (errno == EAGAIN || errno == EWOULDBLOCK)
|
|
||||||
{
|
|
||||||
waiter.tv_sec = 0;
|
|
||||||
waiter.tv_nsec = 10000;
|
|
||||||
nanosleep(&waiter, NULL);
|
|
||||||
- return 1;
|
|
||||||
+ if (retries++ < 1000)
|
|
||||||
+ return 1;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ retries = 0;
|
|
||||||
|
|
||||||
if (errno == EINTR)
|
|
||||||
return 1;
|
|
||||||
-
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
1.9.1
|
|
||||||
|
|
Loading…
Reference in a new issue