krb5 commit: Fix COPY_FIRST_CANONNAME hostent search

Greg Hudson ghudson at MIT.EDU
Thu Jan 31 02:49:20 EST 2013


https://github.com/krb5/krb5/commit/8924d0d333248e7ea1073affdf48eaafc1909d97
commit 8924d0d333248e7ea1073affdf48eaafc1909d97
Author: Viktor Dukhovni <viktor at twosigma.com>
Date:   Wed Jan 30 22:58:50 2013 -0500

    Fix COPY_FIRST_CANONNAME hostent search
    
    In fake-addrinfo.c, the COPY_FIRST_CANONNAME logic erroneously assumes
    that h_name is the same as h_aliases[0].  Look at h_name before
    h_aliases for an FQDN, since h_name is normally the
    forward-canonicalized name and h_aliases are not.
    
    [ghudson at mit.edu: rewrote commit message]
    
    ticket: 7556 (new)

 src/util/support/fake-addrinfo.c |   22 +++++++++++-----------
 1 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/util/support/fake-addrinfo.c b/src/util/support/fake-addrinfo.c
index 4efecd5..2129758 100644
--- a/src/util/support/fake-addrinfo.c
+++ b/src/util/support/fake-addrinfo.c
@@ -1242,19 +1242,19 @@ getaddrinfo (const char *name, const char *serv, const struct addrinfo *hint,
                 ai->ai_canonname = 0;
             name2 = ai->ai_canonname ? ai->ai_canonname : name;
         } else {
-            /* Sometimes gethostbyname will be directed to /etc/hosts
-               first, and sometimes that file will have entries with
-               the unqualified name first.  So take the first entry
-               that looks like it could be a FQDN.  */
-            for (i = 0; hp->h_aliases[i]; i++) {
-                if (strchr(hp->h_aliases[i], '.') != 0) {
-                    name2 = hp->h_aliases[i];
+            /*
+             * Sometimes gethostbyname will be directed to /etc/hosts
+             * first, and sometimes that file will have entries with
+             * the unqualified name first.  So take the first entry
+             * that looks like it could be a FQDN. Starting with h_name
+             * and then all the aliases.
+             */
+            for (i = 0, name2 = hp->h_name; name2; i++) {
+                if (strchr(name2, '.') != 0)
                     break;
-                }
+                name2 = hp->h_aliases[i];
             }
-            /* Give up, just use the first name (h_name ==
-               h_aliases[0] on all systems I've seen).  */
-            if (hp->h_aliases[i] == 0)
+            if (name2 == 0)
                 name2 = hp->h_name;
         }
 


More information about the cvs-krb5 mailing list