diff --git a/lib/prototypes.h b/lib/prototypes.h index 066252c6..49e3db53 100644 --- a/lib/prototypes.h +++ b/lib/prototypes.h @@ -194,9 +194,6 @@ extern bool gr_append_member (struct group *grp, char *member); /* hushed.c */ extern bool hushed (const char *username); -/* inet_sockaddr2str.c */ -extern const char *inet_sockaddr2str(const struct sockaddr *sa); - /* audit_help.c */ #ifdef WITH_AUDIT extern int audit_fd; diff --git a/libmisc/Makefile.am b/libmisc/Makefile.am index 5484c8a5..c2277a02 100644 --- a/libmisc/Makefile.am +++ b/libmisc/Makefile.am @@ -38,7 +38,6 @@ libmisc_la_SOURCES = \ hushed.c \ idmapping.h \ idmapping.c \ - inet_sockaddr2str.c \ isexpired.c \ limits.c \ list.c log.c \ diff --git a/libmisc/inet_sockaddr2str.c b/libmisc/inet_sockaddr2str.c deleted file mode 100644 index ce7466ca..00000000 --- a/libmisc/inet_sockaddr2str.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022, Alejandro Colomar - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#include - -#include -#include -#include -#include -#include - -#ident "$Id$" - -#include "defines.h" -#include "prototypes.h" - - -#if !defined(INET_ADDRSTRLENMAX) -#define INET_ADDRSTRLENMAX MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) -#endif - - -/* - * SYNOPSIS - * const char *inet_sockaddr2str(const struct sockaddr *sa); - * - * DESCRIPTION - * This function is similar to inet_ntop(3). It transforms an address - * in 'struct in_addr' or 'struct in6_addr' form into a human-readable - * string. - * - * It receives a sockaddr structure, which is simpler to pass after - * receiving it from getaddrinfo(3). However, this function is not - * reentrant, and like inet_ntoa(3), it uses an internal buffer, for - * simplicity; anyway we're not in a multithreaded program, and it - * doesn't contain any sensitive data, so it's fine to use static - * storage here. - * - * RETURN VALUE - * This function returns a pointer to a statically allocated buffer, - * which subsequent calls will overwrite. - * - * On error, it returns NULL. - * - * ERRORS - * EAFNOSUPPORT - * The address family in sa->sa_family is not AF_INET or AF_INET6. - * - * CAVEATS - * This function is not reentrant. - */ - - -const char * -inet_sockaddr2str(const struct sockaddr *sa) -{ - struct sockaddr_in *sin; - struct sockaddr_in6 *sin6; - - static char buf[INET_ADDRSTRLENMAX]; - - switch (sa->sa_family) { - case AF_INET: - sin = (struct sockaddr_in *) sa; - inet_ntop(AF_INET, &sin->sin_addr, buf, NITEMS(buf)); - return buf; - case AF_INET6: - sin6 = (struct sockaddr_in6 *) sa; - inet_ntop(AF_INET6, &sin6->sin6_addr, buf, NITEMS(buf)); - return buf; - default: - errno = EAFNOSUPPORT; - return NULL; - } -} diff --git a/src/login_nopam.c b/src/login_nopam.c index 72743b39..b09cffe4 100644 --- a/src/login_nopam.c +++ b/src/login_nopam.c @@ -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 */