]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
allow testing even if name->addr->name mapping doesn't work
authorKen Raeburn <raeburn@mit.edu>
Thu, 3 Dec 2009 02:17:24 +0000 (02:17 +0000)
committerKen Raeburn <raeburn@mit.edu>
Thu, 3 Dec 2009 02:17:24 +0000 (02:17 +0000)
Many of the tests are set up to fail if the local hostname can't be
mapped to an address and back to a name again.  If the name results in
an address, and we can get a fully-qualified name or something that
looks like it, though, we should be able to just go ahead and run some
tests.

This is also closer to the current behavior of sname_to_principal when
reverse DNS is enabled.

ticket: 6590

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

src/kadmin/testing/scripts/make-host-keytab.plin
src/kadmin/testing/scripts/qualname.plin
src/tests/resolve/resolve.c

index cf62ae7971abf743314bdcc843cc971bba640625..dfe0b3a0138023af32cf79d221f76c64da2ff516 100755 (executable)
@@ -54,8 +54,8 @@ chop ($canonhost = `hostname`);
 
 ($canonhost,$aliases,$addrtype,$length,@addrs) = gethostbyname($canonhost);
 die "couldn't get canonical hostname\n" if !($canonhost && @addrs);
-($canonhost) = gethostbyaddr($addrs[0],$addrtype);
-die "couldn't get canonical hostname\n" if (!$canonhost);
+($canonhost2) = gethostbyaddr($addrs[0],$addrtype);
+if ($canonhost2) { $canonhost = $canonhost2; }
 
 for (@princs) {
     s/xCANONHOSTx/$canonhost/g;
index 883b7dfc8c115c8dcc1b4b0f83610b38d0f481c2..b712d89738eb9f1ea056b57f2356ef3462fed8c5 100755 (executable)
@@ -6,13 +6,12 @@ if ($#ARGV == -1) {
     $hostname = $ARGV[0];
 }
 
-if (! (($type,$addr) = (gethostbyname($hostname))[2,4])) {
+if (! (($name,$type,$addr) = (gethostbyname($hostname))[0,2,4])) {
     print STDERR "No such host: $hostname\n";
     exit(1);
 }
 if (! ($qualname = (gethostbyaddr($addr,$type))[0])) {
-    print STDERR "No address information for host $hostname\n";
-    exit(1);
+    $qualname = $name;
 }
 
 $qualname =~ tr/A-Z/a-z/;      # lowercase our name for keytab use.
index 6efd09786f4ebe51f449ac9288f0d18c1f03df0a..282fba741104065055517a1f8303b7ee0a0e44c9 100644 (file)
@@ -31,7 +31,7 @@
  * domain name, then the resolve library is broken.
  *
  * Warning: It is possible to fool this program into thinking everything is
- * alright byt a clever use of /etc/hosts - but this is better than nothing.
+ * alright by a clever use of /etc/hosts - but this is better than nothing.
  *
  * Usage:
  *   resolve [hostname]
@@ -79,7 +79,7 @@ main(argc, argv)
     char **argv;
 {
     char myname[MAXHOSTNAMELEN+1];
-    char *ptr;
+    char *ptr, *fqdn;
     struct in_addr addrcopy;
     struct hostent *host;
     int quiet = 0;
@@ -120,6 +120,12 @@ main(argc, argv)
         exit(2);
     }
 
+    fqdn = strdup(host->h_name);
+    if (fqdn == NULL) {
+        perror("strdup");
+        exit(2);
+    }
+
     ptr = host->h_addr_list[0];
 #define UC(a) (((int)a)&0xff)
     if (!quiet)
@@ -129,22 +135,29 @@ main(argc, argv)
     memcpy(&addrcopy.s_addr, ptr, 4);
 
     /* Convert back to full name */
-    if((host = gethostbyaddr(&addrcopy.s_addr, 4, AF_INET)) == NULL) {
-        fprintf(stderr, "Error looking up IP address - fatal\n");
-        exit(2);
+    if ((host = gethostbyaddr(&addrcopy.s_addr, 4, AF_INET)) == NULL) {
+        if (!quiet)
+            fprintf(stderr, "Error looking up IP address\n");
+    } else {
+        free(fqdn);
+        fqdn = strdup(host->h_name);
+        if (fqdn == NULL) {
+            perror("strdup");
+            exit (2);
+        }
     }
 
     if (quiet)
-        printf("%s\n", host->h_name);
+        printf("%s\n", fqdn);
     else
-        printf("FQDN: %s\n", host->h_name);
+        printf("FQDN: %s\n", fqdn);
 
     /*
      * The host name must have at least one '.' in the name, and
      * if there is only one '.', it must not be at the end of the
      * string.  (i.e., "foo." is not a FQDN)
      */
-    ptr = strchr(host->h_name, '.');
+    ptr = strchr(fqdn, '.');
     if (ptr == NULL || ptr[1] == '\0') {
         fprintf(stderr,
                 "\nResolve library did not return a "