From 28cfe36e1eee9d2c234e0256ad459956b415a3bb Mon Sep 17 00:00:00 2001 From: Brian Haley 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 --- 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); }