Use the last ReferralServer field found

Because we want to follow the referral for the most specific record
returned.

Closes GitHub #185.
This commit is contained in:
Marco d'Itri 2025-05-05 23:41:19 +02:00
parent cf5fdb03e5
commit e30931d958
No known key found for this signature in database
GPG Key ID: CB3EC33AE1DED781

13
whois.c
View File

@ -892,9 +892,6 @@ static void find_referral_server_arin(char **referral_server, const char *buf)
{
char *p;
if (*referral_server)
return;
/* ARIN referrals:
* ReferralServer: rwhois://rwhois.fuse.net:4321/
* ReferralServer: whois://whois.ripe.net
@ -903,6 +900,16 @@ static void find_referral_server_arin(char **referral_server, const char *buf)
if (!strneq(buf, "ReferralServer:", 15))
return;
/* When whois.arin.net returns multiple NetRange records, they will
* appear from the less specific one to the most specific one.
* Since the range we care about is the most specific one then we
* need to use the last ReferralServer field found.
*/
if (*referral_server) {
free(*referral_server);
*referral_server = NULL;
}
if ((p = strstr(buf, "rwhois://")))
*referral_server = strdup(p + 9);
else if ((p = strstr(buf, "whois://")))