Certain (non-domain) queries combined with an incompatible output option (--whois) should return a non-zero exit code and a warning or error message. Presently, queries for an ASN or IP address combined with the --whois output option emit nothing but still return a zero exit code, which can be confusing when there is also no warning or error emitted. The same (non-domain) queries function correctly with --text output, but my hope is that the user experience can be further improved when attempting output options that are incompatible, specifically where the user is informed via a warning or error message in combination with a non-zero exit code.
Examples
~/go/bin/rdap --cache-dir='' --whois AS1
% ~/go/bin/rdap --cache-dir='' --whois AS1
% echo $?
0
Verbose OpenRDAP whois output with an ASN query input
% ~/go/bin/rdap --verbose --cache-dir='' --whois AS1
# OpenRDAP v0.9.1
#
# rdap: Configuring query...
# rdap: Using in-memory cache
# rdap: Bootstrap URL is default 'https://data.iana.org/rdap/'
# rdap: Bootstrap cache TTL set to 3600 seconds
# rdap: Timeout is 30 seconds
#
# client: Running...
# client: Request type : autnum
# client: Request query : 1
# client: Request URL : TBD, bootstrap required
# bootstrap: Looking up...
# bootstrap: Question type : asn
# bootstrap: Question query: 1
# bootstrap: Cache state: asn.json: not cached
# bootstrap: Downloading asn.json
# bootstrap: Looked up '1'
# bootstrap: Matching entry 'AS1-AS1876'
# bootstrap: Service URL #1: 'https://rdap.arin.net/registry/'
# bootstrap: Service URL #2: 'http://rdap.arin.net/registry/'
# client: RDAP URL #0 is https://rdap.arin.net/registry/autnum/1
# client: RDAP URL #1 is http://rdap.arin.net/registry/autnum/1
# client: GET https://rdap.arin.net/registry/autnum/1
# client: status-code=200, content-type=application/rdap+json, length=9971 bytes, duration=214.325667ms
# client: Successfully decoded response
#
# rdap: Finished in 340.433833ms
% echo $?
0
~/go/bin/rdap --cache-dir='' --whois 1.1.1.1
% ~/go/bin/rdap --cache-dir='' --whois 1.1.1.1
% echo $?
0
Verbose OpenRDAP whois output with an IPv4 query input
% ~/go/bin/rdap --verbose --cache-dir='' --whois 1.1.1.1
# OpenRDAP v0.9.1
#
# rdap: Configuring query...
# rdap: Using in-memory cache
# rdap: Bootstrap URL is default 'https://data.iana.org/rdap/'
# rdap: Bootstrap cache TTL set to 3600 seconds
# rdap: Timeout is 30 seconds
#
# client: Running...
# client: Request type : ip
# client: Request query : 1.1.1.1
# client: Request URL : TBD, bootstrap required
# bootstrap: Looking up...
# bootstrap: Question type : ipv4
# bootstrap: Question query: 1.1.1.1
# bootstrap: Cache state: ipv4.json: not cached
# bootstrap: Downloading ipv4.json
# bootstrap: Looked up '1.1.1.1/32'
# bootstrap: Matching entry '1.0.0.0/8'
# bootstrap: Service URL #1: 'https://rdap.apnic.net/'
# client: RDAP URL #0 is https://rdap.apnic.net/ip/1.1.1.1
# client: GET https://rdap.apnic.net/ip/1.1.1.1
# client: status-code=200, content-type=application/rdap+json, length=3854 bytes, duration=419.6ms
# client: Successfully decoded response
#
# rdap: Finished in 614.786583ms
% echo $?
0
~/go/bin/rdap --cache-dir='' --whois 2606:4700:4700::1111
% ~/go/bin/rdap --cache-dir='' --whois 2606:4700:4700::1111
% echo $?
0
Verbose OpenRDAP whois output with an IPv6 query input
% ~/go/bin/rdap --verbose --cache-dir='' --whois 2606:4700:4700::1111
# OpenRDAP v0.9.1
#
# rdap: Configuring query...
# rdap: Using in-memory cache
# rdap: Bootstrap URL is default 'https://data.iana.org/rdap/'
# rdap: Bootstrap cache TTL set to 3600 seconds
# rdap: Timeout is 30 seconds
#
# client: Running...
# client: Request type : ip
# client: Request query : 2606:4700:4700::1111
# client: Request URL : TBD, bootstrap required
# bootstrap: Looking up...
# bootstrap: Question type : ipv6
# bootstrap: Question query: 2606:4700:4700::1111
# bootstrap: Cache state: ipv6.json: not cached
# bootstrap: Downloading ipv6.json
# bootstrap: Looked up '2606:4700:4700::1111/128'
# bootstrap: Matching entry '2600::/12'
# bootstrap: Service URL #1: 'https://rdap.arin.net/registry/'
# bootstrap: Service URL #2: 'http://rdap.arin.net/registry/'
# client: RDAP URL #0 is https://rdap.arin.net/registry/ip/2606:4700:4700::1111
# client: RDAP URL #1 is http://rdap.arin.net/registry/ip/2606:4700:4700::1111
# client: GET https://rdap.arin.net/registry/ip/2606:4700:4700::1111
# client: status-code=200, content-type=application/rdap+json, length=12130 bytes, duration=307.6895ms
# client: Successfully decoded response
#
# rdap: Finished in 386.910542ms
% echo $?
0
Certain (non-domain) queries combined with an incompatible output option (
--whois) should return a non-zero exit code and a warning or error message. Presently, queries for an ASN or IP address combined with the--whoisoutput option emit nothing but still return a zero exit code, which can be confusing when there is also no warning or error emitted. The same (non-domain) queries function correctly with--textoutput, but my hope is that the user experience can be further improved when attempting output options that are incompatible, specifically where the user is informed via a warning or error message in combination with a non-zero exit code.Examples
~/go/bin/rdap --cache-dir='' --whois AS1Verbose OpenRDAP whois output with an ASN query input
~/go/bin/rdap --cache-dir='' --whois 1.1.1.1Verbose OpenRDAP whois output with an IPv4 query input
~/go/bin/rdap --cache-dir='' --whois 2606:4700:4700::1111Verbose OpenRDAP whois output with an IPv6 query input