Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/whois Merge in changes from OpenBSD 6.6 whois(1).



details:   https://anonhg.NetBSD.org/src/rev/7a85cfbdff65
branches:  trunk
changeset: 745377:7a85cfbdff65
user:      sevan <sevan%NetBSD.org@localhost>
date:      Sun Mar 01 02:19:43 2020 +0000

description:
Merge in changes from OpenBSD 6.6 whois(1).
This improves recursion support and querying whois servers.

diffstat:

 usr.bin/whois/whois.1 |   66 +++++++++++++-----------
 usr.bin/whois/whois.c |  135 ++++++++++++++++++++++++++++++++-----------------
 2 files changed, 125 insertions(+), 76 deletions(-)

diffs (truncated from 434 to 300 lines):

diff -r 578c21f41548 -r 7a85cfbdff65 usr.bin/whois/whois.1
--- a/usr.bin/whois/whois.1     Sat Feb 29 22:09:29 2020 +0000
+++ b/usr.bin/whois/whois.1     Sun Mar 01 02:19:43 2020 +0000
@@ -1,8 +1,8 @@
-.\"     $NetBSD: whois.1,v 1.26 2012/03/15 22:35:03 njoly Exp $
-.\"    $OpenBSD: whois.1,v 1.22 2003/09/02 18:50:07 jmc Exp $
+.\"     $NetBSD: whois.1,v 1.27 2020/03/01 02:19:43 sevan Exp $
+.\"     $OpenBSD: whois.1,v 1.36 2016/02/20 20:52:50 naddy Exp $
 .\"
 .\" Copyright (c) 1985, 1990, 1993
-.\"    The Regents of the University of California.  All rights reserved.
+.\"    The Regents of the University of California.  All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" modification, are permitted provided that the following conditions
@@ -30,7 +30,7 @@
 .\"
 .\"     @(#)whois.1    8.2 (Berkeley) 6/20/94
 .\"
-.Dd September 9, 2007
+.Dd March 1, 2020
 .Dt WHOIS 1
 .Os
 .Sh NAME
@@ -38,12 +38,12 @@
 .Nd Internet domain name and network number directory service
 .Sh SYNOPSIS
 .Nm whois
-.Op Fl 6AadfgilmQRr
+.Op Fl AadfgIilmPQRr
 .Oo
 .Fl c Ar country-code | Fl h Ar host
 .Oc
 .Op Fl p Ar port
-.Ar name Op Ar ...
+.Ar name ...
 .Sh DESCRIPTION
 The
 .Nm
@@ -53,11 +53,6 @@
 .Pp
 The options are as follows:
 .Bl -tag -width Ds
-.It Fl 6
-Use the IPv6 Resource Center
-.Pq Tn 6bone
-database.
-It contains network names and addresses for the IPv6 network.
 .It Fl A
 Use the Asia/Pacific Network Information Center
 .Pq Tn APNIC
@@ -69,11 +64,11 @@
 .Pq Tn ARIN
 database.
 It contains network numbers used in those parts of the world
-not covered by
+covered neither by
 .Tn AfriNIC ,
 .Tn APNIC ,
-.Tn LACNIC
-or by
+.Tn LACNIC ,
+nor by
 .Tn RIPE .
 .Pp
 (Hint: All point of contact handles in the
@@ -107,8 +102,11 @@
 .Nm
 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 .
+of the supplied (single) argument.
+For newer generic domains (gTLDs), a lookup for whois.nic.tld is attempted.
+For other TLDs, or if this lookup fails,
+.Qq Li .whois-servers.net
+is appended to the TLD.
 This effectively allows a suitable whois server to be selected
 automatically for a large number of
 .Tn TLDs .
@@ -131,6 +129,11 @@
 .Nm
 will fall back to
 .Pa whois.crsnic.net .
+.It Fl I
+Use the Internet Assigned Numbers Authority
+.Pq whois.iana.org
+root zone database.
+It contains information about top-level domains.
 .It Fl i
 Use the Network Solutions Registry for Internet Numbers
 .Pq Tn whois.networksolutions.com
@@ -175,6 +178,10 @@
 database.
 It contains route policy specifications for a large
 number of operators' networks.
+.It Fl P
+Use the PeeringDB database of AS numbers.
+It contains details about presence at internet peering points
+for many network operators.
 .It Fl p Ar port
 Connect to the whois server on
 .Ar port .
@@ -277,15 +284,6 @@
 .Tn TLDs
 can be queried by using a similar syntax.)
 .Pp
-The following example demonstrates how to obtain information about an
-.Tn IPv6
-address or hostname using the
-.Fl 6
-option, which directs the query to
-.Tn 6bone .
-.Pp
-.Dl "whois -6 IPv6-IP-Address"
-.Pp
 The following example demonstrates how to query
 a whois server using a non-standard port, where
 .Dq Li query-data
@@ -296,13 +294,21 @@
 (written numerically as 4321).
 .Pp
 .Dl "whois -h whois.example.com -p rwhois query-data"
-.Sh SEE ALSO
+.Sh STANDARDS
 .Rs
-.%A Ken Harrenstien
-.%A Vic White
+.%A K. Harrenstien
+.%A M. Stahl
+.%A E. Feinler
+.%D October 1985
+.%R RFC 954
 .%T NICNAME/WHOIS
-.%D 1 March 1982
-.%O RFC 812
+.Re
+.Pp
+.Rs
+.%A L. Daigle
+.%D September 2004
+.%R RFC 3912
+.%T WHOIS Protocol Specification
 .Re
 .Sh HISTORY
 The
diff -r 578c21f41548 -r 7a85cfbdff65 usr.bin/whois/whois.c
--- a/usr.bin/whois/whois.c     Sat Feb 29 22:09:29 2020 +0000
+++ b/usr.bin/whois/whois.c     Sun Mar 01 02:19:43 2020 +0000
@@ -1,5 +1,5 @@
-/*      $NetBSD: whois.c,v 1.36 2013/02/20 09:27:52 ws Exp $   */
-/*     $OpenBSD: whois.c,v 1.28 2003/09/18 22:16:15 fgsch Exp $        */
+/*      $NetBSD: whois.c,v 1.37 2020/03/01 02:19:43 sevan Exp $    */
+/*      $OpenBSD: whois.c,v 1.58 2018/06/19 11:28:11 jca Exp $   */
 
 /*
  * Copyright (c) 1980, 1993
@@ -41,7 +41,7 @@
 #if 0
 static const char sccsid[] = "@(#)whois.c      8.1 (Berkeley) 6/6/93";
 #else
-__RCSID("$NetBSD: whois.c,v 1.36 2013/02/20 09:27:52 ws Exp $");
+__RCSID("$NetBSD: whois.c,v 1.37 2020/03/01 02:19:43 sevan Exp $");
 #endif
 #endif /* not lint */
 
@@ -66,18 +66,19 @@
 #define        DNICHOST        "whois.nic.mil"
 #define        FNICHOST        "whois.afrinic.net"
 #define        GNICHOST        "whois.nic.gov"
+#define        IANAHOST        "whois.iana.org"
 #define        INICHOST        "whois.networksolutions.com"
 #define        LNICHOST        "whois.lacnic.net"
 #define        MNICHOST        "whois.ra.net"
 #define        NICHOST         "whois.crsnic.net"
+#define        PDBHOST         "whois.peeringdb.com"
 #define        PNICHOST        "whois.apnic.net"
 #define        QNICHOST_TAIL   ".whois-servers.net"
 #define        RNICHOST        "whois.ripe.net"
 #define        RUNICHOST       "whois.ripn.net"
-#define        SNICHOST        "whois.6bone.net"
 
 #define        WHOIS_PORT      "whois"
-#define        WHOIS_SERVER_ID "Whois Server:"
+#define        WHOIS_SERVER_ID "Registrar WHOIS Server:"
 
 #define WHOIS_RECURSE          0x01
 #define WHOIS_QUICK            0x02
@@ -88,7 +89,7 @@
 
 static void usage(void) __dead;
 static int whois(const char *, const char *, const char *, int);
-static const char *choose_server(const char *, const char *);
+static const char *choose_server(const char *, const char *, char **);
 
 int
 main(int argc, char *argv[])
@@ -96,13 +97,10 @@
        int ch, flags, rval;
        const char *host, *name, *country;
 
-#ifdef SOCKS
-       SOCKSinit(argv[0]);
-#endif
        country = host = NULL;
        flags = rval = 0;
-       while ((ch = getopt(argc, argv, "6Aac:dfgh:ilmp:qQRr")) != -1)
-               switch(ch) {
+       while ((ch = getopt(argc, argv, "aAc:dfgh:Iilmp:PqQRr")) != -1)
+               switch (ch) {
                case 'a':
                        host = ANICHOST;
                        break;
@@ -127,6 +125,9 @@
                case 'i':
                        host = INICHOST;
                        break;
+               case 'I':
+                       host = IANAHOST;
+                       break;
                case 'l':
                        host = LNICHOST;
                        break;
@@ -136,6 +137,9 @@
                case 'p':
                        port_whois = optarg;
                        break;
+               case 'P':
+                       host = PDBHOST;
+                       break;
                case 'q':
                        /* deprecated, now the default */
                        break;
@@ -148,9 +152,6 @@
                case 'R':
                        host = RUNICHOST;
                        break;
-               case '6':
-                       host = SNICHOST;
-                       break;
                default:
                        usage();
                }
@@ -162,16 +163,20 @@
 
        if (host == NULL && country == NULL && !(flags & WHOIS_QUICK))
                flags |= WHOIS_RECURSE;
-       for (name = *argv; (name = *argv) != NULL; argv++)
-               rval += whois(name, host ? host : choose_server(name, country),
-                   port_whois, flags);
-       return rval;
+       for (name = *argv; (name = *argv) != NULL; argv++) {
+               char *tofree = NULL;
+               const char *server =
+                   host ? host : choose_server(name, country, &tofree);
+               rval += whois(name, server, port_whois, flags);
+               free(tofree);
+       }
+       return (rval);
 }
 
 static int
 whois(const char *query, const char *server, const char *port, int flags)
 {
-       FILE *sfi, *sfo;
+       FILE *fp;
        char *buf, *p, *nhost, *nbuf = NULL;
        size_t len;
        int i, s, error;
@@ -184,7 +189,10 @@
        hints.ai_socktype = SOCK_STREAM;
        error = getaddrinfo(server, port, &hints, &res);
        if (error) {
-               warnx("%s: %s", server, gai_strerror(error));
+               if (error == EAI_SERVICE)
+                       warnx("%s: bad port", port);
+               else
+                       warnx("%s: %s", server, gai_strerror(error));
                return (1);
        }
 
@@ -204,30 +212,32 @@
                }
                break;  /*okay*/
        }
+       freeaddrinfo(res);
        if (s < 0) {
                if (reason) {
                        errno = error;
                        warn("%s: %s", server, reason);
                } else
                        warnx("Unknown error in connection attempt");
-               freeaddrinfo(res);
                return (1);
        }
 
        if (strcmp(server, "whois.denic.de") == 0 ||
-           strcmp(server, "de.whois-servers.net") == 0)
+           strcmp(server, "de" QNICHOST_TAIL) == 0)
                fmt = "-T dn,ace -C ISO-8859-1 ";



Home | Main Index | Thread Index | Old Index