[BACK]Return to whois.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / whois

Diff for /src/usr.bin/whois/whois.c between version 1.3 and 1.4

version 1.3, 1997/01/15 23:43:39 version 1.4, 1998/02/24 10:09:50
Line 54 
Line 54 
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
   #include <sysexits.h>
 #include <unistd.h>  #include <unistd.h>
   
 #define NICHOST "whois.internic.net"  #define NICHOST         "whois.internic.net"
   #define DNICHOST        "nic.ddn.mil"
   #define ANICHOST        "whois.arin.net"
   #define RNICHOST        "whois.ripe.net"
   #define PNICHOST        "whois.apnic.net"
   #define WHOIS_PORT      43
   
 static void usage();  static void usage();
   
Line 76 
Line 82 
         char *host;          char *host;
   
         host = NICHOST;          host = NICHOST;
         while ((ch = getopt(argc, argv, "h:")) != -1)          while ((ch = getopt(argc, argv, "adh:pr")) != -1)
                 switch((char)ch) {                  switch((char)ch) {
                   case 'a':
                           host = ANICHOST;
                           break;
                   case 'd':
                           host = DNICHOST;
                           break;
                 case 'h':                  case 'h':
                         host = optarg;                          host = optarg;
                         break;                          break;
                   case 'p':
                           host = PNICHOST;
                           break;
                   case 'r':
                           host = RNICHOST;
                           break;
                 case '?':                  case '?':
                 default:                  default:
                         usage();                          usage();
Line 91 
Line 109 
         if (!argc)          if (!argc)
                 usage();                  usage();
   
         hp = gethostbyname(host);          s = socket(PF_INET, SOCK_STREAM, 0);
         if (hp == NULL) {          if (s < 0)
                 (void)fprintf(stderr, "whois: %s: ", host);                  err(EX_OSERR, "socket");
                 herror((char *)NULL);  
                 exit(1);          memset(&sin, 0, sizeof sin);
           sin.sin_len = sizeof sin;
           sin.sin_family = AF_INET;
   
           if (inet_aton(host, &sin.sin_addr) == 0) {
                   hp = gethostbyname2(host, AF_INET);
                   if (hp == NULL)
                           errx(EX_NOHOST, "%s: %s", host, hstrerror(h_errno));
                   host = hp->h_name;
                   sin.sin_addr = *(struct in_addr *)hp->h_addr_list[0];
         }          }
         host = hp->h_name;  
         s = socket(hp->h_addrtype, SOCK_STREAM, 0);  
         if (s < 0) {  
                 perror("whois: socket");  
                 exit(1);  
         }  
         bzero((caddr_t)&sin, sizeof (sin));  
         sin.sin_family = hp->h_addrtype;  
         if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {  
                 perror("whois: bind");  
                 exit(1);  
         }  
         bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length);  
         sp = getservbyname("whois", "tcp");          sp = getservbyname("whois", "tcp");
         if (sp == NULL) {          if (sp == NULL)
                 (void)fprintf(stderr, "whois: whois/tcp: unknown service\n");                  sin.sin_port = htons(WHOIS_PORT);
                 exit(1);          else
         }                  sin.sin_port = sp->s_port;
         sin.sin_port = sp->s_port;  
         if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {          if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0)
                 perror("whois: connect");                  err(EX_OSERR, "connect");
                 exit(1);  
         }  
         sfi = fdopen(s, "r");          sfi = fdopen(s, "r");
         sfo = fdopen(s, "w");          sfo = fdopen(s, "w");
         if (sfi == NULL || sfo == NULL) {          if (sfi == NULL || sfo == NULL)
                 perror("whois: fdopen");                  err(EX_OSERR, "fdopen");
                 (void)close(s);  
                 exit(1);  
         }  
         while (argc-- > 1)          while (argc-- > 1)
                 (void)fprintf(sfo, "%s ", *argv++);                  (void)fprintf(sfo, "%s ", *argv++);
         (void)fprintf(sfo, "%s\r\n", *argv);          (void)fprintf(sfo, "%s\r\n", *argv);
Line 139 
Line 150 
 static void  static void
 usage()  usage()
 {  {
         (void)fprintf(stderr, "usage: whois [-h hostname] name ...\n");          (void)fprintf(stderr, "usage: whois [-adpr] [-h hostname] name ...\n");
         exit(1);          exit(EX_USAGE);
 }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4