The whois() function is called in a loop so make sure we close the

socket to the whois server before returning.

Obtained from:	OpenBSD
This commit is contained in:
Kevin Lo 2014-01-04 15:51:52 +00:00
parent c809a67a72
commit 372ab06ee7

View File

@ -275,7 +275,7 @@ s_asprintf(char **ret, const char *format, ...)
static void static void
whois(const char *query, const char *hostname, int flags) whois(const char *query, const char *hostname, int flags)
{ {
FILE *sfi, *sfo; FILE *fp;
struct addrinfo *hostres, *res; struct addrinfo *hostres, *res;
char *buf, *host, *nhost, *p; char *buf, *host, *nhost, *p;
int i, s; int i, s;
@ -295,20 +295,19 @@ whois(const char *query, const char *hostname, int flags)
if (res == NULL) if (res == NULL)
err(EX_OSERR, "connect()"); err(EX_OSERR, "connect()");
sfi = fdopen(s, "r"); fp = fdopen(s, "r+");
sfo = fdopen(s, "w"); if (fp == NULL)
if (sfi == NULL || sfo == NULL)
err(EX_OSERR, "fdopen()"); err(EX_OSERR, "fdopen()");
if (strcmp(hostname, GERMNICHOST) == 0) { if (strcmp(hostname, GERMNICHOST) == 0) {
fprintf(sfo, "-T dn,ace -C US-ASCII %s\r\n", query); fprintf(fp, "-T dn,ace -C US-ASCII %s\r\n", query);
} else if (strcmp(hostname, "dk" QNICHOST_TAIL) == 0) { } else if (strcmp(hostname, "dk" QNICHOST_TAIL) == 0) {
fprintf(sfo, "--show-handles %s\r\n", query); fprintf(fp, "--show-handles %s\r\n", query);
} else { } else {
fprintf(sfo, "%s\r\n", query); fprintf(fp, "%s\r\n", query);
} }
fflush(sfo); fflush(fp);
nhost = NULL; nhost = NULL;
while ((buf = fgetln(sfi, &len)) != NULL) { while ((buf = fgetln(fp, &len)) != NULL) {
while (len > 0 && isspace((unsigned char)buf[len - 1])) while (len > 0 && isspace((unsigned char)buf[len - 1]))
buf[--len] = '\0'; buf[--len] = '\0';
printf("%.*s\n", (int)len, buf); printf("%.*s\n", (int)len, buf);
@ -350,6 +349,7 @@ whois(const char *query, const char *hostname, int flags)
} }
} }
} }
fclose(fp);
if (nhost != NULL) { if (nhost != NULL) {
whois(query, nhost, 0); whois(query, nhost, 0);
free(nhost); free(nhost);