View | Details | Raw Unified | Return to bug 243862 | Differences between
and this patch

Collapse All | Expand All

(-)whois.c (-11 / +37 lines)
Lines 117-122 Link Here
117
	WHOIS_REFERRAL("Whois Server:"),
117
	WHOIS_REFERRAL("Whois Server:"),
118
	WHOIS_REFERRAL("Registrar WHOIS Server:"), /* corporatedomains.com */
118
	WHOIS_REFERRAL("Registrar WHOIS Server:"), /* corporatedomains.com */
119
	WHOIS_REFERRAL("ReferralServer:  whois://"), /* ARIN */
119
	WHOIS_REFERRAL("ReferralServer:  whois://"), /* ARIN */
120
	WHOIS_REFERRAL("ReferralServer:  rwhois://"), /* ARIN */
120
	WHOIS_REFERRAL("descr:          region. Please query"), /* AfriNIC */
121
	WHOIS_REFERRAL("descr:          region. Please query"), /* AfriNIC */
121
	{ NULL, 0 }
122
	{ NULL, 0 }
122
};
123
};
Lines 156-165 Link Here
156
static const char *port = DEFAULT_PORT;
157
static const char *port = DEFAULT_PORT;
157
158
158
static const char *choose_server(char *);
159
static const char *choose_server(char *);
159
static struct addrinfo *gethostinfo(char const *host, int exitnoname);
160
static struct addrinfo *gethostinfo(const char *, const char *, int);
160
static void s_asprintf(char **ret, const char *format, ...) __printflike(2, 3);
161
static void s_asprintf(char **ret, const char *format, ...) __printflike(2, 3);
161
static void usage(void);
162
static void usage(void);
162
static void whois(const char *, const char *, int);
163
static void whois(const char *, const char *, const char *, int);
163
164
164
int
165
int
165
main(int argc, char *argv[])
166
main(int argc, char *argv[])
Lines 255-265 Link Here
255
		if (country != NULL) {
256
		if (country != NULL) {
256
			char *qnichost;
257
			char *qnichost;
257
			s_asprintf(&qnichost, "%s%s", country, QNICHOST_TAIL);
258
			s_asprintf(&qnichost, "%s%s", country, QNICHOST_TAIL);
258
			whois(*argv, qnichost, flags);
259
			whois(*argv, qnichost, port, flags);
259
			free(qnichost);
260
			free(qnichost);
260
		} else
261
		} else
261
			whois(*argv, host != NULL ? host :
262
			whois(*argv, host != NULL ? host :
262
			      choose_server(*argv), flags);
263
			      choose_server(*argv), port, flags);
263
		reset_rir();
264
		reset_rir();
264
		argv++;
265
		argv++;
265
	}
266
	}
Lines 283-289 Link Here
283
}
284
}
284
285
285
static struct addrinfo *
286
static struct addrinfo *
286
gethostinfo(char const *host, int exit_on_noname)
287
gethostinfo(const char *host, const char *hport, int exit_on_noname)
287
{
288
{
288
	struct addrinfo hints, *res;
289
	struct addrinfo hints, *res;
289
	int error;
290
	int error;
Lines 293-299 Link Here
293
	hints.ai_family = AF_UNSPEC;
294
	hints.ai_family = AF_UNSPEC;
294
	hints.ai_socktype = SOCK_STREAM;
295
	hints.ai_socktype = SOCK_STREAM;
295
	res = NULL;
296
	res = NULL;
296
	error = getaddrinfo(host, port, &hints, &res);
297
	error = getaddrinfo(host, hport, &hints, &res);
297
	if (error && (exit_on_noname || error != EAI_NONAME))
298
	if (error && (exit_on_noname || error != EAI_NONAME))
298
		err(EX_NOHOST, "%s: %s", host, gai_strerror(error));
299
		err(EX_NOHOST, "%s: %s", host, gai_strerror(error));
299
	return (res);
300
	return (res);
Lines 444-458 Link Here
444
}
445
}
445
446
446
static void
447
static void
447
whois(const char *query, const char *hostname, int flags)
448
whois(const char *query, const char *hostname, const char *hostport, int flags)
448
{
449
{
449
	FILE *fp;
450
	FILE *fp;
450
	struct addrinfo *hostres;
451
	struct addrinfo *hostres;
451
	char *buf, *host, *nhost, *p;
452
	char *buf, *host, *nhost, *nport, *p;
452
	int comment, s, f;
453
	int comment, s, f;
453
	size_t len, i;
454
	size_t len, i;
454
455
455
	hostres = gethostinfo(hostname, 1);
456
	hostres = gethostinfo(hostname, hostport, 1);
456
	s = connect_to_any_host(hostres);
457
	s = connect_to_any_host(hostres);
457
	if (s == -1)
458
	if (s == -1)
458
		err(EX_OSERR, "connect()");
459
		err(EX_OSERR, "connect()");
Lines 532-545 Link Here
532
				SCAN(p, buf+len, *p == ' ');
533
				SCAN(p, buf+len, *p == ' ');
533
				host = p;
534
				host = p;
534
				SCAN(p, buf+len, ishost(*p));
535
				SCAN(p, buf+len, ishost(*p));
535
				if (p > host)
536
				if (p > host) {
537
					char *pstr;
538
536
					s_asprintf(&nhost, "%.*s",
539
					s_asprintf(&nhost, "%.*s",
537
						   (int)(p - host), host);
540
						   (int)(p - host), host);
541
542
					if (*p != ':') {
543
						s_asprintf(&nport, "%s", port);
544
						break;
545
					}
546
547
					pstr = ++p;
548
					SCAN(p, buf+len, isdigit(*p));
549
					if (p > pstr && (p - pstr) < 6) {
550
						s_asprintf(&nport, "%.*s",
551
							(int)(p - pstr), pstr);
552
						break;
553
					}
554
555
					/* Invalid port; don't recurse */
556
					free(nhost);
557
					nhost = NULL;
558
				}
538
				break;
559
				break;
539
			}
560
			}
540
			for (i = 0; actually_arin[i] != NULL; i++) {
561
			for (i = 0; actually_arin[i] != NULL; i++) {
541
				if (strncmp(buf, actually_arin[i], len) == 0) {
562
				if (strncmp(buf, actually_arin[i], len) == 0) {
542
					s_asprintf(&nhost, "%s", ANICHOST);
563
					s_asprintf(&nhost, "%s", ANICHOST);
564
					s_asprintf(&nport, "%s", port);
543
					break;
565
					break;
544
				}
566
				}
545
			}
567
			}
Lines 567-572 Link Here
567
		    strcasecmp(try_rir[i].host, nhost) == 0) {
589
		    strcasecmp(try_rir[i].host, nhost) == 0) {
568
			    free(nhost);
590
			    free(nhost);
569
			    nhost = NULL;
591
			    nhost = NULL;
592
			    free(nport);
570
			    f = 1;
593
			    f = 1;
571
		}
594
		}
572
	}
595
	}
Lines 576-581 Link Here
576
			if (try_rir[i].loop == 0) {
599
			if (try_rir[i].loop == 0) {
577
				s_asprintf(&nhost, "%s",
600
				s_asprintf(&nhost, "%s",
578
					try_rir[i].host);
601
					try_rir[i].host);
602
				s_asprintf(&nport, "%s",
603
					port);
579
				break;
604
				break;
580
			}
605
			}
581
		}
606
		}
Lines 584-592 Link Here
584
		/* Ignore self-referrals */
609
		/* Ignore self-referrals */
585
		if (strcasecmp(hostname, nhost) != 0) {
610
		if (strcasecmp(hostname, nhost) != 0) {
586
			printf("# %s\n\n", nhost);
611
			printf("# %s\n\n", nhost);
587
			whois(query, nhost, flags);
612
			whois(query, nhost, nport, flags);
588
		}
613
		}
589
		free(nhost);
614
		free(nhost);
615
		free(nport);
590
	}
616
	}
591
}
617
}
592
618

Return to bug 243862