Date: Wednesday, August 31, 2016 @ 17:29:19 Author: eworm Revision: 275622
upgpkg: dnsmasq 2.76-2 * convert to sysusers * move dbus policy to /usr/share/dbus-1/system.d/ * handle binding upstream servers to an interface (upstream commits 2675f2061525bc954be14988d64384b74aa7bf8b and 16800ea072dd0cdf14d951c4bb8d2808b3dfe53d) Added: dnsmasq/trunk/0001-Handle-binding-upstream-servers-to-an-interface.patch dnsmasq/trunk/dnsmasq-sysusers.conf Modified: dnsmasq/trunk/PKGBUILD dnsmasq/trunk/dnsmasq.install ------------------------------------------------------------+ 0001-Handle-binding-upstream-servers-to-an-interface.patch | 123 +++++++++++ PKGBUILD | 16 + dnsmasq-sysusers.conf | 1 dnsmasq.install | 16 - 4 files changed, 145 insertions(+), 11 deletions(-) Added: 0001-Handle-binding-upstream-servers-to-an-interface.patch =================================================================== --- 0001-Handle-binding-upstream-servers-to-an-interface.patch (rev 0) +++ 0001-Handle-binding-upstream-servers-to-an-interface.patch 2016-08-31 17:29:19 UTC (rev 275622) @@ -0,0 +1,123 @@ +From f7fcfebdbc3c57570d2f6de35f38c72ce6c80143 Mon Sep 17 00:00:00 2001 +From: Christian Hesse <m...@eworm.de> +Date: Wed, 31 Aug 2016 18:42:22 +0200 +Subject: [PATCH 1/1] Handle binding upstream servers to an interface + +upstream commits: + +* 2675f2061525bc954be14988d64384b74aa7bf8b +* 16800ea072dd0cdf14d951c4bb8d2808b3dfe53d + +Signed-off-by: Christian Hesse <m...@eworm.de> +--- + src/dnsmasq.h | 1 + + src/network.c | 32 ++++++++++++++++++++++++++++++-- + 2 files changed, 31 insertions(+), 2 deletions(-) + +diff --git a/src/dnsmasq.h b/src/dnsmasq.h +index 1896a64..aa5ec84 100644 +--- a/src/dnsmasq.h ++++ b/src/dnsmasq.h +@@ -487,6 +487,7 @@ struct serverfd { + int fd; + union mysockaddr source_addr; + char interface[IF_NAMESIZE+1]; ++ unsigned int ifindex, used; + struct serverfd *next; + }; + +diff --git a/src/network.c b/src/network.c +index e7722fd..d87d08f 100644 +--- a/src/network.c ++++ b/src/network.c +@@ -1204,6 +1204,7 @@ int local_bind(int fd, union mysockaddr *addr, char *intname, int is_tcp) + static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname) + { + struct serverfd *sfd; ++ unsigned int ifindex = 0; + int errsave; + + /* when using random ports, servers which would otherwise use +@@ -1224,11 +1225,15 @@ static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname) + 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) ++ strcmp(intname, sfd->interface) == 0 && ++ ifindex == sfd->ifindex) + return sfd; + + /* need to make a new one. */ +@@ -1250,11 +1255,13 @@ static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname) + errno = errsave; + return NULL; + } +- ++ + strcpy(sfd->interface, intname); + sfd->source_addr = *addr; + sfd->next = daemon->sfds; ++ sfd->ifindex = ifindex; + daemon->sfds = sfd; ++ + return sfd; + } + +@@ -1429,12 +1436,16 @@ void check_servers(void) + { + struct irec *iface; + struct server *serv; ++ struct serverfd *sfd, *tmp, **up; + int port = 0, count; + + /* 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; ++ + #ifdef HAVE_DNSSEC + /* Disable DNSSEC validation when using server=/domain/.... servers + unless there's a configured trust anchor. */ +@@ -1505,6 +1516,9 @@ void check_servers(void) + serv->flags |= SERV_MARK; + continue; + } ++ ++ if (serv->sfd) ++ serv->sfd->used = 1; + } + + if (!(serv->flags & SERV_NO_REBIND) && !(serv->flags & SERV_LITERAL_ADDRESS)) +@@ -1547,6 +1561,20 @@ void check_servers(void) + if (count - 1 > SERVERS_LOGGED) + my_syslog(LOG_INFO, _("using %d more nameservers"), count - SERVERS_LOGGED - 1); + ++ /* Remove unused sfds */ ++ for (sfd = daemon->sfds, up = &daemon->sfds; sfd; sfd = tmp) ++ { ++ tmp = sfd->next; ++ if (!sfd->used) ++ { ++ *up = sfd->next; ++ close(sfd->fd); ++ free(sfd); ++ } ++ else ++ up = &sfd->next; ++ } ++ + cleanup_servers(); + } + +-- +2.9.3 + Modified: PKGBUILD =================================================================== --- PKGBUILD 2016-08-31 16:31:36 UTC (rev 275621) +++ PKGBUILD 2016-08-31 17:29:19 UTC (rev 275622) @@ -5,7 +5,7 @@ pkgname=dnsmasq pkgver=2.76 -pkgrel=1 +pkgrel=2 pkgdesc="Lightweight, easy to configure DNS forwarder and DHCP server" url="http://www.thekelleys.org.uk/dnsmasq/doc.html" arch=('i686' 'x86_64') @@ -14,14 +14,25 @@ install=$pkgname.install backup=('etc/dnsmasq.conf') source=("http://www.thekelleys.org.uk/$pkgname/$pkgname-$pkgver.tar.xz"{,.asc} + '0001-Handle-binding-upstream-servers-to-an-interface.patch' + 'dnsmasq-sysusers.conf' 'dnsmasq.service') md5sums=('00f5ee66b4e4b7f14538bf62ae3c9461' 'SKIP' + '2d64212b5e69696fc61948f9b86d6999' + '8d07ccf412c107d068ec5cc6964788aa' 'b87f68013c3e8b4bb37117de968d4603') validpgpkeys=('269322E7D9255916E0394DD628FC869A289B82B7') # Simon Kelley _build_copts="-DHAVE_DNSSEC -DHAVE_DBUS -DHAVE_IDN -DHAVE_CONNTRACK" +prepare() { + cd "$pkgname-$pkgver" + + # Handle binding upstream servers to an interface + patch -Np1 < "$srcdir/0001-Handle-binding-upstream-servers-to-an-interface.patch" +} + build() { cd "$pkgname-$pkgver" @@ -41,9 +52,10 @@ BINDIR=/usr/bin PREFIX=/usr DESTDIR="$pkgdir" \ install install-i18n - install -Dm644 "dbus/dnsmasq.conf" "$pkgdir"/etc/dbus-1/system.d/dnsmasq.conf + install -Dm644 "dbus/dnsmasq.conf" "$pkgdir"/usr/share/dbus-1/system.d/dnsmasq.conf install -Dm644 "dnsmasq.conf.example" "$pkgdir"/etc/dnsmasq.conf install -Dm644 "$srcdir/dnsmasq.service" "$pkgdir"/usr/lib/systemd/system/dnsmasq.service + install -Dm644 "$srcdir/dnsmasq-sysusers.conf" "$pkgdir"/usr/lib/sysusers.d/dnsmasq.conf # DNSSEC setup sed -i 's,%%PREFIX%%,/usr,' "$pkgdir"/etc/dnsmasq.conf Added: dnsmasq-sysusers.conf =================================================================== --- dnsmasq-sysusers.conf (rev 0) +++ dnsmasq-sysusers.conf 2016-08-31 17:29:19 UTC (rev 275622) @@ -0,0 +1 @@ +u dnsmasq - "dnsmasq daemon" / Modified: dnsmasq.install =================================================================== --- dnsmasq.install 2016-08-31 16:31:36 UTC (rev 275621) +++ dnsmasq.install 2016-08-31 17:29:19 UTC (rev 275622) @@ -1,15 +1,13 @@ #!/bin/sh -add_dnsmasq_user() { - if ! getent passwd dnsmasq >/dev/null; then - useradd -r -d / -c 'dnsmasq daemon' -s /usr/bin/nologin dnsmasq +post_install() { + if hash systemd-sysusers &> /dev/null; then + systemd-sysusers dnsmasq.conf fi } -post_install() { - add_dnsmasq_user +post_upgrade(){ + if hash systemd-sysusers &> /dev/null; then + systemd-sysusers dnsmasq.conf + fi } - -post_upgrade() { - add_dnsmasq_user -}