From: Ken Raeburn Date: Thu, 3 Dec 2009 02:17:24 +0000 (+0000) Subject: allow testing even if name->addr->name mapping doesn't work X-Git-Tag: krb5-1.8-alpha1~96 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df1f581ffeff2abb67ee4e6b6d4da13189b0d271;p=thirdparty%2Fkrb5.git allow testing even if name->addr->name mapping doesn't work 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 --- diff --git a/src/kadmin/testing/scripts/make-host-keytab.plin b/src/kadmin/testing/scripts/make-host-keytab.plin index cf62ae7971..dfe0b3a013 100755 --- a/src/kadmin/testing/scripts/make-host-keytab.plin +++ b/src/kadmin/testing/scripts/make-host-keytab.plin @@ -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; diff --git a/src/kadmin/testing/scripts/qualname.plin b/src/kadmin/testing/scripts/qualname.plin index 883b7dfc8c..b712d89738 100755 --- a/src/kadmin/testing/scripts/qualname.plin +++ b/src/kadmin/testing/scripts/qualname.plin @@ -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. diff --git a/src/tests/resolve/resolve.c b/src/tests/resolve/resolve.c index 6efd09786f..282fba7411 100644 --- a/src/tests/resolve/resolve.c +++ b/src/tests/resolve/resolve.c @@ -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 "