Use getnameinfo(3) instead of our own equivalent
I didn't know getnameinfo(3) existed, so I implemented it, or something similar to it called inet_sockaddr2str(). Let's use the standard API. Link: <https://inbox.sourceware.org/libc-alpha/0f25d60f-f183-b518-b6c1-6d46aa63ee57@gmail.com/T/> Link: <https://stackoverflow.com/a/42190913/6872717> Link: <https://github.com/shadow-maint/shadow/pull/617> Link: <https://software.codidact.com/posts/287748> Cc: Zack Weinberg <zack@owlfolio.org> Signed-off-by: Alejandro Colomar <alx@kernel.org>
This commit is contained in:
committed by
Serge Hallyn
parent
ac8b81c2b7
commit
b2bed465e8
@@ -267,22 +267,24 @@ static const char *resolve_hostname (const char *string)
|
||||
char *addr_str;
|
||||
struct addrinfo *addrs;
|
||||
|
||||
gai_err = getaddrinfo(string, NULL, NULL, &addrs);
|
||||
if (gai_err != 0)
|
||||
goto notfound;
|
||||
static char host[MAXHOSTNAMELEN];
|
||||
|
||||
addr_str = inet_sockaddr2str(addrs[0].ai_addr);
|
||||
if (addr_str == NULL) {
|
||||
SYSLOG ((LOG_ERR, "inet_sockaddr2str(): %s", strerror(errno)));
|
||||
abort();
|
||||
gai_err = getaddrinfo(string, NULL, NULL, &addrs);
|
||||
if (gai_err != 0) {
|
||||
SYSLOG ((LOG_ERR, "getaddrinfo(%s): %s", string, gai_strerror(gai_err)));
|
||||
return string;
|
||||
}
|
||||
|
||||
addr_str = host;
|
||||
gai_err = getnameinfo(addrs[0].ai_addr, addrs[0].ai_addrlen,
|
||||
host, NITEMS(host), NULL, 0, NI_NUMERICHOST);
|
||||
if (gai_err != 0) {
|
||||
SYSLOG ((LOG_ERR, "getnameinfo(%s): %s", string, gai_strerror(gai_err)));
|
||||
addr_str = string;
|
||||
}
|
||||
|
||||
freeaddrinfo(addrs);
|
||||
return addr_str;
|
||||
|
||||
notfound:
|
||||
SYSLOG ((LOG_ERR, "getaddrinfo(%s): %s", string, gai_strerror(gai_err)));
|
||||
return string;
|
||||
}
|
||||
|
||||
/* from_match - match a host or tty against a list of tokens */
|
||||
|
Reference in New Issue
Block a user