X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=resolver.c;h=f2023fa0589289eb67d2ee192aa086c152f943c1;hb=82aed9f7c5ddcfef58a20e326cbcfa2932e88ebf;hp=f7cd373050fc9f8f3cb17becff2e94fe77af0721;hpb=894134bd9376799651bcf153406766cfb31d42ec;p=secnet.git diff --git a/resolver.c b/resolver.c index f7cd373..f2023fa 100644 --- a/resolver.c +++ b/resolver.c @@ -44,12 +44,13 @@ static bool_t resolve_request(void *sst, cstring_t name, struct comm_addr ca; FILLZERO(ca); ca.comm=comm; + ca.ix=-1; ca.ia.sin.sin_family=AF_INET; ca.ia.sin.sin_port=htons(port); if (inet_aton(trimmed,&ca.ia.sin.sin_addr)) - cb(cst,&ca,1); + cb(cst,&ca,1,0); else - cb(cst,0,0); + cb(cst,0,0,"invalid IP address"); return True; } @@ -95,7 +96,7 @@ static void resolver_afterpoll(void *sst, struct pollfd *fds, int nfds) if (rv==0) { q=qp; if (ans->status!=adns_s_ok) { - q->answer(q->cst,NULL,0); /* Failure */ + q->answer(q->cst,NULL,0,adns_strerror(ans->status)); free(q); free(ans); } else { @@ -118,11 +119,20 @@ static void resolver_afterpoll(void *sst, struct pollfd *fds, int nfds) ca->ia.sin.sin_port= htons(q->port); wslot++; break; +#ifdef CONFIG_IPV6 + case AF_INET6: + assert(ra->len == sizeof(ca->ia.sin6)); + ca->ia.sin6.sin6_family=ra->addr.inet6.sin6_family; + ca->ia.sin6.sin6_addr= ra->addr.inet6.sin6_addr; + ca->ia.sin6.sin6_port= htons(q->port); + wslot++; + break; +#endif /*CONFIG_IPV6*/ default: break; } } - q->answer(q->cst,ca_buf,wslot); + q->answer(q->cst,ca_buf,wslot,0); free(q); free(ans); }