Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Dec 2000 11:17:59 +1000
From:      Phil Homewood <pdh@bit.net.au>
To:        gnats-admin@FreeBSD.org, freebsd-bugs@FreeBSD.org
Subject:   Re: bin/23635: [PATCH] whois enhancement - smarter whois-servers.net lookups
Message-ID:  <20001219111759.A12195@atlas.bit.net.au>
In-Reply-To: <200012190050.eBJ0o1O88310@freefall.freebsd.org>; from gnats-admin@FreeBSD.org on Mon, Dec 18, 2000 at 04:50:01PM -0800
References:  <200012190041.eBJ0fjl00856@minotaur.int.bit.net.au> <200012190050.eBJ0o1O88310@freefall.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
I said:
> It also fixes a minor annoyance in that "whois example.com." fails.

Oops, that version doesn't. This one does.
Please supersede my previous patch with this one.


--- usr.bin/whois/whois.c.orig	Sat Jul 15 17:29:31 2000
+++ usr.bin/whois/whois.c	Tue Dec 19 11:14:33 2000
@@ -84,6 +84,7 @@
 {
 	int ch, i, j, error;
 	int use_qnichost, flags;
+	int found = 0;
 	char *host;
 	char *qnichost;
 	struct addrinfo hints, *res;
@@ -160,29 +161,43 @@
 				free(qnichost);
 				qnichost = NULL;
 			}
-			for (i = j = 0; (*argv)[i]; i++) {
-				if ((*argv)[i] == '.') {
-					j = i;
-				}
+			for (i = 0; (*argv)[i]; i++);
+			if (i <= 1) {
+				errx(EX_NOHOST,
+					"Can't search for the null string.");
 			}
-			if (j != 0) {
-				qnichost = (char *) calloc(i - j + 1 +
-				    strlen(QNICHOST_TAIL), sizeof(char));
-				if (!qnichost) {
-					err(1, "calloc");
+			if ((*argv)[i - 1] == '.') i--;
+			for (j = 0; (*argv)[j]; j++) {
+				if (((*argv)[j] == '.') && !found) {
+					qnichost = (char *) calloc(i - j + 1 +
+					    	strlen(QNICHOST_TAIL),
+						sizeof(char));
+					if (!qnichost) {
+						err(1, "calloc");
+					}
+					strncpy(qnichost, *argv + j + 1,
+						i - j - 1);
+					strcat(qnichost, QNICHOST_TAIL);
+
+					memset(&hints, 0, sizeof(hints));
+					hints.ai_flags = 0;
+					hints.ai_family = AF_UNSPEC;
+					hints.ai_socktype = SOCK_STREAM;
+					error = getaddrinfo(qnichost, "whois",
+							&hints, &res);
+					if (error == 0) {
+						found = 1;
+					} else {
+						free(qnichost);
+						qnichost = NULL;
+					}
 				}
-				strcpy(qnichost, *argv + j + 1);
-				strcat(qnichost, QNICHOST_TAIL);
 
-				memset(&hints, 0, sizeof(hints));
-				hints.ai_flags = 0;
-				hints.ai_family = AF_UNSPEC;
-				hints.ai_socktype = SOCK_STREAM;
-				error = getaddrinfo(qnichost, "whois",
-						&hints, &res);
-				if (error != 0)
-					errx(EX_NOHOST, "%s: %s", qnichost,
-						gai_strerror(error));
+			}
+			if (!found) {
+				errx(EX_NOHOST,
+					"Cannot locate whois server for %s",
+					*argv);
 			}
 		}
 		if (!qnichost) {
-- 
Phil Homewood                 pdh@asiaonline.net
Senior Technician             +61 7 3620 1930
Asia Online (Queensland)      http://www.asiaonline.net/


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001219111759.A12195>