You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openwrt/package/network/services/dnsmasq/patches/0033-Fix-line-counting-when...

87 lines
2.3 KiB
Diff

From 4219adeeef8a3d5447af4c9bd1e4e7c05b3112fd Mon Sep 17 00:00:00 2001
From: Simon Kelley <simon@thekelleys.org.uk>
Date: Wed, 27 Feb 2019 20:30:21 +0000
Subject: [PATCH 33/57] Fix line counting when reading /etc/hosts.
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
---
CHANGELOG | 4 ++++
src/cache.c | 16 ++++++++--------
2 files changed, 12 insertions(+), 8 deletions(-)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -17,6 +17,10 @@ version 2.81
combinatorial explosion of compile-time options. Thanks to
Kevin Darbyshire-Bryant for the patch.
+ Fix line-counting when reading /etc/hosts and friends; for
+ correct error messages. Thanks to Christian Rosentreter
+ for reporting this.
+
version 2.80
Add support for RFC 4039 DHCP rapid commit. Thanks to Ashram Method
--- a/src/cache.c
+++ b/src/cache.c
@@ -1062,7 +1062,7 @@ static int eatspace(FILE *f)
}
if (c == '\n')
- nl = 1;
+ nl++;
}
}
@@ -1073,7 +1073,7 @@ static int gettok(FILE *f, char *token)
while (1)
{
if ((c = getc(f)) == EOF)
- return (count == 0) ? EOF : 1;
+ return (count == 0) ? -1 : 1;
if (isspace(c) || c == '#')
{
@@ -1093,7 +1093,7 @@ int read_hostsfile(char *filename, unsig
{
FILE *f = fopen(filename, "r");
char *token = daemon->namebuff, *domain_suffix = NULL;
- int addr_count = 0, name_count = cache_size, lineno = 0;
+ int addr_count = 0, name_count = cache_size, lineno = 1;
unsigned int flags = 0;
union all_addr addr;
int atnl, addrlen = 0;
@@ -1104,12 +1104,10 @@ int read_hostsfile(char *filename, unsig
return cache_size;
}
- eatspace(f);
+ lineno += eatspace(f);
- while ((atnl = gettok(f, token)) != EOF)
+ while ((atnl = gettok(f, token)) != -1)
{
- lineno++;
-
if (inet_pton(AF_INET, token, &addr) > 0)
{
flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV4;
@@ -1145,7 +1143,7 @@ int read_hostsfile(char *filename, unsig
int fqdn, nomem;
char *canon;
- if ((atnl = gettok(f, token)) == EOF)
+ if ((atnl = gettok(f, token)) == -1)
break;
fqdn = !!strchr(token, '.');
@@ -1178,6 +1176,8 @@ int read_hostsfile(char *filename, unsig
else if (!nomem)
my_syslog(LOG_ERR, _("bad name at %s line %d"), filename, lineno);
}
+
+ lineno += atnl;
}
fclose(f);