Fix line counting when reading /etc/hosts.

This commit is contained in:
Simon Kelley
2019-02-27 20:30:21 +00:00
parent 28cfe36e1e
commit 4219adeeef
2 changed files with 12 additions and 8 deletions

View File

@@ -17,6 +17,10 @@ version 2.81
combinatorial explosion of compile-time options. Thanks to combinatorial explosion of compile-time options. Thanks to
Kevin Darbyshire-Bryant for the patch. 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 version 2.80
Add support for RFC 4039 DHCP rapid commit. Thanks to Ashram Method Add support for RFC 4039 DHCP rapid commit. Thanks to Ashram Method

View File

@@ -1062,7 +1062,7 @@ static int eatspace(FILE *f)
} }
if (c == '\n') if (c == '\n')
nl = 1; nl++;
} }
} }
@@ -1073,7 +1073,7 @@ static int gettok(FILE *f, char *token)
while (1) while (1)
{ {
if ((c = getc(f)) == EOF) if ((c = getc(f)) == EOF)
return (count == 0) ? EOF : 1; return (count == 0) ? -1 : 1;
if (isspace(c) || c == '#') if (isspace(c) || c == '#')
{ {
@@ -1093,7 +1093,7 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
{ {
FILE *f = fopen(filename, "r"); FILE *f = fopen(filename, "r");
char *token = daemon->namebuff, *domain_suffix = NULL; 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; unsigned int flags = 0;
union all_addr addr; union all_addr addr;
int atnl, addrlen = 0; int atnl, addrlen = 0;
@@ -1104,12 +1104,10 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
return cache_size; 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) if (inet_pton(AF_INET, token, &addr) > 0)
{ {
flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV4; flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV4;
@@ -1145,7 +1143,7 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
int fqdn, nomem; int fqdn, nomem;
char *canon; char *canon;
if ((atnl = gettok(f, token)) == EOF) if ((atnl = gettok(f, token)) == -1)
break; break;
fqdn = !!strchr(token, '.'); fqdn = !!strchr(token, '.');
@@ -1178,6 +1176,8 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
else if (!nomem) else if (!nomem)
my_syslog(LOG_ERR, _("bad name at %s line %d"), filename, lineno); my_syslog(LOG_ERR, _("bad name at %s line %d"), filename, lineno);
} }
lineno += atnl;
} }
fclose(f); fclose(f);