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>
