qu->answer->expires= -1;
qu->answer->nrrs= 0;
qu->answer->rrs.untyped= 0;
- qu->answer->rrsz= typei->rrsz;
+ qu->answer->rrsz= typei->getrrsz(typei,type);
return qu;
}
}
adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
- const typeinfo *typei, vbuf *qumsg_vb,
- int id,
+ const typeinfo *typei, adns_rrtype type,
+ vbuf *qumsg_vb, int id,
adns_queryflags flags, struct timeval now,
qcontext *ctx) {
adns_query qu;
err= check_domain_name(ads, flags,ctx,typei, qumsg_vb->buf,qumsg_vb->used);
if (err) goto x_err;
- qu= query_alloc(ads,typei,typei->typekey,flags,now);
+ qu= query_alloc(ads,typei,type,flags,now);
if (!qu) { err = adns_s_nomemory; goto x_err; }
*query_r= qu;
ol--;
}
-/* temporary hack */
-#define CHECK_PTR do { \
- if (type == adns_r_ptr && (ol < 5 || \
- strncmp(owner + ol - 5, ".arpa", 5))) { \
- ads->nextid++; adns__autosys(ads,now); \
- stat= adns_s_querydomainwrong; goto x_adnsfail; \
- } \
-} while (0)
-
if (flags & adns_qf_search) {
- CHECK_PTR;
r= adns__vbuf_append(&qu->search_vb,owner,ol);
if (!r) { stat= adns_s_nomemory; goto x_adnsfail; }
if (flags & adns_qf_owner) {
if (!save_owner(qu,owner,ol)) { stat= adns_s_nomemory; goto x_adnsfail; }
}
- CHECK_PTR;
query_simple(ads,qu, owner,ol, typei,flags, now);
}
adns__autosys(ads,now);
adns__consistency(ads,qu,cc_entex);
return 0;
-#undef CHECK_PTR
-
x_adnsfail:
adns__query_fail(qu,stat);
adns__consistency(ads,qu,cc_entex);
adns_queryflags flags,
void *context,
adns_query *query_r) {
- if (type != adns_r_ptr && type != adns_r_ptr_raw) return EINVAL;
+ if (((type^adns_r_ptr) & adns_rrt_reprmask) &&
+ ((type^adns_r_ptr_raw) & adns_rrt_reprmask))
+ return EINVAL;
return adns_submit_reverse_any(ads,addr,"in-addr.arpa",
type,flags,context,query_r);
}
}
if (ans->nrrs && qu->typei->diff_needswap) {
- if (!adns__vbuf_ensure(&qu->vb,qu->typei->rrsz)) {
+ if (!adns__vbuf_ensure(&qu->vb,qu->answer->rrsz)) {
adns__query_fail(qu,adns_s_nomemory);
return;
}
qu->ads);
}
if (ans->nrrs && qu->typei->postsort) {
- qu->typei->postsort(qu->ads, ans->rrs.bytes, ans->nrrs, qu->typei);
+ qu->typei->postsort(qu->ads, ans->rrs.bytes,
+ ans->nrrs,ans->rrsz, qu->typei);
}
ans->expires= qu->expires;