Avoid the DNS lookup for "localhost"

ci.FreeBSD.org does not have access to a DNS resolver/network (unlike my test
VM), so in order for the test to pass on the host, it needs to avoid the DNS
lookup by using the numeric host address representation.

PR:		235200
Reviewed by:	asomers, lwhsu
Approved by:	emaste (mentor)
MFC after:	2 weeks
MFC with:	r343362, r343365, r343367-r343368, r343461
Differential Revision: https://reviews.freebsd.org/D19026
This commit is contained in:
Enji Cooper 2019-02-04 19:12:45 +00:00
parent 90b924a12e
commit 8e0c33c6d3

View File

@ -97,22 +97,31 @@ generate_random_port(int seed)
static void
resolve_localhost(struct addrinfo **res, int domain, int type, int port)
{
const char *host;
char *serv;
struct addrinfo hints;
int error;
ATF_REQUIRE_MSG(domain == AF_INET || domain == AF_INET6,
"unhandled domain: %d", domain);
switch (domain) {
case AF_INET:
host = "127.0.0.1";
break;
case AF_INET6:
host = "::1";
break;
default:
atf_tc_fail("unhandled domain: %d", domain);
}
ATF_REQUIRE_MSG(asprintf(&serv, "%d", port) >= 0,
"asprintf failed: %s", strerror(errno));
memset(&hints, 0, sizeof(hints));
hints.ai_family = domain;
hints.ai_flags = AI_ADDRCONFIG|AI_NUMERICSERV;
hints.ai_flags = AI_ADDRCONFIG|AI_NUMERICSERV|AI_NUMERICHOST;
hints.ai_socktype = type;
error = getaddrinfo("localhost", serv, &hints, res);
error = getaddrinfo(host, serv, &hints, res);
ATF_REQUIRE_EQ_MSG(error, 0,
"getaddrinfo failed: %s", gai_strerror(error));
free(serv);