X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=client%2Fadnstest.c;h=46a0258146be0417ff0880207dabcb2a8f77121d;hb=86e7b8d96483d2f55561aa76ac96e7663840b796;hp=1752072f31b163333990bbbc15d1601b380cb920;hpb=61b923b38be853072bce998602c8921d469f189e;p=adns.git diff --git a/client/adnstest.c b/client/adnstest.c index 1752072..46a0258 100644 --- a/client/adnstest.c +++ b/client/adnstest.c @@ -22,27 +22,66 @@ #include #include +#include +#include #include "adns.h" -int main(void) { +static void failure(const char *what, adns_status st) { + fprintf(stderr,"adns failure: %s: %s\n",what,adns_strerror(st)); + exit(2); +} + +static const char *defaultargv[]= { "ns.chiark.greenend.org.uk", 0 }; + +int main(int argc, const char *const *argv) { adns_state ads; - adns_query qu; + adns_query *qus, qu; adns_answer *ans; - int r; + const char *rrtn, *fmtn; + char *show; + int len, i, qc, qi; + adns_status r, ri; + + if (argv[0] && argv[1]) argv++; + else argv= defaultargv; + + for (qc=0; qc[argv]; qc++); + qus= malloc(sizeof(qus)*qc); + if (!qus) { perror("malloc qus"); exit(3); } r= adns_init(&ads,adns_if_debug|adns_if_noautosys,0); - if (r) { perror("init"); exit(2); } + if (r) failure("init",r); + + for (qi=0; qitype, &rrtn,&fmtn,&len, 0,0); + fprintf(stdout, "%s: %s; nrrs=%d; cname=%s; ", + argv[qi], adns_strerror(ans->status), + ans->nrrs, ans->cname ? ans->cname : "$"); + fprintf(stdout, "type %s(%s) %s\n", + ri ? "?" : rrtn, ri ? "?" : fmtn ? fmtn : "-", + adns_strerror(ri)); + if (ans->nrrs) { + assert(!ri); + for (i=0; inrrs; i++) { + r= adns_rr_info(ans->type, 0,0,0, ans->rrs.bytes+i*len,&show); + if (r) failure("info",r); + printf(" %s\n",show); + free(show); + } + } + free(ans); + } - fprintf(stderr,"answer status %d type %d rrs %d cname %s\n", - ans->status,ans->type,ans->nrrs, - ans->cname ? ans->cname : "-"); - + free(qus); exit(0); }