[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.59 and 1.60

version 1.59, 2024/03/05 16:06:32 version 1.60, 2024/03/16 02:00:31
Line 64 
Line 64 
 #define WHOIS_PORT      "whois"  #define WHOIS_PORT      "whois"
 #define WHOIS_SERVER_ID "Registrar WHOIS Server:"  #define WHOIS_SERVER_ID "Registrar WHOIS Server:"
   
 #define WHOIS_RECURSE           0x01  #define WHOIS_RECURSE   0x01
 #define WHOIS_QUICK             0x02  #define WHOIS_QUICK     0x02
   #define WHOIS_SPAM_ME   0x04
   
   #define CHOPSPAM        ">>> Last update of WHOIS database:"
   
 const char *port_whois = WHOIS_PORT;  const char *port_whois = WHOIS_PORT;
 const char *ip_whois[] = { LNICHOST, RNICHOST, PNICHOST, BNICHOST,  const char *ip_whois[] = { LNICHOST, RNICHOST, PNICHOST, BNICHOST,
     AFNICHOST, NULL };      AFNICHOST, NULL };
Line 83 
Line 86 
   
         country = host = NULL;          country = host = NULL;
         flags = rval = 0;          flags = rval = 0;
         while ((ch = getopt(argc, argv, "aAc:dgh:iIlmp:PqQrR")) != -1)          while ((ch = getopt(argc, argv, "aAc:dgh:iIlmp:PqQrRS")) != -1)
                 switch (ch) {                  switch (ch) {
                 case 'a':                  case 'a':
                         host = ANICHOST;                          host = ANICHOST;
Line 133 
Line 136 
                 case 'R':                  case 'R':
                         host = RUNICHOST;                          host = RUNICHOST;
                         break;                          break;
                   case 'S':
                           flags |= WHOIS_SPAM_ME;
                           break;
                 default:                  default:
                         usage();                          usage();
                 }                  }
Line 206 
Line 212 
                 return (1);                  return (1);
         }          }
   
         if (strcmp(server, "whois.denic.de") == 0 ||          if (!(flags & WHOIS_SPAM_ME) &&
             strcmp(server, "de" QNICHOST_TAIL) == 0)              (strcmp(server, "whois.denic.de") == 0 ||
               strcmp(server, "de" QNICHOST_TAIL) == 0))
                 fmt = "-T dn,ace -C ISO-8859-1 %s\r\n";                  fmt = "-T dn,ace -C ISO-8859-1 %s\r\n";
         else if (strcmp(server, "whois.dk-hostmaster.dk") == 0 ||          else if (!(flags & WHOIS_SPAM_ME) &&
             strcmp(server, "dk" QNICHOST_TAIL) == 0)              (strcmp(server, "whois.dk-hostmaster.dk") == 0 ||
               strcmp(server, "dk" QNICHOST_TAIL) == 0))
                 fmt = "--show-handles %s\r\n";                  fmt = "--show-handles %s\r\n";
         else          else
                 fmt = "%s\r\n";                  fmt = "%s\r\n";
Line 222 
Line 230 
         fflush(fp);          fflush(fp);
         nhost = NULL;          nhost = NULL;
         while ((buf = fgetln(fp, &len)) != NULL) {          while ((buf = fgetln(fp, &len)) != NULL) {
                   /* Nominet */
                   if (!(flags & WHOIS_SPAM_ME) &&
                       len == 5 && strncmp(buf, "-- \r\n", 5) == 0)
                           break;
   
                 p = buf + len - 1;                  p = buf + len - 1;
                 if (isspace((unsigned char)*p)) {                  if (isspace((unsigned char)*p)) {
                         do                          do
Line 236 
Line 249 
                 }                  }
                 puts(buf);                  puts(buf);
   
                 if (nhost != NULL || !(flags & WHOIS_RECURSE))                  if (nhost == NULL && (flags & WHOIS_RECURSE)) {
                         continue;                          if ((p = strstr(buf, WHOIS_SERVER_ID))) {
                                   p += sizeof(WHOIS_SERVER_ID) - 1;
                 if ((p = strstr(buf, WHOIS_SERVER_ID))) {                                  while (isblank((unsigned char)*p))
                         p += sizeof(WHOIS_SERVER_ID) - 1;                                          p++;
                         while (isblank((unsigned char)*p))                                  if ((len = strcspn(p, " \t\n\r"))) {
                                 p++;                                          if ((nhost = malloc(len + 1)) == NULL)
                         if ((len = strcspn(p, " \t\n\r"))) {                                                  err(1, "malloc");
                                 if ((nhost = malloc(len + 1)) == NULL)                                          memcpy(nhost, p, len);
                                         err(1, "malloc");                                          nhost[len] = '\0';
                                 memcpy(nhost, p, len);  
                                 nhost[len] = '\0';  
                         }  
                 } else if (strcmp(server, ANICHOST) == 0) {  
                         for (p = buf; *p != '\0'; p++)  
                                 *p = tolower((unsigned char)*p);  
                         for (i = 0; ip_whois[i] != NULL; i++) {  
                                 if (strstr(buf, ip_whois[i]) != NULL) {  
                                         nhost = strdup(ip_whois[i]);  
                                         if (nhost == NULL)  
                                                 err(1, "strdup");  
                                         break;  
                                 }                                  }
                           } else if (strcmp(server, ANICHOST) == 0) {
                                   for (p = buf; *p != '\0'; p++)
                                           *p = tolower((unsigned char)*p);
                                   for (i = 0; ip_whois[i] != NULL; i++) {
                                           if (strstr(buf, ip_whois[i]) != NULL) {
                                                   nhost = strdup(ip_whois[i]);
                                                   if (nhost == NULL)
                                                           err(1, "strdup");
                                                   break;
                                           }
                                   }
                         }                          }
                   }
   
                   /* Verisign etc. */
                   if (!(flags & WHOIS_SPAM_ME) &&
                       len >= sizeof(CHOPSPAM)-1 &&
                       (strncasecmp(buf, CHOPSPAM, sizeof(CHOPSPAM)-1) == 0 ||
                        strncasecmp(buf, &CHOPSPAM[4], sizeof(CHOPSPAM)-5) == 0)) {
                           printf("\n");
                           break;
                 }                  }
         }          }
         fclose(fp);          fclose(fp);

Legend:
Removed from v.1.59  
changed lines
  Added in v.1.60