summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2014-10-26 13:33:22 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2014-10-26 13:33:22 +0000
commit2d2623da8e641df1a7cb2ac8d33ec9ecee34c76e (patch)
tree3f92f41ec5ccfec6ad87b6f65e3c093a29ead44f
parent23ffe855689dff34e12df167eb3801088bfb1c94 (diff)
parent724c9dd3c97671f5b7a3b56e8b29e7e2c1ca3689 (diff)
Merge tag 'adns-1.5.0-rc1' into dgit/sid
adns release 1.5.0~rc1
-rw-r--r--.gitignore1
-rw-r--r--Makefile.in2
-rw-r--r--NEWS41
-rw-r--r--README.html1
-rwxr-xr-xRELEASE-CHECKLIST94
-rw-r--r--changelog32
-rw-r--r--client/adnsheloex.c3
-rw-r--r--client/adnslogres.c3
-rw-r--r--client/adnstest.c16
-rw-r--r--client/client.h2
-rw-r--r--client/fanftest.c3
-rw-r--r--regress/Makefile.in10
-rw-r--r--regress/case-1stservbroken.sys2
-rw-r--r--regress/case-1stservtotcp.sys2
-rw-r--r--regress/case-2ndservok.sys2
-rw-r--r--regress/case-2ndservtcp.sys2
-rw-r--r--regress/case-aaaa-simple.sys2
-rw-r--r--regress/case-aaaa-sort.sys2
-rw-r--r--regress/case-addr-multi-af.sys2
-rw-r--r--regress/case-bogus-sortlist.sys2
-rw-r--r--regress/case-brokenmail.sys2
-rw-r--r--regress/case-child.sys2
-rw-r--r--regress/case-cnametocname.sys2
-rw-r--r--regress/case-comprinf.sys2
-rw-r--r--regress/case-connfail.sys2
-rw-r--r--regress/case-flags10.sys2
-rw-r--r--regress/case-flags9.sys2
-rw-r--r--regress/case-formerr.sys2
-rw-r--r--regress/case-lockup.sys2
-rw-r--r--regress/case-longdom0.sys2
-rw-r--r--regress/case-longdom1.sys2
-rw-r--r--regress/case-longdomsrch0.sys2
-rw-r--r--regress/case-longdomsrch1.sys2
-rw-r--r--regress/case-longdomsrch1b.sys2
-rw-r--r--regress/case-longdomsrch2.sys2
-rw-r--r--regress/case-longlab0.sys2
-rw-r--r--regress/case-longlab1.sys2
-rw-r--r--regress/case-mailboxes.sys2
-rw-r--r--regress/case-manya.sys2
-rw-r--r--regress/case-ndots-as.sys2
-rw-r--r--regress/case-ndots.sys2
-rw-r--r--regress/case-ndotsbad.sys2
-rw-r--r--regress/case-noinfto.sys2
-rw-r--r--regress/case-norm.sys2
-rw-r--r--regress/case-poll.sys2
-rw-r--r--regress/case-polltimeout.sys2
-rw-r--r--regress/case-ptr-aaaa-caps.sys2
-rw-r--r--regress/case-ptr-aaaa-check.sys2
-rw-r--r--regress/case-ptr-aaaa-mismatch.sys2
-rw-r--r--regress/case-ptr-aaaa-plain.sys2
-rw-r--r--regress/case-ptr-aaaa.sys2
-rw-r--r--regress/case-ptrbaddom.sys2
-rw-r--r--regress/case-ptrbaddom2.sys2
-rw-r--r--regress/case-quote.sys2
-rw-r--r--regress/case-rootquery.sys2
-rw-r--r--regress/case-rr_addr-binary-compat.sys2
-rw-r--r--regress/case-search-as.sys2
-rw-r--r--regress/case-search.sys2
-rw-r--r--regress/case-searchabs.sys2
-rw-r--r--regress/case-sillyrp.sys2
-rw-r--r--regress/case-tcpbreakin.sys2
-rw-r--r--regress/case-tcpmultipart.sys2
-rw-r--r--regress/case-tcpptr.sys2
-rw-r--r--regress/case-timeout.sys2
-rw-r--r--regress/case-trunc.sys2
-rw-r--r--regress/case-unknown-flags-harmless.err0
-rw-r--r--regress/case-unknown-flags-harmless.out5
-rw-r--r--regress/case-unknown-flags-harmless.sys34
-rw-r--r--regress/case-unknown-flags-init.err1
-rw-r--r--regress/case-unknown-flags-init.out1
-rw-r--r--regress/case-unknown-flags-init.sys2
-rw-r--r--regress/case-unknown-flags-query.err0
-rw-r--r--regress/case-unknown-flags-query.out3
-rw-r--r--regress/case-unknown-flags-query.sys15
-rw-r--r--regress/case-unknown-flags-type.err0
-rw-r--r--regress/case-unknown-flags-type.out3
-rw-r--r--regress/case-unknown-flags-type.sys15
-rw-r--r--regress/case-unknownq.sys2
-rw-r--r--regress/case-unkopts.err0
-rw-r--r--regress/case-unkopts.out10
-rw-r--r--regress/case-unkopts.sys34
-rw-r--r--regress/case-v6-map.sys2
-rw-r--r--regress/init-unkopts.text11
-rw-r--r--src/addrfam.c17
-rw-r--r--src/adns.h24
-rw-r--r--src/internal.h3
-rw-r--r--src/parse.c4
-rw-r--r--src/query.c6
-rw-r--r--src/setup.c98
-rw-r--r--src/types.c4
90 files changed, 486 insertions, 122 deletions
diff --git a/.gitignore b/.gitignore
index eb81985..ff349e4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@ config.status
autom4te.cache
dist_tmp
adns-*.tar.gz
+adns-*.tar.gz.sig
common.make
settings.make
*.tmp*
diff --git a/Makefile.in b/Makefile.in
index 5151ade..68146ba 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -24,7 +24,7 @@ include ./common.make
# Remember to change ADNS_VERSION_STRING in client/client.h too, and
# possibly library soname (MAJOR and MINOR in common.make.in).
-DISTVERSION= 1.5.0~rc0
+DISTVERSION= 1.5.0~rc1
srcdir= @srcdir@
VPATH= @srcdir@
diff --git a/NEWS b/NEWS
index bd0dff1..541cc02 100644
--- a/NEWS
+++ b/NEWS
@@ -1,22 +1,39 @@
-Changes in adns 1.5, since adns 1.4, are:
+Changes in adns 1.5.0, since adns 1.4, are:
+
+ New features:
* This release provides full IPv6 support. Applications can request
AAAA records (containing IPv6 addresses) as well as, or instead of,
A records (containing IPv4 addresses). adns 1.5 can speak to
nameservers over IPv6.
- * adns_addr2text and adns_text2addr: Convenient C functions for
- converting between addresses and address literals. These carry
- less baggage than getaddrinfo and getnameinfo.
+ * adns_addr2text and adns_text2addr: Convenient C functions for
+ converting between addresses and address literals. These carry
+ less baggage than getaddrinfo and getnameinfo.
+
+ Bugfixes:
+
+ * We fix a crashing bug in adnslogres. (Debian#392102.)
+
+ * Previously, parsing of some adns_specific options in resolv.conf
+ would go awry if multiple options were specified on the same line.
+ (Fixed since 1.5.0~rc0.)
- * There is a fix to the one currently known bug in the resolver:
- previously, some harmless but wrong owner names for checked ptr
+ * adns now knows to ignore more things in resolv.conf, rather than
+ warn about them, and there's also an option to disable all of these
+ warnings. (Debian#411263.) (Fixed since 1.5.0~rc0.)
+
+ * Previously, some harmless but wrong owner names for checked ptr
queries would be accepted; now they are rejected with `Domain
invalid for particular DNS query type'.
- * We fix a crashing bug in adnslogres. (Debian#392102.)
+ Other:
+
+ * There are some minor API/ABI changes and improvements, for future
+ proofing.
- * There are also some build system and test suite improvements.
+ * There are also some build system, test suite and coding style
+ improvements.
* Licence is now GPLv3.
@@ -43,3 +60,11 @@ Compatibility:
IPv6 as well as IPv4 information if simply asked for `addresses'.
Calling programs which did not ask for a specific address type ought
to cope with this.
+
+ The API in 1.5.0 also fixes a technical nonconformance to the C
+ specification. On platforms where an `enum' type might be an
+ integer type whose size is bits is not a power of two, there could
+ be an incompatible ABI change between 1.4 and 1.5 - but we don't
+ think there are many (if any) such platforms which are sufficiently
+ POSIX-like for adns. (Changed since 1.5.0~rc0.)
+
diff --git a/README.html b/README.html
index d5bcf90..3d7c06e 100644
--- a/README.html
+++ b/README.html
@@ -15,7 +15,6 @@ library and utilities.</strong>
<!-- Please ensure that all links continine to be correct -->
<!-- both for www.gnu.org and chiark. -->
<!-- -->
-<!-- $Id$ -->
<p>
diff --git a/RELEASE-CHECKLIST b/RELEASE-CHECKLIST
new file mode 100755
index 0000000..d2fb527
--- /dev/null
+++ b/RELEASE-CHECKLIST
@@ -0,0 +1,94 @@
+#!/bin/bash
+# This is for the benefit of the upstream maintainers of GNU adns
+#
+# * Maybe rerun autoconf
+# * Ensure changelog reflects changes
+# * Ensure NEWS reflects changes
+# * Maybe update MAJOR and/or MINOR in common.make.in
+# * Update DISTVERSION in Makefile.in
+# * Update ADNS_VERSION_STRING in client/client.h
+#
+# * Run this script
+# ./RELEASE-CHECKLIST [--real] <version>
+#
+# * On chiark, maybe, replace ~ian/public-html/adns/current
+# with symlink to web-$(version) (as directed by script)
+#
+# * Send release announcement (use last one as template)
+#
+# * Update DISTVERSION, ADNS_VERSION_STRING and start new changelog entry
+
+set -e
+
+fail () { echo >&2 "$0: $*"; exit 16; }
+
+real=false
+if [ "x$1" = x--real ]; then
+ real=true; shift
+fi
+
+if [ $# != 1 ]; then fail "wrong # arguments"; fi
+wantversion="$1"
+
+version=`sed -n <Makefile.in 's/^DISTVERSION=[ ]*//p'`
+
+if [ "x$version" != "x$wantversion" ]; then
+ fail "you say version $wantversion but tree is $version"
+fi
+
+gpgkey='-u 0x48B50D39'
+chiark=chiark:/u/ian/public-html/adns
+chiarkftp=$chiark/ftp
+
+x () { echo "----- $* -----"; "$@"; }
+wx () { if $real; then x "$@"; else echo "WOULD: $*"; fi; }
+
+x git clean -xdff
+x ./configure
+x make -j4
+x make check
+x make dist
+rm -rf web
+x make web-install
+
+distdir=adns-$version
+distfile=$distdir.tar.gz
+x test -f $distfile
+
+rm -rf dist_tmp
+mkdir dist_tmp
+cd dist_tmp
+tar axf ../$distfile
+cd $distdir
+git init --quiet
+git fetch --quiet ../.. HEAD
+git add .
+git commit --quiet -m T
+git diff --exit-code FETCH_HEAD
+cd ../..
+
+tag=adns-${version//\~/-}
+webout=docs-$version
+
+wx gpg --detach-sign $distfile
+wx git tag -s $gpgkey -m "adns release $version" $tag
+wx git push origin $tag~0:master $tag
+
+distfiles="$distfile $distfile.sig"
+wx rsync -vP $distfiles $chiarkftp/
+
+wx rsync -rvP web/. $chiark/$webout
+
+wx sha256sum $distfiles
+
+if ! $real; then echo "NOT REAL"; exit 0; fi
+
+cat <<END
+
+TO UPDATE WEB PAGE DOCS:
+ ssh ${chiark%%:*}
+ cd ${chiark#*:}
+ rm -f docs.tmp
+ ln -s $webout docs.tmp
+ mv -Tf docs.tmp docs
+END
diff --git a/changelog b/changelog
index c56d46b..3a6f1be 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,35 @@
+adns (1.5.0~rc1) UPSTREAM; urgency=low
+
+ ABI/API changes:
+ * Provide adns_qf_cname_strict flag, currently ignored because it's the
+ default. This will allow us to make this not the default in the future
+ while retaining forward and backward API and ABI compatibility.
+ * Add `sizeforce' enum member value to force enum types in the APIs to be
+ big (which will avoids theoretical future ABI-incompatibility).
+ * Reject unknown flags passed by our caller. This will make it ABI-safe
+ (although not ABI-backward-compatible) to add new flags in the future,
+ as newer clients running against this old library will get ENOSYS.
+
+ resolv.conf parsing:
+ * Support `adns_ignoreunkcfg' resolv.conf option to ignore unknown
+ options and keywords in resolv.conf.
+ * Ignore various BIND9 resolv.conf keywords and options.
+ * Fix resolv.conf option word splitting.
+
+ Tests, build system, coding style, etc.:
+ * Test cases show rrtype flag values in hex.
+ * Parallelise `make check'.
+ * Make vbuf__append_quoted1035 no longer extern (there are no out-of-file
+ callers).
+ * Remove all RCSids.
+ * When releasing, check that the `make dist' tarball is identical to git.
+ And provide a test mode for the RELEASE-CHECKLIST doc/script.
+ * Add `make dist' tarball signature to .gitignore.
+ * More correctly and effectively work around bugs in make (Debian #4073,
+ #756123) affecting regress.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk> Sun, 26 Oct 2014 13:24:00 +0000
+
adns (1.5.0~rc0) UPSTREAM; urgency=low
New features:
diff --git a/client/adnsheloex.c b/client/adnsheloex.c
index 0ec2a41..848de21 100644
--- a/client/adnsheloex.c
+++ b/client/adnsheloex.c
@@ -29,9 +29,6 @@
* This file is by Tony Finch, based on adnslogres.c.
*/
-static const char * const cvsid =
- "$Id$";
-
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
diff --git a/client/adnslogres.c b/client/adnslogres.c
index a93e855..1a99694 100644
--- a/client/adnslogres.c
+++ b/client/adnslogres.c
@@ -32,9 +32,6 @@
* subsequently.
*/
-static const char * const cvsid =
- "$Id$";
-
#include <sys/types.h>
#include <sys/time.h>
diff --git a/client/adnstest.c b/client/adnstest.c
index 0e0db03..59a3bbc 100644
--- a/client/adnstest.c
+++ b/client/adnstest.c
@@ -102,6 +102,7 @@ static void usageerr(const char *why) {
"initflags: p use poll(2) instead of select(2)\n"
" s use adns_wait with specified query, instead of 0\n"
"queryflags: a print status abbrevs instead of strings\n"
+ "typenum: may be 0x<hex>|<dec>, or 0x<hex> or <dec>\n"
"exit status: 0 ok (though some queries may have failed)\n"
" 1 used by test harness to indicate test failed\n"
" 2 unable to submit or init or some such\n"
@@ -207,12 +208,19 @@ int main(int argc, char *const *argv) {
if (ch==',') tc++;
types_a= malloc(sizeof(*types_a)*(tc+1));
if (!types_a) { perror("malloc types"); quitnow(3); }
- for (cp= argv[1]+1, ti=0; ti<tc; ti++) {
- types_a[ti]= strtoul(cp,&cp,10);
- if ((ch= *cp)) {
- if (ch != ',') usageerr("unexpected char (not comma) in or between types");
+ for (cp= argv[1]+1, ti=0; ti<tc; ) {
+ types_a[ti]= 0;
+ for (;;) {
+ types_a[ti] |= strtoul(cp,&cp,0);
+ ch= *cp;
+ if (!ch) break;
cp++;
+ if (ch=='|') continue;
+ if (ch==',') break;
+ usageerr("unexpected char (not comma) in or between types");
}
+ ti++;
+ if (!ch) break;
}
types_a[ti]= adns_r_none;
types= types_a;
diff --git a/client/client.h b/client/client.h
index d8a7e2a..5d2f475 100644
--- a/client/client.h
+++ b/client/client.h
@@ -27,7 +27,7 @@
#ifndef CLIENT_H_INCLUDED
#define CLIENT_H_INCLUDED
-#define ADNS_VERSION_STRING "1.5.0~rc0"
+#define ADNS_VERSION_STRING "1.5.0~rc1"
#define COPYRIGHT_MESSAGE \
"Copyright (C) 1997-2000,2003,2006,2014 Ian Jackson\n" \
diff --git a/client/fanftest.c b/client/fanftest.c
index 85a40a8..3caa882 100644
--- a/client/fanftest.c
+++ b/client/fanftest.c
@@ -31,9 +31,6 @@
* modified by Ian Jackson as it was incorporated into adns.
*/
-static const char * const cvsid =
- "$Id$";
-
#include <sys/types.h>
#include <sys/time.h>
diff --git a/regress/Makefile.in b/regress/Makefile.in
index 34be146..b0035e7 100644
--- a/regress/Makefile.in
+++ b/regress/Makefile.in
@@ -45,8 +45,14 @@ ALL_OBJS= $(HARNLOBJS) dtest.o hrecord.o hplayback.o
all install uninstall: $(TARGETS)
-check: $(TARGETS)
- srcdir=$(srcdir) $(srcdir)/checkall
+ALL_TESTS:=$(patsubst $(srcdir)/case-%.sys,%,$(wildcard $(srcdir)/case-*.sys))
+
+check: $(TARGETS) $(addprefix check-,$(ALL_TESTS))
+ @echo
+ @echo 'all tests passed or maybe skipped.'
+
+check-%: case-%.sys
+ @srcdir=$(srcdir) $(srcdir)/r1test $* || test $? = 5
LINK_CMD= $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
diff --git a/regress/case-1stservbroken.sys b/regress/case-1stservbroken.sys
index 0892857..fe4363c 100644
--- a/regress/case-1stservbroken.sys
+++ b/regress/case-1stservbroken.sys
@@ -1,5 +1,5 @@
adnstest 1stservbroken
-:12 trunc.test.iwj.relativity.greenend.org.uk
+:0x0|12 trunc.test.iwj.relativity.greenend.org.uk
start 940102940.701451
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-1stservtotcp.sys b/regress/case-1stservtotcp.sys
index f5d4f4c..e6ef382 100644
--- a/regress/case-1stservtotcp.sys
+++ b/regress/case-1stservtotcp.sys
@@ -1,5 +1,5 @@
adnstest 1stservto
-:12 trunc.test.iwj.relativity.greenend.org.uk
+:0x0|12 trunc.test.iwj.relativity.greenend.org.uk
start 940100259.965940
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-2ndservok.sys b/regress/case-2ndservok.sys
index 31777c9..6765361 100644
--- a/regress/case-2ndservok.sys
+++ b/regress/case-2ndservok.sys
@@ -1,5 +1,5 @@
adnstest 2ndserver
-:1 davenant.relativity.greenend.org.uk
+:0x0|1 davenant.relativity.greenend.org.uk
start 940100095.012145
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-2ndservtcp.sys b/regress/case-2ndservtcp.sys
index cc702bf..fa9e994 100644
--- a/regress/case-2ndservtcp.sys
+++ b/regress/case-2ndservtcp.sys
@@ -1,5 +1,5 @@
adnstest 2ndserver
-:12 trunc.test.iwj.relativity.greenend.org.uk
+:0x0|12 trunc.test.iwj.relativity.greenend.org.uk
start 940100083.268555
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-aaaa-simple.sys b/regress/case-aaaa-simple.sys
index aecfafe..25873ed 100644
--- a/regress/case-aaaa-simple.sys
+++ b/regress/case-aaaa-simple.sys
@@ -1,5 +1,5 @@
./adnstest distorted
-:28 stratocaster.distorted.org.uk
+:0x0|28 stratocaster.distorted.org.uk
start 1401870460.843715
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-aaaa-sort.sys b/regress/case-aaaa-sort.sys
index 5f9f3b5..4860661 100644
--- a/regress/case-aaaa-sort.sys
+++ b/regress/case-aaaa-sort.sys
@@ -1,5 +1,5 @@
./adnstest distorted
-:28 maddr.dnserr.distorted.org.uk
+:0x0|28 maddr.dnserr.distorted.org.uk
start 1401871954.600653
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-addr-multi-af.sys b/regress/case-addr-multi-af.sys
index ef40368..1edce47 100644
--- a/regress/case-addr-multi-af.sys
+++ b/regress/case-addr-multi-af.sys
@@ -1,5 +1,5 @@
./adnstest distorted
-:16842753,16842767,50397185,50397199 maddr.dnserr.distorted.org.uk mx.dnserr.distorted.org.uk 0x400/maddr.dnserr.distorted.org.uk 0x400/mx.dnserr.distorted.org.uk 0x800/maddr.dnserr.distorted.org.uk 0x800/mx.dnserr.distorted.org.uk 0xc00/maddr.dnserr.distorted.org.uk 0xc00/mx.dnserr.distorted.org.uk
+:0x1010000|1,0x1010000|15,0x3010000|1,0x3010000|15 maddr.dnserr.distorted.org.uk mx.dnserr.distorted.org.uk 0x400/maddr.dnserr.distorted.org.uk 0x400/mx.dnserr.distorted.org.uk 0x800/maddr.dnserr.distorted.org.uk 0x800/mx.dnserr.distorted.org.uk 0xc00/maddr.dnserr.distorted.org.uk 0xc00/mx.dnserr.distorted.org.uk
start 1402445458.222480
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-bogus-sortlist.sys b/regress/case-bogus-sortlist.sys
index bc39fa8..4cb4b26 100644
--- a/regress/case-bogus-sortlist.sys
+++ b/regress/case-bogus-sortlist.sys
@@ -1,2 +1,2 @@
./adnstest bogus-sortlist
-:1 chiark.greenend.org.uk
+:0x0|1 chiark.greenend.org.uk
diff --git a/regress/case-brokenmail.sys b/regress/case-brokenmail.sys
index 6846e7a..c9ead48 100644
--- a/regress/case-brokenmail.sys
+++ b/regress/case-brokenmail.sys
@@ -1,5 +1,5 @@
adnstest default -0x400
-:15,16842767 broken-mail.test.iwj.relativity.greenend.org.uk. 256/broken-mail.test.iwj.relativity.greenend.org.uk. 0x104/broken-mail.test.iwj.relativity.greenend.org.uk.
+:0x0|15,0x1010000|15 broken-mail.test.iwj.relativity.greenend.org.uk. 256/broken-mail.test.iwj.relativity.greenend.org.uk. 0x104/broken-mail.test.iwj.relativity.greenend.org.uk.
start 934726868.117908
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-child.sys b/regress/case-child.sys
index c35fe9b..49829c0 100644
--- a/regress/case-child.sys
+++ b/regress/case-child.sys
@@ -1,5 +1,5 @@
adnstest default
-:65548 134.76.224.195.in-addr.arpa
+:0x10000|12 134.76.224.195.in-addr.arpa
start 929574747.401802
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-cnametocname.sys b/regress/case-cnametocname.sys
index de83e03..33cbd7d 100644
--- a/regress/case-cnametocname.sys
+++ b/regress/case-cnametocname.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 intel.ugcs.caltech.edu.
+:0x0|1 intel.ugcs.caltech.edu.
start 938369896.279735
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-comprinf.sys b/regress/case-comprinf.sys
index b9705a1..01411ba 100644
--- a/regress/case-comprinf.sys
+++ b/regress/case-comprinf.sys
@@ -1,5 +1,5 @@
adnstest default
-:12 37.45.18.172.in-addr.arpa.
+:0x0|12 37.45.18.172.in-addr.arpa.
start 951961094.184850
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-connfail.sys b/regress/case-connfail.sys
index 85bb21c..f84f99d 100644
--- a/regress/case-connfail.sys
+++ b/regress/case-connfail.sys
@@ -1,5 +1,5 @@
./adnstest 2ndserver
-:1 2/davenant.greenend.org.uk
+:0x0|1 2/davenant.greenend.org.uk
start 1056289303.784817
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-flags10.sys b/regress/case-flags10.sys
index 6c50b73..24431ed 100644
--- a/regress/case-flags10.sys
+++ b/regress/case-flags10.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 ,aaaaaaaaaa/chiark.greenend.org.uk
+:0x0|1 ,aaaaaaaaaa/chiark.greenend.org.uk
start 929580072.670441
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-flags9.sys b/regress/case-flags9.sys
index e5b5ceb..4b01b37 100644
--- a/regress/case-flags9.sys
+++ b/regress/case-flags9.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 ,aaaaaaaaa/chiark.greenend.org.uk
+:0x0|1 ,aaaaaaaaa/chiark.greenend.org.uk
start 929580075.263215
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-formerr.sys b/regress/case-formerr.sys
index 1f026d9..79c4c4e 100644
--- a/regress/case-formerr.sys
+++ b/regress/case-formerr.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 1/h.rndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk.
+:0x0|1 1/h.rndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk.
start 951956380.814815
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-lockup.sys b/regress/case-lockup.sys
index 59efb4e..486632a 100644
--- a/regress/case-lockup.sys
+++ b/regress/case-lockup.sys
@@ -1,5 +1,5 @@
adnstest noserver
-:1 chiark.greenend.org.uk
+:0x0|1 chiark.greenend.org.uk
start 912889153.349504
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-longdom0.sys b/regress/case-longdom0.sys
index 6963993..f6d3a56 100644
--- a/regress/case-longdom0.sys
+++ b/regress/case-longdom0.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 1/0rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk.
+:0x0|1 1/0rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk.
start 951955651.857473
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-longdom1.sys b/regress/case-longdom1.sys
index 15a9605..718aaed 100644
--- a/regress/case-longdom1.sys
+++ b/regress/case-longdom1.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 1/10rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk.
+:0x0|1 1/10rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk.
start 951955690.505811
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-longdomsrch0.sys b/regress/case-longdomsrch0.sys
index 66ed755..ff0a22d 100644
--- a/regress/case-longdomsrch0.sys
+++ b/regress/case-longdomsrch0.sys
@@ -1,5 +1,5 @@
adnstest ndots100
-:1 1/10rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
+:0x0|1 1/10rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
start 951956073.321566
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-longdomsrch1.sys b/regress/case-longdomsrch1.sys
index e706c58..c3deb1b 100644
--- a/regress/case-longdomsrch1.sys
+++ b/regress/case-longdomsrch1.sys
@@ -1,5 +1,5 @@
adnstest ndots100
-:1 1/0rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
+:0x0|1 1/0rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
start 951956087.269350
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-longdomsrch1b.sys b/regress/case-longdomsrch1b.sys
index cd780da..3ef9468 100644
--- a/regress/case-longdomsrch1b.sys
+++ b/regress/case-longdomsrch1b.sys
@@ -1,5 +1,5 @@
adnstest ndots100
-:1 1/1xxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
+:0x0|1 1/1xxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
start 951956136.566877
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-longdomsrch2.sys b/regress/case-longdomsrch2.sys
index 65e23e8..683c44b 100644
--- a/regress/case-longdomsrch2.sys
+++ b/regress/case-longdomsrch2.sys
@@ -1,5 +1,5 @@
adnstest ndots100
-:1 1/xxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
+:0x0|1 1/xxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
start 951956143.624786
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-longlab0.sys b/regress/case-longlab0.sys
index 6e39ee6..bea6488 100644
--- a/regress/case-longlab0.sys
+++ b/regress/case-longlab0.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 1/yrndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk.
+:0x0|1 1/yrndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk.
start 951955250.786132
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-longlab1.sys b/regress/case-longlab1.sys
index b73482f..bc8d0f0 100644
--- a/regress/case-longlab1.sys
+++ b/regress/case-longlab1.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 1/hyrndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk.
+:0x0|1 1/hyrndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk.
start 951955261.286712
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-mailboxes.sys b/regress/case-mailboxes.sys
index 81457da..5889227 100644
--- a/regress/case-mailboxes.sys
+++ b/regress/case-mailboxes.sys
@@ -1,5 +1,5 @@
adnstest default
-:131089 silly-rp.test.iwj.relativity.greenend.org.uk
+:0x20000|17 silly-rp.test.iwj.relativity.greenend.org.uk
start 923859567.899146
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-manya.sys b/regress/case-manya.sys
index 492c620..4eb0386 100644
--- a/regress/case-manya.sys
+++ b/regress/case-manya.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 manyaddrs.test.iwj.relativity.greenend.org.uk
+:0x0|1 manyaddrs.test.iwj.relativity.greenend.org.uk
start 912888920.123769
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-ndots-as.sys b/regress/case-ndots-as.sys
index b9afa75..0f0db44 100644
--- a/regress/case-ndots-as.sys
+++ b/regress/case-ndots-as.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 5/newsx.davenant 5/news.davenant 5/news.davenant.greenend.org.uk 5/trunc.test.iwj.relativity 5/trunx.test.iwj.relativity 5/test.iwj.relativity
+:0x0|1 5/newsx.davenant 5/news.davenant 5/news.davenant.greenend.org.uk 5/trunc.test.iwj.relativity 5/trunx.test.iwj.relativity 5/test.iwj.relativity
start 931992163.221752
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-ndots.sys b/regress/case-ndots.sys
index 7934cc9..8fd6be9 100644
--- a/regress/case-ndots.sys
+++ b/regress/case-ndots.sys
@@ -1,5 +1,5 @@
adnstest ndots -,s
-:1 5/newsx.davenant 5/news.davenant 5/news.davenant.greenend.org.uk 5/trunc.test.iwj.relativity 5/trunx.test.iwj.relativity 5/test.iwj.relativity
+:0x0|1 5/newsx.davenant 5/news.davenant 5/news.davenant.greenend.org.uk 5/trunc.test.iwj.relativity 5/trunx.test.iwj.relativity 5/test.iwj.relativity
start 924365863.351594
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-ndotsbad.sys b/regress/case-ndotsbad.sys
index eaf457d..b5ebfb4 100644
--- a/regress/case-ndotsbad.sys
+++ b/regress/case-ndotsbad.sys
@@ -1,2 +1,2 @@
adnstest ndotsbad
-:1 5/news.davenant.greenend.org.uk
+:0x0|1 5/news.davenant.greenend.org.uk
diff --git a/regress/case-noinfto.sys b/regress/case-noinfto.sys
index 96d7fe1..63d2fd0 100644
--- a/regress/case-noinfto.sys
+++ b/regress/case-noinfto.sys
@@ -1,5 +1,5 @@
adnstest noserver -,p
-:1 a.b.c.d
+:0x0|1 a.b.c.d
start 940011574.766962
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-norm.sys b/regress/case-norm.sys
index 9059105..8c87430 100644
--- a/regress/case-norm.sys
+++ b/regress/case-norm.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 chiark.greenend.org.uk
+:0x0|1 chiark.greenend.org.uk
start 912888966.802483
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-poll.sys b/regress/case-poll.sys
index 51a276d..1c0e8af 100644
--- a/regress/case-poll.sys
+++ b/regress/case-poll.sys
@@ -1,5 +1,5 @@
adnstest default -,p
-:1 chiark.greenend.org.uk
+:0x0|1 chiark.greenend.org.uk
start 931719947.391142
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-polltimeout.sys b/regress/case-polltimeout.sys
index ee87357..ca5ce03 100644
--- a/regress/case-polltimeout.sys
+++ b/regress/case-polltimeout.sys
@@ -1,5 +1,5 @@
adnstest noserver -,p
-:1 chiark.greenend.org.uk
+:0x0|1 chiark.greenend.org.uk
start 931719968.733439
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-ptr-aaaa-caps.sys b/regress/case-ptr-aaaa-caps.sys
index 4637e7c..8ff0db9 100644
--- a/regress/case-ptr-aaaa-caps.sys
+++ b/regress/case-ptr-aaaa-caps.sys
@@ -1,5 +1,5 @@
./adnstest default
-:65548 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.D.1.0.8.A.B.0.1.0.0.2.IP6.ARPA
+:0x10000|12 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.D.1.0.8.A.B.0.1.0.0.2.IP6.ARPA
start 1406162686.218685
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-ptr-aaaa-check.sys b/regress/case-ptr-aaaa-check.sys
index 5b538fe..68e453d 100644
--- a/regress/case-ptr-aaaa-check.sys
+++ b/regress/case-ptr-aaaa-check.sys
@@ -1,5 +1,5 @@
./adnstest distorted
-:65548 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.d.1.0.8.a.b.0.1.0.0.2.ip6.arpa
+:0x10000|12 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.d.1.0.8.a.b.0.1.0.0.2.ip6.arpa
start 1401919115.064959
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-ptr-aaaa-mismatch.sys b/regress/case-ptr-aaaa-mismatch.sys
index 84655c4..360509f 100644
--- a/regress/case-ptr-aaaa-mismatch.sys
+++ b/regress/case-ptr-aaaa-mismatch.sys
@@ -1,5 +1,5 @@
./adnstest distorted
-:65548 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.d.1.0.8.b.d.0.1.0.0.2.ip6.arpa
+:0x10000|12 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.d.1.0.8.b.d.0.1.0.0.2.ip6.arpa
start 1401919322.902230
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-ptr-aaaa-plain.sys b/regress/case-ptr-aaaa-plain.sys
index 085dcd0..343cffc 100644
--- a/regress/case-ptr-aaaa-plain.sys
+++ b/regress/case-ptr-aaaa-plain.sys
@@ -1,5 +1,5 @@
./adnstest distorted
-:12 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.d.1.0.8.a.b.0.1.0.0.2.ip6.arpa
+:0x0|12 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.d.1.0.8.a.b.0.1.0.0.2.ip6.arpa
start 1401918956.635299
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-ptr-aaaa.sys b/regress/case-ptr-aaaa.sys
index 8b7a614..d2e21df 100644
--- a/regress/case-ptr-aaaa.sys
+++ b/regress/case-ptr-aaaa.sys
@@ -1,5 +1,5 @@
./adnstest distorted
-:65548 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.d.1.0.8.a.b.0.1.0.0.2.ip6.arpa
+:0x10000|12 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.d.1.0.8.a.b.0.1.0.0.2.ip6.arpa
start 1401919090.054985
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-ptrbaddom.sys b/regress/case-ptrbaddom.sys
index 5c571a7..f53995a 100644
--- a/regress/case-ptrbaddom.sys
+++ b/regress/case-ptrbaddom.sys
@@ -1,5 +1,5 @@
adnstest default
-:12,65548 37.45.18.172.in-addr.arpa.test.iwj.relativity.greenend.org.uk.
+:0x0|12,0x10000|12 37.45.18.172.in-addr.arpa.test.iwj.relativity.greenend.org.uk.
start 951960654.608219
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-ptrbaddom2.sys b/regress/case-ptrbaddom2.sys
index 71f86a2..cdd266a 100644
--- a/regress/case-ptrbaddom2.sys
+++ b/regress/case-ptrbaddom2.sys
@@ -1,5 +1,5 @@
./adnstest default
-:65548 00.45.18.172.in-addr.arpa 6.945.18.172.in-addr.arpa 4.0.0.0.g.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.d.1.0.8.a.b.0.1.0.0.2.ip6.arpa
+:0x10000|12 00.45.18.172.in-addr.arpa 6.945.18.172.in-addr.arpa 4.0.0.0.g.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.d.1.0.8.a.b.0.1.0.0.2.ip6.arpa
start 1406163217.059538
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-quote.sys b/regress/case-quote.sys
index e54f90f..475aeb7 100644
--- a/regress/case-quote.sys
+++ b/regress/case-quote.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 hyphen.cname.test.iwj.relativity.greenend.org.uk dot.cname.test.iwj.relativity.greenend.org.uk plus.cname.test.iwj.relativity.greenend.org.uk slash.cname.test.iwj.relativity.greenend.org.uk underscore.cname.test.iwj.relativity.greenend.org.uk quote.cname.test.iwj.relativity.greenend.org.uk backslash.cname.test.iwj.relativity.greenend.org.uk null.cname.test.iwj.relativity.greenend.org.uk space.cname.test.iwj.relativity.greenend.org.uk hash.cname.test.iwj.relativity.greenend.org.uk del.cname.test.iwj.relativity.greenend.org.uk meta-null.cname.test.iwj.relativity.greenend.org.uk meta-del.cname.test.iwj.relativity.greenend.org.uk
+:0x0|1 hyphen.cname.test.iwj.relativity.greenend.org.uk dot.cname.test.iwj.relativity.greenend.org.uk plus.cname.test.iwj.relativity.greenend.org.uk slash.cname.test.iwj.relativity.greenend.org.uk underscore.cname.test.iwj.relativity.greenend.org.uk quote.cname.test.iwj.relativity.greenend.org.uk backslash.cname.test.iwj.relativity.greenend.org.uk null.cname.test.iwj.relativity.greenend.org.uk space.cname.test.iwj.relativity.greenend.org.uk hash.cname.test.iwj.relativity.greenend.org.uk del.cname.test.iwj.relativity.greenend.org.uk meta-null.cname.test.iwj.relativity.greenend.org.uk meta-del.cname.test.iwj.relativity.greenend.org.uk
start 951958420.936685
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-rootquery.sys b/regress/case-rootquery.sys
index f23340c..b290763 100644
--- a/regress/case-rootquery.sys
+++ b/regress/case-rootquery.sys
@@ -1,5 +1,5 @@
adnstest default
-:131078 . 1/.
+:0x20000|6 . 1/.
start 924364442.672925
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-rr_addr-binary-compat.sys b/regress/case-rr_addr-binary-compat.sys
index a75ebf8..c1ae7bb 100644
--- a/regress/case-rr_addr-binary-compat.sys
+++ b/regress/case-rr_addr-binary-compat.sys
@@ -1,5 +1,5 @@
./adnstest distorted
-:16842753,65537 maddr.dnserr.distorted.org.uk
+:0x1010000|1,0x10000|1 maddr.dnserr.distorted.org.uk
start 1402443258.469312
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/case-search-as.sys b/regress/case-search-as.sys
index 267e1b0..442a0a5 100644
--- a/regress/case-search-as.sys
+++ b/regress/case-search-as.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 0x5/news 0x5/chiark 1/news 1/chiark
+:0x0|1 0x5/news 0x5/chiark 1/news 1/chiark
start 931992052.232208
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-search.sys b/regress/case-search.sys
index e74a52d..4c6675c 100644
--- a/regress/case-search.sys
+++ b/regress/case-search.sys
@@ -1,5 +1,5 @@
adnstest default -,s
-:1 0x5/news 0x5/chiark 1/news 1/chiark
+:0x0|1 0x5/news 0x5/chiark 1/news 1/chiark
start 924360470.478357
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-searchabs.sys b/regress/case-searchabs.sys
index 97d99b5..ee547ba 100644
--- a/regress/case-searchabs.sys
+++ b/regress/case-searchabs.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 1/news.davenant
+:0x0|1 1/news.davenant
start 924363451.882765
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-sillyrp.sys b/regress/case-sillyrp.sys
index f746d72..f5d8e51 100644
--- a/regress/case-sillyrp.sys
+++ b/regress/case-sillyrp.sys
@@ -1,5 +1,5 @@
adnstest default
-:17,131089 0x70/silly-rp-dm.test.iwj.relativity.greenend.org.uk 0x70/silly-rp-lp.test.iwj.relativity.greenend.org.uk silly-rp-lp.test.iwj.relativity.greenend.org.uk silly-rp-dm.test.iwj.relativity.greenend.org.uk
+:0x0|17,0x20000|17 0x70/silly-rp-dm.test.iwj.relativity.greenend.org.uk 0x70/silly-rp-lp.test.iwj.relativity.greenend.org.uk silly-rp-lp.test.iwj.relativity.greenend.org.uk silly-rp-dm.test.iwj.relativity.greenend.org.uk
start 929580348.131048
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-tcpbreakin.sys b/regress/case-tcpbreakin.sys
index f2d5fe3..d20b0d9 100644
--- a/regress/case-tcpbreakin.sys
+++ b/regress/case-tcpbreakin.sys
@@ -1,5 +1,5 @@
adnstest default
-:65548 2/6.45.18.172.in-addr.arpa
+:0x10000|12 2/6.45.18.172.in-addr.arpa
start 957718868.938329
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-tcpmultipart.sys b/regress/case-tcpmultipart.sys
index bcb8ad4..8f59ea9 100644
--- a/regress/case-tcpmultipart.sys
+++ b/regress/case-tcpmultipart.sys
@@ -1,5 +1,5 @@
adnstest tunnel
-:12 2/132.76.224.195.in-addr.arpa 2/manymorerrs.test.culture.dotat.at. 2/132.76.224.195.in-addr.arpa
+:0x0|12 2/132.76.224.195.in-addr.arpa 2/manymorerrs.test.culture.dotat.at. 2/132.76.224.195.in-addr.arpa
start 938365454.994875
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-tcpptr.sys b/regress/case-tcpptr.sys
index 61da167..662689c 100644
--- a/regress/case-tcpptr.sys
+++ b/regress/case-tcpptr.sys
@@ -1,5 +1,5 @@
adnstest default
-:65548 2/6.45.18.172.in-addr.arpa
+:0x10000|12 2/6.45.18.172.in-addr.arpa
start 957718868.938329
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-timeout.sys b/regress/case-timeout.sys
index 4ce68f9..3fb78d3 100644
--- a/regress/case-timeout.sys
+++ b/regress/case-timeout.sys
@@ -1,5 +1,5 @@
adnstest noserver
-:1 chiark.greenend.org.uk
+:0x0|1 chiark.greenend.org.uk
start 912889153.349504
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-trunc.sys b/regress/case-trunc.sys
index af088ad..d57547d 100644
--- a/regress/case-trunc.sys
+++ b/regress/case-trunc.sys
@@ -1,5 +1,5 @@
adnstest default
-:1 trunc.test.iwj.relativity.greenend.org.uk
+:0x0|1 trunc.test.iwj.relativity.greenend.org.uk
start 912888921.274801
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-unknown-flags-harmless.err b/regress/case-unknown-flags-harmless.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/regress/case-unknown-flags-harmless.err
diff --git a/regress/case-unknown-flags-harmless.out b/regress/case-unknown-flags-harmless.out
new file mode 100644
index 0000000..08a05a8
--- /dev/null
+++ b/regress/case-unknown-flags-harmless.out
@@ -0,0 +1,5 @@
+adns debug: using nameserver 172.18.45.6
+chiark.greenend.org.uk flags 1074266112 type 1 A(-) submitted
+chiark.greenend.org.uk flags 1074266112 type A(-): OK; nrrs=1; cname=$; owner=$; ttl=3600
+ 212.13.197.229
+rc=0
diff --git a/regress/case-unknown-flags-harmless.sys b/regress/case-unknown-flags-harmless.sys
new file mode 100644
index 0000000..e06fc00
--- /dev/null
+++ b/regress/case-unknown-flags-harmless.sys
@@ -0,0 +1,34 @@
+./adnstest default -0x4000
+:0x60000000|1 0x40080000/chiark.greenend.org.uk
+ start 1414182720.022422
+ socket domain=AF_INET type=SOCK_DGRAM
+ socket=6
+ +0.000183
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000097
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000076
+ sendto fd=6 addr=172.18.45.6:53
+ 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+ 02756b00 00010001.
+ sendto=40
+ +0.000272
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999728
+ select=1 rfds=[6] wfds=[] efds=[]
+ +0.102141
+ recvfrom fd=6 buflen=512
+ recvfrom=OK addr=172.18.45.6:53
+ 311f8580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+ 02756b00 00010001 c00c0001 00010000 0e100004 d40dc5e5 c0130002 00010001
+ 51800011 036e7331 0a72656c 61746976 697479c0 13c01300 02000100 01518000
+ 06036e73 30c048c0 61000100 01000151 800004ac 122d06c0 44000100 01000151
+ 800004ac 122d0b.
+ +0.000252
+ recvfrom fd=6 buflen=512
+ recvfrom=EAGAIN
+ +0.000070
+ close fd=6
+ close=OK
+ +0.000138
diff --git a/regress/case-unknown-flags-init.err b/regress/case-unknown-flags-init.err
new file mode 100644
index 0000000..8d1d1d8
--- /dev/null
+++ b/regress/case-unknown-flags-init.err
@@ -0,0 +1 @@
+adns failure: init: errno=ENOSYS
diff --git a/regress/case-unknown-flags-init.out b/regress/case-unknown-flags-init.out
new file mode 100644
index 0000000..daa767e
--- /dev/null
+++ b/regress/case-unknown-flags-init.out
@@ -0,0 +1 @@
+rc=2
diff --git a/regress/case-unknown-flags-init.sys b/regress/case-unknown-flags-init.sys
new file mode 100644
index 0000000..e177c78
--- /dev/null
+++ b/regress/case-unknown-flags-init.sys
@@ -0,0 +1,2 @@
+./adnstest default -0x6000
+:0x60000000|1 0x40080000/chiark.greenend.org.uk
diff --git a/regress/case-unknown-flags-query.err b/regress/case-unknown-flags-query.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/regress/case-unknown-flags-query.err
diff --git a/regress/case-unknown-flags-query.out b/regress/case-unknown-flags-query.out
new file mode 100644
index 0000000..ac8e541
--- /dev/null
+++ b/regress/case-unknown-flags-query.out
@@ -0,0 +1,3 @@
+adns debug: using nameserver 172.18.45.6
+chiark.greenend.org.uk flags 1075314688 type 1 not implemented
+rc=0
diff --git a/regress/case-unknown-flags-query.sys b/regress/case-unknown-flags-query.sys
new file mode 100644
index 0000000..ce849e8
--- /dev/null
+++ b/regress/case-unknown-flags-query.sys
@@ -0,0 +1,15 @@
+./adnstest default -0x4000
+:0x60000000|1 0x40180000/chiark.greenend.org.uk
+ start 1414182790.489799
+ socket domain=AF_INET type=SOCK_DGRAM
+ socket=6
+ +0.000123
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000047
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000039
+ close fd=6
+ close=OK
+ +0.000149
diff --git a/regress/case-unknown-flags-type.err b/regress/case-unknown-flags-type.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/regress/case-unknown-flags-type.err
diff --git a/regress/case-unknown-flags-type.out b/regress/case-unknown-flags-type.out
new file mode 100644
index 0000000..a12353a
--- /dev/null
+++ b/regress/case-unknown-flags-type.out
@@ -0,0 +1,3 @@
+adns debug: using nameserver 172.18.45.6
+chiark.greenend.org.uk flags 1074266112 type 1 not implemented
+rc=0
diff --git a/regress/case-unknown-flags-type.sys b/regress/case-unknown-flags-type.sys
new file mode 100644
index 0000000..41705b8
--- /dev/null
+++ b/regress/case-unknown-flags-type.sys
@@ -0,0 +1,15 @@
+./adnstest default -0x4000
+:0x70000000|1 0x40080000/chiark.greenend.org.uk
+ start 1414182770.758670
+ socket domain=AF_INET type=SOCK_DGRAM
+ socket=6
+ +0.000142
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000080
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000060
+ close fd=6
+ close=OK
+ +0.000170
diff --git a/regress/case-unknownq.sys b/regress/case-unknownq.sys
index bb73c13..60e6d2d 100644
--- a/regress/case-unknownq.sys
+++ b/regress/case-unknownq.sys
@@ -1,5 +1,5 @@
adnstest default
-:32767 davenant.relativity.greenend.org.uk.
+:0x0|32767 davenant.relativity.greenend.org.uk.
start 933811310.565828
socket domain=AF_INET type=SOCK_DGRAM
socket=4
diff --git a/regress/case-unkopts.err b/regress/case-unkopts.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/regress/case-unkopts.err
diff --git a/regress/case-unkopts.out b/regress/case-unkopts.out
new file mode 100644
index 0000000..42ee65b
--- /dev/null
+++ b/regress/case-unkopts.out
@@ -0,0 +1,10 @@
+adns debug: using nameserver 172.18.45.6
+adns: <supplied configuration text>:5: unknown option `wombat'
+adns: <supplied configuration text>:6: unknown configuration directive `stoat'
+adns: <supplied configuration text>:7: unknown option `zorkmid'
+adns: <supplied configuration text>:8: option adns_af has bad value or entry `dampstring' (option must be `any', or list of `ipv4',`ipv6')
+adns: <supplied configuration text>:8: unknown option `spong'
+chiark.greenend.org.uk flags 0 type 1 A(-) submitted
+chiark.greenend.org.uk flags 0 type A(-): OK; nrrs=1; cname=$; owner=$; ttl=3600
+ 212.13.197.229
+rc=0
diff --git a/regress/case-unkopts.sys b/regress/case-unkopts.sys
new file mode 100644
index 0000000..dadf4c3
--- /dev/null
+++ b/regress/case-unkopts.sys
@@ -0,0 +1,34 @@
+./adnstest unkopts
+:0x0|1 chiark.greenend.org.uk
+ start 1414184606.322883
+ socket domain=AF_INET type=SOCK_DGRAM
+ socket=6
+ +0.000116
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000047
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000040
+ sendto fd=6 addr=172.18.45.6:53
+ 311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+ 02756b00 00010001.
+ sendto=40
+ +0.000202
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999798
+ select=1 rfds=[6] wfds=[] efds=[]
+ +0.002958
+ recvfrom fd=6 buflen=512
+ recvfrom=OK addr=172.18.45.6:53
+ 311f8580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+ 02756b00 00010001 c00c0001 00010000 0e100004 d40dc5e5 c0130002 00010001
+ 51800011 036e7331 0a72656c 61746976 697479c0 13c01300 02000100 01518000
+ 06036e73 30c048c0 61000100 01000151 800004ac 122d06c0 44000100 01000151
+ 800004ac 122d0b.
+ +0.000383
+ recvfrom fd=6 buflen=512
+ recvfrom=EAGAIN
+ +0.000138
+ close fd=6
+ close=OK
+ +0.000180
diff --git a/regress/case-v6-map.sys b/regress/case-v6-map.sys
index 3f69f2c..3e92dce 100644
--- a/regress/case-v6-map.sys
+++ b/regress/case-v6-map.sys
@@ -1,5 +1,5 @@
./adnstest distorted
-:16842753,16842767,65537 0x1000/distorted.org.uk
+:0x1010000|1,0x1010000|15,0x10000|1 0x1000/distorted.org.uk
start 1402443121.225484
socket domain=AF_INET type=SOCK_DGRAM
socket=6
diff --git a/regress/init-unkopts.text b/regress/init-unkopts.text
new file mode 100644
index 0000000..a148864
--- /dev/null
+++ b/regress/init-unkopts.text
@@ -0,0 +1,11 @@
+nameserver 172.18.45.6
+sortlist 127.0.0.1/32 172.18.45.0/28 172.18.45.0/24
+search davenant.greenend.org.uk greenend.org.uk
+lwserver 127.0.0.1
+options timeout:1 attempts:30 rotate no-check-names inet6 edns0 wombat
+stoat
+options adns_checkc:freq zorkmid
+options adns_af:any adns_af:ipv6,ipv4,dampstring spong
+options adns_ignoreunkcfg wombat2
+stoat2
+options adns_af:any adns_af:ipv6,ipv4,dampstring2 spong2
diff --git a/src/addrfam.c b/src/addrfam.c
index 528036c..5067048 100644
--- a/src/addrfam.c
+++ b/src/addrfam.c
@@ -256,9 +256,18 @@ static bool addrtext_scope_use_ifname(const struct sockaddr *sa) {
IN6_IS_ADDR_MC_LINKLOCAL(in6);
}
+static int textaddr_check_qf(adns_queryflags flags) {
+ if (flags & ~(adns_queryflags)(adns_qf_addrlit_scope_forbid|
+ adns_qf_addrlit_scope_numeric|
+ adns_qf_addrlit_ipv4_quadonly|
+ 0x40000000))
+ return ENOSYS;
+ return 0;
+}
+
int adns_text2addr(const char *text, uint16_t port, adns_queryflags flags,
struct sockaddr *sa, socklen_t *salen_io) {
- int af;
+ int r, af;
char copybuf[INET6_ADDRSTRLEN];
const char *parse=text;
const char *scopestr=0;
@@ -266,6 +275,8 @@ int adns_text2addr(const char *text, uint16_t port, adns_queryflags flags,
void *dst;
uint16_t *portp;
+ r= textaddr_check_qf(flags); if (r) return r;
+
#define INVAL(how) do{ \
af_debug("invalid: %s: `%s'", how, text); \
return EINVAL; \
@@ -389,7 +400,9 @@ int adns_text2addr(const char *text, uint16_t port, adns_queryflags flags,
int adns_addr2text(const struct sockaddr *sa, adns_queryflags flags,
char *buffer, int *buflen_io, int *port_r) {
const void *src;
- int port;
+ int r, port;
+
+ r= textaddr_check_qf(flags); if (r) return r;
if (*buflen_io < ADNS_ADDR2TEXT_BUFLEN) {
*buflen_io = ADNS_ADDR2TEXT_BUFLEN;
diff --git a/src/adns.h b/src/adns.h
index 5765e55..a6599f6 100644
--- a/src/adns.h
+++ b/src/adns.h
@@ -50,8 +50,6 @@
* or the GNU Library General Public License, as appropriate, along
* with this program; if not, write to the Free Software Foundation.
*
- *
- * $Id$
*/
#ifndef ADNS_H_INCLUDED
@@ -110,13 +108,14 @@ typedef enum { /* In general, or together the desired flags: */
adns_if_permit_ipv4= 0x0400,/* allow _addr queries to return IPv4 addresses */
adns_if_permit_ipv6= 0x0800,/* allow _addr queries to return IPv6 addresses */
- adns_if_afmask= 0x0c00
+ adns_if_afmask= 0x0c00,
/* These are policy flags, and overridden by the adns_af:... option in
* resolv.conf. If the adns_qf_want_... query flags are incompatible with
* these settings (in the sense that no address families are permitted at
* all) then the query flags take precedence; otherwise only records which
* satisfy all of the stated requirements are allowed.
*/
+ adns__if_sizeforce= 0x7fff,
} adns_initflags;
typedef enum { /* In general, or together the desired flags: */
@@ -129,6 +128,7 @@ typedef enum { /* In general, or together the desired flags: */
adns_qf_quoteok_anshost=0x00000040,/* ... in things supposedly hostnames */
adns_qf_quotefail_cname=0x00000080,/* refuse if quote-req chars in CNAME we go via */
adns_qf_cname_loose= 0x00000100,/* allow refs to CNAMEs - without, get _s_cname */
+ adns_qf_cname_strict= 0x00010000,/* forbid CNAME refs (default, currently) */
adns_qf_cname_forbid= 0x00000200,/* don't follow CNAMEs, instead give _s_cname */
adns_qf_want_ipv4= 0x00000400,/* try to return IPv4 addresses */
@@ -145,7 +145,8 @@ typedef enum { /* In general, or together the desired flags: */
adns_qf_addrlit_scope_numeric=0x00004000,/* %<scope> may only be numeric */
adns_qf_addrlit_ipv4_quadonly=0x00008000,/* reject non-dotted-quad ipv4 */
- adns__qf_internalmask= 0x0ff00000
+ adns__qf_internalmask= 0x0ff00000,
+ adns__qf_sizeforce= 0x7fffffff
} adns_queryflags;
typedef enum {
@@ -214,7 +215,9 @@ typedef enum {
adns_r_srv_raw= 33,
adns_r_srv= adns_r_srv_raw|adns__qtf_deref,
- adns_r_addr= adns_r_a|adns__qtf_deref
+ adns_r_addr= adns_r_a|adns__qtf_deref,
+
+ adns__rrt_sizeforce= 0x7fffffff,
} adns_rrtype;
@@ -586,6 +589,12 @@ int adns_init_logfn(adns_state *newstate_r, adns_initflags flags,
* Lookups occur (logically) concurrently; use the `sortlist' directive to
* control the relative order of addresses in answers. This option
* overrides the corresponding init flags (covered by adns_if_afmask).
+ *
+ * adns_ignoreunkcfg
+ * Ignore unknown options and configuration directives, rather than
+ * logging them. To be effective, appear in the configuration
+ * before the unknown options. ADNS_RES_OPTIONS is generally early
+ * enough.
*
* There are a number of environment variables which can modify the
* behaviour of adns. They take effect only if adns_init is used, and
@@ -706,8 +715,7 @@ int adns_addr2text(const struct sockaddr *sa, adns_queryflags flags,
* port is always in host byte order and is simply copied to and
* from the appropriate sockaddr field (byteswapped as necessary).
*
- * The only flags supported are adns_qf_addrlit_...; others are
- * ignored.
+ * The only flags supported are adns_qf_addrlit_...
*
* Error return values are:
*
@@ -730,6 +738,8 @@ int adns_addr2text(const struct sockaddr *sa, adns_queryflags flags,
*
* EAFNOSUPPORT sa->sa_family is not supported (addr2text only).
*
+ * ENOSYS Unsupported flags set.
+ *
* Only if neither adns_qf_addrlit_scope_forbid nor
* adns_qf_addrlit_scope_numeric are set:
*
diff --git a/src/internal.h b/src/internal.h
index ad7d4d7..9334a6f 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -394,6 +394,7 @@ struct adns__state {
adns_sockaddr base, mask;
} sortlist[MAXSORTLIST];
char **searchlist;
+ unsigned config_report_unknown:1;
unsigned short rand48xsubi[3];
};
@@ -865,8 +866,6 @@ void adns__update_expires(adns_query qu, unsigned long ttl,
* now + ttl.
*/
-int vbuf__append_quoted1035(vbuf *vb, const byte *buf, int len);
-
bool adns__labels_equal(const byte *a, int al, const byte *b, int bl);
/* From event.c: */
diff --git a/src/parse.c b/src/parse.c
index 80b7974..caedf15 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -26,7 +26,7 @@
#include "internal.h"
-int vbuf__append_quoted1035(vbuf *vb, const byte *buf, int len) {
+static int vbuf_append_quoted1035(vbuf *vb, const byte *buf, int len) {
char qbuf[10];
int i, ch;
@@ -142,7 +142,7 @@ adns_status adns__parse_domain_more(findlabel_state *fls, adns_state ads,
if (!adns__vbuf_append(vb,".",1)) return adns_s_nomemory;
}
if (flags & pdf_quoteok) {
- if (!vbuf__append_quoted1035(vb,dgram+labstart,lablen))
+ if (!vbuf_append_quoted1035(vb,dgram+labstart,lablen))
return adns_s_nomemory;
} else {
ch= dgram[labstart];
diff --git a/src/query.c b/src/query.c
index 1f51b69..ff56fc3 100644
--- a/src/query.c
+++ b/src/query.c
@@ -275,6 +275,12 @@ int adns_submit(adns_state ads,
adns__consistency(ads,0,cc_entex);
+ if (flags & ~(adns_queryflags)0x4009ffff)
+ /* 0x40080000 are reserved for `harmless' future expansion
+ * 0x00000020 used to be adns_qf_quoteok_cname, now the default;
+ * see also addrfam.c:textaddr_check_qf */
+ return ENOSYS;
+
typei= adns__findtype(type);
if (!typei) return ENOSYS;
diff --git a/src/setup.c b/src/setup.c
index 12d2241..7171f5b 100644
--- a/src/setup.c
+++ b/src/setup.c
@@ -260,65 +260,95 @@ static void ccf_sortlist(adns_state ads, const char *fn,
static void ccf_options(adns_state ads, const char *fn,
int lno, const char *buf) {
- const char *word;
+ const char *opt, *word, *endword, *endopt;
char *ep;
unsigned long v;
- int i,l;
+ int l;
if (!buf) return;
+#define WORD__IS(s,op) ((endword-word) op (sizeof(s)-1) && \
+ !memcmp(word,s,(sizeof(s)-1)))
+#define WORD_IS(s) (WORD__IS(s,==))
+#define WORD_STARTS(s) (WORD__IS(s,>=) ? ((word+=sizeof(s)-1)) : 0)
+
while (nextword(&buf,&word,&l)) {
- if (l==5 && !memcmp(word,"debug",5)) {
+ opt=word;
+ endopt=endword=word+l;
+ if (WORD_IS("debug")) {
ads->iflags |= adns_if_debug;
continue;
}
- if (l>=6 && !memcmp(word,"ndots:",6)) {
- v= strtoul(word+6,&ep,10);
- if (l==6 || ep != word+l || v > INT_MAX) {
+ if (WORD_STARTS("ndots:")) {
+ v= strtoul(word,&ep,10);
+ if (ep==word || ep != endword || v > INT_MAX) {
configparseerr(ads,fn,lno,"option `%.*s' malformed"
- " or has bad value",l,word);
+ " or has bad value",l,opt);
continue;
}
ads->searchndots= v;
continue;
}
- if (l>=12 && !memcmp(word,"adns_checkc:",12)) {
- if (!strcmp(word+12,"none")) {
+ if (WORD_STARTS("adns_checkc:")) {
+ if (WORD_IS("none")) {
ads->iflags &= ~adns_if_checkc_freq;
ads->iflags |= adns_if_checkc_entex;
- } else if (!strcmp(word+12,"entex")) {
+ } else if (WORD_IS("entex")) {
ads->iflags &= ~adns_if_checkc_freq;
ads->iflags |= adns_if_checkc_entex;
- } else if (!strcmp(word+12,"freq")) {
+ } else if (WORD_IS("freq")) {
ads->iflags |= adns_if_checkc_freq;
} else {
configparseerr(ads,fn,lno, "option adns_checkc has bad value `%s' "
- "(must be none, entex or freq", word+12);
+ "(must be none, entex or freq", word);
}
continue;
}
- if (l>=8 && !memcmp(word,"adns_af:",8)) {
- word += 8;
+ if (WORD_STARTS("adns_af:")) {
ads->iflags &= ~adns_if_afmask;
- if (strcmp(word,"any")) for (;;) {
- i= strcspn(word,",");
- if (i>=4 && !memcmp(word,"ipv4",4))
+ if (!WORD_IS("any")) for (;;) {
+ const char *comma= memchr(word,',',endopt-word);
+ endword=comma?comma:endopt;
+ if (WORD_IS("ipv4"))
ads->iflags |= adns_if_permit_ipv4;
- else if (i>=4 && !memcmp(word,"ipv6",4))
+ else if (WORD_IS("ipv6"))
ads->iflags |= adns_if_permit_ipv6;
else {
- configparseerr(ads,fn,lno, "option adns_af has bad value `%.*s' "
- "(must be `any' or list {`ipv4',`ipv6'},...)",
- i, word);
+ if (ads->config_report_unknown)
+ adns__diag(ads,-1,0,"%s:%d: "
+ "option adns_af has bad value or entry `%.*s' "
+ "(option must be `any', or list of `ipv4',`ipv6')",
+ fn,lno, (int)(endword-word),word);
break;
}
- if (!word[i]) break;
- word= word + i + 1;
+ if (!comma) break;
+ word= comma+1;
}
continue;
}
- adns__diag(ads,-1,0,"%s:%d: unknown option `%.*s'", fn,lno, l,word);
+ if (WORD_IS("adns_ignoreunkcfg")) {
+ ads->config_report_unknown=0;
+ continue;
+ }
+ if (/* adns's query strategy is not configurable */
+ WORD_STARTS("timeout:") ||
+ WORD_STARTS("attempts:") ||
+ WORD_IS("rotate") ||
+ /* adns provides the application with knob for this */
+ WORD_IS("no-check-names") ||
+ /* adns normally does IPv6 if the application wants it; control
+ * this with the adns_af: option if you like */
+ WORD_IS("inet6") ||
+ /* adns does not do edns0 and this is not a problem */
+ WORD_IS("edns0"))
+ continue;
+ if (ads->config_report_unknown)
+ adns__diag(ads,-1,0,"%s:%d: unknown option `%.*s'", fn,lno, l,opt);
}
+
+#undef WORD__IS
+#undef WORD_IS
+#undef WORD_STARTS
}
static void ccf_clearnss(adns_state ads, const char *fn,
@@ -355,8 +385,9 @@ static void ccf_lookup(adns_state ads, const char *fn, int lno,
adns__diag(ads,-1,0,"%s:%d: yp lookups not supported by adns", fn,lno);
found_bind=-1;
} else {
- adns__diag(ads,-1,0,"%s:%d: unknown `lookup' database `%.*s'",
- fn,lno, l,word);
+ if (ads->config_report_unknown)
+ adns__diag(ads,-1,0,"%s:%d: unknown `lookup' database `%.*s'",
+ fn,lno, l,word);
found_bind=-1;
}
}
@@ -364,6 +395,10 @@ static void ccf_lookup(adns_state ads, const char *fn, int lno,
adns__diag(ads,-1,0,"%s:%d: `lookup' specified, but not `bind'", fn,lno);
}
+static void ccf_ignore(adns_state ads, const char *fn, int lno,
+ const char *buf) {
+}
+
static const struct configcommandinfo {
const char *name;
void (*fn)(adns_state ads, const char *fn, int lno, const char *buf);
@@ -376,6 +411,7 @@ static const struct configcommandinfo {
{ "clearnameservers", ccf_clearnss },
{ "include", ccf_include },
{ "lookup", ccf_lookup }, /* OpenBSD */
+ { "lwserver", ccf_ignore }, /* BIND9 lwresd */
{ 0 }
};
@@ -481,8 +517,9 @@ static void readconfiggeneric(adns_state ads, const char *filename,
!(strlen(ccip->name)==dirl && !memcmp(ccip->name,p,q-p));
ccip++);
if (!ccip->name) {
- adns__diag(ads,-1,0,"%s:%d: unknown configuration directive `%.*s'",
- filename,lno,(int)(q-p),p);
+ if (ads->config_report_unknown)
+ adns__diag(ads,-1,0,"%s:%d: unknown configuration directive `%.*s'",
+ filename,lno,(int)(q-p),p);
continue;
}
while (ctype_whitespace(*q)) q++;
@@ -567,6 +604,10 @@ static int init_begin(adns_state *ads_r, adns_initflags flags,
adns_state ads;
pid_t pid;
+ if (flags & ~(adns_initflags)(0x4fff))
+ /* 0x4000 is reserved for `harmless' future expansion */
+ return ENOSYS;
+
ads= malloc(sizeof(*ads)); if (!ads) return errno;
ads->iflags= flags;
@@ -590,6 +631,7 @@ static int init_begin(adns_state *ads_r, adns_initflags flags,
ads->tcpstate= server_disconnected;
timerclear(&ads->tcptimeout);
ads->searchlist= 0;
+ ads->config_report_unknown=1;
pid= getpid();
ads->rand48xsubi[0]= pid;
diff --git a/src/types.c b/src/types.c
index 06d0d4c..d65e155 100644
--- a/src/types.c
+++ b/src/types.c
@@ -1693,6 +1693,10 @@ DEEP_TYPE(unknown,0, "unknown",byteblock,opaque, 0, opaque );
const typeinfo *adns__findtype(adns_rrtype type) {
const typeinfo *begin, *end, *mid;
+ if (type & ~(adns_rrtype)0x63ffffff)
+ /* 0x60000000 is reserved for `harmless' future expansion */
+ return 0;
+
if (type & adns_r_unknown) return &typeinfo_unknown;
type &= adns_rrt_reprmask;