X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=resolver.c;h=2bc7d06f40127aa8926e4f16501549aac9a4af86;hb=423936d35d7671fd017d2d611d418d1b8eeb6195;hp=6f6588f9c3e251db02fe8a2812cd6137f89b5e62;hpb=952f601f3501b0e40083f5d1a6ef166b8b62a813;p=secnet.git diff --git a/resolver.c b/resolver.c index 6f6588f..2bc7d06 100644 --- a/resolver.c +++ b/resolver.c @@ -134,20 +134,23 @@ static void resolver_afterpoll(void *sst, struct pollfd *fds, int nfds) struct comm_addr *ca=&ca_buf[wslot]; ca->comm=q->comm; ca->ix=-1; + assert(ra->len <= (int)sizeof(ca->ia)); + memcpy(&ca->ia,&ra->addr,ra->len); switch (ra->addr.sa.sa_family) { case AF_INET: assert(ra->len == sizeof(ca->ia.sin)); + ca->ia.sin.sin_port=htons(q->port); break; #ifdef CONFIG_IPV6 case AF_INET6: assert(ra->len == sizeof(ca->ia.sin6)); + ca->ia.sin6.sin6_port=htons(q->port); break; #endif /*CONFIG_IPV6*/ default: /* silently skip unexpected AFs from adns */ continue; } - memcpy(&ca->ia,&ra->addr,ra->len); wslot++; } q->answer(q->cst,ca_buf,wslot,total,q->name,0);