Bug 28426

Summary: [PATCH] whois(1) - Recursive IP Searches
Product: Base System Reporter: mike <mike>
Component: binAssignee: Mike Barcroft <mike>
Status: Closed FIXED    
Severity: Affects Only Me CC: phk
Priority: Normal    
Version: 5.0-CURRENT   
Hardware: Any   
OS: Any   
Attachments:
Description Flags
file.diff none

Description mike 2001-06-26 22:10:00 UTC
o Implement recursive IP Address searches based on the results of
  a query to ARIN.  This allows a user to type 'whois 210.139.255.223'
  and get the expected results.
  [Requested by joe and phk]
o Update documentation to reflect this.
o Clean up some grammar nearby.

This was sent to -hackers.  There were no objections related
to this patch.

How-To-Repeat: 
	Apply patch below.
Comment 1 Peter Pentchev 2001-06-27 10:41:46 UTC
On Tue, Jun 26, 2001 at 04:57:31PM -0400, Mike Barcroft wrote:
> 
> >Number:         28426
> >Category:       bin
> >Synopsis:       [PATCH] whois(1) - Recursive IP Searches
> >Originator:     Mike Barcroft

Just a couple of minor comments :)

> +If a query to
> +.Tn ARIN
> +references
> +.Tn APNIC
> +or
> +.Tn RIPE ,
> +that server will be query also, provided that the

ITYM "queried".

> +.Fl Q
> +option isn't specified.

Ruslan says 'is not' should be spelled out in full :)

>  .Pp
> -If no required
> -.Pa whois-servers.net
> -subdomain found, fallback to
> -.Pa whois.crsnic.net
> -provided.
> +If the query isn't a domain or IP address,

Same, 'is not'.

Other than that, looks good.

G'luck,
Peter

-- 
If you think this sentence is confusing, then change one pig.
Comment 2 mike 2001-06-27 15:59:58 UTC
At the end of this e-mail is an updated patch based on Peter's comments.


Best regards,
Mike Barcroft

-----------------------------------------------------------------------

whois.20010627.patch

o Implement recursive IP Address searches based on the results of
  a query to ARIN.  This allows a user to type 'whois 210.139.255.223'
  and get the expected results.
  [Requested by joe and phk]
o Update documentation to reflect this.
o Clean up some grammar nearby.


Index: whois/whois.1
===================================================================
RCS file: /home/ncvs/src/usr.bin/whois/whois.1,v
retrieving revision 1.18
diff -u -r1.18 whois.1
--- whois/whois.1	2001/05/28 21:37:29	1.18
+++ whois/whois.1	2001/06/27 14:36:50
@@ -80,7 +80,7 @@
 .Pp
 By default
 .Nm
-construct the name of a whois server to use from the top-level domain
+constructs the name of a whois server to use from the top-level domain
 .Pq Tn TLD
 of the supplied (single) argument, and appending
 .Qq Li .whois-servers.net .
@@ -91,12 +91,20 @@
 address is specified, the whois server will default to the American
 Registry for Internet Numbers
 .Pq Tn ARIN .
+If a query to
+.Tn ARIN
+references
+.Tn APNIC
+or
+.Tn RIPE ,
+that server will be queried also, provided that the
+.Fl Q
+option is not specified.
 .Pp
-If no required
-.Pa whois-servers.net
-subdomain found, fallback to
-.Pa whois.crsnic.net
-provided.
+If the query is not a domain or IP address,
+.Nm
+will fallback to
+.Pa whois.crsnic.net .
 .It Fl i
 Use the Network Solutions Registry for Internet Numbers
 .Pq Pa whois.networksolutions.com
Index: whois/whois.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/whois/whois.c,v
retrieving revision 1.19
diff -u -r1.19 whois.c
--- whois/whois.c	2001/06/22 01:52:37	1.19
+++ whois/whois.c	2001/06/27 14:36:51
@@ -77,6 +77,8 @@
 #define WHOIS_INIC_FALLBACK	0x02
 #define WHOIS_QUICK		0x04
 
+const char *ip_whois[] = { RNICHOST, PNICHOST, NULL };
+
 static void usage(void);
 static void whois(char *, struct addrinfo *, int);
 
@@ -208,7 +210,7 @@
 	FILE *sfi, *sfo;
 	struct addrinfo hints, *res2;
 	char *buf, *nhost, *p;
-	int nomatch, error, s;
+	int i, nomatch, error, s;
 	size_t len;
 
 	for (; res; res = res->ai_next) {
@@ -234,13 +236,23 @@
 		while (len && isspace(buf[len - 1]))
 			buf[--len] = '\0';
 
-		if ((flags & WHOIS_RECURSE) && nhost == NULL &&
-		    (p = strstr(buf, WHOIS_SERVER_ID)) != NULL) {
-			p += sizeof(WHOIS_SERVER_ID) - 1;
-			if ((len = strcspn(p, " \t\n\r")) != 0) {
-				asprintf(&nhost, "%s", p);
-				if (nhost == NULL)
-					err(1, "asprintf()");
+		if ((flags & WHOIS_RECURSE) && nhost == NULL) {
+			p = strstr(buf, WHOIS_SERVER_ID);
+			if (p != NULL) {
+				p += sizeof(WHOIS_SERVER_ID) - 1;
+				if ((len = strcspn(p, " \t\n\r")) != 0) {
+					asprintf(&nhost, "%s", p);
+					if (nhost == NULL)
+						err(1, "asprintf()");
+				}
+			} else {
+				for (i = 0; ip_whois[i] != NULL; i++) {
+					if (strstr(buf, ip_whois[i]) == NULL)
+						continue;
+					nhost = strdup(ip_whois[i]);
+					if (nhost == NULL)
+						err(1, "strdup()");
+				}
 			}
 		}
Comment 3 dd freebsd_committer freebsd_triage 2001-06-28 00:09:01 UTC
State Changed
From-To: open->analyzed

Committed, thanks! 


Comment 4 dd freebsd_committer freebsd_triage 2001-06-28 00:09:01 UTC
Responsible Changed
From-To: freebsd-bugs->dd

My MFC reminder.
Comment 5 dd freebsd_committer freebsd_triage 2001-07-19 07:01:28 UTC
Responsible Changed
From-To: dd->mike

Your PR.
Comment 6 Mike Barcroft freebsd_committer freebsd_triage 2001-08-02 15:40:55 UTC
State Changed
From-To: analyzed->closed


Committed to -CURRENT and -STABLE.