back out changes accidentally checked in
authorKen Raeburn <raeburn@mit.edu>
Mon, 8 Jul 2002 19:50:23 +0000 (19:50 +0000)
committerKen Raeburn <raeburn@mit.edu>
Mon, 8 Jul 2002 19:50:23 +0000 (19:50 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@14617 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/os/Makefile.in
src/lib/krb5/os/sn2princ.c

index c9f529ceea0b6404a62cebd1ecb46b21c3f6cd08..a5ff02bf09659a154396a0c4c6aaa62f3bed7033 100644 (file)
@@ -393,7 +393,7 @@ sn2princ.so sn2princ.po $(OUTPRE)sn2princ.$(OBJEXT): sn2princ.c $(SRCTOP)/includ
   $(BUILDTOP)/include/krb5/osconf.h $(BUILDTOP)/include/krb5/autoconf.h \
   $(BUILDTOP)/include/krb5.h $(COM_ERR_DEPS) $(SRCTOP)/include/port-sockets.h \
   $(SRCTOP)/include/socket-utils.h $(SRCTOP)/include/krb5/kdb.h \
-  $(BUILDTOP)/include/profile.h $(SRCTOP)/include/fake-addrinfo.h
+  $(BUILDTOP)/include/profile.h
 timeofday.so timeofday.po $(OUTPRE)timeofday.$(OBJEXT): timeofday.c $(SRCTOP)/include/k5-int.h \
   $(BUILDTOP)/include/krb5/osconf.h $(BUILDTOP)/include/krb5/autoconf.h \
   $(BUILDTOP)/include/krb5.h $(COM_ERR_DEPS) $(SRCTOP)/include/krb5/kdb.h \
index 0a3141c64f92dd705feecbead522e25fad0e4205..ba32c0a231f4da16dde0493dd0ba62b13094ded5 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * lib/krb5/os/sn2princ.c
  *
- * Copyright 1991,2002 by the Massachusetts Institute of Technology.
+ * Copyright 1991 by the Massachusetts Institute of Technology.
  * All Rights Reserved.
  *
  * Export of this software from the United States of America may
@@ -30,7 +30,6 @@
 
 #define NEED_SOCKETS
 #include "k5-int.h"
-#include "fake-addrinfo.h"
 #include <ctype.h>
 #ifdef HAVE_SYS_PARAM_H
 #include <sys/param.h>
@@ -44,6 +43,7 @@ krb5_sname_to_principal(context, hostname, sname, type, ret_princ)
     krb5_int32 type;
     krb5_principal * ret_princ;
 {
+    struct hostent *hp;
     char **hrealms, *realm, *remote_host;
     krb5_error_code retval;
     register char *cp;
@@ -67,63 +67,27 @@ krb5_sname_to_principal(context, hostname, sname, type, ret_princ)
        /* copy the hostname into non-volatile storage */
 
        if (type == KRB5_NT_SRV_HST) {
-           struct addrinfo *ai, hints;
-           int err;
-           char hnamebuf[NI_MAXHOST];
-
-           if (strspn(hostname, "01234567890.") == strlen(hostname)) {
-               /* All numbers and dots... if it's three dots, it's an
-                  IP address, and we reject it.  But "12345" could be
-                  a local hostname, couldn't it?  We'll just assume
-                  that a name with three dots is not meant to be an
-                  all-numeric hostname three all-numeric domains down
-                  from the current domain.  */
-               int ndots = 0;
-               const char *p;
-               for (p = hostname; *p; p++)
-                   if (*p == '.')
-                       ndots++;
-               if (ndots == 3)
-                   return KRB5_ERR_BAD_HOSTNAME;
-           }
-           if (strchr(hostname, ':'))
-               /* IPv6 numeric address form?  Bye bye.  */
-               return KRB5_ERR_BAD_HOSTNAME;
-
-           memset(&hints, 0, sizeof(hints));
-           hints.ai_family = AF_INET;
-       try_getaddrinfo_again:
-           err = getaddrinfo(hostname, 0, &hints, &ai);
-           if (err) {
-               if (hints.ai_family == AF_INET) {
-                   /* Just in case it's an IPv6-only name.  */
-                   hints.ai_family = 0;
-                   goto try_getaddrinfo_again;
-               }
+           char *addr;
+           
+           if (!(hp = gethostbyname(hostname)))
                return KRB5_ERR_BAD_HOSTNAME;
-           }
-           remote_host = strdup(ai->ai_canonname ? ai->ai_canonname : hostname);
-           if (!remote_host) {
-               freeaddrinfo(ai);
+           remote_host = strdup(hp->h_name);
+           if (!remote_host)
                return ENOMEM;
-           }
            /*
             * Do a reverse resolution to get the full name, just in
             * case there's some funny business going on.  If there
             * isn't an in-addr record, give up.
             */
-           /* XXX: This is *so* bogus.  There are several cases where
-              this won't get us the canonical name of the host, but
-              this is what we've trained people to expect.  We'll
-              probably fix it at some point, but let's try to
-              preserve the current behavior and only shake things up
-              once when it comes time to fix this lossage.  */
-           err = getnameinfo(ai->ai_addr, ai->ai_addrlen,
-                             hnamebuf, sizeof(hnamebuf), 0, 0, NI_NAMEREQD);
-           freeaddrinfo(ai);
-           if (err == 0) {
+           addr = malloc(hp->h_length);
+           if (!addr)
+               return ENOMEM;
+           memcpy(addr, hp->h_addr, hp->h_length);
+           hp = gethostbyaddr(addr, hp->h_length, hp->h_addrtype);
+           free(addr);
+           if (hp) {
                free(remote_host);
-               remote_host = strdup(hnamebuf);
+               remote_host = strdup(hp->h_name);
                if (!remote_host)
                    return ENOMEM;
            }