Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Dec 2000 10:41:45 +1000 (EST)
From:      Phil Homewood <pdh@minotaur.int.bit.net.au>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   bin/23635: [PATCH] whois enhancement - smarter whois-servers.net lookups
Message-ID:  <200012190041.eBJ0fjl00856@minotaur.int.bit.net.au>
Resent-Message-ID: <200012190050.eBJ0o2288314@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         23635
>Category:       bin
>Synopsis:       [PATCH] whois enhancement - smarter whois-servers.net lookups
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Dec 18 16:50:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Phil Homewood
>Release:        FreeBSD 4.1-STABLE i386
>Organization:
Asia Online
>Environment:

FreeBSD 4.2-STABLE #0: Tue Dec 12 11:14:33 EST 2000

>Description:

whois doesn't look up registries for non-TLDs.

>How-To-Repeat:

whois bit.net.au
whois -h net.au.whois-servers.net bit.net.au

>Fix:

The following patch tries ever-shortening suffixes of the given
domain until it finds a whois-server to ask. It also fixes a
minor annoyance in that "whois example.com." fails.


--- usr.bin/whois/whois.c.orig	Sat Jul 15 17:29:31 2000
+++ usr.bin/whois/whois.c	Tue Dec 19 10:26:21 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,42 @@
 				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] == '.') 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");
+					}
+					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) {
+						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) {

>Release-Note:
>Audit-Trail:
>Unformatted:


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?200012190041.eBJ0fjl00856>