| Summary: | [PATCH] whois(1) - Recursive IP Searches | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Base System | Reporter: | mike <mike> | ||||
| Component: | bin | Assignee: | Mike Barcroft <mike> | ||||
| Status: | Closed FIXED | ||||||
| Severity: | Affects Only Me | CC: | phk | ||||
| Priority: | Normal | ||||||
| Version: | 5.0-CURRENT | ||||||
| Hardware: | Any | ||||||
| OS: | Any | ||||||
| Attachments: |
|
||||||
|
Description
mike
2001-06-26 22:10:00 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. 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()");
+ }
}
}
State Changed From-To: open->analyzed Committed, thanks! Responsible Changed From-To: freebsd-bugs->dd My MFC reminder. Responsible Changed From-To: dd->mike Your PR. State Changed From-To: analyzed->closed Committed to -CURRENT and -STABLE. |