|
|
@@ -0,0 +1,61 @@
|
|
|
+From 28cfe36e1eee9d2c234e0256ad459956b415a3bb Mon Sep 17 00:00:00 2001
|
|
|
+From: Brian Haley <[email protected]>
|
|
|
+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 <[email protected]>
|
|
|
+---
|
|
|
+ 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);
|
|
|
+ }
|