Bugfixes:
* Fix incorrect `compressed datagram contains loop' error.
* Actually compile shared libraries by default !
+ * Fix adnsresfilter usage message to include correct default timeout.
General Improvements:
- * adnshost and adnslogres have options for overriding configuration.
+ * adnshost, adnslogres, adnsresfilter have options for config override.
+ * adnsresfilter has --debug option.
* Improvements to adnslogres (incl. new -c option) from Tony Finch.
* Regression tests now include `adnshost' invocations.
* Test cancellation both before and after query completion.
#include "dlist.h"
#include "tvarith.h"
+#ifdef ADNS_REGRESS_TEST
+# include "hredirect.h"
+#endif
+
struct outqueuenode {
struct outqueuenode *next, *back;
void *buffer;
static int bracket, forever, address;
static unsigned long timeout= 1000;
static adns_rrtype rrt= adns_r_ptr;
+static adns_initflags initflags= 0;
+static const char *config_text;
static int outblocked, inputeof;
static struct { struct outqueuenode *head, *tail; } outqueue;
" -b|--brackets (require [...] around IP addresses)\n"
" -a|--address (always include [address] in output)\n"
" -u|--unchecked (do not forward map for checking)\n"
+ " --config <text> (use this instead of resolv.conf)\n"
+ " --debug (turn on adns resolver debugging)\n"
"Timeout is the maximum amount to delay any particular bit of output for.\n"
- "Lookups will go on in the background. Default timeout = 100 (ms).\n")
+ "Lookups will go on in the background. Default timeout = 1000 (ms).\n")
== EOF) outputerr();
}
while ((arg= *++argv)) {
if (arg[0] != '-') usageerr("no non-option arguments are allowed");
if (arg[1] == '-') {
- if (!strcmp(arg,"--brackets")) {
- bracket= 1;
- } else if (!strcmp(arg,"--unchecked")) {
- rrt= adns_r_ptr_raw;
+ if (!strcmp(arg,"--timeout")) {
+ if (!(arg= *++argv)) usageerr("--timeout needs a value");
+ settimeout(arg);
+ forever= 0;
} else if (!strcmp(arg,"--wait")) {
forever= 1;
+ } else if (!strcmp(arg,"--brackets")) {
+ bracket= 1;
} else if (!strcmp(arg,"--address")) {
address= 1;
+ } else if (!strcmp(arg,"--unchecked")) {
+ rrt= adns_r_ptr_raw;
+ } else if (!strcmp(arg,"--config")) {
+ if (!(arg= *++argv)) usageerr("--config needs a value");
+ config_text= arg;
+ } else if (!strcmp(arg,"--debug")) {
+ initflags |= adns_if_debug;
} else if (!strcmp(arg,"--help")) {
usage(); quit(0);
- } else if (!strcmp(arg,"--timeout")) {
- if (!(arg= *++argv)) usageerr("--timeout needs a value");
- settimeout(arg);
- forever= 0;
} else {
usageerr("unknown long option");
}
} else {
while ((c= *++arg)) {
switch (c) {
- case 'b':
- bracket= 1;
- break;
- case 'u':
- rrt= adns_r_ptr_raw;
+ case 't':
+ if (*++arg) settimeout(arg);
+ else if ((arg= *++argv)) settimeout(arg);
+ else usageerr("-t needs a value");
+ forever= 0;
+ arg= "\0";
break;
case 'w':
forever= 1;
break;
+ case 'b':
+ bracket= 1;
+ break;
case 'a':
address= 1;
break;
+ case 'u':
+ rrt= adns_r_ptr_raw;
+ break;
case 'h':
usage();
quit(0);
- case 't':
- if (*++arg) settimeout(arg);
- else if ((arg= *++argv)) settimeout(arg);
- else usageerr("-t needs a value");
- forever= 0;
- arg= "\0";
- break;
default:
usageerr("unknown short option");
}
if (nonblock(1,1)) sysfail("set stdout to nonblocking mode");
memset(&sa,0,sizeof(sa));
sa.sin_family= AF_INET;
- r= adns_init(&ads,0,0); if (r) adnsfail("init",r);
+ if (config_text) {
+ r= adns_init_strcfg(&ads,initflags,stderr,config_text);
+ } else {
+ r= adns_init(&ads,initflags,0);
+ }
+ if (r) adnsfail("init",r);
cbyte= -1;
inbyte= -1;
inbuf= 0;