chiark / gitweb /
src/types.c (addr_submit): Make child queries from correct template.
[adns] / src / types.c
index 11f9fd4d7f10fb1033dbcee1eddb78fc5bf627a5..93fb4fc33f87ba61d177501762589d507fbfbe9d 100644 (file)
@@ -518,7 +518,10 @@ static adns_status append_addrs(adns_query qu, adns_query from, size_t rrsz,
                                const adns_rr_addr *sp, int slen)
 {
   size_t drrsz = *dlen*rrsz, srrsz = slen*rrsz;
-  byte *p = adns__alloc_interim(qu, drrsz + srrsz);
+  byte *p;
+
+  /* if (!slen) return adns_s_ok; */
+  p = adns__alloc_interim(qu, drrsz + srrsz);
   if (!p) R_NOMEM;
   if (*dlen) {
     memcpy(p, *dp, drrsz);
@@ -605,7 +608,7 @@ static adns_status addr_submit(adns_query parent, adns_query *query_r,
 
   memcpy(qu->t.addr.rrty, rrty, nrrty*sizeof(*rrty));
   qu->t.addr.nrrty = nrrty;
-  addr_subqueries(qu, now, parent->query_dgram, parent->query_dglen);
+  addr_subqueries(qu, now, qu->query_dgram, qu->query_dglen);
   *query_r = qu;
   return adns_s_ok;
 }
@@ -854,7 +857,6 @@ static void icb_hostaddr(adns_query parent, adns_query child) {
   size_t addrsz = addr_rrsz(parent);
 
   st= cans->status == adns_s_nodata ? adns_s_ok : cans->status;
-  rrp->astatus= st;
 
   if (st) goto done;
   assert(addrsz == cans->rrsz);
@@ -872,9 +874,10 @@ static void icb_hostaddr(adns_query parent, adns_query child) {
 done:
   if (st) {
     adns__free_interim(parent, rrp->addrs);
-    rrp->naddrs= (st>0 && st<=adns_s_max_tempfail) ? -1 : cans->nrrs;
+    rrp->naddrs= (st>0 && st<=adns_s_max_tempfail) ? -1 : 0;
   }
 
+  rrp->astatus= st;
   if (parent->children.head) {
     LIST_LINK_TAIL(ads->childw,parent);
   } else {