chiark
/
gitweb
/
~mdw
/
adns
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
src/, client/: Support for AAAA lookups.
[adns]
/
src
/
query.c
diff --git
a/src/query.c
b/src/query.c
index dd2a47a6b0851001771f05e599860cd8709424b6..717cac0d3c7418b3e751c04d65b4dfba29de09f5 100644
(file)
--- a/
src/query.c
+++ b/
src/query.c
@@
-83,7
+83,7
@@
static adns_query query_alloc(adns_state ads,
qu->answer->expires= -1;
qu->answer->nrrs= 0;
qu->answer->rrs.untyped= 0;
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;
}
return qu;
}
@@
-148,8
+148,8
@@
static adns_status check_domain_name(adns_state ads, adns_queryflags flags,
}
adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
}
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;
adns_queryflags flags, struct timeval now,
qcontext *ctx) {
adns_query qu;
@@
-157,7
+157,7
@@
adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
err= check_domain_name(ads, flags,ctx,typei, qumsg_vb->buf,qumsg_vb->used);
if (err) goto x_err;
err= check_domain_name(ads, flags,ctx,typei, qumsg_vb->buf,qumsg_vb->used);
if (err) goto x_err;
- qu= query_alloc(ads,typei,type
i->typekey
,flags,now);
+ qu= query_alloc(ads,typei,type,flags,now);
if (!qu) { err = adns_s_nomemory; goto x_err; }
*query_r= qu;
if (!qu) { err = adns_s_nomemory; goto x_err; }
*query_r= qu;
@@
-294,17
+294,7
@@
int adns_submit(adns_state ads,
ol--;
}
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) {
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; }
r= adns__vbuf_append(&qu->search_vb,owner,ol);
if (!r) { stat= adns_s_nomemory; goto x_adnsfail; }
@@
-316,15
+306,12
@@
int adns_submit(adns_state ads,
if (flags & adns_qf_owner) {
if (!save_owner(qu,owner,ol)) { 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;
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);
x_adnsfail:
adns__query_fail(qu,stat);
adns__consistency(ads,qu,cc_entex);
@@
-377,7
+364,9
@@
int adns_submit_reverse(adns_state ads,
adns_queryflags flags,
void *context,
adns_query *query_r) {
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);
}
return adns_submit_reverse_any(ads,addr,"in-addr.arpa",
type,flags,context,query_r);
}
@@
-591,7
+580,7
@@
void adns__query_done(adns_query qu) {
}
if (ans->nrrs && qu->typei->diff_needswap) {
}
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;
}
adns__query_fail(qu,adns_s_nomemory);
return;
}
@@
-602,7
+591,8
@@
void adns__query_done(adns_query qu) {
qu->ads);
}
if (ans->nrrs && qu->typei->postsort) {
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;
}
ans->expires= qu->expires;