diff options
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.patch | 61 |
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); + } |