diff options
author | 2018-09-25 19:51:39 +0000 | |
---|---|---|
committer | 2018-09-25 19:51:39 +0000 | |
commit | 7f55ab2914d04e76cefef5418b27c784ea0cdbd3 (patch) | |
tree | 0d9d453d42804d99bdaa64839338ae66cf41b075 | |
parent | usage() is void (diff) | |
download | wireguard-openbsd-7f55ab2914d04e76cefef5418b27c784ea0cdbd3.tar.xz wireguard-openbsd-7f55ab2914d04e76cefef5418b27c784ea0cdbd3.zip |
Use getnameinfo(2)
This simplifies the code, makes it less address family specific and plays
nicely with previously used getaddrinfo(2).
While here, make function parameter `const', sort stack variables by size
and nitpick PF_UNSPEC.
OK millert
-rw-r--r-- | usr.bin/getent/getent.c | 42 |
1 files changed, 15 insertions, 27 deletions
diff --git a/usr.bin/getent/getent.c b/usr.bin/getent/getent.c index 01ac87a85f7..016c67c3743 100644 --- a/usr.bin/getent/getent.c +++ b/usr.bin/getent/getent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: getent.c,v 1.17 2018/09/25 19:48:14 kn Exp $ */ +/* $OpenBSD: getent.c,v 1.18 2018/09/25 19:51:39 kn Exp $ */ /* $NetBSD: getent.c,v 1.7 2005/08/24 14:31:02 ginsbach Exp $ */ /*- @@ -228,42 +228,30 @@ hostsprint(const struct hostent *he) printfmtstrings(he->h_aliases, " ", " ", "%-16s %s", buf, he->h_name); } static int -hostsaddrinfo(char* name) +hostsaddrinfo(const char *name) { struct addrinfo hints, *res, *res0; - void *src; - int rv; char buf[INET6_ADDRSTRLEN]; + int rv; rv = RV_NOTFOUND; memset(buf, 0, sizeof(buf)); memset(&hints, 0, sizeof(hints)); - hints.ai_family = PF_UNSPEC; + hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; - if (getaddrinfo(name, NULL, &hints, &res0) == 0) { - for (res = res0; res; res = res->ai_next) { - switch (res->ai_family) { - case AF_INET: - src = &((struct sockaddr_in*) - res->ai_addr)->sin_addr; - break; - case AF_INET6: - src = &((struct sockaddr_in6*) - res->ai_addr)->sin6_addr; - break; - default: /* not reached */ - src = NULL; - } - if (src==NULL || inet_ntop(res->ai_family, src, buf, - sizeof(buf)) == NULL) - strlcpy(buf, "# unknown", sizeof(buf)); - else - rv = RV_OK; - printf("%-39s %s\n", buf, name); - } - freeaddrinfo(res0); + if (getaddrinfo(name, NULL, &hints, &res0) != 0) + return (rv); + for (res = res0; res; res = res->ai_next) { + if ((res->ai_family != AF_INET6 && res->ai_family != AF_INET) || + getnameinfo(res->ai_addr, res->ai_addrlen, buf, sizeof(buf), + NULL, 0, NI_NUMERICHOST) != 0) + strlcpy(buf, "# unknown", sizeof(buf)); + else + rv = RV_OK; + printf("%-39s %s\n", buf, name); } + freeaddrinfo(res0); return (rv); } |