]> git.cameronkatri.com Git - getent-darwin.git/commitdiff
Teach getent(1) to look up a hostname and find IPv6 addresses.
authorKevin Lo <kevlo@FreeBSD.org>
Wed, 26 Sep 2012 09:29:48 +0000 (09:29 +0000)
committerKevin Lo <kevlo@FreeBSD.org>
Wed, 26 Sep 2012 09:29:48 +0000 (09:29 +0000)
PR: bin/161548
Submitted by: matthew

getent.c

index 85857d88a39fc673da4a79d98809862e9ab88cfa..74245773d69f6a553767477e5bc360b2b3763f64 100644 (file)
--- a/getent.c
+++ b/getent.c
@@ -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;
                        }