diff options
author | fanf <fanf@FreeBSD.org> | 2016-01-23 01:20:58 +0000 |
---|---|---|
committer | fanf <fanf@FreeBSD.org> | 2016-01-23 01:20:58 +0000 |
commit | 7e5d57d7f131dab88d272d449b72eee8d68773b0 (patch) | |
tree | 866686b035e77c47e5d0b2b4e7c283a628223ce8 /usr.bin/whois | |
parent | d92f8a19a91620b66da4d56f1141aedb44582c11 (diff) | |
download | FreeBSD-src-7e5d57d7f131dab88d272d449b72eee8d68773b0.zip FreeBSD-src-7e5d57d7f131dab88d272d449b72eee8d68773b0.tar.gz |
Fix a regression in the .de and .dk whois special cases
Ensure the special cases trigger whether we come via a referral
or via the -c option. Match host names case-insensitively.
Use the default character set supported by .de (UTF-8) since that
is more compatible with the modern world than ISO 8859-1. Persuade
them to give us a useful answer whether an internationalized
domain name is given in UTF-8 or in punycode.
Diffstat (limited to 'usr.bin/whois')
-rw-r--r-- | usr.bin/whois/whois.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/usr.bin/whois/whois.c b/usr.bin/whois/whois.c index e7bf94f..1630067 100644 --- a/usr.bin/whois/whois.c +++ b/usr.bin/whois/whois.c @@ -61,7 +61,8 @@ __FBSDID("$FreeBSD$"); #define ABUSEHOST "whois.abuse.net" #define ANICHOST "whois.arin.net" -#define DENICHOST "de" QNICHOST_TAIL +#define DENICHOST "whois.denic.de" +#define DKNICHOST "whois.dk-hostmaster.dk" #define FNICHOST "whois.afrinic.net" #define GNICHOST "whois.nic.gov" #define IANAHOST "whois.iana.org" @@ -415,17 +416,24 @@ done: err(EX_OSERR, "fdopen()"); if (!(flags & WHOIS_SPAM_ME) && - strcmp(hostname, DENICHOST) == 0) - fprintf(fp, "-T dn,ace -C ISO-8859-1 %s\r\n", query); - else if (!(flags & WHOIS_SPAM_ME) && - strcmp(hostname, "dk" QNICHOST_TAIL) == 0) + (strcasecmp(hostname, DENICHOST) == 0 || + strcasecmp(hostname, "de" QNICHOST_TAIL) == 0)) { + const char *q; + int idn = 0; + for (q = query; *q != '\0'; q++) + if (!isascii(*q)) + idn = 1; + fprintf(fp, "-T dn%s %s\r\n", idn ? "" : ",ace", query); + } else if (!(flags & WHOIS_SPAM_ME) && + (strcasecmp(hostname, DKNICHOST) == 0 || + strcasecmp(hostname, "dk" QNICHOST_TAIL) == 0)) fprintf(fp, "--show-handles %s\r\n", query); else if ((flags & WHOIS_SPAM_ME) || strchr(query, ' ') != NULL) fprintf(fp, "%s\r\n", query); - else if (strcmp(hostname, ANICHOST) == 0) + else if (strcasecmp(hostname, ANICHOST) == 0) fprintf(fp, "+ %s\r\n", query); - else if (strcmp(hostres->ai_canonname, VNICHOST) == 0) + else if (strcasecmp(hostres->ai_canonname, VNICHOST) == 0) fprintf(fp, "domain %s\r\n", query); else fprintf(fp, "%s\r\n", query); |