aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/services/dnsmasq/patches/0032-Change-read_leases-to-skip-invalid-entries.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/services/dnsmasq/patches/0032-Change-read_leases-to-skip-invalid-entries.patch')
-rw-r--r--package/network/services/dnsmasq/patches/0032-Change-read_leases-to-skip-invalid-entries.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/package/network/services/dnsmasq/patches/0032-Change-read_leases-to-skip-invalid-entries.patch b/package/network/services/dnsmasq/patches/0032-Change-read_leases-to-skip-invalid-entries.patch
new file mode 100644
index 0000000000..bbaed874e2
--- /dev/null
+++ b/package/network/services/dnsmasq/patches/0032-Change-read_leases-to-skip-invalid-entries.patch
@@ -0,0 +1,61 @@
+From 28cfe36e1eee9d2c234e0256ad459956b415a3bb Mon Sep 17 00:00:00 2001
+From: Brian Haley <haleyb.dev@gmail.com>
+Date: Thu, 17 Jan 2019 23:21:23 +0000
+Subject: [PATCH 32/32] Change read_leases() to skip invalid entries.
+
+There's no reason to stop reading the existing lease file
+when dnsmasq is started and an invalid entry is found, it
+can just be ignored. This was fallout from an Openstack
+bug where the file was being written incorrectly with []
+around IPv6 addresses.
+
+Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
+---
+ src/lease.c | 22 +++++++++++++++-------
+ 1 file changed, 15 insertions(+), 7 deletions(-)
+
+--- a/src/lease.c
++++ b/src/lease.c
+@@ -60,8 +60,13 @@ static int read_leases(time_t now, FILE
+
+ if (fscanf(leasestream, " %64s %255s %764s",
+ daemon->namebuff, daemon->dhcp_buff, daemon->packet) != 3)
+- return 0;
+-
++ {
++ my_syslog(MS_DHCP | LOG_WARNING, _("ignoring invalid line in lease database: %s %s %s %s ..."),
++ daemon->dhcp_buff3, daemon->dhcp_buff2,
++ daemon->namebuff, daemon->dhcp_buff);
++ continue;
++ }
++
+ if (inet_pton(AF_INET, daemon->namebuff, &addr.addr4))
+ {
+ if ((lease = lease4_allocate(addr.addr4)))
+@@ -92,7 +97,12 @@ static int read_leases(time_t now, FILE
+ }
+ #endif
+ else
+- return 0;
++ {
++ my_syslog(MS_DHCP | LOG_WARNING, _("ignoring invalid line in lease database, bad address: %s"),
++ daemon->namebuff);
++ continue;
++ }
++
+
+ if (!lease)
+ die (_("too many stored leases"), NULL, EC_MISC);
+@@ -172,10 +182,8 @@ void lease_init(time_t now)
+ if (leasestream)
+ {
+ if (!read_leases(now, leasestream))
+- my_syslog(MS_DHCP | LOG_ERR, _("failed to parse lease database, invalid line: %s %s %s %s ..."),
+- daemon->dhcp_buff3, daemon->dhcp_buff2,
+- daemon->namebuff, daemon->dhcp_buff);
+-
++ my_syslog(MS_DHCP | LOG_ERR, _("failed to parse lease database cleanly"));
++
+ if (ferror(leasestream))
+ die(_("failed to read lease file %s: %s"), daemon->lease_file, EC_FILE);
+ }