Author: kevlo
Date: Wed Sep 26 09:29:48 2012
New Revision: 240954
URL: http://svn.freebsd.org/changeset/base/240954

Log:
  Teach getent(1) to look up a hostname and find IPv6 addresses.
  
  PR:   bin/161548
  Submitted by: matthew

Modified:
  head/usr.bin/getent/getent.c

Modified: head/usr.bin/getent/getent.c
==============================================================================
--- head/usr.bin/getent/getent.c        Wed Sep 26 09:27:38 2012        
(r240953)
+++ head/usr.bin/getent/getent.c        Wed Sep 26 09:29:48 2012        
(r240954)
@@ -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;
                        }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to