Accepting request 449467 from home:mwilck:branches:network
- Handle binding upstream servers to an interface if interface is destroyed and recreated (boo#1018160) Added two patches from upstream: * added Handle-binding-upstream-servers-to-an-interface.patch * added Fix-crash-introduced-in-2675f2061525bc954be14988d643.patch OBS-URL: https://build.opensuse.org/request/show/449467 OBS-URL: https://build.opensuse.org/package/show/network/dnsmasq?expand=0&rev=86
This commit is contained in:
parent
428579c9fb
commit
13ce29f32b
29
Fix-crash-introduced-in-2675f2061525bc954be14988d643.patch
Normal file
29
Fix-crash-introduced-in-2675f2061525bc954be14988d643.patch
Normal file
@ -0,0 +1,29 @@
|
||||
From 16800ea072dd0cdf14d951c4bb8d2808b3dfe53d Mon Sep 17 00:00:00 2001
|
||||
From: Simon Kelley <simon@thekelleys.org.uk>
|
||||
Date: Tue, 30 Aug 2016 23:07:06 +0100
|
||||
Subject: [PATCH 4/4] Fix crash introduced in
|
||||
2675f2061525bc954be14988d64384b74aa7bf8b
|
||||
|
||||
---
|
||||
src/network.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/network.c b/src/network.c
|
||||
index ddf8d31..d87d08f 100644
|
||||
--- a/src/network.c
|
||||
+++ b/src/network.c
|
||||
@@ -1516,8 +1516,9 @@ void check_servers(void)
|
||||
serv->flags |= SERV_MARK;
|
||||
continue;
|
||||
}
|
||||
-
|
||||
- serv->sfd->used = 1;
|
||||
+
|
||||
+ if (serv->sfd)
|
||||
+ serv->sfd->used = 1;
|
||||
}
|
||||
|
||||
if (!(serv->flags & SERV_NO_REBIND) && !(serv->flags & SERV_LITERAL_ADDRESS))
|
||||
--
|
||||
2.11.0
|
||||
|
119
Handle-binding-upstream-servers-to-an-interface.patch
Normal file
119
Handle-binding-upstream-servers-to-an-interface.patch
Normal file
@ -0,0 +1,119 @@
|
||||
From 2675f2061525bc954be14988d64384b74aa7bf8b Mon Sep 17 00:00:00 2001
|
||||
From: Beniamino Galvani <bgalvani@redhat.com>
|
||||
Date: Sun, 28 Aug 2016 20:44:05 +0100
|
||||
Subject: [PATCH 1/4] Handle binding upstream servers to an interface
|
||||
(--server=1.2.3.4@eth0) when the named interface is destroyed and recreated
|
||||
in the kernel.
|
||||
|
||||
---
|
||||
CHANGELOG | 5 +++++
|
||||
src/dnsmasq.h | 1 +
|
||||
src/network.c | 31 +++++++++++++++++++++++++++++--
|
||||
3 files changed, 35 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
|
||||
index 27385a9..f239ce5 100644
|
||||
--- a/src/dnsmasq.h
|
||||
+++ b/src/dnsmasq.h
|
||||
@@ -488,6 +488,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..ddf8d31 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,8 @@ void check_servers(void)
|
||||
serv->flags |= SERV_MARK;
|
||||
continue;
|
||||
}
|
||||
+
|
||||
+ serv->sfd->used = 1;
|
||||
}
|
||||
|
||||
if (!(serv->flags & SERV_NO_REBIND) && !(serv->flags & SERV_LITERAL_ADDRESS))
|
||||
@@ -1547,6 +1560,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.11.0
|
||||
|
@ -1,3 +1,12 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Jan 4 17:29:37 UTC 2017 - martin.wilck@suse.com
|
||||
|
||||
- Handle binding upstream servers to an interface if interface
|
||||
is destroyed and recreated (boo#1018160)
|
||||
Added two patches from upstream:
|
||||
* added Handle-binding-upstream-servers-to-an-interface.patch
|
||||
* added Fix-crash-introduced-in-2675f2061525bc954be14988d643.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Aug 3 13:46:06 UTC 2016 - max@suse.com
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package dnsmasq
|
||||
#
|
||||
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@ -35,6 +35,8 @@ Source6: SuSEFirewall.dnsmasq-dhcp
|
||||
Source7: SuSEFirewall.dnsmasq-dns
|
||||
Source8: %{name}-rpmlintrc
|
||||
Patch0: dnsmasq-groups.patch
|
||||
Patch10: Handle-binding-upstream-servers-to-an-interface.patch
|
||||
Patch11: Fix-crash-introduced-in-2675f2061525bc954be14988d643.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
BuildRequires: dbus-1-devel
|
||||
BuildRequires: dos2unix
|
||||
@ -68,6 +70,8 @@ server's leases.
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
|
||||
# Some docs have the DOS line ends
|
||||
dos2unix contrib/systemd/dbus_activation
|
||||
|
Loading…
x
Reference in New Issue
Block a user