You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.0 KiB
61 lines
2.0 KiB
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);
|
|
}
|
|
|