Date: Sun, 5 Dec 1999 17:12:26 -0600 From: "Bob Madden" <bob@clapton.atgsystems.com> To: "Rodney W. Grimes" <freebsd@gndrsh.dnsmgr.net>, "FreeBSD-Stable" <FreeBSD-Stable@FreeBSD.ORG> Cc: "Bob Madden" <bob@clapton.atgsystems.com> Subject: Re: Little whois patch. Message-ID: <005e01bf3f76$32bd2290$01000000@madman>
next in thread | raw e-mail | index | archive | help
Well, the day that Network Solutions turned over authority of Internic.net,
etc, to the DOC, I found this source, and compiled it on FreeBSD just fine,
although I do note that it was originally written for Linux:
***** BEGIN PASTE ****************
/*
* whois.c:
*
* whois - Internet user name directory service
*
* whois [ -h server ] name
*
* the -h option specifies the hostname or IP address of a whois server.
* (see the README file for details)
*
* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
/* Minor hack to support accessing arin.net by default for
non-alpha queries */
#ifndef lint
char copyright[] =
"@(#) Copyright (c) 1980 Regents of the University of California.\n\
All rights reserved.\n";
#endif not lint
#ifndef lint
static char sccsid[] = "@(#)whois.c 5.3 (Berkeley) 2/8/88";
#endif not lint
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <netdb.h>
#define NICHOST "whois.networksolutions.com"
#define IPHOST "whois.arin.net"
main(argc, argv)
int argc;
char *argv[];
{
int s;
register FILE *sfi, *sfo;
register int c;
char *host = IPHOST;
struct sockaddr_in sin;
struct hostent *hp;
struct servent *sp;
char *p;
argc--, argv++;
if (argc > 2 && strcmp(*argv, "-h") == 0) {
argv++, argc--;
host = *argv++;
argc--;
}
if (argc != 1) {
fprintf(stderr, "usage: whois [ -h host ] name\n");
exit(1);
}
/* Use NICHOST if any character is alpha */
if(host == IPHOST) {
p = *argv;
while(*p) {
if(isalpha(*p++))
host = NICHOST;
}
}
hp = gethostbyname(host);
if (hp == NULL) {
fprintf(stderr, "whois: ");
herror(host);
exit(1);
}
host = hp->h_name;
s = socket(hp->h_addrtype, SOCK_STREAM, 0);
if (s < 0) {
perror("whois: socket");
exit(2);
}
bzero((caddr_t)&sin, sizeof (sin));
sin.sin_family = hp->h_addrtype;
if (bind(s, &sin, sizeof (sin)) < 0) {
perror("whois: bind");
exit(3);
}
bcopy(hp->h_addr, &sin.sin_addr, hp->h_length);
sp = getservbyname("whois", "tcp");
if (sp == NULL) {
fprintf(stderr, "whois: whois/tcp: unknown service\n");
exit(4);
}
sin.sin_port = sp->s_port;
if (connect(s, &sin, sizeof (sin)) < 0) {
perror("whois: connect");
exit(5);
}
sfi = fdopen(s, "r");
sfo = fdopen(s, "w");
if (sfi == NULL || sfo == NULL) {
perror("fdopen");
close(s);
exit(1);
}
fprintf(sfo, "%s\r\n", *argv);
fflush(sfo);
while ((c = getc(sfi)) != EOF)
putchar(c);
exit(0);
}
*********** END PASTE ************
Bob Madden
>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<
--This Message Composed By: Bob Madden
-- bob@CLAPTON.ATGSYSTEMS.COM Sys Admin /Network Engineer
-----Original Message-----
From: Rodney W. Grimes <freebsd@gndrsh.dnsmgr.net>
To: Ben Smithurst <ben@scientia.demon.co.uk>
Cc: matt <matt@S02.ARPA-CANADA.NET>; FreeBSD-Stable@FreeBSD.ORG
<FreeBSD-Stable@FreeBSD.ORG>
Date: Sunday, December 05, 1999 4:55 PM
Subject: Re: Little whois patch.
>> matt wrote:
>>
>> > I noticed that the Canadian Internic was being left out of the
>> > whois command line opts, so I thought I'd add it to the options. I
really
>> > have no clue who to send this to, or if I should use send-pr maybe, but
>> > it's technically not a problem. Hopefully one of the committers can give
>> > me feedback on where this should go. It's diffed against 3.3-stable,
does
>> > nothing but give 'whois -c' for whois.internic.ca, us Canadians feel
left
>> > out, cheers. =)
>>
>> Can we (the UK) have a -u option too? :-) The host is whois.nic.uk.
>> Anyway, what happens when China want their own option, and find that -c
>> is taken? Wouldn't a more generic option make more sense, something like
>> -c <country>, eg `whois -c ca ...' or `whois -c uk ...' ?
>
>How about a much more elegant solution in that this data should not
>be coded in the program at all. Use of an external data file that
>maps regex's to whois servers living in /usr/share someplace would
>mean we could stop fussing with the binary and just fix the data
>file such that it DTRT for folks:
>
>.*\.{com,net,org}$ whois.networksolutions.com
>.*\.{mil}$ ???
>.*\.{edu}$ ???
>.*\.{ca}$ whois.internic.ca
>.*\.{uk}$ ???
>
>etc, etc....
>
>And -h would override even looking at this file...
>
>And for folks like me who do lots of rr queries I could locally add
>things like
>^AS[0-9]* whois.ra.net
>^MAINT-.* whois.ra.net
>^RTR-.* whois.ra.net
>^[1-9]*\.[0-9]*\.[0-9]*\.[0-9]* whois.arin.net
>
>Infact you could go one step further and even allow a ~/.whoisrc,
>so my users whouldn't get confused when whois gave them data from
>a routing registry :-)
>
>--
>Rod Grimes - KD7CAX @ CN85sl - (RWG25)
rgrimes@gndrsh.dnsmgr.net
>
>
>To Unsubscribe: send mail to majordomo@FreeBSD.org
>with "unsubscribe freebsd-stable" in the body of the message
>
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?005e01bf3f76$32bd2290$01000000>
