int i;
adns_rr_addr *ss;
const afinfo *ai;
+ char buf[MAX_ADDRSTRLEN];
ai = find_afinfo(sa->sa_family);
if (!ai) {
adns__diag(ads,-1,0,
"nameserver %s for unknown address family %d ignored",
- adns__sockaddr_ntoa(sa, n), sa->sa_family);
+ adns__sockaddr_ntoa(sa, n, buf), sa->sa_family);
}
for (i=0; i<ads->nservers; i++) {
if (ads->servers[i].addr.sa.sa_family == sa->sa_family &&
ai->sockaddr_equalp(sa, &ads->servers[i].addr.sa)) {
adns__debug(ads,-1,0,"duplicate nameserver %s ignored",
- adns__sockaddr_ntoa(sa, n));
+ adns__sockaddr_ntoa(sa, n, buf));
return;
}
}
if (ads->nservers>=MAXSERVERS) {
adns__diag(ads,-1,0,"too many nameservers, ignoring %s",
- adns__sockaddr_ntoa(sa, n));
+ adns__sockaddr_ntoa(sa, n, buf));
return;
}
static void ccf_nameserver(adns_state ads, const char *fn,
int lno, const char *buf) {
struct addrinfo *ai, ai_hint = { 0 };
+ char addrbuf[MAX_ADDRSTRLEN];
int err;
ai_hint.ai_family = AF_UNSPEC;
}
adns__debug(ads,-1,0,"using nameserver %s",
- adns__sockaddr_ntoa(ai->ai_addr, ai->ai_addrlen));
+ adns__sockaddr_ntoa(ai->ai_addr, ai->ai_addrlen, addrbuf));
addserver(ads, ai->ai_addr, ai->ai_addrlen);
freeaddrinfo(ai);
}
}
continue;
}
+ if (l>=8 && !memcmp(word,"adns_af:",8)) {
+ if (!strcmp(word+8,"v4only"))
+ ads->iflags = (ads->iflags & ~adns_if_afmask) | adns_if_af_v4only;
+ else if (!strcmp(word+8,"v6only"))
+ ads->iflags = (ads->iflags & ~adns_if_afmask) | adns_if_af_v6only;
+ else if (!strcmp(word+8,"any"))
+ ads->iflags = (ads->iflags & ~adns_if_afmask);
+ else {
+ configparseerr(ads,fn,lno, "option adns_af has bad value `%s' "
+ "(must be any, v4only or v6only", word+8);
+ }
+ continue;
+ }
adns__diag(ads,-1,0,"%s:%d: unknown option `%.*s'", fn,lno, l,word);
}
}
if (ads->logfn && ads->iflags & adns_if_debug)
adns__lprintf(ads,"adns: no nameservers, using IPv4 localhost\n");
memset(&sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
sin.sin_port = htons(DNS_PORT);
sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
addserver(ads,(struct sockaddr *)&sin, sizeof(sin));