Teach getent(1) to look up a hostname and find IPv6 addresses.
PR: bin/161548 Submitted by: matthew
This commit is contained in:
parent
a9111e46bc
commit
d1f1954b23
@ -277,7 +277,7 @@ hostsprint(const struct hostent *he)
|
||||
static int
|
||||
hosts(int argc, char *argv[])
|
||||
{
|
||||
struct hostent *he;
|
||||
struct hostent *he4, *he6;
|
||||
char addr[IN6ADDRSZ];
|
||||
int i, rv;
|
||||
|
||||
@ -285,21 +285,31 @@ hosts(int argc, char *argv[])
|
||||
assert(argv != NULL);
|
||||
|
||||
sethostent(1);
|
||||
he4 = he6 = NULL;
|
||||
rv = RV_OK;
|
||||
if (argc == 2) {
|
||||
while ((he = gethostent()) != NULL)
|
||||
hostsprint(he);
|
||||
while ((he4 = gethostent()) != NULL)
|
||||
hostsprint(he4);
|
||||
} else {
|
||||
for (i = 2; i < argc; i++) {
|
||||
if (inet_pton(AF_INET6, argv[i], (void *)addr) > 0)
|
||||
he = gethostbyaddr(addr, IN6ADDRSZ, AF_INET6);
|
||||
else if (inet_pton(AF_INET, argv[i], (void *)addr) > 0)
|
||||
he = gethostbyaddr(addr, INADDRSZ, AF_INET);
|
||||
else
|
||||
he = gethostbyname(argv[i]);
|
||||
if (he != NULL)
|
||||
hostsprint(he);
|
||||
else {
|
||||
if (inet_pton(AF_INET6, argv[i], (void *)addr) > 0) {
|
||||
he6 = gethostbyaddr(addr, IN6ADDRSZ, AF_INET6);
|
||||
if (he6 != NULL)
|
||||
hostsprint(he6);
|
||||
} else if (inet_pton(AF_INET, argv[i],
|
||||
(void *)addr) > 0) {
|
||||
he4 = gethostbyaddr(addr, INADDRSZ, AF_INET);
|
||||
if (he4 != NULL)
|
||||
hostsprint(he4);
|
||||
} else {
|
||||
he6 = gethostbyname2(argv[i], AF_INET6);
|
||||
if (he6 != NULL)
|
||||
hostsprint(he6);
|
||||
he4 = gethostbyname(argv[i]);
|
||||
if (he4 != NULL)
|
||||
hostsprint(he4);
|
||||
}
|
||||
if ( he4 == NULL && he6 == NULL ) {
|
||||
rv = RV_NOTFOUND;
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user