* hst_realm.c (krb5_get_host_realm): Return KRB5_ERR_NUMERIC_REALM if the
authorKen Raeburn <raeburn@mit.edu>
Tue, 9 Jul 2002 18:16:00 +0000 (18:16 +0000)
committerKen Raeburn <raeburn@mit.edu>
Tue, 9 Jul 2002 18:16:00 +0000 (18:16 +0000)
hostname is a numeric-address form.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@14619 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/os/ChangeLog
src/lib/krb5/os/hst_realm.c

index 3cbe50c13b593161def3152ff8ef4f958637c0f5..a1176306cf038da4a4df25e9d323a78c1294f518 100644 (file)
@@ -1,3 +1,8 @@
+2002-07-09  Ken Raeburn  <raeburn@mit.edu>
+
+       * hst_realm.c (krb5_get_host_realm): Return KRB5_ERR_NUMERIC_REALM
+       if the hostname is a numeric-address form.
+
 2002-07-08  Ken Raeburn  <raeburn@mit.edu>
 
        * localaddr.c (get_localaddrs): Split out main body of
index 4238f5e5438e4b6d6616ab6311fb18f3d5d75f99..2485c8710112f2fae8734209ce040c29f6f42337 100644 (file)
@@ -280,6 +280,28 @@ krb5_get_host_realm(context, host, realmsp)
     char local_host[MAX_DNS_NAMELEN+1];
 
     if (host) {
+       /* Filter out numeric addresses if the caller utterly failed to
+          convert them to names.  */
+       /* IPv4 - dotted quads only */
+       if (strspn(host, "01234567890.") == strlen(host)) {
+           /* 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 = host; *p; p++)
+               if (*p == '.')
+                   ndots++;
+           if (ndots == 3)
+               return KRB5_ERR_NUMERIC_REALM;
+       }
+       if (strchr(host, ':'))
+           /* IPv6 numeric address form?  Bye bye.  */
+           return KRB5_ERR_NUMERIC_REALM;
+
        /* Should probably error out if strlen(host) > MAX_DNS_NAMELEN.  */
        strncpy(local_host, host, sizeof(local_host));
        local_host[sizeof(local_host) - 1] = '\0';