mirror of
https://git.musl-libc.org/git/musl
synced 2025-01-10 00:32:27 +03:00
in hosts file lookups, use only first match for canonical name
the existing code clobbered the canonical name already discovered every time another matching line was found, which will necessarily be the case when a hostname has both IPv4 and v6 definitions. patch by Wolf.
This commit is contained in:
parent
73cc775bee
commit
20c6d83f55
@ -50,7 +50,7 @@ static int name_from_hosts(struct address buf[static MAXADDRS], char canon[stati
|
|||||||
{
|
{
|
||||||
char line[512];
|
char line[512];
|
||||||
size_t l = strlen(name);
|
size_t l = strlen(name);
|
||||||
int cnt = 0, badfam = 0;
|
int cnt = 0, badfam = 0, have_canon = 0;
|
||||||
unsigned char _buf[1032];
|
unsigned char _buf[1032];
|
||||||
FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
|
FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
|
||||||
if (!f) switch (errno) {
|
if (!f) switch (errno) {
|
||||||
@ -83,11 +83,16 @@ static int name_from_hosts(struct address buf[static MAXADDRS], char canon[stati
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (have_canon) continue;
|
||||||
|
|
||||||
/* Extract first name as canonical name */
|
/* Extract first name as canonical name */
|
||||||
for (; *p && isspace(*p); p++);
|
for (; *p && isspace(*p); p++);
|
||||||
for (z=p; *z && !isspace(*z); z++);
|
for (z=p; *z && !isspace(*z); z++);
|
||||||
*z = 0;
|
*z = 0;
|
||||||
if (is_valid_hostname(p)) memcpy(canon, p, z-p+1);
|
if (is_valid_hostname(p)) {
|
||||||
|
have_canon = 1;
|
||||||
|
memcpy(canon, p, z-p+1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
__fclose_ca(f);
|
__fclose_ca(f);
|
||||||
return cnt ? cnt : badfam;
|
return cnt ? cnt : badfam;
|
||||||
|
Loading…
Reference in New Issue
Block a user