From ac5a2748da336f9644c5d31f32324d0367c6ad77 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sun, 1 Jun 2014 11:07:07 +0100 Subject: [PATCH 1/1] src/: PTR queries now submit A subqueries, not `addr'. Signed-off-by: Mark Wooding --- src/internal.h | 4 +++- src/types.c | 21 ++++++++------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/internal.h b/src/internal.h index c2876bf..50733b5 100644 --- a/src/internal.h +++ b/src/internal.h @@ -133,7 +133,9 @@ typedef struct { void (*callback)(adns_query parent, adns_query child); union { - adns_rr_addr ptr_addr; + struct { + struct in_addr addr; + } ptr; } tinfo; /* type-specific state for the query itself: zero-init if you * don't know better. */ diff --git a/src/types.c b/src/types.c index d463b7f..cc9f312 100644 --- a/src/types.c +++ b/src/types.c @@ -711,7 +711,6 @@ static adns_status ckl_ptr(adns_state ads, adns_queryflags flags, union checklabel_state *cls, qcontext *ctx, int labnum, const char *label, int lablen) { static const char *const (expectdomain[])= { DNS_INADDR_ARPA }; - adns_rr_addr *ap; char *ep; const char *ed; char labbuf[4]; @@ -730,11 +729,7 @@ static adns_status ckl_ptr(adns_state ads, adns_queryflags flags, if (lablen != l || memcmp(label, ed, l)) return adns_s_querydomainwrong; } else { if (lablen) return adns_s_querydomainwrong; - ap= &ctx->tinfo.ptr_addr; - ap->len= sizeof(struct sockaddr_in); - memset(&ap->addr,0,sizeof(ap->addr.inet)); - ap->addr.inet.sin_family= AF_INET; - ap->addr.inet.sin_addr.s_addr= + ctx->tinfo.ptr.addr.s_addr= htonl((cls->ptr.ipv[0]<<24) | (cls->ptr.ipv[1]<<16) | (cls->ptr.ipv[2]<< 8) | (cls->ptr.ipv[3])); } @@ -743,7 +738,8 @@ static adns_status ckl_ptr(adns_state ads, adns_queryflags flags, static void icb_ptr(adns_query parent, adns_query child) { adns_answer *cans= child->answer; - const adns_rr_addr *queried, *found; + const struct in_addr *queried; + const unsigned char *found; adns_state ads= parent->ads; int i; @@ -755,10 +751,9 @@ static void icb_ptr(adns_query parent, adns_query child) { return; } - queried= &parent->ctx.tinfo.ptr_addr; - for (i=0, found=cans->rrs.addr; inrrs; i++, found++) { - if (queried->len == found->len && - !memcmp(&queried->addr,&found->addr,queried->len)) { + queried= &parent->ctx.tinfo.ptr.addr; + for (i=0, found=cans->rrs.bytes; inrrs; i++, found+=cans->rrsz) { + if (!memcmp(queried,found,cans->rrsz)) { if (!parent->children.head) { adns__query_done(parent); return; @@ -788,14 +783,14 @@ static adns_status pa_ptr(const parseinfo *pai, int dmstart, st= adns__mkquery_frdgram(pai->ads, &pai->qu->vb, &id, pai->dgram, pai->dglen, dmstart, - adns_r_addr, adns_qf_quoteok_query); + adns_r_a, adns_qf_quoteok_query); if (st) return st; ctx.ext= 0; ctx.callback= icb_ptr; memset(&ctx.pinfo,0,sizeof(ctx.pinfo)); memset(&ctx.tinfo,0,sizeof(ctx.tinfo)); - st= adns__internal_submit(pai->ads, &nqu, adns__findtype(adns_r_addr), + st= adns__internal_submit(pai->ads, &nqu, adns__findtype(adns_r_a), &pai->qu->vb, id, adns_qf_quoteok_query, pai->now, &ctx); if (st) return st; -- 2.30.2