X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=resolver.c;h=d6bc61901085d78d3492bfa411f99c32957d9b56;hb=bb8398990f4b904047ddd8543f24c4ae683e1881;hp=b8a7a34289aa13b99e635f829e6e898ebfcb2cb7;hpb=a32d56fb47ceff7404072e49a21290fc7314a7c3;p=secnet.git diff --git a/resolver.c b/resolver.c index b8a7a34..d6bc619 100644 --- a/resolver.c +++ b/resolver.c @@ -42,7 +42,6 @@ static bool_t resolve_request(void *sst, cstring_t name, memcpy(trimmed,name+1,l-2); trimmed[l-2]=0; struct comm_addr ca; - FILLZERO(ca); ca.comm=comm; ca.ia.sin.sin_family=AF_INET; ca.ia.sin.sin_port=htons(port); @@ -102,7 +101,6 @@ static void resolver_afterpoll(void *sst, struct pollfd *fds, int nfds) int rslot, wslot, total; int ca_len=MIN(ans->nrrs,MAX_PEER_ADDRS); struct comm_addr ca_buf[ca_len]; - FILLZERO(ca_buf); for (rslot=0, wslot=0, total=0; rslotnrrs; rslot++) { @@ -111,18 +109,16 @@ static void resolver_afterpoll(void *sst, struct pollfd *fds, int nfds) adns_rr_addr *ra=&ans->rrs.addr[rslot]; struct comm_addr *ca=&ca_buf[wslot]; ca->comm=q->comm; - /* copy fields individually so we leave holes zeroed: */ switch (ra->addr.sa.sa_family) { case AF_INET: assert(ra->len == sizeof(ca->ia.sin)); - ca->ia.sin.sin_family=ra->addr.inet.sin_family; - ca->ia.sin.sin_addr= ra->addr.inet.sin_addr; - ca->ia.sin.sin_port= htons(q->port); - wslot++; break; default: - break; + /* silently skip unexpected AFs from adns */ + continue; } + memcpy(&ca->ia,&ra->addr,ra->len); + wslot++; } q->answer(q->cst,ca_buf,wslot,total); free(q);