]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Fix COPY_FIRST_CANONNAME hostent search
authorViktor Dukhovni <viktor@twosigma.com>
Thu, 31 Jan 2013 03:58:50 +0000 (22:58 -0500)
committerGreg Hudson <ghudson@mit.edu>
Thu, 31 Jan 2013 07:48:51 +0000 (02:48 -0500)
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@mit.edu: rewrote commit message]

ticket: 7556 (new)

src/util/support/fake-addrinfo.c

index 4efecd540fede3ec4f394530047eeb6c9e3f9c69..2129758c07a6a66db768009bc45cd111bf6288d4 100644 (file)
@@ -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;
         }