chiark / gitweb /
+ * Documentation improved somewhat, including new GPL-vs-LGPL file.
authorian <ian>
Sun, 17 Sep 2000 00:45:54 +0000 (00:45 +0000)
committerian <ian>
Sun, 17 Sep 2000 00:45:54 +0000 (00:45 +0000)
@@ -10,7 +10,7 @@
   * adnsresfilter has --debug option.
   * Improvements to adnslogres (incl. new -c option) from Tony Finch.
   * adnslogres has --help option.
-  * Documentation improved somewhat.
+  * Documentation improved somewhat, including new GPL-vs-LGPL file.
   * Do not install adnstest test utility.

   Regression test improvements:

264 files changed:
GPL-vs-LGPL
INSTALL
Makefile.in
README
README.html [new file with mode: 0644]
TODO [new file with mode: 0644]
acconfig.h
aclocal.m4
changelog
client/.cvsignore
client/Makefile.in
client/adh-main.c [new file with mode: 0644]
client/adh-opts.c [new file with mode: 0644]
client/adh-query.c [new file with mode: 0644]
client/adnshost.h [new file with mode: 0644]
client/adnslogres.c [new file with mode: 0644]
client/adnsresfilter.c [new file with mode: 0644]
client/adnstest.c
client/fanftest.c [new file with mode: 0644]
client/x.gdb [new file with mode: 0644]
configure
configure.in
dynamic/Makefile.in
install-sh [new file with mode: 0755]
regress/.cvsignore
regress/Makefile.in
regress/addcases
regress/adnshost-xinitflags.text [new file with mode: 0644]
regress/adnslogres-xinitflags.text [new file with mode: 0644]
regress/adnsresfilter-xinitflags.text [new file with mode: 0644]
regress/case-1stservbroken.err [new file with mode: 0644]
regress/case-1stservbroken.out [new file with mode: 0644]
regress/case-1stservbroken.sys [new file with mode: 0644]
regress/case-1stservtotcp.err [new file with mode: 0644]
regress/case-1stservtotcp.out [new file with mode: 0644]
regress/case-1stservtotcp.sys [new file with mode: 0644]
regress/case-2ndservok.err [new file with mode: 0644]
regress/case-2ndservok.out [new file with mode: 0644]
regress/case-2ndservok.sys [new file with mode: 0644]
regress/case-2ndservtcp.err [new file with mode: 0644]
regress/case-2ndservtcp.out [new file with mode: 0644]
regress/case-2ndservtcp.sys [new file with mode: 0644]
regress/case-abbrev.err [new file with mode: 0644]
regress/case-abbrev.out [new file with mode: 0644]
regress/case-abbrev.sys [new file with mode: 0644]
regress/case-abbrevto.err [new file with mode: 0644]
regress/case-abbrevto.out [new file with mode: 0644]
regress/case-abbrevto.sys [new file with mode: 0644]
regress/case-adh-cancel.err [new file with mode: 0644]
regress/case-adh-cancel.out [new file with mode: 0644]
regress/case-adh-cancel.sys [new file with mode: 0644]
regress/case-adh-cancel2.err [new file with mode: 0644]
regress/case-adh-cancel2.out [new file with mode: 0644]
regress/case-adh-cancel2.sys [new file with mode: 0644]
regress/case-adh-cancel3.err [new file with mode: 0644]
regress/case-adh-cancel3.out [new file with mode: 0644]
regress/case-adh-cancel3.sys [new file with mode: 0644]
regress/case-adh-norm.err [new file with mode: 0644]
regress/case-adh-norm.out [new file with mode: 0644]
regress/case-adh-norm.sys [new file with mode: 0644]
regress/case-adh-pipe.err [new file with mode: 0644]
regress/case-adh-pipe.out [new file with mode: 0644]
regress/case-adh-pipe.sys [new file with mode: 0644]
regress/case-alr-norm.err [new file with mode: 0644]
regress/case-alr-norm.in [new file with mode: 0644]
regress/case-alr-norm.out [new file with mode: 0644]
regress/case-alr-norm.sys [new file with mode: 0644]
regress/case-alr-slow.err [new file with mode: 0644]
regress/case-alr-slow.in [new file with mode: 0644]
regress/case-alr-slow.out [new file with mode: 0644]
regress/case-alr-slow.sys [new file with mode: 0644]
regress/case-arf-norm.err [new file with mode: 0644]
regress/case-arf-norm.out [new file with mode: 0644]
regress/case-arf-norm.sys [new file with mode: 0644]
regress/case-arf-text.err [new file with mode: 0644]
regress/case-arf-text.out [new file with mode: 0644]
regress/case-arf-text.sys [new file with mode: 0644]
regress/case-brokenmail.err [new file with mode: 0644]
regress/case-brokenmail.out [new file with mode: 0644]
regress/case-brokenmail.sys [new file with mode: 0644]
regress/case-child.err [new file with mode: 0644]
regress/case-child.out [new file with mode: 0644]
regress/case-child.sys [new file with mode: 0644]
regress/case-cnametocname.err [new file with mode: 0644]
regress/case-cnametocname.out [new file with mode: 0644]
regress/case-cnametocname.sys [new file with mode: 0644]
regress/case-comprinf.err [new file with mode: 0644]
regress/case-comprinf.out [new file with mode: 0644]
regress/case-comprinf.sys [new file with mode: 0644]
regress/case-datapluscname.err [new file with mode: 0644]
regress/case-datapluscname.out [new file with mode: 0644]
regress/case-datapluscname.sys [new file with mode: 0644]
regress/case-datapluscnamewait.err [new file with mode: 0644]
regress/case-datapluscnamewait.out [new file with mode: 0644]
regress/case-datapluscnamewait.sys [new file with mode: 0644]
regress/case-flags10.err [new file with mode: 0644]
regress/case-flags10.out [new file with mode: 0644]
regress/case-flags10.sys [new file with mode: 0644]
regress/case-flags9.err [new file with mode: 0644]
regress/case-flags9.out [new file with mode: 0644]
regress/case-flags9.sys [new file with mode: 0644]
regress/case-formerr.err [new file with mode: 0644]
regress/case-formerr.out [new file with mode: 0644]
regress/case-formerr.sys [new file with mode: 0644]
regress/case-lockup.err [new file with mode: 0644]
regress/case-lockup.out [new file with mode: 0644]
regress/case-lockup.sys [new file with mode: 0644]
regress/case-longdom0.err [new file with mode: 0644]
regress/case-longdom0.out [new file with mode: 0644]
regress/case-longdom0.sys [new file with mode: 0644]
regress/case-longdom1.err [new file with mode: 0644]
regress/case-longdom1.out [new file with mode: 0644]
regress/case-longdom1.sys [new file with mode: 0644]
regress/case-longdomsrch0.err [new file with mode: 0644]
regress/case-longdomsrch0.out [new file with mode: 0644]
regress/case-longdomsrch0.sys [new file with mode: 0644]
regress/case-longdomsrch1.err [new file with mode: 0644]
regress/case-longdomsrch1.out [new file with mode: 0644]
regress/case-longdomsrch1.sys [new file with mode: 0644]
regress/case-longdomsrch1b.err [new file with mode: 0644]
regress/case-longdomsrch1b.out [new file with mode: 0644]
regress/case-longdomsrch1b.sys [new file with mode: 0644]
regress/case-longdomsrch2.err [new file with mode: 0644]
regress/case-longdomsrch2.out [new file with mode: 0644]
regress/case-longdomsrch2.sys [new file with mode: 0644]
regress/case-longlab0.err [new file with mode: 0644]
regress/case-longlab0.out [new file with mode: 0644]
regress/case-longlab0.sys [new file with mode: 0644]
regress/case-longlab1.err [new file with mode: 0644]
regress/case-longlab1.out [new file with mode: 0644]
regress/case-longlab1.sys [new file with mode: 0644]
regress/case-mailboxes.out
regress/case-mailboxes.sys
regress/case-manya.sys
regress/case-manyptrwrong.err [new file with mode: 0644]
regress/case-manyptrwrong.out [new file with mode: 0644]
regress/case-manyptrwrong.sys [new file with mode: 0644]
regress/case-manyptrwrongrem.err [new file with mode: 0644]
regress/case-manyptrwrongrem.out [new file with mode: 0644]
regress/case-manyptrwrongrem.sys [new file with mode: 0644]
regress/case-manyptrwrongrst.err [new file with mode: 0644]
regress/case-manyptrwrongrst.out [new file with mode: 0644]
regress/case-manyptrwrongrst.sys [new file with mode: 0644]
regress/case-manyptrwrongrty.err [new file with mode: 0644]
regress/case-manyptrwrongrty.out [new file with mode: 0644]
regress/case-manyptrwrongrty.sys [new file with mode: 0644]
regress/case-ndots-as.err [new file with mode: 0644]
regress/case-ndots-as.out [new file with mode: 0644]
regress/case-ndots-as.sys [new file with mode: 0644]
regress/case-ndots.sys
regress/case-ndotsbad.err
regress/case-ndotsbad.sys
regress/case-noinfto.err [new file with mode: 0644]
regress/case-noinfto.out [new file with mode: 0644]
regress/case-noinfto.sys [new file with mode: 0644]
regress/case-norecurse.err [new file with mode: 0644]
regress/case-norecurse.out [new file with mode: 0644]
regress/case-norecurse.sys [new file with mode: 0644]
regress/case-norecurse2.err [new file with mode: 0644]
regress/case-norecurse2.out [new file with mode: 0644]
regress/case-norecurse2.sys [new file with mode: 0644]
regress/case-norecurse3.err [new file with mode: 0644]
regress/case-norecurse3.out [new file with mode: 0644]
regress/case-norecurse3.sys [new file with mode: 0644]
regress/case-norm.sys
regress/case-owner.out
regress/case-owner.sys
regress/case-poll.err [new file with mode: 0644]
regress/case-poll.out [new file with mode: 0644]
regress/case-poll.sys [new file with mode: 0644]
regress/case-polltimeout.err [new file with mode: 0644]
regress/case-polltimeout.out [new file with mode: 0644]
regress/case-polltimeout.sys [new file with mode: 0644]
regress/case-ptrbaddom.err [new file with mode: 0644]
regress/case-ptrbaddom.out [new file with mode: 0644]
regress/case-ptrbaddom.sys [new file with mode: 0644]
regress/case-quote.err [new file with mode: 0644]
regress/case-quote.out [new file with mode: 0644]
regress/case-quote.sys [new file with mode: 0644]
regress/case-rootquery.out
regress/case-rootquery.sys
regress/case-rootqueryall-as.err [new file with mode: 0644]
regress/case-rootqueryall-as.out [new file with mode: 0644]
regress/case-rootqueryall-as.sys [new file with mode: 0644]
regress/case-rootqueryall.out
regress/case-rootqueryall.sys
regress/case-search-as.err [new file with mode: 0644]
regress/case-search-as.out [new file with mode: 0644]
regress/case-search-as.sys [new file with mode: 0644]
regress/case-search.sys
regress/case-searchabs.sys
regress/case-sillyrp.err [new file with mode: 0644]
regress/case-sillyrp.out [new file with mode: 0644]
regress/case-sillyrp.sys [new file with mode: 0644]
regress/case-tcpallfail.err [new file with mode: 0644]
regress/case-tcpallfail.out [new file with mode: 0644]
regress/case-tcpallfail.sys [new file with mode: 0644]
regress/case-tcpblock.err [new file with mode: 0644]
regress/case-tcpblock.out [new file with mode: 0644]
regress/case-tcpblock.sys [new file with mode: 0644]
regress/case-tcpblockbrk.err [new file with mode: 0644]
regress/case-tcpblockbrk.out [new file with mode: 0644]
regress/case-tcpblockbrk.sys [new file with mode: 0644]
regress/case-tcpblockwr.err [new file with mode: 0644]
regress/case-tcpblockwr.out [new file with mode: 0644]
regress/case-tcpblockwr.sys [new file with mode: 0644]
regress/case-tcpbreakin.err [new file with mode: 0644]
regress/case-tcpbreakin.out [new file with mode: 0644]
regress/case-tcpbreakin.sys [new file with mode: 0644]
regress/case-tcpmultipart.err [new file with mode: 0644]
regress/case-tcpmultipart.out [new file with mode: 0644]
regress/case-tcpmultipart.sys [new file with mode: 0644]
regress/case-tcpptr.err [new file with mode: 0644]
regress/case-tcpptr.out [new file with mode: 0644]
regress/case-tcpptr.sys [new file with mode: 0644]
regress/case-timeout.sys
regress/case-trunc.sys
regress/case-unknownq.err [new file with mode: 0644]
regress/case-unknownq.out [new file with mode: 0644]
regress/case-unknownq.sys [new file with mode: 0644]
regress/checkall
regress/harness.h [new file with mode: 0644]
regress/harness.h.m4
regress/hcommon.c [new file with mode: 0644]
regress/hcommon.c.m4
regress/hmacros.i4
regress/hplayback.c [new file with mode: 0644]
regress/hplayback.c.m4
regress/hrecord.c [new file with mode: 0644]
regress/hrecord.c.m4
regress/hredirect.h [new file with mode: 0644]
regress/hredirect.h.m4 [new file with mode: 0644]
regress/hsyscalls.h [new file with mode: 0644]
regress/hsyscalls.h.m4 [new file with mode: 0644]
regress/hsyscalls.i4
regress/init-1stservbroken.text [new file with mode: 0644]
regress/init-1stservto.text [new file with mode: 0644]
regress/init-2ndserver.text [new file with mode: 0644]
regress/init-anarres.text [new file with mode: 0644]
regress/init-manyptrwrong.text [new file with mode: 0644]
regress/init-ncipher.text [new file with mode: 0644]
regress/init-ndots100.text [new file with mode: 0644]
regress/init-tunnel.text [new file with mode: 0644]
regress/junk [deleted file]
regress/m1test
regress/r1test
settings.make.in
src/Makefile.in
src/adns.h
src/adns.make
src/check.c [new file with mode: 0644]
src/config.h.in
src/dlist.h [new file with mode: 0644]
src/event.c
src/general.c
src/internal.h
src/parse.c
src/poll.c [new file with mode: 0644]
src/query.c
src/reply.c
src/setup.c
src/transmit.c
src/tvarith.h [new file with mode: 0644]
src/types.c

index 62672f62a769c153cc24c4c773fd70e461276aba..00c37b341c41ca007d376b2bed1475247794b36b 100644 (file)
@@ -1,17 +1,7 @@
-NB that NO VERSIONS of this file from this branch have been released,
-and I do not intend yet to publish this version.  If you get an old
-version of this file from my CVS repository definitely do not intend
-the licence exceptions in it to apply - these too were drafts, as you
-should know if you know what retreiving old CVS versions means !
-
-  - Ian Jackson, 9th March 2004.
-
-DRAFT - DRAFT - DRAFT - DRAFT - DRAFT - DRAFT - DRAFT - DRAFT - DRAFT
-
               GPL vs LGPL, in the context of adns
               -----------------------------------
 
-Several people have asked me to release adns under the GNU Lesser
+Several people have asked me to release GNU adns under the GNU Lesser
 General Public Licence (LGPL, formerly the Library GPL) instead of the
 `stronger' GPL.  This file is intended to answer most of these
 questions.  If you still have questions or comments, please mail me at
@@ -21,35 +11,34 @@ Typically there are two or three kinds of situation where people make
 this request: the first is where someone is developing a proprietary
 program and wishes to make use of adns but doesn't wish to make their
 program free software.  The second case is where a free software
-project is currently using an MIT-like licence and fear `GPL
-infection'.  The third case, which often overlaps with the second, is
-where another free software project currently using a GPL-incompatible
-licence, wishes to use adns.
+project is currently using an MIT-like licence or the LGPL and fear
+`GPL infection'.  The third case, which often overlaps with the
+second, is where another free software project currently using a
+GPL-incompatible licence, wishes to use adns.
 
 
 1. Proprietary applications of adns
 -----------------------------------
 
-This section applies if you are developing a proprietary program, by
-which I mean that you will not be distributing source code and not
-allowing users to modify and share your software; in most cases you
-will be doing this for (personal or corporate) financial gain.
+So, let me get this straight.  You're writing a proprietary
+program, by which I mean that you will not be distributing source code
+and not allowing users to modify and share your software; most likely
+you are doing this for your own (personal or corporate) financial
+gain.
 
-In these cases I may be prepared to issue you a special `LGPL' for
-adns (ie, allow you to use adns in your application according to the
-terms of the LGPL).  I will of course expect a significant licensing
-fee.
+However, you want to take advantage of adns, software which I have
+spent my time and effort on, and which I release as free software so
+that everyone can improve, share and use it.
 
-If you are interested I would be happy to negotiate with you.  Please
-contact me with your serious initial offer, or if alternatively we can
-first discuss your detailed requirements.
+Don't you think that is a little hypocritical ?  I'm sorry, but I
+don't want you to just take my nice convenient software, without
+giving something back to the free software community or giving the
+same rights to your users as I do to you.
 
-The fee for proprietary applications of adns without prior approval is
-US$1,000,000 per annum (or part thereof), per proprietary product, per
-100,000 installed systems (or part thereof), plus any administration,
-collection and legal fees required to recover the licence fee.  Of
-course, this does not apply to commercial Free software applications
-whose use of adns is compatible with the GNU GPL v2.
+If you really aren't the nasty kind of person I've described here, for
+example if you have a good reason other than your own selfishness for
+wanting to restrict distribution of your program, then perhaps you
+should contact me to discuss it.
 
 
 2. GPL-avoiding projects (MIT licence, et al)
@@ -58,39 +47,53 @@ whose use of adns is compatible with the GNU GPL v2.
 Some free software projects prefer to avoid the GPL and other licences
 which force the software always to be free.  Instead they use
 something like the MIT X licence, which allows proprietary versions of
-their software.  I have to say that I don't understand why they do
-this, and think they are misguided, but that doesn't mean that they
-don't have a perfect right to.
+their software, or the in the case of some free libraries, the LGPL,
+which allows proprietary applications.  I have to say that I think
+these people are misguided, but that doesn't mean that they don't have
+a perfect right to do that.
 
 Some of these people think that merely writing to an interface
 provided by GPL'd software will cause their program to become GPL'd
 too, even if they don't distribute the GPL'd software.  I don't think
-this is the case.  I'm perfectly happy for non-GPL'd software to refer
-to adns in its source code or executables (eg, dynamic linking).
-However, if you distribute adns yourself then whether a program which
-uses it needs also to be GPL'd depends on the interpretation of the
-`work as a whole' and `mere aggregation' parts of the GPL.
-
-Whether you are distributing a `work as a whole' might depend on many
-things, but they key one to me is what the appearance is to a user.
-If the user knows that they are getting a collection of software
-rather than a single product, then it's probably an aggregation which
-works together.  So, you can distribute both your (i) non-GPLd program
-source and/or binaries and (ii) adns source code or even binaries
-(provided the adns source is available as per the GPL), eg from your
-website, provided the user can tell that these are separate works and
-can tell which parts are which.
-
-But, if you package your program and adns together so that the user is
-no longer aware of adns as a separate work, then I think you are
-distributing a `work as a whole', and the whole work including adns
-and your software which depends on it must be GPL'd.  This is of
-course not a problem if your non-GPL licence is GPL-compatible (see
-the next section): it just means that _when the whole lot is shipped
-together as one work_ it is covered by the GPL.  People who wish to
-make proprietary works based on just your code can do so, provided
-they (or you) arrange for something to fill the hole left by the lack
-of adns.
+this is the case.  I'm perfectly happy for non-GPL'd but
+GPL-compatible software to refer to adns in its source code.  However,
+I think that exectuables (or compiled libraries) which contain or are
+dynamically linked against adns must be GPL'd; likewise executable
+programs (whether compiled or in an interpreted language) which
+require utilities from adns to function properly must be GPL'd.
+
+So, you can distribute your non-GPL'd program source which needs adns
+to compile (provided it's under a GPL-compatible licence), but people
+who wish to distribute binaries must do so under the terms of the GNU
+GPL.  This may make sense for some GPL-avoiding free software
+projects; people can still make proprietary programs from your code,
+provided that they make some provision to replace adns with something
+whose copyright allows proprietary versions.
+
+However, this doesn't make much sense for the authors of LGPL'd
+libraries.  All I can say to them is to ask which is more important:
+that their library be well-constructed and use all the best technology
+available as free software, or whether it is worth degrading quality
+of their library in order to allow proprietary programs to use it !
+
+To help the case of LGPL'd libraries for which adns is not a vital
+component - for example, a library which provides access to other
+libraries so that programs which use it need only use certain parts,
+I have released adns.h (just the public header file) under the LGPL as
+well as the GPL.  See the copyright notice in adns.h for details.
+Note that this will not help you if it adns is essential to the
+functioning of your library, because all programs using your library
+must link against both your library and adns and so must be GPL'd.
+
+
+For some information and views from the Free Software Foundation on
+free software licensing, visit:
+
+ Various licenses and comments about them
+  at http://www.fsf.org/philosophy/license-list.html
+
+ Why you shouldn't use the Library GPL for your next library
+  at http://www.fsf.org/philosophy/why-not-lgpl.html
 
 
 3. GPL-incompatible free software licences
@@ -99,330 +102,20 @@ of adns.
 Regrettably, there are a number of free software licences (and
 semi-free licences) in existence which are not compatible with the
 GPL.  That is, they impose restrictions which are not present in the
-GPL, and therefore distributing a whole work which contains such a
-program and a GPL'd program is not possible: either the work would
-have to be distributed under the GPL (violating the restrictions made
-by the original author), or under the GPL-incompatible licence
+GPL, and therefore distributing a whole work which contains both such
+a program and a GPL'd program is not possible: either the combination
+would have to be distributed under the GPL (violating the restrictions
+made by the original author), or under the GPL-incompatible licence
 (violating the GPL).
 
 I may be prepared to make exceptions for such a licence.  Please
 contact me at <adns-maint@chiark.greenend.org.uk> with the full text
-of the GPL-incompatible licence.  However, I would prefer it if you
-could use a GPL-compatible licence for your project instead.
-
-There are a couple of common extra restrictions, and I make some
-specific extensions to my licence for adns below.
-
-
-3.1. BSD advertising clause, endorsement restriction, etc.
-
-The most notable and common extra restriction found in free software
-licences is the `obnoxious BSD advertising clause' (see Richard
-Stallman's article on the subject, available from www.gnu.org) and the
-endorsement restriction.
-
-The problem with the advertising clause isn't that the sentence
-required, referring the the Regents of the UC Berkeley, is awkward.
-The problem is that if everyone contributing to a large project gets
-such a mention the number of sentences required becomes very large;
-however, it is unfair for some people to get credit and others not to.
-
-I disapprove of these clause, but I recognise that it may be difficult
-for some people to get them removed from particular programs.  The
-other clauses are also arguable.
-
-
-3.2. `Hosting service' restriction (eg, Affero GPL)
-
-The additional restriction in the AGPL v1 (section 2d) seems
-reasonable to me, in the circumstances.
-
-
-3.3. Licence extension
-
-So, I hereby make an extension to my licence for adns (`the Original
-Work' in the text below).
-
-
- LICENCE DEROGATION
- ------------------
-
- (A) Introduction:
-
-  (i)    The GNU GPL version 2, section 2b, and the later parts of
-        section 2, require that certain works be licenced to all
-        third parties under the terms of the GPL.
-
-  (ii)  As special relaxations of this requirement, described in
-        detail below, the terms of this onward licence to third
-        parties need not be (though they may be) exactly the terms of
-        the GPLv2.
-
- (B) Preconditions:
-
-  (i)    There is a work (the `Original Work') which is licensed under
-         the GNU GPL v2.
-
-  (ii)   There is a work (the `GPL'd Work'), either the same work as
-         the Original Work, or derived work of the Original Work,
-         which is licensed uner the GNU GPL v2.
-
-  (iii)  All of the copyright holders of the GPL'd Work state that
-         this Licence Derogation is to apply, and what the Original
-        Work is.  (They may limit the Derogation to only some of the
-         Allowable Extra Provisions.)
-
-  (iv)   The GPL'd Work is combined with another work (the Other
-         Work) to make a `work as a whole', the Combined Work.
-
-  (x)    The Other Work is licenced free of charge to third parties;
-        under the terms of a licence henceforth known as the Other
-        Licence.
-
-  (xi)   The Other Licence is Free.
-
-  (v)    It would be an infringement of the copyright in the Other
-         Work for you to distribute the Combined Work under the terms
-        of the GNU GPL v2.
-
-  (vi)   There is a Resulting Licence which is the GNU GPL v2 amended
-        by the addition of Extra Provisions and the relevant
-        conditions from this Licence Derogation, where
-
-  (viii) the Extra Provisions are some or all of the Allowable Extra
-         Provisions (see below), and
-
-  (x)    the Extra Provisions are provisions of the Other Licence.
-
-
- (C) Permission:
-
-  (i)    Provided that the the conditions in this Licence Derogation
-         are met, you may distribute the Combined Work under the terms
-         of the Resulting Licence.
-
-  (ii)   When the Combined Work is distributed under the terms of the
-         Resulting Licence, references to `this licence' in the text
-         of the GPL v2 may be read as references to the Resulting
-         Licence, or as references to the GPL v2, at your option.
-
- (D) Further Conditions:
-
-  (i)    All parts of the Combined Work which are (identical to, parts
-        of, or derived from) the GPL'd Work can be easily separated
-        out from the Whole Work's source code to form once more a
-         Re-separated Work.
-
-  (ii)   The Re-separated Work is a version of the Original Work which
-        is similar or superior in all respects (including
-        completeness, functionality, quality etc.) to the Original
-        Work.
-
-  (iii)  The Re-separated Work is licensed to third parties under
-        terms identical to those under which the GPL'd Work is
-        licenced to those same third parties.
-
-  (iv)   Copyright licences and notices which would appear to the
-         reader to cover the Combined Work contain the following
-        statement or an equivalent:
-          Different parts of this software may be covered by
-          different copying conditions.  See individual source code
-          files or copyright statements for details.
-
-
- (E) The Allowable Extra Provision Kinds:
-
-   (i)   In each of the following Kinds (`(1)' onwards), the nature of
-         the Extra Provisions which are made Allowable, and the
-         further conditions which must be satisfied (and which
-         therefore form part of the Resulting Licence) are stated.
-
-   (ii)  All of the paragraphs (`(i)' onwards) stated in each Kind
-         must be satisfied, for Extra Provisions to be Allowable.
-
-  (1) `Obnoxious advertising clause':
-  
-   (i)   The Extra Provisions are those of the form:
-           All advertising materials mentioning features or use of
-           this software must display the following acknowledgement:
-             This product includes software developed by DEVELOPERS.
-        and re-wordings with similar effect, where DEVELOPERS is a
-        person or group associated with the development of the Other
-        Work.
-
-   (ii)  All advertising materials mentioning features or use of the
-        Combined Work must display a similar acknowledgement for
-        every Identifiable Author.
-
-   (iii) All distributions of the Combined Work must contain a list of
-        the Identifiable Authors.       
-
-  (2) `Endorsement restriction':
-
-   (i)   The Extra Provisions are ones which restrict the use of the 
-         authors', copyright holders' and/or contributors' names for
-         endorsement or promotion of products.
-
-   (ii)  The endorsement restriction(s) must benefit all of the
-         natural persons and organisations with an interest in the
-         Whole Work, unless those people wish otherwise.
-
-  (3) `Liability limitation':
-
-   (i)          The Extra Provisions are ones which claim to exclude or limit
-        in any way the liability, for malfunctions, failures etc. of
-        the Whole Work or parts thereof, of any contributors,
-        distributors, copyright holders, authors, etc. of the
-        software.  Provisions which seek to deny warranties, even
-        implied warranties, or which otherwise seek to limit similar 
-        exposure(s) to risk(s), count.
-
-   (ii)         The protections of the Extra Provisions must be extended to
-        all of the authors and distributors of the Whole Work, unless
-        those people wish otherwise.
-
-
-  (4) `Pointless restatements':
-
-   (i)  The Extra Provisions are ones which require distributions of
-        the Whole Work to contain notices in source and/or binary
-        distributions, and/or in the documentation and/or other
-        materials provided with the distributions.
-
-   (ii)         The required notices must be simple truths, or restatements
-        of licence provisions which actually apply to the Combined
-        Work.
-
-   (iii) (The author of this Licence Derogation believes that
-        `pointless restatement requirements' are compatible with the
-        GPLv2, since they seem to fall under the heading of an
-        `appropriate copyright notice and disclaimer of warranty',
-        which is already required by the GPLv2.  However, this
-        relaxation is provided in case of doubt.)
-
-
-  (5) `Service provision - source code to users' (eg AGPL):
-
-   (i)   The Extra Provisions apply only
-        (a) when the Other Work or Combined Work is intended to
-            interact with people (`Users') through a computer network,
-            or
-        (b) when the Other Work or Combined Work is executed on behalf
-            of a third party (the `User'),
-         (or when both (a) and (b) apply).
-
-   (ii)  There exists a Sensible Publication Mechanism such that the
-         Extra Provisions are satisfied when:
-        (a) the Combined Work is made available free of charge to the
-            public, by that Sensible Publication Mechanism, and
-        (b) the existence and details of the Sensible Publication
-            Mechanism are made known in appropriate ways to each
-            User.
-
-   (iii) A Sensible Publication Mechanism is a reasonable and
-         convenient means for allowing members of the public
-         (`Downloaders') to obtain the source code in machine-readable
-         form.
-
-   (iv)  A Sensible Publication Mechanism is not more onerous to
-         provide than a public-facing World Wide Web server.
-
-
- (F) Additional definitions:
-
-  (i)    A Free software licence is one which is approved both
-        (a) as a Free Software licence by the Free Software
-           Foundation, and
-        (b) as an Open Source Licence by the Open Source Initiative.
-
-  (ii)   A Combining Participant includes any person:
-        (a) who makes a modification to the Other Work, which is
-            now included in the Combined Work, with a view to the
-            creation of any work which might be a Combined Work
-            according to this Licence Derogation; or
-        (b) who obtains the Other Work and GPL'd work separately and
-            distributes the Combined Work.
-
-  (iii)  An Identifiable Author is
-        (a) a natural person
-        (b) who contributed to the Combined Work (including without
-            limitation as a work for hire)
-        (c) whose identity or proper form of acknowledgement it
-           reasonably practical to determine by inspection of the
-           Authorship Documentation,
-        (d) and who has not stated publicly that they do not wish such
-           acknowledgements to be displayed.
-
-  (iv)   The Authorship Documentation includes all copyright notices,
-         authorship notices, credits files, change logs,
-         acknowledgements, and similar documentation, in the source
-         code for the Original Work, the GPL'd Work, the Other Work
-        and the Combined Work.
-
-  (v)    The Authorship Documentation also includes any communications
-         received by a Combining Participant regarding authorship of
-         any part of the Combined Work.
-
-
-
-
-
-   (iv)  A Sensible Publication Mechanism does not require any
-         Downloader to provide any identification or authorisation
-         other than that inherently required by the underlying
-         technical mechanisms.
-
-   (v)   A Sensible Publication Mechanism is free of charge.
-
-   (vi)  A Sensible Publication Mechanism does not make any efforts to
-         trace, track, cross-reference, or otherwise gain information
-         about Downloaders, other than the minimum data required for
-         direct technical fault-finding; any data collected shall be
-         used only for direct technical fault-finding.
-
-   (vii) Where a Sensible Publication Mechanism involves
-         implementation of a technical communications protocol, the
-         Mechanism must permit the use by Downloaders of the widest
-         feasible range of standards-compliant software.
-
-   (vii) For example, for download via the public World Wide Web to
-         satisfy this paragraph, the HTTP server must permit downloads
-         from any IP address, and it may not have any access controls,
-         cookies, reverse DNS requirements, registration forms, adult
-         checks, authorisation codes, email confirmations, URL
-         session-ids, browser restrictions, JavaScript, Java, Flash,
-         and must use the most conservative possible HTML, and the
-         webserver logs must contain the least possible information
-         and be expired quickly.
-
-DRAFT
-
-, or to pay anyone any
-         money.
-
-   
-
-which there is a
-         Sensible Mechanism  can be 
-
-(to the Other Work publicly and freely available.
+of the GPL-incompatible licence.  However, I would usually prefer it
+if you could use a GPL-compatible licence for your project instead.
 
-          (a) (from `AGPL version 1')
-              If the Program as you received it is intended to
-              interact with users through a computer network and if,
-              in the version you received, any user interacting with
-              the Program was given the opportunity to request
-              transmission to that user of the Program's complete
-              source code, you must not remove that facility from
-              your modified version of the Program or work based on
-              the Program, and must offer an equivalent opportunity
-              for all users interacting with your Program through a
-              computer network to request immediate transmission by
-              HTTP of the complete source code of your modified
-              version or other derivative work.
 
+-- Ian Jackson 17.9.2000
 
-DRAFT --- Ian Jackson 10.5.1999
 
 Local variables:
 mode: text
diff --git a/INSTALL b/INSTALL
index 64075d065f602519d24d1afb56bba0b4cc9c61b0..4c0ae67dfa772c7d9179075db63a2e66dbca9f7b 100644 (file)
--- a/INSTALL
+++ b/INSTALL
-INSTALLATION INSTRUCTIONS for ADNS
+INSTALLATION INSTRUCTIONS for GNU ADNS
 
-   $ ./configure
+1. Read the security note below.
+
+2. Standard GNU package build process:
+   $ ./configure [--disable-dynamic] [--prefix=... ...]
    $ make
    # make install
 
-Unfortunately, since this is a beta, there is no good documentation
-yet.  For now, use the comments in the public header file adns.h.
+Unfortunately, there is no comprehensive documentation yet.  For now,
+use the comments in the public header file adns.h, and for the C
+programs their usage messages.  If you find this information
+ambiguous, incomplete or wrong, please report it as a bug.
+
+
+TESTED PLATFORMS
+
+The following platforms have been tested at at least some point and
+should work - please report if they don't:
+  [adns]       OS
+   1.0         Linux glibc 2.1 (actually tested on Debian 2.2)
+   1.0         Solaris 2.6, 2.7, 2.8 [3]
+   1.0         FreeBSD 3.2, 4.0 (no poll(2), so no adnsresfilter)
+The following work, but only with --disable-dynamic:
+   1.0         IRIX 6.5 *not* with GCC [1], [2]
+   1.0         AIX 4.1.5
+   1.0         HP-UX 10.20, 11.00
+Later versions of the same OS should work too.  [adns] is the latest
+version of adns that has been tested.  Usually entries in this table
+mean they pass adns's own regression test, when compiled with GCC,
+and appear to install and run correctly.
 
+Notes/known problems:
+   [1] IRIX 6.5 inet_ntoa seems to break with GCC.
+   [2] The SGI IRIX compiler produces many spurious warnings.
+   [3] Dynamically linked, needs some help to find libadns.so.0.1.
+
+The following platforms are known to be deficient and will not work:
+   Solaris 2.5                 Lacks vsnprintf - install glibc ?
+   TruUnix64 (DEC UNIX 4.0f)   Lacks vsnprintf - install glibc ?
+Please don't report these problems unless you have a nice,
+straightforward solution or workaround for them.  (I don't consider
+including a `vsnprintf' implementation nice, so don't send me one.)
+
+
+PORTABILITY INFORMATION
 
 You will find that adns requires a reasonably standard and up to date
-system.
+system.  Non-GNU, non-UNIX systems are not supported.
+
+The build system assumes by default that you have ELF shared
+libraries, and that the directory in which libadns.so.1 will be
+installed is on your dynamic library search path.  If your system
+doesn't have ELF shared libraries then dynamic linking is not
+supported by adns.  Use the --disable-shared configure option.
+Please don't send me patches to use libtool (which I dislike).
 
-In particular, the build system assumes that you have ELF shared
-libraries.  If you don't then please don't send me patches to support
-your kind of shared libraries, and don't send me patches to use
-libtool.  I'm not interested in supporting non-ELF shared libraries.
-However, if you send me an appropriate patch I'd be willing to make it
-easy or automatic to disable the ELF shared library arrangements.
+The adnsresfilter utility uses `tsearch' from the C library (a la SVID
+and X/Open).  If you don't have tsearch configure will arranges for
+adnsresfilter not to be built.  To fix this, install a C library
+containing tsearch, such as the GNU C library.  It is best if tsearch
+uses an automatically-balancing tree algorithm, like the glibc version
+does.  Simple binary trees may perform badly.
 
-You may find that GNU Make is required.
+You will probably find that GNU Make is required.
+Please do not report this as a bug; install GNU Make instead.
+
+
+SECURITY AND PERFORMANCE - AN IMPORTANT NOTE
+
+adns is not a full-service resolver.  It does no caching of responses
+at all, and has no defence against bad nameservers or fake packets
+which appear to come from your real nameservers.  It relies on the
+full-service resolvers listed in resolv.conf to handle these tasks.
+
+For secure and reasonable operation you MUST run a full-service
+nameserver on the same system as your adns applications, or on the
+same local, fully trusted network.  You MUST only list such
+nameservers in the adns configuration (eg resolv.conf).
+
+You MUST use a firewall or other means to block packets which appear
+to come from these nameservers, but which were actually sent by other,
+untrusted, entities.
+
+Furthermore, adns is not DNSSEC-aware in this version; it doesn't
+understand even how to ask a DNSSEC-aware nameserver to perform the
+DNSSEC cryptographic signature checking.
 
 
 COPYRIGHT
 
 This file, INSTALL, contains installation instructions and other
-details for adns.
+details for adns.  It is
+ Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
 
-adns is Copyright (C)1997-9 Ian Jackson <ian@davenant.greenend.org.uk>.
+adns is
+ Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>         [1]
+ Copyright (C) 1991 Massachusetts Institute of Technology  [2]
 
 adns is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
@@ -39,6 +109,15 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with userv as the file COPYING; if not, email me at the address
+along with adns as the file COPYING; if not, email me at the address
 above or write to the Free Software Foundation, 59 Temple Place -
 Suite 330, Boston, MA 02111-1307, USA.
+
+[1] Tony Finch holds the original copyright on client/adnslogres.c and
+    client/fanftest.c, and some modifications to those files.
+[2] MIT hold the original copyright on the included install-sh,
+    which came via GNU autoconf.
+
+# Local variables:
+# mode: text
+# End:
index 5b4ca52cea1f9a5461016c9052f9f76328a55156..9585831071bbb6a2bf14c06f4b4ac68d2f9078a3 100644 (file)
@@ -1,7 +1,12 @@
 # Makefile - top-level Makefile
-# 
-#  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
 #  
+#  This file is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+# 
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
 #  the Free Software Foundation; either version 2, or (at your option)
 #  along with this program; if not, write to the Free Software Foundation,
 #  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
 
-DISTVERSION=   0.1
-
+DISTVERSION=   0.9
 srcdir=                @srcdir@
 VPATH=         @srcdir@
 
-SUBDIRS= src dynamic client regress
+ENABLE_DYNAMIC=        @ENABLE_DYNAMIC@
+ifeq ($(ENABLE_DYNAMIC),elf)
+SUBDIRS_DYNAMIC=dynamic
+else
+SUBDIRS_DYNAMIC=
+endif
+
+SUBDIRS= src $(SUBDIRS_DYNAMIC) client regress
 
 all install uninstall clean distclean mostlyclean maintainer-clean distprep:
        set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d $@; done
@@ -30,7 +41,7 @@ all install uninstall clean distclean mostlyclean maintainer-clean distprep:
 all-here install-here uninstall-here distprep-here:    README
 
 clean-here mostlyclean-here:
-               rm -f *~ ./#*# core *.orig *.rej Makefile adns-*.tar.gz
+               rm -f *~ ./#*# core *.orig *.rej adns-*.tar.gz
                rm -rf dist_tmp
 
 distclean-here maintainer-clean-here:  clean-here
@@ -47,6 +58,7 @@ dist:                 distprep
                sed -e 's#.*#mkdir -p $(dist_tmp)/&#' | sh
        find \( -name CVS -o -name dist_tmp* \) -prune -o -type f -print | \
                sed -e 's#.*#ln & $(dist_tmp)/&#' | sh
+       $(MAKE) -C dist_tmp/adns-$(DISTVERSION) distclean
        cd dist_tmp && tar cf ../$(dist_tmp).tar `basename $(dist_tmp)`
        gzip -9 $(dist_tmp).tar
        mv $(dist_tmp).tar.gz .
@@ -54,9 +66,8 @@ dist:                 distprep
 check:                 all
        $(MAKE) -C regress check
 
-README README-update:
-       lynx -dump -number_links -cfg=/dev/null \
-               http://www.chiark.greenend.org.uk/~ian/adns/ >README.tmp
+README:                        README.html
+       lynx -dump -number_links -cfg=/dev/null ./README.html >README.tmp
        mv -f README.tmp README
 
 TAGS info dvi:
diff --git a/README b/README
index a7a6805b5b440243dcedcf7dfa5767c7c08ef927..e159a8c08e22716ae3937e717dbb62d2753b161d 100644 (file)
--- a/README
+++ b/README
@@ -1,11 +1,13 @@
 
-                                     adns
+                                   GNU adns
                                        
-   Advanced, easy to use, asynchronous-capable DNS client library.
+   Advanced, easy to use, asynchronous-capable DNS client library and
+   utilities.
    
-   adns is a resolver library for C (and C++) programs. In contrast with
-   the existing interfaces, gethostbyname et al and libresolv, it has the
-   following features:
+   adns is a resolver library for C (and C++) programs, and a collection
+   of useful DNS resolver utilities. In contrast with the existing
+   interfaces, gethostbyname et al and libresolv, it has the following
+   features:
      * It is reasonably easy to use for simple programs which just want
        to translate names to addresses, look up MX records, etc.
      * It can be used in an asynchronous, non-blocking, manner. Many
      * Understands conventional resolv.conf, but this can overridden by
        environment variables.
      * Flexibility. For example, the application can tell adns to: ignore
-       environment variables (for setuid programs), disable sanity checks
-       eg to return arbitrary data, override or ignore resolv.conf in
-       favour of supplied configuration, etc.
+       environment variables (for setuid programs), disable hostname
+       syntax sanity checks to return arbitrary data, override or ignore
+       resolv.conf in favour of supplied configuration, etc.
      * Believed to be correct ! For example, will correctly back off to
        TCP in case of long replies or queries, or to other nameservers if
        several are available. It has sensible handling of bad responses
        etc.
        
-Forthcoming:
+DNS utility programs
 
-   I hope that future versions may also have the following features:
-     * The library will be useable by threads in a multithreaded program
-       in a natural way. It will multiplex many threads' queries through
-       a single query socket.
-     * Limited caching behaviour.
-     * IPv6 support.
+   adns also comes with a number of utility programs for use from the
+   command line and in scripts:
+     * adnslogres is a much faster version of Apache's logresolv program.
+     * adnsresfilter is a filter which copies its input to its output,
+       replacing IP addresses by the corresponding names, without unduly
+       delaying the output. For example, you can usefully pipe the output
+       of netstat -n, tcpdump -ln, and the like, into it.
+     * adnshost is a general-purpose DNS lookup utility which can be used
+       easily in from the command line and from shell scripts to do
+       simple lookups. In a more advanced mode it can be used as a
+       general-purpose DNS helper program for scripting languages which
+       can invoke and communicate with subprocesses. See the [1]usage
+       message for a summary of its capabilities.
        
-   (Technical note: adns requires a real nameserver like BIND running on
+Technical note
+
+   adns requires a real nameserver like [2]BIND or [3]Dents running on
    the same system or a nearby one, which must be willing to provide
    `recursive service'. I.e., adns is a `stub resolver'. All properly
    configured UN*X and GNU systems will already have such nameserver(s);
-   they are usually listed in /etc/resolv.conf.)
+   they are usually listed in /etc/resolv.conf.
+   
+Documentation
+
+   I'm afraid there is no manual yet. However, competent C programmers
+   should be able to use the library based on the [4]commented adns.h
+   header file, and the usage messages for the programs should be
+   sufficient.
    
 Feedback
 
-   If you are subscribed to adns-discuss please send bug reports there;
-   otherwise mail them to adns-bugreports@chiark.greenend.org.uk.
+   I'd be pleased if you would let me know if you're using my library in
+   your project, and what you think of it.
+   
+   If you are subscribed to adns-discuss please send feedback, including
+   bug reports, there; otherwise send mail to
+   adns-bugreports@chiark.greenend.org.uk. If you'd prefer that your
+   message wasn't forwarded to the adns-bugreports list, send it to
+   adns-maint@chiark.greenend.org.uk.
    
 Mailinglists
 
@@ -61,23 +85,30 @@ Mailinglists
    important bugs, new versions, &c. The bug reports address mentioned
    above is also a mailing list; feel free to subscribe to it.
    
-   There are [1]archives and subscription web pages, or you can subscribe
+   There are [5]archives and subscription web pages, or you can subscribe
    by sending mail containing the word `subscribe' to
    adns-announce-REQUEST@chiark.greenend.org.uk or
    adns-discuss-REQUEST@chiark.greenend.org.uk.
    
 Download
 
-   Available for download from [2]chiark.greenend.org.uk are:
-     * The [3]current pre-release version as a gzipped tarfile.
-     * All released versions are also available via [4]anonymous FTP.
+   Available for download from [6]chiark.greenend.org.uk are:
+     * The [7]current beta version as a gzipped tarfile.
+     * [8]adns.h API header file with comments (currently there is no
+       manual, sorry).
+     * All versions released so far are also available via [9]anonymous
+       FTP.
+     * A mirror of my CVS repository is available via rsync from
+       rsync.chiark.greenend.org.uk::ftp/users/ian/cvs-pub/adns (use FTP
+       first to find your way around), or via [10]cvsweb.
        
-   adns is also available from the GNU Project FTP servers and their
-   mirrors.
+   adns is also available from the [11]GNU Project FTP servers and their
+   [12]mirrors.
    
 Copyright and licensing
 
-   adns is Copyright 1997-1999 Ian Jackson.
+   adns is Copyright 1997-2000 Ian Jackson, Copyright 1999 Tony Finch,
+   and Copyright (C) 1991 Massachusetts Institute of Technology.
    
    adns is free software; you can redistribute it and/or modify it under
    the terms of the GNU General Public License as published by the Free
@@ -86,37 +117,46 @@ Copyright and licensing
    
    This program and documentation is distributed in the hope that it will
    be useful, but without any warranty; without even the implied warranty
-   of merchantability or fitness for a particular purpose. See the [5]GNU
-   General Public License for more details.
+   of merchantability or fitness for a particular purpose. See the
+   [13]GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
    along with adns, or one should be available above; if not, write to
-   the [6]Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+   the [14]Free Software Foundation, 59 Temple Place - Suite 330, Boston,
    MA 02111-1307, USA, or email adns-maint@chiark.greenend.org.uk.
      _________________________________________________________________
    
-   [7]Ian Jackson / [8]adns-maint@chiark.greenend.org.uk; more [9]free
+   [15]Ian Jackson / [16]adns-maint@chiark.greenend.org.uk; more [17]free
    software by me.
    
-   [10]GNU home page; [11]site or mirror home page
+   [18]GNU home page; [19]chiark home page; [20]site or mirror home page
    
-   This web page is Copyright (C)1996-1999 Ian Jackson. See the
-   [12]Copyright/acknowledgements.
+   This web page is Copyright (C)1996-2000 Ian Jackson. See the
+   [21]Copyright/acknowledgements.
    
-   Use any browser - [13]Campaign for a non-browser-specific WWW
+   Use any browser - [22]Campaign for a non-browser-specific WWW
 
 References
 
-   1. http://www.chiark.greenend.org.uk/mailman/listinfo
-   2. http://www.chiark.greenend.org.uk/
-   3. http://www.chiark.greenend.org.uk/~ian/adns/adns.tar.gz
-   4. ftp://ftp.chiark.greenend.org.uk/users/ian/userv/
-   5. http://www.chiark.greenend.org.uk/~ian/COPYING.txt
-   6. http://www.fsf.org/
-   7. http://www.chiark.greenend.org.uk/
-   8. mailto:adns-maint@chiark.greenend.org.uk
-   9. http://www.chiark.greenend.org.uk/~ian/software/
-  10. http://www.gnu.org/
-  11. http://www.chiark.greenend.org.uk/
-  12. http://www.chiark.greenend.org.uk/~ian/sw-www-copy.html
-  13. http://www.anybrowser.org/campaign/
+   1. http://www.chiark.greenend.org.uk/~ian/adns/usage/adnsresfilter_usage.text
+   2. http://www.isc.org/view.cgi?/products/BIND/index.phtml
+   3. http://www.dents.org/
+   4. http://www.chiark.greenend.org.uk/~ian/adns/adns.h.txt
+   5. http://www.chiark.greenend.org.uk/mailman/listinfo
+   6. http://www.chiark.greenend.org.uk/~ian/adns/
+   7. http://www.chiark.greenend.org.uk/~ian/adns/adns.tar.gz
+   8. http://www.chiark.greenend.org.uk/~ian/adns/adns.h.txt
+   9. ftp://ftp.chiark.greenend.org.uk/users/ian/adns/
+  10. http://www.chiark.greenend.org.uk/ucgi/~ijackson/cvsweb/adns/
+  11. http://www.gnu.org/
+  12. http://www.gnu.org/order/ftp.html
+  13. http://www.chiark.greenend.org.uk/~ian/COPYING.txt
+  14. http://www.fsf.org/
+  15. http://www.chiark.greenend.org.uk/
+  16. mailto:adns-maint@chiark.greenend.org.uk
+  17. http://www.chiark.greenend.org.uk/~ian/software/
+  18. http://www.gnu.org/
+  19. http://www.chiark.greenend.org.uk/
+  20. file://localhost/
+  21. http://www.chiark.greenend.org.uk/~ian/sw-www-copy.html
+  22. http://www.anybrowser.org/campaign/
diff --git a/README.html b/README.html
new file mode 100644 (file)
index 0000000..d3af798
--- /dev/null
@@ -0,0 +1,214 @@
+<html><head><title>adns - advanced, alternative, asynchronous resolver</title>
+<!--
+  Note: this file is maintained in Ian Jackson's private CVS.
+
+  It is served on the GNU site and also from my own system, under the
+  URL http://www.chiark.greenend.org.uk/adns/ Please ensure that all
+  links continine to be correct both for www.gnu.org and chiark.
+
+  $Id$
+  -->   
+<link rev="made" href="mailto:adns-maint@chiark.greenend.org.uk">
+</head>
+<body>
+<h1>GNU adns</h1>
+
+<strong>Advanced, easy to use, asynchronous-capable DNS client
+library and utilities.</strong>
+
+<p>
+
+adns is a resolver library for C (and C++) programs, and a collection
+of useful DNS resolver utilities.  In contrast with the existing
+interfaces, gethostbyname et al and libresolv, it has the following
+features:
+
+<ul>
+
+<li>It is reasonably easy to use for simple programs which just want
+to translate names to addresses, look up MX records, etc.
+
+<li>It can be used in an asynchronous, non-blocking, manner.  Many
+queries can be handled simultaneously.
+
+<li>Responses are decoded automatically into a natural representation
+for a C program - there is no need to deal with DNS packet formats.
+
+<li>Sanity checking (eg, name syntax checking, reverse/forward
+correspondence, CNAME pointing to CNAME) is performed automatically.
+
+<li>Time-to-live, CNAME and other similar information is returned in
+an easy-to-use form, without getting in the way.
+
+<li>There is no global state in the library; resolver state is an
+opaque data structure which the client creates explicitly.  A program
+can have several instances of the resolver.
+
+<li>Errors are reported to the application in a way that distinguishes
+the various causes of failure properly.
+
+<li>Understands conventional resolv.conf, but this can overridden by
+environment variables.
+
+<li>Flexibility.  For example, the application can tell adns to:
+ignore environment variables (for setuid programs), disable hostname
+syntax sanity checks to return arbitrary data, override or ignore
+resolv.conf in favour of supplied configuration, etc.
+
+<li>Believed to be correct !  For example, will correctly back off to
+TCP in case of long replies or queries, or to other nameservers if
+several are available.  It has sensible handling of bad responses etc.
+
+</ul>
+
+<h2>DNS utility programs</h2>
+
+adns also comes with a number of utility programs for use from the
+command line and in scripts:
+
+<ul>
+
+<li><code>adnslogres</code> is a much faster version of Apache's
+logresolv program.
+
+<li><code>adnsresfilter</code> is a filter which copies its input to
+its output, replacing IP addresses by the corresponding names, without
+unduly delaying the output.  For example, you can usefully pipe the
+output of netstat -n, tcpdump -ln, and the like, into it.
+
+<li><code>adnshost</code> is a general-purpose DNS lookup utility
+which can be used easily in from the command line and from shell
+scripts to do simple lookups.  In a more advanced mode it can be used
+as a general-purpose DNS helper program for scripting languages which
+can invoke and communicate with subprocesses.  See the
+<A href="http://www.chiark.greenend.org.uk/~ian/adns/usage/adnsresfilter_usage.text">usage
+message</A> for a summary of its capabilities.
+
+</ul>
+
+<h2>Technical note</h2>
+
+adns requires a real nameserver like
+<A href="http://www.isc.org/view.cgi?/products/BIND/index.phtml">BIND</A>
+or
+<A href="http://www.dents.org/">Dents</A> running on
+the same system or a nearby one, which must be willing to provide
+`recursive service'.  I.e., adns is a `stub resolver'.  All properly
+configured UN*X and GNU systems will already have such nameserver(s);
+they are usually listed in /etc/resolv.conf.
+
+<h2>Documentation</h2>
+
+I'm afraid there is no manual yet.  However, competent C programmers
+should be able to use the library based on the
+<A href="http://www.chiark.greenend.org.uk/~ian/adns/adns.h.txt">commented
+adns.h header file</A>, and the usage messages for the programs should
+be sufficient.
+
+<h2>Feedback</h2>
+
+I'd be pleased if you would let me know if you're using my library in
+your project, and what you think of it.
+
+<p>
+
+If you are subscribed to <code>adns-discuss</code> please send
+feedback, including bug reports, there; otherwise send mail to
+<code>adns-bugreports@chiark.greenend.org.uk</code>.  If you'd prefer
+that your message wasn't forwarded to the <code>adns-bugreports</code>
+list, send it to <code>adns-maint@chiark.greenend.org.uk</code>.
+
+<h2>Mailinglists</h2>
+
+I have set up mailinglists <code>adns-announce</code> and
+<code>adns-discuss</code>.  The announcements list is moderated and
+will contain only announcements of important bugs, new versions, &c.
+The bug reports address mentioned above is also a mailing list; feel
+free to subscribe to it.
+
+<p>
+
+There are
+<A href="http://www.chiark.greenend.org.uk/mailman/listinfo">archives
+and subscription web pages</A>, or you can subscribe by sending mail
+containing the word `subscribe' to
+<code>adns-announce-REQUEST@chiark.greenend.org.uk</code> or
+<code>adns-discuss-REQUEST@chiark.greenend.org.uk</code>.
+
+<h2>Download</h2>
+
+Available for download from
+<A href="http://www.chiark.greenend.org.uk/~ian/adns/">chiark.greenend.org.uk</A>
+are:
+<ul>
+<li>The <A href="http://www.chiark.greenend.org.uk/~ian/adns/adns.tar.gz">current beta version</A>
+    as a gzipped tarfile.
+<li><A href="http://www.chiark.greenend.org.uk/~ian/adns/adns.h.txt">adns.h</A>
+    API header file with comments (currently there is no manual, sorry).
+<li>All versions released so far are also available via
+    <A href="ftp://ftp.chiark.greenend.org.uk/users/ian/adns/">anonymous
+    FTP</A>.
+<li>A mirror of my CVS repository is available via rsync from
+    <code>rsync.chiark.greenend.org.uk::ftp/users/ian/cvs-pub/adns</code>
+    (use FTP first to find your way around), or via
+    <A href="http://www.chiark.greenend.org.uk/ucgi/~ijackson/cvsweb/adns/">cvsweb</A>.
+</ul>
+
+adns is also available from the
+<A href="http://www.gnu.org/">GNU Project</A> FTP servers and their
+<A href="http://www.gnu.org/order/ftp.html">mirrors</A>.
+
+<h2>Copyright and licensing</h2>
+
+<kbd>adns</kbd> is Copyright 1997-2000 Ian Jackson, Copyright 1999
+Tony Finch, and Copyright (C) 1991 Massachusetts Institute of
+Technology.
+
+<p>
+
+<kbd>adns</kbd> is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+<p>
+
+This program and documentation is distributed in the hope that it will
+be useful, but <em>without any warranty</em>; without even the implied
+warranty of <em>merchantability</em> or <em>fitness for a particular
+purpose</em>.  See the
+<A href="http://www.chiark.greenend.org.uk/~ian/COPYING.txt">GNU
+General Public License</A> for more details.
+
+<p>
+
+You should have received a copy of the GNU General Public License
+along with <kbd>adns</kbd>, or one should be available above; if not,
+write to the
+<A href="http://www.fsf.org/">Free Software Foundation</A>,
+59 Temple Place - Suite 330, Boston, MA 02111-1307, USA,
+or email <code>adns-maint@chiark.greenend.org.uk</code>.
+
+<p>
+
+<hr>
+<A href="http://www.chiark.greenend.org.uk/">Ian Jackson</A> / 
+<A href="mailto:adns-maint@chiark.greenend.org.uk"><tt>adns-maint@chiark.greenend.org.uk</tt></A>;
+more <A href="http://www.chiark.greenend.org.uk/~ian/software/">free
+software</A> by me.
+<p>
+
+<A href="http://www.gnu.org/">GNU home page</A>;
+<A href="http://www.chiark.greenend.org.uk/">chiark home page</A>;
+<A href="/">site or mirror home page</A>
+<p>
+
+This web page is Copyright (C)1996-2000 Ian Jackson.  See the
+<A href="http://www.chiark.greenend.org.uk/~ian/sw-www-copy.html">Copyright/acknowledgements</A>.
+<p>
+
+Use any browser -
+<A href="http://www.anybrowser.org/campaign/">Campaign for a non-browser-specific WWW</A>
+
+</body>
+</html>
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..60165a6
--- /dev/null
+++ b/TODO
@@ -0,0 +1,11 @@
+WISHLIST:
+* Make timeouts configurable.
+* `fake' reverse queries (give nnn.nnn.nnn.nnn either always or on error)
+* `fake' forward queries (allow nnn.nnn.nnn.nnn -> A)
+* DNSSEC compatibility - be able to retreive KEY and SIG RRs
+* DNSSEC minimum functionality - ignore Additional when AD set.
+* IPv6 name<->address translation - but which version ??
+* IPv6 transport.
+* Threadsafe version/mode.
+* Caching in the library.
+* SRV RRs.
index 73a7fe372fe7083dd2c36724e62d0bc2dcacdeb2..96f0889d932e9f68c8e8fa285bf3ef72818fe3f5 100644 (file)
@@ -3,7 +3,12 @@
  * input file for autoheader/autoconf/configure: extra stuff for config.h
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -20,6 +25,9 @@
  *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
  */
 
+/* Define if inline functions a la GCC are available.  */
+#undef HAVE_INLINE
+
 /* Define if function attributes a la GCC 2.5 and higher are available.  */
 #undef HAVE_GNUC25_ATTRIB
 
 /* Define if printf-format argument lists a la GCC are available.  */
 #undef HAVE_GNUC25_PRINTFFORMAT
 
+/* Define if we want to include rpc/types.h.  Crap BSDs put INADDR_LOOPBACK there. */
+#undef HAVEUSE_RPCTYPES_H
+
 @BOTTOM@
 
 /* Use the definitions: */
 
+#ifndef HAVE_INLINE
+#define inline
+#endif
+
+#ifdef HAVE_POLL
+#include <sys/poll.h>
+#else
+/* kludge it up */
+struct pollfd { int fd; short events; short revents; };
+#define POLLIN  1
+#define POLLPRI 2
+#define POLLOUT 4
+#endif
+
 /* GNU C attributes. */
 #ifndef FUNCATTR
 #ifdef HAVE_GNUC25_ATTRIB
 #ifndef CONSTANT
 #define CONSTANT FUNCATTR((ATTRCONST))
 #endif
+
+#ifdef HAVEUSE_RPCTYPES_H
+#include <rpc/types.h>
+#endif
+
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
index b2d9e9f2a56f29a8dfb4636eeb9d7dfdb33fbb26..6c4099eec6680dfe31dbcd2d6e593aa37e8a839f 100644 (file)
@@ -1,5 +1,12 @@
 # aclocal.m4 - package-specific macros for autoconf
 #  
+#  This file is
+#    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+#  
 #  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
 #
 #  This program is free software; you can redistribute it and/or modify
index 1b7d991831d59d5232ba3729f5b69b4e3e2dcb5d..c982726db48ab0da6424e9b377cd34534bc8a0b3 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,6 +1,255 @@
-adns (0.2) experimental; urgency=low
+adns (0.10) unstable; urgency=low
+
+  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, adnslogres, adnsresfilter have options for config override. 
+  * adnsresfilter has --debug option.
+  * Improvements to adnslogres (incl. new -c option) from Tony Finch.
+  * adnslogres has --help option.
+  * Documentation improved somewhat, including new GPL-vs-LGPL file.
+  * Do not install adnstest test utility.
+
+  Regression test improvements:
+  * Tests now include adnshost, adnslogres and adnsresfilter.
+  * Test cancellation both before and after query completion.
+
+  Portability fixes and cleanups:
+  * adnstest: setvbuf(stdout,...) before we do first output.
+  * Cope with compilers that don't do `inline'.
+  * Add and fix various missing system #includes.
+  * Find install-sh properly when we need to use it, and chmod it +x.
+  * Do not use variadic macro, use stdarg instead (adnslogres.c).
+  * Regression tests work even if some syscalls are already macros.
+  * #include "config.h" before "adns.h".
+  * Cast a sizeof(...) in src/event.c to unsigned long before printing.
+  * Add pre-generated versions of m4-generated files in regress/.
+  * Kill bogus warning, adh-main.c: `arg2' might be used uninitialized ...
+  * Add extra {...} near adnslogres.c:167 to kill spurious warning.
+  * Use `printf' instead of `echo -n'.
+  * Add list of tested platforms in INSTALL file.
+
+ --
+
+adns (0.9) unstable; urgency=high
+
+  Bug fixes:
+  * Don't make _processany always kill the TCP connection with the message
+    `TCP connection failed: poll/select: exceptional condition detected'.
+  * Call MEM_ROUND in __transfer_interim (avoids assert fail
+    `qu->interim_allocd>=0' on some platforms eg 64 bit).
+  * adnsresfilter doesn't resolve textual prefixes of addresses (eg,
+    10.0.0.1 out of 10.0.0.123) if input happens to block at that point.
+  * Do not spin if TCP connection blocks for writing (and add test case).
+  * Fail queries if TCP dies repeatedly, rather than retrying many times.
+  * Do not abort in a couple of places if TCP unexpectedly broken.
+  * Do not free something twice if query fails and is then cancelled.
+
+  Portability/compilation fixes:
+  * Move `extern "C" {' to after #include <...>'s.
+  * Pass LDFLAGS from configure on to ld via settings.make.in.
+  * make clean deletes *.so and *.so.* files.
+  * New --disable-dynamic configure option for non-ELF systems.
+  * Use AC_PROG_INSTALL (=> perhaps install-sh), to avoid bad `install'.
+
+  Minor improvements:
+  * Do not print warning if sendto() gives EAGAIN.
+  * adnsresfilter default timeout changed to 1000ms.
+  * m1test script can invoke `hrecord' differently.
+  * regress/output-<case>.report file contains more useful info.
+  * TODO list and other docs updated slightly.
+  * Referrals with RD+RA set, or RCODE=Refused, don't generate warnings,
+    just debug messages.  BIND does this kind of thing all the time.
+
+ -- Ian Jackson <ian@davenant.greenend.org.uk>  Wed,  9 Aug 2000 16:59:28 +0100
+
+adns (0.8) BETA; urgency=medium
+
+  Bugfixes:
+  * Race near adns_beforeselect which could cause infinite timeout fixed
+    (it's now less agressive, and will more often return a zero timeout.)
+  * Fixed infrequent race causing assertion failure in adns__tcp_broken
+    `ads->tcpstate == server_connecting || ads->tcpstate == server_ok'.
+  * Spurious `server failure on unidentifiable query' warning suppressed.
+  * If we get a referral, don't also always complain falsely about RD==0.
+  * adnslogres: cast chars to unsigned char before using ctype.h macros.
+  * In _beforeselect, global failure now means zero timeout, and in
+    tcp_events, really never try to do anything with the TCP connection if
+    act is zero.  This might possibly cause an infinite delay (ie, lockup)
+    if things go badly wrong *and* a really unlikely race happens.
+  * Test suite `lines of syscall left' value is correct; !0 is failure.
 
   Portability fixes:
+  * install-sh (from autoconf 2.12 Debian r13) included.
+  * adnslogres: do not call equivalent of printf("%.*s",0,(char*)0).
+
+  Documentation improvements:
+  * Security/performance note added, about local nameservers and DNSSEC.
+  * Documented that adns_rr_info _rr_hostaddr ( ) for address list
+    means permanent failure, and ? means temporary failure.
+  * Typo (*now for now in _beforeselect description) in adns.h fixed.
+  * Copyright notices updated.
+  
+  Changes to produce more defensive code:
+  * In adns_wait, assert that the timeout is not infinite.
+  * Make qu->id start out as -2 when initially allocated.
+
+ -- Ian Jackson <ian@davenant.greenend.org.uk>  Sun,  7 May 2000 23:37:13 +0100
+
+adns (0.7) BETA; urgency=medium
+
+  * New adns_submit_reverse_any for eg RBL lookups, and corresponding
+    option to adnshost.
+  * README updated (from www home page).
+
+  * In answers, quote all except alphanums and - _ / + (and document).
+  * Don't reject specials in cnames even without adns_qf_quotefail_cname.
+  * Better checking of long domain names and labels in queries.
+  * answer->owner may be null on error.  Documented, and adnshost copes.
+  * Better reporting of unexpected or weird replies from nameserver.
+  * Add test case for recursion (infinite loop) domain compression.
+
+ -- Ian Jackson <ian@davenant.greenend.org.uk>  Thu,  2 Mar 2000 01:55:53 +0000
+
+adns (0.6) BETA; urgency=high
+
+  Core library bugfixes:
+  * Avoid infinite timeouts, causing lockup, when they should be zero !
+  * TCP handling revamped (avoids undefined behaviour due to reentrancy).
+  * Do not fail assertion if _qf_owner, _qf_search, domain ends in `.'.
+  * Many memory leaks fixed.
+
+  Cool new utility:
+  * adnsresfilter is like `cat' but converts addresses to names without
+    delaying the output.  Pipe `netstat -n', `tcpdump -ln', etc. into it.
+
+  Test and client program bug and portability fixes:
+  * Dynamic library building works properly.
+  * adnshost prints somewhat better messages about some wrong usages.
+  * Include <stdlib.h> and <sys/types.h> in adnshost.h.
+  * adnslogres: parsing and error checking improved (Tony Finch).
+  * Regression tests can cope with zero-length reads.
+  * Regression tests check for memory leaks.
+  * adnstest copes with empty query type list.
+  * adnstest uninitialised memory bug fixed.
+
+  General improvements
+  * Better control of adnshost output and error messages (new -F options).
+  * New adns_if_logpid option (functionality suggested by Tony Finch).
+  * New fanftest test program from Tony Finch (ignored by `make install').
+  * Reads /etc/resolv-adns.conf if it exists.
+  * Declare flags parameters as enums again, not ints.
+
+ -- Ian Jackson <ian@davenant.greenend.org.uk>  Wed, 24 Nov 1999 17:13:03 +0000
+
+adns (0.5) unstable; urgency=high
+
+  New features:
+  * adnslogres, ~100x faster replacement for Apache logresolve;
+    Thanks to Tony Finch for the program and the performance figure.
+  * Internal consistency checking with assert if right options set.
+  * adns_wait_poll function like adns_wait but uses poll, not select.
+  * adns_reverse_submit function for easy in-addr queries.
+  * adns_errtypeabbrev funcion for getting eg "permfail" from _s_nodata.
+  * adnshost utility for scripts and the like (rather alpha).
+
+  Incompatible changes:
+  * RRs with mailboxes never rejected due to strange chars if _raw.
+  * Lack of a mailbox produces `.' not `<>'.
+  * Better usage messages (and no default query domain) for adnstest.
+  * Return EAGAIN from _check instead of EWOULDBLOCK.
+  * adns_rr_info on _r_mx etc. shows status type abbrev and status number.
+  
+  Bugfixes:
+  * Do not invoke __autosys indirectly from __procdgram (result: coredump
+    usually in memmove, unless adns_if_noautosys was used).
+  * Do not scramble innards when a query on the output queue is cancelled.
+  * Do not close tcp socket twice.
+  * Mailboxes containing spaces in their names are quoted.
+  * Give ESRCH, not EAGAIN, if _check called with no queries outstanding.
+  * adns_rr_hostaddr naddrs is -1 on temporary failure (as documented).
+  * Reject TXT RRs with no strings.
+  * Correct error messages for qname CNAME foo, foo CNAME bar.
+  * adns_processany actually does something.
+  * Fixed typos in adns.h.
+
+  General improvements:
+  * Promise not to change fds in adns_beforepoll (if now is specified).
+  * Improved textual error string for _s_prohibitedcname.
+  * New comment in adns_processany and return 0 (not r which is 0).
+  * Documentation of resolv.conf directives and options, and of environment
+    variables understood, in adns.h
+  * Regression test scripts set EF_DISABLE_BANNER (for Electric Fence).
+
+  Portability and build improvements:
+  * Give install the '-c' flag (otherwise some delete the original !).
+  * Do not remove top-level Makefile on `make clean'.
+  * Don't complain so much about poll(2) tests if not available.
+  * Do not give -u 0 -g 0 options to install.
+  * Remove trailing , from some enums in adns.h.
+  * Dynamically linked clients now made with -l, so as to avoid rpath.
+  * Do not use $^ in make rules (should help with non-GNU make).
+  * Declare flags parameters as ints not enums because C++ is crap.
+
+ -- Ian Jackson <ian@davenant.greenend.org.uk>  Wed, 13 Oct 1999 02:24:35 +0100
+
+adns (0.4) unstable; urgency=high
+
+  General important bugfixes:
+  * make _qf_owner work if _qf_search not specified, and test it (oops!)
+  * ads->configerrno now initialised (in setup.c).
+  * timercmp(,,<=) doesn't work - use !timercmp(,,>).
+  * Changed memory semantics of internal queries to fix bugs.
+  * Restarting a TCP-using query (eg due to CNAME) doesn't abort.
+  
+  Fixes for handling of broken kinds of reply:
+  * Only accept a reply from the subset of servers we sent the query.
+  * Ignore CNAME(s) in answer after RR(s) (and test).
+
+  Other bugfixes and improvements:
+  * adns_s_systemfail is in table of errors (for eg adns_strerror).
+  * Do not ship config.cache, Makefile, etc.
+  * Improvements to install instructions, TODO, etc.
+  * Regression tests compile on systems without poll(2).
+  * Do not install adnstest_s.
+  * _submit returns ENOSYS, not adns_s_unknownquery; documented, tested.
+  * <adns.h> includes <sys/types.h>, <sys/time.h>, <unistd.h>.
+
+ -- Ian Jackson <ian@davenant.greenend.org.uk>  Thu, 5 Aug 1999 01:17:38 +0100
+
+adns (0.3) unstable; urgency=low
+
+  Incompatible changes:
+  * Low adns_status values (below adns_s_max_tempfail) renumbered to make
+    room for future locally-induced and locally-detected errors.
+  * Event loop functions for use by select(2) renamed and tidied up.
+  
+  Features / improvements:
+  * New adns_errabbrev() for getting status abbreviation strings.
+  * regress/checkall prints summary list of failed tests, if any.
+  * Event loop functions for poll(2), and some raw variants.
+  * adnstest has ability to use poll(2), and user can set initflags.
+  * checkall prints passed list as well as failed list, if any failed.
+  * You can iterate over outstanding queries (but only once at a time).
+  
+  Bugfixes:
+  * Non-RFC822 mailbox `domain' formatting now works, and clarified.
+  * Rejection of bad characters in domains (without quoteok) works.
+  * Clean up parents from adns->childw (otherwise would abort/segfault).
+  * In adnstest, allocate enough space for, and terminate, query types.
+  * In adnstest, don't print errno values as adns_status values.
+  * Added TODO file.
+  * Made adnstest.c test context pointers.
+
+ -- Ian Jackson <ian@davenant.greenend.org.uk>  Thu, 15 Jul 1999 00:23:12 +0100
+
+adns (0.2) experimental; urgency=low
+
+  Portability fixes for compilation on various platforms:
   * Include <sys/socket.h> and <netinet/in.h> in files with <arpa/inet.h>.
   * Don't use GCC union assignment feature (.rrs=0 => .rrs.untyped=0).
   * Explictly cast things to [const] struct sockaddr* in syscall args.
@@ -8,11 +257,16 @@ adns (0.2) experimental; urgency=low
   * Include <sys/times.h> in a few more files.
   * Include <unistd.h> and <sys/time.h> for select.
   * Look for inet_aton and inet_ntoa (in -lnsl and -lsocket).
-  
+  * LDLIBS removed from dependency lists (some makes don't support this).
+  * An `ambiguous else' warning from some compilers in types.c is removed.
+
+  Other changes:
   * Added COPYING (copy of the GPL).
-  * New GPL-vs-LGPL copyright policy explanation file.
+  * Regression test failure output improved.
+  * Missing targets in regress/Makefile.in added.
+  * Regression test doesn't rely on value of fcntl flags eg O_NONBLOCK.
 
- --
+ -- Ian Jackson <ian@davenant.greenend.org.uk>  Thu, 20 May 1999 00:27:32 +0100
 
 adns (0.1) experimental; urgency=low
 
@@ -22,4 +276,5 @@ adns (0.1) experimental; urgency=low
 
 Local variables:
 mode: debian-changelog
+fill-column: 75
 End:
index e6b4fa8098f8dda3227dbebc599feaf82f7db8f0..45bcf1e01117a93ba1539b59b640d41fb50af047 100644 (file)
@@ -1,3 +1,11 @@
 Makefile
 adnstest
 adnstest_s
+adnslogres
+adnslogres_s
+adnshost
+adnshost_s
+adnsresfilter
+adnsresfilter_s
+fanftest
+fanftest_s
index 67acef447a69f843a8dd2cab573d41dd2d65259c..59a358228ea9a2ba31acd23be1ae296aa5320c65 100644 (file)
@@ -1,6 +1,11 @@
 # client/Makefile - client program(s) Makefile
 # 
-#  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+#  This file is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
 #  
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
 srcdir=                @srcdir@
 VPATH=         @srcdir@
 
-TARG_LOCAL=    adnstest_s
-TARG_INSTALL=  adnstest
+PROGS_SYSDEP=  @PROGS_HAVE_TSEARCH@
+ENABLE_DYNAMIC=        @ENABLE_DYNAMIC@
+
+PROGRAMS=      adnslogres adnshost $(PROGS_SYSDEP)
+PROGRAMS_LOCAL=        fanftest adnstest
+PROGRAMS_ALL=  $(PROGRAMS) $(PROGRAMS_LOCAL)
+
+STATIC_LIB=    $(ADNSDIR)/libadns.a
+
+ifeq ($(ENABLE_DYNAMIC),elf)
+DYNAMIC_DEP=   $(srcdir)/../dynamic/$(SHLIBFILE)
+DYNAMIC_LINK=  -L$(srcdir)/../dynamic -ladns
+DYNAMIC_SUFFIX=        _s
+else
+DYNAMIC_DEP=   $(STATIC_LIB)
+DYNAMIC_LINK=  $(STATIC_LIB)
+DYNAMIC_SUFFIX=
+endif
+
+TARG_INSTALL=  $(PROGRAMS)
+TARG_LOCAL=    $(addsuffix $(DYNAMIC_SUFFIX), $(PROGRAMS_ALL))
 TARGETS=       $(TARG_LOCAL) $(TARG_INSTALL)
 include                $(srcdir)/../settings.make
 
 DIRCFLAGS=     -I$(srcdir)/../src
 
+TARG_OBJS=     $(addsuffix .o, $(PROGRAMS_ALL))
+ADH_OBJS=      adh-main.o adh-opts.o adh-query.o
+ALL_OBJS=      $(ADH_OBJS) $(TARG_OBJS)
+
+ADNSDIR=       $(srcdir)/../src/
+
 all:           $(TARGETS)
 
 install:       $(TARG_INSTALL)
-               set -xe; for f in $(TARGETS); \
+               set -xe; for f in $(TARG_INSTALL); \
                        do $(INSTALL_PROGRAM) $$f $(bin_dir)/$$f; done
 
 uninstall:
                for f in $(TARGETS); do rm -f $(bin_dir)/$$f; done
 
-adnstest:      adnstest.o $(srcdir)/../dynamic/$(SHLIBFILE)
+adnshost:      $(ADH_OBJS) $(DYNAMIC_DEP)
+               $(CC) $(LDFLAGS) $(ADH_OBJS) $(DYNAMIC_LINK) -o $@ $(LDLIBS)
+
+adnshost_s:    $(ADH_OBJS) $(STATIC_LIB)
+               $(CC) $(LDFLAGS) $(ADH_OBJS) $(STATIC_LIB) -o $@ $(LDLIBS)
+
+$(ADH_OBJS):           adnshost.h
+$(ALL_OBJS):           $(ADNSDIR)/adns.h $(ADNSDIR)/config.h
+adnsresfilter.o:       $(ADNSDIR)/tvarith.h
+
+%:             %.o $(DYNAMIC_DEP)
+               $(CC) $(LDFLAGS) $< $(DYNAMIC_LINK) -o $@ $(LDLIBS)
 
-adnstest_s:    adnstest.o $(srcdir)/../src/libadns.a
-               $(CC) $(LDFLAGS) $^ -o $@ $(LDLIBS)
+%_s:           %.o $(STATIC_LIB)
+               $(CC) $(LDFLAGS) $< $(STATIC_LIB) -o $@ $(LDLIBS)
diff --git a/client/adh-main.c b/client/adh-main.c
new file mode 100644 (file)
index 0000000..193092a
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ * adh-main.c
+ * - useful general-purpose resolver client program
+ *   main program and useful subroutines
+ */
+/*
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ */
+
+#include "adnshost.h"
+
+int rcode;
+const char *config_text;
+
+static int used, avail;
+static char *buf;
+
+void quitnow(int rc) {
+  if (ads) adns_finish(ads);
+  free(buf);
+  free(ov_id);
+  exit(rc);
+}
+
+void sysfail(const char *what, int errnoval) {
+  fprintf(stderr,"adnshost failed: %s: %s\n",what,strerror(errnoval));
+  quitnow(10);
+}
+
+void usageerr(const char *fmt, ...) {
+  va_list al;
+  fputs("adnshost usage error: ",stderr);
+  va_start(al,fmt);
+  vfprintf(stderr,fmt,al);
+  va_end(al);
+  putc('\n',stderr);
+  quitnow(11);
+}
+
+void outerr(void) {
+  sysfail("write to stdout",errno);
+}
+
+void *xmalloc(size_t sz) {
+  void *p;
+
+  p= malloc(sz); if (!p) sysfail("malloc",sz);
+  return p;
+}
+
+char *xstrsave(const char *str) {
+  char *p;
+  
+  p= xmalloc(strlen(str)+1);
+  strcpy(p,str);
+  return p;
+}
+
+void of_config(const struct optioninfo *oi, const char *arg, const char *arg2) {
+  config_text= arg;
+}
+
+void of_type(const struct optioninfo *oi, const char *arg, const char *arg2) {
+  static const struct typename {
+    adns_rrtype type;
+    const char *desc;
+  } typenames[]= {
+    /* enhanced versions */
+    { adns_r_ns,     "ns"     },
+    { adns_r_soa,    "soa"    },
+    { adns_r_ptr,    "ptr"    },
+    { adns_r_mx,     "mx"     },
+    { adns_r_rp,     "rp"     },
+    { adns_r_addr,   "addr"   },
+    
+    /* types with only one version */
+    { adns_r_cname,  "cname"  },
+    { adns_r_hinfo,  "hinfo"  },
+    { adns_r_txt,    "txt"    },
+    
+    /* raw versions */
+    { adns_r_a,        "a"    },
+    { adns_r_ns_raw,   "ns-"  },
+    { adns_r_soa_raw,  "soa-" },
+    { adns_r_ptr_raw,  "ptr-" },
+    { adns_r_mx_raw,   "mx-"  },
+    { adns_r_rp_raw,   "rp-"  },
+
+    { adns_r_none, 0 }
+  };
+
+  const struct typename *tnp;
+
+  for (tnp=typenames;
+       tnp->type && strcmp(arg,tnp->desc);
+       tnp++);
+  if (!tnp->type) usageerr("unknown RR type %s",arg);
+  ov_type= tnp->type;
+}
+
+static void process_optarg(const char *arg,
+                          const char *const **argv_p,
+                          const char *value) {
+  const struct optioninfo *oip;
+  const char *arg2;
+  int invert;
+
+  if (arg[0] == '-' || arg[0] == '+') {
+    if (arg[0] == '-' && arg[1] == '-') {
+      if (!strncmp(arg,"--no-",5)) {
+       invert= 1;
+       oip= opt_findl(arg+5);
+      } else {
+       invert= 0;
+       oip= opt_findl(arg+2);
+      }
+      if (oip->type == ot_funcarg) {
+       arg= argv_p ? *++(*argv_p) : value;
+       if (!arg) usageerr("option --%s requires a value argument",oip->lopt);
+       arg2= 0;
+      } else if (oip->type == ot_funcarg2) {
+       assert(argv_p);
+       arg= *++(*argv_p);
+       arg2= arg ? *++(*argv_p) : 0;
+       if (!arg || !arg2)
+         usageerr("option --%s requires two more arguments", oip->lopt);
+      } else {
+       if (value) usageerr("option --%s does not take a value",oip->lopt);
+       arg= 0;
+       arg2= 0;
+      }
+      opt_do(oip,invert,arg,arg2);
+    } else if (arg[0] == '-' && arg[1] == 0) {
+      arg= argv_p ? *++(*argv_p) : value;
+      if (!arg) usageerr("option `-' must be followed by a domain");
+      query_do(arg);
+    } else { /* arg[1] != '-', != '\0' */
+      invert= (arg[0] == '+');
+      ++arg;
+      while (*arg) {
+       oip= opt_finds(&arg);
+       if (oip->type == ot_funcarg) {
+         if (!*arg) {
+           arg= argv_p ? *++(*argv_p) : value;
+           if (!arg) usageerr("option -%s requires a value argument",oip->sopt);
+         } else {
+           if (value) usageerr("two values for option -%s given !",oip->sopt);
+         }
+         opt_do(oip,invert,arg,0);
+         arg= "";
+       } else {
+         if (value) usageerr("option -%s does not take a value",oip->sopt);
+         opt_do(oip,invert,0,0);
+       }
+      }
+    }
+  } else { /* arg[0] != '-' */
+    query_do(arg);
+  }
+}
+    
+static void read_stdin(void) {
+  int anydone, r;
+  char *newline, *space;
+
+  anydone= 0;
+  while (!anydone || used) {
+    while (!(newline= memchr(buf,'\n',used))) {
+      if (used == avail) {
+       avail += 20; avail <<= 1;
+       buf= realloc(buf,avail);
+       if (!buf) sysfail("realloc stdin buffer",errno);
+      }
+      do {
+       r= read(0,buf+used,avail-used);
+      } while (r < 0 && errno == EINTR);
+      if (r == 0) {
+       if (used) {
+         /* fake up final newline */
+         buf[used++]= '\n';
+         r= 1;
+       } else {
+         ov_pipe= 0;
+         return;
+       }
+      }
+      if (r < 0) sysfail("read stdin",errno);
+      used += r;
+    }
+    *newline++= 0;
+    space= strchr(buf,' ');
+    if (space) *space++= 0;
+    process_optarg(buf,0,space);
+    used -= (newline-buf);
+    memmove(buf,newline,used);
+    anydone= 1;
+  }
+}
+
+int main(int argc, const char *const *argv) {
+  struct timeval *tv, tvbuf;
+  adns_query qu;
+  void *qun_v;
+  adns_answer *answer;
+  int r, maxfd;
+  fd_set readfds, writefds, exceptfds;
+  const char *arg;
+  
+  while ((arg= *++argv)) process_optarg(arg,&argv,0);
+
+  if (!ov_pipe && !ads) usageerr("no domains given, and -f/--pipe not used; try --help");
+
+  ensure_adns_init();
+
+  for (;;) {
+    for (;;) {
+      qu= ov_asynch ? 0 : outstanding.head ? outstanding.head->qu : 0;
+      r= adns_check(ads,&qu,&answer,&qun_v);
+      if (r == EAGAIN) break;
+      if (r == ESRCH) { if (!ov_pipe) goto x_quit; else break; }
+      assert(!r);
+      query_done(qun_v,answer);
+    }
+    maxfd= 0;
+    FD_ZERO(&readfds);
+    FD_ZERO(&writefds);
+    FD_ZERO(&exceptfds);
+    if (ov_pipe) {
+      maxfd= 1;
+      FD_SET(0,&readfds);
+    }
+    tv= 0;
+    adns_beforeselect(ads, &maxfd, &readfds,&writefds,&exceptfds, &tv,&tvbuf,0);
+    r= select(maxfd, &readfds,&writefds,&exceptfds, tv);
+    if (r == -1) {
+      if (errno == EINTR) continue;
+      sysfail("select",errno);
+    }
+    adns_afterselect(ads, maxfd, &readfds,&writefds,&exceptfds, 0);
+    if (ov_pipe && FD_ISSET(0,&readfds)) read_stdin();
+  }
+x_quit:
+  if (fclose(stdout)) outerr();
+  quitnow(rcode);
+}
diff --git a/client/adh-opts.c b/client/adh-opts.c
new file mode 100644 (file)
index 0000000..fa5cceb
--- /dev/null
@@ -0,0 +1,351 @@
+/*
+ * adh-opts.c
+ * - useful general-purpose resolver client program
+ *   option handling tables etc.
+ */
+/*
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ */
+
+#include "adnshost.h"
+
+int ov_env=1, ov_pipe=0, ov_asynch=0;
+int ov_verbose= 0;
+adns_rrtype ov_type= adns_r_none;
+int ov_search=0, ov_qc_query=0, ov_qc_anshost=0, ov_qc_cname=1;
+int ov_tcp=0, ov_cname=0, ov_format=fmt_default;
+char *ov_id= 0;
+struct perqueryflags_remember ov_pqfr = { 1,1,1, tm_none };
+
+static const struct optioninfo global_options[]= {
+  { ot_desconly, "global binary options:" },
+  { ot_flag,             "Do not look at environment variables at all",
+    "e", "env",            &ov_env, 0 },
+  { ot_flag,             "Read queries on stdin instead of using args",
+    "f", "pipe",           &ov_pipe, 1 },
+  { ot_flag,             "Allow answers to be reordered",
+    "a", "asynch",         &ov_asynch, 1 },
+  
+  { ot_desconly, "answer/error output format and destination (see below):" },
+  { ot_value,            "Answers to stdout, errors as messages to stderr (default)",
+    "Fs", "fmt-simple",    &ov_format, fmt_simple },
+  { ot_value,            "Answers and errors both to stdout in parseable format",
+    "Fi", "fmt-inline",    &ov_format, fmt_inline },
+  { ot_value,            "Fully-parseable output format (default for --asynch)",
+    "Fa", "fmt-asynch",    &ov_format, fmt_asynch },
+                        
+  { ot_desconly, "global verbosity level:" },
+  { ot_value,            "Do not print anything to stderr",
+    "Vq", "quiet",         &ov_verbose, adns_if_noerrprint },
+  { ot_value,            "Report unexpected kinds of problem only  (default)",
+    "Vn", "no-quiet",      &ov_verbose, 0 },
+  { ot_value,            "Debugging mode",
+    "Vd", "debug",         &ov_verbose, adns_if_debug },
+                        
+  { ot_desconly, "other global options:" },
+  { ot_funcarg,          "Configuration to use instead of /etc/resolv.conf",
+    0, "config",           0,0, of_config, "<config-text>" },
+  { ot_func,             "Print usage information",
+    0, "help",             0,0, of_help },
+
+  { ot_end }
+};
+
+static const struct optioninfo perquery_options[]= {
+  { ot_desconly, "per-query options:" },
+  { ot_funcarg,          "Query type (see below)",
+    "t", "type",           0,0, &of_type, "type" },
+  { ot_funcarg,          "Do reverse query (address -> name lookup)",
+    "i", "ptr",            0,0, &of_ptr, "addr" },
+  { ot_funcarg2,         "Lookup in in-addr-like `zone' (eg MAPS RBL)",
+    0, "reverse",          0,0, &of_reverse, "addr","zone" },
+
+  { ot_desconly, "per-query binary options:" },
+  { ot_flag,             "Use the search list",
+    "s", "search",         &ov_search, 1 },
+  { ot_flag,             "Let query domains contain quote-requiring chars",
+    "Qq", "qc-query",      &ov_qc_query, 1 },
+  { ot_flag,             "Let hostnames in answers contain ...",
+    "Qa", "qc-anshost",    &ov_qc_anshost, 1 },
+  { ot_flag,             "Prevent CNAME target domains from containing ...",
+    "Qc", "qc-cname",      &ov_qc_cname, 0 },
+  { ot_flag,             "Force use of a virtual circuit",
+    "u", "tcp",            &ov_tcp, 1 },
+  { ot_flag,             "Do not display owner name in output",
+    "Do", "show-owner",   &ov_pqfr.show_owner, 0 },
+  { ot_flag,             "Do not display RR type in output",
+    "Dt", "show-type",    &ov_pqfr.show_type, 0 },
+  { ot_flag,             "Do not display CNAME target in output",
+    "Dc", "show-cname",    &ov_pqfr.show_cname, 0 },
+  
+  { ot_desconly, "per-query TTL mode (NB TTL is minimum across all info in reply):" },
+  { ot_value,            "Show the TTL as a TTL",
+    "Tt", "ttl-ttl",       &ov_pqfr.ttl, tm_rel },
+  { ot_value,            "Show the TTL as a time_t when the data might expire",
+    "Ta", "ttl-abs",       &ov_pqfr.ttl, tm_abs },
+  { ot_value,            "Do not show the TTL (default)",
+    "Tn", "no-ttl",        &ov_pqfr.ttl, tm_none },
+  
+  { ot_desconly, "per-query CNAME handling mode:" },
+  { ot_value,            "Call it an error if a CNAME is found",
+    "Cf", "cname-reject",  &ov_cname, adns_qf_cname_forbid },
+  { ot_value,            "Allow references to CNAMEs in other RRs",
+    "Cl", "cname-loose",   &ov_cname, adns_qf_cname_loose },
+  { ot_value,            "CNAME ok for query domain, but not in RRs (default)",
+    "Cs", "cname-ok",      &ov_cname, 0 },
+  
+  { ot_desconly, "asynchronous/pipe mode options:" },
+  { ot_funcarg,          "Set <id>, default is decimal sequence starting 0",
+    0, "asynch-id",        0,0, &of_asynch_id, "id" },
+  { ot_funcarg,          "Cancel the query with id <id> (no error if not found)",
+    0, "cancel-id",        0,0, &of_cancel_id, "id" },
+
+  { ot_end }
+};
+
+static void printusage(void) {
+  static const struct optioninfo *const all_optiontables[]= {
+    global_options, perquery_options, 0
+  };
+
+  const struct optioninfo *const *oiap, *oip=0;
+  int maxsopt, maxlopt, l;
+
+  maxsopt= maxlopt= 0;
+  
+  for (oiap=all_optiontables; *oiap; oiap++) {
+    for (oip=*oiap; oip->type != ot_end; oip++) {
+      if (oip->type == ot_funcarg) continue;
+      if (oip->sopt) { l= strlen(oip->sopt); if (l>maxsopt) maxsopt= l; }
+      if (oip->lopt) {
+       l= strlen(oip->lopt);
+       if (oip->type == ot_flag && !oip->value) l+= 3;
+       if (l>maxlopt) maxlopt= l;
+      }
+    }
+  }
+       
+  fputs("usage: adnshost [global-opts] [query-opts] query-domain\n"
+       "                             [[query-opts] query-domain ...]\n"
+       "       adnshost [global-opts] [query-opts] -f|--pipe\n",
+       stdout);
+
+  for (oiap=all_optiontables; *oiap; oiap++) {
+    putchar('\n');
+    for (oip=*oiap; oip->type != ot_end; oip++) {
+      switch (oip->type) {
+      case ot_flag:
+       if (!oip->value) {
+         if (oip->sopt) {
+           printf(" +%-*s --no-%-*s %s\n",
+                  maxsopt, oip->sopt,
+                  maxlopt-2, oip->lopt,
+                  oip->desc);
+         } else {
+           printf(" --no-%-*s %s\n",
+                  maxlopt+maxsopt+1, oip->lopt,
+                  oip->desc);
+         }
+         break;
+       }
+      case ot_value: case ot_func: /* fall through */
+       if (oip->sopt) {
+         printf(" -%-*s --%-*s %s\n",
+                maxsopt, oip->sopt,
+                maxlopt+1, oip->lopt,
+                oip->desc);
+       } else {
+         printf(" --%-*s %s\n",
+                maxlopt+maxsopt+3, oip->lopt,
+                oip->desc);
+       }
+       break;
+      case ot_funcarg:
+       if (oip->sopt) {
+         l= (maxlopt + maxsopt - 9 -
+             (strlen(oip->sopt) + strlen(oip->lopt) + 2*strlen(oip->argdesc)));
+         printf(" -%s<%s> / --%s <%s>%*s%s\n",
+                oip->sopt, oip->argdesc, oip->lopt, oip->argdesc,
+                l>2 ? l : 2, "",
+                oip->desc);
+       } else {
+         l= (maxlopt + maxsopt + 1 -
+             (strlen(oip->lopt) + strlen(oip->argdesc)));
+         printf(" --%s <%s>%*s%s\n",
+                oip->lopt, oip->argdesc,
+                l>2 ? l : 2, "",
+                oip->desc);
+       }
+       break;
+      case ot_funcarg2:
+       assert(!oip->sopt);
+       l= (maxlopt + maxsopt - 2 -
+           (strlen(oip->lopt) + strlen(oip->argdesc) + strlen(oip->argdesc2)));
+         printf(" --%s <%s> <%s>%*s%s\n",
+                oip->lopt, oip->argdesc, oip->argdesc2,
+                l>2 ? l : 2, "",
+                oip->desc);
+       break;
+      case ot_desconly:
+       printf("%s\n", oip->desc);
+       break;
+      default:
+       abort();
+      }
+    }
+  }
+
+  printf("\nEscaping domains which might start with `-':\n"
+        " - %-*s Next argument is a domain, but more options may follow\n",
+        maxlopt+maxsopt+3, "<domain>");
+  
+  fputs("\n"
+       "Query domains should always be quoted according to master file format.\n"
+       "\n"
+       "For binary options, --FOO and --no-FOO are opposites, as are\n"
+       "-X and +X.  In each case the default is the one not listed.\n"
+       "Per query options stay set a particular way until they are reset,\n"
+       "whether they appear on the command line or on stdin.\n"
+       "All global options must preceed the first query domain.\n"
+       "\n"
+       "With -f, the input should be lines with either an option, possibly\n"
+       "with a value argument (separated from the option by a space if it's a long\n"
+       "option), or a domain (possibly preceded by a hyphen and a space to\n"
+       "distinguish it from an option).\n"
+       "\n"
+       "Output format is master file format without class or TTL by default:\n"
+       "   [<owner>] [<ttl>] [<type>] <data>\n"
+       "or if the <owner> domain refers to a CNAME and --show-cname is on\n"
+       "   [<owner>] [<ttl>] CNAME <cname>\n"
+       "   [<cname>] [<ttl>] <type> <data>\n"
+       "When a query fails you get an error message to stderr (with --fmt-simple).\n"
+       "Specify --fmt-inline for lines like this (broken here for readability):\n"
+       "   ; failed <statustype> <statusnum> <statusabbrev> \\\n"
+       "       [<owner>] [<ttl>] [<cname>] \"<status string>\"\n"
+       "If you use --fmt-asynch, which is the default for --asynch,\n"
+       "each answer (success or failure) is preceded by a line\n"
+       "   <id> <nrrs> <statustype> <statusnum> <statusabbrev> \\\n"
+       "       [<owner>] [<ttl>] [<cname>] \"<status string>\"\n"
+       "where <nrrs> is the number of RRs that follow and <cname> will be `$' or\n"
+       "the CNAME target; the CNAME indirection and error formats above are not used.\n"
+       "\n"
+       "Exit status:\n"
+       " 0    all went well\n"
+       " 1-6  at least one query failed with statustype:\n"
+       "   1    localfail   )\n"
+       "   2    remotefail  ) temporary errors\n"
+       "   3    tempfail  __)_________________\n"
+       "   4    misconfig   )\n"
+       "   5    misquery    ) permanent errors\n"
+       "   6    permfail    )\n"
+       " 10   system trouble\n"
+       " 11   usage problems\n"
+       "\n"
+       "Query types (see adns.h; default is addr):\n"
+       "  ns  soa  ptr  mx  rp  addr       - enhanced versions\n"
+       "  cname  hinfo  txt                - types with only one version\n"
+       "  a  ns-  soa-  ptr-  mx-  rp-     - _raw versions\n"
+       "Default is addr, or ptr for -i/--ptr queries\n",
+       stdout);
+  if (ferror(stdout)) sysfail("write usage message",errno);
+}
+
+void of_help(const struct optioninfo *oi, const char *arg, const char *arg2) {
+  printusage();
+  if (fclose(stdout)) sysfail("finish writing output",errno);
+  quitnow(0);
+}
+
+typedef int comparer_type(const char **optp, const struct optioninfo *entry);
+
+static int oc_long(const char **optp, const struct optioninfo *entry) {
+  return entry->lopt && !strcmp(*optp,entry->lopt);
+}
+
+static int oc_short(const char **optp, const struct optioninfo *entry) {
+  const char *sopt;
+  int l;
+
+  sopt= entry->sopt;
+  if (!sopt) return 0;
+  l= strlen(sopt);
+  if (memcmp(*optp,sopt,l)) return 0;
+  (*optp) += l;
+  return 1;
+}
+
+static const struct optioninfo *find1(const char **optp,
+                                     const struct optioninfo *table,
+                                     comparer_type *comparer) {
+  for (;;) {
+    if (table->type == ot_end) return 0;
+    if (comparer(optp,table)) return table;
+    table++;
+  }
+}
+
+static const struct optioninfo *find(const char **optp,
+                                    const char *prefix,
+                                    comparer_type *comparer) {
+  const struct optioninfo *oip;
+  const char *opt;
+
+  opt= *optp;
+  oip= find1(optp,perquery_options,comparer);
+  if (oip) return oip;
+  oip= find1(optp,global_options,comparer);
+  if (!oip) usageerr("unknown option %s%s",prefix,opt);
+  if (ads) usageerr("global option %s%s specified after query domain(s)",prefix,opt);
+  return oip;
+}
+
+const struct optioninfo *opt_findl(const char *opt) { return find(&opt,"--",oc_long); }
+const struct optioninfo *opt_finds(const char **optp) { return find(optp,"-",oc_short); }
+
+static void noninvert(const struct optioninfo *oip) NONRETURNING;
+static void noninvert(const struct optioninfo *oip) {
+  usageerr("option %s%s%s%s%s may not be inverted",
+          oip->sopt ? "-" : "", oip->sopt ? oip->sopt : "",
+          oip->lopt && oip->sopt ? " / " : "",
+          oip->lopt ? "--" : "", oip->lopt ? oip->lopt : "");
+}
+
+void opt_do(const struct optioninfo *oip, int invert,
+           const char *arg, const char *arg2) {
+  switch (oip->type) {
+  case ot_flag:
+    assert(!arg);
+    *oip->storep= !invert;
+    return;
+  case ot_value:
+    assert(!arg);
+    if (invert) noninvert(oip);
+    *oip->storep= oip->value;
+    return;
+  case ot_func: case ot_funcarg: case ot_funcarg2:
+    if (invert) noninvert(oip);
+    oip->func(oip,arg,arg2);
+    return;
+  default:
+    abort();
+  }
+}
diff --git a/client/adh-query.c b/client/adh-query.c
new file mode 100644 (file)
index 0000000..d17beab
--- /dev/null
@@ -0,0 +1,309 @@
+/*
+ * adh-query.c
+ * - useful general-purpose resolver client program
+ *   make queries and print answers
+ */
+/*
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ */
+
+#include "adnshost.h"
+
+adns_state ads;
+struct outstanding_list outstanding;
+
+static unsigned long idcounter;
+
+void ensure_adns_init(void) {
+  adns_initflags initflags;
+  int r;
+  
+  if (ads) return;
+
+  if (signal(SIGPIPE,SIG_IGN) == SIG_ERR) sysfail("ignore SIGPIPE",errno);
+
+  initflags= adns_if_noautosys|adns_if_nosigpipe|ov_verbose;
+  if (!ov_env) initflags |= adns_if_noenv;
+
+  if (config_text) {
+    r= adns_init_strcfg(&ads, initflags, stderr, config_text);
+  } else {
+    r= adns_init(&ads, initflags, 0);
+  }
+  if (r) sysfail("adns_init",r);
+
+  if (ov_format == fmt_default)
+    ov_format= ov_asynch ? fmt_asynch : fmt_simple;
+}
+
+static void prep_query(struct query_node **qun_r, int *quflags_r) {
+  struct query_node *qun;
+  char idbuf[20];
+  
+  if (ov_pipe && !ads) usageerr("-f/--pipe not consistent with domains on command line");
+  ensure_adns_init();
+  
+  qun= malloc(sizeof(*qun));
+  qun->pqfr= ov_pqfr;
+  if (ov_id) {
+    qun->id= xstrsave(ov_id);
+  } else {
+    sprintf(idbuf,"%lu",idcounter++);
+    idcounter &= 0x0fffffffflu;
+    qun->id= xstrsave(idbuf);
+  }
+
+  *quflags_r=
+    (ov_search ? adns_qf_search : 0) |
+    (ov_tcp ? adns_qf_usevc : 0) |
+    ((ov_pqfr.show_owner || ov_format == fmt_simple) ? adns_qf_owner : 0) |
+    (ov_qc_query ? adns_qf_quoteok_query : 0) |
+    (ov_qc_anshost ? adns_qf_quoteok_anshost : 0) |
+    (ov_qc_cname ? 0 : adns_qf_quoteok_cname) |
+    ov_cname,
+    
+  *qun_r= qun;
+}
+  
+void of_ptr(const struct optioninfo *oi, const char *arg, const char *arg2) {
+  struct query_node *qun;
+  int quflags, r;
+  struct sockaddr_in sa;
+
+  memset(&sa,0,sizeof(sa));
+  sa.sin_family= AF_INET;
+  if (!inet_aton(arg,&sa.sin_addr)) usageerr("invalid IP address %s",arg);
+
+  prep_query(&qun,&quflags);
+  qun->owner= xstrsave(arg);
+  r= adns_submit_reverse(ads,
+                        (struct sockaddr*)&sa,
+                        ov_type == adns_r_none ? adns_r_ptr : ov_type,
+                        quflags,
+                        qun,
+                        &qun->qu);
+  if (r) sysfail("adns_submit_reverse",r);
+
+  LIST_LINK_TAIL(outstanding,qun);
+}
+
+void of_reverse(const struct optioninfo *oi, const char *arg, const char *arg2) {
+  struct query_node *qun;
+  int quflags, r;
+  struct sockaddr_in sa;
+
+  memset(&sa,0,sizeof(sa));
+  sa.sin_family= AF_INET;
+  if (!inet_aton(arg,&sa.sin_addr)) usageerr("invalid IP address %s",arg);
+
+  prep_query(&qun,&quflags);
+  qun->owner= xmalloc(strlen(arg) + strlen(arg2) + 2);
+  sprintf(qun->owner, "%s %s", arg,arg2);
+  r= adns_submit_reverse_any(ads,
+                            (struct sockaddr*)&sa, arg2,
+                            ov_type == adns_r_none ? adns_r_txt : ov_type,
+                            quflags,
+                            qun,
+                            &qun->qu);
+  if (r) sysfail("adns_submit_reverse",r);
+
+  LIST_LINK_TAIL(outstanding,qun);
+}
+
+void query_do(const char *domain) {
+  struct query_node *qun;
+  int quflags, r;
+
+  prep_query(&qun,&quflags);
+  qun->owner= xstrsave(domain);
+  r= adns_submit(ads, domain,
+                ov_type == adns_r_none ? adns_r_addr : ov_type,
+                quflags,
+                qun,
+                &qun->qu);
+  if (r) sysfail("adns_submit",r);
+
+  LIST_LINK_TAIL(outstanding,qun);
+}
+
+static void dequeue_query(struct query_node *qun) {
+  LIST_UNLINK(outstanding,qun);
+  free(qun->id);
+  free(qun->owner);
+  free(qun);
+}
+
+static void print_withspace(const char *str) {
+  if (printf("%s ", str) == EOF) outerr();
+}
+
+static void print_ttl(struct query_node *qun, adns_answer *answer) {
+  unsigned long ttl;
+  time_t now;
+  
+  switch (qun->pqfr.ttl) {
+  case tm_none:
+    return;
+  case tm_rel:
+    if (time(&now) == (time_t)-1) sysfail("get current time",errno);
+    ttl= answer->expires < now ? 0 : answer->expires - now;
+    break;
+  case tm_abs:
+    ttl= answer->expires;
+    break;
+  default:
+    abort();
+  }
+  if (printf("%lu ",ttl) == EOF) outerr();
+}
+
+static const char *owner_show(struct query_node *qun, adns_answer *answer) {
+  return answer->owner ? answer->owner : qun->owner;
+}
+
+static void print_owner_ttl(struct query_node *qun, adns_answer *answer) {
+  if (qun->pqfr.show_owner) print_withspace(owner_show(qun,answer));
+  print_ttl(qun,answer);
+}
+
+static void check_status(adns_status st) {
+  static const adns_status statuspoints[]= {
+    adns_s_ok,
+    adns_s_max_localfail, adns_s_max_remotefail, adns_s_max_tempfail,
+    adns_s_max_misconfig, adns_s_max_misquery
+  };
+
+  const adns_status *spp;
+  int minrcode;
+
+  for (minrcode=0, spp=statuspoints;
+       spp < statuspoints + (sizeof(statuspoints)/sizeof(statuspoints[0]));
+       spp++)
+    if (st > *spp) minrcode++;
+  if (rcode < minrcode) rcode= minrcode;
+}
+
+static void print_status(adns_status st, struct query_node *qun, adns_answer *answer) {
+  const char *statustypeabbrev, *statusabbrev, *statusstring;
+
+  statustypeabbrev= adns_errtypeabbrev(st);
+  statusabbrev= adns_errabbrev(st);
+  statusstring= adns_strerror(st);
+  assert(!strchr(statusstring,'"'));
+
+  if (printf("%s %d %s ", statustypeabbrev, st, statusabbrev)
+      == EOF) outerr();
+  print_owner_ttl(qun,answer);
+  if (qun->pqfr.show_cname)
+    print_withspace(answer->cname ? answer->cname : "$");
+  if (printf("\"%s\"\n", statusstring) == EOF) outerr();
+}
+
+static void print_dnsfail(adns_status st, struct query_node *qun, adns_answer *answer) {
+  int r;
+  const char *typename, *statusstring;
+  adns_status ist;
+  
+  if (ov_format == fmt_inline) {
+    if (fputs("; failed ",stdout) == EOF) outerr();
+    print_status(st,qun,answer);
+    return;
+  }
+  assert(ov_format == fmt_simple);
+  if (st == adns_s_nxdomain) {
+    r= fprintf(stderr,"%s does not exist\n", owner_show(qun,answer));
+  } else {
+    ist= adns_rr_info(answer->type, &typename, 0,0,0,0);
+    if (st == adns_s_nodata) {
+      r= fprintf(stderr,"%s has no %s record\n", owner_show(qun,answer), typename);
+    } else {
+      statusstring= adns_strerror(st);
+      r= fprintf(stderr,"Error during DNS %s lookup for %s: %s\n",
+                typename, owner_show(qun,answer), statusstring);
+    }
+  }
+  if (r == EOF) sysfail("write error message to stderr",errno);
+}
+    
+void query_done(struct query_node *qun, adns_answer *answer) {
+  adns_status st, ist;
+  int rrn, nrrs;
+  const char *rrp, *realowner, *typename;
+  char *datastr;
+
+  st= answer->status;
+  nrrs= answer->nrrs;
+  if (ov_format == fmt_asynch) {
+    check_status(st);
+    if (printf("%s %d ", qun->id, nrrs) == EOF) outerr();
+    print_status(st,qun,answer);
+  } else {
+    if (qun->pqfr.show_cname && answer->cname) {
+      print_owner_ttl(qun,answer);
+      if (qun->pqfr.show_type) print_withspace("CNAME");
+      if (printf("%s\n", answer->cname) == EOF) outerr();
+    }
+    if (st) {
+      check_status(st);
+      print_dnsfail(st,qun,answer);
+    }
+  }
+  if (qun->pqfr.show_owner) {
+    realowner= answer->cname ? answer->cname : owner_show(qun,answer);
+    assert(realowner);
+  } else {
+    realowner= 0;
+  }
+  if (nrrs) {
+    for (rrn=0, rrp = answer->rrs.untyped;
+        rrn < nrrs;
+        rrn++, rrp += answer->rrsz) {
+      if (realowner) print_withspace(realowner);
+      print_ttl(qun,answer);
+      ist= adns_rr_info(answer->type, &typename, 0, 0, rrp, &datastr);
+      if (ist == adns_s_nomemory) sysfail("adns_rr_info failed",ENOMEM);
+      assert(!ist);
+      if (qun->pqfr.show_type) print_withspace(typename);
+      if (printf("%s\n",datastr) == EOF) outerr();
+      free(datastr);
+    }
+  }
+  if (fflush(stdout)) outerr();
+  free(answer);
+  dequeue_query(qun);
+}
+
+void of_asynch_id(const struct optioninfo *oi, const char *arg, const char *arg2) {
+  free(ov_id);
+  ov_id= xstrsave(arg);
+}
+
+void of_cancel_id(const struct optioninfo *oi, const char *arg, const char *arg2) {
+  struct query_node *qun;
+
+  for (qun= outstanding.head;
+       qun && strcmp(qun->id,arg);
+       qun= qun->next);
+  if (!qun) return;
+  adns_cancel(qun->qu);
+  dequeue_query(qun);
+}
diff --git a/client/adnshost.h b/client/adnshost.h
new file mode 100644 (file)
index 0000000..d88c2a1
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * adnshost.h
+ * - useful general-purpose resolver client program, header file
+ */
+/*
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ */
+
+#ifndef ADNSHOST_H_INCLUDED
+#define ADNSHOST_H_INCLUDED
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <time.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include "config.h"
+#include "adns.h"
+#include "dlist.h"
+
+#ifdef ADNS_REGRESS_TEST
+# include "hredirect.h"
+#endif
+
+/* declarations related to option processing */
+
+struct optioninfo;
+typedef void optfunc(const struct optioninfo *oi, const char *arg, const char *arg2);
+
+struct optioninfo {
+  enum oi_type {
+    ot_end, ot_desconly,
+    ot_flag, ot_value, ot_func, ot_funcarg, ot_funcarg2
+  } type;
+  const char *desc;
+  const char *sopt, *lopt;
+  int *storep, value;
+  optfunc *func;
+  const char *argdesc, *argdesc2;
+};
+
+enum ttlmode { tm_none, tm_rel, tm_abs };
+enum outputformat { fmt_default, fmt_simple, fmt_inline, fmt_asynch };
+
+struct perqueryflags_remember {
+  int show_owner, show_type, show_cname;
+  int ttl;
+};
+
+extern int ov_env, ov_pipe, ov_asynch;
+extern int ov_verbose;
+extern adns_rrtype ov_type;
+extern int ov_search, ov_qc_query, ov_qc_anshost, ov_qc_cname;
+extern int ov_tcp, ov_cname, ov_format;
+extern char *ov_id;
+extern struct perqueryflags_remember ov_pqfr;
+
+extern optfunc of_config, of_help, of_type, of_ptr, of_reverse;
+extern optfunc of_asynch_id, of_cancel_id;
+
+const struct optioninfo *opt_findl(const char *opt);
+const struct optioninfo *opt_finds(const char **optp);
+void opt_do(const struct optioninfo *oip, int invert, const char *arg, const char *arg2);
+
+/* declarations related to query processing */
+
+struct query_node {
+  struct query_node *next, *back;
+  struct perqueryflags_remember pqfr;
+  char *id, *owner;
+  adns_query qu;
+};
+
+extern adns_state ads;
+extern struct outstanding_list { struct query_node *head, *tail; } outstanding;
+
+void ensure_adns_init(void);
+void query_do(const char *domain);
+void query_done(struct query_node *qun, adns_answer *answer);
+
+/* declarations related to main program and useful utility functions */
+
+void sysfail(const char *what, int errnoval) NONRETURNING;
+void usageerr(const char *what, ...) NONRETURNPRINTFFORMAT(1,2);
+void outerr(void) NONRETURNING;
+
+void *xmalloc(size_t sz);
+char *xstrsave(const char *str);
+
+void quitnow(int rc) NONRETURNING;
+
+extern int rcode;
+extern const char *config_text; /* 0 => use defaults */
+
+#endif
diff --git a/client/adnslogres.c b/client/adnslogres.c
new file mode 100644 (file)
index 0000000..a91127b
--- /dev/null
@@ -0,0 +1,288 @@
+/*
+ * adnslogres.c
+ * - a replacement for the Apache logresolve program using adns
+ */
+/*
+ *  This file is
+ *   Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *   Copyright (C) 1999-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *  This version was originally supplied by Tony Finch, but has been
+ *  modified by Ian Jackson as it was incorporated into adns and
+ *  subsequently.
+ */
+
+static const char * const cvsid =
+       "$Id$";
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stdarg.h>
+
+#include "config.h"
+#include "adns.h"
+
+#ifdef ADNS_REGRESS_TEST
+# include "hredirect.h"
+#endif
+
+/* maximum number of concurrent DNS queries */
+#define MAXMAXPENDING 64000
+#define DEFMAXPENDING 2000
+
+/* maximum length of a line */
+#define MAXLINE 1024
+
+/* option flags */
+#define OPT_DEBUG 1
+#define OPT_POLL 2
+
+static const char *const progname= "adnslogres";
+static const char *config_text;
+
+#define guard_null(str) ((str) ? (str) : "")
+
+#define sensible_ctype(type,ch) (type((unsigned char)(ch)))
+  /* isfoo() functions from ctype.h can't safely be fed char - blech ! */
+
+static void msg(const char *fmt, ...) {
+  va_list al;
+
+  fprintf(stderr, "%s: ", progname);
+  va_start(al,fmt);
+  vfprintf(stderr, fmt, al);
+  va_end(al);
+  fputc('\n',stderr);
+}
+
+static void aargh(const char *cause) {
+  const char *why = strerror(errno);
+  if (!why) why = "Unknown error";
+  msg("%s: %s (%d)", cause, why, errno);
+  exit(1);
+}
+
+/*
+ * Parse the IP address and convert to a reverse domain name.
+ */
+static char *ipaddr2domain(char *start, char **addr, char **rest) {
+  static char buf[30]; /* "123.123.123.123.in-addr.arpa.\0" */
+  char *ptrs[5];
+  int i;
+
+  ptrs[0]= start;
+retry:
+  while (!sensible_ctype(isdigit,*ptrs[0]))
+    if (!*ptrs[0]++) {
+      strcpy(buf, "invalid.");
+      *addr= *rest= NULL;
+      return buf;
+    }
+  for (i= 1; i < 5; i++) {
+    ptrs[i]= ptrs[i-1];
+    while (sensible_ctype(isdigit,*ptrs[i]++));
+    if ((i == 4 && !sensible_ctype(isspace,ptrs[i][-1])) ||
+       (i != 4 && ptrs[i][-1] != '.') ||
+       (ptrs[i]-ptrs[i-1] > 4)) {
+      ptrs[0]= ptrs[i]-1;
+      goto retry;
+    }
+  }
+  sprintf(buf, "%.*s.%.*s.%.*s.%.*s.in-addr.arpa.",
+         ptrs[4]-ptrs[3]-1, ptrs[3],
+         ptrs[3]-ptrs[2]-1, ptrs[2],
+         ptrs[2]-ptrs[1]-1, ptrs[1],
+         ptrs[1]-ptrs[0]-1, ptrs[0]);
+  *addr= ptrs[0];
+  *rest= ptrs[4]-1;
+  return buf;
+}
+
+static void printline(FILE *outf, char *start, char *addr, char *rest, char *domain) {
+  if (domain)
+    fprintf(outf, "%.*s%s%s", addr - start, start, domain, rest);
+  else
+    fputs(start, outf);
+  if (ferror(outf)) aargh("write output");
+}
+
+typedef struct logline {
+  struct logline *next;
+  char *start, *addr, *rest;
+  adns_query query;
+} logline;
+
+static logline *readline(FILE *inf, adns_state adns, int opts) {
+  static char buf[MAXLINE];
+  char *str;
+  logline *line;
+
+  if (fgets(buf, MAXLINE, inf)) {
+    str= malloc(sizeof(*line) + strlen(buf) + 1);
+    if (!str) aargh("malloc");
+    line= (logline*)str;
+    line->next= NULL;
+    line->start= str+sizeof(logline);
+    strcpy(line->start, buf);
+    str= ipaddr2domain(line->start, &line->addr, &line->rest);
+    if (opts & OPT_DEBUG)
+      msg("submitting %.*s -> %s", line->rest-line->addr, guard_null(line->addr), str);
+    if (adns_submit(adns, str, adns_r_ptr,
+                   adns_qf_quoteok_cname|adns_qf_cname_loose,
+                   NULL, &line->query))
+      aargh("adns_submit");
+    return line;
+  }
+  if (!feof(inf))
+    aargh("fgets");
+  return NULL;
+}
+       
+static void proclog(FILE *inf, FILE *outf, int maxpending, int opts) {
+  int eof, err, len;
+  adns_state adns;
+  adns_answer *answer;
+  logline *head, *tail, *line;
+  adns_initflags initflags;
+
+  initflags= (opts & OPT_DEBUG) ? adns_if_debug : 0;
+  if (config_text) {
+    errno= adns_init_strcfg(&adns, initflags, stderr, config_text);
+  } else {
+    errno= adns_init(&adns, initflags, 0);
+  }
+  if (errno) aargh("adns_init");
+  head= tail= readline(inf, adns, opts);
+  len= 1; eof= 0;
+  while (head) {
+    while (head) {
+      if (opts & OPT_DEBUG)
+       msg("%d in queue; checking %.*s", len,
+           head->rest-head->addr, guard_null(head->addr));
+      if (eof || len >= maxpending) {
+       if (opts & OPT_POLL)
+         err= adns_wait_poll(adns, &head->query, &answer, NULL);
+       else
+         err= adns_wait(adns, &head->query, &answer, NULL);
+      } else {
+       err= adns_check(adns, &head->query, &answer, NULL);
+      }
+      if (err == EAGAIN) break;
+      if (err) {
+       fprintf(stderr, "%s: adns_wait/check: %s", progname, strerror(err));
+       exit(1);
+      }
+      printline(outf, head->start, head->addr, head->rest,
+               answer->status == adns_s_ok ? *answer->rrs.str : NULL);
+      line= head; head= head->next;
+      free(line);
+      free(answer);
+      len--;
+    }
+    if (!eof) {
+      line= readline(inf, adns, opts);
+      if (line) {
+        if (!head) head= line;
+        else tail->next= line;
+        tail= line; len++;
+      } else {
+       eof= 1;
+      }
+    }
+  }
+  adns_finish(adns);
+}
+
+static void printhelp(FILE *file) {
+  fprintf(file, "usage: %s [-d] [-p] [-c concurrency] [-C config] [logfile]\n",
+         progname);
+}
+
+static void usage(void) {
+  printhelp(stderr);
+  exit(1);
+}
+
+int main(int argc, char *argv[]) {
+  int c, opts, maxpending;
+  extern char *optarg;
+  FILE *inf;
+
+  if (argv[1] && !strcmp(argv[1],"--help")) {
+    printhelp(stdout);
+    if (ferror(stdout) || fclose(stdout)) { perror("stdout"); exit(1); }
+    exit(0);
+  }
+
+  maxpending= DEFMAXPENDING;
+  opts= 0;
+  while ((c= getopt(argc, argv, "c:C:dp")) != -1)
+    switch (c) {
+    case 'c':
+      maxpending= atoi(optarg);
+      if (maxpending < 1 || maxpending > MAXMAXPENDING) {
+       fprintf(stderr, "%s: unfeasible concurrency %d\n", progname, maxpending);
+       exit(1);
+      }
+      break;
+    case 'C':
+      config_text= optarg;
+      break;
+    case 'd':
+      opts|= OPT_DEBUG;
+      break;
+    case 'p':
+      opts|= OPT_POLL;
+      break;
+    default:
+      usage();
+    }
+
+  argc-= optind;
+  argv+= optind;
+
+  inf= NULL;
+  if (argc == 0)
+    inf= stdin;
+  else if (argc == 1)
+    inf= fopen(*argv, "r");
+  else
+    usage();
+
+  if (!inf)
+    aargh("couldn't open input");
+
+  proclog(inf, stdout, maxpending, opts);
+
+  if (fclose(inf))
+    aargh("fclose input");
+  if (fclose(stdout))
+    aargh("fclose output");
+
+  return 0;
+}
diff --git a/client/adnsresfilter.c b/client/adnsresfilter.c
new file mode 100644 (file)
index 0000000..3a3cacf
--- /dev/null
@@ -0,0 +1,473 @@
+/*
+ * adnsresfilter.c
+ * - filter which does resolving, not part of the library
+ */
+/*
+ *  This file is
+ *    Copyright (C) 1999-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <search.h>
+#include <assert.h>
+#include <ctype.h>
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "config.h"
+#include "adns.h"
+#include "dlist.h"
+#include "tvarith.h"
+
+#ifdef ADNS_REGRESS_TEST
+# include "hredirect.h"
+#endif
+
+struct outqueuenode {
+  struct outqueuenode *next, *back;
+  void *buffer;
+  char *textp;
+  int textlen;
+  struct timeval printbefore;
+  struct treething *addr;
+};
+
+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;
+static int peroutqueuenode, outqueuelen;
+
+static struct sockaddr_in sa;
+static adns_state ads;
+
+static char addrtextbuf[14];
+static int cbyte, inbyte, inbuf;
+static unsigned char bytes[4];
+static struct timeval printbefore;
+
+struct treething {
+  unsigned char bytes[4];
+  adns_query qu;
+  adns_answer *ans;
+};
+
+static struct treething *newthing;
+static void *treeroot;
+
+static int nonblock(int fd, int isnonblock) {
+  int r;
+
+  r= fcntl(fd,F_GETFL); 
+  if (r==-1) return -1;
+  r= fcntl(fd,F_SETFL, isnonblock ? r|O_NONBLOCK : r&~O_NONBLOCK);
+  if (r==-1) return -1;
+  return 0;
+}
+
+static void quit(int exitstatus) NONRETURNING;
+static void quit(int exitstatus) {
+  nonblock(0,0);
+  nonblock(1,0);
+  exit(exitstatus);
+}
+
+static void sysfail(const char *what) NONRETURNING;
+static void sysfail(const char *what) {
+  fprintf(stderr,"adnsresfilter: system call failed: %s: %s\n",what,strerror(errno));
+  quit(2);
+}
+
+static void *xmalloc(size_t sz) {
+  void *r;
+  r= malloc(sz);  if (r) return r;
+  sysfail("malloc");
+}
+
+static void outputerr(void) NONRETURNING;
+static void outputerr(void) { sysfail("write to stdout"); }
+
+static void usage(void) {
+  if (printf("usage: adnsresfilter [<options ...>]\n"
+            "       adnsresfilter  -h|--help\n"
+            "options: -t<milliseconds>|--timeout <milliseconds>\n"
+            "         -w|--wait        (always wait for queries to time out or fail)\n"
+            "         -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 = 1000 (ms).\n")
+      == EOF) outputerr();
+  if (fflush(stdout)) sysfail("flush stdout");
+}
+
+static void usageerr(const char *why) NONRETURNING;
+static void usageerr(const char *why) {
+  fprintf(stderr,"adnsresfilter: bad usage: %s\n",why);
+  usage();
+  quit(1);
+}
+
+static void adnsfail(const char *what, int e) NONRETURNING;
+static void adnsfail(const char *what, int e) {
+  fprintf(stderr,"adnsresfilter: adns call failed: %s: %s\n",what,strerror(e));
+  quit(2);
+}
+
+static void settimeout(const char *arg) {
+  char *ep;
+  timeout= strtoul(arg,&ep,0);
+  if (*ep) usageerr("invalid timeout");
+}
+
+static void parseargs(const char *const *argv) {
+  const char *arg;
+  int c;
+
+  while ((arg= *++argv)) {
+    if (arg[0] != '-') usageerr("no non-option arguments are allowed");
+    if (arg[1] == '-') {
+      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 {
+       usageerr("unknown long option");
+      }
+    } else {
+      while ((c= *++arg)) {
+       switch (c) {
+       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);
+       default:
+         usageerr("unknown short option");
+       }
+      }
+    }
+  }
+}
+
+static void queueoutchar(int c) {
+  struct outqueuenode *entry;
+  
+  entry= outqueue.tail;
+  if (!entry || entry->addr || entry->textlen >= peroutqueuenode) {
+    peroutqueuenode= !peroutqueuenode || !entry || entry->addr ? 128 : 
+      peroutqueuenode >= 1024 ? 4096 : peroutqueuenode<<2;
+    entry= xmalloc(sizeof(*entry));
+    entry->buffer= xmalloc(peroutqueuenode);
+    entry->textp= entry->buffer;
+    entry->textlen= 0;
+    entry->addr= 0;
+    LIST_LINK_TAIL(outqueue,entry);
+    outqueuelen++;
+  }
+  entry->textp[entry->textlen++]= c;
+}
+
+static void queueoutstr(const char *str, int len) {
+  while (len-- > 0) queueoutchar(*str++);
+}
+
+static void writestdout(struct outqueuenode *entry) {
+  int r;
+
+  while (entry->textlen) {
+    r= write(1, entry->textp, entry->textlen);
+    if (r < 0) {
+      if (errno == EINTR) continue;
+      if (errno == EAGAIN) { outblocked= 1; break; }
+      sysfail("write stdout");
+    }
+    assert(r <= entry->textlen);
+    entry->textp += r;
+    entry->textlen -= r;
+  }
+  if (!entry->textlen) {
+    LIST_UNLINK(outqueue,entry);
+    free(entry->buffer);
+    free(entry);
+    outqueuelen--;
+  }
+}
+
+static void replacetextwithname(struct outqueuenode *entry) {
+  char *name, *newbuf;
+  int namelen, newlen;
+
+  name= entry->addr->ans->rrs.str[0];
+  namelen= strlen(name);
+  if (!address) {
+    free(entry->buffer);
+    entry->buffer= 0;
+    entry->textp= name;
+    entry->textlen= namelen;
+  } else {
+    newlen= entry->textlen + namelen + (bracket ? 0 : 2);
+    newbuf= xmalloc(newlen + 1);
+    sprintf(newbuf, bracket ? "%s%.*s" : "%s[%.*s]", name, entry->textlen, entry->textp);
+    free(entry->buffer);
+    entry->buffer= entry->textp= newbuf;
+    entry->textlen= newlen;
+  }
+}
+
+static void checkadnsqueries(void) {
+  adns_query qu;
+  adns_answer *ans;
+  void *context;
+  struct treething *foundthing;
+  int r;
+
+  for (;;) {
+    qu= 0; context= 0; ans= 0;
+    r= adns_check(ads,&qu,&ans,&context);
+    if (r == ESRCH || r == EAGAIN) break;
+    assert(!r);
+    foundthing= context;
+    foundthing->ans= ans;
+    foundthing->qu= 0;
+  }
+}
+
+static void restartbuf(void) {
+  if (inbuf>0) queueoutstr(addrtextbuf,inbuf);
+  inbuf= 0;
+}
+
+static int comparer(const void *a, const void *b) {
+  return memcmp(a,b,4);
+}
+
+static void procaddr(void) {
+  struct treething *foundthing;
+  void **searchfound;
+  struct outqueuenode *entry;
+  int r;
+  
+  if (!newthing) {
+    newthing= xmalloc(sizeof(struct treething));
+    newthing->qu= 0;
+    newthing->ans= 0;
+  }
+
+  memcpy(newthing->bytes,bytes,4);
+  searchfound= tsearch(newthing,&treeroot,comparer);
+  if (!searchfound) sysfail("tsearch");
+  foundthing= *searchfound;
+
+  if (foundthing == newthing) {
+    newthing= 0;
+    memcpy(&sa.sin_addr,bytes,4);
+    r= adns_submit_reverse(ads, (const struct sockaddr*)&sa,
+                          rrt,0,foundthing,&foundthing->qu);
+    if (r) adnsfail("submit",r);
+  }
+  entry= xmalloc(sizeof(*entry));
+  entry->buffer= xmalloc(inbuf);
+  entry->textp= entry->buffer;
+  memcpy(entry->textp,addrtextbuf,inbuf);
+  entry->textlen= inbuf;
+  entry->addr= foundthing;
+  entry->printbefore= printbefore;
+  LIST_LINK_TAIL(outqueue,entry);
+  outqueuelen++;
+  inbuf= 0;
+  cbyte= -1;
+}
+
+static void startaddr(void) {
+  bytes[cbyte=0]= 0;
+  inbyte= 0;
+}
+
+static void readstdin(void) {
+  char readbuf[512], *p;
+  int r, c, nbyte;
+
+  while ((r= read(0,readbuf,sizeof(readbuf))) <= 0) {
+    if (r == 0) { inputeof= 1; return; }
+    if (r == EAGAIN) return;
+    if (r != EINTR) sysfail("read stdin");
+  }
+  for (p=readbuf; r>0; r--,p++) {
+    c= *p;
+    if (cbyte==-1 && bracket && c=='[') {
+      addrtextbuf[inbuf++]= c;
+      startaddr();
+    } else if (cbyte==-1 && !bracket && !isalnum(c)) {
+      queueoutchar(c);
+      startaddr();
+    } else if (cbyte>=0 && inbyte<3 && c>='0' && c<='9' &&
+              (nbyte= bytes[cbyte]*10 + (c-'0')) <= 255) {
+      bytes[cbyte]= nbyte;
+      addrtextbuf[inbuf++]= c;
+      inbyte++;
+    } else if (cbyte>=0 && cbyte<3 && inbyte>0 && c=='.') {
+      bytes[++cbyte]= 0;
+      addrtextbuf[inbuf++]= c;
+      inbyte= 0;
+    } else if (cbyte==3 && inbyte>0 && bracket && c==']') {
+      addrtextbuf[inbuf++]= c;
+      procaddr();
+    } else if (cbyte==3 && inbyte>0 && !bracket && !isalnum(c)) {
+      procaddr();
+      queueoutchar(c);
+      startaddr();
+    } else {
+      restartbuf();
+      queueoutchar(c);
+      cbyte= -1;
+      if (!bracket && !isalnum(c)) startaddr();
+    }
+  }
+}
+
+static void startup(void) {
+  int r;
+
+  if (nonblock(0,1)) sysfail("set stdin to nonblocking mode");
+  if (nonblock(1,1)) sysfail("set stdout to nonblocking mode");
+  memset(&sa,0,sizeof(sa));
+  sa.sin_family= AF_INET;
+  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;
+  if (!bracket) startaddr();
+}
+
+int main(int argc, const char *const *argv) {
+  int r, maxfd;
+  fd_set readfds, writefds, exceptfds;
+  struct outqueuenode *entry;
+  struct timeval *tv, tvbuf, now;
+
+  parseargs(argv);
+  startup();
+
+  while (!inputeof || outqueue.head) {
+    maxfd= 2;
+    tv= 0;
+    FD_ZERO(&readfds); FD_ZERO(&writefds); FD_ZERO(&exceptfds);
+    if ((entry= outqueue.head) && !outblocked) {
+      if (!entry->addr) {
+       writestdout(entry);
+       continue;
+      }
+      if (entry->addr->ans) {
+       if (entry->addr->ans->nrrs) 
+         replacetextwithname(entry);
+       entry->addr= 0;
+       continue;
+      }
+      r= gettimeofday(&now,0);  if (r) sysfail("gettimeofday");
+      if (forever) {
+       tv= 0;
+      } else if (!timercmp(&now,&entry->printbefore,<)) {
+       entry->addr= 0;
+       continue;
+      } else {
+       tvbuf.tv_sec= entry->printbefore.tv_sec - now.tv_sec - 1;
+       tvbuf.tv_usec= entry->printbefore.tv_usec - now.tv_usec + 1000000;
+       tvbuf.tv_sec += tvbuf.tv_usec / 1000000;
+       tvbuf.tv_usec %= 1000000;
+       tv= &tvbuf;
+      }
+      adns_beforeselect(ads,&maxfd,&readfds,&writefds,&exceptfds,
+                       &tv,&tvbuf,&now);
+    }
+    if (outblocked) FD_SET(1,&writefds);
+    if (!inputeof && outqueuelen<1024) FD_SET(0,&readfds);
+    
+    r= select(maxfd,&readfds,&writefds,&exceptfds,tv);
+    if (r < 0) { if (r == EINTR) continue; else sysfail("select"); }
+
+    r= gettimeofday(&now,0);  if (r) sysfail("gettimeofday");
+    adns_afterselect(ads,maxfd,&readfds,&writefds,&exceptfds,&now);
+    checkadnsqueries();
+
+    if (FD_ISSET(0,&readfds)) {
+      if (!forever) {
+       printbefore= now;
+       timevaladd(&printbefore,timeout);
+      }
+      readstdin();
+    } else if (FD_ISSET(1,&writefds)) {
+      outblocked= 0;
+    }
+  }
+  if (nonblock(0,0)) sysfail("un-nonblock stdin");
+  if (nonblock(1,0)) sysfail("un-nonblock stdout");
+  adns_finish(ads);
+  exit(0);
+}
index 4f2b982e881089e56de2bf7c20843b3cbf9c7c53..e99f5a1ac4967f42982787dca5b041f5f8b02501 100644 (file)
@@ -1,9 +1,14 @@
 /*
- * dtest.c
+ * adnstest.c
  * - simple test program, not part of the library
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
 #include <unistd.h>
 #include <assert.h>
 #include <stdlib.h>
+#include <string.h>
+#include <errno.h>
 
-#ifndef OUTPUTSTREAM
-# define OUTPUTSTREAM stdout
+#include "config.h"
+#include "adns.h"
+
+#ifdef ADNS_REGRESS_TEST
+# include "hredirect.h"
 #endif
 
-#include "adns.h"
+struct myctx {
+  adns_query qu;
+  int doneyet, found;
+  const char *fdom;
+};
+  
+static struct myctx *mcs;
+static adns_state ads;
+static adns_rrtype *types_a;
+
+static void quitnow(int rc) NONRETURNING;
+static void quitnow(int rc) {
+  free(mcs);
+  free(types_a);
+  if (ads) adns_finish(ads);
+  
+  exit(rc);
+}
+
+#ifndef HAVE_POLL
+#undef poll
+int poll(struct pollfd *ufds, int nfds, int timeout) {
+  fputs("poll(2) not supported on this system\n",stderr);
+  quitnow(5);
+}
+#define adns_beforepoll(a,b,c,d,e) 0
+#define adns_afterpoll(a,b,c,d) 0
+#endif
 
-static void failure(const char *what, adns_status st) {
+static void failure_status(const char *what, adns_status st) NONRETURNING;
+static void failure_status(const char *what, adns_status st) {
   fprintf(stderr,"adns failure: %s: %s\n",what,adns_strerror(st));
-  exit(2);
+  quitnow(2);
 }
 
-static const char *defaultargv[]= { "ns.chiark.greenend.org.uk", 0 };
+static void failure_errno(const char *what, int errnoval) NONRETURNING;
+static void failure_errno(const char *what, int errnoval) {
+  fprintf(stderr,"adns failure: %s: errno=%d\n",what,errnoval);
+  quitnow(2);
+}
+
+static void usageerr(const char *why) NONRETURNING;
+static void usageerr(const char *why) {
+  fprintf(stderr,
+         "bad usage: %s\n"
+         "usage: adnstest [-<initflagsnum>[,<owninitflags>]] [/<initstring>]\n"
+         "              [ :<typenum>,... ]\n"
+         "              [ [<queryflagsnum>[,<ownqueryflags>]/]<domain> ... ]\n"
+         "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"
+         "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"
+         "              3 unexpected failure\n"
+         "              4 usage error\n"
+         "              5 operation not supported on this system\n",
+         why);
+  quitnow(4);
+}
 
 static const adns_rrtype defaulttypes[]= {
   adns_r_a,
@@ -67,81 +129,126 @@ static void dumptype(adns_status ri, const char *rrtn, const char *fmtn) {
          ri ? " " : "", ri ? adns_strerror(ri) : "");
 }
 
-static void fdom_split(const char *fdom, const char **dom_r, int *qf_r) {
+static void fdom_split(const char *fdom, const char **dom_r, int *qf_r,
+                      char *ownflags, int ownflags_l) {
   int qf;
   char *ep;
 
   qf= strtoul(fdom,&ep,0);
+  if (*ep == ',' && strchr(ep,'/')) {
+    ep++;
+    while (*ep != '/') {
+      if (--ownflags_l <= 0) { fputs("too many flags\n",stderr); quitnow(3); }
+      *ownflags++= *ep++;
+    }
+  }
   if (*ep != '/') { *dom_r= fdom; *qf_r= 0; }
   else { *dom_r= ep+1; *qf_r= qf; }
+  *ownflags= 0;
+}
+
+static int consistsof(const char *string, const char *accept) {
+  return strspn(string,accept) == strlen(string);
 }
 
 int main(int argc, char *const *argv) {
-  adns_state ads;
-  adns_query *qus, qu;
+  adns_query qu;
+  struct myctx *mc, *mcw;
+  void *mcr;
   adns_answer *ans;
   const char *initstring, *rrtn, *fmtn;
   const char *const *fdomlist, *domain;
   char *show, *cp;
-  int len, i, qc, qi, tc, ti, ch, qflags;
-  adns_status r, ri;
+  int len, i, qc, qi, tc, ti, ch, qflags, initflagsnum;
+  adns_status ri;
+  int r;
   const adns_rrtype *types;
   struct timeval now;
-  adns_rrtype *types_a;
+  char ownflags[10];
+  char *ep;
+  const char *initflags, *owninitflags;
 
+  if (argv[0] && argv[1] && argv[1][0] == '-') {
+    initflags= argv[1]+1;
+    argv++;
+  } else {
+    initflags= "";
+  }
   if (argv[0] && argv[1] && argv[1][0] == '/') {
     initstring= argv[1]+1;
     argv++;
   } else {
     initstring= 0;
   }
+
+  initflagsnum= strtoul(initflags,&ep,0);
+  if (*ep == ',') {
+    owninitflags= ep+1;
+    if (!consistsof(owninitflags,"ps")) usageerr("unknown owninitflag");
+  } else if (!*ep) {
+    owninitflags= "";
+  } else {
+    usageerr("bad <initflagsnum>[,<owninitflags>]");
+  }
   
   if (argv[0] && argv[1] && argv[1][0] == ':') {
     for (cp= argv[1]+1, tc=1; (ch= *cp); cp++)
       if (ch==',') tc++;
-    types_a= malloc(sizeof(*types_a)*tc);
-    if (!types_a) { perror("malloc types"); exit(3); }
+    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 != ',') {
-         fputs("usage: dtest [/<initstring>] [:<typenum>,...] [<domain> ...]\n",stderr);
-         exit(4);
-       }
+       if (ch != ',') usageerr("unexpected char (not comma) in or between types");
        cp++;
       }
     }
+    types_a[ti]= adns_r_none;
     types= types_a;
     argv++;
   } else {
+    types_a= 0;
     types= defaulttypes;
   }
   
-  if (argv[0] && argv[1]) fdomlist= (const char *const*)argv+1;
-  else fdomlist= defaultargv;
+  if (!(argv[0] && argv[1])) usageerr("no query domains supplied");
+  fdomlist= (const char *const*)argv+1;
 
   for (qc=0; fdomlist[qc]; qc++);
   for (tc=0; types[tc] != adns_r_none; tc++);
-  qus= malloc(sizeof(qus)*qc*tc);
-  if (!qus) { perror("malloc qus"); exit(3); }
+  mcs= malloc(tc ? sizeof(*mcs)*qc*tc : 1);
+  if (!mcs) { perror("malloc mcs"); quitnow(3); }
 
+  setvbuf(stdout,0,_IOLBF,0);
+  
   if (initstring) {
-    r= adns_init_strcfg(&ads,adns_if_debug|adns_if_noautosys,stdout,initstring);
+    r= adns_init_strcfg(&ads,
+                       (adns_if_debug|adns_if_noautosys|adns_if_checkc_freq)
+                       ^initflagsnum,
+                       stdout,initstring);
   } else {
-    r= adns_init(&ads,adns_if_debug|adns_if_noautosys,0);
+    r= adns_init(&ads,
+                (adns_if_debug|adns_if_noautosys)^initflagsnum,
+                0);
   }
-  if (r) failure("init",r);
+  if (r) failure_errno("init",r);
 
   for (qi=0; qi<qc; qi++) {
-    fdom_split(fdomlist[qi],&domain,&qflags);
+    fdom_split(fdomlist[qi],&domain,&qflags,ownflags,sizeof(ownflags));
+    if (!consistsof(ownflags,"a")) usageerr("unknown ownqueryflag");
     for (ti=0; ti<tc; ti++) {
+      mc= &mcs[qi*tc+ti];
+      mc->doneyet= 0;
+      mc->fdom= fdomlist[qi];
+
       fprintf(stdout,"%s flags %d type %d",domain,qflags,types[ti]);
-      r= adns_submit(ads,domain,types[ti],qflags,0,&qus[qi*tc+ti]);
-      if (r == adns_s_unknownrrtype) {
+      r= adns_submit(ads,domain,types[ti],qflags,mc,&mc->qu);
+      if (r == ENOSYS) {
        fprintf(stdout," not implemented\n");
-       qus[qi*tc+ti]= 0;
+       mc->qu= 0;
+       mc->doneyet= 1;
       } else if (r) {
-       failure("submit",r);
+       failure_errno("submit",r);
       } else {
        ri= adns_rr_info(types[ti], &rrtn,&fmtn,0, 0,0);
        putc(' ',stdout);
@@ -151,42 +258,81 @@ int main(int argc, char *const *argv) {
     }
   }
 
-  for (qi=0; qi<qc; qi++) {
-    fdom_split(fdomlist[qi],&domain,&qflags);
-      
-    for (ti=0; ti<tc; ti++) {
-      qu= qus[qi*tc+ti];
-      if (!qu) continue;
-      
-      r= adns_wait(ads,&qu,&ans,0);
-      if (r) failure("wait",r);
+  for (;;) {
+    for (qi=0; qi<qc; qi++) {
+      for (ti=0; ti<tc; ti++) {
+       mc= &mcs[qi*tc+ti];
+       mc->found= 0;
+      }
+    }
+    for (adns_forallqueries_begin(ads);
+        (qu= adns_forallqueries_next(ads,&mcr));
+        ) {
+      mc= mcr;
+      assert(qu == mc->qu);
+      assert(!mc->doneyet);
+      mc->found= 1;
+    }
+    mcw= 0;
+    for (qi=0; qi<qc; qi++) {
+      for (ti=0; ti<tc; ti++) {
+       mc= &mcs[qi*tc+ti];
+       if (mc->doneyet) continue;
+       assert(mc->found);
+       if (!mcw) mcw= mc;
+      }
+    }
+    if (!mcw) break;
+
+    if (strchr(owninitflags,'s')) {
+      qu= mcw->qu;
+      mc= mcw;
+    } else {
+      qu= 0;
+      mc= 0;
+    }
+
+    if (strchr(owninitflags,'p')) {
+      r= adns_wait_poll(ads,&qu,&ans,&mcr);
+    } else {
+      r= adns_wait(ads,&qu,&ans,&mcr);
+    }
+    if (r) failure_errno("wait/check",r);
+    
+    if (mc) assert(mcr==mc);
+    else mc= mcr;
+    assert(qu==mc->qu);
+    assert(!mc->doneyet);
+    
+    fdom_split(mc->fdom,&domain,&qflags,ownflags,sizeof(ownflags));
 
-      if (gettimeofday(&now,0)) { perror("gettimeofday"); exit(3); }
+    if (gettimeofday(&now,0)) { perror("gettimeofday"); quitnow(3); }
       
-      ri= adns_rr_info(ans->type, &rrtn,&fmtn,&len, 0,0);
-      fprintf(stdout, "%s flags %d type ",domain,qflags);
-      dumptype(ri,rrtn,fmtn);
-      fprintf(stdout, ": %s; nrrs=%d; cname=%s; owner=%s; ttl=%ld\n",
-             adns_strerror(ans->status),
-             ans->nrrs,
-             ans->cname ? ans->cname : "$",
-             ans->owner ? ans->owner : "$",
-             (long)ans->expires - (long)now.tv_sec);
-      if (ans->nrrs) {
-       assert(!ri);
-       for (i=0; i<ans->nrrs; i++) {
-         r= adns_rr_info(ans->type, 0,0,0, ans->rrs.bytes+i*len,&show);
-         if (r) failure("info",r);
-         fprintf(stdout," %s\n",show);
-         free(show);
-       }
+    ri= adns_rr_info(ans->type, &rrtn,&fmtn,&len, 0,0);
+    fprintf(stdout, "%s flags %d type ",domain,qflags);
+    dumptype(ri,rrtn,fmtn);
+    fprintf(stdout, "%s%s: %s; nrrs=%d; cname=%s; owner=%s; ttl=%ld\n",
+           ownflags[0] ? " ownflags=" : "", ownflags,
+           strchr(ownflags,'a')
+           ? adns_errabbrev(ans->status)
+           : adns_strerror(ans->status),
+           ans->nrrs,
+           ans->cname ? ans->cname : "$",
+           ans->owner ? ans->owner : "$",
+           (long)ans->expires - (long)now.tv_sec);
+    if (ans->nrrs) {
+      assert(!ri);
+      for (i=0; i<ans->nrrs; i++) {
+       ri= adns_rr_info(ans->type, 0,0,0, ans->rrs.bytes + i*len, &show);
+       if (ri) failure_status("info",ri);
+       fprintf(stdout," %s\n",show);
+       free(show);
       }
-      free(ans);
     }
+    free(ans);
+
+    mc->doneyet= 1;
   }
 
-  free(qus);
-  adns_finish(ads);
-  
-  exit(0);
+  quitnow(0);
 }
diff --git a/client/fanftest.c b/client/fanftest.c
new file mode 100644 (file)
index 0000000..add4c23
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * fanftest.c
+ * - a small test program from Tony Finch
+ */
+/*
+ *  This file is
+ *   Copyright (C) 1999 Tony Finch <dot@dotat.at>
+ *   Copyright (C) 1999-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * This version was originally supplied by Tony Finch, but has been
+ * modified by Ian Jackson as it was incorporated into adns.
+ */
+
+static const char * const cvsid =
+       "$Id$";
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "config.h"
+#include "adns.h"
+
+static const char *progname;
+
+static void aargh(const char *msg) {
+  fprintf(stderr, "%s: %s: %s (%d)\n", progname, msg,
+         strerror(errno) ? strerror(errno) : "Unknown error", errno);
+  exit(1);
+}
+
+int main(int argc, char *argv[]) {
+  adns_state adns;
+  adns_query query;
+  adns_answer *answer;
+
+  progname= strrchr(*argv, '/');
+  if (progname)
+    progname++;
+  else
+    progname= *argv;
+
+  if (argc != 2) {
+    fprintf(stderr, "usage: %s <domain>\n", progname);
+    exit(1);
+  }
+
+  errno= adns_init(&adns, adns_if_debug, 0);
+  if (errno) aargh("adns_init");
+
+  errno= adns_submit(adns, argv[1], adns_r_ptr,
+                    adns_qf_quoteok_cname|adns_qf_cname_loose,
+                    NULL, &query);
+  if (errno) aargh("adns_submit");
+
+  errno= adns_wait(adns, &query, &answer, NULL);
+  if (errno) aargh("adns_init");
+
+  printf("%s\n", answer->status == adns_s_ok ? *answer->rrs.str : "dunno");
+
+  adns_finish(adns);
+
+  return 0;
+}
diff --git a/client/x.gdb b/client/x.gdb
new file mode 100644 (file)
index 0000000..2ee7597
--- /dev/null
@@ -0,0 +1,2 @@
+file adnsresfilter_s
+set args <testinput -t2000
index 4bf677b15ae5562183b00b4daa4a201b4861add6..da114e90f000f2656a542479bd446d3ef39fc123 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
 
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.12 
+# Generated automatically using autoconf version 2.13 
 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
@@ -11,6 +11,9 @@
 ac_help=
 ac_default_prefix=/usr/local
 # Any additions from configure.in:
+ac_help="$ac_help
+  --disable-dynamic       use static linking
+  --enable-dynamic[=elf]  create and use ELF dynamic library (default)"
 
 # Initialize some variables set by options.
 # The variables have the same names as the options, with
@@ -49,6 +52,7 @@ mandir='${prefix}/man'
 # Initialize some other variables.
 subdirs=
 MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
 # Maximum number of lines to put in a shell here document.
 ac_max_here_lines=12
 
@@ -332,7 +336,7 @@ EOF
     verbose=yes ;;
 
   -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.12"
+    echo "configure generated by autoconf version 2.13"
     exit 0 ;;
 
   -with-* | --with-*)
@@ -502,9 +506,11 @@ ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
 cross_compiling=$ac_cv_prog_cc_cross
 
+ac_exeext=
+ac_objext=o
 if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
   if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
@@ -519,18 +525,48 @@ fi
 
 
 
+
+
+
+echo $ac_n "checking whether you requested dynamic linking""... $ac_c" 1>&6
+echo "configure:533: checking whether you requested dynamic linking" >&5
+
+# Check whether --enable-dynamic or --disable-dynamic was given.
+if test "${enable_dynamic+set}" = set; then
+  enableval="$enable_dynamic"
+       case "$enableval" in
+       elf|yes)
+               ENABLE_DYNAMIC=elf
+               echo "$ac_t""yes (ELF)" 1>&6
+               ;;
+       no)     ENABLE_DYNAMIC=no
+               echo "$ac_t""no" 1>&6
+               ;;
+       *)      { echo "configure: error: "invalid value $enableval for --enable-dynamic, try yes or elf"" 1>&2; exit 1; }
+               ;;
+       esac
+
+else
+  
+               ENABLE_DYNAMIC=elf
+               echo "$ac_t""yes, by default" 1>&6
+
+fi
+
+
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:526: checking for $ac_word" >&5
+echo "configure:561: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
       ac_cv_prog_CC="gcc"
@@ -551,16 +587,17 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:555: checking for $ac_word" >&5
+echo "configure:591: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
   ac_prog_rejected=no
-  for ac_dir in $PATH; do
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
       if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
@@ -595,25 +632,61 @@ else
   echo "$ac_t""no" 1>&6
 fi
 
+  if test -z "$CC"; then
+    case "`uname -s`" in
+    *win32* | *WIN32*)
+      # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:642: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="cl"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+ ;;
+    esac
+  fi
   test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:603: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:674: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
 cross_compiling=$ac_cv_prog_cc_cross
 
-cat > conftest.$ac_ext <<EOF
-#line 613 "configure"
+cat > conftest.$ac_ext << EOF
+
+#line 685 "configure"
 #include "confdefs.h"
+
 main(){return(0);}
 EOF
-if { (eval echo configure:617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -627,18 +700,24 @@ else
   ac_cv_prog_cc_works=no
 fi
 rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
 
 echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
 if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:637: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:716: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:642: checking whether we are using GNU C" >&5
+echo "configure:721: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -647,7 +726,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:730: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -658,11 +737,15 @@ echo "$ac_t""$ac_cv_prog_gcc" 1>&6
 
 if test $ac_cv_prog_gcc = yes; then
   GCC=yes
-  ac_test_CFLAGS="${CFLAGS+set}"
-  ac_save_CFLAGS="$CFLAGS"
-  CFLAGS=
-  echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:666: checking whether ${CC-cc} accepts -g" >&5
+else
+  GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:749: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -677,30 +760,115 @@ rm -f conftest*
 fi
 
 echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
-  if test "$ac_test_CFLAGS" = set; then
-    CFLAGS="$ac_save_CFLAGS"
-  elif test $ac_cv_prog_cc_g = yes; then
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
     CFLAGS="-g -O2"
   else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
     CFLAGS="-O2"
+  else
+    CFLAGS=
   fi
+fi
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:781: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
 else
-  GCC=
-  test "${CFLAGS+set}" = set || CFLAGS="-g"
+    # This must be in double quotes, not single quotes, because CPP may get
+  # substituted into the Makefile and "${CC-cc}" will confuse make.
+  CPP="${CC-cc} -E"
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp.
+  cat > conftest.$ac_ext <<EOF
+#line 796 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:802: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 813 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:819: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -nologo -E"
+  cat > conftest.$ac_ext <<EOF
+#line 830 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
 fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
 
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:696: checking for $ac_word" >&5
+echo "configure:863: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
 else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
       ac_cv_prog_RANLIB="ranlib"
@@ -718,15 +886,153 @@ else
   echo "$ac_t""no" 1>&6
 fi
 
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:921: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+for ac_func in poll
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:977: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 982 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
 
 
  echo $ac_n "checking for socket""... $ac_c" 1>&6
-echo "configure:725: checking for socket" >&5
+echo "configure:1031: checking for socket" >&5
 if eval "test \"`echo '$''{'ac_cv_func_socket'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 730 "configure"
+#line 1036 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket(); below.  */
@@ -749,7 +1055,7 @@ socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_socket=yes"
 else
@@ -768,7 +1074,7 @@ else
   echo "$ac_t""no" 1>&6
 
   echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:772: checking for socket in -lsocket" >&5
+echo "configure:1078: checking for socket in -lsocket" >&5
 ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -776,7 +1082,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 780 "configure"
+#line 1086 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -787,7 +1093,7 @@ int main() {
 socket()
 ; return 0; }
 EOF
-if { (eval echo configure:791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -823,12 +1129,12 @@ fi
 
 
  echo $ac_n "checking for inet_ntoa""... $ac_c" 1>&6
-echo "configure:827: checking for inet_ntoa" >&5
+echo "configure:1133: checking for inet_ntoa" >&5
 if eval "test \"`echo '$''{'ac_cv_func_inet_ntoa'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 832 "configure"
+#line 1138 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char inet_ntoa(); below.  */
@@ -851,7 +1157,7 @@ inet_ntoa();
 
 ; return 0; }
 EOF
-if { (eval echo configure:855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_inet_ntoa=yes"
 else
@@ -870,7 +1176,7 @@ else
   echo "$ac_t""no" 1>&6
 
   echo $ac_n "checking for inet_ntoa in -lnsl""... $ac_c" 1>&6
-echo "configure:874: checking for inet_ntoa in -lnsl" >&5
+echo "configure:1180: checking for inet_ntoa in -lnsl" >&5
 ac_lib_var=`echo nsl'_'inet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -878,7 +1184,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 882 "configure"
+#line 1188 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -889,7 +1195,7 @@ int main() {
 inet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -924,14 +1230,150 @@ fi
 
 
 
+PROGS_IF_TSEARCH=adnsresfilter
+
+echo $ac_n "checking for tsearch""... $ac_c" 1>&6
+echo "configure:1237: checking for tsearch" >&5
+if eval "test \"`echo '$''{'ac_cv_func_tsearch'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1242 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char tsearch(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char tsearch();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_tsearch) || defined (__stub___tsearch)
+choke me
+#else
+tsearch();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_tsearch=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_tsearch=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'tsearch`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+ PROGS_HAVE_TSEARCH=$PROGS_IF_TSEARCH
+
+else
+  echo "$ac_t""no" 1>&6
+
+ PROGS_HAVE_TSEARCH='';
+ echo "configure: warning: tsearch missing - not building client program(s) $PROGS_IF_TSEARCH" 1>&2
+
+fi
+
+
+echo $ac_n "checking for INADDR_LOOPBACK""... $ac_c" 1>&6
+echo "configure:1292: checking for INADDR_LOOPBACK" >&5
+if eval "test \"`echo '$''{'adns_cv_decl_inaddrloopback'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+ cat > conftest.$ac_ext <<EOF
+#line 1298 "configure"
+#include "confdefs.h"
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+int main() {
+
+  INADDR_LOOPBACK;
+; return 0; }
+EOF
+if { (eval echo configure:1311: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  adns_cv_decl_inaddrloopback=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  adns_cv_decl_inaddrloopback=no
+fi
+rm -f conftest*
+fi
+
+if test "$adns_cv_decl_inaddrloopback" = yes; then
+ echo "$ac_t""found" 1>&6
+else
+ echo "$ac_t""not in standard headers, urgh..." 1>&6
+ ac_safe=`echo "rpc/types.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for rpc/types.h""... $ac_c" 1>&6
+echo "configure:1329: checking for rpc/types.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1334 "configure"
+#include "confdefs.h"
+#include <rpc/types.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1339: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+  cat >> confdefs.h <<\EOF
+#define HAVEUSE_RPCTYPES_H 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+
+  { echo "configure: error: cannot find INADDR_LOOPBACK or rpc/types.h" 1>&2; exit 1; }
+fi
+
+fi
+
 
  echo $ac_n "checking for inet_aton""... $ac_c" 1>&6
-echo "configure:930: checking for inet_aton" >&5
+echo "configure:1372: checking for inet_aton" >&5
 if eval "test \"`echo '$''{'ac_cv_func_inet_aton'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 935 "configure"
+#line 1377 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char inet_aton(); below.  */
@@ -954,7 +1396,7 @@ inet_aton();
 
 ; return 0; }
 EOF
-if { (eval echo configure:958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_inet_aton=yes"
 else
@@ -973,7 +1415,7 @@ else
   echo "$ac_t""no" 1>&6
 
   echo $ac_n "checking for inet_aton in -lresolv""... $ac_c" 1>&6
-echo "configure:977: checking for inet_aton in -lresolv" >&5
+echo "configure:1419: checking for inet_aton in -lresolv" >&5
 ac_lib_var=`echo resolv'_'inet_aton | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -981,7 +1423,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 985 "configure"
+#line 1427 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -992,7 +1434,7 @@ int main() {
 inet_aton()
 ; return 0; }
 EOF
-if { (eval echo configure:996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1024,22 +1466,63 @@ fi
 
 
 
+ echo $ac_n "checking inlines""... $ac_c" 1>&6
+echo "configure:1471: checking inlines" >&5
+ if eval "test \"`echo '$''{'dpkg_cv_c_inline'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+  cat > conftest.$ac_ext <<EOF
+#line 1477 "configure"
+#include "confdefs.h"
+
+int main() {
+} inline int foo (int x) {
+; return 0; }
+EOF
+if { (eval echo configure:1484: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  dpkg_cv_c_inline=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  dpkg_cv_c_inline=no
+fi
+rm -f conftest*
+fi
+
+ if test "x$dpkg_cv_c_inline" = xyes; then
+  true
+  echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define HAVE_INLINE 1
+EOF
+
+ else
+  true
+  echo "$ac_t""no" 1>&6
+ fi
+
+
+
  
  echo $ac_n "checking __attribute__((,,))""... $ac_c" 1>&6
-echo "configure:1030: checking __attribute__((,,))" >&5
+echo "configure:1513: checking __attribute__((,,))" >&5
  if eval "test \"`echo '$''{'adns_cv_c_attribute_supported'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 1036 "configure"
+#line 1519 "configure"
 #include "confdefs.h"
 
 int main() {
 extern int testfunction(int x) __attribute__((,,))
 ; return 0; }
 EOF
-if { (eval echo configure:1043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1526: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   adns_cv_c_attribute_supported=yes
 else
@@ -1061,20 +1544,20 @@ EOF
 
    
  echo $ac_n "checking __attribute__((noreturn))""... $ac_c" 1>&6
-echo "configure:1065: checking __attribute__((noreturn))" >&5
+echo "configure:1548: checking __attribute__((noreturn))" >&5
  if eval "test \"`echo '$''{'adns_cv_c_attribute_noreturn'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 1071 "configure"
+#line 1554 "configure"
 #include "confdefs.h"
 
 int main() {
 extern int testfunction(int x) __attribute__((noreturn))
 ; return 0; }
 EOF
-if { (eval echo configure:1078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   adns_cv_c_attribute_noreturn=yes
 else
@@ -1101,20 +1584,20 @@ EOF
 
    
  echo $ac_n "checking __attribute__((const))""... $ac_c" 1>&6
-echo "configure:1105: checking __attribute__((const))" >&5
+echo "configure:1588: checking __attribute__((const))" >&5
  if eval "test \"`echo '$''{'adns_cv_c_attribute_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 1111 "configure"
+#line 1594 "configure"
 #include "confdefs.h"
 
 int main() {
 extern int testfunction(int x) __attribute__((const))
 ; return 0; }
 EOF
-if { (eval echo configure:1118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   adns_cv_c_attribute_const=yes
 else
@@ -1141,20 +1624,20 @@ EOF
 
    
  echo $ac_n "checking __attribute__((format...))""... $ac_c" 1>&6
-echo "configure:1145: checking __attribute__((format...))" >&5
+echo "configure:1628: checking __attribute__((format...))" >&5
  if eval "test \"`echo '$''{'adns_cv_attribute_format'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 1151 "configure"
+#line 1634 "configure"
 #include "confdefs.h"
 
 int main() {
 extern int testfunction(char *y, ...) __attribute__((format(printf,1,2)))
 ; return 0; }
 EOF
-if { (eval echo configure:1158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   adns_cv_attribute_format=yes
 else
@@ -1185,6 +1668,46 @@ EOF
  fi
 
 
+for ac_hdr in sys/select.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1676: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1681 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1686: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
 
 
 
@@ -1201,12 +1724,16 @@ fi
 
 
 
+
+
+SHLIBFORLINK='libadns.so'
+SHLIBSONAME='$(SHLIBFORLINK).$(MAJOR)'
+SHLIBFILE='$(SHLIBSONAME).$(MINOR)'
+
 SHLIBCC='$(CC) $(CFLAGS) -fpic'
-MKSHLIB_1='$(CC) $(LDFLAGS) -shared -Wxl,soname=$(SONAME) -o'
+MKSHLIB_1='$(CC) $(LDFLAGS) -shared -Wl,-soname=$(SHLIBSONAME) -o'
 MKSHLIB_2=''
 MKSHLIB_3='-lc'
-SHLIBFILE='libadns.so.$(MAJOR).$(MINOR)'
-SHLIBSONAME='libadns.so.$(MAJOR)'
 
 trap '' 1 2 15
 cat > confcache <<\EOF
@@ -1231,7 +1758,7 @@ EOF
 # Ultrix sh set writes to stderr and can't be redirected directly,
 # and sets the high bit in the cache file unless we assign to the vars.
 (set) 2>&1 |
-  case `(ac_space=' '; set) 2>&1` in
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
   *ac_space=\ *)
     # `set' does not quote correctly, so add quotes (double-quote substitution
     # turns \\\\ into \\, and sed turns \\ into \).
@@ -1298,7 +1825,7 @@ do
     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.12"
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
     exit 0 ;;
   -help | --help | --hel | --he | --h)
     echo "\$ac_cs_usage"; exit 0 ;;
@@ -1307,6 +1834,7 @@ do
 done
 
 ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
 
 trap 'rm -fr `echo "settings.make Makefile
        src/Makefile client/Makefile dynamic/Makefile regress/Makefile
@@ -1319,9 +1847,11 @@ sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
  s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
 $ac_vpsub
 $extrasub
+s%@SHELL@%$SHELL%g
 s%@CFLAGS@%$CFLAGS%g
 s%@CPPFLAGS@%$CPPFLAGS%g
 s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
 s%@DEFS@%$DEFS%g
 s%@LDFLAGS@%$LDFLAGS%g
 s%@LIBS@%$LIBS%g
@@ -1340,13 +1870,20 @@ s%@includedir@%$includedir%g
 s%@oldincludedir@%$oldincludedir%g
 s%@infodir@%$infodir%g
 s%@mandir@%$mandir%g
+s%@ENABLE_DYNAMIC@%$ENABLE_DYNAMIC%g
 s%@CC@%$CC%g
+s%@CPP@%$CPP%g
 s%@RANLIB@%$RANLIB%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@PROGS_HAVE_TSEARCH@%$PROGS_HAVE_TSEARCH%g
 s%@WARNS@%$WARNS%g
 s%@SHLIBCC@%$SHLIBCC%g
 s%@MKSHLIB_1@%$MKSHLIB_1%g
 s%@MKSHLIB_2@%$MKSHLIB_2%g
 s%@MKSHLIB_3@%$MKSHLIB_3%g
+s%@SHLIBFORLINK@%$SHLIBFORLINK%g
 s%@SHLIBFILE@%$SHLIBFILE%g
 s%@SHLIBSONAME@%$SHLIBSONAME%g
 
@@ -1427,6 +1964,10 @@ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
     top_srcdir="$ac_dots$ac_given_srcdir" ;;
   esac
 
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
 
   echo creating "$ac_file"
   rm -f "$ac_file"
@@ -1442,6 +1983,7 @@ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
 s%@configure_input@%$configure_input%g
 s%@srcdir@%$srcdir%g
 s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
 " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
 fi; done
 rm -f conftest.s*
index 0267a37fcccb2c9b26be309d4d8f9e05683f8cf6..55b81287e9dc519f1b79a15976d7da74b40e2c74 100644 (file)
@@ -1,7 +1,12 @@
 # configure.in - input to autoconf
 #  
-#  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+#  This file is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
 #
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+#  
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
 #  the Free Software Foundation; either version 2, or (at your option)
 
 AC_INIT(src/adns.h)
 AC_CONFIG_HEADER(src/config.h)
+
+dnl DPKG_CACHED_TRY_COMPILE(<description>,<cachevar>,<include>,<program>,<ifyes>,<ifno>)
+define(DPKG_CACHED_TRY_COMPILE,[
+ AC_MSG_CHECKING($1)
+ AC_CACHE_VAL($2,[
+  AC_TRY_COMPILE([$3],[$4],[$2=yes],[$2=no])
+ ])
+ if test "x$$2" = xyes; then
+  true
+  $5
+ else
+  true
+  $6
+ fi
+])
+
+AC_MSG_CHECKING(whether you requested dynamic linking)
+AC_SUBST(ENABLE_DYNAMIC)
+AC_ARG_ENABLE(dynamic,
+[  --disable-dynamic       use static linking
+  --enable-dynamic[=elf]  create and use ELF dynamic library (default)],
+[      case "$enableval" in
+       elf|yes)
+               ENABLE_DYNAMIC=elf
+               AC_MSG_RESULT([yes (ELF)])
+               ;;
+       no)     ENABLE_DYNAMIC=no
+               AC_MSG_RESULT(no)
+               ;;
+       *)      AC_MSG_ERROR(
+["invalid value $enableval for --enable-dynamic, try yes or elf"])
+               ;;
+       esac
+],[
+               ENABLE_DYNAMIC=elf
+               AC_MSG_RESULT([yes, by default])
+])
+
 AC_PROG_CC
+AC_PROG_CPP
 AC_PROG_RANLIB
+AC_PROG_INSTALL
 
+AC_CHECK_FUNCS(poll)
 ADNS_C_GETFUNC(socket,socket)
 ADNS_C_GETFUNC(inet_ntoa,nsl)
 
+PROGS_IF_TSEARCH=adnsresfilter
+AC_SUBST(PROGS_HAVE_TSEARCH)
+AC_CHECK_FUNC(tsearch,[
+ PROGS_HAVE_TSEARCH=$PROGS_IF_TSEARCH
+],[
+ PROGS_HAVE_TSEARCH='';
+ AC_MSG_WARN([tsearch missing - not building client program(s) $PROGS_IF_TSEARCH])
+])
+
+AC_MSG_CHECKING(for INADDR_LOOPBACK)
+AC_CACHE_VAL(adns_cv_decl_inaddrloopback,[
+ AC_TRY_COMPILE([
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+ ],[
+  INADDR_LOOPBACK;
+ ],
+ adns_cv_decl_inaddrloopback=yes,
+ adns_cv_decl_inaddrloopback=no)])
+if test "$adns_cv_decl_inaddrloopback" = yes; then
+ AC_MSG_RESULT(found)
+else
+ AC_MSG_RESULT([not in standard headers, urgh...])
+ AC_CHECK_HEADER(rpc/types.h,[
+  AC_DEFINE(HAVEUSE_RPCTYPES_H)
+ ],[
+  AC_MSG_ERROR([cannot find INADDR_LOOPBACK or rpc/types.h])
+ ])
+fi
+
 ADNS_C_GETFUNC(inet_aton,resolv,[
  LIBS="-lresolv $LIBS";
  AC_MSG_WARN([inet_aton is in libresolv, urgh.  Must use -lresolv.])
 ])
 
+DPKG_CACHED_TRY_COMPILE(inlines,dpkg_cv_c_inline,,
+ [} inline int foo (int x) {],
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_INLINE),
+ AC_MSG_RESULT(no))
+
 ADNS_C_GCCATTRIB
+AC_CHECK_HEADERS(sys/select.h)
 
 AC_SUBST(WARNS)
 
@@ -43,15 +127,19 @@ AC_SUBST(SHLIBCC)
 AC_SUBST(MKSHLIB_1)
 AC_SUBST(MKSHLIB_2)
 AC_SUBST(MKSHLIB_3)
+
+AC_SUBST(SHLIBFORLINK)
 AC_SUBST(SHLIBFILE)
 AC_SUBST(SHLIBSONAME)
 
+SHLIBFORLINK='libadns.so'
+SHLIBSONAME='$(SHLIBFORLINK).$(MAJOR)'
+SHLIBFILE='$(SHLIBSONAME).$(MINOR)'
+
 SHLIBCC='$(CC) $(CFLAGS) -fpic'
-MKSHLIB_1='$(CC) $(LDFLAGS) -shared -Wxl,soname=$(SONAME) -o'
+MKSHLIB_1='$(CC) $(LDFLAGS) -shared -Wl,-soname=$(SHLIBSONAME) -o'
 MKSHLIB_2=''
 MKSHLIB_3='-lc'
-SHLIBFILE='libadns.so.$(MAJOR).$(MINOR)'
-SHLIBSONAME='libadns.so.$(MAJOR)'
 
 AC_OUTPUT(
        settings.make Makefile
index 905f601d06e9115601a0d22d103e68df241c75fe..8c5f810601f0d6db3cff42fbbe44e3ca1176641e 100644 (file)
@@ -1,6 +1,11 @@
 # dynamic/Makefile - dynamic library Makefile
 # 
-#  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+#  This file is
+#    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
 #  
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
 srcdir=                @srcdir@
 VPATH=         @srcdir@
 
-TARGETS=       $(SHLIBFILE)
+TARGETS=       $(SHLIBFILE) $(SHLIBSONAME) $(SHLIBFORLINK)
 include                $(srcdir)/../settings.make
 include                $(srcdir)/../src/adns.make
 
-ALLOBJS=       $(addsuffix _p.o, $(basename $(LIBOBJS))) $(LDLIBS)
+ALLOBJS=       $(addsuffix _p.o, $(basename $(LIBOBJS)))
 
 install:
                $(INSTALL_PROGRAM) $(SHLIBFILE) $(lib_dir)/$(SHLIBFILE)
+               ln -sf $(SHLIBFILE) $(lib_dir)/$(SHLIBSONAME)
 
 uninstall:
-               rm -f $(lib_dir)/$(SHLIBFILE)
+               rm -f $(lib_dir)/$(SHLIBFILE) $(lib_dir)/$(SHLIBSONAME)
+
+$(SHLIBFORLINK):
+               ln -s $(SHLIBSONAME) $(SHLIBFORLINK)
+
+$(SHLIBSONAME):
+               ln -s $(SHLIBFILE) $(SHLIBSONAME)
 
 $(SHLIBFILE):  $(ALLOBJS)
                rm -f $@
-               $(MKSHLIB_1) $@ $(MKSHLIB_2) $(ALLOBJS) $(MKSHLIB_3)
+               $(MKSHLIB_1) $@ $(MKSHLIB_2) $(ALLOBJS) $(LDLIBS) $(MKSHLIB_3)
 
 %_p.o:         $(srcdir)/../src/%.c $(srcdir)/../src/adns.h \
                        $(srcdir)/../src/internal.h $(srcdir)/../src/config.h
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..ebc6691
--- /dev/null
@@ -0,0 +1,250 @@
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd="$stripprog"
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+else
+       true
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+       
+       if [ -d $dst ]; then
+               instcmd=:
+       else
+               instcmd=mkdir
+       fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+       if [ -f $src -o -d $src ]
+       then
+               true
+       else
+               echo "install:  $src does not exist"
+               exit 1
+       fi
+       
+       if [ x"$dst" = x ]
+       then
+               echo "install:  no destination specified"
+               exit 1
+       else
+               true
+       fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+       if [ -d $dst ]
+       then
+               dst="$dst"/`basename $src`
+       else
+               true
+       fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='   
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+       pathcomp="${pathcomp}${1}"
+       shift
+
+       if [ ! -d "${pathcomp}" ] ;
+        then
+               $mkdirprog "${pathcomp}"
+       else
+               true
+       fi
+
+       pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+       $doit $instcmd $dst &&
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+       if [ x"$transformarg" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               dstfile=`basename $dst $transformbasename | 
+                       sed $transformarg`$transformbasename
+       fi
+
+# don't allow the sed command to completely eliminate the filename
+
+       if [ x"$dstfile" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               true
+       fi
+
+# Make a temp file name in the proper directory.
+
+       dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+       $doit $instcmd $src $dsttmp &&
+
+       trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+       $doit $rmcmd -f $dstdir/$dstfile &&
+       $doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
index 154e5a94c58f2a3aaf81ffa78bc12e2403596e4c..21dc051c6d7be7b4aa52d41427d61f9a9393cda1 100644 (file)
@@ -1,8 +1,6 @@
 Makefile
-harness.h
-hcommon.c
-hrecord
-hrecord.c
-hplayback
-hplayback.c
+*_record
+*_playback
 output-*.*
+pipe.out
+pipe.err
index 9a249c25ddd69fbac974af2e55c645d8b0aff9c1..47a01bba6456d3f4b42aa3c87ae3621476277816 100644 (file)
@@ -1,6 +1,11 @@
 # regress/Makefile - regression test Makefile
 # 
-#  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+#  This file is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
 #  
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
 srcdir=                @srcdir@
 VPATH=         @srcdir@
 
-TARGETS=       hplayback hrecord
-AUTOCSRCS=     harness.h hrecord.c hplayback.c hcommon.c
+PROGS_SYSDEP=  @PROGS_HAVE_TSEARCH@
+
+CLIENTS=       adnstest adnshost adnslogres $(PROGS_SYSDEP)
+AUTOCHDRS=     harness.h hsyscalls.h hredirect.h
+AUTOCSRCS=     hrecord.c hplayback.c hcommon.c
 include                $(srcdir)/../settings.make
 include                $(srcdir)/../src/adns.make
 
 DIRCFLAGS=     -I$(srcdir)/../src
 
-HCPPFLAGS:= $(foreach F,                       \
-       gettimeofday select                     \
-       socket fcntl connect close              \
-       sendto recvfrom read write writev       \
-, -D$F=H$F)
+HCPPFLAGS=     -DADNS_REGRESS_TEST -I.
+
+REDIRLIBOBJS=  $(addsuffix _d.o, $(basename $(LIBOBJS)))
+HARNLOBJS=     hcommon.o $(REDIRLIBOBJS)
+TARGETS=       $(addsuffix _record, $(CLIENTS)) $(addsuffix _playback, $(CLIENTS))
+ADH_OBJS=      adh-main_c.o adh-opts_c.o adh-query_c.o
+ALL_OBJS=      $(HARNLOBJS) dtest.o hrecord.o hplayback.o
 
-HARNLOBJS=     $(addsuffix _d.o, $(basename $(LIBOBJS))) $(LDLIBS)
-ALLOBJS=       $(HARNLOBJS) dtest.o hrecord.o hplayback.o hcommon.o
+.PRECIOUS:     $(AUTOCSRCS) $(AUTOCHDRS)
 
-.PRECIOUS:     $(AUTOCSRCS)
+all install uninstall: $(TARGETS)
 
 check:         $(TARGETS)
                ./checkall
 
-hrecord:       adnstest_c.o hrecord.o hcommon.o $(HARNLOBJS)
-hplayback:     adnstest_c.o hplayback.o hcommon.o $(HARNLOBJS)
+LINK_CMD=      $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
+
+%_record:      %_c.o hrecord.o $(HARNLOBJS)
+               $(LINK_CMD)
+
+%_playback:    %_c.o hplayback.o $(HARNLOBJS)
+               $(LINK_CMD)
+
+adnshost_%:    $(ADH_OBJS) h%.o $(HARNLOBJS)
+               $(LINK_CMD)
 
-%_d.o:         $(srcdir)/../src/%.c
+%_d.o:         $(srcdir)/../src/%.c hredirect.h
                $(CC) $(HCPPFLAGS) -c -g -o $@ $<
 
-%_c.o:         $(srcdir)/../client/%.c
+%_c.o:         $(srcdir)/../client/%.c hredirect.h
                $(CC) $(HCPPFLAGS) -I $(srcdir)/../src -c -g -o $@ $<
 
-$(ALLOBJS):    $(srcdir)/../src/adns.h $(srcdir)/../src/internal.h harness.h
+$(ALL_OBJS):   $(srcdir)/../src/adns.h $(srcdir)/../src/internal.h
+$(ALL_OBJS):   harness.h hsyscalls.h
+$(ADH_OBJS):   $(srcdir)/../client/adnshost.h
 
 %::    %.m4 hmacros.i4 hsyscalls.i4
        $(M4) -P $< >$@-a.new
index 3c3138cb67a5a0b937b17b6b82579eb624189e3f..c5ecbe8b68eaac342a6f120a9022bc0954a7aeb8 100755 (executable)
@@ -1,5 +1,26 @@
 #!/bin/sh
 # usage: ./addcases <casename> ...
+#
+#  This file is
+#    Copyright (C) 1998-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+#  
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2, or (at your option)
+#  any later version.
+#  
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#  
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 set -e
 
diff --git a/regress/adnshost-xinitflags.text b/regress/adnshost-xinitflags.text
new file mode 100644 (file)
index 0000000..809195c
--- /dev/null
@@ -0,0 +1 @@
+--debug --config 
diff --git a/regress/adnslogres-xinitflags.text b/regress/adnslogres-xinitflags.text
new file mode 100644 (file)
index 0000000..89d4c11
--- /dev/null
@@ -0,0 +1 @@
+-d -C
diff --git a/regress/adnsresfilter-xinitflags.text b/regress/adnsresfilter-xinitflags.text
new file mode 100644 (file)
index 0000000..809195c
--- /dev/null
@@ -0,0 +1 @@
+--debug --config 
diff --git a/regress/case-1stservbroken.err b/regress/case-1stservbroken.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-1stservbroken.out b/regress/case-1stservbroken.out
new file mode 100644 (file)
index 0000000..8a1790c
--- /dev/null
@@ -0,0 +1,39 @@
+adns debug: using nameserver 172.18.45.2
+adns debug: using nameserver 172.18.45.6
+trunc.test.iwj.relativity.greenend.org.uk flags 0 type 12 PTR(raw) submitted
+adns warning: datagram receive error: Connection refused
+adns debug: TCP connected (NS=172.18.45.2)
+adns warning: TCP connection failed: read: Broken pipe (NS=172.18.45.2)
+adns debug: TCP connected (NS=172.18.45.6)
+trunc.test.iwj.relativity.greenend.org.uk flags 0 type PTR(raw): OK; nrrs=30; cname=$; owner=$; ttl=60
+ long.domain.to.force.truncation.0.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.1.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.2.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.3.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.4.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.5.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.6.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.7.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.8.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.9.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.10.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.11.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.12.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.13.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.14.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.15.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.16.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.17.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.18.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.19.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.20.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.21.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.22.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.23.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.24.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.25.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.26.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.27.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.28.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.29.test.iwj.relativity.greenend.org.uk
+rc=0
diff --git a/regress/case-1stservbroken.sys b/regress/case-1stservbroken.sys
new file mode 100644 (file)
index 0000000..3cb74e4
--- /dev/null
@@ -0,0 +1,183 @@
+adnstest 1stservbroken
+:12 trunc.test.iwj.relativity.greenend.org.uk
+ start 940102940.701451
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000612
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000605
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000573
+ sendto fd=4 addr=172.18.45.2:53
+     311f0100 00010000 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ sendto=59
+ +0.006374
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.993626
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.001402
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=ECONNREFUSED
+ +0.000666
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.991558
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-02914
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ sendto=59
+ +0.002262
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997738
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000973
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8380 00010008 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001c0 0c000c00
+     01000000 3c004704 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275
+     6e636174 696f6e01 30047465 73740369 776a0a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b00c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0131 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0132 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0133 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0134 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0135 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0136 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0137 c069.
+ +0.004340
+ socket type=SOCK_STREAM
+ socket=5
+ +0.005126
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000742
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000604
+ connect fd=5 addr=172.18.45.2:53
+ connect=EINPROGRESS
+ +0.000797
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000829
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.987562
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.001172
+ read fd=5 buflen=1
+ read=OK
+     .
+ +0.001161
+ write fd=5
+     003b311f 01000001 00000000 00000574 72756e63 04746573 74036977 6a0a7265
+     6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000c00 01.
+ write=61
+ +0.003598
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.981631
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.001370
+ read fd=5 buflen=2
+ read=EPIPE
+ +0.001699
+ close fd=5
+ close=OK
+ +0.000687
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ socket type=SOCK_STREAM
+ socket=5
+ +0.004865
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000611
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000574
+ connect fd=5 addr=172.18.45.6:53
+ connect=EINPROGRESS
+ +0.001082
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.992868
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.001011
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000595
+ write fd=5
+     003b311f 01000001 00000000 00000574 72756e63 04746573 74036977 6a0a7265
+     6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000c00 01.
+ write=61
+ +0.005087
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.964049
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.001295
+ read fd=5 buflen=2
+ read=OK
+     0638.
+ +0.000649
+ read fd=5 buflen=1592
+ read=OK
+     311f8580 0001001e 00010001 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001c0 0c000c00
+     01000000 3c004704 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275
+     6e636174 696f6e01 30047465 73740369 776a0a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b00c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0131 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0132 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0133 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0134 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0135 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0136 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0137 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0138 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0139 c069c00c
+     000c0001 0000003c 0025046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0231 30c069c0 0c000c00 01000000 3c002504 6c6f6e67
+     06646f6d 61696e02 746f0566 6f726365 0a747275 6e636174 696f6e02 3131c069
+     c00c000c 00010000 003c0025 046c6f6e 6706646f 6d61696e 02746f05 666f7263
+     650a7472 756e6361 74696f6e 023132c0 69c00c00 0c000100 00003c00 25046c6f
+     6e670664 6f6d6169 6e02746f 05666f72 63650a74 72756e63 6174696f 6e023133
+     c069c00c 000c0001 0000003c 0025046c 6f6e6706 646f6d61 696e0274 6f05666f
+     7263650a 7472756e 63617469 6f6e0231 34c069c0 0c000c00 01000000 3c002504
+     6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275 6e636174 696f6e02
+     3135c069 c00c000c 00010000 003c0025 046c6f6e 6706646f 6d61696e 02746f05
+     666f7263 650a7472 756e6361 74696f6e 023136c0 69c00c00 0c000100 00003c00
+     25046c6f 6e670664 6f6d6169 6e02746f 05666f72 63650a74 72756e63 6174696f
+     6e023137 c069c00c 000c0001 0000003c 0025046c 6f6e6706 646f6d61 696e0274
+     6f05666f 7263650a 7472756e 63617469 6f6e0231 38c069c0 0c000c00 01000000
+     3c002504 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275 6e636174
+     696f6e02 3139c069 c00c000c 00010000 003c0025 046c6f6e 6706646f 6d61696e
+     02746f05 666f7263 650a7472 756e6361 74696f6e 023230c0 69c00c00 0c000100
+     00003c00 25046c6f 6e670664 6f6d6169 6e02746f 05666f72 63650a74 72756e63
+     6174696f 6e023231 c069c00c 000c0001 0000003c 0025046c 6f6e6706 646f6d61
+     696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0232 32c069c0 0c000c00
+     01000000 3c002504 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275
+     6e636174 696f6e02 3233c069 c00c000c 00010000 003c0025 046c6f6e 6706646f
+     6d61696e 02746f05 666f7263 650a7472 756e6361 74696f6e 023234c0 69c00c00
+     0c000100 00003c00 25046c6f 6e670664 6f6d6169 6e02746f 05666f72 63650a74
+     72756e63 6174696f 6e023235 c069c00c 000c0001 0000003c 0025046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0232 36c069c0
+     0c000c00 01000000 3c002504 6c6f6e67 06646f6d 61696e02 746f0566 6f726365
+     0a747275 6e636174 696f6e02 3237c069 c00c000c 00010000 003c0025 046c6f6e
+     6706646f 6d61696e 02746f05 666f7263 650a7472 756e6361 74696f6e 023238c0
+     69c00c00 0c000100 00003c00 25046c6f 6e670664 6f6d6169 6e02746f 05666f72
+     63650a74 72756e63 6174696f 6e023239 c069c069 00020001 0000003c 0006036e
+     7330c072 036e7330 c0720001 00010001 51800004 ac122d06.
+ +0.009426
+ read fd=5 buflen=1594
+ read=EAGAIN
+ +0.033394
+ close fd=4
+ close=OK
+ +0.054384
+ close fd=5
+ close=OK
+ +0.000977
diff --git a/regress/case-1stservtotcp.err b/regress/case-1stservtotcp.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-1stservtotcp.out b/regress/case-1stservtotcp.out
new file mode 100644 (file)
index 0000000..fe2f632
--- /dev/null
@@ -0,0 +1,37 @@
+adns debug: using nameserver 10.0.0.1
+adns debug: using nameserver 172.18.45.6
+trunc.test.iwj.relativity.greenend.org.uk flags 0 type 12 PTR(raw) submitted
+adns warning: TCP connection failed: unable to make connection: timed out (NS=10.0.0.1)
+adns debug: TCP connected (NS=172.18.45.6)
+trunc.test.iwj.relativity.greenend.org.uk flags 0 type PTR(raw): OK; nrrs=30; cname=$; owner=$; ttl=59
+ long.domain.to.force.truncation.0.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.1.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.2.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.3.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.4.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.5.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.6.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.7.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.8.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.9.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.10.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.11.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.12.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.13.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.14.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.15.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.16.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.17.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.18.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.19.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.20.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.21.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.22.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.23.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.24.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.25.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.26.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.27.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.28.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.29.test.iwj.relativity.greenend.org.uk
+rc=0
diff --git a/regress/case-1stservtotcp.sys b/regress/case-1stservtotcp.sys
new file mode 100644 (file)
index 0000000..77f5bd3
--- /dev/null
@@ -0,0 +1,159 @@
+adnstest 1stservto
+:12 trunc.test.iwj.relativity.greenend.org.uk
+ start 940100259.965940
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000698
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000611
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000582
+ sendto fd=4 addr=10.0.0.1:53
+     311f0100 00010000 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ sendto=59
+ +0.006634
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.993366
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-05507
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ sendto=59
+ +0.002310
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997690
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000996
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8380 00010008 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001c0 0c000c00
+     01000000 3c004704 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275
+     6e636174 696f6e01 30047465 73740369 776a0a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b00c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0131 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0132 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0133 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0134 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0135 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0136 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0137 c069.
+ +0.004379
+ socket type=SOCK_STREAM
+ socket=5
+ +0.009970
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000612
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000602
+ connect fd=5 addr=10.0.0.1:53
+ connect=EINPROGRESS
+ +0.000850
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000646
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.982941
+ select=0 rfds=[] wfds=[] efds=[]
+ +14.-10600
+ close fd=5
+ close=OK
+ +0.000750
+ socket type=SOCK_STREAM
+ socket=5
+ +0.004957
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000593
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000582
+ connect fd=5 addr=172.18.45.6:53
+ connect=EINPROGRESS
+ +0.001140
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.991978
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.001038
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.001203
+ write fd=5
+     003b311f 01000001 00000000 00000574 72756e63 04746573 74036977 6a0a7265
+     6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000c00 01.
+ write=61
+ +0.007301
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=15.975977
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.001431
+ read fd=5 buflen=2
+ read=OK
+     0638.
+ +0.001841
+ read fd=5 buflen=1592
+ read=OK
+     311f8580 0001001e 00010001 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001c0 0c000c00
+     01000000 3c004704 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275
+     6e636174 696f6e01 30047465 73740369 776a0a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b00c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0131 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0132 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0133 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0134 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0135 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0136 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0137 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0138 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0139 c069c00c
+     000c0001 0000003c 0025046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0231 30c069c0 0c000c00 01000000 3c002504 6c6f6e67
+     06646f6d 61696e02 746f0566 6f726365 0a747275 6e636174 696f6e02 3131c069
+     c00c000c 00010000 003c0025 046c6f6e 6706646f 6d61696e 02746f05 666f7263
+     650a7472 756e6361 74696f6e 023132c0 69c00c00 0c000100 00003c00 25046c6f
+     6e670664 6f6d6169 6e02746f 05666f72 63650a74 72756e63 6174696f 6e023133
+     c069c00c 000c0001 0000003c 0025046c 6f6e6706 646f6d61 696e0274 6f05666f
+     7263650a 7472756e 63617469 6f6e0231 34c069c0 0c000c00 01000000 3c002504
+     6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275 6e636174 696f6e02
+     3135c069 c00c000c 00010000 003c0025 046c6f6e 6706646f 6d61696e 02746f05
+     666f7263 650a7472 756e6361 74696f6e 023136c0 69c00c00 0c000100 00003c00
+     25046c6f 6e670664 6f6d6169 6e02746f 05666f72 63650a74 72756e63 6174696f
+     6e023137 c069c00c 000c0001 0000003c 0025046c 6f6e6706 646f6d61 696e0274
+     6f05666f 7263650a 7472756e 63617469 6f6e0231 38c069c0 0c000c00 01000000
+     3c002504 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275 6e636174
+     696f6e02 3139c069 c00c000c 00010000 003c0025 046c6f6e 6706646f 6d61696e
+     02746f05 666f7263 650a7472 756e6361 74696f6e 023230c0 69c00c00 0c000100
+     00003c00 25046c6f 6e670664 6f6d6169 6e02746f 05666f72 63650a74 72756e63
+     6174696f 6e023231 c069c00c 000c0001 0000003c 0025046c 6f6e6706 646f6d61
+     696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0232 32c069c0 0c000c00
+     01000000 3c002504 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275
+     6e636174 696f6e02 3233c069 c00c000c 00010000 003c0025 046c6f6e 6706646f
+     6d61696e 02746f05 666f7263 650a7472 756e6361 74696f6e 023234c0 69c00c00
+     0c000100 00003c00 25046c6f 6e670664 6f6d6169 6e02746f 05666f72 63650a74
+     72756e63 6174696f 6e023235 c069c00c 000c0001 0000003c 0025046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0232 36c069c0
+     0c000c00 01000000 3c002504 6c6f6e67 06646f6d 61696e02 746f0566 6f726365
+     0a747275 6e636174 696f6e02 3237c069 c00c000c 00010000 003c0025 046c6f6e
+     6706646f 6d61696e 02746f05 666f7263 650a7472 756e6361 74696f6e 023238c0
+     69c00c00 0c000100 00003c00 25046c6f 6e670664 6f6d6169 6e02746f 05666f72
+     63650a74 72756e63 6174696f 6e023239 c069c069 00020001 0000003c 0006036e
+     7330c072 036e7330 c0720001 00010001 51800004 ac122d06.
+ +1.-990207
+ read fd=5 buflen=1594
+ read=EAGAIN
+ +0.040526
+ close fd=4
+ close=OK
+ +0.065240
+ close fd=5
+ close=OK
+ +0.000982
diff --git a/regress/case-2ndservok.err b/regress/case-2ndservok.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-2ndservok.out b/regress/case-2ndservok.out
new file mode 100644 (file)
index 0000000..2c72438
--- /dev/null
@@ -0,0 +1,6 @@
+adns debug: using nameserver 172.18.45.36
+adns debug: using nameserver 172.18.45.6
+davenant.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+davenant.relativity.greenend.org.uk flags 0 type A(-): OK; nrrs=1; cname=$; owner=$; ttl=86400
+ 172.18.45.6
+rc=0
diff --git a/regress/case-2ndservok.sys b/regress/case-2ndservok.sys
new file mode 100644 (file)
index 0000000..fdb8e27
--- /dev/null
@@ -0,0 +1,47 @@
+adnstest 2ndserver
+:1 davenant.relativity.greenend.org.uk
+ start 940100095.012145
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000173
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000053
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000042
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01.
+ sendto=53
+ +0.001041
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998959
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04931
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.003890
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009910
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01.
+ sendto=53
+ +0.000863
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999137
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000126
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00030003 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01c00c00 01000100 01518000
+     04ac122d 060a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000200 01000151 80000603 6e7330c0 45c04500 02000100 01518000 06036e73
+     31c045c0 45000200 01000151 80000603 6e7332c0 45c06b00 01000100 01518000
+     04ac122d 06c07d00 01000100 01518000 04ac122d 41c08f00 01000100 01518000
+     04ac122d 01.
+ +0.001026
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000423
+ close fd=4
+ close=OK
+ +0.000435
diff --git a/regress/case-2ndservtcp.err b/regress/case-2ndservtcp.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-2ndservtcp.out b/regress/case-2ndservtcp.out
new file mode 100644 (file)
index 0000000..857176d
--- /dev/null
@@ -0,0 +1,37 @@
+adns debug: using nameserver 172.18.45.36
+adns debug: using nameserver 172.18.45.6
+trunc.test.iwj.relativity.greenend.org.uk flags 0 type 12 PTR(raw) submitted
+adns warning: TCP connection failed: connect/read: No route to host (NS=172.18.45.36)
+adns debug: TCP connected (NS=172.18.45.6)
+trunc.test.iwj.relativity.greenend.org.uk flags 0 type PTR(raw): OK; nrrs=30; cname=$; owner=$; ttl=60
+ long.domain.to.force.truncation.0.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.1.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.2.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.3.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.4.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.5.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.6.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.7.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.8.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.9.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.10.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.11.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.12.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.13.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.14.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.15.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.16.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.17.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.18.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.19.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.20.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.21.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.22.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.23.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.24.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.25.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.26.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.27.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.28.test.iwj.relativity.greenend.org.uk
+ long.domain.to.force.truncation.29.test.iwj.relativity.greenend.org.uk
+rc=0
diff --git a/regress/case-2ndservtcp.sys b/regress/case-2ndservtcp.sys
new file mode 100644 (file)
index 0000000..b79bfd4
--- /dev/null
@@ -0,0 +1,168 @@
+adnstest 2ndserver
+:12 trunc.test.iwj.relativity.greenend.org.uk
+ start 940100083.268555
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000169
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000053
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000040
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ sendto=59
+ +0.001167
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998833
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01463
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000296
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009912
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ sendto=59
+ +0.001357
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998643
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000126
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8380 00010008 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001c0 0c000c00
+     01000000 3c004704 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275
+     6e636174 696f6e01 30047465 73740369 776a0a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b00c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0131 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0132 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0133 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0134 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0135 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0136 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0137 c069.
+ +0.002022
+ socket type=SOCK_STREAM
+ socket=5
+ +0.000905
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000041
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000038
+ connect fd=5 addr=172.18.45.36:53
+ connect=EINPROGRESS
+ +0.000162
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000062
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.996770
+ select=1 rfds=[] wfds=[5] efds=[]
+ +1.-14443
+ read fd=5 buflen=1
+ read=EHOSTUNREACH
+ +0.000193
+ close fd=5
+ close=OK
+ +0.000146
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ socket type=SOCK_STREAM
+ socket=5
+ +0.000678
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000041
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000039
+ connect fd=5 addr=172.18.45.6:53
+ connect=EINPROGRESS
+ +0.000455
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.998787
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.000135
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000062
+ write fd=5
+     003b311f 01000001 00000000 00000574 72756e63 04746573 74036977 6a0a7265
+     6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000c00 01.
+ write=61
+ +0.004082
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.005381
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.000149
+ read fd=5 buflen=2
+ read=OK
+     0638.
+ +0.000210
+ read fd=5 buflen=1592
+ read=OK
+     311f8580 0001001e 00010001 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 0c0001c0 0c000c00
+     01000000 3c004704 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275
+     6e636174 696f6e01 30047465 73740369 776a0a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b00c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0131 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0132 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0133 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0134 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0135 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0136 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0137 c069c00c
+     000c0001 0000003c 0024046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0138 c069c00c 000c0001 0000003c 0024046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0139 c069c00c
+     000c0001 0000003c 0025046c 6f6e6706 646f6d61 696e0274 6f05666f 7263650a
+     7472756e 63617469 6f6e0231 30c069c0 0c000c00 01000000 3c002504 6c6f6e67
+     06646f6d 61696e02 746f0566 6f726365 0a747275 6e636174 696f6e02 3131c069
+     c00c000c 00010000 003c0025 046c6f6e 6706646f 6d61696e 02746f05 666f7263
+     650a7472 756e6361 74696f6e 023132c0 69c00c00 0c000100 00003c00 25046c6f
+     6e670664 6f6d6169 6e02746f 05666f72 63650a74 72756e63 6174696f 6e023133
+     c069c00c 000c0001 0000003c 0025046c 6f6e6706 646f6d61 696e0274 6f05666f
+     7263650a 7472756e 63617469 6f6e0231 34c069c0 0c000c00 01000000 3c002504
+     6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275 6e636174 696f6e02
+     3135c069 c00c000c 00010000 003c0025 046c6f6e 6706646f 6d61696e 02746f05
+     666f7263 650a7472 756e6361 74696f6e 023136c0 69c00c00 0c000100 00003c00
+     25046c6f 6e670664 6f6d6169 6e02746f 05666f72 63650a74 72756e63 6174696f
+     6e023137 c069c00c 000c0001 0000003c 0025046c 6f6e6706 646f6d61 696e0274
+     6f05666f 7263650a 7472756e 63617469 6f6e0231 38c069c0 0c000c00 01000000
+     3c002504 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275 6e636174
+     696f6e02 3139c069 c00c000c 00010000 003c0025 046c6f6e 6706646f 6d61696e
+     02746f05 666f7263 650a7472 756e6361 74696f6e 023230c0 69c00c00 0c000100
+     00003c00 25046c6f 6e670664 6f6d6169 6e02746f 05666f72 63650a74 72756e63
+     6174696f 6e023231 c069c00c 000c0001 0000003c 0025046c 6f6e6706 646f6d61
+     696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0232 32c069c0 0c000c00
+     01000000 3c002504 6c6f6e67 06646f6d 61696e02 746f0566 6f726365 0a747275
+     6e636174 696f6e02 3233c069 c00c000c 00010000 003c0025 046c6f6e 6706646f
+     6d61696e 02746f05 666f7263 650a7472 756e6361 74696f6e 023234c0 69c00c00
+     0c000100 00003c00 25046c6f 6e670664 6f6d6169 6e02746f 05666f72 63650a74
+     72756e63 6174696f 6e023235 c069c00c 000c0001 0000003c 0025046c 6f6e6706
+     646f6d61 696e0274 6f05666f 7263650a 7472756e 63617469 6f6e0232 36c069c0
+     0c000c00 01000000 3c002504 6c6f6e67 06646f6d 61696e02 746f0566 6f726365
+     0a747275 6e636174 696f6e02 3237c069 c00c000c 00010000 003c0025 046c6f6e
+     6706646f 6d61696e 02746f05 666f7263 650a7472 756e6361 74696f6e 023238c0
+     69c00c00 0c000100 00003c00 25046c6f 6e670664 6f6d6169 6e02746f 05666f72
+     63650a74 72756e63 6174696f 6e023239 c069c069 00020001 0000003c 0006036e
+     7330c072 036e7330 c0720001 00010001 51800004 ac122d06.
+ +0.006071
+ read fd=5 buflen=1594
+ read=EAGAIN
+ +0.005347
+ close fd=4
+ close=OK
+ +0.004675
+ close fd=5
+ close=OK
+ +0.000433
diff --git a/regress/case-abbrev.err b/regress/case-abbrev.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-abbrev.out b/regress/case-abbrev.out
new file mode 100644 (file)
index 0000000..1f786ef
--- /dev/null
@@ -0,0 +1,40 @@
+adns debug: using nameserver 172.18.45.6
+greenend.org.uk flags 0 type 1 A(-) submitted
+greenend.org.uk flags 0 type 2 NS(raw) submitted
+greenend.org.uk flags 0 type 5 CNAME(-) submitted
+greenend.org.uk flags 0 type 6 SOA(raw) submitted
+greenend.org.uk flags 0 type 12 PTR(raw) submitted
+greenend.org.uk flags 0 type 13 HINFO(-) submitted
+greenend.org.uk flags 0 type 15 MX(raw) submitted
+greenend.org.uk flags 0 type 16 TXT(-) submitted
+greenend.org.uk flags 0 type 17 RP(raw) submitted
+greenend.org.uk flags 0 type 65537 A(addr) submitted
+greenend.org.uk flags 0 type 65538 NS(+addr) submitted
+greenend.org.uk flags 0 type 65548 PTR(checked) submitted
+greenend.org.uk flags 0 type 65551 MX(+addr) submitted
+greenend.org.uk flags 0 type 131078 SOA(822) submitted
+greenend.org.uk flags 0 type 131089 RP(822) submitted
+greenend.org.uk flags 0 type A(-) ownflags=a: nodata; nrrs=0; cname=$; owner=$; ttl=86400
+greenend.org.uk flags 0 type NS(raw) ownflags=a: ok; nrrs=2; cname=$; owner=$; ttl=86400
+ ns1.relativity.greenend.org.uk
+ ns0.relativity.greenend.org.uk
+greenend.org.uk flags 0 type CNAME(-) ownflags=a: nodata; nrrs=0; cname=$; owner=$; ttl=86400
+greenend.org.uk flags 0 type SOA(raw) ownflags=a: ok; nrrs=1; cname=$; owner=$; ttl=86400
+ ns.chiark.greenend.org.uk hostmaster.greenend.org.uk 1999061300 28800 7200 604800 86400
+greenend.org.uk flags 0 type PTR(raw) ownflags=a: nodata; nrrs=0; cname=$; owner=$; ttl=86400
+greenend.org.uk flags 0 type HINFO(-) ownflags=a: nodata; nrrs=0; cname=$; owner=$; ttl=86400
+greenend.org.uk flags 0 type MX(raw) ownflags=a: ok; nrrs=1; cname=$; owner=$; ttl=86400
+ 10 chiark.greenend.org.uk
+greenend.org.uk flags 0 type TXT(-) ownflags=a: nodata; nrrs=0; cname=$; owner=$; ttl=86400
+greenend.org.uk flags 0 type RP(raw) ownflags=a: nodata; nrrs=0; cname=$; owner=$; ttl=86400
+greenend.org.uk flags 0 type A(addr) ownflags=a: nodata; nrrs=0; cname=$; owner=$; ttl=86400
+greenend.org.uk flags 0 type NS(+addr) ownflags=a: ok; nrrs=2; cname=$; owner=$; ttl=86400
+ ns0.relativity.greenend.org.uk ok 0 ok "OK" ( INET 172.18.45.6 )
+ ns1.relativity.greenend.org.uk ok 0 ok "OK" ( INET 172.18.45.65 )
+greenend.org.uk flags 0 type PTR(checked) ownflags=a: nodata; nrrs=0; cname=$; owner=$; ttl=86400
+greenend.org.uk flags 0 type MX(+addr) ownflags=a: ok; nrrs=1; cname=$; owner=$; ttl=86400
+ 10 chiark.greenend.org.uk ok 0 ok "OK" ( INET 195.224.76.132 )
+greenend.org.uk flags 0 type SOA(822) ownflags=a: ok; nrrs=1; cname=$; owner=$; ttl=86400
+ ns.chiark.greenend.org.uk hostmaster@greenend.org.uk 1999061300 28800 7200 604800 86400
+greenend.org.uk flags 0 type RP(822) ownflags=a: nodata; nrrs=0; cname=$; owner=$; ttl=86400
+rc=0
diff --git a/regress/case-abbrev.sys b/regress/case-abbrev.sys
new file mode 100644 (file)
index 0000000..0fd7a73
--- /dev/null
@@ -0,0 +1,282 @@
+adnstest default
+,a/greenend.org.uk
+ start 929580078.542974
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000202
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000086
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000061
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000623
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000425
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000371
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000369
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000369
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000414
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000371
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000368
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000368
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000367
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000367
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000366
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000378
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000391
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000467
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.993986
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005183
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010000 00010000 08677265 656e656e 64036f72 6702756b 00000100
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180.
+ +0.000588
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000147
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.988691
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004348
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010002 00000002 08677265 656e656e 64036f72 6702756b 00000200
+     01c00c00 02000100 01518000 11036e73 310a7265 6c617469 76697479 c00cc00c
+     00020001 00015180 0006036e 7330c031 c02d0001 00010001 51800004 ac122d41
+     c04a0001 00010001 51800004 ac122d06.
+ +0.000642
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000247
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.983879
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002737
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010000 00010000 08677265 656e656e 64036f72 6702756b 00000500
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180.
+ +0.000541
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000099
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.980873
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005000
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228580 00010001 00020002 08677265 656e656e 64036f72 6702756b 00000600
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180c00c 00020001
+     00015180 0011036e 73310a72 656c6174 69766974 79c00cc0 0c000200 01000151
+     80000603 6e7330c0 6ac06600 01000100 01518000 04ac122d 41c08300 01000100
+     01518000 04ac122d 06.
+ +0.000913
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000195
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.975134
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002529
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238580 00010000 00010000 08677265 656e656e 64036f72 6702756b 00000c00
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180.
+ +0.000541
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000100
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.972333
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003175
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248580 00010000 00010000 08677265 656e656e 64036f72 6702756b 00000d00
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180.
+ +0.000538
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000122
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.968912
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005109
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258580 00010001 00020003 08677265 656e656e 64036f72 6702756b 00000f00
+     01c00c00 0f000100 01518000 0b000a06 63686961 726bc00c c00c0002 00010001
+     51800011 036e7331 0a72656c 61746976 697479c0 0cc00c00 02000100 01518000
+     06036e73 30c048c0 2f000100 01000151 800004c3 e04c84c0 44000100 01000151
+     800004ac 122d41c0 61000100 01000151 800004ac 122d06.
+ +0.000826
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000173
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.963175
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002746
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268580 00010000 00010000 08677265 656e656e 64036f72 6702756b 00001000
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180.
+ +0.000539
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000127
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.960131
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003161
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278580 00010000 00010000 08677265 656e656e 64036f72 6702756b 00001100
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180.
+ +0.000537
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000098
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.956703
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003055
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288580 00010000 00010000 08677265 656e656e 64036f72 6702756b 00000100
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180.
+ +0.000537
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000126
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.953352
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004322
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298580 00010002 00000002 08677265 656e656e 64036f72 6702756b 00000200
+     01c00c00 02000100 01518000 11036e73 300a7265 6c617469 76697479 c00cc00c
+     00020001 00015180 0006036e 7331c031 c02d0001 00010001 51800004 ac122d06
+     c04a0001 00010001 51800004 ac122d41.
+ +0.000638
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000268
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.948491
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002741
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8580 00010000 00010000 08677265 656e656e 64036f72 6702756b 00000c00
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180.
+ +0.000540
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000129
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.945447
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005215
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8580 00010001 00020003 08677265 656e656e 64036f72 6702756b 00000f00
+     01c00c00 0f000100 01518000 0b000a06 63686961 726bc00c c00c0002 00010001
+     51800011 036e7330 0a72656c 61746976 697479c0 0cc00c00 02000100 01518000
+     06036e73 31c048c0 2f000100 01000151 800004c3 e04c84c0 44000100 01000151
+     800004ac 122d06c0 61000100 01000151 800004ac 122d41.
+ +0.000822
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000197
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.939591
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004484
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8580 00010001 00020002 08677265 656e656e 64036f72 6702756b 00000600
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180c00c 00020001
+     00015180 0011036e 73300a72 656c6174 69766974 79c00cc0 0c000200 01000151
+     80000603 6e7331c0 6ac06600 01000100 01518000 04ac122d 06c08300 01000100
+     01518000 04ac122d 41.
+ +0.000910
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000223
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.934365
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002704
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8580 00010000 00010000 08677265 656e656e 64036f72 6702756b 00001100
+     01c00c00 06000100 01518000 2d026e73 06636869 61726bc0 0c0a686f 73746d61
+     73746572 c00c7727 41340000 70800000 1c200009 3a800001 5180.
+ +0.000537
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000099
+ close fd=4
+ close=OK
+ +0.000153
diff --git a/regress/case-abbrevto.err b/regress/case-abbrevto.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-abbrevto.out b/regress/case-abbrevto.out
new file mode 100644 (file)
index 0000000..bfda79c
--- /dev/null
@@ -0,0 +1,32 @@
+adns debug: using nameserver 172.18.45.36
+greenend.org.uk flags 0 type 1 A(-) submitted
+greenend.org.uk flags 0 type 2 NS(raw) submitted
+greenend.org.uk flags 0 type 5 CNAME(-) submitted
+greenend.org.uk flags 0 type 6 SOA(raw) submitted
+greenend.org.uk flags 0 type 12 PTR(raw) submitted
+greenend.org.uk flags 0 type 13 HINFO(-) submitted
+greenend.org.uk flags 0 type 15 MX(raw) submitted
+greenend.org.uk flags 0 type 16 TXT(-) submitted
+greenend.org.uk flags 0 type 17 RP(raw) submitted
+greenend.org.uk flags 0 type 65537 A(addr) submitted
+greenend.org.uk flags 0 type 65538 NS(+addr) submitted
+greenend.org.uk flags 0 type 65548 PTR(checked) submitted
+greenend.org.uk flags 0 type 65551 MX(+addr) submitted
+greenend.org.uk flags 0 type 131078 SOA(822) submitted
+greenend.org.uk flags 0 type 131089 RP(822) submitted
+greenend.org.uk flags 0 type A(-) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type NS(raw) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type CNAME(-) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type SOA(raw) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type PTR(raw) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type HINFO(-) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type MX(raw) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type TXT(-) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type RP(raw) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type A(addr) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type NS(+addr) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type PTR(checked) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type MX(+addr) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type SOA(822) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+greenend.org.uk flags 0 type RP(822) ownflags=a: timeout; nrrs=0; cname=$; owner=$; ttl=604770
+rc=0
diff --git a/regress/case-abbrevto.sys b/regress/case-abbrevto.sys
new file mode 100644 (file)
index 0000000..f61cd0a
--- /dev/null
@@ -0,0 +1,1239 @@
+adnstest noserver
+,a/greenend.org.uk
+ start 929580082.699581
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000192
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000084
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000062
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.014155
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000420
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000322
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000322
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000320
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000366
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000324
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000318
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000319
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000319
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000319
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000319
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000319
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000343
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000399
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.981116
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-18933
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000049
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010028
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000363
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.003813
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009575
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000291
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000277
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000302
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000271
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000270
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000271
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000270
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000293
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000271
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000271
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.986185
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-14326
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000511
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009965
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000386
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000098
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009616
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000285
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000279
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000271
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000298
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000271
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000275
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.986134
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-14145
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000279
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009905
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000427
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000317
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000283
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000280
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000278
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000315
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000277
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000276
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000318
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000274
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995581
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04960
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000541
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009952
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000430
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000310
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000309
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000278
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000276
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000294
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000277
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000275
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995632
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04751
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000383
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009901
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000339
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000280
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000323
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000317
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000274
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995734
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04720
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000454
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009970
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000393
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000303
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000276
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000297
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000297
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995695
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04679
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000374
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009892
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000323
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000280
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000276
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000307
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000301
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000273
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995776
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04674
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000450
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009968
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000368
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000305
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000307
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000314
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000321
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000279
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000276
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000277
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000274
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995636
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04747
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000383
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009901
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000324
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000306
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000276
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000297
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000273
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995790
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04665
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000455
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009985
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000387
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000305
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000277
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000300
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000278
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000276
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000301
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995681
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04719
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000400
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009906
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000320
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000279
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000319
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000277
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000278
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000300
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000275
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995757
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04698
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000455
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009982
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000385
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000304
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000306
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000281
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000276
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000294
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000274
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995688
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04700
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000388
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009990
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000328
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000309
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000277
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000302
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000277
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000273
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995768
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04700
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000468
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009893
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000368
+ sendto fd=4 addr=172.18.45.36:53
+     31200100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000302
+ sendto fd=4 addr=172.18.45.36:53
+     31210100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000500
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     31220100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000276
+ sendto fd=4 addr=172.18.45.36:53
+     31230100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31240100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000d00
+     01.
+ sendto=33
+ +0.000275
+ sendto fd=4 addr=172.18.45.36:53
+     31250100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000321
+ sendto fd=4 addr=172.18.45.36:53
+     31260100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001000
+     01.
+ sendto=33
+ +0.000276
+ sendto fd=4 addr=172.18.45.36:53
+     31270100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31280100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     31290100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000200
+     01.
+ sendto=33
+ +0.000273
+ sendto fd=4 addr=172.18.45.36:53
+     312a0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000c00
+     01.
+ sendto=33
+ +0.000272
+ sendto fd=4 addr=172.18.45.36:53
+     312b0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=33
+ +0.000274
+ sendto fd=4 addr=172.18.45.36:53
+     312c0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00000600
+     01.
+ sendto=33
+ +0.000296
+ sendto fd=4 addr=172.18.45.36:53
+     312d0100 00010000 00000000 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=33
+ +0.000277
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995699
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04687
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000386
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009894
+ close fd=4
+ close=OK
+ +0.000779
diff --git a/regress/case-adh-cancel.err b/regress/case-adh-cancel.err
new file mode 100644 (file)
index 0000000..72d3373
--- /dev/null
@@ -0,0 +1,2 @@
+adns debug: using nameserver 172.18.45.6
+adns debug: reply not found, id 311f, query owner chiark.greenend.org.uk (NS=172.18.45.6)
diff --git a/regress/case-adh-cancel.out b/regress/case-adh-cancel.out
new file mode 100644 (file)
index 0000000..043c851
--- /dev/null
@@ -0,0 +1,2 @@
+davenant.relativity.greenend.org.uk A INET 172.18.45.6
+rc=0
diff --git a/regress/case-adh-cancel.sys b/regress/case-adh-cancel.sys
new file mode 100644 (file)
index 0000000..0c542a9
--- /dev/null
@@ -0,0 +1,73 @@
+./adnshost default -f
+
+ start 969124425.922896
+ socket type=SOCK_DGRAM
+ socket=6
+ +0.000162
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000058
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000035
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +0.000135
+ read fd=0 buflen=40
+ read=OK
+     2d2d6173 796e6368 2d696420 34320a63 68696172 6b2e6772 65656e65 6e642e6f
+     72672e75 6b0a2d2d.
+ +0.000254
+ sendto fd=6 addr=172.18.45.6:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000825
+ read fd=0 buflen=38
+ read=OK
+     6173796e 63682d69 64203433 0a646176 656e616e 742e7265 6c617469 76697479
+     2e677265 656e.
+ +0.000184
+ read fd=0 buflen=15
+ read=OK
+     656e642e 6f72672e 756b0a2d 2d6361.
+ +0.000106
+ sendto fd=6 addr=172.18.45.6:53
+     31200100 00010000 00000000 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01.
+ sendto=53
+ +0.000624
+ read fd=0 buflen=36
+ read=OK
+     6e63656c 2d696420 34320a.
+ +0.000145
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=1.999231
+ select=2 rfds=[0,6] wfds=[] efds=[]
+ +0.000157
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001 c00c0001 00010001 51800004 c3e04c84 08677265 656e656e
+     64036f72 6702756b 00000200 01000151 80001103 6e73300a 72656c61 74697669
+     7479c038 c0380002 00010001 51800006 036e7331 c057c053 00010001 00015180
+     0004ac12 2d06c070 00010001 00015180 0004ac12 2d01.
+ +0.000551
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010001 00020002 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01c00c00 01000100 01518000
+     04ac122d 060a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000200 01000151 80000603 6e7330c0 45c04500 02000100 01518000 06036e73
+     31c045c0 6b000100 01000151 800004ac 122d06c0 7d000100 01000151 800004ac
+     122d01.
+ +0.000579
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000151
+ read fd=0 buflen=40
+ read=OK
+     .
+ +0.000043
+ close fd=6
+ close=OK
+ +0.000961
diff --git a/regress/case-adh-cancel2.err b/regress/case-adh-cancel2.err
new file mode 100644 (file)
index 0000000..2886e3c
--- /dev/null
@@ -0,0 +1 @@
+adns debug: using nameserver 172.18.45.6
diff --git a/regress/case-adh-cancel2.out b/regress/case-adh-cancel2.out
new file mode 100644 (file)
index 0000000..ab3f8d1
--- /dev/null
@@ -0,0 +1 @@
+rc=0
diff --git a/regress/case-adh-cancel2.sys b/regress/case-adh-cancel2.sys
new file mode 100644 (file)
index 0000000..f954087
--- /dev/null
@@ -0,0 +1,59 @@
+./adnshost default -f
+
+ start 969124594.885114
+ socket type=SOCK_DGRAM
+ socket=6
+ +0.000160
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000057
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000035
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +6.-286734
+ read fd=0 buflen=40
+ read=OK
+     2d2d6173 796e6368 2d696420 34320a.
+ +0.000727
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +0.000147
+ read fd=0 buflen=40
+ read=OK
+     63686961 726b2e67 7265656e 656e642e 6f72672e 756b0a.
+ +0.000129
+ sendto fd=6 addr=172.18.45.6:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000802
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=1.999198
+ select=1 rfds=[0,6] wfds=[] efds=[]
+ +0.000135
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001 c00c0001 00010001 51800004 c3e04c84 08677265 656e656e
+     64036f72 6702756b 00000200 01000151 80001103 6e73300a 72656c61 74697669
+     7479c038 c0380002 00010001 51800006 036e7331 c057c053 00010001 00015180
+     0004ac12 2d06c070 00010001 00015180 0004ac12 2d01.
+ +0.000553
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000195
+ read fd=0 buflen=40
+ read=OK
+     2d2d6361 6e63656c 2d696420 34320a.
+ +0.000688
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +2.-11588
+ read fd=0 buflen=40
+ read=OK
+     .
+ +0.000089
+ close fd=6
+ close=OK
+ +0.000149
diff --git a/regress/case-adh-cancel3.err b/regress/case-adh-cancel3.err
new file mode 100644 (file)
index 0000000..d183cd5
--- /dev/null
@@ -0,0 +1,2 @@
+adns debug: using nameserver 172.18.45.6
+adns debug: server failure on unidentifiable query (NS=172.18.45.6)
diff --git a/regress/case-adh-cancel3.out b/regress/case-adh-cancel3.out
new file mode 100644 (file)
index 0000000..ab3f8d1
--- /dev/null
@@ -0,0 +1 @@
+rc=0
diff --git a/regress/case-adh-cancel3.sys b/regress/case-adh-cancel3.sys
new file mode 100644 (file)
index 0000000..736a9a4
--- /dev/null
@@ -0,0 +1,90 @@
+./adnshost default -f
+
+ start 969129578.690081
+ socket type=SOCK_DGRAM
+ socket=6
+ +0.000809
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000531
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000512
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +17.-461569
+ read fd=0 buflen=40
+ read=OK
+     2d2d6173 796e6368 2d696420 34320a.
+ +0.000686
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +0.000915
+ read fd=0 buflen=40
+ read=OK
+     2d692031 37322e33 302e3230 362e3134 0a.
+ +0.000583
+ sendto fd=6 addr=172.18.45.6:53
+     311f0100 00010000 00000000 02313403 32303602 33300331 37320769 6e2d6164
+     64720461 72706100 000c0001.
+ sendto=44
+ +0.001629
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=1.998371
+ select=1 rfds=[6] wfds=[] efds=[]
+ +0.000910
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00010001 02313403 32303602 33300331 37320769 6e2d6164
+     64720461 72706100 000c0001 c00c000c 00010000 003c002a 06323036 2d31340b
+     62726f6b 656e2d7a 6f6e6504 74657374 0763756c 74757265 05646f74 61740261
+     74000332 30360233 30033137 3207696e 2d616464 72046172 70610000 02000100
+     00003c00 20036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00c08500 01000100 01518000 04ac122d 06.
+ +0.001417
+ sendto fd=6 addr=172.18.45.6:53
+     31200100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.001988
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000537
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=1.996058
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-05146
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=0.001204
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009951
+ sendto fd=6 addr=172.18.45.6:53
+     31200100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.001141
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=1.998859
+ select=1 rfds=[0] wfds=[] efds=[]
+ +0.551215
+ read fd=0 buflen=40
+ read=OK
+     2d2d6361 6e63656c 2d696420 34320a.
+ +0.000599
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=null
+ select=1 rfds=[6] wfds=[] efds=[]
+ +42.-794672
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208182 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ +0.000986
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.003836
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +6.662470
+ read fd=0 buflen=40
+ read=OK
+     .
+ +0.000545
+ close fd=6
+ close=OK
+ +0.000686
diff --git a/regress/case-adh-norm.err b/regress/case-adh-norm.err
new file mode 100644 (file)
index 0000000..2886e3c
--- /dev/null
@@ -0,0 +1 @@
+adns debug: using nameserver 172.18.45.6
diff --git a/regress/case-adh-norm.out b/regress/case-adh-norm.out
new file mode 100644 (file)
index 0000000..662ff60
--- /dev/null
@@ -0,0 +1,2 @@
+chiark.greenend.org.uk A INET 195.224.76.132
+rc=0
diff --git a/regress/case-adh-norm.sys b/regress/case-adh-norm.sys
new file mode 100644 (file)
index 0000000..672908f
--- /dev/null
@@ -0,0 +1,34 @@
+./adnshost default
+chiark.greenend.org.uk
+ start 969122933.609498
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000155
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000057
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000037
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000827
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999173
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000158
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001 c00c0001 00010001 51800004 c3e04c84 08677265 656e656e
+     64036f72 6702756b 00000200 01000151 80001103 6e73300a 72656c61 74697669
+     7479c038 c0380002 00010001 51800006 036e7331 c057c053 00010001 00015180
+     0004ac12 2d06c070 00010001 00015180 0004ac12 2d01.
+ +0.000895
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000149
+ close fd=4
+ close=OK
+ +0.000290
diff --git a/regress/case-adh-pipe.err b/regress/case-adh-pipe.err
new file mode 100644 (file)
index 0000000..2886e3c
--- /dev/null
@@ -0,0 +1 @@
+adns debug: using nameserver 172.18.45.6
diff --git a/regress/case-adh-pipe.out b/regress/case-adh-pipe.out
new file mode 100644 (file)
index 0000000..662ff60
--- /dev/null
@@ -0,0 +1,2 @@
+chiark.greenend.org.uk A INET 195.224.76.132
+rc=0
diff --git a/regress/case-adh-pipe.sys b/regress/case-adh-pipe.sys
new file mode 100644 (file)
index 0000000..320720a
--- /dev/null
@@ -0,0 +1,48 @@
+./adnshost default -f
+
+ start 969123801.904882
+ socket type=SOCK_DGRAM
+ socket=6
+ +0.000156
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000057
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000035
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +4.-792858
+ read fd=0 buflen=40
+ read=OK
+     63686961 726b2e67 7265656e 656e642e 6f72672e 756b0a.
+ +0.000235
+ sendto fd=6 addr=172.18.45.6:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000847
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=1.999153
+ select=1 rfds=[6] wfds=[] efds=[]
+ +0.000140
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001 c00c0001 00010001 51800004 c3e04c84 08677265 656e656e
+     64036f72 6702756b 00000200 01000151 80001103 6e73300a 72656c61 74697669
+     7479c038 c0380002 00010001 51800006 036e7331 c057c053 00010001 00015180
+     0004ac12 2d06c070 00010001 00015180 0004ac12 2d01.
+ +0.000548
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000184
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +0.715699
+ read fd=0 buflen=40
+ read=OK
+     .
+ +0.000090
+ close fd=6
+ close=OK
+ +0.000134
diff --git a/regress/case-alr-norm.err b/regress/case-alr-norm.err
new file mode 100644 (file)
index 0000000..eef3299
--- /dev/null
@@ -0,0 +1,29 @@
+adns debug: using nameserver 172.18.45.6
+adnslogres: submitting 172.18.45.1 -> 1.45.18.172.in-addr.arpa.
+adnslogres: 1 in queue; checking 172.18.45.1
+adnslogres: submitting 127.0.0.1 -> 1.0.0.127.in-addr.arpa.
+adnslogres: 1 in queue; checking 127.0.0.1
+adnslogres: submitting 172.30.206.14 -> 14.206.30.172.in-addr.arpa.
+adnslogres: 1 in queue; checking 172.30.206.14
+adnslogres: submitting 127.0.0.1 -> 1.0.0.127.in-addr.arpa.
+adnslogres: 2 in queue; checking 172.30.206.14
+adnslogres: submitting 172.18.45.3 -> 3.45.18.172.in-addr.arpa.
+adnslogres: 3 in queue; checking 172.30.206.14
+adnslogres: submitting 172.18.45.1 -> 1.45.18.172.in-addr.arpa.
+adnslogres: 4 in queue; checking 172.30.206.14
+adnslogres: submitting 172.18.45.8 -> 8.45.18.172.in-addr.arpa.
+adnslogres: 5 in queue; checking 172.30.206.14
+adnslogres: submitting 172.18.45.1 -> 1.45.18.172.in-addr.arpa.
+adnslogres: 6 in queue; checking 172.30.206.14
+adnslogres: submitting 172.18.45.1 -> 1.45.18.172.in-addr.arpa.
+adnslogres: 7 in queue; checking 172.30.206.14
+adnslogres: submitting 172.18.45.6 -> 6.45.18.172.in-addr.arpa.
+adnslogres: 8 in queue; checking 172.30.206.14
+adnslogres: 8 in queue; checking 172.30.206.14
+adnslogres: 7 in queue; checking 127.0.0.1
+adnslogres: 6 in queue; checking 172.18.45.3
+adnslogres: 5 in queue; checking 172.18.45.1
+adnslogres: 4 in queue; checking 172.18.45.8
+adnslogres: 3 in queue; checking 172.18.45.1
+adnslogres: 2 in queue; checking 172.18.45.1
+adnslogres: 1 in queue; checking 172.18.45.6
diff --git a/regress/case-alr-norm.in b/regress/case-alr-norm.in
new file mode 100644 (file)
index 0000000..721f071
--- /dev/null
@@ -0,0 +1,10 @@
+172.18.45.1 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/main/source/Release HTTP/1.0" 304 -
+127.0.0.1 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/contrib/source/Sources.gz HTTP/1.0" 304 -
+172.30.206.14 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/contrib/source/Release HTTP/1.0" 304 -
+127.0.0.1 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/non-free/source/Sources.gz HTTP/1.0" 304 -
+172.18.45.3 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/non-free/source/Release HTTP/1.0" 304 -
+172.18.45.1 - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79-3potato1.dsc HTTP/1.0" 200 604
+172.18.45.8 - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79.orig.tar.gz HTTP/1.0" 200 34886
+172.18.45.1 - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79.orig.tar.gz HTTP/1.0" 200 34886
+172.18.45.1 - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79-3potato1.diff.gz HTTP/1.0" 200 7962
+172.18.45.6 - - [16/Sep/2000:18:35:15 +0100] "GET / HTTP/1.0" 304 -
diff --git a/regress/case-alr-norm.out b/regress/case-alr-norm.out
new file mode 100644 (file)
index 0000000..0c5a1d8
--- /dev/null
@@ -0,0 +1,11 @@
+sfere.relativity.greenend.org.uk - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/main/source/Release HTTP/1.0" 304 -
+localhost - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/contrib/source/Sources.gz HTTP/1.0" 304 -
+172.30.206.14 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/contrib/source/Release HTTP/1.0" 304 -
+localhost - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/non-free/source/Sources.gz HTTP/1.0" 304 -
+172.18.45.3 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/non-free/source/Release HTTP/1.0" 304 -
+sfere.relativity.greenend.org.uk - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79-3potato1.dsc HTTP/1.0" 200 604
+kadath.relativity.greenend.org.uk - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79.orig.tar.gz HTTP/1.0" 200 34886
+sfere.relativity.greenend.org.uk - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79.orig.tar.gz HTTP/1.0" 200 34886
+sfere.relativity.greenend.org.uk - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79-3potato1.diff.gz HTTP/1.0" 200 7962
+davenant.relativity.greenend.org.uk - - [16/Sep/2000:18:35:15 +0100] "GET / HTTP/1.0" 304 -
+rc=0
diff --git a/regress/case-alr-norm.sys b/regress/case-alr-norm.sys
new file mode 100644 (file)
index 0000000..6bb0eda
--- /dev/null
@@ -0,0 +1,475 @@
+./adnslogres default
+
+ start 969140608.116717
+ socket type=SOCK_DGRAM
+ socket=6
+ +0.000127
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000061
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000037
+ sendto fd=6 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.001715
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00020002 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00220573 66657265 0a72656c
+     61746976 69747908 67726565 6e656e64 036f7267 02756b00 02343502 31380331
+     37320769 6e2d6164 64720461 72706100 00020001 00015180 0006036e 7330c03c
+     c0580002 00010001 51800006 036e7331 c03cc07a 00010001 00015180 0004ac12
+     2d06c08c 00010001 00015180 0004ac12 2d01.
+ +0.000718
+ sendto fd=6 addr=172.18.45.6:53
+     31200100 00010000 00000000 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=50
+ +0.000790
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010001 00020002 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001c00c 00010001 00015180 0004ac12
+     2d010a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000002
+     00010001 51800006 036e7330 c042c042 00020001 00015180 0006036e 7331c042
+     c0680001 00010001 51800004 ac122d06 c07a0001 00010001 51800004 ac122d01.
+ +0.000564
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000109
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000093
+ sendto fd=6 addr=172.18.45.6:53
+     31210100 00010000 00000000 01310130 01300331 32370769 6e2d6164 64720461
+     72706100 000c0001.
+ sendto=40
+ +0.000753
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010001 00010001 01310130 01300331 32370769 6e2d6164 64720461
+     72706100 000c0001 c00c000c 00010009 3a80000b 096c6f63 616c686f 73740003
+     31323707 696e2d61 64647204 61727061 00000200 0100093a 800002c0 34c03400
+     01000100 093a8000 047f0000 01.
+ +0.000417
+ sendto fd=6 addr=172.18.45.6:53
+     31220100 00010000 00000000 096c6f63 616c686f 73740000 010001.
+ sendto=27
+ +0.000530
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228580 00010001 00010001 096c6f63 616c686f 73740000 010001c0 0c000100
+     0100093a 8000047f 000001c0 0c000200 0100093a 800002c0 0cc00c00 01000100
+     093a8000 047f0000 01.
+ +0.000306
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000089
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000088
+ sendto fd=6 addr=172.18.45.6:53
+     31230100 00010000 00000000 02313403 32303602 33300331 37320769 6e2d6164
+     64720461 72706100 000c0001.
+ sendto=44
+ +0.000689
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238580 00010001 00010001 02313403 32303602 33300331 37320769 6e2d6164
+     64720461 72706100 000c0001 c00c000c 00010000 003c002a 06323036 2d31340b
+     62726f6b 656e2d7a 6f6e6504 74657374 0763756c 74757265 05646f74 61740261
+     74000332 30360233 30033137 3207696e 2d616464 72046172 70610000 02000100
+     00003c00 20036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00c08500 01000100 01518000 04ac122d 06.
+ +0.000622
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.001722
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000087
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000205
+ sendto fd=6 addr=172.18.45.6:53
+     31250100 00010000 00000000 01310130 01300331 32370769 6e2d6164 64720461
+     72706100 000c0001.
+ sendto=40
+ +0.000699
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258580 00010001 00010001 01310130 01300331 32370769 6e2d6164 64720461
+     72706100 000c0001 c00c000c 00010009 3a80000b 096c6f63 616c686f 73740003
+     31323707 696e2d61 64647204 61727061 00000200 0100093a 800002c0 34c03400
+     01000100 093a8000 047f0000 01.
+ +0.000420
+ sendto fd=6 addr=172.18.45.6:53
+     31260100 00010000 00000000 096c6f63 616c686f 73740000 010001.
+ sendto=27
+ +0.000532
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268580 00010001 00010001 096c6f63 616c686f 73740000 010001c0 0c000100
+     0100093a 8000047f 000001c0 0c000200 0100093a 800002c0 0cc00c00 01000100
+     093a8000 047f0000 01.
+ +0.000307
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000094
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000187
+ sendto fd=6 addr=172.18.45.6:53
+     31270100 00010000 00000000 01330234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000634
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278583 00010000 00010000 01330234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 00010234 35023138 03313732 07696e2d 61646472 04617270
+     61000006 00010001 51800041 036e7330 0a72656c 61746976 69747908 67726565
+     6e656e64 036f7267 02756b00 0a686f73 746d6173 746572c0 50000000 2800001c
+     2000000e 1000093a 80000151 80.
+ +0.000506
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000099
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000184
+ sendto fd=6 addr=172.18.45.6:53
+     31280100 00010000 00000000 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000711
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288580 00010001 00020002 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00220573 66657265 0a72656c
+     61746976 69747908 67726565 6e656e64 036f7267 02756b00 02343502 31380331
+     37320769 6e2d6164 64720461 72706100 00020001 00015180 0006036e 7330c03c
+     c0580002 00010001 51800006 036e7331 c03cc07a 00010001 00015180 0004ac12
+     2d06c08c 00010001 00015180 0004ac12 2d01.
+ +0.000624
+ sendto fd=6 addr=172.18.45.6:53
+     31290100 00010000 00000000 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=50
+ +0.000748
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298580 00010001 00020002 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001c00c 00010001 00015180 0004ac12
+     2d010a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000002
+     00010001 51800006 036e7330 c042c042 00020001 00015180 0006036e 7331c042
+     c0680001 00010001 51800004 ac122d06 c07a0001 00010001 51800004 ac122d01.
+ +0.000564
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000106
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000192
+ sendto fd=6 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01380234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.001229
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8580 00010001 00020002 01380234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 0023066b 61646174 680a7265
+     6c617469 76697479 08677265 656e656e 64036f72 6702756b 00023435 02313803
+     31373207 696e2d61 64647204 61727061 00000200 01000151 80000603 6e7330c0
+     3dc05900 02000100 01518000 06036e73 31c03dc0 7b000100 01000151 800004ac
+     122d06c0 8d000100 01000151 800004ac 122d01.
+ +0.000628
+ sendto fd=6 addr=172.18.45.6:53
+     312b0100 00010000 00000000 066b6164 6174680a 72656c61 74697669 74790867
+     7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=51
+ +0.000678
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8580 00010001 00020002 066b6164 6174680a 72656c61 74697669 74790867
+     7265656e 656e6403 6f726702 756b0000 010001c0 0c000100 01000151 800004ac
+     122d080a 72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000
+     02000100 01518000 06036e73 30c043c0 43000200 01000151 80000603 6e7331c0
+     43c06900 01000100 01518000 04ac122d 06c07b00 01000100 01518000 04ac122d
+     01.
+ +0.000565
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000127
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000202
+ sendto fd=6 addr=172.18.45.6:53
+     312c0100 00010000 00000000 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.001807
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8580 00010001 00020002 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00220573 66657265 0a72656c
+     61746976 69747908 67726565 6e656e64 036f7267 02756b00 02343502 31380331
+     37320769 6e2d6164 64720461 72706100 00020001 00015180 0006036e 7330c03c
+     c0580002 00010001 51800006 036e7331 c03cc07a 00010001 00015180 0004ac12
+     2d06c08c 00010001 00015180 0004ac12 2d01.
+ +0.000626
+ sendto fd=6 addr=172.18.45.6:53
+     312d0100 00010000 00000000 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=50
+ +0.000658
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8580 00010001 00020002 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001c00c 00010001 00015180 0004ac12
+     2d010a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000002
+     00010001 51800006 036e7330 c042c042 00020001 00015180 0006036e 7331c042
+     c0680001 00010001 51800004 ac122d06 c07a0001 00010001 51800004 ac122d01.
+ +0.000577
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000107
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000197
+ sendto fd=6 addr=172.18.45.6:53
+     312e0100 00010000 00000000 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000710
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312e8580 00010001 00020002 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00220573 66657265 0a72656c
+     61746976 69747908 67726565 6e656e64 036f7267 02756b00 02343502 31380331
+     37320769 6e2d6164 64720461 72706100 00020001 00015180 0006036e 7330c03c
+     c0580002 00010001 51800006 036e7331 c03cc07a 00010001 00015180 0004ac12
+     2d06c08c 00010001 00015180 0004ac12 2d01.
+ +0.000620
+ sendto fd=6 addr=172.18.45.6:53
+     312f0100 00010000 00000000 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=50
+ +0.000670
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312f8580 00010001 00020002 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001c00c 00010001 00015180 0004ac12
+     2d010a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000002
+     00010001 51800006 036e7330 c042c042 00020001 00015180 0006036e 7331c042
+     c0680001 00010001 51800004 ac122d06 c07a0001 00010001 51800004 ac122d01.
+ +0.000559
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000103
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000233
+ sendto fd=6 addr=172.18.45.6:53
+     31300100 00010000 00000000 01360234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000750
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31308580 00010001 00020002 01360234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00250864 6176656e 616e740a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0002 34350231
+     38033137 3207696e 2d616464 72046172 70610000 02000100 01518000 06036e73
+     30c03fc0 5b000200 01000151 80000603 6e7331c0 3fc07d00 01000100 01518000
+     04ac122d 06c08f00 01000100 01518000 04ac122d 01.
+ +0.000629
+ sendto fd=6 addr=172.18.45.6:53
+     31310100 00010000 00000000 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01.
+ sendto=53
+ +0.000663
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31318580 00010001 00020002 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01c00c00 01000100 01518000
+     04ac122d 060a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000200 01000151 80000603 6e7330c0 45c04500 02000100 01518000 06036e73
+     31c045c0 6b000100 01000151 800004ac 122d06c0 7d000100 01000151 800004ac
+     122d01.
+ +0.000568
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000135
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000191
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.977525
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-23059
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000584
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010000
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000486
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999514
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00572
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000086
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009958
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000479
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999521
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00545
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000066
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009996
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000496
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999504
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00576
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000080
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009954
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000461
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999539
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00527
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000066
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009999
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000493
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999507
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00574
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000081
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009952
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000509
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999491
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00575
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000066
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009998
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000559
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999441
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00607
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000048
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009927
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000496
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999504
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00576
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000080
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010004
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000483
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999517
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00587
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000104
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010011
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000494
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999506
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00549
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000055
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009922
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000477
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999523
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00552
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000075
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010061
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000476
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999524
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00617
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000141
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009958
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000464
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999536
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00542
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000078
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010010
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000440
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999560
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00527
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000087
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009959
+ close fd=6
+ close=OK
+ +0.002651
diff --git a/regress/case-alr-slow.err b/regress/case-alr-slow.err
new file mode 100644 (file)
index 0000000..03cdbbb
--- /dev/null
@@ -0,0 +1,27 @@
+adns debug: using nameserver 172.18.45.6
+adnslogres: submitting 172.18.45.1 -> 1.45.18.172.in-addr.arpa.
+adnslogres: 1 in queue; checking 172.18.45.1
+adnslogres: submitting 127.0.0.1 -> 1.0.0.127.in-addr.arpa.
+adnslogres: 1 in queue; checking 127.0.0.1
+adnslogres: submitting 172.30.206.14 -> 14.206.30.172.in-addr.arpa.
+adnslogres: 1 in queue; checking 172.30.206.14
+adnslogres: submitting 127.0.0.1 -> 1.0.0.127.in-addr.arpa.
+adnslogres: 2 in queue; checking 172.30.206.14
+adnslogres: submitting 172.18.45.3 -> 3.45.18.172.in-addr.arpa.
+adnslogres: 3 in queue; checking 172.30.206.14
+adnslogres: submitting 172.18.45.1 -> 1.45.18.172.in-addr.arpa.
+adnslogres: 4 in queue; checking 172.30.206.14
+adnslogres: 3 in queue; checking 127.0.0.1
+adnslogres: 2 in queue; checking 172.18.45.3
+adnslogres: 1 in queue; checking 172.18.45.1
+adnslogres: submitting 172.18.45.8 -> 8.45.18.172.in-addr.arpa.
+adnslogres: 1 in queue; checking 172.18.45.8
+adnslogres: submitting 172.18.45.1 -> 1.45.18.172.in-addr.arpa.
+adnslogres: 2 in queue; checking 172.18.45.8
+adnslogres: submitting 172.18.45.1 -> 1.45.18.172.in-addr.arpa.
+adnslogres: 3 in queue; checking 172.18.45.8
+adnslogres: submitting 172.18.45.6 -> 6.45.18.172.in-addr.arpa.
+adnslogres: 4 in queue; checking 172.18.45.8
+adnslogres: 3 in queue; checking 172.18.45.1
+adnslogres: 2 in queue; checking 172.18.45.1
+adnslogres: 1 in queue; checking 172.18.45.6
diff --git a/regress/case-alr-slow.in b/regress/case-alr-slow.in
new file mode 100644 (file)
index 0000000..721f071
--- /dev/null
@@ -0,0 +1,10 @@
+172.18.45.1 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/main/source/Release HTTP/1.0" 304 -
+127.0.0.1 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/contrib/source/Sources.gz HTTP/1.0" 304 -
+172.30.206.14 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/contrib/source/Release HTTP/1.0" 304 -
+127.0.0.1 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/non-free/source/Sources.gz HTTP/1.0" 304 -
+172.18.45.3 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/non-free/source/Release HTTP/1.0" 304 -
+172.18.45.1 - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79-3potato1.dsc HTTP/1.0" 200 604
+172.18.45.8 - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79.orig.tar.gz HTTP/1.0" 200 34886
+172.18.45.1 - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79.orig.tar.gz HTTP/1.0" 200 34886
+172.18.45.1 - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79-3potato1.diff.gz HTTP/1.0" 200 7962
+172.18.45.6 - - [16/Sep/2000:18:35:15 +0100] "GET / HTTP/1.0" 304 -
diff --git a/regress/case-alr-slow.out b/regress/case-alr-slow.out
new file mode 100644 (file)
index 0000000..0c5a1d8
--- /dev/null
@@ -0,0 +1,11 @@
+sfere.relativity.greenend.org.uk - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/main/source/Release HTTP/1.0" 304 -
+localhost - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/contrib/source/Sources.gz HTTP/1.0" 304 -
+172.30.206.14 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/contrib/source/Release HTTP/1.0" 304 -
+localhost - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/non-free/source/Sources.gz HTTP/1.0" 304 -
+172.18.45.3 - - [13/Sep/2000:23:00:26 +0100] "GET /mirror/debian-non-us/dists/stable/non-US/non-free/source/Release HTTP/1.0" 304 -
+sfere.relativity.greenend.org.uk - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79-3potato1.dsc HTTP/1.0" 200 604
+kadath.relativity.greenend.org.uk - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79.orig.tar.gz HTTP/1.0" 200 34886
+sfere.relativity.greenend.org.uk - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79.orig.tar.gz HTTP/1.0" 200 34886
+sfere.relativity.greenend.org.uk - - [13/Sep/2000:23:01:01 +0100] "GET /mirror/debian-ftp/dists/potato/main/source/devel/cvsweb_1.79-3potato1.diff.gz HTTP/1.0" 200 7962
+davenant.relativity.greenend.org.uk - - [16/Sep/2000:18:35:15 +0100] "GET / HTTP/1.0" 304 -
+rc=0
diff --git a/regress/case-alr-slow.sys b/regress/case-alr-slow.sys
new file mode 100644 (file)
index 0000000..7479a2a
--- /dev/null
@@ -0,0 +1,490 @@
+./adnslogres default
+-c4
+ start 969140728.042464
+ socket type=SOCK_DGRAM
+ socket=6
+ +0.000132
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000055
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000036
+ sendto fd=6 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.001699
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00020002 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00220573 66657265 0a72656c
+     61746976 69747908 67726565 6e656e64 036f7267 02756b00 02343502 31380331
+     37320769 6e2d6164 64720461 72706100 00020001 00015180 0006036e 7330c03c
+     c0580002 00010001 51800006 036e7331 c03cc07a 00010001 00015180 0004ac12
+     2d06c08c 00010001 00015180 0004ac12 2d01.
+ +0.000712
+ sendto fd=6 addr=172.18.45.6:53
+     31200100 00010000 00000000 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=50
+ +0.000793
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010001 00020002 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001c00c 00010001 00015180 0004ac12
+     2d010a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000002
+     00010001 51800006 036e7330 c042c042 00020001 00015180 0006036e 7331c042
+     c0680001 00010001 51800004 ac122d06 c07a0001 00010001 51800004 ac122d01.
+ +0.000563
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000114
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000088
+ sendto fd=6 addr=172.18.45.6:53
+     31210100 00010000 00000000 01310130 01300331 32370769 6e2d6164 64720461
+     72706100 000c0001.
+ sendto=40
+ +0.000861
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010001 00010001 01310130 01300331 32370769 6e2d6164 64720461
+     72706100 000c0001 c00c000c 00010009 3a80000b 096c6f63 616c686f 73740003
+     31323707 696e2d61 64647204 61727061 00000200 0100093a 800002c0 34c03400
+     01000100 093a8000 047f0000 01.
+ +0.000418
+ sendto fd=6 addr=172.18.45.6:53
+     31220100 00010000 00000000 096c6f63 616c686f 73740000 010001.
+ sendto=27
+ +0.000544
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228580 00010001 00010001 096c6f63 616c686f 73740000 010001c0 0c000100
+     0100093a 8000047f 000001c0 0c000200 0100093a 800002c0 0cc00c00 01000100
+     093a8000 047f0000 01.
+ +0.000304
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000093
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000085
+ sendto fd=6 addr=172.18.45.6:53
+     31230100 00010000 00000000 02313403 32303602 33300331 37320769 6e2d6164
+     64720461 72706100 000c0001.
+ sendto=44
+ +0.000662
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238580 00010001 00010001 02313403 32303602 33300331 37320769 6e2d6164
+     64720461 72706100 000c0001 c00c000c 00010000 003c002a 06323036 2d31340b
+     62726f6b 656e2d7a 6f6e6504 74657374 0763756c 74757265 05646f74 61740261
+     74000332 30360233 30033137 3207696e 2d616464 72046172 70610000 02000100
+     00003c00 20036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00c08500 01000100 01518000 04ac122d 06.
+ +0.000619
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000988
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000073
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000105
+ sendto fd=6 addr=172.18.45.6:53
+     31250100 00010000 00000000 01310130 01300331 32370769 6e2d6164 64720461
+     72706100 000c0001.
+ sendto=40
+ +0.001370
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258580 00010001 00010001 01310130 01300331 32370769 6e2d6164 64720461
+     72706100 000c0001 c00c000c 00010009 3a80000b 096c6f63 616c686f 73740003
+     31323707 696e2d61 64647204 61727061 00000200 0100093a 800002c0 34c03400
+     01000100 093a8000 047f0000 01.
+ +0.000427
+ sendto fd=6 addr=172.18.45.6:53
+     31260100 00010000 00000000 096c6f63 616c686f 73740000 010001.
+ sendto=27
+ +0.000576
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268580 00010001 00010001 096c6f63 616c686f 73740000 010001c0 0c000100
+     0100093a 8000047f 000001c0 0c000200 0100093a 800002c0 0cc00c00 01000100
+     093a8000 047f0000 01.
+ +0.000307
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000094
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000085
+ sendto fd=6 addr=172.18.45.6:53
+     31270100 00010000 00000000 01330234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000604
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278583 00010000 00010000 01330234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 00010234 35023138 03313732 07696e2d 61646472 04617270
+     61000006 00010001 51800041 036e7330 0a72656c 61746976 69747908 67726565
+     6e656e64 036f7267 02756b00 0a686f73 746d6173 746572c0 50000000 2800001c
+     2000000e 1000093a 80000151 80.
+ +0.000502
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000088
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000077
+ sendto fd=6 addr=172.18.45.6:53
+     31280100 00010000 00000000 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000682
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288580 00010001 00020002 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00220573 66657265 0a72656c
+     61746976 69747908 67726565 6e656e64 036f7267 02756b00 02343502 31380331
+     37320769 6e2d6164 64720461 72706100 00020001 00015180 0006036e 7330c03c
+     c0580002 00010001 51800006 036e7331 c03cc07a 00010001 00015180 0004ac12
+     2d06c08c 00010001 00015180 0004ac12 2d01.
+ +0.000618
+ sendto fd=6 addr=172.18.45.6:53
+     31290100 00010000 00000000 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=50
+ +0.000791
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298580 00010001 00020002 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001c00c 00010001 00015180 0004ac12
+     2d010a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000002
+     00010001 51800006 036e7330 c042c042 00020001 00015180 0006036e 7331c042
+     c0680001 00010001 51800004 ac122d06 c07a0001 00010001 51800004 ac122d01.
+ +0.000561
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000108
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.991325
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00943
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000465
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999535
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00565
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000100
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010007
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000452
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999548
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00527
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000075
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009951
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000482
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999518
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00551
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000069
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009997
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000470
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999530
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00493
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000023
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009900
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000440
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999560
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00521
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000081
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010009
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000453
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999547
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00538
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000085
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009962
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000465
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999535
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00544
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000079
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010006
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000434
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999566
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00522
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000088
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009963
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000449
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999551
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00525
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000076
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010006
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000443
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999557
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00530
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000087
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009961
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000461
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999539
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00539
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000078
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010006
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000485
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999515
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00404
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000584
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999416
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.019228
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 06323036 2d31340b 62726f6b 656e2d7a 6f6e6504
+     74657374 0763756c 74757265 05646f74 61740261 74000001 0001.
+ sendto=58
+ +0.000586
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.999414
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00751
+ select max=7 rfds=[6] wfds=[] efds=[] to=0.000165
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009979
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000185
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000085
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000118
+ sendto fd=6 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01380234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000517
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000061
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000075
+ sendto fd=6 addr=172.18.45.6:53
+     312b0100 00010000 00000000 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000277
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000056
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000071
+ sendto fd=6 addr=172.18.45.6:53
+     312c0100 00010000 00000000 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000277
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000057
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000244
+ sendto fd=6 addr=172.18.45.6:53
+     312d0100 00010000 00000000 01360234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000290
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000058
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.998017
+ select=1 rfds=[6] wfds=[] efds=[]
+ +0.001322
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8580 00010001 00020002 01380234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 0023066b 61646174 680a7265
+     6c617469 76697479 08677265 656e656e 64036f72 6702756b 00023435 02313803
+     31373207 696e2d61 64647204 61727061 00000200 01000151 80000603 6e7330c0
+     3dc05900 02000100 01518000 06036e73 31c03dc0 7b000100 01000151 800004ac
+     122d06c0 8d000100 01000151 800004ac 122d01.
+ +0.000775
+ sendto fd=6 addr=172.18.45.6:53
+     312e0100 00010000 00000000 066b6164 6174680a 72656c61 74697669 74790867
+     7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=51
+ +0.000366
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8580 00010001 00020002 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00220573 66657265 0a72656c
+     61746976 69747908 67726565 6e656e64 036f7267 02756b00 02343502 31380331
+     37320769 6e2d6164 64720461 72706100 00020001 00015180 0006036e 7330c03c
+     c0580002 00010001 51800006 036e7331 c03cc07a 00010001 00015180 0004ac12
+     2d06c08c 00010001 00015180 0004ac12 2d01.
+ +0.000770
+ sendto fd=6 addr=172.18.45.6:53
+     312f0100 00010000 00000000 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=50
+ +0.000328
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8580 00010001 00020002 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00220573 66657265 0a72656c
+     61746976 69747908 67726565 6e656e64 036f7267 02756b00 02343502 31380331
+     37320769 6e2d6164 64720461 72706100 00020001 00015180 0006036e 7330c03c
+     c0580002 00010001 51800006 036e7331 c03cc07a 00010001 00015180 0004ac12
+     2d06c08c 00010001 00015180 0004ac12 2d01.
+ +0.000766
+ sendto fd=6 addr=172.18.45.6:53
+     31300100 00010000 00000000 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=50
+ +0.000326
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8580 00010001 00020002 01360234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00250864 6176656e 616e740a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0002 34350231
+     38033137 3207696e 2d616464 72046172 70610000 02000100 01518000 06036e73
+     30c03fc0 5b000200 01000151 80000603 6e7331c0 3fc07d00 01000100 01518000
+     04ac122d 06c08f00 01000100 01518000 04ac122d 01.
+ +0.000605
+ sendto fd=6 addr=172.18.45.6:53
+     31310100 00010000 00000000 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01.
+ sendto=53
+ +0.000473
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000073
+ select max=7 rfds=[6] wfds=[] efds=[] to=1.995518
+ select=1 rfds=[6] wfds=[] efds=[]
+ +0.001210
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312e8580 00010001 00020002 066b6164 6174680a 72656c61 74697669 74790867
+     7265656e 656e6403 6f726702 756b0000 010001c0 0c000100 01000151 800004ac
+     122d080a 72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000
+     02000100 01518000 06036e73 30c043c0 43000200 01000151 80000603 6e7331c0
+     43c06900 01000100 01518000 04ac122d 06c07b00 01000100 01518000 04ac122d
+     01.
+ +0.000754
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312f8580 00010001 00020002 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001c00c 00010001 00015180 0004ac12
+     2d010a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000002
+     00010001 51800006 036e7330 c042c042 00020001 00015180 0006036e 7331c042
+     c0680001 00010001 51800004 ac122d06 c07a0001 00010001 51800004 ac122d01.
+ +0.000613
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31308580 00010001 00020002 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001c00c 00010001 00015180 0004ac12
+     2d010a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000002
+     00010001 51800006 036e7330 c042c042 00020001 00015180 0006036e 7331c042
+     c0680001 00010001 51800004 ac122d06 c07a0001 00010001 51800004 ac122d01.
+ +0.000633
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31318580 00010001 00020002 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01c00c00 01000100 01518000
+     04ac122d 060a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000200 01000151 80000603 6e7330c0 45c04500 02000100 01518000 06036e73
+     31c045c0 6b000100 01000151 800004ac 122d06c0 7d000100 01000151 800004ac
+     122d01.
+ +0.000596
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000128
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000108
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000082
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000080
+ close fd=6
+ close=OK
+ +0.000176
diff --git a/regress/case-arf-norm.err b/regress/case-arf-norm.err
new file mode 100644 (file)
index 0000000..ab73542
--- /dev/null
@@ -0,0 +1,2 @@
+adns debug: using nameserver 172.18.45.6
+adns test harness: memory leaked: 11(12) 24(76) 31(12) 43(48) 48(12) 60(72) 65(12) 77(72)
diff --git a/regress/case-arf-norm.out b/regress/case-arf-norm.out
new file mode 100644 (file)
index 0000000..ab3f8d1
--- /dev/null
@@ -0,0 +1 @@
+rc=0
diff --git a/regress/case-arf-norm.sys b/regress/case-arf-norm.sys
new file mode 100644 (file)
index 0000000..f3bbf13
--- /dev/null
@@ -0,0 +1,324 @@
+./adnsresfilter default
+
+ start 969138236.380176
+ fcntl fd=0 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000136
+ fcntl fd=0 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000047
+ fcntl fd=1 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000034
+ fcntl fd=1 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000034
+ socket type=SOCK_DGRAM
+ socket=6
+ +0.004723
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000048
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000041
+ select max=2 rfds=[0] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +3.476363
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000178
+ read fd=0 buflen=512
+ read=OK
+     736f6d65 206f7264 696e6172 79207465 78740a.
+ +0.000149
+ write fd=1
+     736f6d65 206f7264 696e6172 79207465 78740a.
+ write=19
+ +0.000594
+ select max=2 rfds=[0] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +1.-12312
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000119
+ read fd=0 buflen=512
+ read=OK
+     616e2069 70206164 64726573 73206174 20656f6c 20313732 2e31382e 34352e36
+     0a.
+ +0.000185
+ sendto fd=6 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01360234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000902
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00020002 01360234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00250864 6176656e 616e740a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0002 34350231
+     38033137 3207696e 2d616464 72046172 70610000 02000100 01518000 06036e73
+     30c03fc0 5b000200 01000151 80000603 6e7331c0 3fc07d00 01000100 01518000
+     04ac122d 06c08f00 01000100 01518000 04ac122d 01.
+ +0.000707
+ sendto fd=6 addr=172.18.45.6:53
+     31200100 00010000 00000000 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01.
+ sendto=53
+ +0.000758
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010001 00020002 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01c00c00 01000100 01518000
+     04ac122d 060a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000200 01000151 80000603 6e7330c0 45c04500 02000100 01518000 06036e73
+     31c045c0 6b000100 01000151 800004ac 122d06c0 7d000100 01000151 800004ac
+     122d01.
+ +0.000572
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000146
+ write fd=1
+     616e2069 70206164 64726573 73206174 20656f6c 20.
+ write=21
+ +0.000426
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=0.996185
+ select=0 rfds=[] wfds=[] efds=[]
+ +1.-05562
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000093
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000061
+ write fd=1
+     64617665 6e616e74 2e72656c 61746976 6974792e 67726565 6e656e64 2e6f7267
+     2e756b.
+ write=35
+ +0.000473
+ write fd=1
+     0a.
+ write=1
+ +0.000500
+ select max=2 rfds=[0] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +1.-31596
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000127
+ read fd=0 buflen=512
+ read=OK
+     616e2069 70206164 64726573 73203132 372e302e 302e3120 696e206d 6964646c
+     650a.
+ +0.000190
+ sendto fd=6 addr=172.18.45.6:53
+     31210100 00010000 00000000 01310130 01300331 32370769 6e2d6164 64720461
+     72706100 000c0001.
+ sendto=40
+ +0.000787
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010001 00010001 01310130 01300331 32370769 6e2d6164 64720461
+     72706100 000c0001 c00c000c 00010009 3a80000b 096c6f63 616c686f 73740003
+     31323707 696e2d61 64647204 61727061 00000200 0100093a 800002c0 34c03400
+     01000100 093a8000 047f0000 01.
+ +0.000417
+ sendto fd=6 addr=172.18.45.6:53
+     31220100 00010000 00000000 096c6f63 616c686f 73740000 010001.
+ sendto=27
+ +0.000523
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228580 00010001 00010001 096c6f63 616c686f 73740000 010001c0 0c000100
+     0100093a 8000047f 000001c0 0c000200 0100093a 800002c0 0cc00c00 01000100
+     093a8000 047f0000 01.
+ +0.000310
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000120
+ write fd=1
+     616e2069 70206164 64726573 7320.
+ write=14
+ +0.000394
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=0.997132
+ select=0 rfds=[] wfds=[] efds=[]
+ +1.-02556
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000082
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000054
+ write fd=1
+     6c6f6361 6c686f73 74.
+ write=9
+ +0.000354
+ write fd=1
+     20696e20 6d696464 6c650a.
+ write=11
+ +0.000538
+ select max=2 rfds=[0] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +5.-307533
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000115
+ read fd=0 buflen=512
+ read=OK
+     3137322e 31382e34 352e3120 616e2061 64647265 73732061 74206265 67696e0a.
+ +0.000165
+ sendto fd=6 addr=172.18.45.6:53
+     31230100 00010000 00000000 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001.
+ sendto=42
+ +0.000691
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238580 00010001 00020002 01310234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00220573 66657265 0a72656c
+     61746976 69747908 67726565 6e656e64 036f7267 02756b00 02343502 31380331
+     37320769 6e2d6164 64720461 72706100 00020001 00015180 0006036e 7330c03c
+     c0580002 00010001 51800006 036e7331 c03cc07a 00010001 00015180 0004ac12
+     2d06c08c 00010001 00015180 0004ac12 2d01.
+ +0.000621
+ sendto fd=6 addr=172.18.45.6:53
+     31240100 00010000 00000000 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=50
+ +0.000716
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248580 00010001 00020002 05736665 72650a72 656c6174 69766974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001c00c 00010001 00015180 0004ac12
+     2d010a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000002
+     00010001 51800006 036e7330 c042c042 00020001 00015180 0006036e 7331c042
+     c0680001 00010001 51800004 ac122d06 c07a0001 00010001 51800004 ac122d01.
+ +0.000562
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000137
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=0.996993
+ select=0 rfds=[] wfds=[] efds=[]
+ +1.-06724
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000083
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000055
+ write fd=1
+     73666572 652e7265 6c617469 76697479 2e677265 656e656e 642e6f72 672e756b.
+ write=32
+ +0.000440
+ write fd=1
+     20616e20 61646472 65737320 61742062 6567696e 0a.
+ write=21
+ +0.000570
+ select max=2 rfds=[0] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +4.-137179
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000103
+ read fd=0 buflen=512
+ read=OK
+     3137322e 31382e34 352e34.
+ +0.000101
+ select max=2 rfds=[0] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +4.-28658
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000121
+ read fd=0 buflen=512
+ read=OK
+     3020736f 6d652073 74756666 0a.
+ +0.000112
+ sendto fd=6 addr=172.18.45.6:53
+     31250100 00010000 00000000 02343002 34350231 38033137 3207696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000747
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258580 00010001 00020002 02343002 34350231 38033137 3207696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000151 80002306 6e6f7277 61790a72
+     656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000234 35023138
+     03313732 07696e2d 61646472 04617270 61000002 00010001 51800006 036e7330
+     c03ec05a 00020001 00015180 0006036e 7331c03e c07c0001 00010001 51800004
+     ac122d06 c08e0001 00010001 51800004 ac122d01.
+ +0.000628
+ sendto fd=6 addr=172.18.45.6:53
+     31260100 00010000 00000000 066e6f72 7761790a 72656c61 74697669 74790867
+     7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=51
+ +0.000678
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268580 00010001 00020002 066e6f72 7761790a 72656c61 74697669 74790867
+     7265656e 656e6403 6f726702 756b0000 010001c0 0c000100 01000151 800004ac
+     122d280a 72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000
+     02000100 01518000 06036e73 30c043c0 43000200 01000151 80000603 6e7331c0
+     43c06900 01000100 01518000 04ac122d 06c07b00 01000100 01518000 04ac122d
+     01.
+ +0.000566
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000135
+ select max=7 rfds=[0,6] wfds=[] efds=[] to=0.997013
+ select=0 rfds=[] wfds=[] efds=[]
+ +1.-08851
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000087
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000057
+ write fd=1
+     6e6f7277 61792e72 656c6174 69766974 792e6772 65656e65 6e642e6f 72672e75
+     6b.
+ write=33
+ +0.000466
+ write fd=1
+     20736f6d 65207374 7566660a.
+ write=12
+ +0.000545
+ select max=2 rfds=[0] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +2.-184099
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000114
+ read fd=0 buflen=512
+ read=OK
+     28627261 636b6574 73290a.
+ +0.000107
+ write fd=1
+     28627261 636b6574 73290a.
+ write=11
+ +0.000495
+ select max=2 rfds=[0] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +0.323183
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000084
+ read fd=0 buflen=512
+ read=OK
+     .
+ +0.000063
+ fcntl fd=0 cmd=F_GETFL
+ fcntl=O_NONBLOCK|...
+ +0.000041
+ fcntl fd=0 cmd=F_SETFL ~O_NONBLOCK&...
+ fcntl=OK
+ +0.000033
+ fcntl fd=1 cmd=F_GETFL
+ fcntl=O_NONBLOCK|...
+ +0.000034
+ fcntl fd=1 cmd=F_SETFL ~O_NONBLOCK&...
+ fcntl=OK
+ +0.000033
+ close fd=6
+ close=OK
+ +0.000090
diff --git a/regress/case-arf-text.err b/regress/case-arf-text.err
new file mode 100644 (file)
index 0000000..2886e3c
--- /dev/null
@@ -0,0 +1 @@
+adns debug: using nameserver 172.18.45.6
diff --git a/regress/case-arf-text.out b/regress/case-arf-text.out
new file mode 100644 (file)
index 0000000..ab3f8d1
--- /dev/null
@@ -0,0 +1 @@
+rc=0
diff --git a/regress/case-arf-text.sys b/regress/case-arf-text.sys
new file mode 100644 (file)
index 0000000..572c2ba
--- /dev/null
@@ -0,0 +1,63 @@
+./adnsresfilter default
+
+ start 969137967.465922
+ fcntl fd=0 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000132
+ fcntl fd=0 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000049
+ fcntl fd=1 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000034
+ fcntl fd=1 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000033
+ socket type=SOCK_DGRAM
+ socket=6
+ +0.004099
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000057
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000034
+ select max=2 rfds=[0] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +2.095986
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000177
+ read fd=0 buflen=512
+ read=OK
+     74657874 206f6e6c 790a.
+ +0.000121
+ write fd=1
+     74657874 206f6e6c 790a.
+ write=10
+ +0.000636
+ select max=2 rfds=[0] wfds=[] efds=[] to=null
+ select=1 rfds=[0] wfds=[] efds=[]
+ +0.349329
+ recvfrom fd=6 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000085
+ read fd=0 buflen=512
+ read=OK
+     .
+ +0.000064
+ fcntl fd=0 cmd=F_GETFL
+ fcntl=O_NONBLOCK|...
+ +0.000043
+ fcntl fd=0 cmd=F_SETFL ~O_NONBLOCK&...
+ fcntl=OK
+ +0.000065
+ fcntl fd=1 cmd=F_GETFL
+ fcntl=O_NONBLOCK|...
+ +0.000036
+ fcntl fd=1 cmd=F_SETFL ~O_NONBLOCK&...
+ fcntl=OK
+ +0.000032
+ close fd=6
+ close=OK
+ +0.000117
diff --git a/regress/case-brokenmail.err b/regress/case-brokenmail.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-brokenmail.out b/regress/case-brokenmail.out
new file mode 100644 (file)
index 0000000..14757ba
--- /dev/null
@@ -0,0 +1,38 @@
+adns debug: using nameserver 172.18.45.6
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 0 type 15 MX(raw) submitted
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 0 type 65551 MX(+addr) submitted
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 256 type 15 MX(raw) submitted
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 256 type 65551 MX(+addr) submitted
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 260 type 15 MX(raw) submitted
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 260 type 65551 MX(+addr) submitted
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 0 type MX(raw): OK; nrrs=4; cname=$; owner=$; ttl=60
+ 10 manyaddrs.test.iwj.relativity.greenend.org.uk
+ 20 host.broken-delg.test.iwj.relativity.greenend.org.uk
+ 30 172.18.45.36
+ 40 cname-ptr.test.iwj.relativity.greenend.org.uk
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 256 type MX(raw): OK; nrrs=4; cname=$; owner=$; ttl=60
+ 10 manyaddrs.test.iwj.relativity.greenend.org.uk
+ 20 host.broken-delg.test.iwj.relativity.greenend.org.uk
+ 30 172.18.45.36
+ 40 cname-ptr.test.iwj.relativity.greenend.org.uk
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 260 type MX(raw): OK; nrrs=4; cname=$; owner=broken-mail.test.iwj.relativity.greenend.org.uk; ttl=60
+ 10 manyaddrs.test.iwj.relativity.greenend.org.uk
+ 20 host.broken-delg.test.iwj.relativity.greenend.org.uk
+ 30 172.18.45.36
+ 40 cname-ptr.test.iwj.relativity.greenend.org.uk
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 0 type MX(+addr): OK; nrrs=4; cname=$; owner=$; ttl=30
+ 10 manyaddrs.test.iwj.relativity.greenend.org.uk ok 0 ok "OK" ( INET 127.0.0.1 INET 172.18.45.6 INET 172.18.45.1 INET 172.18.45.35 )
+ 20 host.broken-delg.test.iwj.relativity.greenend.org.uk remotefail 30 timeout "DNS query timed out" ?
+ 30 172.18.45.36 permfail 300 nxdomain "No such domain" ( )
+ 40 cname-ptr.test.iwj.relativity.greenend.org.uk misconfig 101 prohibitedcname "DNS alias found where canonical name wanted" ( )
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 256 type MX(+addr): OK; nrrs=4; cname=$; owner=$; ttl=30
+ 10 manyaddrs.test.iwj.relativity.greenend.org.uk ok 0 ok "OK" ( INET 127.0.0.1 INET 172.18.45.6 INET 172.18.45.1 INET 172.18.45.35 )
+ 20 host.broken-delg.test.iwj.relativity.greenend.org.uk remotefail 30 timeout "DNS query timed out" ?
+ 30 172.18.45.36 permfail 300 nxdomain "No such domain" ( )
+ 40 cname-ptr.test.iwj.relativity.greenend.org.uk ok 0 ok "OK" ( INET 172.18.45.37 )
+broken-mail.test.iwj.relativity.greenend.org.uk. flags 260 type MX(+addr): OK; nrrs=4; cname=$; owner=broken-mail.test.iwj.relativity.greenend.org.uk; ttl=30
+ 10 manyaddrs.test.iwj.relativity.greenend.org.uk ok 0 ok "OK" ( INET 127.0.0.1 INET 172.18.45.6 INET 172.18.45.1 INET 172.18.45.35 )
+ 20 host.broken-delg.test.iwj.relativity.greenend.org.uk remotefail 30 timeout "DNS query timed out" ?
+ 30 172.18.45.36 permfail 300 nxdomain "No such domain" ( )
+ 40 cname-ptr.test.iwj.relativity.greenend.org.uk ok 0 ok "OK" ( INET 172.18.45.37 )
+rc=0
diff --git a/regress/case-brokenmail.sys b/regress/case-brokenmail.sys
new file mode 100644 (file)
index 0000000..dcf31da
--- /dev/null
@@ -0,0 +1,516 @@
+adnstest default
+:15,65551 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 type=SOCK_DGRAM
+ socket=4
+ +0.000425
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000059
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000043
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=65
+ +0.001836
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=65
+ +0.002502
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=65
+ +0.001986
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=65
+ +0.002269
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=65
+ +0.001950
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01.
+ sendto=65
+ +0.001914
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.987543
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000654
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010004 00010005 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01c00c00 0f000100 00003c00 38001404 686f7374 0b62726f 6b656e2d 64656c67
+     04746573 74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00c00c00 0f000100 00003c00 10001e03 31373202 31380234 35023336
+     00c00c00 0f000100 00003c00 0e002809 636e616d 652d7074 72c060c0 0c000f00
+     01000000 3c000e00 0a096d61 6e796164 647273c0 60c06000 02000100 00003c00
+     06036e73 30c069c0 c9000100 01000000 3c0004ac 122d23c0 c9000100 01000000
+     3c0004ac 122d06c0 c9000100 01000000 3c0004ac 122d01c0 c9000100 01000000
+     3c00047f 000001c0 e1000100 01000151 800004ac 122d06.
+ +0.001320
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010004 00010005 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01c00c00 0f000100 00003c00 10001e03 31373202 31380234 35023336 00c00c00
+     0f000100 00003c00 31002809 636e616d 652d7074 72047465 73740369 776a0a72
+     656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b00c00c 000f0001
+     0000003c 000e000a 096d616e 79616464 7273c075 c00c000f 00010000 003c0015
+     00140468 6f73740b 62726f6b 656e2d64 656c67c0 75c07500 02000100 00003c00
+     06036e73 30c07ec0 a8000100 01000000 3c0004ac 122d23c0 a8000100 01000000
+     3c0004ac 122d06c0 a8000100 01000000 3c0004ac 122d01c0 a8000100 01000000
+     3c00047f 000001c0 e1000100 01000151 800004ac 122d06.
+ +0.001688
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03313732 02313802 34350233 36000001 0001.
+ sendto=30
+ +0.000653
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 09636e61 6d652d70 74720474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=63
+ +0.000825
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.001147
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010004 00010005 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01c00c00 0f000100 00003c00 31002809 636e616d 652d7074 72047465 73740369
+     776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b00c00c
+     000f0001 0000003c 000e000a 096d616e 79616464 7273c059 c00c000f 00010000
+     003c0015 00140468 6f73740b 62726f6b 656e2d64 656c67c0 59c00c00 0f000100
+     00003c00 10001e03 31373202 31380234 35023336 00c05900 02000100 00003c00
+     06036e73 30c062c0 8c000100 01000000 3c0004ac 122d23c0 8c000100 01000000
+     3c0004ac 122d06c0 8c000100 01000000 3c0004ac 122d01c0 8c000100 01000000
+     3c00047f 000001c0 e1000100 01000151 800004ac 122d06.
+ +0.001330
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228580 00010004 00010005 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01c00c00 0f000100 00003c00 31000a09 6d616e79 61646472 73047465 73740369
+     776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b00c00c
+     000f0001 0000003c 00150014 04686f73 740b6272 6f6b656e 2d64656c 67c059c0
+     0c000f00 01000000 3c001000 1e033137 32023138 02343502 333600c0 0c000f00
+     01000000 3c000e00 2809636e 616d652d 707472c0 59c05900 02000100 00003c00
+     06036e73 30c062c0 4f000100 01000000 3c0004ac 122d23c0 4f000100 01000000
+     3c0004ac 122d06c0 4f000100 01000000 3c0004ac 122d01c0 4f000100 01000000
+     3c00047f 000001c0 e1000100 01000151 800004ac 122d06.
+ +0.001524
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.001003
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03313732 02313802 34350233 36000001 0001.
+ sendto=30
+ +0.000569
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 09636e61 6d652d70 74720474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=63
+ +0.000842
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238580 00010004 00010005 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01c00c00 0f000100 00003c00 38001404 686f7374 0b62726f 6b656e2d 64656c67
+     04746573 74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00c00c00 0f000100 00003c00 10001e03 31373202 31380234 35023336
+     00c00c00 0f000100 00003c00 0e002809 636e616d 652d7074 72c060c0 0c000f00
+     01000000 3c000e00 0a096d61 6e796164 647273c0 60c06000 02000100 00003c00
+     06036e73 30c069c0 c9000100 01000000 3c0004ac 122d23c0 c9000100 01000000
+     3c0004ac 122d06c0 c9000100 01000000 3c0004ac 122d01c0 c9000100 01000000
+     3c00047f 000001c0 e1000100 01000151 800004ac 122d06.
+ +0.001306
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248580 00010004 00010005 0b62726f 6b656e2d 6d61696c 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000f00
+     01c00c00 0f000100 00003c00 10001e03 31373202 31380234 35023336 00c00c00
+     0f000100 00003c00 31002809 636e616d 652d7074 72047465 73740369 776a0a72
+     656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b00c00c 000f0001
+     0000003c 000e000a 096d616e 79616464 7273c075 c00c000f 00010000 003c0015
+     00140468 6f73740b 62726f6b 656e2d64 656c67c0 75c07500 02000100 00003c00
+     06036e73 30c07ec0 a8000100 01000000 3c0004ac 122d23c0 a8000100 01000000
+     3c0004ac 122d06c0 a8000100 01000000 3c0004ac 122d01c0 a8000100 01000000
+     3c00047f 000001c0 e1000100 01000151 800004ac 122d06.
+ +0.001507
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03313732 02313802 34350233 36000001 0001.
+ sendto=30
+ +0.000637
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 09636e61 6d652d70 74720474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=63
+ +0.000932
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000931
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258583 00010000 00000000 03313732 02313802 34350233 36000001 0001.
+ +0.000242
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268580 00010002 00010001 09636e61 6d652d70 74720474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001c0
+     0c000500 01000000 3c002903 70747204 74657374 0369776a 0a72656c 61746976
+     69747908 67726565 6e656e64 036f7267 02756b00 c04b0001 00010000 003c0004
+     ac122d25 c04f0002 00010000 003c0006 036e7330 c058c090 00010001 00015180
+     0004ac12 2d06.
+ +0.000737
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298583 00010000 00000000 03313732 02313802 34350233 36000001 0001.
+ +0.000223
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8580 00010002 00010001 09636e61 6d652d70 74720474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001c0
+     0c000500 01000000 3c002903 70747204 74657374 0369776a 0a72656c 61746976
+     69747908 67726565 6e656e64 036f7267 02756b00 c04b0001 00010000 003c0004
+     ac122d25 c04f0002 00010000 003c0006 036e7330 c058c090 00010001 00015180
+     0004ac12 2d06.
+ +0.000756
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8583 00010000 00000000 03313732 02313802 34350233 36000001 0001.
+ +0.000291
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8580 00010002 00010001 09636e61 6d652d70 74720474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001c0
+     0c000500 01000000 3c002903 70747204 74657374 0369776a 0a72656c 61746976
+     69747908 67726565 6e656e64 036f7267 02756b00 c04b0001 00010000 003c0004
+     ac122d25 c04f0002 00010000 003c0006 036e7330 c058c090 00010001 00015180
+     0004ac12 2d06.
+ +0.000726
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000162
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.980649
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-04341
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000794
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000608
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000695
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997903
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.007910
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000823
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000611
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000571
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997995
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.007991
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000694
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000579
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000571
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998156
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.008157
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000655
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000749
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000606
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997990
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.007995
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000836
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000612
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000631
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997921
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.007925
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000699
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000725
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000606
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997970
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.007965
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000739
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000582
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000570
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998109
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.008104
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000641
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000598
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000716
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998045
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.008043
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000646
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000576
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000594
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998184
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.008190
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000673
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000578
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000572
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998177
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.008168
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000659
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000577
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000571
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998193
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.008199
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000653
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000604
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000573
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998170
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.008181
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000699
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000589
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000758
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997954
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.008126
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000684
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000582
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04686f73 740b6272 6f6b656e 2d64656c 67047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000578
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998156
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.007969
+ close fd=4
+ close=OK
+ +0.000812
diff --git a/regress/case-child.err b/regress/case-child.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-child.out b/regress/case-child.out
new file mode 100644 (file)
index 0000000..6c0b673
--- /dev/null
@@ -0,0 +1,5 @@
+adns debug: using nameserver 172.18.45.6
+134.76.224.195.in-addr.arpa flags 0 type 65548 PTR(checked) submitted
+134.76.224.195.in-addr.arpa flags 0 type PTR(checked): OK; nrrs=1; cname=$; owner=$; ttl=78694
+ permutation-city.greenend.org.uk
+rc=0
diff --git a/regress/case-child.sys b/regress/case-child.sys
new file mode 100644 (file)
index 0000000..c0f82ac
--- /dev/null
@@ -0,0 +1,58 @@
+adnstest default
+:65548 134.76.224.195.in-addr.arpa
+ start 929574747.401802
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000189
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000080
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000058
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03313334 02373603 32323403 31393507 696e2d61
+     64647204 61727061 00000c00 01.
+ sendto=45
+ +0.000595
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999405
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.008975
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010001 00050005 03313334 02373603 32323403 31393507 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 01336600 22107065 726d7574
+     6174696f 6e2d6369 74790867 7265656e 656e6403 6f726702 756b0002 37360332
+     32340331 39350769 6e2d6164 64720461 72706100 00020001 00013366 00110464
+     6e733006 656c6d61 696c0263 6fc057c0 5b000200 01000133 66000704 646e7331
+     c083c05b 00020001 00013366 00070464 6e7332c0 83c05b00 02000100 01336600
+     0e036e73 32047861 7261036e 657400c0 5b000200 01000133 66000603 6e7333c0
+     c5c07e00 01000100 00149d00 04c17ae9 11c09b00 01000100 00149d00 04c17ae9
+     01c0ae00 01000100 00149d00 04c3e04c c1c0c100 01000100 0284e500 04c28fa1
+     6bc0db00 01000100 0284e500 04c28fa3 19.
+ +0.001671
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 10706572 6d757461 74696f6e 2d636974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=50
+ +0.000683
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000108
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997538
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005811
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010001 00020002 10706572 6d757461 74696f6e 2d636974 79086772
+     65656e65 6e64036f 72670275 6b000001 0001c00c 00010001 00015180 0004c3e0
+     4c860867 7265656e 656e6403 6f726702 756b0000 02000100 01518000 11036e73
+     300a7265 6c617469 76697479 c042c042 00020001 00015180 0006036e 7331c061
+     c05d0001 00010001 51800004 ac122d06 c07a0001 00010001 51800004 ac122d41.
+ +0.000862
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000193
+ close fd=4
+ close=OK
+ +0.000207
diff --git a/regress/case-cnametocname.err b/regress/case-cnametocname.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-cnametocname.out b/regress/case-cnametocname.out
new file mode 100644 (file)
index 0000000..6d60fb2
--- /dev/null
@@ -0,0 +1,5 @@
+adns debug: using nameserver 172.18.45.6
+intel.ugcs.caltech.edu. flags 0 type 1 A(-) submitted
+adns debug: allegedly canonical name ugintel.best.ugcs.caltech.edu is actually alias for drachma.ugcs.caltech.edu (QNAME=intel.ugcs.caltech.edu, QTYPE=A, NS=172.18.45.6)
+intel.ugcs.caltech.edu. flags 0 type A(-): DNS alias found where canonical name wanted; nrrs=0; cname=ugintel.best.ugcs.caltech.edu; owner=$; ttl=497758
+rc=0
diff --git a/regress/case-cnametocname.sys b/regress/case-cnametocname.sys
new file mode 100644 (file)
index 0000000..4a9c52a
--- /dev/null
@@ -0,0 +1,39 @@
+adnstest default
+:1 intel.ugcs.caltech.edu.
+ start 938369896.279735
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000179
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000054
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000041
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 05696e74 656c0475 67637307 63616c74 65636803
+     65647500 00010001.
+ sendto=40
+ +0.001628
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998372
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.586476
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010003 00050005 05696e74 656c0475 67637307 63616c74 65636803
+     65647500 00010001 05696e74 656c0475 67637307 63616c74 65636803 65647500
+     00050001 0007985e 000f0775 67696e74 656c0462 657374c0 2ec04a00 05000100
+     00000a00 0a076472 6163686d 61c02ec0 65000100 01000798 83000483 d72bacc0
+     2e000200 01000935 be000b08 70757263 68617365 c02ec02e 00020001 000935be
+     00070465 6e7679c0 2ec02e00 02000100 0935be00 09036f66 62036e65 7400c02e
+     00020001 000935be 00090674 7962616c 74c033c0 2e000200 01000935 be000e08
+     6d657263 7574696f 026e69c0 33c08b00 01000100 0935be00 0483d72b a7c0a200
+     01000100 0935be00 0483d72b 87c0b500 01000100 001ef800 04c6b4b6 07c0ca00
+     01000100 0100d700 0483d78b 64c0df00 01000100 0100d700 0483d7fe 63.
+ +0.001423
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000646
+ close fd=4
+ close=OK
+ +0.000242
diff --git a/regress/case-comprinf.err b/regress/case-comprinf.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-comprinf.out b/regress/case-comprinf.out
new file mode 100644 (file)
index 0000000..b7ea5e8
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.6
+37.45.18.172.in-addr.arpa. flags 0 type 12 PTR(raw) submitted
+37.45.18.172.in-addr.arpa. flags 0 type PTR(raw): Found overly-long domain name; nrrs=0; cname=37.45.18.172.in-addr.arpa.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+rc=0
diff --git a/regress/case-comprinf.sys b/regress/case-comprinf.sys
new file mode 100644 (file)
index 0000000..e79e826
--- /dev/null
@@ -0,0 +1,35 @@
+adnstest default
+:12 37.45.18.172.in-addr.arpa.
+ start 951961094.184850
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000134
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000053
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000035
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 02333702 34350231 38033137 3207696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000960
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999040
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000200
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010002 00010001 02333702 34350231 38033137 3207696e 2d616464
+     72046172 70610000 0c0001c0 0c000500 01000151 80003f02 33370234 35023138
+     03313732 07696e2d 61646472 04617270 61047465 73740369 776a0a72 656c6174
+     69766974 79086772 65656e65 6e64036f 72670275 6b00c037 000c0001 0000003c
+     00060370 7472c082 c0510002 00010000 003c0006 036e7330 c05ac094 00010001
+     00015180 0004ac12 2d06.
+ +0.000624
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000222
+ close fd=4
+ close=OK
+ +0.000197
diff --git a/regress/case-datapluscname.err b/regress/case-datapluscname.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-datapluscname.out b/regress/case-datapluscname.out
new file mode 100644 (file)
index 0000000..d5b36af
--- /dev/null
@@ -0,0 +1,39 @@
+adns debug: using nameserver 172.18.45.6
+170.99.219.194.in-addr.arpa flags 292 type 1 A(-) submitted
+170.99.219.194.in-addr.arpa flags 292 type 2 NS(raw) submitted
+170.99.219.194.in-addr.arpa flags 292 type 5 CNAME(-) submitted
+170.99.219.194.in-addr.arpa flags 292 type 6 SOA(raw) submitted
+170.99.219.194.in-addr.arpa flags 292 type 12 PTR(raw) submitted
+170.99.219.194.in-addr.arpa flags 292 type 13 HINFO(-) submitted
+170.99.219.194.in-addr.arpa flags 292 type 15 MX(raw) submitted
+170.99.219.194.in-addr.arpa flags 292 type 16 TXT(-) submitted
+170.99.219.194.in-addr.arpa flags 292 type 17 RP(raw) submitted
+170.99.219.194.in-addr.arpa flags 292 type 65537 A(addr) submitted
+170.99.219.194.in-addr.arpa flags 292 type 65538 NS(+addr) submitted
+170.99.219.194.in-addr.arpa flags 292 type 65548 PTR(checked) submitted
+170.99.219.194.in-addr.arpa flags 292 type 65551 MX(+addr) submitted
+170.99.219.194.in-addr.arpa flags 292 type 131078 SOA(822) submitted
+170.99.219.194.in-addr.arpa flags 292 type 131089 RP(822) submitted
+adns debug: ignoring CNAME (to 170.168.99.219.194.in-addr.arpa) coexisting with RR (QNAME=170.99.219.194.in-addr.arpa, QTYPE=PTR(raw), NS=172.18.45.6)
+adns debug: ignoring RR with an unexpected owner 170.168.99.219.194.in-addr.arpa (QNAME=170.99.219.194.in-addr.arpa, QTYPE=PTR(raw), NS=172.18.45.6)
+adns debug: ignoring CNAME (to 170.168.99.219.194.in-addr.arpa) coexisting with RR (QNAME=170.99.219.194.in-addr.arpa, QTYPE=PTR(checked), NS=172.18.45.6)
+adns debug: ignoring RR with an unexpected owner 170.168.99.219.194.in-addr.arpa (QNAME=170.99.219.194.in-addr.arpa, QTYPE=PTR(checked), NS=172.18.45.6)
+170.99.219.194.in-addr.arpa flags 292 type A(-): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type NS(raw): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type SOA(raw): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type PTR(raw): OK; nrrs=1; cname=$; owner=170.99.219.194.in-addr.arpa; ttl=171727
+ proxy.scoplife.gr
+170.99.219.194.in-addr.arpa flags 292 type HINFO(-): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type MX(raw): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type TXT(-): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type RP(raw): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type A(addr): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type NS(+addr): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type MX(+addr): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type SOA(822): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type RP(822): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type PTR(checked): OK; nrrs=1; cname=$; owner=170.99.219.194.in-addr.arpa; ttl=171727
+ proxy.scoplife.gr
+170.99.219.194.in-addr.arpa flags 292 type CNAME(-): OK; nrrs=1; cname=$; owner=170.99.219.194.in-addr.arpa; ttl=171726
+ 170.168.99.219.194.in-addr.arpa
+rc=0
diff --git a/regress/case-datapluscname.sys b/regress/case-datapluscname.sys
new file mode 100644 (file)
index 0000000..63d2b10
--- /dev/null
@@ -0,0 +1,233 @@
+adnstest default
+292/170.99.219.194.in-addr.arpa
+ start 933809668.543946
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000199
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000081
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000063
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.003027
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.002832
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.004403
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.004763
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000c00 01.
+ sendto=45
+ +0.002558
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01.
+ sendto=45
+ +0.004339
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.002664
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01.
+ sendto=45
+ +0.004889
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.002642
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.002552
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.007571
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000c00 01.
+ sendto=45
+ +0.004820
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.004771
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.004879
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.004728
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.938562
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000329
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000688
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.003135
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000762
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238180 00010003 00040004 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 029ecf00 13057072 6f787908
+     73636f70 6c696665 02677200 c00c0005 00010002 a2ec0021 03313730 03313638
+     02393903 32313903 31393407 696e2d61 64647204 61727061 00c05800 0c000100
+     029ecf00 02c039c0 5c000200 0100029e cf001004 696e666f 08666f72 74686e65
+     74c048c0 5c000200 0100029e cf000805 6e736865 72c098c0 5c000200 0100029e
+     cf000805 6e737468 65c098c0 5c000200 0100029e cf000c09 74656972 65736961
+     73c098c0 93000100 010004be 3900048b 5b0111c0 af000100 01000542 ba0004c1
+     5c1e13c0 c3000100 01000542 800004c1 5c6e01c0 d7000100 01000542 800004c2
+     dbe302.
+ +0.001873
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000969
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000699
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000717
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.003514
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000783
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.003279
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8180 00010003 00040004 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 029ecf00 13057072 6f787908
+     73636f70 6c696665 02677200 c00c0005 00010002 a2ec0021 03313730 03313638
+     02393903 32313903 31393407 696e2d61 64647204 61727061 00c05800 0c000100
+     029ecf00 02c039c0 5c000200 0100029e cf001004 696e666f 08666f72 74686e65
+     74c048c0 5c000200 0100029e cf000805 6e736865 72c098c0 5c000200 0100029e
+     cf000805 6e737468 65c098c0 5c000200 0100029e cf000c09 74656972 65736961
+     73c098c0 93000100 010004be 3900048b 5b0111c0 af000100 01000542 ba0004c1
+     5c1e13c0 c3000100 01000542 800004c1 5c6e01c0 d7000100 01000542 800004c2
+     dbe302.
+ +0.001960
+ sendto fd=4 addr=172.18.45.6:53
+     312e0100 00010000 00000000 0570726f 78790873 636f706c 69666502 67720000
+     010001.
+ sendto=35
+ +0.005061
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.003253
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000782
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01c00c00 05000100 02a2ec00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000698
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000173
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.915746
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.014046
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312e8180 00010001 00040004 0570726f 78790873 636f706c 69666502 67720000
+     010001c0 0c000100 01000288 220004c2 db63aa08 73636f70 6c696665 02677200
+     00020001 000542ba 0011056e 73617468 08666f72 74686e65 74c03cc0 33000200
+     01000542 ba000805 6e736865 72c050c0 33000200 01000542 ba000805 6e737468
+     65c050c0 33000200 01000542 ba000c09 74656972 65736961 73c050c0 4a000100
+     01000542 800004c1 5c9603c0 67000100 01000542 ba0004c1 5c1e13c0 7b000100
+     01000542 800004c1 5c6e01c0 8f000100 01000542 800004c2 dbe302.
+ +0.001422
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000197
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.900081
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.203705
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218180 00010001 00050005 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01c00c00 05000100 029ece00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100c041 00020001
+     00029ece 00120469 6e666f08 666f7274 686e6574 02677200 c0410002 00010002
+     9ece0008 056e7368 6572c06b c0410002 00010002 9ece0008 056e7374 6865c06b
+     c0410002 00010002 9ece0008 056e7361 7468c06b c0410002 00010002 9ece000c
+     09746569 72657369 6173c06b c0660001 00010005 41ce0004 8b5b0111 c0840001
+     00010005 42b90004 c15c1e13 c0980001 00010005 427f0004 c15c6e01 c0ac0001
+     00010005 427f0004 c15c9603 c0c00001 00010005 427f0004 c2dbe302.
+ +0.001798
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000249
+ close fd=4
+ close=OK
+ +0.000219
diff --git a/regress/case-datapluscnamewait.err b/regress/case-datapluscnamewait.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-datapluscnamewait.out b/regress/case-datapluscnamewait.out
new file mode 100644 (file)
index 0000000..18508a2
--- /dev/null
@@ -0,0 +1,78 @@
+adns debug: using nameserver 172.18.45.6
+170.99.219.194.in-addr.arpa flags 292 type 1 A(-) submitted
+170.99.219.194.in-addr.arpa flags 292 type 2 NS(raw) submitted
+170.99.219.194.in-addr.arpa flags 292 type 5 CNAME(-) submitted
+170.99.219.194.in-addr.arpa flags 292 type 6 SOA(raw) submitted
+170.99.219.194.in-addr.arpa flags 292 type 12 PTR(raw) submitted
+170.99.219.194.in-addr.arpa flags 292 type 13 HINFO(-) submitted
+170.99.219.194.in-addr.arpa flags 292 type 15 MX(raw) submitted
+170.99.219.194.in-addr.arpa flags 292 type 16 TXT(-) submitted
+170.99.219.194.in-addr.arpa flags 292 type 17 RP(raw) submitted
+170.99.219.194.in-addr.arpa flags 292 type 65537 A(addr) submitted
+170.99.219.194.in-addr.arpa flags 292 type 65538 NS(+addr) submitted
+170.99.219.194.in-addr.arpa flags 292 type 65548 PTR(checked) submitted
+170.99.219.194.in-addr.arpa flags 292 type 65551 MX(+addr) submitted
+170.99.219.194.in-addr.arpa flags 292 type 131078 SOA(822) submitted
+170.99.219.194.in-addr.arpa flags 292 type 131089 RP(822) submitted
+adns debug: ignoring CNAME (to 170.168.99.219.194.in-addr.arpa) coexisting with RR (QNAME=170.99.219.194.in-addr.arpa, QTYPE=PTR(raw), NS=172.18.45.6)
+adns debug: ignoring RR with an unexpected owner 170.168.99.219.194.in-addr.arpa (QNAME=170.99.219.194.in-addr.arpa, QTYPE=PTR(raw), NS=172.18.45.6)
+adns debug: ignoring CNAME (to 170.168.99.219.194.in-addr.arpa) coexisting with RR (QNAME=170.99.219.194.in-addr.arpa, QTYPE=PTR(checked), NS=172.18.45.6)
+adns debug: ignoring RR with an unexpected owner 170.168.99.219.194.in-addr.arpa (QNAME=170.99.219.194.in-addr.arpa, QTYPE=PTR(checked), NS=172.18.45.6)
+170.99.219.194.in-addr.arpa flags 292 type PTR(raw): OK; nrrs=1; cname=$; owner=170.99.219.194.in-addr.arpa; ttl=171763
+ proxy.scoplife.gr
+170.99.219.194.in-addr.arpa flags 292 type PTR(checked): OK; nrrs=1; cname=$; owner=170.99.219.194.in-addr.arpa; ttl=171763
+ proxy.scoplife.gr
+170.99.219.194.in-addr.arpa flags 292 type A(-): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=600
+170.99.219.194.in-addr.arpa flags 292 type MX(raw): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type RP(raw): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type A(addr): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=600
+170.99.219.194.in-addr.arpa flags 292 type NS(+addr): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type MX(+addr): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+170.99.219.194.in-addr.arpa flags 292 type RP(822): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=0
+adns debug: reply not found, id 3120, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3122, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3124, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3126, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+170.99.219.194.in-addr.arpa flags 292 type NS(raw): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=600
+170.99.219.194.in-addr.arpa flags 292 type SOA(raw): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=600
+170.99.219.194.in-addr.arpa flags 292 type HINFO(-): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=600
+170.99.219.194.in-addr.arpa flags 292 type TXT(-): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=600
+170.99.219.194.in-addr.arpa flags 292 type SOA(822): No such data; nrrs=0; cname=170.168.99.219.194.in-addr.arpa; owner=170.99.219.194.in-addr.arpa; ttl=599
+adns debug: reply not found, id 312d, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 312c, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 312b, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3129, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3128, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3127, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3126, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3125, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3124, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3122, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3120, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 311f, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 312d, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 312c, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 312b, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3129, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3128, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3127, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3126, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3125, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3124, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3122, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3120, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 311f, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 312b, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3129, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3128, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3127, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3126, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3125, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3124, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3122, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3120, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 311f, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 312c, query owner 170.168.99.219.194.in-addr.arpa (NS=172.18.45.6)
+170.99.219.194.in-addr.arpa flags 292 type CNAME(-): OK; nrrs=1; cname=$; owner=170.99.219.194.in-addr.arpa; ttl=110056
+ 170.168.99.219.194.in-addr.arpa
+rc=0
diff --git a/regress/case-datapluscnamewait.sys b/regress/case-datapluscnamewait.sys
new file mode 100644 (file)
index 0000000..ff188ee
--- /dev/null
@@ -0,0 +1,1492 @@
+adnstest default
+292/170.99.219.194.in-addr.arpa
+ start 933809632.795174
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000201
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000083
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000062
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.005997
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.016139
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.006108
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.015626
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000c00 01.
+ sendto=45
+ +0.006041
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01.
+ sendto=45
+ +0.016937
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.005443
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01.
+ sendto=45
+ +0.015782
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.006303
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.015591
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.006039
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000c00 01.
+ sendto=45
+ +0.017765
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.006116
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.015294
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.006158
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.838661
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000324
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238180 00010003 00040004 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 029ef300 13057072 6f787908
+     73636f70 6c696665 02677200 c00c0005 00010002 9ef50021 03313730 03313638
+     02393903 32313903 31393407 696e2d61 64647204 61727061 00c05800 0c000100
+     029ef300 02c039c0 5c000200 0100029e f3001004 696e666f 08666f72 74686e65
+     74c048c0 5c000200 0100029e f3000805 6e736865 72c098c0 5c000200 0100029e
+     f3000805 6e737468 65c098c0 5c000200 0100029e f3000c09 74656972 65736961
+     73c098c0 93000100 010004be 5d00048b 5b0111c0 af000100 01000542 de0004c1
+     5c1e13c0 c3000100 01000542 a40004c1 5c6e01c0 d7000100 01000542 a40004c2
+     dbe302.
+ +0.007330
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8180 00010003 00040004 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 029ef300 13057072 6f787908
+     73636f70 6c696665 02677200 c00c0005 00010002 9ef50021 03313730 03313638
+     02393903 32313903 31393407 696e2d61 64647204 61727061 00c05800 0c000100
+     029ef300 02c039c0 5c000200 0100029e f3001004 696e666f 08666f72 74686e65
+     74c048c0 5c000200 0100029e f3000805 6e736865 72c098c0 5c000200 0100029e
+     f3000805 6e737468 65c098c0 5c000200 0100029e f3000c09 74656972 65736961
+     73c098c0 93000100 010004be 5d00048b 5b0111c0 af000100 01000542 de0004c1
+     5c1e13c0 c3000100 01000542 a40004c1 5c6e01c0 d7000100 01000542 a40004c2
+     dbe302.
+ +0.002315
+ sendto fd=4 addr=172.18.45.6:53
+     312e0100 00010000 00000000 0570726f 78790873 636f706c 69666502 67720000
+     010001.
+ sendto=35
+ +0.005642
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000159
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.822891
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.007207
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312e8180 00010001 00040004 0570726f 78790873 636f706c 69666502 67720000
+     010001c0 0c000100 01000288 460004c2 db63aa08 73636f70 6c696665 02677200
+     00020001 000542de 0011056e 73617468 08666f72 74686e65 74c03cc0 33000200
+     01000542 de000805 6e736865 72c050c0 33000200 01000542 de000805 6e737468
+     65c050c0 33000200 01000542 de000c09 74656972 65736961 73c050c0 4a000100
+     01000542 a40004c1 5c9603c0 67000100 01000542 de0004c1 5c1e13c0 7b000100
+     01000542 a40004c1 5c6e01c0 8f000100 01000542 a40004c2 dbe302.
+ +0.001427
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000219
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.814038
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-185431
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.001281
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.004185
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008703
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.001091
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.010530
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.018894
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.001185
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.001033
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.017193
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.017773
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01.
+ sendto=45
+ +0.001148
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.015209
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.018840
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.001149
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000663
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008852
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01.
+ sendto=45
+ +0.001085
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.006508
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009065
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.001094
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.002652
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009275
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.001088
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.007880
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008377
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.001077
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.022230
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.028895
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.001155
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.001072
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.012518
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.017777
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.001095
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.838996
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-161506
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000502
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009962
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.001211
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.001066
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.018231
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.017752
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000479
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009982
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.001151
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.001038
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008299
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008021
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000278
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009792
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01.
+ sendto=45
+ +0.001143
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009331
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008852
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000479
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009985
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.001184
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01.
+ sendto=45
+ +0.001060
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008400
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.007976
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000424
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009931
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.001097
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.000764
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008465
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008502
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.000787
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.029148
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.028673
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000475
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009961
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.001131
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.001027
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008360
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.007873
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000487
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009998
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.001092
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.838948
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-161498
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000446
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009968
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.001172
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.001037
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.018281
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.017811
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000470
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009988
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.001156
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.001034
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008294
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.007805
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000489
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010003
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01.
+ sendto=45
+ +0.001162
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009304
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008831
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000473
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009990
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.001153
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01.
+ sendto=45
+ +0.001036
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008446
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.007809
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000637
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010143
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.001092
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.000740
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.000706
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.037740
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.037284
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000456
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009974
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.001135
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.001077
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008299
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.007902
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000397
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010170
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.000771
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.839018
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-161432
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000450
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009951
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.000533
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.000467
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.019507
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.019027
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000480
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009995
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.000505
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.000453
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009525
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009036
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000489
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009993
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01.
+ sendto=45
+ +0.000504
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009975
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009493
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000482
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009994
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.000528
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01.
+ sendto=45
+ +0.000454
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009647
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009014
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000633
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010175
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.000499
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.000450
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.000447
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.038859
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.038404
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000455
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009958
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.000474
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.000453
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009854
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009107
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000747
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010102
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.000502
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.839433
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-161012
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000445
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010011
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.000502
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.000455
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.019499
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.019014
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000485
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009983
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.000498
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.000458
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009533
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009049
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000484
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009996
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01.
+ sendto=45
+ +0.000500
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009979
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009494
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000485
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009996
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.000564
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01.
+ sendto=45
+ +0.000452
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009644
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008982
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000662
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010145
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.000527
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.000453
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.000449
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.038846
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.038396
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000450
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009997
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.000504
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.000454
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009631
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009036
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000595
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010011
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.000494
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.839591
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-160907
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000498
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009988
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.000516
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.000455
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.019493
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005671
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010001 00010000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01c00c00 05000100 029ee900 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100c03d 00060001
+     00000258 00380974 65697265 73696173 08666f72 74686e65 74026772 000a686f
+     73746d61 73746572 c0707709 a5220000 54600000 0e100036 ee800002 a300.
+ +0.001103
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000252
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.012467
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.011997
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000470
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009991
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.000503
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.000454
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009523
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009039
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000484
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009993
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01.
+ sendto=45
+ +0.000596
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009885
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009400
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000485
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009995
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.000496
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01.
+ sendto=45
+ +0.000452
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009685
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005326
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01c00c00 05000100 029ee900 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000679
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000223
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.003457
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.002820
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000637
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010141
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.000502
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01.
+ sendto=45
+ +0.000452
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.000445
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.038919
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004982
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01c00c00 05000100 029ee900 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000678
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000193
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.033066
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003845
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288180 00010001 00010000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000100 01c00c00 05000100 029ee900 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100c03d 00060001
+     00000258 00380974 65697265 73696173 08666f72 74686e65 74026772 000a686f
+     73746d61 73746572 c0707709 a5220000 54600000 0e100036 ee800002 a300.
+ +0.001064
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000234
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.027923
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002680
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01c00c00 05000100 029ee900 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000678
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000187
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.024378
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.023895
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000483
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009993
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01.
+ sendto=45
+ +0.000504
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.000448
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009543
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.008307
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000f00 01c00c00 05000100 029ee900 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000709
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000195
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000332
+ select=0 rfds=[] wfds=[] efds=[]
+ +1.-990116
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01.
+ sendto=45
+ +0.000501
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.839522
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.055562
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8180 00010001 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001100 01c00c00 05000100 029ee800 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100.
+ +0.000679
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000223
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.783058
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.111990
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000200 01.
+ +0.000458
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000171
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.670439
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.084620
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000600 01.
+ +0.000444
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000167
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.585208
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.105188
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000d00 01.
+ +0.000511
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000168
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.479341
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004276
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00001000 01.
+ +0.000441
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000162
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.474462
+ select=0 rfds=[] wfds=[] efds=[]
+ +1.473985
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000477
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009985
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01.
+ sendto=45
+ +0.000545
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.019932
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.019448
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000484
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004980
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.000489
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.000454
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 00010001 00010000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000200 01c00c00 05000100 02a30000 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100c03d 00060001
+     00000258 00380974 65697265 73696173 08666f72 74686e65 74026772 000a686f
+     73746d61 73746572 c0707709 a5220000 54600000 0e100036 ee800002 a300.
+ +0.001060
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000249
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.013241
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.007284
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228180 00010001 00010000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01c00c00 05000100 02a30000 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100c03d 00060001
+     00000258 00380974 65697265 73696173 08666f72 74686e65 74026772 000a686f
+     73746d61 73746572 c0707709 a5220000 54600000 0e100036 ee800002 a300.
+ +0.001134
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000207
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.004616
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.004131
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000485
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009996
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01.
+ sendto=45
+ +0.000510
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.009970
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005957
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248180 00010001 00010000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000d00 01c00c00 05000100 02a30000 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100c03d 00060001
+     00000258 00380974 65697265 73696173 08666f72 74686e65 74026772 000a686f
+     73746d61 73746572 c0707709 a5220000 54600000 0e100036 ee800002 a300.
+ +0.001093
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000200
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.002720
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.002235
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000485
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009985
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01.
+ sendto=45
+ +0.000495
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.059970
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.007581
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268180 00010001 00010000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00001000 01c00c00 05000100 02a30000 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100c03d 00060001
+     00000258 00380974 65697265 73696173 08666f72 74686e65 74026772 000a686f
+     73746d61 73746572 c0707709 a5220000 54600000 0e100036 ee800002 a300.
+ +0.001095
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000204
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.051090
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.050594
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000496
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010020
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01.
+ sendto=45
+ +0.000510
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.884517
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-971134
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010001 00010000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000600 01c00c00 05000100 02a2ff00 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100c03d 00060001
+     00000257 00380974 65697265 73696173 08666f72 74686e65 74026772 000a686f
+     73746d61 73746572 c0707709 a5220000 54600000 0e100036 ee800002 a300.
+ +0.001129
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000209
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.854313
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.294993
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00001100 01.
+ +0.000451
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000174
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.558695
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.012449
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000600 01.
+ +0.000443
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000195
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.545608
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.033254
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000f00 01.
+ +0.000442
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000165
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.511747
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.033698
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000200 01.
+ +0.000445
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000165
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.477439
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.087089
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000100 01.
+ +0.000475
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000165
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.389710
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.013746
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00001100 01.
+ +0.000440
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000165
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.375359
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.019341
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00001000 01.
+ +0.000440
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000165
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.355413
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.027349
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000f00 01.
+ +0.000442
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000167
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.327455
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-481849
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000d00 01.
+ +0.000476
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000178
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.808650
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004046
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000600 01.
+ +0.000443
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000223
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.803938
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003854
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000200 01.
+ +0.000442
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000169
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.799473
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004099
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000100 01.
+ +0.000431
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000159
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.794784
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.799306
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.000587
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999413
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.089275
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00001100 01.
+ +0.000477
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000179
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.909482
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-954601
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000600 01.
+ +0.000444
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000166
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.863473
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.176995
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000f00 01.
+ +0.000520
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000236
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.685722
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.009094
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000200 01.
+ +0.000441
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000165
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.676022
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004004
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000100 01.
+ +0.000437
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000160
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.671421
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003792
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00001100 01.
+ +0.000441
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000189
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.666999
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.108860
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00001000 01.
+ +0.000450
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000164
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.557525
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.378539
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000f00 01.
+ +0.000446
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000165
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.178375
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.021040
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000d00 01.
+ +0.000485
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000162
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.156688
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004025
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000600 01.
+ +0.000434
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000160
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.152069
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003840
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000200 01.
+ +0.000436
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000160
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.147633
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.135825
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000100 01.
+ +0.000442
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000164
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.011202
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010716
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000486
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009980
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.000496
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999504
+ select=1 rfds=[4] wfds=[] efds=[]
+ +2.-383424
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000f00 01.
+ +0.000484
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000222
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.382222
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004359
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000200 01.
+ +0.000454
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000163
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.377246
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003697
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000100 01.
+ +0.000440
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000161
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.372948
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003846
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00001100 01.
+ +0.000439
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000191
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.368472
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.101004
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00001000 01.
+ +0.000442
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000163
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.266863
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004860
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000f00 01.
+ +0.000458
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000162
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.261383
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003486
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000d00 01.
+ +0.000436
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000207
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.257254
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005999
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000600 01.
+ +0.000444
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000163
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.250648
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003548
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000200 01.
+ +0.000437
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000159
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.246504
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003713
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000100 01.
+ +0.000464
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000161
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.242166
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.241706
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000460
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009972
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.000493
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999507
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00956
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000463
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009960
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01.
+ sendto=45
+ +0.000477
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999523
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-273409
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010000 00000000 03313730 03313638 02393903 32313903 31393407
+     696e2d61 64647204 61727061 00000600 01.
+ +0.000463
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000177
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.272292
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.110798
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218180 00010001 00050005 03313730 02393903 32313903 31393407 696e2d61
+     64647204 61727061 00000500 01c00c00 05000100 01ade800 21033137 30033136
+     38023939 03323139 03313934 07696e2d 61646472 04617270 6100c044 00020001
+     0000bc71 00170974 65697265 73696173 08666f72 74686e65 74026772 00c04400
+     02000100 00bc7100 0d026e73 04726970 65036e65 7400c044 00020001 0000bc71
+     0008056e 73617468 c070c044 00020001 0000bc71 0008056e 73746865 c070c044
+     00020001 0000bc71 0008056e 73686572 c070c066 00010001 00054576 0004c2db
+     e302c089 00010001 00029904 0004c100 00c1c0a2 00010001 0004c1d7 0004c15c
+     9603c0b6 00010001 000484f0 0004c15c 6e01c0ca 00010001 00054600 0004c15c
+     1e13.
+ +0.001965
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000301
+ close fd=4
+ close=OK
+ +0.000256
diff --git a/regress/case-flags10.err b/regress/case-flags10.err
new file mode 100644 (file)
index 0000000..e6c1c99
--- /dev/null
@@ -0,0 +1 @@
+too many flags
diff --git a/regress/case-flags10.out b/regress/case-flags10.out
new file mode 100644 (file)
index 0000000..2f93975
--- /dev/null
@@ -0,0 +1,2 @@
+adns debug: using nameserver 172.18.45.6
+rc=3
diff --git a/regress/case-flags10.sys b/regress/case-flags10.sys
new file mode 100644 (file)
index 0000000..fe0b341
--- /dev/null
@@ -0,0 +1,15 @@
+adnstest default
+:1 ,aaaaaaaaaa/chiark.greenend.org.uk
+ start 929580072.670441
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000191
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000084
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000061
+ close fd=4
+ close=OK
+ +0.000001
diff --git a/regress/case-flags9.err b/regress/case-flags9.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-flags9.out b/regress/case-flags9.out
new file mode 100644 (file)
index 0000000..679ba0d
--- /dev/null
@@ -0,0 +1,5 @@
+adns debug: using nameserver 172.18.45.6
+chiark.greenend.org.uk flags 0 type 1 A(-) submitted
+chiark.greenend.org.uk flags 0 type A(-) ownflags=aaaaaaaaa: ok; nrrs=1; cname=$; owner=$; ttl=86400
+ 195.224.76.132
+rc=0
diff --git a/regress/case-flags9.sys b/regress/case-flags9.sys
new file mode 100644 (file)
index 0000000..914c556
--- /dev/null
@@ -0,0 +1,34 @@
+adnstest default
+:1 ,aaaaaaaaa/chiark.greenend.org.uk
+ start 929580075.263215
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000212
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000083
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000060
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000625
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999375
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.007374
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001 c00c0001 00010001 51800004 c3e04c84 08677265 656e656e
+     64036f72 6702756b 00000200 01000151 80001103 6e73300a 72656c61 74697669
+     7479c038 c0380002 00010001 51800006 036e7331 c057c053 00010001 00015180
+     0004ac12 2d06c070 00010001 00015180 0004ac12 2d41.
+ +0.001238
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000228
+ close fd=4
+ close=OK
+ +0.000205
diff --git a/regress/case-formerr.err b/regress/case-formerr.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-formerr.out b/regress/case-formerr.out
new file mode 100644 (file)
index 0000000..8f70764
--- /dev/null
@@ -0,0 +1,19 @@
+adns debug: using nameserver 172.18.45.6
+h.rndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk. flags 1 type 1 A(-) submitted
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+adns warning: server cannot understand our query (Format Error) (NS=172.18.45.6)
+h.rndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk. flags 1 type A(-): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+rc=0
diff --git a/regress/case-formerr.sys b/regress/case-formerr.sys
new file mode 100644 (file)
index 0000000..d455b19
--- /dev/null
@@ -0,0 +1,330 @@
+adnstest default
+:1 1/h.rndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk.
+ start 951956380.814815
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000130
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000056
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000033
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000977
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999023
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000192
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000130
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000088
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998613
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01236
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000766
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999234
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000115
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000116
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000065
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998938
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01066
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000004
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009983
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000688
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999312
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000113
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000114
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000065
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999020
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00961
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000702
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999298
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000113
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000114
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000066
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999005
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00753
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000714
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999286
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000117
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000117
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000069
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998983
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01199
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000182
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009922
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000689
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999311
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000114
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000113
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000064
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999020
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00958
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000716
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999284
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000114
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000136
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000066
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998968
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01033
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000001
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009977
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000669
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999331
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000113
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000115
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000065
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999038
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-00943
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000720
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999280
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000113
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000114
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000065
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998988
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01009
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000703
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999297
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000134
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000115
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000066
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998982
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01006
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000760
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999240
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000120
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000116
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000070
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998934
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01050
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000816
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999184
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000124
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000120
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000074
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998866
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01045
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000888
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999112
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000127
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000119
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000072
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998794
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01003
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000840
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999160
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000297
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000124
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000077
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998662
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01614
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000276
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010069
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01683e72 6e64726f 62776c78 78787878 78787878
+     786c6c6c 616e7479 73696c69 6f676f67 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 770a7265 6c617469 76697479 08677265 656e656e
+     64036f72 6702756b 00000100 01.
+ sendto=109
+ +0.000791
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999209
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000117
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8181 00010000 00000000.
+ +0.000271
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000080
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998741
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-01357
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000098
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009963
+ close fd=4
+ close=OK
+ +0.000234
diff --git a/regress/case-lockup.err b/regress/case-lockup.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-lockup.out b/regress/case-lockup.out
new file mode 100644 (file)
index 0000000..a3f7495
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.36
+chiark.greenend.org.uk flags 0 type 1 A(-) submitted
+chiark.greenend.org.uk flags 0 type A(-): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+rc=0
diff --git a/regress/case-lockup.sys b/regress/case-lockup.sys
new file mode 100644 (file)
index 0000000..a14c5ac
--- /dev/null
@@ -0,0 +1,135 @@
+adnstest noserver
+:1 chiark.greenend.org.uk
+ start 912889153.349504
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000193
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000088
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000072
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000617
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999383
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.008683
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000406
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999594
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009544
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000428
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999572
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009567
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000449
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999551
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009551
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000381
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999619
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009614
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000383
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999617
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009622
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000387
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999613
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009603
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000404
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999596
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009607
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000468
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999532
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009526
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000431
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999569
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009564
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000429
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999571
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009586
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000479
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999521
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009511
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000430
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999570
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009571
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000440
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999560
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.009564
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +2.000439
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ close fd=4
+ close=OK
+ +0.000267
diff --git a/regress/case-longdom0.err b/regress/case-longdom0.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-longdom0.out b/regress/case-longdom0.out
new file mode 100644 (file)
index 0000000..bba739e
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.6
+0rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk. flags 1 type 1 A(-) submitted
+0rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk. flags 1 type A(-): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+rc=0
diff --git a/regress/case-longdom0.sys b/regress/case-longdom0.sys
new file mode 100644 (file)
index 0000000..33a29ef
--- /dev/null
@@ -0,0 +1,47 @@
+adnstest default
+:1 1/0rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk.
+ start 951955651.857473
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000126
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000056
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000036
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 2230726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f670a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 010001.
+ sendto=271
+ +0.003710
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.996290
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000332
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8583 00010000 00010000 2230726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f670a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 0100010a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 06000100 01518000 27036e73 30c10f0a 686f7374
+     6d617374 6572c10f 0000002d 00001c20 00000e10 00093a80 00015180.
+ +0.001276
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000148
+ close fd=4
+ close=OK
+ +0.000154
diff --git a/regress/case-longdom1.err b/regress/case-longdom1.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-longdom1.out b/regress/case-longdom1.out
new file mode 100644 (file)
index 0000000..191a82f
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.6
+10rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk. flags 1 type 1 A(-) submitted
+10rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk. flags 1 type A(-): Domain name or component is too long; nrrs=0; cname=$; owner=$; ttl=604800
+rc=0
diff --git a/regress/case-longdom1.sys b/regress/case-longdom1.sys
new file mode 100644 (file)
index 0000000..a54e14d
--- /dev/null
@@ -0,0 +1,15 @@
+adnstest default
+:1 1/10rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk.
+ start 951955690.505811
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000126
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000058
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000035
+ close fd=4
+ close=OK
+ +0.000269
diff --git a/regress/case-longdomsrch0.err b/regress/case-longdomsrch0.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-longdomsrch0.out b/regress/case-longdomsrch0.out
new file mode 100644 (file)
index 0000000..14a33a3
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.6
+10rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk flags 1 type 1 A(-) submitted
+10rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk flags 1 type A(-): No such domain; nrrs=0; cname=$; owner=$; ttl=604800
+rc=0
diff --git a/regress/case-longdomsrch0.sys b/regress/case-longdomsrch0.sys
new file mode 100644 (file)
index 0000000..298bec8
--- /dev/null
@@ -0,0 +1,15 @@
+adnstest ndots100
+:1 1/10rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
+ start 951956073.321566
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000131
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000056
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000034
+ close fd=4
+ close=OK
+ +0.000340
diff --git a/regress/case-longdomsrch1.err b/regress/case-longdomsrch1.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-longdomsrch1.out b/regress/case-longdomsrch1.out
new file mode 100644 (file)
index 0000000..a1fa6b4
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.6
+0rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk flags 1 type 1 A(-) submitted
+0rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk flags 1 type A(-): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+rc=0
diff --git a/regress/case-longdomsrch1.sys b/regress/case-longdomsrch1.sys
new file mode 100644 (file)
index 0000000..a61d920
--- /dev/null
@@ -0,0 +1,47 @@
+adnstest ndots100
+:1 1/0rndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
+ start 951956087.269350
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000132
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000060
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000038
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 2230726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f670a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 010001.
+ sendto=271
+ +0.001749
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998251
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000215
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218583 00010000 00010000 2230726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f673f 6c6c616e 66616972 70776c6c 6777796e
+     67796c6c 676f6765 72796368 7779726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f670a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 0100010a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 06000100 01518000 27036e73 30c10f0a 686f7374
+     6d617374 6572c10f 0000002d 00001c20 00000e10 00093a80 00015180.
+ +0.001176
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000173
+ close fd=4
+ close=OK
+ +0.000152
diff --git a/regress/case-longdomsrch1b.err b/regress/case-longdomsrch1b.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-longdomsrch1b.out b/regress/case-longdomsrch1b.out
new file mode 100644 (file)
index 0000000..af09658
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.6
+1xxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk flags 1 type 1 A(-) submitted
+1xxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk flags 1 type A(-): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+rc=0
diff --git a/regress/case-longdomsrch1b.sys b/regress/case-longdomsrch1b.sys
new file mode 100644 (file)
index 0000000..e9e58dc
--- /dev/null
@@ -0,0 +1,46 @@
+adnstest ndots100
+:1 1/1xxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
+ start 951956136.566877
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000137
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000060
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000038
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 13317878 786c6c6c 616e7479 73696c69 6f676f67
+     3f6c6c61 6e666169 7270776c 6c677779 6e67796c 6c676f67 65727963 68777972
+     6e64726f 62776c78 78787878 78787878 786c6c6c 616e7479 73696c69 6f676f67
+     3f6c6c61 6e666169 7270776c 6c677779 6e67796c 6c676f67 65727963 68777972
+     6e64726f 62776c78 78787878 78787878 786c6c6c 616e7479 73696c69 6f676f67
+     3f6c6c61 6e666169 7270776c 6c677779 6e67796c 6c676f67 65727963 68777972
+     6e64726f 62776c78 78787878 78787878 786c6c6c 616e7479 73696c69 6f676f67
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 00010001.
+ sendto=256
+ +0.004128
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995872
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000232
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218583 00010000 00010000 13317878 786c6c6c 616e7479 73696c69 6f676f67
+     3f6c6c61 6e666169 7270776c 6c677779 6e67796c 6c676f67 65727963 68777972
+     6e64726f 62776c78 78787878 78787878 786c6c6c 616e7479 73696c69 6f676f67
+     3f6c6c61 6e666169 7270776c 6c677779 6e67796c 6c676f67 65727963 68777972
+     6e64726f 62776c78 78787878 78787878 786c6c6c 616e7479 73696c69 6f676f67
+     3f6c6c61 6e666169 7270776c 6c677779 6e67796c 6c676f67 65727963 68777972
+     6e64726f 62776c78 78787878 78787878 786c6c6c 616e7479 73696c69 6f676f67
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 00010001
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 00060001
+     00015180 0027036e 7330c100 0a686f73 746d6173 746572c1 00000000 2d00001c
+     2000000e 1000093a 80000151 80.
+ +0.001145
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000155
+ close fd=4
+ close=OK
+ +0.000161
diff --git a/regress/case-longdomsrch2.err b/regress/case-longdomsrch2.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-longdomsrch2.out b/regress/case-longdomsrch2.out
new file mode 100644 (file)
index 0000000..c4a3a23
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.6
+xxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk flags 1 type 1 A(-) submitted
+xxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk flags 1 type A(-): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+rc=0
diff --git a/regress/case-longdomsrch2.sys b/regress/case-longdomsrch2.sys
new file mode 100644 (file)
index 0000000..3c07b71
--- /dev/null
@@ -0,0 +1,72 @@
+adnstest ndots100
+:1 1/xxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.llanfairpwllgwyngyllgogerychwyrndrobwlxxxxxxxxxxlllantysiliogog.relativity.greenend.org.uk
+ start 951956143.624786
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000137
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000058
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000035
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 12787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f670a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0867 7265656e
+     656e6403 6f726702 756b0000 010001.
+ sendto=271
+ +0.004067
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.995933
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000223
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208583 00010000 00010000 12787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f670a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0867 7265656e
+     656e6403 6f726702 756b0000 01000108 67726565 6e656e64 036f7267 02756b00
+     00060001 00015180 002d026e 73066368 6961726b c10f0a68 6f73746d 61737465
+     72c10f77 35e86000 00708000 001c2000 093a8000 015180.
+ +0.001177
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 12787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f670a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=255
+ +0.002348
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218583 00010000 00010000 12787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f673f
+     6c6c616e 66616972 70776c6c 6777796e 67796c6c 676f6765 72796368 7779726e
+     64726f62 776c7878 78787878 78787878 6c6c6c61 6e747973 696c696f 676f670a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 0100010a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 06000100
+     01518000 27036e73 30c0ff0a 686f7374 6d617374 6572c0ff 0000002d 00001c20
+     00000e10 00093a80 00015180.
+ +0.001060
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000105
+ close fd=4
+ close=OK
+ +0.000176
diff --git a/regress/case-longlab0.err b/regress/case-longlab0.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-longlab0.out b/regress/case-longlab0.out
new file mode 100644 (file)
index 0000000..19f05e0
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.6
+yrndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk. flags 1 type 1 A(-) submitted
+yrndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk. flags 1 type A(-): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+rc=0
diff --git a/regress/case-longlab0.sys b/regress/case-longlab0.sys
new file mode 100644 (file)
index 0000000..6bc3f84
--- /dev/null
@@ -0,0 +1,37 @@
+adnstest default
+:1 1/yrndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk.
+ start 951955250.786132
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000123
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000055
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000034
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 3f79726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f676c 6c616e66 61697270 776c6c67 77796e67
+     796c6c67 6f676572 79636877 0a72656c 61746976 69747908 67726565 6e656e64
+     036f7267 02756b00 00010001.
+ sendto=108
+ +0.003243
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.996757
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000534
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8583 00010000 00010000 3f79726e 64726f62 776c7878 78787878 78787878
+     6c6c6c61 6e747973 696c696f 676f676c 6c616e66 61697270 776c6c67 77796e67
+     796c6c67 6f676572 79636877 0a72656c 61746976 69747908 67726565 6e656e64
+     036f7267 02756b00 00010001 0a72656c 61746976 69747908 67726565 6e656e64
+     036f7267 02756b00 00060001 00015180 0027036e 7330c06c 0a686f73 746d6173
+     746572c0 6c000000 2d00001c 2000000e 1000093a 80000151 80.
+ +0.000686
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000147
+ close fd=4
+ close=OK
+ +0.000151
diff --git a/regress/case-longlab1.err b/regress/case-longlab1.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-longlab1.out b/regress/case-longlab1.out
new file mode 100644 (file)
index 0000000..6f8b445
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.6
+hyrndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk. flags 1 type 1 A(-) submitted
+hyrndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk. flags 1 type A(-): Domain name or component is too long; nrrs=0; cname=$; owner=$; ttl=604800
+rc=0
diff --git a/regress/case-longlab1.sys b/regress/case-longlab1.sys
new file mode 100644 (file)
index 0000000..5b0e46a
--- /dev/null
@@ -0,0 +1,15 @@
+adnstest default
+:1 1/hyrndrobwlxxxxxxxxxxlllantysiliogogllanfairpwllgwyngyllgogerychw.relativity.greenend.org.uk.
+ start 951955261.286712
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000128
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000053
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000033
+ close fd=4
+ close=OK
+ +0.000238
index 9bf4e875b9d54e351e0bb2f2e27f0465f2e2d521..61d1757002bd30f1cb8ae19033e66e3c416ac10a 100644 (file)
@@ -1,10 +1,10 @@
 adns debug: using nameserver 172.18.45.6
 silly-rp.test.iwj.relativity.greenend.org.uk flags 0 type 131089 RP(822) submitted
 silly-rp.test.iwj.relativity.greenend.org.uk flags 0 type RP(822): OK; nrrs=6; cname=$; owner=$; ttl=60
- "<>" ""
- "i@ucam.org" ""
- "i.j@ucam.org" ""
- "\x22i\\.\\.j\x22@ucam.org" ""
- "\x22\\.i\x22@ucam.org" ""
- "\x22i\\.\x22@ucam.org" ""
+ . .
+ i@ucam.org .
+ i.j@ucam.org .
+ "i..j"@ucam.org .
+ ".i"@ucam.org .
+ "i."@ucam.org .
 rc=0
index 2f603545929bb714e1cce5ff601dcb467aa4212b..9a0284f64f8e1ec33569e1c4c8896a12e7859a68 100644 (file)
@@ -1,14 +1,14 @@
-default
+adnstest default
 :131089 silly-rp.test.iwj.relativity.greenend.org.uk
  start 923859567.899146
  socket type=SOCK_DGRAM
  socket=4
  +0.000411
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
+ fcntl=~O_NONBLOCK&...
  +0.000094
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
  +0.000073
  sendto fd=4 addr=172.18.45.6:53
      311f0100 00010000 00000000 0873696c 6c792d72 70047465 73740369 776a0a72
index 73523b2ee830a7a5306557d6016c7534a6d226b6..4d1357b3eac1656864133f3cdf43b0c2d0a9ec14 100644 (file)
@@ -1,14 +1,14 @@
-default
+adnstest default
 :1 manyaddrs.test.iwj.relativity.greenend.org.uk
  start 912888920.123769
  socket type=SOCK_DGRAM
  socket=4
  +0.000245
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
+ fcntl=~O_NONBLOCK&...
  +0.000705
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
  +0.000073
  sendto fd=4 addr=172.18.45.6:53
      311f0100 00010000 00000000 096d616e 79616464 72730474 65737403 69776a0a
diff --git a/regress/case-manyptrwrong.err b/regress/case-manyptrwrong.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-manyptrwrong.out b/regress/case-manyptrwrong.out
new file mode 100644 (file)
index 0000000..819a929
--- /dev/null
@@ -0,0 +1,153 @@
+adns debug: using nameserver 195.224.55.129
+254.0.99.203.in-addr.arpa flags 0 type 1 A(-) submitted
+254.0.99.203.in-addr.arpa flags 0 type 2 NS(raw) submitted
+254.0.99.203.in-addr.arpa flags 0 type 5 CNAME(-) submitted
+254.0.99.203.in-addr.arpa flags 0 type 6 SOA(raw) submitted
+254.0.99.203.in-addr.arpa flags 0 type 12 PTR(raw) submitted
+254.0.99.203.in-addr.arpa flags 0 type 13 HINFO(-) submitted
+254.0.99.203.in-addr.arpa flags 0 type 15 MX(raw) submitted
+254.0.99.203.in-addr.arpa flags 0 type 16 TXT(-) submitted
+254.0.99.203.in-addr.arpa flags 0 type 17 RP(raw) submitted
+254.0.99.203.in-addr.arpa flags 0 type 65537 A(addr) submitted
+254.0.99.203.in-addr.arpa flags 0 type 65538 NS(+addr) submitted
+254.0.99.203.in-addr.arpa flags 0 type 65548 PTR(checked) submitted
+254.0.99.203.in-addr.arpa flags 0 type 65551 MX(+addr) submitted
+254.0.99.203.in-addr.arpa flags 0 type 131078 SOA(822) submitted
+254.0.99.203.in-addr.arpa flags 0 type 131089 RP(822) submitted
+adns debug: TCP connected (NS=195.224.55.129)
+254.0.99.203.in-addr.arpa flags 0 type PTR(raw): OK; nrrs=94; cname=$; owner=$; ttl=80790
+ ns.security.co.nz
+ tetra.co.nz
+ mail.agate.co.nz
+ ns.agate.co.nz
+ securitytraining.co.nz
+ ns.giftbasket.co.nz
+ ns.security.gen.nz
+ bouquet.co.nz
+ investigation.co.nz
+ ns.nzipi.org.nz
+ mail.neru.co.nz
+ security.co.nz
+ ns.storewatch.co.nz
+ security.gen.nz
+ ns.tetra.co.nz
+ mail.tetra.co.nz
+ ns.securicard.co.nz
+ ns.underhour.co.nz
+ bcc.co.nz
+ security.org.nz
+ burglaralarms.co.nz
+ ns.safes.co.nz
+ ns.security.org.nz
+ couperconsulting.co.nz
+ securityguards.co.nz
+ ns.guards.co.nz
+ asis.org.nz
+ neru.co.nz
+ giftbasket.co.nz
+ magic.co.nz
+ mail.bcc.co.nz
+ ns.investigation.co.nz
+ nzipi.org.nz
+ ns.bouquet.co.nz
+ mail.safes.co.nz
+ ns.bcc.co.nz
+ ns.burglaralarms.co.nz
+ ns.securityguards.co.nz
+ covertcameras.co.nz
+ ns.neru.co.nz
+ ns.covertcameras.co.nz
+ bouquets.co.nz
+ concentric.co.nz
+ ns.securitytraining.co.nz
+ mail.couperconsulting.co.nz
+ retailsecurity.co.nz
+ ns.concentric.co.nz
+ mail.magic.co.nz
+ nzangling.co.nz
+ ns.couperconsulting.co.nz
+ ns.nzangling.co.nz
+ mail.storewatch.co.nz
+ swift.co.nz
+ mail.selective.co.nz
+ ns.forefront.co.nz
+ mail.nzangling.co.nz
+ guards.co.nz
+ mail.nzdesigns.co.nz
+ storewatch.co.nz
+ ns.securitymanagement.co.nz
+ mail.woolworths.co.nz
+ mail.concentric.co.nz
+ selective.co.nz
+ specialinvestigations.co.nz
+ ns.swift.co.nz
+ mail.swift.co.nz
+ ns.securenet.net.nz
+ privateinvestigation.co.nz
+ ns.privateinvestigation.co.nz
+ etrade.co.nz
+ ns.specialinvestigations.co.nz
+ mail.ansett.co.nz
+ ftp.warrent.co.nz
+ ns.retailsecurity.co.nz
+ mail.securitymanagement.co.nz
+ ns.magic.co.nz
+ mail.forefront.co.nz
+ mail.securicard.co.nz
+ securicard.co.nz
+ ns.nzdesigns.co.nz
+ safes.co.nz
+ ns.selective.co.nz
+ forefront.co.nz
+ securitymanagement.co.nz
+ underhour.co.nz
+ securenet.net.nz
+ mail.specialinvestigations.co.nz
+ nzdesigns.co.nz
+ ns.etrade.co.nz
+ mail.nzipi.org.nz
+ mail.underhour.co.nz
+ ns.asis.org.nz
+ ns.bouquets.co.nz
+ agate.co.nz
+adns debug: reply not found, id 313b, query owner security.gen.nz (NS=195.224.55.129)
+adns debug: reply not found, id 313c, query owner ns.tetra.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 313d, query owner mail.tetra.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 313e, query owner ns.securicard.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 313f, query owner ns.underhour.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3140, query owner bcc.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3141, query owner security.org.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3142, query owner burglaralarms.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3143, query owner ns.safes.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3144, query owner ns.security.org.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3145, query owner couperconsulting.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3146, query owner securityguards.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3147, query owner ns.guards.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3148, query owner asis.org.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3149, query owner neru.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 314a, query owner giftbasket.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 314b, query owner magic.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 314c, query owner mail.bcc.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 314d, query owner ns.investigation.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 314e, query owner nzipi.org.nz (NS=195.224.55.129)
+adns debug: reply not found, id 314f, query owner ns.bouquet.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3150, query owner mail.safes.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3151, query owner ns.bcc.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3152, query owner ns.burglaralarms.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 3153, query owner ns.securityguards.co.nz (NS=195.224.55.129)
+adns debug: reply not found, id 318b, query owner agate.co.nz (NS=195.224.55.129)
+254.0.99.203.in-addr.arpa flags 0 type PTR(checked): Inconsistent resource records in DNS; nrrs=0; cname=$; owner=$; ttl=80790
+254.0.99.203.in-addr.arpa flags 0 type A(-): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type NS(raw): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type CNAME(-): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type SOA(raw): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type HINFO(-): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type MX(raw): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type TXT(-): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type RP(raw): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type A(addr): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type NS(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type MX(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type SOA(822): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+254.0.99.203.in-addr.arpa flags 0 type RP(822): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+rc=0
diff --git a/regress/case-manyptrwrong.sys b/regress/case-manyptrwrong.sys
new file mode 100644 (file)
index 0000000..1346753
--- /dev/null
@@ -0,0 +1,1287 @@
+adnstest ncipher
+254.0.99.203.in-addr.arpa
+ start 933269010.293417
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000166
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000063
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000049
+ sendto fd=4 addr=195.224.55.129:53
+     311f0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.000861
+ sendto fd=4 addr=195.224.55.129:53
+     31200100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.000518
+ sendto fd=4 addr=195.224.55.129:53
+     31210100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.000511
+ sendto fd=4 addr=195.224.55.129:53
+     31220100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.000533
+ sendto fd=4 addr=195.224.55.129:53
+     31230100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000573
+ sendto fd=4 addr=195.224.55.129:53
+     31240100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0d0001.
+ sendto=43
+ +0.000523
+ sendto fd=4 addr=195.224.55.129:53
+     31250100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.000518
+ sendto fd=4 addr=195.224.55.129:53
+     31260100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 100001.
+ sendto=43
+ +0.000544
+ sendto fd=4 addr=195.224.55.129:53
+     31270100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.000509
+ sendto fd=4 addr=195.224.55.129:53
+     31280100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.000543
+ sendto fd=4 addr=195.224.55.129:53
+     31290100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.000528
+ sendto fd=4 addr=195.224.55.129:53
+     312a0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000576
+ sendto fd=4 addr=195.224.55.129:53
+     312b0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.000515
+ sendto fd=4 addr=195.224.55.129:53
+     312c0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.000635
+ sendto fd=4 addr=195.224.55.129:53
+     312d0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.000525
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.991588
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.001474
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31238380 00010013 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 0100013b 96001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 00013b96 00080574 65747261 c043c00c
+     000c0001 00013b96 000d046d 61696c05 61676174 65c043c0 0c000c00 0100013b
+     96000502 6e73c06f c00c000c 00010001 3b960013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 0100013b 96001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 0100013b 96001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 013b9600 0a07626f 75717565 74c043c0 0c000c00 0100013b
+     9600100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 0100013b 96000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 00013b96 000c046d 61696c04
+     6e657275 c043c00c 000c0001 00013b96 0002c03a c00c000c 00010001 3b960010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010001 3b960002 c0d2c00c
+     000c0001 00013b96 0005026e 73c056c0 0c000c00 0100013b 96000704 6d61696c
+     c056c00c 000c0001 00013b96 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 00013b96 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     013b9600 06036263 63c043.
+ +0.001498
+ socket type=SOCK_STREAM
+ socket=5
+ +0.000954
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000053
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000047
+ connect fd=5 addr=195.224.55.129:53
+ connect=EINPROGRESS
+ +0.000195
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000071
+ select max=6 rfds=[4] wfds=[5] efds=[] to=1.987296
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.000949
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000147
+ write fd=5
+     002b3123 01000001 00000000 00000332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.000532
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.985668
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.011715
+ read fd=5 buflen=2
+ read=OK
+     097f.
+ +0.000186
+ read fd=5 buflen=2431
+ read=OK
+     31238180 0001005e 00020002 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 0100013b 96001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 00013b96 00080574 65747261 c043c00c
+     000c0001 00013b96 000d046d 61696c05 61676174 65c043c0 0c000c00 0100013b
+     96000502 6e73c06f c00c000c 00010001 3b960013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 0100013b 96001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 0100013b 96001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 013b9600 0a07626f 75717565 74c043c0 0c000c00 0100013b
+     9600100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 0100013b 96000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 00013b96 000c046d 61696c04
+     6e657275 c043c00c 000c0001 00013b96 0002c03a c00c000c 00010001 3b960010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010001 3b960002 c0d2c00c
+     000c0001 00013b96 0005026e 73c056c0 0c000c00 0100013b 96000704 6d61696c
+     c056c00c 000c0001 00013b96 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 00013b96 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     013b9600 06036263 63c043c0 0c000c00 0100013b 96000b08 73656375 72697479
+     c128c00c 000c0001 00013b96 00100d62 7572676c 6172616c 61726d73 c043c00c
+     000c0001 00013b96 000b026e 73057361 666573c0 43c00c00 0c000100 013b9600
+     05026e73 c1f7c00c 000c0001 00013b96 00131063 6f757065 72636f6e 73756c74
+     696e67c0 43c00c00 0c000100 013b9600 110e7365 63757269 74796775 61726473
+     c043c00c 000c0001 00013b96 000c026e 73066775 61726473 c043c00c 000c0001
+     00013b96 00070461 736973c1 28c00c00 0c000100 013b9600 02c13fc0 0c000c00
+     0100013b 960002c0 b6c00c00 0c000100 013b9600 08056d61 676963c0 43c00c00
+     0c000100 013b9600 07046d61 696cc1e5 c00c000c 00010001 3b960005 026e73c1
+     03c00c00 0c000100 013b9600 02c122c0 0c000c00 0100013b 96000502 6e73c0ed
+     c00c000c 00010001 3b960007 046d6169 6cc22dc0 0c000c00 0100013b 96000502
+     6e73c1e5 c00c000c 00010001 3b960005 026e73c2 0ec00c00 0c000100 013b9600
+     05026e73 c271c00c 000c0001 00013b96 00100d63 6f766572 7463616d 65726173
+     c043c00c 000c0001 00013b96 0005026e 73c13fc0 0c000c00 0100013b 96001302
+     6e730d63 6f766572 7463616d 65726173 c043c00c 000c0001 00013b96 000b0862
+     6f757175 657473c0 43c00c00 0c000100 013b9600 0d0a636f 6e63656e 74726963
+     c043c00c 000c0001 00013b96 0005026e 73c094c0 0c000c00 0100013b 96000704
+     6d61696c c252c00c 000c0001 00013b96 00110e72 65746169 6c736563 75726974
+     79c043c0 0c000c00 0100013b 96001002 6e730a63 6f6e6365 6e747269 63c043c0
+     0c000c00 0100013b 96000d04 6d61696c 056d6167 6963c043 c00c000c 00010001
+     3b96000c 096e7a61 6e676c69 6e67c043 c00c000c 00010001 3b960005 026e73c2
+     52c00c00 0c000100 013b9600 0f026e73 096e7a61 6e676c69 6e67c043 c00c000c
+     00010001 3b960007 046d6169 6cc163c0 0c000c00 0100013b 96000805 73776966
+     74c043c0 0c000c00 0100013b 96001104 6d61696c 0973656c 65637469 7665c043
+     c00c000c 00010001 3b96000f 026e7309 666f7265 66726f6e 74c043c0 0c000c00
+     0100013b 96001104 6d61696c 096e7a61 6e676c69 6e67c043 c00c000c 00010001
+     3b960009 06677561 726473c0 43c00c00 0c000100 013b9600 11046d61 696c096e
+     7a646573 69676e73 c043c00c 000c0001 00013b96 0002c163 c00c000c 00010001
+     3b960018 026e7312 73656375 72697479 6d616e61 67656d65 6e74c043 c00c000c
+     00010001 3b960012 046d6169 6c0a776f 6f6c776f 72746873 c043c00c 000c0001
+     00013b96 0012046d 61696c0a 636f6e63 656e.
+ +0.003706
+ read fd=5 buflen=973
+ read=EAGAIN
+ +0.000190
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.969871
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000115
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     312a8380 00010013 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 0100013b 96001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 00013b96 00080574 65747261 c043c00c
+     000c0001 00013b96 000d046d 61696c05 61676174 65c043c0 0c000c00 0100013b
+     96000502 6e73c06f c00c000c 00010001 3b960013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 0100013b 96001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 0100013b 96001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 013b9600 0a07626f 75717565 74c043c0 0c000c00 0100013b
+     9600100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 0100013b 96000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 00013b96 000c046d 61696c04
+     6e657275 c043c00c 000c0001 00013b96 0002c03a c00c000c 00010001 3b960010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010001 3b960002 c0d2c00c
+     000c0001 00013b96 0005026e 73c056c0 0c000c00 0100013b 96000704 6d61696c
+     c056c00c 000c0001 00013b96 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 00013b96 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     013b9600 06036263 63c043.
+ +0.001180
+ write fd=5
+     002b312a 01000001 00000000 00000332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.000444
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000085
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.968047
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.000311
+ read fd=5 buflen=973
+ read=OK
+     74726963 c043c00c 000c0001 00013b96 000c0973 656c6563 74697665 c043c00c
+     000c0001 00013b96 00181573 70656369 616c696e 76657374 69676174 696f6e73
+     c043c00c 000c0001 00013b96 000b026e 73057377 696674c0 43c00c00 0c000100
+     013b9600 0d046d61 696c0573 77696674 c043c00c 000c0001 00013b96 0013026e
+     73097365 63757265 6e657403 6e6574c0 46c00c00 0c000100 013b9600 17147072
+     69766174 65696e76 65737469 67617469 6f6ec043 c00c000c 00010001 3b96001a
+     026e7314 70726976 61746569 6e766573 74696761 74696f6e c043c00c 000c0001
+     00013b96 00090665 74726164 65c043c0 0c000c00 0100013b 96001b02 6e731573
+     70656369 616c696e 76657374 69676174 696f6e73 c043c00c 000c0001 00013b96
+     000e046d 61696c06 616e7365 7474c043 c00c000c 00010001 3b96000e 03667470
+     07776172 72656e74 c043c00c 000c0001 00013b96 0014026e 730e7265 7461696c
+     73656375 72697479 c043c00c 000c0001 00013b96 001a046d 61696c12 73656375
+     72697479 6d616e61 67656d65 6e74c043 c00c000c 00010001 3b96000b 026e7305
+     6d616769 63c043c0 0c000c00 0100013b 96001104 6d61696c 09666f72 6566726f
+     6e74c043 c00c000c 00010001 3b960007 046d6169 6cc1b1c0 0c000c00 0100013b
+     960002c1 b1c00c00 0c000100 013b9600 0f026e73 096e7a64 65736967 6e73c043
+     c00c000c 00010001 3b960002 c22dc00c 000c0001 00013b96 000f026e 73097365
+     6c656374 697665c0 43c00c00 0c000100 013b9600 0c09666f 72656672 6f6e74c0
+     43c00c00 0c000100 013b9600 15127365 63757269 74796d61 6e616765 6d656e74
+     c043c00c 000c0001 00013b96 0002c1cd c00c000c 00010001 3b960010 09736563
+     7572656e 6574036e 6574c046 c00c000c 00010001 3b96001d 046d6169 6c157370
+     65636961 6c696e76 65737469 67617469 6f6e73c0 43c00c00 0c000100 013b9600
+     0c096e7a 64657369 676e73c0 43c00c00 0c000100 013b9600 0c026e73 06657472
+     616465c0 43c00c00 0c000100 013b9600 07046d61 696cc122 c00c000c 00010001
+     3b960007 046d6169 6cc1cdc0 0c000c00 0100013b 96000a02 6e730461 736973c1
+     28c00c00 0c000100 013b9600 0e026e73 08626f75 71756574 73c043c0 0c000c00
+     0100013b 960002c0 6f013002 39390332 30330749 4e2d4144 44520441 52504100
+     00020001 00053014 0002c037 01300239 39033230 3307494e 2d414444 52044152
+     50410000 02000100 05301400 11036e73 31077761 696b6174 6f026163 c046c037
+     00010001 00013c19 0004cb63 00fe036e 73310777 61696b61 746f0261 63c04600
+     01000100 013d0200 048cc880 0d.
+ +0.002240
+ read fd=5 buflen=2433
+ read=EAGAIN
+ +0.012290
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.953206
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.014898
+ read fd=5 buflen=2433
+ read=OK
+     097f312a 81800001 005e0002 00020332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 013b9600 13026e73 08736563
+     75726974 7902636f 026e7a00 c00c000c 00010001 3b960008 05746574 7261c043
+     c00c000c 00010001 3b96000d 046d6169 6c056167 617465c0 43c00c00 0c000100
+     013b9600 05026e73 c06fc00c 000c0001 00013b96 00131073 65637572 69747974
+     7261696e 696e67c0 43c00c00 0c000100 013b9600 10026e73 0a676966 74626173
+     6b6574c0 43c00c00 0c000100 013b9600 12026e73 08736563 75726974 79036765
+     6ec046c0 0c000c00 0100013b 96000a07 626f7571 756574c0 43c00c00 0c000100
+     013b9600 100d696e 76657374 69676174 696f6ec0 43c00c00 0c000100 013b9600
+     0f026e73 056e7a69 7069036f 7267c046 c00c000c 00010001 3b96000c 046d6169
+     6c046e65 7275c043 c00c000c 00010001 3b960002 c03ac00c 000c0001 00013b96
+     0010026e 730a7374 6f726577 61746368 c043c00c 000c0001 00013b96 0002c0d2
+     c00c000c 00010001 3b960005 026e73c0 56c00c00 0c000100 013b9600 07046d61
+     696cc056 c00c000c 00010001 3b960010 026e730a 73656375 72696361 7264c043
+     c00c000c 00010001 3b96000f 026e7309 756e6465 72686f75 72c043c0 0c000c00
+     0100013b 96000603 626363c0 43c00c00 0c000100 013b9600 0b087365 63757269
+     7479c128 c00c000c 00010001 3b960010 0d627572 676c6172 616c6172 6d73c043
+     c00c000c 00010001 3b96000b 026e7305 73616665 73c043c0 0c000c00 0100013b
+     96000502 6e73c1f7 c00c000c 00010001 3b960013 10636f75 70657263 6f6e7375
+     6c74696e 67c043c0 0c000c00 0100013b 9600110e 73656375 72697479 67756172
+     6473c043 c00c000c 00010001 3b96000c 026e7306 67756172 6473c043 c00c000c
+     00010001 3b960007 04617369 73c128c0 0c000c00 0100013b 960002c1 3fc00c00
+     0c000100 013b9600 02c0b6c0 0c000c00 0100013b 96000805 6d616769 63c043c0
+     0c000c00 0100013b 96000704 6d61696c c1e5c00c 000c0001 00013b96 0005026e
+     73c103c0 0c000c00 0100013b 960002c1 22c00c00 0c000100 013b9600 05026e73
+     c0edc00c 000c0001 00013b96 0007046d 61696cc2 2dc00c00 0c000100 013b9600
+     05026e73 c1e5c00c 000c0001 00013b96 0005026e 73c20ec0 0c000c00 0100013b
+     96000502 6e73c271 c00c000c 00010001 3b960010 0d636f76 65727463 616d6572
+     6173c043 c00c000c 00010001 3b960005 026e73c1 3fc00c00 0c000100 013b9600
+     13026e73 0d636f76 65727463 616d6572 6173c043 c00c000c 00010001 3b96000b
+     08626f75 71756574 73c043c0 0c000c00 0100013b 96000d0a 636f6e63 656e7472
+     6963c043 c00c000c 00010001 3b960005 026e73c0 94c00c00 0c000100 013b9600
+     07046d61 696cc252 c00c000c 00010001 3b960011 0e726574 61696c73 65637572
+     697479c0 43c00c00 0c000100 013b9600 10026e73 0a636f6e 63656e74 726963c0
+     43c00c00 0c000100 013b9600 0d046d61 696c056d 61676963 c043c00c 000c0001
+     00013b96 000c096e 7a616e67 6c696e67 c043c00c 000c0001 00013b96 0005026e
+     73c252c0 0c000c00 0100013b 96000f02 6e73096e 7a616e67 6c696e67 c043c00c
+     000c0001 00013b96 0007046d 61696cc1 63c00c00 0c000100 013b9600 08057377
+     696674c0 43c00c00 0c000100 013b9600 11046d61 696c0973 656c6563 74697665
+     c043c00c 000c0001 00013b96 000f026e 7309666f 72656672 6f6e74c0 43c00c00
+     0c000100 013b9600 11046d61 696c096e 7a616e67 6c696e67 c043c00c 000c0001
+     00013b96 00090667 75617264 73c043c0 0c000c00 0100013b 96001104 6d61696c
+     096e7a64 65736967 6e73c043 c00c000c 00010001 3b960002 c163c00c 000c0001
+     00013b96 0018026e 73127365 63757269 74796d61 6e616765 6d656e74 c043c00c
+     000c0001 00013b96 0012046d 61696c0a 776f6f6c 776f7274 6873c043 c00c000c
+     00010001 3b960012 046d6169 6c0a636f 6e63656e.
+ +0.003337
+ read fd=5 buflen=973
+ read=EAGAIN
+ +0.000189
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.934782
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.102926
+ read fd=5 buflen=973
+ read=OK
+     74726963 c043c00c 000c0001 00013b96 000c0973 656c6563 74697665 c043c00c
+     000c0001 00013b96 00181573 70656369 616c696e 76657374 69676174 696f6e73
+     c043c00c 000c0001 00013b96 000b026e 73057377 696674c0 43c00c00 0c000100
+     013b9600 0d046d61 696c0573 77696674 c043c00c 000c0001 00013b96 0013026e
+     73097365 63757265 6e657403 6e6574c0 46c00c00 0c000100 013b9600 17147072
+     69766174 65696e76 65737469 67617469 6f6ec043 c00c000c 00010001 3b96001a
+     026e7314 70726976 61746569 6e766573 74696761 74696f6e c043c00c 000c0001
+     00013b96 00090665 74726164 65c043c0 0c000c00 0100013b 96001b02 6e731573
+     70656369 616c696e 76657374 69676174 696f6e73 c043c00c 000c0001 00013b96
+     000e046d 61696c06 616e7365 7474c043 c00c000c 00010001 3b96000e 03667470
+     07776172 72656e74 c043c00c 000c0001 00013b96 0014026e 730e7265 7461696c
+     73656375 72697479 c043c00c 000c0001 00013b96 001a046d 61696c12 73656375
+     72697479 6d616e61 67656d65 6e74c043 c00c000c 00010001 3b96000b 026e7305
+     6d616769 63c043c0 0c000c00 0100013b 96001104 6d61696c 09666f72 6566726f
+     6e74c043 c00c000c 00010001 3b960007 046d6169 6cc1b1c0 0c000c00 0100013b
+     960002c1 b1c00c00 0c000100 013b9600 0f026e73 096e7a64 65736967 6e73c043
+     c00c000c 00010001 3b960002 c22dc00c 000c0001 00013b96 000f026e 73097365
+     6c656374 697665c0 43c00c00 0c000100 013b9600 0c09666f 72656672 6f6e74c0
+     43c00c00 0c000100 013b9600 15127365 63757269 74796d61 6e616765 6d656e74
+     c043c00c 000c0001 00013b96 0002c1cd c00c000c 00010001 3b960010 09736563
+     7572656e 6574036e 6574c046 c00c000c 00010001 3b96001d 046d6169 6c157370
+     65636961 6c696e76 65737469 67617469 6f6e73c0 43c00c00 0c000100 013b9600
+     0c096e7a 64657369 676e73c0 43c00c00 0c000100 013b9600 0c026e73 06657472
+     616465c0 43c00c00 0c000100 013b9600 07046d61 696cc122 c00c000c 00010001
+     3b960007 046d6169 6cc1cdc0 0c000c00 0100013b 96000a02 6e730461 736973c1
+     28c00c00 0c000100 013b9600 0e026e73 08626f75 71756574 73c043c0 0c000c00
+     0100013b 960002c0 6f013002 39390332 30330749 4e2d4144 44520441 52504100
+     00020001 00053014 0002c037 01300239 39033230 3307494e 2d414444 52044152
+     50410000 02000100 05301400 11036e73 31077761 696b6174 6f026163 c046c037
+     00010001 00013c19 0004cb63 00fe036e 73310777 61696b61 746f0261 63c04600
+     01000100 013d0200 048cc880 0d.
+ +0.002246
+ sendto fd=4 addr=195.224.55.129:53
+     312e0100 00010000 00000000 026e7308 73656375 72697479 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001645
+ sendto fd=4 addr=195.224.55.129:53
+     312f0100 00010000 00000000 05746574 72610263 6f026e7a 00000100 01.
+ sendto=29
+ +0.000578
+ sendto fd=4 addr=195.224.55.129:53
+     31300100 00010000 00000000 046d6169 6c056167 61746502 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000605
+ sendto fd=4 addr=195.224.55.129:53
+     31310100 00010000 00000000 026e7305 61676174 6502636f 026e7a00 00010001.
+ sendto=32
+ +0.000624
+ sendto fd=4 addr=195.224.55.129:53
+     31320100 00010000 00000000 10736563 75726974 79747261 696e696e 6702636f
+     026e7a00 00010001.
+ sendto=40
+ +0.000624
+ sendto fd=4 addr=195.224.55.129:53
+     31330100 00010000 00000000 026e730a 67696674 6261736b 65740263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.000647
+ sendto fd=4 addr=195.224.55.129:53
+     31340100 00010000 00000000 026e7308 73656375 72697479 0367656e 026e7a00
+     00010001.
+ sendto=36
+ +0.000624
+ sendto fd=4 addr=195.224.55.129:53
+     31350100 00010000 00000000 07626f75 71756574 02636f02 6e7a0000 010001.
+ sendto=31
+ +0.000606
+ sendto fd=4 addr=195.224.55.129:53
+     31360100 00010000 00000000 0d696e76 65737469 67617469 6f6e0263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.000591
+ sendto fd=4 addr=195.224.55.129:53
+     31370100 00010000 00000000 026e7305 6e7a6970 69036f72 67026e7a 00000100
+     01.
+ sendto=33
+ +0.000617
+ sendto fd=4 addr=195.224.55.129:53
+     31380100 00010000 00000000 046d6169 6c046e65 72750263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.000622
+ sendto fd=4 addr=195.224.55.129:53
+     31390100 00010000 00000000 08736563 75726974 7902636f 026e7a00 00010001.
+ sendto=32
+ +0.000608
+ sendto fd=4 addr=195.224.55.129:53
+     313a0100 00010000 00000000 026e730a 73746f72 65776174 63680263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.000655
+ sendto fd=4 addr=195.224.55.129:53
+     313b0100 00010000 00000000 08736563 75726974 79036765 6e026e7a 00000100
+     01.
+ sendto=33
+ +0.000617
+ sendto fd=4 addr=195.224.55.129:53
+     313c0100 00010000 00000000 026e7305 74657472 6102636f 026e7a00 00010001.
+ sendto=32
+ +0.000622
+ sendto fd=4 addr=195.224.55.129:53
+     313d0100 00010000 00000000 046d6169 6c057465 74726102 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000638
+ sendto fd=4 addr=195.224.55.129:53
+     313e0100 00010000 00000000 026e730a 73656375 72696361 72640263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.000645
+ sendto fd=4 addr=195.224.55.129:53
+     313f0100 00010000 00000000 026e7309 756e6465 72686f75 7202636f 026e7a00
+     00010001.
+ sendto=36
+ +0.000621
+ sendto fd=4 addr=195.224.55.129:53
+     31400100 00010000 00000000 03626363 02636f02 6e7a0000 010001.
+ sendto=27
+ +0.000634
+ sendto fd=4 addr=195.224.55.129:53
+     31410100 00010000 00000000 08736563 75726974 79036f72 67026e7a 00000100
+     01.
+ sendto=33
+ +0.000669
+ sendto fd=4 addr=195.224.55.129:53
+     31420100 00010000 00000000 0d627572 676c6172 616c6172 6d730263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.000788
+ sendto fd=4 addr=195.224.55.129:53
+     31430100 00010000 00000000 026e7305 73616665 7302636f 026e7a00 00010001.
+ sendto=32
+ +0.000784
+ sendto fd=4 addr=195.224.55.129:53
+     31440100 00010000 00000000 026e7308 73656375 72697479 036f7267 026e7a00
+     00010001.
+ sendto=36
+ +0.000824
+ sendto fd=4 addr=195.224.55.129:53
+     31450100 00010000 00000000 10636f75 70657263 6f6e7375 6c74696e 6702636f
+     026e7a00 00010001.
+ sendto=40
+ +0.000796
+ sendto fd=4 addr=195.224.55.129:53
+     31460100 00010000 00000000 0e736563 75726974 79677561 72647302 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.000849
+ sendto fd=4 addr=195.224.55.129:53
+     31470100 00010000 00000000 026e7306 67756172 64730263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.000819
+ sendto fd=4 addr=195.224.55.129:53
+     31480100 00010000 00000000 04617369 73036f72 67026e7a 00000100 01.
+ sendto=29
+ +0.000730
+ sendto fd=4 addr=195.224.55.129:53
+     31490100 00010000 00000000 046e6572 7502636f 026e7a00 00010001.
+ sendto=28
+ +0.000761
+ sendto fd=4 addr=195.224.55.129:53
+     314a0100 00010000 00000000 0a676966 74626173 6b657402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000781
+ sendto fd=4 addr=195.224.55.129:53
+     314b0100 00010000 00000000 056d6167 69630263 6f026e7a 00000100 01.
+ sendto=29
+ +0.000760
+ sendto fd=4 addr=195.224.55.129:53
+     314c0100 00010000 00000000 046d6169 6c036263 6302636f 026e7a00 00010001.
+ sendto=32
+ +0.000770
+ sendto fd=4 addr=195.224.55.129:53
+     314d0100 00010000 00000000 026e730d 696e7665 73746967 6174696f 6e02636f
+     026e7a00 00010001.
+ sendto=40
+ +0.000825
+ sendto fd=4 addr=195.224.55.129:53
+     314e0100 00010000 00000000 056e7a69 7069036f 7267026e 7a000001 0001.
+ sendto=30
+ +0.000781
+ sendto fd=4 addr=195.224.55.129:53
+     314f0100 00010000 00000000 026e7307 626f7571 75657402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000816
+ sendto fd=4 addr=195.224.55.129:53
+     31500100 00010000 00000000 046d6169 6c057361 66657302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000796
+ sendto fd=4 addr=195.224.55.129:53
+     31510100 00010000 00000000 026e7303 62636302 636f026e 7a000001 0001.
+ sendto=30
+ +0.000785
+ sendto fd=4 addr=195.224.55.129:53
+     31520100 00010000 00000000 026e730d 62757267 6c617261 6c61726d 7302636f
+     026e7a00 00010001.
+ sendto=40
+ +0.000780
+ sendto fd=4 addr=195.224.55.129:53
+     31530100 00010000 00000000 026e730e 73656375 72697479 67756172 64730263
+     6f026e7a 00000100 01.
+ sendto=41
+ +0.000840
+ sendto fd=4 addr=195.224.55.129:53
+     31540100 00010000 00000000 0d636f76 65727463 616d6572 61730263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.000816
+ sendto fd=4 addr=195.224.55.129:53
+     31550100 00010000 00000000 026e7304 6e657275 02636f02 6e7a0000 010001.
+ sendto=31
+ +0.000778
+ sendto fd=4 addr=195.224.55.129:53
+     31560100 00010000 00000000 026e730d 636f7665 72746361 6d657261 7302636f
+     026e7a00 00010001.
+ sendto=40
+ +0.000840
+ sendto fd=4 addr=195.224.55.129:53
+     31570100 00010000 00000000 08626f75 71756574 7302636f 026e7a00 00010001.
+ sendto=32
+ +0.000765
+ sendto fd=4 addr=195.224.55.129:53
+     31580100 00010000 00000000 0a636f6e 63656e74 72696302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000829
+ sendto fd=4 addr=195.224.55.129:53
+     31590100 00010000 00000000 026e7310 73656375 72697479 74726169 6e696e67
+     02636f02 6e7a0000 010001.
+ sendto=43
+ +0.000815
+ sendto fd=4 addr=195.224.55.129:53
+     315a0100 00010000 00000000 046d6169 6c10636f 75706572 636f6e73 756c7469
+     6e670263 6f026e7a 00000100 01.
+ sendto=45
+ +0.000857
+ sendto fd=4 addr=195.224.55.129:53
+     315b0100 00010000 00000000 0e726574 61696c73 65637572 69747902 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.000827
+ sendto fd=4 addr=195.224.55.129:53
+     315c0100 00010000 00000000 026e730a 636f6e63 656e7472 69630263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.000807
+ sendto fd=4 addr=195.224.55.129:53
+     315d0100 00010000 00000000 046d6169 6c056d61 67696302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000830
+ sendto fd=4 addr=195.224.55.129:53
+     315e0100 00010000 00000000 096e7a61 6e676c69 6e670263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.000809
+ sendto fd=4 addr=195.224.55.129:53
+     315f0100 00010000 00000000 026e7310 636f7570 6572636f 6e73756c 74696e67
+     02636f02 6e7a0000 010001.
+ sendto=43
+ +0.000864
+ sendto fd=4 addr=195.224.55.129:53
+     31600100 00010000 00000000 026e7309 6e7a616e 676c696e 6702636f 026e7a00
+     00010001.
+ sendto=36
+ +0.000806
+ sendto fd=4 addr=195.224.55.129:53
+     31610100 00010000 00000000 046d6169 6c0a7374 6f726577 61746368 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001021
+ sendto fd=4 addr=195.224.55.129:53
+     31620100 00010000 00000000 05737769 66740263 6f026e7a 00000100 01.
+ sendto=29
+ +0.000910
+ sendto fd=4 addr=195.224.55.129:53
+     31630100 00010000 00000000 046d6169 6c097365 6c656374 69766502 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.000882
+ sendto fd=4 addr=195.224.55.129:53
+     31640100 00010000 00000000 026e7309 666f7265 66726f6e 7402636f 026e7a00
+     00010001.
+ sendto=36
+ +0.000888
+ sendto fd=4 addr=195.224.55.129:53
+     31650100 00010000 00000000 046d6169 6c096e7a 616e676c 696e6702 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.000941
+ sendto fd=4 addr=195.224.55.129:53
+     31660100 00010000 00000000 06677561 72647302 636f026e 7a000001 0001.
+ sendto=30
+ +0.000901
+ sendto fd=4 addr=195.224.55.129:53
+     31670100 00010000 00000000 046d6169 6c096e7a 64657369 676e7302 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.000952
+ sendto fd=4 addr=195.224.55.129:53
+     31680100 00010000 00000000 0a73746f 72657761 74636802 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000922
+ sendto fd=4 addr=195.224.55.129:53
+     31690100 00010000 00000000 026e7312 73656375 72697479 6d616e61 67656d65
+     6e740263 6f026e7a 00000100 01.
+ sendto=45
+ +0.000921
+ sendto fd=4 addr=195.224.55.129:53
+     316a0100 00010000 00000000 046d6169 6c0a776f 6f6c776f 72746873 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.000970
+ sendto fd=4 addr=195.224.55.129:53
+     316b0100 00010000 00000000 046d6169 6c0a636f 6e63656e 74726963 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.000911
+ sendto fd=4 addr=195.224.55.129:53
+     316c0100 00010000 00000000 0973656c 65637469 76650263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.000909
+ sendto fd=4 addr=195.224.55.129:53
+     316d0100 00010000 00000000 15737065 6369616c 696e7665 73746967 6174696f
+     6e730263 6f026e7a 00000100 01.
+ sendto=45
+ +0.000952
+ sendto fd=4 addr=195.224.55.129:53
+     316e0100 00010000 00000000 026e7305 73776966 7402636f 026e7a00 00010001.
+ sendto=32
+ +0.000912
+ sendto fd=4 addr=195.224.55.129:53
+     316f0100 00010000 00000000 046d6169 6c057377 69667402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000910
+ sendto fd=4 addr=195.224.55.129:53
+     31700100 00010000 00000000 026e7309 73656375 72656e65 74036e65 74026e7a
+     00000100 01.
+ sendto=37
+ +0.000937
+ sendto fd=4 addr=195.224.55.129:53
+     31710100 00010000 00000000 14707269 76617465 696e7665 73746967 6174696f
+     6e02636f 026e7a00 00010001.
+ sendto=44
+ +0.000955
+ sendto fd=4 addr=195.224.55.129:53
+     31720100 00010000 00000000 026e7314 70726976 61746569 6e766573 74696761
+     74696f6e 02636f02 6e7a0000 010001.
+ sendto=47
+ +0.000949
+ sendto fd=4 addr=195.224.55.129:53
+     31730100 00010000 00000000 06657472 61646502 636f026e 7a000001 0001.
+ sendto=30
+ +0.000929
+ sendto fd=4 addr=195.224.55.129:53
+     31740100 00010000 00000000 026e7315 73706563 69616c69 6e766573 74696761
+     74696f6e 7302636f 026e7a00 00010001.
+ sendto=48
+ +0.000948
+ sendto fd=4 addr=195.224.55.129:53
+     31750100 00010000 00000000 046d6169 6c06616e 73657474 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.000956
+ sendto fd=4 addr=195.224.55.129:53
+     31760100 00010000 00000000 03667470 07776172 72656e74 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.000882
+ sendto fd=4 addr=195.224.55.129:53
+     31770100 00010000 00000000 026e730e 72657461 696c7365 63757269 74790263
+     6f026e7a 00000100 01.
+ sendto=41
+ +0.001013
+ sendto fd=4 addr=195.224.55.129:53
+     31780100 00010000 00000000 046d6169 6c127365 63757269 74796d61 6e616765
+     6d656e74 02636f02 6e7a0000 010001.
+ sendto=47
+ +0.000970
+ sendto fd=4 addr=195.224.55.129:53
+     31790100 00010000 00000000 026e7305 6d616769 6302636f 026e7a00 00010001.
+ sendto=32
+ +0.000945
+ sendto fd=4 addr=195.224.55.129:53
+     317a0100 00010000 00000000 046d6169 6c09666f 72656672 6f6e7402 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.000971
+ sendto fd=4 addr=195.224.55.129:53
+     317b0100 00010000 00000000 046d6169 6c0a7365 63757269 63617264 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.000947
+ sendto fd=4 addr=195.224.55.129:53
+     317c0100 00010000 00000000 0a736563 75726963 61726402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000933
+ sendto fd=4 addr=195.224.55.129:53
+     317d0100 00010000 00000000 026e7309 6e7a6465 7369676e 7302636f 026e7a00
+     00010001.
+ sendto=36
+ +0.000952
+ sendto fd=4 addr=195.224.55.129:53
+     317e0100 00010000 00000000 05736166 65730263 6f026e7a 00000100 01.
+ sendto=29
+ +0.000954
+ sendto fd=4 addr=195.224.55.129:53
+     317f0100 00010000 00000000 026e7309 73656c65 63746976 6502636f 026e7a00
+     00010001.
+ sendto=36
+ +0.000964
+ sendto fd=4 addr=195.224.55.129:53
+     31800100 00010000 00000000 09666f72 6566726f 6e740263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.000967
+ sendto fd=4 addr=195.224.55.129:53
+     31810100 00010000 00000000 12736563 75726974 796d616e 6167656d 656e7402
+     636f026e 7a000001 0001.
+ sendto=42
+ +0.000966
+ sendto fd=4 addr=195.224.55.129:53
+     31820100 00010000 00000000 09756e64 6572686f 75720263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.000942
+ sendto fd=4 addr=195.224.55.129:53
+     31830100 00010000 00000000 09736563 7572656e 6574036e 6574026e 7a000001
+     0001.
+ sendto=34
+ +0.000972
+ sendto fd=4 addr=195.224.55.129:53
+     31840100 00010000 00000000 046d6169 6c157370 65636961 6c696e76 65737469
+     67617469 6f6e7302 636f026e 7a000001 0001.
+ sendto=50
+ +0.000939
+ sendto fd=4 addr=195.224.55.129:53
+     31850100 00010000 00000000 096e7a64 65736967 6e730263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.000978
+ sendto fd=4 addr=195.224.55.129:53
+     31860100 00010000 00000000 026e7306 65747261 64650263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.000980
+ sendto fd=4 addr=195.224.55.129:53
+     31870100 00010000 00000000 046d6169 6c056e7a 69706903 6f726702 6e7a0000
+     010001.
+ sendto=35
+ +0.001012
+ sendto fd=4 addr=195.224.55.129:53
+     31880100 00010000 00000000 046d6169 6c09756e 64657268 6f757202 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.000973
+ sendto fd=4 addr=195.224.55.129:53
+     31890100 00010000 00000000 026e7304 61736973 036f7267 026e7a00 00010001.
+ sendto=32
+ +0.000972
+ sendto fd=4 addr=195.224.55.129:53
+     318a0100 00010000 00000000 026e7308 626f7571 75657473 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001216
+ sendto fd=4 addr=195.224.55.129:53
+     318b0100 00010000 00000000 05616761 74650263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001028
+ read fd=5 buflen=2433
+ read=EAGAIN
+ +0.000212
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.749926
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000262
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     312e8180 00010001 00020002 026e7308 73656375 72697479 02636f02 6e7a0000
+     010001c0 0c000100 0100013c 190004cb 6300fe08 73656375 72697479 02636f02
+     6e7a0000 02000100 013c1900 02c00cc0 33000200 0100013c 19001103 6e733107
+     7761696b 61746f02 6163c03f c00c0001 00010001 3c190004 cb6300fe c05b0001
+     00010001 3d020004 8cc8800d.
+ +0.000482
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     312f8180 00010001 00020002 05746574 72610263 6f026e7a 00000100 01c00c00
+     01000100 013c1400 04cb6300 fec00c00 02000100 013c1400 05026e73 c00cc00c
+     00020001 00013c14 0013036e 73310777 61696b61 746f0261 63026e7a 00c03900
+     01000100 013c1400 04cb6300 fec04a00 01000100 013d0200 048cc880 0d.
+ +0.001031
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31308180 00010001 00020002 046d6169 6c056167 61746502 636f026e 7a000001
+     0001c00c 00010001 00013c11 0004cb63 00fe0561 67617465 02636f02 6e7a0000
+     02000100 013d0100 11036e73 31077761 696b6174 6f026163 c03bc032 00020001
+     00013d01 0005026e 73c032c0 49000100 0100013d 0200048c c8800dc0 66000100
+     0100013d 010004cb 6300fe.
+ +0.000920
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31318180 00010001 00020002 026e7305 61676174 6502636f 026e7a00 00010001
+     c00c0001 00010001 3d010004 cb6300fe 05616761 74650263 6f026e7a 00000200
+     0100013d 01001103 6e733107 7761696b 61746f02 6163c039 c0300002 00010001
+     3d010002 c00cc047 00010001 00013d02 00048cc8 800dc00c 00010001 00013d01
+     0004cb63 00fe.
+ +0.000909
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31328180 00010001 00020002 10736563 75726974 79747261 696e696e 6702636f
+     026e7a00 00010001 c00c0001 00010001 3c150004 cb6300fe c00c0002 00010001
+     3c150005 026e73c0 0cc00c00 02000100 013c1500 13036e73 31077761 696b6174
+     6f026163 026e7a00 c0440001 00010000 6ada0004 cb6300fe c0550001 00010001
+     3d020004 8cc8800d.
+ +0.000890
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31338180 00010001 00020002 026e730a 67696674 6261736b 65740263 6f026e7a
+     00000100 01c00c00 01000100 013c1800 04cb6300 fe0a6769 66746261 736b6574
+     02636f02 6e7a0000 02000100 013c1800 02c00cc0 35000200 0100013c 18001103
+     6e733107 7761696b 61746f02 6163c043 c00c0001 00010001 3c180004 cb6300fe
+     c05f0001 00010001 3d020004 8cc8800d.
+ +0.000922
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31348180 00010001 00020002 026e7308 73656375 72697479 0367656e 026e7a00
+     00010001 c00c0001 00010000 5a4d0004 cb6300fe 08736563 75726974 79036765
+     6e026e7a 00000200 0100013c 11001103 6e733107 7761696b 61746f02 6163c041
+     c0340002 00010001 3c110002 c00cc04f 00010001 00013d02 00048cc8 800dc00c
+     00010001 00005a4d 0004cb63 00fe.
+ +0.000900
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31358180 00010001 00020002 07626f75 71756574 02636f02 6e7a0000 010001c0
+     0c000100 0100013c 150004cb 6300fec0 0c000200 0100013c 15000502 6e73c00c
+     c00c0002 00010001 3c150013 036e7331 07776169 6b61746f 02616302 6e7a00c0
+     3b000100 01000064 ce0004cb 6300fec0 4c000100 0100013d 0200048c c8800d.
+ +0.000863
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31368180 00010001 00020002 0d696e76 65737469 67617469 6f6e0263 6f026e7a
+     00000100 01c00c00 01000100 013c1100 04cb6300 fec00c00 02000100 013c1100
+     05026e73 c00cc00c 00020001 00013c11 0013036e 73310777 61696b61 746f0261
+     63024e5a 00c04100 01000100 012b3100 04cb6300 fec05200 01000100 013d0200
+     048cc880 0d.
+ +0.000907
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31378180 00010001 00020002 026e7305 6e7a6970 69036f72 67026e7a 00000100
+     01c00c00 01000100 013d0100 04cb6300 fe056e7a 69706903 6f726702 6e7a0000
+     02000100 013d0100 02c00cc0 31000200 0100013d 01001103 6e733107 7761696b
+     61746f02 6163c03b c00c0001 00010001 3d010004 cb6300fe c0570001 00010001
+     3d020004 8cc8800d.
+ +0.000880
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31388180 00010001 00020002 046d6169 6c046e65 72750263 6f026e7a 00000100
+     01c00c00 01000100 013c1100 04cb6300 fe046e65 72750263 6f026e7a 00000200
+     0100013c 12001103 6e733107 7761696b 61746f02 6163c039 c0310002 00010001
+     3c120005 026e73c0 31c04700 01000100 013d0200 048cc880 0dc06400 01000100
+     0064cc00 04cb6300 fe.
+ +0.000898
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31398180 00010001 00020002 08736563 75726974 7902636f 026e7a00 00010001
+     c00c0001 00010001 3c190004 cb6300fe c00c0002 00010001 3c190005 026e73c0
+     0cc00c00 02000100 013c1900 13036e73 31077761 696b6174 6f026163 024e5a00
+     c03c0001 00010001 3c190004 cb6300fe c04d0001 00010001 3d020004 8cc8800d.
+ +0.000858
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     313a8583 00010000 00010000 026e730a 73746f72 65776174 63680263 6f026e7a
+     00000100 0102636f 026e7a00 00060001 0000014b 002c046e 73393907 7761696b
+     61746f02 6163c028 03736f61 c03b7727 6ec50000 0e100000 07080027 8d000001
+     5180.
+ +0.000799
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     313b8180 00010001 00020002 08736563 75726974 79036765 6e026e7a 00000100
+     01c00c00 01000100 013c1100 04cb6300 fec00c00 02000100 013c1100 13036e73
+     31077761 696b6174 6f026163 026e7a00 c00c0002 00010001 3c110005 026e73c0
+     0cc03d00 01000100 013d0200 048cc880 0dc05c00 01000100 005a4d00 04cb6300
+     fe.
+ +0.015730
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     313c8180 00010001 00020002 026e7305 74657472 6102636f 026e7a00 00010001
+     c00c0001 00010001 3c140004 cb6300fe 05746574 72610263 6f026e7a 00000200
+     0100013c 140002c0 0cc03000 02000100 013c1400 11036e73 31077761 696b6174
+     6f026163 c039c00c 00010001 00013c14 0004cb63 00fec055 00010001 00013d02
+     00048cc8 800d.
+ +0.000552
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     313d8180 00010001 00020002 046d6169 6c057465 74726102 636f026e 7a000001
+     0001c00c 00010001 00013c12 0004cb63 00fe0574 65747261 02636f02 6e7a0000
+     02000100 013c1400 05026e73 c032c032 00020001 00013c14 0011036e 73310777
+     61696b61 746f0261 63c03bc0 49000100 0100013c 140004cb 6300fec0 5a000100
+     0100013d 0200048c c8800d.
+ +0.000560
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     313e8180 00010001 00020002 026e730a 73656375 72696361 72640263 6f026e7a
+     00000100 01c00c00 01000100 013d0100 04cb6300 fe0a7365 63757269 63617264
+     02636f02 6e7a0000 02000100 013d0100 02c00cc0 35000200 0100013d 01001103
+     6e733107 7761696b 61746f02 6163c043 c00c0001 00010001 3d010004 cb6300fe
+     c05f0001 00010001 3d020004 8cc8800d.
+ +0.000545
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     313f8180 00010001 00020002 026e7309 756e6465 72686f75 7202636f 026e7a00
+     00010001 c00c0001 00010001 3d010004 cb6300fe 09756e64 6572686f 75720263
+     6f026e7a 00000200 0100013d 010002c0 0cc03400 02000100 013d0100 11036e73
+     31077761 696b6174 6f026163 c041c00c 00010001 00013d01 0004cb63 00fec05d
+     00010001 00013d02 00048cc8 800d.
+ +0.000542
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31408180 00010001 00020002 03626363 02636f02 6e7a0000 010001c0 0c000100
+     0100013c 120004cb 6300fec0 0c000200 0100013c 18000502 6e73c00c c00c0002
+     00010001 3c180013 036e7331 07776169 6b61746f 02616302 6e7a00c0 37000100
+     0100006a dc0004cb 6300fec0 48000100 0100013d 0200048c c8800d.
+ +0.000518
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31418180 00010001 00020002 08736563 75726974 79036f72 67026e7a 00000100
+     01c00c00 01000100 013c1200 04cb6300 fec00c00 02000100 013c1200 05026e73
+     c00cc00c 00020001 00013c12 0013036e 73310777 61696b61 746f0261 63026e7a
+     00c03d00 01000100 013c1200 04cb6300 fec04e00 01000100 013d0200 048cc880
+     0d.
+ +0.000512
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31428180 00010001 00020002 0d627572 676c6172 616c6172 6d730263 6f026e7a
+     00000100 01c00c00 01000100 013c1200 04cb6300 fec00c00 02000100 013c1200
+     05026e73 c00cc00c 00020001 00013c12 0013036e 73310777 61696b61 746f0261
+     63026e7a 00c04100 01000100 0064cc00 04cb6300 fec05200 01000100 013d0200
+     048cc880 0d.
+ +0.000548
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31438583 00010000 00010000 026e7305 73616665 7302636f 026e7a00 00010001
+     05736166 65730263 6f026e7a 00000600 01000001 4c002e03 6e733104 69687567
+     036e6574 c0290373 6f610469 687567c0 26772768 a9000151 8000002a 30001275
+     000002a3 00.
+ +0.000452
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31448180 00010001 00020002 026e7308 73656375 72697479 036f7267 026e7a00
+     00010001 c00c0001 00010001 3c120004 cb6300fe 08736563 75726974 79036f72
+     67026e7a 00000200 0100013c 120002c0 0cc03400 02000100 013c1200 11036e73
+     31077761 696b6174 6f026163 c041c00c 00010001 00013c12 0004cb63 00fec05d
+     00010001 00013d02 00048cc8 800d.
+ +0.000539
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31458180 00010001 00020002 10636f75 70657263 6f6e7375 6c74696e 6702636f
+     026e7a00 00010001 c00c0001 00010001 3c120004 cb6300fe c00c0002 00010001
+     3d010013 036e7331 07776169 6b61746f 02616302 6e7a00c0 0c000200 0100013d
+     01000502 6e73c00c c0440001 00010001 3d020004 8cc8800d c0630001 00010000
+     718c0004 cb6300fe.
+ +0.000547
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31468180 00010001 00020002 0e736563 75726974 79677561 72647302 636f026e
+     7a000001 0001c00c 00010001 00013c12 0004cb63 00fec00c 00020001 00013c12
+     0005026e 73c00cc0 0c000200 0100013c 12001303 6e733107 7761696b 61746f02
+     6163026e 7a00c042 00010001 000064cc 0004cb63 00fec053 00010001 00013d02
+     00048cc8 800d.
+ +0.000649
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31478180 00010001 00020002 026e7306 67756172 64730263 6f026e7a 00000100
+     01c00c00 01000100 013cfa00 04cb6300 fe066775 61726473 02636f02 6e7a0000
+     02000100 013cfa00 02c00cc0 31000200 0100013c fa001103 6e733107 7761696b
+     61746f02 6163c03b c00c0001 00010001 3cfa0004 cb6300fe c0570001 00010001
+     3d020004 8cc8800d.
+ +0.000551
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31488180 00010001 00020002 04617369 73036f72 67026e7a 00000100 01c00c00
+     01000100 013c1200 04cb6300 fec00c00 02000100 013c1200 05026e73 c00cc00c
+     00020001 00013c12 0013036e 73310777 61696b61 746f0261 63026e7a 00c03900
+     01000100 006ad900 04cb6300 fec04a00 01000100 013d0200 048cc880 0d.
+ +0.000503
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31498180 00010001 00020002 046e6572 7502636f 026e7a00 00010001 c00c0001
+     00010001 3c120004 cb6300fe c00c0002 00010001 3c120013 036e7331 07776169
+     6b61746f 02616302 6e7a00c0 0c000200 0100013c 12000502 6e73c00c c0380001
+     00010001 3d020004 8cc8800d c0570001 00010000 64cc0004 cb6300fe.
+ +0.000499
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     314a8180 00010001 00020002 0a676966 74626173 6b657402 636f026e 7a000001
+     0001c00c 00010001 00013c18 0004cb63 00fec00c 00020001 00013c18 0005026e
+     73c00cc0 0c000200 0100013c 18001303 6e733107 7761696b 61746f02 6163024e
+     5a00c03e 00010001 00013c18 0004cb63 00fec04f 00010001 00013d02 00048cc8
+     800d.
+ +0.000529
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     314b8180 00010001 00020002 056d6167 69630263 6f026e7a 00000100 01c00c00
+     01000100 013c1c00 04cb6300 fec00c00 02000100 013d0100 05026e73 c00cc00c
+     00020001 00013d01 0013036e 73310777 61696b61 746f0261 63026e7a 00c03900
+     01000100 00718c00 04cb6300 fec04a00 01000100 013d0200 048cc880 0d.
+ +0.000503
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     314c8180 00010001 00020002 046d6169 6c036263 6302636f 026e7a00 00010001
+     c00c0001 00010001 3c180004 cb6300fe 03626363 02636f02 6e7a0000 02000100
+     013c1800 05026e73 c030c030 00020001 00013c18 0011036e 73310777 61696b61
+     746f0261 63c037c0 45000100 0100006a dc0004cb 6300fec0 56000100 0100013d
+     0200048c c8800d.
+ +0.000544
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     314d8180 00010001 00020002 026e730d 696e7665 73746967 6174696f 6e02636f
+     026e7a00 00010001 c00c0001 00010001 2b310004 cb6300fe 0d696e76 65737469
+     67617469 6f6e0263 6f026e7a 00000200 0100013c 110002c0 0cc03800 02000100
+     013c1100 11036e73 31077761 696b6174 6f026163 c049c00c 00010001 00012b31
+     0004cb63 00fec065 00010001 00013d02 00048cc8 800d.
+ +0.000562
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     314e8180 00010001 00020002 056e7a69 7069036f 7267026e 7a000001 0001c00c
+     00010001 00013c18 0004cb63 00fec00c 00020001 00013d01 0005026e 73c00cc0
+     0c000200 0100013d 01001303 6e733107 7761696b 61746f02 6163024e 5a00c03a
+     00010001 00013d01 0004cb63 00fec04b 00010001 00013d02 00048cc8 800d.
+ +0.000505
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     314f8180 00010001 00020002 026e7307 626f7571 75657402 636f026e 7a000001
+     0001c00c 00010001 00005fc3 0004cb63 00fe0762 6f757175 65740263 6f026e7a
+     00000200 0100013c 150002c0 0cc03200 02000100 013c1500 11036e73 31077761
+     696b6174 6f026163 c03dc00c 00010001 00005fc3 0004cb63 00fec059 00010001
+     00013d02 00048cc8 800d.
+ +0.000561
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31508583 00010000 00010000 046d6169 6c057361 66657302 636f026e 7a000001
+     00010573 61666573 02636f02 6e7a0000 06000100 00014c00 2e036e73 31046968
+     7567036e 6574c02b 03736f61 04696875 67c02877 2768a900 01518000 002a3000
+     12750000 02a300.
+ +0.000456
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31518180 00010001 00020002 026e7303 62636302 636f026e 7a000001 0001c00c
+     00010001 00006584 0004cb63 00fe0362 63630263 6f026e7a 00000200 0100013c
+     180002c0 0cc02e00 02000100 013c1800 11036e73 31077761 696b6174 6f026163
+     c035c00c 00010001 00006584 0004cb63 00fec051 00010001 00013d02 00048cc8
+     800d.
+ +0.000510
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31528180 00010001 00020002 026e730d 62757267 6c617261 6c61726d 7302636f
+     026e7a00 00010001 c00c0001 00010000 5fc10004 cb6300fe 0d627572 676c6172
+     616c6172 6d730263 6f026e7a 00000200 0100013c 120002c0 0cc03800 02000100
+     013c1200 11036e73 31077761 696b6174 6f026163 c049c00c 00010001 00005fc1
+     0004cb63 00fec065 00010001 00013d02 00048cc8 800d.
+ +0.000695
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31538180 00010001 00020002 026e730e 73656375 72697479 67756172 64730263
+     6f026e7a 00000100 01c00c00 01000100 005fc100 04cb6300 fe0e7365 63757269
+     74796775 61726473 02636f02 6e7a0000 02000100 013c1200 02c00cc0 39000200
+     0100013c 12001103 6e733107 7761696b 61746f02 6163c04b c00c0001 00010000
+     5fc10004 cb6300fe c0670001 00010001 3d020004 8cc8800d.
+ +0.000563
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     318b8180 00010001 00020002 05616761 74650263 6f026e7a 00000100 01c00c00
+     01000100 013d0100 04cb6300 fec00c00 02000100 013d0100 13036e73 31077761
+     696b6174 6f026163 024e5a00 c00c0002 00010001 3d010005 026e73c0 0cc03900
+     01000100 013d0200 048cc880 0dc05800 01000100 013d0100 04cb6300 fe.
+ +0.000525
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000199
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.709006
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.182313
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     311f8580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 01000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000371
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000183
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.527000
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.008955
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31208580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000371
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000153
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.518039
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.009375
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31218580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 05000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000369
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000166
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.508640
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.019379
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31228580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 06000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000372
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000151
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.489844
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.031580
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31248580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0d000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000386
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000181
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.458220
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.031691
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31258580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000369
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000150
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.426528
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.028650
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31268580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 10000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000370
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000159
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.397893
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.029986
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31278580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 11000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000369
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000145
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.367902
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.029845
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31288580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 01000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000384
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000148
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.338068
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.033093
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     31298580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000368
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000145
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.305566
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-780664
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     312b8580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000375
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000147
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.086223
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000393
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     312c8580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 06000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000367
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000152
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.085946
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000401
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=195.224.55.129:53
+     312d8580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 11000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000367
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000142
+ close fd=4
+ close=OK
+ +0.000250
+ close fd=5
+ close=OK
+ +0.000095
diff --git a/regress/case-manyptrwrongrem.err b/regress/case-manyptrwrongrem.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-manyptrwrongrem.out b/regress/case-manyptrwrongrem.out
new file mode 100644 (file)
index 0000000..6d0370c
--- /dev/null
@@ -0,0 +1,127 @@
+adns debug: using nameserver 140.200.128.13
+254.0.99.203.in-addr.arpa flags 292 type 1 A(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 2 NS(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 5 CNAME(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 6 SOA(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 12 PTR(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 13 HINFO(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 15 MX(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 16 TXT(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 17 RP(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65537 A(addr) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65538 NS(+addr) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65548 PTR(checked) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65551 MX(+addr) submitted
+254.0.99.203.in-addr.arpa flags 292 type 131078 SOA(822) submitted
+254.0.99.203.in-addr.arpa flags 292 type 131089 RP(822) submitted
+254.0.99.203.in-addr.arpa flags 292 type A(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type CNAME(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type SOA(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type NS(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type HINFO(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type TXT(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type MX(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type RP(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type A(addr): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type MX(+addr): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type NS(+addr): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type SOA(822): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type RP(822): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+adns debug: TCP connected (NS=140.200.128.13)
+254.0.99.203.in-addr.arpa flags 292 type PTR(raw): OK; nrrs=94; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+ ns.security.co.nz
+ tetra.co.nz
+ mail.agate.co.nz
+ ns.agate.co.nz
+ securitytraining.co.nz
+ ns.giftbasket.co.nz
+ ns.security.gen.nz
+ bouquet.co.nz
+ investigation.co.nz
+ ns.nzipi.org.nz
+ mail.neru.co.nz
+ security.co.nz
+ ns.storewatch.co.nz
+ security.gen.nz
+ ns.tetra.co.nz
+ mail.tetra.co.nz
+ ns.securicard.co.nz
+ ns.underhour.co.nz
+ bcc.co.nz
+ security.org.nz
+ burglaralarms.co.nz
+ ns.safes.co.nz
+ ns.security.org.nz
+ couperconsulting.co.nz
+ securityguards.co.nz
+ ns.guards.co.nz
+ asis.org.nz
+ neru.co.nz
+ giftbasket.co.nz
+ magic.co.nz
+ mail.bcc.co.nz
+ ns.investigation.co.nz
+ nzipi.org.nz
+ ns.bouquet.co.nz
+ mail.safes.co.nz
+ ns.bcc.co.nz
+ ns.burglaralarms.co.nz
+ ns.securityguards.co.nz
+ covertcameras.co.nz
+ ns.neru.co.nz
+ ns.covertcameras.co.nz
+ bouquets.co.nz
+ concentric.co.nz
+ ns.securitytraining.co.nz
+ mail.couperconsulting.co.nz
+ retailsecurity.co.nz
+ ns.concentric.co.nz
+ mail.magic.co.nz
+ nzangling.co.nz
+ ns.couperconsulting.co.nz
+ ns.nzangling.co.nz
+ mail.storewatch.co.nz
+ swift.co.nz
+ mail.selective.co.nz
+ ns.forefront.co.nz
+ mail.nzangling.co.nz
+ guards.co.nz
+ mail.nzdesigns.co.nz
+ storewatch.co.nz
+ ns.securitymanagement.co.nz
+ mail.woolworths.co.nz
+ mail.concentric.co.nz
+ selective.co.nz
+ specialinvestigations.co.nz
+ ns.swift.co.nz
+ mail.swift.co.nz
+ ns.securenet.net.nz
+ privateinvestigation.co.nz
+ ns.privateinvestigation.co.nz
+ etrade.co.nz
+ ns.specialinvestigations.co.nz
+ mail.ansett.co.nz
+ ftp.warrent.co.nz
+ ns.retailsecurity.co.nz
+ mail.securitymanagement.co.nz
+ ns.magic.co.nz
+ mail.forefront.co.nz
+ mail.securicard.co.nz
+ securicard.co.nz
+ ns.nzdesigns.co.nz
+ safes.co.nz
+ ns.selective.co.nz
+ forefront.co.nz
+ securitymanagement.co.nz
+ underhour.co.nz
+ securenet.net.nz
+ mail.specialinvestigations.co.nz
+ nzdesigns.co.nz
+ ns.etrade.co.nz
+ mail.nzipi.org.nz
+ mail.underhour.co.nz
+ ns.asis.org.nz
+ ns.bouquets.co.nz
+ agate.co.nz
+254.0.99.203.in-addr.arpa flags 292 type PTR(checked): Inconsistent resource records in DNS; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86399
+rc=0
diff --git a/regress/case-manyptrwrongrem.sys b/regress/case-manyptrwrongrem.sys
new file mode 100644 (file)
index 0000000..24fe00f
--- /dev/null
@@ -0,0 +1,1145 @@
+adnstest manyptrwrong
+292/254.0.99.203.in-addr.arpa
+ start 933286859.476326
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000271
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000083
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000062
+ sendto fd=4 addr=140.200.128.13:53
+     311f0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.001694
+ sendto fd=4 addr=140.200.128.13:53
+     31200100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.001119
+ sendto fd=4 addr=140.200.128.13:53
+     31210100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.001130
+ sendto fd=4 addr=140.200.128.13:53
+     31220100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.001150
+ sendto fd=4 addr=140.200.128.13:53
+     31230100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001229
+ sendto fd=4 addr=140.200.128.13:53
+     31240100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0d0001.
+ sendto=43
+ +0.001161
+ sendto fd=4 addr=140.200.128.13:53
+     31250100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.001179
+ sendto fd=4 addr=140.200.128.13:53
+     31260100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 100001.
+ sendto=43
+ +0.001152
+ sendto fd=4 addr=140.200.128.13:53
+     31270100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.001143
+ sendto fd=4 addr=140.200.128.13:53
+     31280100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.001191
+ sendto fd=4 addr=140.200.128.13:53
+     31290100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.001150
+ sendto fd=4 addr=140.200.128.13:53
+     312a0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001220
+ sendto fd=4 addr=140.200.128.13:53
+     312b0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.001148
+ sendto fd=4 addr=140.200.128.13:53
+     312c0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.001183
+ sendto fd=4 addr=140.200.128.13:53
+     312d0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.001193
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.981958
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.502250
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     311f8500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 01000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.001383
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000487
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.479532
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-892259
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31218500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 05000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000890
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000419
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.370482
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038604
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31228500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 06000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000852
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000399
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.330627
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038734
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31208500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000835
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000354
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.294103
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038824
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31248500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0d000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000863
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000406
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.254010
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.129111
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31238300 00010013 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000151 80001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 00015180 00080574 65747261 c043c00c
+     000c0001 00015180 000d046d 61696c05 61676174 65c043c0 0c000c00 01000151
+     80000502 6e73c06f c00c000c 00010001 51800013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 01000151 80001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 01000151 80001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 01518000 0a07626f 75717565 74c043c0 0c000c00 01000151
+     8000100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 01000151 80000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 00015180 000c046d 61696c04
+     6e657275 c043c00c 000c0001 00015180 0002c03a c00c000c 00010001 51800010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010001 51800002 c0d2c00c
+     000c0001 00015180 0005026e 73c056c0 0c000c00 01000151 80000704 6d61696c
+     c056c00c 000c0001 00015180 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 00015180 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     01518000 06036263 63c043.
+ +0.003324
+ socket type=SOCK_STREAM
+ socket=5
+ +0.001351
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000068
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000060
+ connect fd=5 addr=140.200.128.13:53
+ connect=EINPROGRESS
+ +0.000280
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000124
+ select max=6 rfds=[4] wfds=[5] efds=[] to=1.122082
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.034396
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31268500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 10000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000862
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000377
+ select max=6 rfds=[4] wfds=[5] efds=[] to=1.086447
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038752
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31258500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000842
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000365
+ select max=6 rfds=[4] wfds=[5] efds=[] to=1.048819
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038761
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31278500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 11000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000834
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000362
+ select max=6 rfds=[4] wfds=[5] efds=[] to=1.010005
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038783
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31288500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 01000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000832
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000411
+ select max=6 rfds=[4] wfds=[5] efds=[] to=0.971170
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.139078
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     312a8300 00010013 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000151 80001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 00015180 00080574 65747261 c043c00c
+     000c0001 00015180 000d046d 61696c05 61676174 65c043c0 0c000c00 01000151
+     80000502 6e73c06f c00c000c 00010001 51800013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 01000151 80001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 01000151 80001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 01518000 0a07626f 75717565 74c043c0 0c000c00 01000151
+     8000100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 01000151 80000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 00015180 000c046d 61696c04
+     6e657275 c043c00c 000c0001 00015180 0002c03a c00c000c 00010001 51800010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010001 51800002 c0d2c00c
+     000c0001 00015180 0005026e 73c056c0 0c000c00 01000151 80000704 6d61696c
+     c056c00c 000c0001 00015180 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 00015180 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     01518000 06036263 63c043.
+ +0.002995
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000416
+ select max=6 rfds=[4] wfds=[5] efds=[] to=0.828681
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.036200
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     312b8500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000832
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000371
+ select max=6 rfds=[4] wfds=[5] efds=[] to=0.791278
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038747
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31298500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000836
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000364
+ select max=6 rfds=[4] wfds=[5] efds=[] to=0.754849
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038774
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     312c8500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 06000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000832
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000430
+ select max=6 rfds=[4] wfds=[5] efds=[] to=0.715996
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038729
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     312d8500 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 11000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000837
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000373
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.539402
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.008807
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000213
+ write fd=5
+     002b3123 01000001 00000000 00000332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.000894
+ write fd=5
+     002b312a 01000001 00000000 00000332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.000449
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.529039
+ select=1 rfds=[5] wfds=[] efds=[]
+ +1.-90216
+ read fd=5 buflen=2
+ read=OK
+     097f.
+ +0.000334
+ read fd=5 buflen=2431
+ read=OK
+     31238500 0001005e 00020002 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000151 80001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 00015180 00080574 65747261 c043c00c
+     000c0001 00015180 000d046d 61696c05 61676174 65c043c0 0c000c00 01000151
+     80000502 6e73c06f c00c000c 00010001 51800013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 01000151 80001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 01000151 80001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 01518000 0a07626f 75717565 74c043c0 0c000c00 01000151
+     8000100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 01000151 80000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 00015180 000c046d 61696c04
+     6e657275 c043c00c 000c0001 00015180 0002c03a c00c000c 00010001 51800010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010001 51800002 c0d2c00c
+     000c0001 00015180 0005026e 73c056c0 0c000c00 01000151 80000704 6d61696c
+     c056c00c 000c0001 00015180 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 00015180 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     01518000 06036263 63c043c0 0c000c00 01000151 80000b08 73656375 72697479
+     c128c00c 000c0001 00015180 00100d62 7572676c 6172616c 61726d73 c043c00c
+     000c0001 00015180 000b026e 73057361 666573c0 43c00c00 0c000100 01518000
+     05026e73 c1f7c00c 000c0001 00015180 00131063 6f757065 72636f6e 73756c74
+     696e67c0 43c00c00 0c000100 01518000 110e7365 63757269 74796775 61726473
+     c043c00c 000c0001 00015180 000c026e 73066775 61726473 c043c00c 000c0001
+     00015180 00070461 736973c1 28c00c00 0c000100 01518000 02c13fc0 0c000c00
+     01000151 800002c0 b6c00c00 0c000100 01518000 08056d61 676963c0 43c00c00
+     0c000100 01518000 07046d61 696cc1e5 c00c000c 00010001 51800005 026e73c1
+     03c00c00 0c000100 01518000 02c122c0 0c000c00 01000151 80000502 6e73c0ed
+     c00c000c 00010001 51800007 046d6169 6cc22dc0 0c000c00 01000151 80000502
+     6e73c1e5 c00c000c 00010001 51800005 026e73c2 0ec00c00 0c000100 01518000
+     05026e73 c271c00c 000c0001 00015180 00100d63 6f766572 7463616d 65726173
+     c043c00c 000c0001 00015180 0005026e 73c13fc0 0c000c00 01000151 80001302
+     6e730d63 6f766572 7463616d 65726173 c043c00c 000c0001 00015180 000b0862
+     6f757175 657473c0 43c00c00 0c000100 01518000 0d0a636f 6e63656e 74726963
+     c043c00c 000c0001 00015180 0005026e 73c094c0 0c000c00 01000151 80000704
+     6d61696c c252c00c 000c0001 00015180 00110e72 65746169 6c736563 75726974
+     79c043c0 0c000c00 01000151 80001002 6e730a63 6f6e6365 6e747269 63c043c0
+     0c000c00 01000151 80000d04 6d61696c 056d6167 6963c043 c00c000c 00010001
+     5180000c 096e7a61 6e676c69 6e67c043 c00c000c 00010001 51800005 026e73c2
+     52c00c00 0c000100 01518000 0f026e73 096e7a61 6e676c69 6e67c043 c00c000c
+     00010001 51800007 046d6169 6cc163c0 0c000c00 01000151 80000805 73776966
+     74c043c0 0c000c00 01000151 80001104 6d61696c 0973656c 65637469 7665c043
+     c00c000c 00010001 5180000f 026e7309 666f7265 66726f6e 74c043c0 0c000c00
+     01000151 80001104 6d61696c 096e7a61 6e676c69 6e67c043 c00c000c 00010001
+     51800009 06677561 726473c0 43c00c00 0c000100 01518000 11046d61 696c096e
+     7a646573 69676e73 c043c00c 000c0001 00015180 0002c163 c00c000c 00010001
+     51800018 026e7312 73656375 72697479 6d616e61 67656d65 6e74c043 c00c000c
+     00010001 51800012 046d6169 6c0a776f 6f6c776f 72746873 c043c00c 000c0001
+     00015180 0012046d 61696c0a 636f6e63 656e.
+ +0.009121
+ read fd=5 buflen=973
+ read=EAGAIN
+ +0.000255
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=28.609545
+ select=1 rfds=[5] wfds=[] efds=[]
+ +1.-260444
+ read fd=5 buflen=973
+ read=OK
+     74726963 c043c00c 000c0001 00015180 000c0973 656c6563 74697665 c043c00c
+     000c0001 00015180 00181573 70656369 616c696e 76657374 69676174 696f6e73
+     c043c00c 000c0001 00015180 000b026e 73057377 696674c0 43c00c00 0c000100
+     01518000 0d046d61 696c0573 77696674 c043c00c 000c0001 00015180 0013026e
+     73097365 63757265 6e657403 6e6574c0 46c00c00 0c000100 01518000 17147072
+     69766174 65696e76 65737469 67617469 6f6ec043 c00c000c 00010001 5180001a
+     026e7314 70726976 61746569 6e766573 74696761 74696f6e c043c00c 000c0001
+     00015180 00090665 74726164 65c043c0 0c000c00 01000151 80001b02 6e731573
+     70656369 616c696e 76657374 69676174 696f6e73 c043c00c 000c0001 00015180
+     000e046d 61696c06 616e7365 7474c043 c00c000c 00010001 5180000e 03667470
+     07776172 72656e74 c043c00c 000c0001 00015180 0014026e 730e7265 7461696c
+     73656375 72697479 c043c00c 000c0001 00015180 001a046d 61696c12 73656375
+     72697479 6d616e61 67656d65 6e74c043 c00c000c 00010001 5180000b 026e7305
+     6d616769 63c043c0 0c000c00 01000151 80001104 6d61696c 09666f72 6566726f
+     6e74c043 c00c000c 00010001 51800007 046d6169 6cc1b1c0 0c000c00 01000151
+     800002c1 b1c00c00 0c000100 01518000 0f026e73 096e7a64 65736967 6e73c043
+     c00c000c 00010001 51800002 c22dc00c 000c0001 00015180 000f026e 73097365
+     6c656374 697665c0 43c00c00 0c000100 01518000 0c09666f 72656672 6f6e74c0
+     43c00c00 0c000100 01518000 15127365 63757269 74796d61 6e616765 6d656e74
+     c043c00c 000c0001 00015180 0002c1cd c00c000c 00010001 51800010 09736563
+     7572656e 6574036e 6574c046 c00c000c 00010001 5180001d 046d6169 6c157370
+     65636961 6c696e76 65737469 67617469 6f6e73c0 43c00c00 0c000100 01518000
+     0c096e7a 64657369 676e73c0 43c00c00 0c000100 01518000 0c026e73 06657472
+     616465c0 43c00c00 0c000100 01518000 07046d61 696cc122 c00c000c 00010001
+     51800007 046d6169 6cc1cdc0 0c000c00 01000151 80000a02 6e730461 736973c1
+     28c00c00 0c000100 01518000 0e026e73 08626f75 71756574 73c043c0 0c000c00
+     01000151 800002c0 6f013002 39390332 30330769 6e2d6164 64720461 72706100
+     00020001 00015180 0002c037 01300239 39033230 3307696e 2d616464 72046172
+     70610000 02000100 01518000 11036e73 31077761 696b6174 6f026163 c046c037
+     00010001 00015180 0004cb63 00fe036e 73310777 61696b61 746f0261 63c04600
+     01000100 01518000 048cc880 0d.
+ +0.005825
+ read fd=5 buflen=2433
+ read=EAGAIN
+ +0.018754
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=28.145272
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.355726
+ read fd=5 buflen=2433
+ read=OK
+     097f312a 85000001 005e0002 00020332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 01518000 13026e73 08736563
+     75726974 7902636f 026e7a00 c00c000c 00010001 51800008 05746574 7261c043
+     c00c000c 00010001 5180000d 046d6169 6c056167 617465c0 43c00c00 0c000100
+     01518000 05026e73 c06fc00c 000c0001 00015180 00131073 65637572 69747974
+     7261696e 696e67c0 43c00c00 0c000100 01518000 10026e73 0a676966 74626173
+     6b6574c0 43c00c00 0c000100 01518000 12026e73 08736563 75726974 79036765
+     6ec046c0 0c000c00 01000151 80000a07 626f7571 756574c0 43c00c00 0c000100
+     01518000 100d696e 76657374 69676174 696f6ec0 43c00c00 0c000100 01518000
+     0f026e73 056e7a69 7069036f 7267c046 c00c000c 00010001 5180000c 046d6169
+     6c046e65 7275c043 c00c000c 00010001 51800002 c03ac00c 000c0001 00015180
+     0010026e 730a7374 6f726577 61746368 c043c00c 000c0001 00015180 0002c0d2
+     c00c000c 00010001 51800005 026e73c0 56c00c00 0c000100 01518000 07046d61
+     696cc056 c00c000c 00010001 51800010 026e730a 73656375 72696361 7264c043
+     c00c000c 00010001 5180000f 026e7309 756e6465 72686f75 72c043c0 0c000c00
+     01000151 80000603 626363c0 43c00c00 0c000100 01518000 0b087365 63757269
+     7479c128 c00c000c 00010001 51800010 0d627572 676c6172 616c6172 6d73c043
+     c00c000c 00010001 5180000b 026e7305 73616665 73c043c0 0c000c00 01000151
+     80000502 6e73c1f7 c00c000c 00010001 51800013 10636f75 70657263 6f6e7375
+     6c74696e 67c043c0 0c000c00 01000151 8000110e 73656375 72697479 67756172
+     6473c043 c00c000c 00010001 5180000c 026e7306 67756172 6473c043 c00c000c
+     00010001 51800007 04617369 73c128c0 0c000c00 01000151 800002c1 3fc00c00
+     0c000100 01518000 02c0b6c0 0c000c00 01000151 80000805 6d616769 63c043c0
+     0c000c00 01000151 80000704 6d61696c c1e5c00c 000c0001 00015180 0005026e
+     73c103c0 0c000c00 01000151 800002c1 22c00c00 0c000100 01518000 05026e73
+     c0edc00c 000c0001 00015180 0007046d 61696cc2 2dc00c00 0c000100 01518000
+     05026e73 c1e5c00c 000c0001 00015180 0005026e 73c20ec0 0c000c00 01000151
+     80000502 6e73c271 c00c000c 00010001 51800010 0d636f76 65727463 616d6572
+     6173c043 c00c000c 00010001 51800005 026e73c1 3fc00c00 0c000100 01518000
+     13026e73 0d636f76 65727463 616d6572 6173c043 c00c000c 00010001 5180000b
+     08626f75 71756574 73c043c0 0c000c00 01000151 80000d0a 636f6e63 656e7472
+     6963c043 c00c000c 00010001 51800005 026e73c0 94c00c00 0c000100 01518000
+     07046d61 696cc252 c00c000c 00010001 51800011 0e726574 61696c73 65637572
+     697479c0 43c00c00 0c000100 01518000 10026e73 0a636f6e 63656e74 726963c0
+     43c00c00 0c000100 01518000 0d046d61 696c056d 61676963 c043c00c 000c0001
+     00015180 000c096e 7a616e67 6c696e67 c043c00c 000c0001 00015180 0005026e
+     73c252c0 0c000c00 01000151 80000f02 6e73096e 7a616e67 6c696e67 c043c00c
+     000c0001 00015180 0007046d 61696cc1 63c00c00 0c000100 01518000 08057377
+     696674c0 43c00c00 0c000100 01518000 11046d61 696c0973 656c6563 74697665
+     c043c00c 000c0001 00015180 000f026e 7309666f 72656672 6f6e74c0 43c00c00
+     0c000100 01518000 11046d61 696c096e 7a616e67 6c696e67 c043c00c 000c0001
+     00015180 00090667 75617264 73c043c0 0c000c00 01000151 80001104 6d61696c
+     096e7a64 65736967 6e73c043 c00c000c 00010001 51800002 c163c00c 000c0001
+     00015180 0018026e 73127365 63757269 74796d61 6e616765 6d656e74 c043c00c
+     000c0001 00015180 0012046d 61696c0a 776f6f6c 776f7274 6873c043 c00c000c
+     00010001 51800012 046d6169 6c0a636f 6e63656e.
+ +0.008610
+ read fd=5 buflen=973
+ read=EAGAIN
+ +0.000242
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=27.780694
+ select=1 rfds=[5] wfds=[] efds=[]
+ +1.-129629
+ read fd=5 buflen=973
+ read=OK
+     74726963 c043c00c 000c0001 00015180 000c0973 656c6563 74697665 c043c00c
+     000c0001 00015180 00181573 70656369 616c696e 76657374 69676174 696f6e73
+     c043c00c 000c0001 00015180 000b026e 73057377 696674c0 43c00c00 0c000100
+     01518000 0d046d61 696c0573 77696674 c043c00c 000c0001 00015180 0013026e
+     73097365 63757265 6e657403 6e6574c0 46c00c00 0c000100 01518000 17147072
+     69766174 65696e76 65737469 67617469 6f6ec043 c00c000c 00010001 5180001a
+     026e7314 70726976 61746569 6e766573 74696761 74696f6e c043c00c 000c0001
+     00015180 00090665 74726164 65c043c0 0c000c00 01000151 80001b02 6e731573
+     70656369 616c696e 76657374 69676174 696f6e73 c043c00c 000c0001 00015180
+     000e046d 61696c06 616e7365 7474c043 c00c000c 00010001 5180000e 03667470
+     07776172 72656e74 c043c00c 000c0001 00015180 0014026e 730e7265 7461696c
+     73656375 72697479 c043c00c 000c0001 00015180 001a046d 61696c12 73656375
+     72697479 6d616e61 67656d65 6e74c043 c00c000c 00010001 5180000b 026e7305
+     6d616769 63c043c0 0c000c00 01000151 80001104 6d61696c 09666f72 6566726f
+     6e74c043 c00c000c 00010001 51800007 046d6169 6cc1b1c0 0c000c00 01000151
+     800002c1 b1c00c00 0c000100 01518000 0f026e73 096e7a64 65736967 6e73c043
+     c00c000c 00010001 51800002 c22dc00c 000c0001 00015180 000f026e 73097365
+     6c656374 697665c0 43c00c00 0c000100 01518000 0c09666f 72656672 6f6e74c0
+     43c00c00 0c000100 01518000 15127365 63757269 74796d61 6e616765 6d656e74
+     c043c00c 000c0001 00015180 0002c1cd c00c000c 00010001 51800010 09736563
+     7572656e 6574036e 6574c046 c00c000c 00010001 5180001d 046d6169 6c157370
+     65636961 6c696e76 65737469 67617469 6f6e73c0 43c00c00 0c000100 01518000
+     0c096e7a 64657369 676e73c0 43c00c00 0c000100 01518000 0c026e73 06657472
+     616465c0 43c00c00 0c000100 01518000 07046d61 696cc122 c00c000c 00010001
+     51800007 046d6169 6cc1cdc0 0c000c00 01000151 80000a02 6e730461 736973c1
+     28c00c00 0c000100 01518000 0e026e73 08626f75 71756574 73c043c0 0c000c00
+     01000151 800002c0 6f013002 39390332 30330769 6e2d6164 64720461 72706100
+     00020001 00015180 0002c037 01300239 39033230 3307696e 2d616464 72046172
+     70610000 02000100 01518000 11036e73 31077761 696b6174 6f026163 c046c037
+     00010001 00015180 0004cb63 00fe036e 73310777 61696b61 746f0261 63c04600
+     01000100 01518000 048cc880 0d.
+ +0.005848
+ sendto fd=4 addr=140.200.128.13:53
+     312e0100 00010000 00000000 026e7308 73656375 72697479 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.002592
+ sendto fd=4 addr=140.200.128.13:53
+     312f0100 00010000 00000000 05746574 72610263 6f026e7a 00000100 01.
+ sendto=29
+ +0.000963
+ sendto fd=4 addr=140.200.128.13:53
+     31300100 00010000 00000000 046d6169 6c056167 61746502 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000973
+ sendto fd=4 addr=140.200.128.13:53
+     31310100 00010000 00000000 026e7305 61676174 6502636f 026e7a00 00010001.
+ sendto=32
+ +0.000977
+ sendto fd=4 addr=140.200.128.13:53
+     31320100 00010000 00000000 10736563 75726974 79747261 696e696e 6702636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001007
+ sendto fd=4 addr=140.200.128.13:53
+     31330100 00010000 00000000 026e730a 67696674 6261736b 65740263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001027
+ sendto fd=4 addr=140.200.128.13:53
+     31340100 00010000 00000000 026e7308 73656375 72697479 0367656e 026e7a00
+     00010001.
+ sendto=36
+ +0.000989
+ sendto fd=4 addr=140.200.128.13:53
+     31350100 00010000 00000000 07626f75 71756574 02636f02 6e7a0000 010001.
+ sendto=31
+ +0.000946
+ sendto fd=4 addr=140.200.128.13:53
+     31360100 00010000 00000000 0d696e76 65737469 67617469 6f6e0263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.000996
+ sendto fd=4 addr=140.200.128.13:53
+     31370100 00010000 00000000 026e7305 6e7a6970 69036f72 67026e7a 00000100
+     01.
+ sendto=33
+ +0.000972
+ sendto fd=4 addr=140.200.128.13:53
+     31380100 00010000 00000000 046d6169 6c046e65 72750263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.000980
+ sendto fd=4 addr=140.200.128.13:53
+     31390100 00010000 00000000 08736563 75726974 7902636f 026e7a00 00010001.
+ sendto=32
+ +0.000958
+ sendto fd=4 addr=140.200.128.13:53
+     313a0100 00010000 00000000 026e730a 73746f72 65776174 63680263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001038
+ sendto fd=4 addr=140.200.128.13:53
+     313b0100 00010000 00000000 08736563 75726974 79036765 6e026e7a 00000100
+     01.
+ sendto=33
+ +0.001003
+ sendto fd=4 addr=140.200.128.13:53
+     313c0100 00010000 00000000 026e7305 74657472 6102636f 026e7a00 00010001.
+ sendto=32
+ +0.000972
+ sendto fd=4 addr=140.200.128.13:53
+     313d0100 00010000 00000000 046d6169 6c057465 74726102 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.000983
+ sendto fd=4 addr=140.200.128.13:53
+     313e0100 00010000 00000000 026e730a 73656375 72696361 72640263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.000996
+ sendto fd=4 addr=140.200.128.13:53
+     313f0100 00010000 00000000 026e7309 756e6465 72686f75 7202636f 026e7a00
+     00010001.
+ sendto=36
+ +0.000989
+ sendto fd=4 addr=140.200.128.13:53
+     31400100 00010000 00000000 03626363 02636f02 6e7a0000 010001.
+ sendto=27
+ +0.000944
+ sendto fd=4 addr=140.200.128.13:53
+     31410100 00010000 00000000 08736563 75726974 79036f72 67026e7a 00000100
+     01.
+ sendto=33
+ +0.001001
+ sendto fd=4 addr=140.200.128.13:53
+     31420100 00010000 00000000 0d627572 676c6172 616c6172 6d730263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001213
+ sendto fd=4 addr=140.200.128.13:53
+     31430100 00010000 00000000 026e7305 73616665 7302636f 026e7a00 00010001.
+ sendto=32
+ +0.001241
+ sendto fd=4 addr=140.200.128.13:53
+     31440100 00010000 00000000 026e7308 73656375 72697479 036f7267 026e7a00
+     00010001.
+ sendto=36
+ +0.001489
+ sendto fd=4 addr=140.200.128.13:53
+     31450100 00010000 00000000 10636f75 70657263 6f6e7375 6c74696e 6702636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001355
+ sendto fd=4 addr=140.200.128.13:53
+     31460100 00010000 00000000 0e736563 75726974 79677561 72647302 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001389
+ sendto fd=4 addr=140.200.128.13:53
+     31470100 00010000 00000000 026e7306 67756172 64730263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001299
+ sendto fd=4 addr=140.200.128.13:53
+     31480100 00010000 00000000 04617369 73036f72 67026e7a 00000100 01.
+ sendto=29
+ +0.001325
+ sendto fd=4 addr=140.200.128.13:53
+     31490100 00010000 00000000 046e6572 7502636f 026e7a00 00010001.
+ sendto=28
+ +0.001328
+ sendto fd=4 addr=140.200.128.13:53
+     314a0100 00010000 00000000 0a676966 74626173 6b657402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001356
+ sendto fd=4 addr=140.200.128.13:53
+     314b0100 00010000 00000000 056d6167 69630263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001307
+ sendto fd=4 addr=140.200.128.13:53
+     314c0100 00010000 00000000 046d6169 6c036263 6302636f 026e7a00 00010001.
+ sendto=32
+ +0.001375
+ sendto fd=4 addr=140.200.128.13:53
+     314d0100 00010000 00000000 026e730d 696e7665 73746967 6174696f 6e02636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001386
+ sendto fd=4 addr=140.200.128.13:53
+     314e0100 00010000 00000000 056e7a69 7069036f 7267026e 7a000001 0001.
+ sendto=30
+ +0.001327
+ sendto fd=4 addr=140.200.128.13:53
+     314f0100 00010000 00000000 026e7307 626f7571 75657402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001327
+ sendto fd=4 addr=140.200.128.13:53
+     31500100 00010000 00000000 046d6169 6c057361 66657302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001405
+ sendto fd=4 addr=140.200.128.13:53
+     31510100 00010000 00000000 026e7303 62636302 636f026e 7a000001 0001.
+ sendto=30
+ +0.001360
+ sendto fd=4 addr=140.200.128.13:53
+     31520100 00010000 00000000 026e730d 62757267 6c617261 6c61726d 7302636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001401
+ sendto fd=4 addr=140.200.128.13:53
+     31530100 00010000 00000000 026e730e 73656375 72697479 67756172 64730263
+     6f026e7a 00000100 01.
+ sendto=41
+ +0.001460
+ sendto fd=4 addr=140.200.128.13:53
+     31540100 00010000 00000000 0d636f76 65727463 616d6572 61730263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001355
+ sendto fd=4 addr=140.200.128.13:53
+     31550100 00010000 00000000 026e7304 6e657275 02636f02 6e7a0000 010001.
+ sendto=31
+ +0.001384
+ sendto fd=4 addr=140.200.128.13:53
+     31560100 00010000 00000000 026e730d 636f7665 72746361 6d657261 7302636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001389
+ sendto fd=4 addr=140.200.128.13:53
+     31570100 00010000 00000000 08626f75 71756574 7302636f 026e7a00 00010001.
+ sendto=32
+ +0.001386
+ sendto fd=4 addr=140.200.128.13:53
+     31580100 00010000 00000000 0a636f6e 63656e74 72696302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001352
+ sendto fd=4 addr=140.200.128.13:53
+     31590100 00010000 00000000 026e7310 73656375 72697479 74726169 6e696e67
+     02636f02 6e7a0000 010001.
+ sendto=43
+ +0.001418
+ sendto fd=4 addr=140.200.128.13:53
+     315a0100 00010000 00000000 046d6169 6c10636f 75706572 636f6e73 756c7469
+     6e670263 6f026e7a 00000100 01.
+ sendto=45
+ +0.001422
+ sendto fd=4 addr=140.200.128.13:53
+     315b0100 00010000 00000000 0e726574 61696c73 65637572 69747902 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001320
+ sendto fd=4 addr=140.200.128.13:53
+     315c0100 00010000 00000000 026e730a 636f6e63 656e7472 69630263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001391
+ sendto fd=4 addr=140.200.128.13:53
+     315d0100 00010000 00000000 046d6169 6c056d61 67696302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001430
+ sendto fd=4 addr=140.200.128.13:53
+     315e0100 00010000 00000000 096e7a61 6e676c69 6e670263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001373
+ sendto fd=4 addr=140.200.128.13:53
+     315f0100 00010000 00000000 026e7310 636f7570 6572636f 6e73756c 74696e67
+     02636f02 6e7a0000 010001.
+ sendto=43
+ +0.001399
+ sendto fd=4 addr=140.200.128.13:53
+     31600100 00010000 00000000 026e7309 6e7a616e 676c696e 6702636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001403
+ sendto fd=4 addr=140.200.128.13:53
+     31610100 00010000 00000000 046d6169 6c0a7374 6f726577 61746368 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001431
+ sendto fd=4 addr=140.200.128.13:53
+     31620100 00010000 00000000 05737769 66740263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001341
+ sendto fd=4 addr=140.200.128.13:53
+     31630100 00010000 00000000 046d6169 6c097365 6c656374 69766502 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001383
+ sendto fd=4 addr=140.200.128.13:53
+     31640100 00010000 00000000 026e7309 666f7265 66726f6e 7402636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001398
+ sendto fd=4 addr=140.200.128.13:53
+     31650100 00010000 00000000 046d6169 6c096e7a 616e676c 696e6702 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001396
+ sendto fd=4 addr=140.200.128.13:53
+     31660100 00010000 00000000 06677561 72647302 636f026e 7a000001 0001.
+ sendto=30
+ +0.001338
+ sendto fd=4 addr=140.200.128.13:53
+     31670100 00010000 00000000 046d6169 6c096e7a 64657369 676e7302 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001383
+ sendto fd=4 addr=140.200.128.13:53
+     31680100 00010000 00000000 0a73746f 72657761 74636802 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001411
+ sendto fd=4 addr=140.200.128.13:53
+     31690100 00010000 00000000 026e7312 73656375 72697479 6d616e61 67656d65
+     6e740263 6f026e7a 00000100 01.
+ sendto=45
+ +0.001441
+ sendto fd=4 addr=140.200.128.13:53
+     316a0100 00010000 00000000 046d6169 6c0a776f 6f6c776f 72746873 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001416
+ sendto fd=4 addr=140.200.128.13:53
+     316b0100 00010000 00000000 046d6169 6c0a636f 6e63656e 74726963 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001440
+ sendto fd=4 addr=140.200.128.13:53
+     316c0100 00010000 00000000 0973656c 65637469 76650263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001390
+ sendto fd=4 addr=140.200.128.13:53
+     316d0100 00010000 00000000 15737065 6369616c 696e7665 73746967 6174696f
+     6e730263 6f026e7a 00000100 01.
+ sendto=45
+ +0.001803
+ sendto fd=4 addr=140.200.128.13:53
+     316e0100 00010000 00000000 026e7305 73776966 7402636f 026e7a00 00010001.
+ sendto=32
+ +0.001450
+ sendto fd=4 addr=140.200.128.13:53
+     316f0100 00010000 00000000 046d6169 6c057377 69667402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001516
+ sendto fd=4 addr=140.200.128.13:53
+     31700100 00010000 00000000 026e7309 73656375 72656e65 74036e65 74026e7a
+     00000100 01.
+ sendto=37
+ +0.001511
+ sendto fd=4 addr=140.200.128.13:53
+     31710100 00010000 00000000 14707269 76617465 696e7665 73746967 6174696f
+     6e02636f 026e7a00 00010001.
+ sendto=44
+ +0.001585
+ sendto fd=4 addr=140.200.128.13:53
+     31720100 00010000 00000000 026e7314 70726976 61746569 6e766573 74696761
+     74696f6e 02636f02 6e7a0000 010001.
+ sendto=47
+ +0.001571
+ sendto fd=4 addr=140.200.128.13:53
+     31730100 00010000 00000000 06657472 61646502 636f026e 7a000001 0001.
+ sendto=30
+ +0.001459
+ sendto fd=4 addr=140.200.128.13:53
+     31740100 00010000 00000000 026e7315 73706563 69616c69 6e766573 74696761
+     74696f6e 7302636f 026e7a00 00010001.
+ sendto=48
+ +0.001537
+ sendto fd=4 addr=140.200.128.13:53
+     31750100 00010000 00000000 046d6169 6c06616e 73657474 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001466
+ sendto fd=4 addr=140.200.128.13:53
+     31760100 00010000 00000000 03667470 07776172 72656e74 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001485
+ sendto fd=4 addr=140.200.128.13:53
+     31770100 00010000 00000000 026e730e 72657461 696c7365 63757269 74790263
+     6f026e7a 00000100 01.
+ sendto=41
+ +0.001528
+ sendto fd=4 addr=140.200.128.13:53
+     31780100 00010000 00000000 046d6169 6c127365 63757269 74796d61 6e616765
+     6d656e74 02636f02 6e7a0000 010001.
+ sendto=47
+ +0.001593
+ sendto fd=4 addr=140.200.128.13:53
+     31790100 00010000 00000000 026e7305 6d616769 6302636f 026e7a00 00010001.
+ sendto=32
+ +0.001465
+ sendto fd=4 addr=140.200.128.13:53
+     317a0100 00010000 00000000 046d6169 6c09666f 72656672 6f6e7402 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001473
+ sendto fd=4 addr=140.200.128.13:53
+     317b0100 00010000 00000000 046d6169 6c0a7365 63757269 63617264 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001525
+ sendto fd=4 addr=140.200.128.13:53
+     317c0100 00010000 00000000 0a736563 75726963 61726402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001499
+ sendto fd=4 addr=140.200.128.13:53
+     317d0100 00010000 00000000 026e7309 6e7a6465 7369676e 7302636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001489
+ sendto fd=4 addr=140.200.128.13:53
+     317e0100 00010000 00000000 05736166 65730263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001441
+ sendto fd=4 addr=140.200.128.13:53
+     317f0100 00010000 00000000 026e7309 73656c65 63746976 6502636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001542
+ sendto fd=4 addr=140.200.128.13:53
+     31800100 00010000 00000000 09666f72 6566726f 6e740263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001473
+ sendto fd=4 addr=140.200.128.13:53
+     31810100 00010000 00000000 12736563 75726974 796d616e 6167656d 656e7402
+     636f026e 7a000001 0001.
+ sendto=42
+ +0.001525
+ sendto fd=4 addr=140.200.128.13:53
+     31820100 00010000 00000000 09756e64 6572686f 75720263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001469
+ sendto fd=4 addr=140.200.128.13:53
+     31830100 00010000 00000000 09736563 7572656e 6574036e 6574026e 7a000001
+     0001.
+ sendto=34
+ +0.001535
+ sendto fd=4 addr=140.200.128.13:53
+     31840100 00010000 00000000 046d6169 6c157370 65636961 6c696e76 65737469
+     67617469 6f6e7302 636f026e 7a000001 0001.
+ sendto=50
+ +0.001597
+ sendto fd=4 addr=140.200.128.13:53
+     31850100 00010000 00000000 096e7a64 65736967 6e730263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001526
+ sendto fd=4 addr=140.200.128.13:53
+     31860100 00010000 00000000 026e7306 65747261 64650263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001451
+ sendto fd=4 addr=140.200.128.13:53
+     31870100 00010000 00000000 046d6169 6c056e7a 69706903 6f726702 6e7a0000
+     010001.
+ sendto=35
+ +0.001513
+ sendto fd=4 addr=140.200.128.13:53
+     31880100 00010000 00000000 046d6169 6c09756e 64657268 6f757202 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001508
+ sendto fd=4 addr=140.200.128.13:53
+     31890100 00010000 00000000 026e7304 61736973 036f7267 026e7a00 00010001.
+ sendto=32
+ +0.001491
+ sendto fd=4 addr=140.200.128.13:53
+     318a0100 00010000 00000000 026e7308 626f7571 75657473 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001507
+ sendto fd=4 addr=140.200.128.13:53
+     318b0100 00010000 00000000 05616761 74650263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001445
+ read fd=5 buflen=2433
+ read=EAGAIN
+ +0.000151
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.866584
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-544428
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     312f8500 00010001 00020002 05746574 72610263 6f026e7a 00000100 01c00c00
+     01000100 01518000 04cb6300 fec00c00 02000100 01518000 05026e73 c00cc00c
+     00020001 00015180 0013036e 73310777 61696b61 746f0261 63026e7a 00c03900
+     01000100 01518000 04cb6300 fec04a00 01000100 01518000 048cc880 0d.
+ +0.000996
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000668
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.409348
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038307
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31308500 00010001 00020002 046d6169 6c056167 61746502 636f026e 7a000001
+     0001c00c 00010001 00015180 0004cb63 00fe0561 67617465 02636f02 6e7a0000
+     02000100 01518000 11036e73 31077761 696b6174 6f026163 c03bc032 00020001
+     00015180 0005026e 73c032c0 49000100 01000151 8000048c c8800dc0 66000100
+     01000151 800004cb 6300fe.
+ +0.000984
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000506
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.369551
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.048503
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     312e8500 00010001 00020002 026e7308 73656375 72697479 02636f02 6e7a0000
+     010001c0 0c000100 01000151 800004cb 6300fe08 73656375 72697479 02636f02
+     6e7a0000 02000100 01518000 11036e73 31077761 696b6174 6f026163 c03fc033
+     00020001 00015180 0002c00c c04d0001 00010001 51800004 8cc8800d c00c0001
+     00010001 51800004 cb6300fe.
+ +0.000997
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000452
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.319599
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038521
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31338500 00010001 00020002 026e730a 67696674 6261736b 65740263 6f026e7a
+     00000100 01c00c00 01000100 01518000 04cb6300 fe0a6769 66746261 736b6574
+     02636f02 6e7a0000 02000100 01518000 11036e73 31077761 696b6174 6f026163
+     c043c035 00020001 00015180 0002c00c c0510001 00010001 51800004 8cc8800d
+     c00c0001 00010001 51800004 cb6300fe.
+ +0.001008
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000490
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.279580
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.048476
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31348500 00010001 00020002 026e7308 73656375 72697479 0367656e 026e7a00
+     00010001 c00c0001 00010001 51800004 cb6300fe 08736563 75726974 79036765
+     6e026e7a 00000200 01000151 80001103 6e733107 7761696b 61746f02 6163c041
+     c0340002 00010001 51800002 c00cc04f 00010001 00015180 00048cc8 800dc00c
+     00010001 00015180 0004cb63 00fe.
+ +0.000998
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000439
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.229667
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038524
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31358500 00010001 00020002 07626f75 71756574 02636f02 6e7a0000 010001c0
+     0c000100 01000151 800004cb 6300fec0 0c000200 01000151 80000502 6e73c00c
+     c00c0002 00010001 51800013 036e7331 07776169 6b61746f 02616302 6e7a00c0
+     3b000100 01000151 800004cb 6300fec0 4c000100 01000151 8000048c c8800d.
+ +0.000911
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000464
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.189768
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038708
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31318500 00010001 00020002 026e7305 61676174 6502636f 026e7a00 00010001
+     c00c0001 00010001 51800004 cb6300fe 05616761 74650263 6f026e7a 00000200
+     01000151 80001103 6e733107 7761696b 61746f02 6163c039 c0300002 00010001
+     51800002 c00cc047 00010001 00015180 00048cc8 800dc00c 00010001 00015180
+     0004cb63 00fe.
+ +0.000951
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000436
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.149673
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.048494
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31328500 00010001 00020002 10736563 75726974 79747261 696e696e 6702636f
+     026e7a00 00010001 c00c0001 00010001 51800004 cb6300fe c00c0002 00010001
+     51800005 026e73c0 0cc00c00 02000100 01518000 13036e73 31077761 696b6174
+     6f026163 026e7a00 c0440001 00010001 51800004 cb6300fe c0550001 00010001
+     51800004 8cc8800d.
+ +0.000991
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000442
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.099746
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038540
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31368500 00010001 00020002 0d696e76 65737469 67617469 6f6e0263 6f026e7a
+     00000100 01c00c00 01000100 01518000 04cb6300 fec00c00 02000100 01518000
+     05026e73 c00cc00c 00020001 00015180 0013036e 73310777 61696b61 746f0261
+     63026e7a 00c04100 01000100 01518000 04cb6300 fec05200 01000100 01518000
+     048cc880 0d.
+ +0.000944
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000437
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.059825
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038599
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31378500 00010001 00020002 026e7305 6e7a6970 69036f72 67026e7a 00000100
+     01c00c00 01000100 01518000 04cb6300 fe056e7a 69706903 6f726702 6e7a0000
+     02000100 01518000 11036e73 31077761 696b6174 6f026163 c03bc031 00020001
+     00015180 0002c00c c0490001 00010001 51800004 8cc8800d c00c0001 00010001
+     51800004 cb6300fe.
+ +0.000960
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000445
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.019821
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.048560
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     31398500 00010001 00020002 08736563 75726974 7902636f 026e7a00 00010001
+     c00c0001 00010001 51800004 cb6300fe c00c0002 00010001 51800013 036e7331
+     07776169 6b61746f 02616302 6e7a00c0 0c000200 01000151 80000502 6e73c00c
+     c03c0001 00010001 51800004 8cc8800d c05b0001 00010001 51800004 cb6300fe.
+ +0.000913
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000471
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.969877
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.028575
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=140.200.128.13:53
+     313a8503 00010000 00010000 026e730a 73746f72 65776174 63680263 6f026e7a
+     00000100 0102636f 026e7a00 00060001 00015180 002c046e 73393907 7761696b
+     61746f02 6163c028 03736f61 c03b7727 6ec50000 0e100000 07080027 8d000001
+     5180.
+ +0.000739
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.023574
+ close fd=4
+ close=OK
+ +0.000464
+ close fd=5
+ close=OK
+ +0.000179
diff --git a/regress/case-manyptrwrongrst.err b/regress/case-manyptrwrongrst.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-manyptrwrongrst.out b/regress/case-manyptrwrongrst.out
new file mode 100644 (file)
index 0000000..e48321d
--- /dev/null
@@ -0,0 +1,132 @@
+adns debug: using nameserver 172.18.45.6
+254.0.99.203.in-addr.arpa flags 292 type 1 A(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 2 NS(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 5 CNAME(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 6 SOA(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 12 PTR(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 13 HINFO(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 15 MX(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 16 TXT(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 17 RP(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65537 A(addr) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65538 NS(+addr) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65548 PTR(checked) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65551 MX(+addr) submitted
+254.0.99.203.in-addr.arpa flags 292 type 131078 SOA(822) submitted
+254.0.99.203.in-addr.arpa flags 292 type 131089 RP(822) submitted
+254.0.99.203.in-addr.arpa flags 292 type A(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=162
+254.0.99.203.in-addr.arpa flags 292 type NS(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type CNAME(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type HINFO(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type A(addr): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=162
+254.0.99.203.in-addr.arpa flags 292 type TXT(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=162
+254.0.99.203.in-addr.arpa flags 292 type SOA(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+254.0.99.203.in-addr.arpa flags 292 type MX(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+adns debug: reply not found, id 3129, query owner 254.0.99.203.in-addr.arpa (NS=172.18.45.6)
+254.0.99.203.in-addr.arpa flags 292 type NS(+addr): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=600
+254.0.99.203.in-addr.arpa flags 292 type MX(+addr): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=600
+254.0.99.203.in-addr.arpa flags 292 type SOA(822): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=600
+adns debug: reply not found, id 312b, query owner 254.0.99.203.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 312c, query owner 254.0.99.203.in-addr.arpa (NS=172.18.45.6)
+254.0.99.203.in-addr.arpa flags 292 type RP(822): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+adns debug: reply not found, id 312d, query owner 254.0.99.203.in-addr.arpa (NS=172.18.45.6)
+254.0.99.203.in-addr.arpa flags 292 type RP(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=598
+adns debug: TCP connected (NS=172.18.45.6)
+adns debug: reply not found, id 312a, query owner 254.0.99.203.in-addr.arpa (NS=172.18.45.6)
+254.0.99.203.in-addr.arpa flags 292 type PTR(raw): OK; nrrs=94; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=20169
+ ns.security.co.nz
+ tetra.co.nz
+ mail.agate.co.nz
+ ns.agate.co.nz
+ securitytraining.co.nz
+ ns.giftbasket.co.nz
+ ns.security.gen.nz
+ bouquet.co.nz
+ investigation.co.nz
+ ns.nzipi.org.nz
+ mail.neru.co.nz
+ security.co.nz
+ ns.storewatch.co.nz
+ security.gen.nz
+ ns.tetra.co.nz
+ mail.tetra.co.nz
+ ns.securicard.co.nz
+ ns.underhour.co.nz
+ bcc.co.nz
+ security.org.nz
+ burglaralarms.co.nz
+ ns.safes.co.nz
+ ns.security.org.nz
+ couperconsulting.co.nz
+ securityguards.co.nz
+ ns.guards.co.nz
+ asis.org.nz
+ neru.co.nz
+ giftbasket.co.nz
+ magic.co.nz
+ mail.bcc.co.nz
+ ns.investigation.co.nz
+ nzipi.org.nz
+ ns.bouquet.co.nz
+ mail.safes.co.nz
+ ns.bcc.co.nz
+ ns.burglaralarms.co.nz
+ ns.securityguards.co.nz
+ covertcameras.co.nz
+ ns.neru.co.nz
+ ns.covertcameras.co.nz
+ bouquets.co.nz
+ concentric.co.nz
+ ns.securitytraining.co.nz
+ mail.couperconsulting.co.nz
+ retailsecurity.co.nz
+ ns.concentric.co.nz
+ mail.magic.co.nz
+ nzangling.co.nz
+ ns.couperconsulting.co.nz
+ ns.nzangling.co.nz
+ mail.storewatch.co.nz
+ swift.co.nz
+ mail.selective.co.nz
+ ns.forefront.co.nz
+ mail.nzangling.co.nz
+ guards.co.nz
+ mail.nzdesigns.co.nz
+ storewatch.co.nz
+ ns.securitymanagement.co.nz
+ mail.woolworths.co.nz
+ mail.concentric.co.nz
+ selective.co.nz
+ specialinvestigations.co.nz
+ ns.swift.co.nz
+ mail.swift.co.nz
+ ns.securenet.net.nz
+ privateinvestigation.co.nz
+ ns.privateinvestigation.co.nz
+ etrade.co.nz
+ ns.specialinvestigations.co.nz
+ mail.ansett.co.nz
+ ftp.warrent.co.nz
+ ns.retailsecurity.co.nz
+ mail.securitymanagement.co.nz
+ ns.magic.co.nz
+ mail.forefront.co.nz
+ mail.securicard.co.nz
+ securicard.co.nz
+ ns.nzdesigns.co.nz
+ safes.co.nz
+ ns.selective.co.nz
+ forefront.co.nz
+ securitymanagement.co.nz
+ underhour.co.nz
+ securenet.net.nz
+ mail.specialinvestigations.co.nz
+ nzdesigns.co.nz
+ ns.etrade.co.nz
+ mail.nzipi.org.nz
+ mail.underhour.co.nz
+ ns.asis.org.nz
+ ns.bouquets.co.nz
+ agate.co.nz
+254.0.99.203.in-addr.arpa flags 292 type PTR(checked): Inconsistent resource records in DNS; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=20167
+rc=0
diff --git a/regress/case-manyptrwrongrst.sys b/regress/case-manyptrwrongrst.sys
new file mode 100644 (file)
index 0000000..a577018
--- /dev/null
@@ -0,0 +1,1215 @@
+adnstest default
+292/254.0.99.203.in-addr.arpa
+ start 933289772.727140
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000265
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000089
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000067
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.004394
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.003204
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.003203
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.003315
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.003207
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0d0001.
+ sendto=43
+ +0.003263
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.003208
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 100001.
+ sendto=43
+ +0.003221
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.003221
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.003315
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.003215
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.003247
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.003252
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.003368
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.003230
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.950137
+ select=1 rfds=[4] wfds=[] efds=[]
+ +2.-643984
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 01000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 00a2002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.001188
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000472
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.596855
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.176497
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000885
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000392
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.422285
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.049249
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 05000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.001133
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000450
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.374656
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.026086
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0d000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000914
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000411
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.347245
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.041288
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 01000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 00a2002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000882
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000437
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.304638
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.035548
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 10000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 00a2002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.001120
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000442
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.267528
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038130
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 06000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.001107
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000697
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.230909
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.088915
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000881
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000428
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.140685
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.149669
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.002605
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.001310
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.007369
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.002868
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.002427
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.004373
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.002425
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.002419
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005328
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.002641
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.000001
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 0258002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000001
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 0258002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000001
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.002664
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.964877
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003669
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 0258002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000882
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 06000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 0258002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.003257
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000436
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.956633
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.015305
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 0258002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.001159
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000349
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.939820
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038251
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 06000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 0258002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000880
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000323
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.900366
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039069
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 11000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000881
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000448
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.859968
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-420413
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 11000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 0257002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000922
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000399
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.279060
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.176624
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 11000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 0256002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000917
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000466
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.101053
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.100567
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000486
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009988
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001186
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008955
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008816
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000139
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009991
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001137
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.978870
+ select=1 rfds=[4] wfds=[] efds=[]
+ +2.-569657
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238380 00010013 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 0100004e cb001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 00004ecb 00080574 65747261 c043c00c
+     000c0001 00004ecb 000d046d 61696c05 61676174 65c043c0 0c000c00 0100004e
+     cb000502 6e73c06f c00c000c 00010000 4ecb0013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 0100004e cb001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 0100004e cb001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 004ecb00 0a07626f 75717565 74c043c0 0c000c00 0100004e
+     cb00100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 0100004e cb000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 00004ecb 000c046d 61696c04
+     6e657275 c043c00c 000c0001 00004ecb 0002c03a c00c000c 00010000 4ecb0010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010000 4ecb0002 c0d2c00c
+     000c0001 00004ecb 0005026e 73c056c0 0c000c00 0100004e cb000704 6d61696c
+     c056c00c 000c0001 00004ecb 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 00004ecb 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     004ecb00 06036263 63c043.
+ +0.003463
+ socket type=SOCK_STREAM
+ socket=5
+ +0.001488
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000076
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000067
+ connect fd=5 addr=172.18.45.6:53
+ connect=EINPROGRESS
+ +0.000978
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000143
+ select max=6 rfds=[4] wfds=[5] efds=[] to=0.562305
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.001347
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000274
+ write fd=5
+     002b3123 01000001 00000000 00000332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.001176
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.559508
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.559030
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.000478
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010029
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001273
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.998727
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.140762
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8380 00010013 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 0100004e ca001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 00004eca 00080574 65747261 c043c00c
+     000c0001 00004eca 000d046d 61696c05 61676174 65c043c0 0c000c00 0100004e
+     ca000502 6e73c06f c00c000c 00010000 4eca0013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 0100004e ca001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 0100004e ca001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 004eca00 0a07626f 75717565 74c043c0 0c000c00 0100004e
+     ca00100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 0100004e ca000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 00004eca 000c046d 61696c04
+     6e657275 c043c00c 000c0001 00004eca 0002c03a c00c000c 00010000 4eca0010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010000 4eca0002 c0d2c00c
+     000c0001 00004eca 0005026e 73c056c0 0c000c00 0100004e ca000704 6d61696c
+     c056c00c 000c0001 00004eca 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 00004eca 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     004eca00 06036263 63c043.
+ +0.003063
+ write fd=5
+     002b312a 01000001 00000000 00000332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.001448
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000169
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.275214
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-921124
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8380 00010013 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 0100004e ca001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 00004eca 00080574 65747261 c043c00c
+     000c0001 00004eca 000d046d 61696c05 61676174 65c043c0 0c000c00 0100004e
+     ca000502 6e73c06f c00c000c 00010000 4eca0013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 0100004e ca001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 0100004e ca001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 004eca00 0a07626f 75717565 74c043c0 0c000c00 0100004e
+     ca00100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 0100004e ca000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 00004eca 000c046d 61696c04
+     6e657275 c043c00c 000c0001 00004eca 0002c03a c00c000c 00010000 4eca0010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010000 4eca0002 c0d2c00c
+     000c0001 00004eca 0005026e 73c056c0 0c000c00 0100004e ca000704 6d61696c
+     c056c00c 000c0001 00004eca 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 00004eca 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     004eca00 06036263 63c043.
+ +0.003054
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000483
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.192801
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.817055
+ read fd=5 buflen=2
+ read=OK
+     096f.
+ +0.000391
+ read fd=5 buflen=2415
+ read=OK
+     31238180 0001005e 00020001 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 0100004e c9001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 00004ec9 00080574 65747261 c043c00c
+     000c0001 00004ec9 000d046d 61696c05 61676174 65c043c0 0c000c00 0100004e
+     c9000502 6e73c06f c00c000c 00010000 4ec90013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 0100004e c9001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 0100004e c9001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 004ec900 0a07626f 75717565 74c043c0 0c000c00 0100004e
+     c900100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 0100004e c9000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 00004ec9 000c046d 61696c04
+     6e657275 c043c00c 000c0001 00004ec9 0002c03a c00c000c 00010000 4ec90010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010000 4ec90002 c0d2c00c
+     000c0001 00004ec9 0005026e 73c056c0 0c000c00 0100004e c9000704 6d61696c
+     c056c00c 000c0001 00004ec9 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 00004ec9 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     004ec900 06036263 63c043c0 0c000c00 0100004e c9000b08 73656375 72697479
+     c128c00c 000c0001 00004ec9 00100d62 7572676c 6172616c 61726d73 c043c00c
+     000c0001 00004ec9 000b026e 73057361 666573c0 43c00c00 0c000100 004ec900
+     05026e73 c1f7c00c 000c0001 00004ec9 00131063 6f757065 72636f6e 73756c74
+     696e67c0 43c00c00 0c000100 004ec900 110e7365 63757269 74796775 61726473
+     c043c00c 000c0001 00004ec9 000c026e 73066775 61726473 c043c00c 000c0001
+     00004ec9 00070461 736973c1 28c00c00 0c000100 004ec900 02c13fc0 0c000c00
+     0100004e c90002c0 b6c00c00 0c000100 004ec900 08056d61 676963c0 43c00c00
+     0c000100 004ec900 07046d61 696cc1e5 c00c000c 00010000 4ec90005 026e73c1
+     03c00c00 0c000100 004ec900 02c122c0 0c000c00 0100004e c9000502 6e73c0ed
+     c00c000c 00010000 4ec90007 046d6169 6cc22dc0 0c000c00 0100004e c9000502
+     6e73c1e5 c00c000c 00010000 4ec90005 026e73c2 0ec00c00 0c000100 004ec900
+     05026e73 c271c00c 000c0001 00004ec9 00100d63 6f766572 7463616d 65726173
+     c043c00c 000c0001 00004ec9 0005026e 73c13fc0 0c000c00 0100004e c9001302
+     6e730d63 6f766572 7463616d 65726173 c043c00c 000c0001 00004ec9 000b0862
+     6f757175 657473c0 43c00c00 0c000100 004ec900 0d0a636f 6e63656e 74726963
+     c043c00c 000c0001 00004ec9 0005026e 73c094c0 0c000c00 0100004e c9000704
+     6d61696c c252c00c 000c0001 00004ec9 00110e72 65746169 6c736563 75726974
+     79c043c0 0c000c00 0100004e c9001002 6e730a63 6f6e6365 6e747269 63c043c0
+     0c000c00 0100004e c9000d04 6d61696c 056d6167 6963c043 c00c000c 00010000
+     4ec9000c 096e7a61 6e676c69 6e67c043 c00c000c 00010000 4ec90005 026e73c2
+     52c00c00 0c000100 004ec900 0f026e73 096e7a61 6e676c69 6e67c043 c00c000c
+     00010000 4ec90007 046d6169 6cc163c0 0c000c00 0100004e c9000805 73776966
+     74c043c0 0c000c00 0100004e c9001104 6d61696c 0973656c 65637469 7665c043
+     c00c000c 00010000 4ec9000f 026e7309 666f7265 66726f6e 74c043c0 0c000c00
+     0100004e c9001104 6d61696c 096e7a61 6e676c69 6e67c043 c00c000c 00010000
+     4ec90009 06677561 726473c0 43c00c00 0c000100 004ec900 11046d61 696c096e
+     7a646573 69676e73 c043c00c 000c0001 00004ec9 0002c163 c00c000c 00010000
+     4ec90018 026e7312 73656375 72697479 6d616e61 67656d65 6e74c043 c00c000c
+     00010000 4ec90012 046d6169 6c0a776f 6f6c776f 72746873 c043c00c 000c0001
+     00004ec9 0012046d 61696c0a 636f6e63 656e.
+ +0.010287
+ read fd=5 buflen=957
+ read=OK
+     74726963 c043c00c 000c0001 00004ec9 000c0973 656c6563 74697665 c043c00c
+     000c0001 00004ec9 00181573 70656369 616c696e 76657374 69676174 696f6e73
+     c043c00c 000c0001 00004ec9 000b026e 73057377 696674c0 43c00c00 0c000100
+     004ec900 0d046d61 696c0573 77696674 c043c00c 000c0001 00004ec9 0013026e
+     73097365 63757265 6e657403 6e6574c0 46c00c00 0c000100 004ec900 17147072
+     69766174 65696e76 65737469 67617469 6f6ec043 c00c000c 00010000 4ec9001a
+     026e7314 70726976 61746569 6e766573 74696761 74696f6e c043c00c 000c0001
+     00004ec9 00090665 74726164 65c043c0 0c000c00 0100004e c9001b02 6e731573
+     70656369 616c696e 76657374 69676174 696f6e73 c043c00c 000c0001 00004ec9
+     000e046d 61696c06 616e7365 7474c043 c00c000c 00010000 4ec9000e 03667470
+     07776172 72656e74 c043c00c 000c0001 00004ec9 0014026e 730e7265 7461696c
+     73656375 72697479 c043c00c 000c0001 00004ec9 001a046d 61696c12 73656375
+     72697479 6d616e61 67656d65 6e74c043 c00c000c 00010000 4ec9000b 026e7305
+     6d616769 63c043c0 0c000c00 0100004e c9001104 6d61696c 09666f72 6566726f
+     6e74c043 c00c000c 00010000 4ec90007 046d6169 6cc1b1c0 0c000c00 0100004e
+     c90002c1 b1c00c00 0c000100 004ec900 0f026e73 096e7a64 65736967 6e73c043
+     c00c000c 00010000 4ec90002 c22dc00c 000c0001 00004ec9 000f026e 73097365
+     6c656374 697665c0 43c00c00 0c000100 004ec900 0c09666f 72656672 6f6e74c0
+     43c00c00 0c000100 004ec900 15127365 63757269 74796d61 6e616765 6d656e74
+     c043c00c 000c0001 00004ec9 0002c1cd c00c000c 00010000 4ec90010 09736563
+     7572656e 6574036e 6574c046 c00c000c 00010000 4ec9001d 046d6169 6c157370
+     65636961 6c696e76 65737469 67617469 6f6e73c0 43c00c00 0c000100 004ec900
+     0c096e7a 64657369 676e73c0 43c00c00 0c000100 004ec900 0c026e73 06657472
+     616465c0 43c00c00 0c000100 004ec900 07046d61 696cc122 c00c000c 00010000
+     4ec90007 046d6169 6cc1cdc0 0c000c00 0100004e c9000a02 6e730461 736973c1
+     28c00c00 0c000100 004ec900 0e026e73 08626f75 71756574 73c043c0 0c000c00
+     0100004e c90002c0 6f013002 39390332 30330769 6e2d6164 64720461 72706100
+     00020001 000545fc 0002c037 01300239 39033230 3307696e 2d616464 72046172
+     70610000 02000100 0545fc00 11036e73 31077761 696b6174 6f026163 c046036e
+     73310777 61696b61 746f0261 63c04600 01000100 02a30000 048cc880 0d.
+ +0.005913
+ read fd=5 buflen=2417
+ read=EAGAIN
+ +0.019409
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.059852
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.028945
+ read fd=5 buflen=2417
+ read=OK
+     096f312a 81800001 005e0002 00010332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 004ec900 13026e73 08736563
+     75726974 7902636f 026e7a00 c00c000c 00010000 4ec90008 05746574 7261c043
+     c00c000c 00010000 4ec9000d 046d6169 6c056167 617465c0 43c00c00 0c000100
+     004ec900 05026e73 c06fc00c 000c0001 00004ec9 00131073 65637572 69747974
+     7261696e 696e67c0 43c00c00 0c000100 004ec900 10026e73 0a676966 74626173
+     6b6574c0 43c00c00 0c000100 004ec900 12026e73 08736563 75726974 79036765
+     6ec046c0 0c000c00 0100004e c9000a07 626f7571 756574c0 43c00c00 0c000100
+     004ec900 100d696e 76657374 69676174 696f6ec0 43c00c00 0c000100 004ec900
+     0f026e73 056e7a69 7069036f 7267c046 c00c000c 00010000 4ec9000c 046d6169
+     6c046e65 7275c043 c00c000c 00010000 4ec90002 c03ac00c 000c0001 00004ec9
+     0010026e 730a7374 6f726577 61746368 c043c00c 000c0001 00004ec9 0002c0d2
+     c00c000c 00010000 4ec90005 026e73c0 56c00c00 0c000100 004ec900 07046d61
+     696cc056 c00c000c 00010000 4ec90010 026e730a 73656375 72696361 7264c043
+     c00c000c 00010000 4ec9000f 026e7309 756e6465 72686f75 72c043c0 0c000c00
+     0100004e c9000603 626363c0 43c00c00 0c000100 004ec900 0b087365 63757269
+     7479c128 c00c000c 00010000 4ec90010 0d627572 676c6172 616c6172 6d73c043
+     c00c000c 00010000 4ec9000b 026e7305 73616665 73c043c0 0c000c00 0100004e
+     c9000502 6e73c1f7 c00c000c 00010000 4ec90013 10636f75 70657263 6f6e7375
+     6c74696e 67c043c0 0c000c00 0100004e c900110e 73656375 72697479 67756172
+     6473c043 c00c000c 00010000 4ec9000c 026e7306 67756172 6473c043 c00c000c
+     00010000 4ec90007 04617369 73c128c0 0c000c00 0100004e c90002c1 3fc00c00
+     0c000100 004ec900 02c0b6c0 0c000c00 0100004e c9000805 6d616769 63c043c0
+     0c000c00 0100004e c9000704 6d61696c c1e5c00c 000c0001 00004ec9 0005026e
+     73c103c0 0c000c00 0100004e c90002c1 22c00c00 0c000100 004ec900 05026e73
+     c0edc00c 000c0001 00004ec9 0007046d 61696cc2 2dc00c00 0c000100 004ec900
+     05026e73 c1e5c00c 000c0001 00004ec9 0005026e 73c20ec0 0c000c00 0100004e
+     c9000502 6e73c271 c00c000c 00010000 4ec90010 0d636f76 65727463 616d6572
+     6173c043 c00c000c 00010000 4ec90005 026e73c1 3fc00c00 0c000100 004ec900
+     13026e73 0d636f76 65727463 616d6572 6173c043 c00c000c 00010000 4ec9000b
+     08626f75 71756574 73c043c0 0c000c00 0100004e c9000d0a 636f6e63 656e7472
+     6963c043 c00c000c 00010000 4ec90005 026e73c0 94c00c00 0c000100 004ec900
+     07046d61 696cc252 c00c000c 00010000 4ec90011 0e726574 61696c73 65637572
+     697479c0 43c00c00 0c000100 004ec900 10026e73 0a636f6e 63656e74 726963c0
+     43c00c00 0c000100 004ec900 0d046d61 696c056d 61676963 c043c00c 000c0001
+     00004ec9 000c096e 7a616e67 6c696e67 c043c00c 000c0001 00004ec9 0005026e
+     73c252c0 0c000c00 0100004e c9000f02 6e73096e 7a616e67 6c696e67 c043c00c
+     000c0001 00004ec9 0007046d 61696cc1 63c00c00 0c000100 004ec900 08057377
+     696674c0 43c00c00 0c000100 004ec900 11046d61 696c0973 656c6563 74697665
+     c043c00c 000c0001 00004ec9 000f026e 7309666f 72656672 6f6e74c0 43c00c00
+     0c000100 004ec900 11046d61 696c096e 7a616e67 6c696e67 c043c00c 000c0001
+     00004ec9 00090667 75617264 73c043c0 0c000c00 0100004e c9001104 6d61696c
+     096e7a64 65736967 6e73c043 c00c000c 00010000 4ec90002 c163c00c 000c0001
+     00004ec9 0018026e 73127365 63757269 74796d61 6e616765 6d656e74 c043c00c
+     000c0001 00004ec9 0012046d 61696c0a 776f6f6c 776f7274 6873c043 c00c000c
+     00010000 4ec90012 046d6169 6c0a636f 6e63656e.
+ +0.008722
+ read fd=5 buflen=957
+ read=EAGAIN
+ +0.000264
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.021921
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.063001
+ read fd=5 buflen=957
+ read=OK
+     74726963 c043c00c 000c0001 00004ec9 000c0973 656c6563 74697665 c043c00c
+     000c0001 00004ec9 00181573 70656369 616c696e 76657374 69676174 696f6e73
+     c043c00c 000c0001 00004ec9 000b026e 73057377 696674c0 43c00c00 0c000100
+     004ec900 0d046d61 696c0573 77696674 c043c00c 000c0001 00004ec9 0013026e
+     73097365 63757265 6e657403 6e6574c0 46c00c00 0c000100 004ec900 17147072
+     69766174 65696e76 65737469 67617469 6f6ec043 c00c000c 00010000 4ec9001a
+     026e7314 70726976 61746569 6e766573 74696761 74696f6e c043c00c 000c0001
+     00004ec9 00090665 74726164 65c043c0 0c000c00 0100004e c9001b02 6e731573
+     70656369 616c696e 76657374 69676174 696f6e73 c043c00c 000c0001 00004ec9
+     000e046d 61696c06 616e7365 7474c043 c00c000c 00010000 4ec9000e 03667470
+     07776172 72656e74 c043c00c 000c0001 00004ec9 0014026e 730e7265 7461696c
+     73656375 72697479 c043c00c 000c0001 00004ec9 001a046d 61696c12 73656375
+     72697479 6d616e61 67656d65 6e74c043 c00c000c 00010000 4ec9000b 026e7305
+     6d616769 63c043c0 0c000c00 0100004e c9001104 6d61696c 09666f72 6566726f
+     6e74c043 c00c000c 00010000 4ec90007 046d6169 6cc1b1c0 0c000c00 0100004e
+     c90002c1 b1c00c00 0c000100 004ec900 0f026e73 096e7a64 65736967 6e73c043
+     c00c000c 00010000 4ec90002 c22dc00c 000c0001 00004ec9 000f026e 73097365
+     6c656374 697665c0 43c00c00 0c000100 004ec900 0c09666f 72656672 6f6e74c0
+     43c00c00 0c000100 004ec900 15127365 63757269 74796d61 6e616765 6d656e74
+     c043c00c 000c0001 00004ec9 0002c1cd c00c000c 00010000 4ec90010 09736563
+     7572656e 6574036e 6574c046 c00c000c 00010000 4ec9001d 046d6169 6c157370
+     65636961 6c696e76 65737469 67617469 6f6e73c0 43c00c00 0c000100 004ec900
+     0c096e7a 64657369 676e73c0 43c00c00 0c000100 004ec900 0c026e73 06657472
+     616465c0 43c00c00 0c000100 004ec900 07046d61 696cc122 c00c000c 00010000
+     4ec90007 046d6169 6cc1cdc0 0c000c00 0100004e c9000a02 6e730461 736973c1
+     28c00c00 0c000100 004ec900 0e026e73 08626f75 71756574 73c043c0 0c000c00
+     0100004e c90002c0 6f013002 39390332 30330769 6e2d6164 64720461 72706100
+     00020001 000545fc 0002c037 01300239 39033230 3307696e 2d616464 72046172
+     70610000 02000100 0545fc00 11036e73 31077761 696b6174 6f026163 c046036e
+     73310777 61696b61 746f0261 63c04600 01000100 02a30000 048cc880 0d.
+ +0.005816
+ sendto fd=4 addr=172.18.45.6:53
+     312e0100 00010000 00000000 026e7308 73656375 72697479 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.002957
+ sendto fd=4 addr=172.18.45.6:53
+     312f0100 00010000 00000000 05746574 72610263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001178
+ sendto fd=4 addr=172.18.45.6:53
+     31300100 00010000 00000000 046d6169 6c056167 61746502 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001193
+ sendto fd=4 addr=172.18.45.6:53
+     31310100 00010000 00000000 026e7305 61676174 6502636f 026e7a00 00010001.
+ sendto=32
+ +0.001166
+ sendto fd=4 addr=172.18.45.6:53
+     31320100 00010000 00000000 10736563 75726974 79747261 696e696e 6702636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001265
+ sendto fd=4 addr=172.18.45.6:53
+     31330100 00010000 00000000 026e730a 67696674 6261736b 65740263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001219
+ sendto fd=4 addr=172.18.45.6:53
+     31340100 00010000 00000000 026e7308 73656375 72697479 0367656e 026e7a00
+     00010001.
+ sendto=36
+ +0.001212
+ sendto fd=4 addr=172.18.45.6:53
+     31350100 00010000 00000000 07626f75 71756574 02636f02 6e7a0000 010001.
+ sendto=31
+ +0.001210
+ sendto fd=4 addr=172.18.45.6:53
+     31360100 00010000 00000000 0d696e76 65737469 67617469 6f6e0263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001220
+ sendto fd=4 addr=172.18.45.6:53
+     31370100 00010000 00000000 026e7305 6e7a6970 69036f72 67026e7a 00000100
+     01.
+ sendto=33
+ +0.001203
+ sendto fd=4 addr=172.18.45.6:53
+     31380100 00010000 00000000 046d6169 6c046e65 72750263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001223
+ sendto fd=4 addr=172.18.45.6:53
+     31390100 00010000 00000000 08736563 75726974 7902636f 026e7a00 00010001.
+ sendto=32
+ +0.001251
+ sendto fd=4 addr=172.18.45.6:53
+     313a0100 00010000 00000000 026e730a 73746f72 65776174 63680263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001242
+ sendto fd=4 addr=172.18.45.6:53
+     313b0100 00010000 00000000 08736563 75726974 79036765 6e026e7a 00000100
+     01.
+ sendto=33
+ +0.001165
+ sendto fd=4 addr=172.18.45.6:53
+     313c0100 00010000 00000000 026e7305 74657472 6102636f 026e7a00 00010001.
+ sendto=32
+ +0.001208
+ sendto fd=4 addr=172.18.45.6:53
+     313d0100 00010000 00000000 046d6169 6c057465 74726102 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001212
+ sendto fd=4 addr=172.18.45.6:53
+     313e0100 00010000 00000000 026e730a 73656375 72696361 72640263 6f026e7a
+     00000100 01.
+ sendto=37
+ +1.-998781
+ sendto fd=4 addr=172.18.45.6:53
+     313f0100 00010000 00000000 026e7309 756e6465 72686f75 7202636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001202
+ sendto fd=4 addr=172.18.45.6:53
+     31400100 00010000 00000000 03626363 02636f02 6e7a0000 010001.
+ sendto=27
+ +0.001186
+ sendto fd=4 addr=172.18.45.6:53
+     31410100 00010000 00000000 08736563 75726974 79036f72 67026e7a 00000100
+     01.
+ sendto=33
+ +0.001192
+ sendto fd=4 addr=172.18.45.6:53
+     31420100 00010000 00000000 0d627572 676c6172 616c6172 6d730263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001520
+ sendto fd=4 addr=172.18.45.6:53
+     31430100 00010000 00000000 026e7305 73616665 7302636f 026e7a00 00010001.
+ sendto=32
+ +0.001501
+ sendto fd=4 addr=172.18.45.6:53
+     31440100 00010000 00000000 026e7308 73656375 72697479 036f7267 026e7a00
+     00010001.
+ sendto=36
+ +0.002041
+ sendto fd=4 addr=172.18.45.6:53
+     31450100 00010000 00000000 10636f75 70657263 6f6e7375 6c74696e 6702636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001682
+ sendto fd=4 addr=172.18.45.6:53
+     31460100 00010000 00000000 0e736563 75726974 79677561 72647302 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001629
+ sendto fd=4 addr=172.18.45.6:53
+     31470100 00010000 00000000 026e7306 67756172 64730263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001671
+ sendto fd=4 addr=172.18.45.6:53
+     31480100 00010000 00000000 04617369 73036f72 67026e7a 00000100 01.
+ sendto=29
+ +0.001592
+ sendto fd=4 addr=172.18.45.6:53
+     31490100 00010000 00000000 046e6572 7502636f 026e7a00 00010001.
+ sendto=28
+ +0.001561
+ sendto fd=4 addr=172.18.45.6:53
+     314a0100 00010000 00000000 0a676966 74626173 6b657402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001907
+ sendto fd=4 addr=172.18.45.6:53
+     314b0100 00010000 00000000 056d6167 69630263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001654
+ sendto fd=4 addr=172.18.45.6:53
+     314c0100 00010000 00000000 046d6169 6c036263 6302636f 026e7a00 00010001.
+ sendto=32
+ +0.001634
+ sendto fd=4 addr=172.18.45.6:53
+     314d0100 00010000 00000000 026e730d 696e7665 73746967 6174696f 6e02636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001656
+ sendto fd=4 addr=172.18.45.6:53
+     314e0100 00010000 00000000 056e7a69 7069036f 7267026e 7a000001 0001.
+ sendto=30
+ +0.001595
+ sendto fd=4 addr=172.18.45.6:53
+     314f0100 00010000 00000000 026e7307 626f7571 75657402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001672
+ sendto fd=4 addr=172.18.45.6:53
+     31500100 00010000 00000000 046d6169 6c057361 66657302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001801
+ sendto fd=4 addr=172.18.45.6:53
+     31510100 00010000 00000000 026e7303 62636302 636f026e 7a000001 0001.
+ sendto=30
+ +0.001626
+ sendto fd=4 addr=172.18.45.6:53
+     31520100 00010000 00000000 026e730d 62757267 6c617261 6c61726d 7302636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001697
+ sendto fd=4 addr=172.18.45.6:53
+     31530100 00010000 00000000 026e730e 73656375 72697479 67756172 64730263
+     6f026e7a 00000100 01.
+ sendto=41
+ +0.001694
+ sendto fd=4 addr=172.18.45.6:53
+     31540100 00010000 00000000 0d636f76 65727463 616d6572 61730263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001665
+ sendto fd=4 addr=172.18.45.6:53
+     31550100 00010000 00000000 026e7304 6e657275 02636f02 6e7a0000 010001.
+ sendto=31
+ +0.001613
+ sendto fd=4 addr=172.18.45.6:53
+     31560100 00010000 00000000 026e730d 636f7665 72746361 6d657261 7302636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001761
+ sendto fd=4 addr=172.18.45.6:53
+     31570100 00010000 00000000 08626f75 71756574 7302636f 026e7a00 00010001.
+ sendto=32
+ +0.001635
+ sendto fd=4 addr=172.18.45.6:53
+     31580100 00010000 00000000 0a636f6e 63656e74 72696302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001693
+ sendto fd=4 addr=172.18.45.6:53
+     31590100 00010000 00000000 026e7310 73656375 72697479 74726169 6e696e67
+     02636f02 6e7a0000 010001.
+ sendto=43
+ +0.001762
+ sendto fd=4 addr=172.18.45.6:53
+     315a0100 00010000 00000000 046d6169 6c10636f 75706572 636f6e73 756c7469
+     6e670263 6f026e7a 00000100 01.
+ sendto=45
+ +0.001727
+ sendto fd=4 addr=172.18.45.6:53
+     315b0100 00010000 00000000 0e726574 61696c73 65637572 69747902 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001636
+ sendto fd=4 addr=172.18.45.6:53
+     315c0100 00010000 00000000 026e730a 636f6e63 656e7472 69630263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001667
+ sendto fd=4 addr=172.18.45.6:53
+     315d0100 00010000 00000000 046d6169 6c056d61 67696302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001674
+ sendto fd=4 addr=172.18.45.6:53
+     315e0100 00010000 00000000 096e7a61 6e676c69 6e670263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001676
+ sendto fd=4 addr=172.18.45.6:53
+     315f0100 00010000 00000000 026e7310 636f7570 6572636f 6e73756c 74696e67
+     02636f02 6e7a0000 010001.
+ sendto=43
+ +0.001709
+ sendto fd=4 addr=172.18.45.6:53
+     31600100 00010000 00000000 026e7309 6e7a616e 676c696e 6702636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001623
+ sendto fd=4 addr=172.18.45.6:53
+     31610100 00010000 00000000 046d6169 6c0a7374 6f726577 61746368 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001647
+ sendto fd=4 addr=172.18.45.6:53
+     31620100 00010000 00000000 05737769 66740263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001638
+ sendto fd=4 addr=172.18.45.6:53
+     31630100 00010000 00000000 046d6169 6c097365 6c656374 69766502 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001714
+ sendto fd=4 addr=172.18.45.6:53
+     31640100 00010000 00000000 026e7309 666f7265 66726f6e 7402636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001705
+ sendto fd=4 addr=172.18.45.6:53
+     31650100 00010000 00000000 046d6169 6c096e7a 616e676c 696e6702 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001701
+ sendto fd=4 addr=172.18.45.6:53
+     31660100 00010000 00000000 06677561 72647302 636f026e 7a000001 0001.
+ sendto=30
+ +0.001623
+ sendto fd=4 addr=172.18.45.6:53
+     31670100 00010000 00000000 046d6169 6c096e7a 64657369 676e7302 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001653
+ sendto fd=4 addr=172.18.45.6:53
+     31680100 00010000 00000000 0a73746f 72657761 74636802 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.058123
+ sendto fd=4 addr=172.18.45.6:53
+     31690100 00010000 00000000 026e7312 73656375 72697479 6d616e61 67656d65
+     6e740263 6f026e7a 00000100 01.
+ sendto=45
+ +0.001825
+ sendto fd=4 addr=172.18.45.6:53
+     316a0100 00010000 00000000 046d6169 6c0a776f 6f6c776f 72746873 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001755
+ sendto fd=4 addr=172.18.45.6:53
+     316b0100 00010000 00000000 046d6169 6c0a636f 6e63656e 74726963 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001576
+ sendto fd=4 addr=172.18.45.6:53
+     316c0100 00010000 00000000 0973656c 65637469 76650263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001723
+ sendto fd=4 addr=172.18.45.6:53
+     316d0100 00010000 00000000 15737065 6369616c 696e7665 73746967 6174696f
+     6e730263 6f026e7a 00000100 01.
+ sendto=45
+ +0.001520
+ sendto fd=4 addr=172.18.45.6:53
+     316e0100 00010000 00000000 026e7305 73776966 7402636f 026e7a00 00010001.
+ sendto=32
+ +0.001453
+ sendto fd=4 addr=172.18.45.6:53
+     316f0100 00010000 00000000 046d6169 6c057377 69667402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001422
+ sendto fd=4 addr=172.18.45.6:53
+     31700100 00010000 00000000 026e7309 73656375 72656e65 74036e65 74026e7a
+     00000100 01.
+ sendto=37
+ +0.001461
+ sendto fd=4 addr=172.18.45.6:53
+     31710100 00010000 00000000 14707269 76617465 696e7665 73746967 6174696f
+     6e02636f 026e7a00 00010001.
+ sendto=44
+ +0.001602
+ sendto fd=4 addr=172.18.45.6:53
+     31720100 00010000 00000000 026e7314 70726976 61746569 6e766573 74696761
+     74696f6e 02636f02 6e7a0000 010001.
+ sendto=47
+ +0.001625
+ sendto fd=4 addr=172.18.45.6:53
+     31730100 00010000 00000000 06657472 61646502 636f026e 7a000001 0001.
+ sendto=30
+ +0.001427
+ sendto fd=4 addr=172.18.45.6:53
+     31740100 00010000 00000000 026e7315 73706563 69616c69 6e766573 74696761
+     74696f6e 7302636f 026e7a00 00010001.
+ sendto=48
+ +0.001592
+ sendto fd=4 addr=172.18.45.6:53
+     31750100 00010000 00000000 046d6169 6c06616e 73657474 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001410
+ sendto fd=4 addr=172.18.45.6:53
+     31760100 00010000 00000000 03667470 07776172 72656e74 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001429
+ sendto fd=4 addr=172.18.45.6:53
+     31770100 00010000 00000000 026e730e 72657461 696c7365 63757269 74790263
+     6f026e7a 00000100 01.
+ sendto=41
+ +0.001586
+ sendto fd=4 addr=172.18.45.6:53
+     31780100 00010000 00000000 046d6169 6c127365 63757269 74796d61 6e616765
+     6d656e74 02636f02 6e7a0000 010001.
+ sendto=47
+ +0.001654
+ sendto fd=4 addr=172.18.45.6:53
+     31790100 00010000 00000000 026e7305 6d616769 6302636f 026e7a00 00010001.
+ sendto=32
+ +0.001470
+ sendto fd=4 addr=172.18.45.6:53
+     317a0100 00010000 00000000 046d6169 6c09666f 72656672 6f6e7402 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001529
+ sendto fd=4 addr=172.18.45.6:53
+     317b0100 00010000 00000000 046d6169 6c0a7365 63757269 63617264 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001536
+ sendto fd=4 addr=172.18.45.6:53
+     317c0100 00010000 00000000 0a736563 75726963 61726402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001493
+ sendto fd=4 addr=172.18.45.6:53
+     317d0100 00010000 00000000 026e7309 6e7a6465 7369676e 7302636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001518
+ sendto fd=4 addr=172.18.45.6:53
+     317e0100 00010000 00000000 05736166 65730263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001536
+ sendto fd=4 addr=172.18.45.6:53
+     317f0100 00010000 00000000 026e7309 73656c65 63746976 6502636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001634
+ sendto fd=4 addr=172.18.45.6:53
+     31800100 00010000 00000000 09666f72 6566726f 6e740263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001549
+ sendto fd=4 addr=172.18.45.6:53
+     31810100 00010000 00000000 12736563 75726974 796d616e 6167656d 656e7402
+     636f026e 7a000001 0001.
+ sendto=42
+ +0.001511
+ sendto fd=4 addr=172.18.45.6:53
+     31820100 00010000 00000000 09756e64 6572686f 75720263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001450
+ sendto fd=4 addr=172.18.45.6:53
+     31830100 00010000 00000000 09736563 7572656e 6574036e 6574026e 7a000001
+     0001.
+ sendto=34
+ +0.027143
+ sendto fd=4 addr=172.18.45.6:53
+     31840100 00010000 00000000 046d6169 6c157370 65636961 6c696e76 65737469
+     67617469 6f6e7302 636f026e 7a000001 0001.
+ sendto=50
+ +0.001627
+ sendto fd=4 addr=172.18.45.6:53
+     31850100 00010000 00000000 096e7a64 65736967 6e730263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001455
+ sendto fd=4 addr=172.18.45.6:53
+     31860100 00010000 00000000 026e7306 65747261 64650263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001572
+ sendto fd=4 addr=172.18.45.6:53
+     31870100 00010000 00000000 046d6169 6c056e7a 69706903 6f726702 6e7a0000
+     010001.
+ sendto=35
+ +0.001559
+ sendto fd=4 addr=172.18.45.6:53
+     31880100 00010000 00000000 046d6169 6c09756e 64657268 6f757202 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001507
+ sendto fd=4 addr=172.18.45.6:53
+     31890100 00010000 00000000 026e7304 61736973 036f7267 026e7a00 00010001.
+ sendto=32
+ +0.001428
+ sendto fd=4 addr=172.18.45.6:53
+     318a0100 00010000 00000000 026e7308 626f7571 75657473 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001471
+ sendto fd=4 addr=172.18.45.6:53
+     318b0100 00010000 00000000 05616761 74650263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001457
+ read fd=5 buflen=2417
+ read=EAGAIN
+ +0.000160
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.766818
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.661618
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312e8180 00010001 00020002 026e7308 73656375 72697479 02636f02 6e7a0000
+     010001c0 0c000100 01000151 800004cb 6300fe08 73656375 72697479 02636f02
+     6e7a0000 02000100 01518000 02c00cc0 33000200 01000151 80001103 6e733107
+     7761696b 61746f02 6163c03f c00c0001 00010001 51800004 cb6300fe c05b0001
+     00010001 51800004 8cc8800d.
+ +0.001142
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000798
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.103260
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.077615
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31318180 00010001 00020002 026e7305 61676174 6502636f 026e7a00 00010001
+     c00c0001 00010001 51800004 cb6300fe 05616761 74650263 6f026e7a 00000200
+     01000151 800002c0 0cc03000 02000100 01518000 11036e73 31077761 696b6174
+     6f026163 c039c00c 00010001 00015180 0004cb63 00fec055 00010001 00015180
+     00048cc8 800d.
+ +0.001006
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000520
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.024119
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-919664
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31328180 00010001 00020002 10736563 75726974 79747261 696e696e 6702636f
+     026e7a00 00010001 c00c0001 00010001 4fd40004 cb6300fe c00c0002 00010001
+     51800005 026e73c0 0cc00c00 02000100 01518000 13036e73 31077761 696b6174
+     6f026163 026e7a00 c0440001 00010001 51800004 cb6300fe c0550001 00010001
+     51800004 8cc8800d.
+ +0.001035
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000535
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.942213
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.047739
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31338180 00010001 00020002 026e730a 67696674 6261736b 65740263 6f026e7a
+     00000100 01c00c00 01000100 01518000 04cb6300 fe0a6769 66746261 736b6574
+     02636f02 6e7a0000 02000100 01518000 02c00cc0 35000200 01000151 80001103
+     6e733107 7761696b 61746f02 6163c043 c00c0001 00010001 51800004 cb6300fe
+     c05f0001 00010001 51800004 8cc8800d.
+ +0.001079
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000550
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.892845
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038213
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31348180 00010001 00020002 026e7308 73656375 72697479 0367656e 026e7a00
+     00010001 c00c0001 00010001 51800004 cb6300fe 08736563 75726974 79036765
+     6e026e7a 00000200 01000151 800002c0 0cc03400 02000100 01518000 11036e73
+     31077761 696b6174 6f026163 c041c00c 00010001 00015180 0004cb63 00fec05d
+     00010001 00015180 00048cc8 800d.
+ +0.001063
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000523
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.853046
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.048278
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31378180 00010001 00020002 026e7305 6e7a6970 69036f72 67026e7a 00000100
+     01c00c00 01000100 01518000 04cb6300 fe056e7a 69706903 6f726702 6e7a0000
+     02000100 01518000 02c00cc0 31000200 01000151 80001103 6e733107 7761696b
+     61746f02 6163c03b c00c0001 00010001 51800004 cb6300fe c0570001 00010001
+     51800004 8cc8800d.
+ +0.001030
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000557
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.803181
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.146677
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313a8583 00010000 00010000 026e730a 73746f72 65776174 63680263 6f026e7a
+     00000100 0102636f 026e7a00 00060001 00015180 002c046e 73393907 7761696b
+     61746f02 6163c028 03736f61 c03b7727 6ec50000 0e100000 07080027 8d000001
+     5180.
+ +0.000793
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.026541
+ close fd=4
+ close=OK
+ +0.000436
+ close fd=5
+ close=OK
+ +0.004673
diff --git a/regress/case-manyptrwrongrty.err b/regress/case-manyptrwrongrty.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-manyptrwrongrty.out b/regress/case-manyptrwrongrty.out
new file mode 100644 (file)
index 0000000..41b13d9
--- /dev/null
@@ -0,0 +1,164 @@
+adns debug: using nameserver 172.18.45.6
+254.0.99.203.in-addr.arpa flags 292 type 1 A(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 2 NS(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 5 CNAME(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 6 SOA(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 12 PTR(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 13 HINFO(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 15 MX(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 16 TXT(-) submitted
+254.0.99.203.in-addr.arpa flags 292 type 17 RP(raw) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65537 A(addr) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65538 NS(+addr) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65548 PTR(checked) submitted
+254.0.99.203.in-addr.arpa flags 292 type 65551 MX(+addr) submitted
+254.0.99.203.in-addr.arpa flags 292 type 131078 SOA(822) submitted
+254.0.99.203.in-addr.arpa flags 292 type 131089 RP(822) submitted
+254.0.99.203.in-addr.arpa flags 292 type A(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=539
+254.0.99.203.in-addr.arpa flags 292 type NS(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=539
+254.0.99.203.in-addr.arpa flags 292 type SOA(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=540
+adns debug: TCP connected (NS=172.18.45.6)
+254.0.99.203.in-addr.arpa flags 292 type HINFO(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=540
+254.0.99.203.in-addr.arpa flags 292 type MX(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=540
+254.0.99.203.in-addr.arpa flags 292 type TXT(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=539
+254.0.99.203.in-addr.arpa flags 292 type RP(raw): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=539
+254.0.99.203.in-addr.arpa flags 292 type PTR(raw): OK; nrrs=94; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86351
+ ns.security.co.nz
+ tetra.co.nz
+ mail.agate.co.nz
+ ns.agate.co.nz
+ securitytraining.co.nz
+ ns.giftbasket.co.nz
+ ns.security.gen.nz
+ bouquet.co.nz
+ investigation.co.nz
+ ns.nzipi.org.nz
+ mail.neru.co.nz
+ security.co.nz
+ ns.storewatch.co.nz
+ security.gen.nz
+ ns.tetra.co.nz
+ mail.tetra.co.nz
+ ns.securicard.co.nz
+ ns.underhour.co.nz
+ bcc.co.nz
+ security.org.nz
+ burglaralarms.co.nz
+ ns.safes.co.nz
+ ns.security.org.nz
+ couperconsulting.co.nz
+ securityguards.co.nz
+ ns.guards.co.nz
+ asis.org.nz
+ neru.co.nz
+ giftbasket.co.nz
+ magic.co.nz
+ mail.bcc.co.nz
+ ns.investigation.co.nz
+ nzipi.org.nz
+ ns.bouquet.co.nz
+ mail.safes.co.nz
+ ns.bcc.co.nz
+ ns.burglaralarms.co.nz
+ ns.securityguards.co.nz
+ covertcameras.co.nz
+ ns.neru.co.nz
+ ns.covertcameras.co.nz
+ bouquets.co.nz
+ concentric.co.nz
+ ns.securitytraining.co.nz
+ mail.couperconsulting.co.nz
+ retailsecurity.co.nz
+ ns.concentric.co.nz
+ mail.magic.co.nz
+ nzangling.co.nz
+ ns.couperconsulting.co.nz
+ ns.nzangling.co.nz
+ mail.storewatch.co.nz
+ swift.co.nz
+ mail.selective.co.nz
+ ns.forefront.co.nz
+ mail.nzangling.co.nz
+ guards.co.nz
+ mail.nzdesigns.co.nz
+ storewatch.co.nz
+ ns.securitymanagement.co.nz
+ mail.woolworths.co.nz
+ mail.concentric.co.nz
+ selective.co.nz
+ specialinvestigations.co.nz
+ ns.swift.co.nz
+ mail.swift.co.nz
+ ns.securenet.net.nz
+ privateinvestigation.co.nz
+ ns.privateinvestigation.co.nz
+ etrade.co.nz
+ ns.specialinvestigations.co.nz
+ mail.ansett.co.nz
+ ftp.warrent.co.nz
+ ns.retailsecurity.co.nz
+ mail.securitymanagement.co.nz
+ ns.magic.co.nz
+ mail.forefront.co.nz
+ mail.securicard.co.nz
+ securicard.co.nz
+ ns.nzdesigns.co.nz
+ safes.co.nz
+ ns.selective.co.nz
+ forefront.co.nz
+ securitymanagement.co.nz
+ underhour.co.nz
+ securenet.net.nz
+ mail.specialinvestigations.co.nz
+ nzdesigns.co.nz
+ ns.etrade.co.nz
+ mail.nzipi.org.nz
+ mail.underhour.co.nz
+ ns.asis.org.nz
+ ns.bouquets.co.nz
+ agate.co.nz
+254.0.99.203.in-addr.arpa flags 292 type A(addr): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=539
+254.0.99.203.in-addr.arpa flags 292 type NS(+addr): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=539
+254.0.99.203.in-addr.arpa flags 292 type MX(+addr): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=540
+254.0.99.203.in-addr.arpa flags 292 type SOA(822): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=540
+254.0.99.203.in-addr.arpa flags 292 type RP(822): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=539
+adns debug: reply not found, id 313b, query owner security.gen.nz (NS=172.18.45.6)
+adns debug: reply not found, id 313c, query owner ns.tetra.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 313d, query owner mail.tetra.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 313e, query owner ns.securicard.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 313f, query owner ns.underhour.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3140, query owner bcc.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3141, query owner security.org.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3142, query owner burglaralarms.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3143, query owner ns.safes.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3144, query owner ns.security.org.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3145, query owner couperconsulting.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3146, query owner securityguards.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3147, query owner ns.guards.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3148, query owner asis.org.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3149, query owner neru.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 314a, query owner giftbasket.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 314b, query owner magic.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 314c, query owner mail.bcc.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 314d, query owner ns.investigation.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 314e, query owner nzipi.org.nz (NS=172.18.45.6)
+adns debug: reply not found, id 314f, query owner ns.bouquet.co.nz (NS=172.18.45.6)
+254.0.99.203.in-addr.arpa flags 292 type PTR(checked): Inconsistent resource records in DNS; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86351
+adns debug: reply not found, id 3150, query owner mail.safes.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3151, query owner ns.bcc.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3152, query owner ns.burglaralarms.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3153, query owner ns.securityguards.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3154, query owner covertcameras.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3155, query owner ns.neru.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3156, query owner ns.covertcameras.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3157, query owner bouquets.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3158, query owner concentric.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 3159, query owner ns.securitytraining.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 315a, query owner mail.couperconsulting.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 315b, query owner retailsecurity.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 315c, query owner ns.concentric.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 315d, query owner mail.magic.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 315e, query owner nzangling.co.nz (NS=172.18.45.6)
+adns debug: reply not found, id 315f, query owner ns.couperconsulting.co.nz (NS=172.18.45.6)
+254.0.99.203.in-addr.arpa flags 292 type CNAME(-): No such data; nrrs=0; cname=$; owner=254.0.99.203.in-addr.arpa; ttl=86400
+rc=0
diff --git a/regress/case-manyptrwrongrty.sys b/regress/case-manyptrwrongrty.sys
new file mode 100644 (file)
index 0000000..1afba85
--- /dev/null
@@ -0,0 +1,1436 @@
+adnstest default
+292/254.0.99.203.in-addr.arpa
+ start 933286845.072950
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000253
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000085
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000063
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.001688
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.001142
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.001140
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.001165
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001176
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0d0001.
+ sendto=43
+ +0.001238
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.001191
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 100001.
+ sendto=43
+ +0.001128
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.001143
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.001146
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.001165
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001178
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.001183
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.001231
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.001357
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.981729
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000351
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 01000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021b002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.001109
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000482
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.981475
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.009100
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021b002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000873
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000382
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.972262
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.016240
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 06000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021c002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000837
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000395
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.954790
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.009780
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238380 00010013 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000151 4f001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 0001514f 00080574 65747261 c043c00c
+     000c0001 0001514f 000d046d 61696c05 61676174 65c043c0 0c000c00 01000151
+     4f000502 6e73c06f c00c000c 00010001 514f0013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 01000151 4f001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 01000151 4f001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 01514f00 0a07626f 75717565 74c043c0 0c000c00 01000151
+     4f00100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 01000151 4f000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 0001514f 000c046d 61696c04
+     6e657275 c043c00c 000c0001 0001514f 0002c03a c00c000c 00010001 514f0010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010001 514f0002 c0d2c00c
+     000c0001 0001514f 0005026e 73c056c0 0c000c00 01000151 4f000704 6d61696c
+     c056c00c 000c0001 0001514f 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 0001514f 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     01514f00 06036263 63c043.
+ +0.003330
+ socket type=SOCK_STREAM
+ socket=5
+ +0.001365
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000066
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000058
+ connect fd=5 addr=172.18.45.6:53
+ connect=EINPROGRESS
+ +0.000257
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000121
+ select max=6 rfds=[4] wfds=[5] efds=[] to=1.939813
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.001860
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000211
+ write fd=5
+     002b3123 01000001 00000000 00000332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.000910
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.936832
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005498
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0d000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021c002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000840
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000372
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.930122
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.011817
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021c002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000838
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000389
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.917078
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.010900
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 10000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021b002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000836
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000359
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.904983
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.057379
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 11000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021b002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000856
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000409
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.846339
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.003255
+ read fd=5 buflen=2
+ read=OK
+     097f.
+ +0.000294
+ read fd=5 buflen=2431
+ read=OK
+     31238180 0001005e 00020002 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000151 4f001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 0001514f 00080574 65747261 c043c00c
+     000c0001 0001514f 000d046d 61696c05 61676174 65c043c0 0c000c00 01000151
+     4f000502 6e73c06f c00c000c 00010001 514f0013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 01000151 4f001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 01000151 4f001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 01514f00 0a07626f 75717565 74c043c0 0c000c00 01000151
+     4f00100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 01000151 4f000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 0001514f 000c046d 61696c04
+     6e657275 c043c00c 000c0001 0001514f 0002c03a c00c000c 00010001 514f0010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010001 514f0002 c0d2c00c
+     000c0001 0001514f 0005026e 73c056c0 0c000c00 01000151 4f000704 6d61696c
+     c056c00c 000c0001 0001514f 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 0001514f 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     01514f00 06036263 63c043c0 0c000c00 01000151 4f000b08 73656375 72697479
+     c128c00c 000c0001 0001514f 00100d62 7572676c 6172616c 61726d73 c043c00c
+     000c0001 0001514f 000b026e 73057361 666573c0 43c00c00 0c000100 01514f00
+     05026e73 c1f7c00c 000c0001 0001514f 00131063 6f757065 72636f6e 73756c74
+     696e67c0 43c00c00 0c000100 01514f00 110e7365 63757269 74796775 61726473
+     c043c00c 000c0001 0001514f 000c026e 73066775 61726473 c043c00c 000c0001
+     0001514f 00070461 736973c1 28c00c00 0c000100 01514f00 02c13fc0 0c000c00
+     01000151 4f0002c0 b6c00c00 0c000100 01514f00 08056d61 676963c0 43c00c00
+     0c000100 01514f00 07046d61 696cc1e5 c00c000c 00010001 514f0005 026e73c1
+     03c00c00 0c000100 01514f00 02c122c0 0c000c00 01000151 4f000502 6e73c0ed
+     c00c000c 00010001 514f0007 046d6169 6cc22dc0 0c000c00 01000151 4f000502
+     6e73c1e5 c00c000c 00010001 514f0005 026e73c2 0ec00c00 0c000100 01514f00
+     05026e73 c271c00c 000c0001 0001514f 00100d63 6f766572 7463616d 65726173
+     c043c00c 000c0001 0001514f 0005026e 73c13fc0 0c000c00 01000151 4f001302
+     6e730d63 6f766572 7463616d 65726173 c043c00c 000c0001 0001514f 000b0862
+     6f757175 657473c0 43c00c00 0c000100 01514f00 0d0a636f 6e63656e 74726963
+     c043c00c 000c0001 0001514f 0005026e 73c094c0 0c000c00 01000151 4f000704
+     6d61696c c252c00c 000c0001 0001514f 00110e72 65746169 6c736563 75726974
+     79c043c0 0c000c00 01000151 4f001002 6e730a63 6f6e6365 6e747269 63c043c0
+     0c000c00 01000151 4f000d04 6d61696c 056d6167 6963c043 c00c000c 00010001
+     514f000c 096e7a61 6e676c69 6e67c043 c00c000c 00010001 514f0005 026e73c2
+     52c00c00 0c000100 01514f00 0f026e73 096e7a61 6e676c69 6e67c043 c00c000c
+     00010001 514f0007 046d6169 6cc163c0 0c000c00 01000151 4f000805 73776966
+     74c043c0 0c000c00 01000151 4f001104 6d61696c 0973656c 65637469 7665c043
+     c00c000c 00010001 514f000f 026e7309 666f7265 66726f6e 74c043c0 0c000c00
+     01000151 4f001104 6d61696c 096e7a61 6e676c69 6e67c043 c00c000c 00010001
+     514f0009 06677561 726473c0 43c00c00 0c000100 01514f00 11046d61 696c096e
+     7a646573 69676e73 c043c00c 000c0001 0001514f 0002c163 c00c000c 00010001
+     514f0018 026e7312 73656375 72697479 6d616e61 67656d65 6e74c043 c00c000c
+     00010001 514f0012 046d6169 6c0a776f 6f6c776f 72746873 c043c00c 000c0001
+     0001514f 0012046d 61696c0a 636f6e63 656e.
+ +0.009407
+ read fd=5 buflen=973
+ read=OK
+     74726963 c043c00c 000c0001 0001514f 000c0973 656c6563 74697665 c043c00c
+     000c0001 0001514f 00181573 70656369 616c696e 76657374 69676174 696f6e73
+     c043c00c 000c0001 0001514f 000b026e 73057377 696674c0 43c00c00 0c000100
+     01514f00 0d046d61 696c0573 77696674 c043c00c 000c0001 0001514f 0013026e
+     73097365 63757265 6e657403 6e6574c0 46c00c00 0c000100 01514f00 17147072
+     69766174 65696e76 65737469 67617469 6f6ec043 c00c000c 00010001 514f001a
+     026e7314 70726976 61746569 6e766573 74696761 74696f6e c043c00c 000c0001
+     0001514f 00090665 74726164 65c043c0 0c000c00 01000151 4f001b02 6e731573
+     70656369 616c696e 76657374 69676174 696f6e73 c043c00c 000c0001 0001514f
+     000e046d 61696c06 616e7365 7474c043 c00c000c 00010001 514f000e 03667470
+     07776172 72656e74 c043c00c 000c0001 0001514f 0014026e 730e7265 7461696c
+     73656375 72697479 c043c00c 000c0001 0001514f 001a046d 61696c12 73656375
+     72697479 6d616e61 67656d65 6e74c043 c00c000c 00010001 514f000b 026e7305
+     6d616769 63c043c0 0c000c00 01000151 4f001104 6d61696c 09666f72 6566726f
+     6e74c043 c00c000c 00010001 514f0007 046d6169 6cc1b1c0 0c000c00 01000151
+     4f0002c1 b1c00c00 0c000100 01514f00 0f026e73 096e7a64 65736967 6e73c043
+     c00c000c 00010001 514f0002 c22dc00c 000c0001 0001514f 000f026e 73097365
+     6c656374 697665c0 43c00c00 0c000100 01514f00 0c09666f 72656672 6f6e74c0
+     43c00c00 0c000100 01514f00 15127365 63757269 74796d61 6e616765 6d656e74
+     c043c00c 000c0001 0001514f 0002c1cd c00c000c 00010001 514f0010 09736563
+     7572656e 6574036e 6574c046 c00c000c 00010001 514f001d 046d6169 6c157370
+     65636961 6c696e76 65737469 67617469 6f6e73c0 43c00c00 0c000100 01514f00
+     0c096e7a 64657369 676e73c0 43c00c00 0c000100 01514f00 0c026e73 06657472
+     616465c0 43c00c00 0c000100 01514f00 07046d61 696cc122 c00c000c 00010001
+     514f0007 046d6169 6cc1cdc0 0c000c00 01000151 4f000a02 6e730461 736973c1
+     28c00c00 0c000100 01514f00 0e026e73 08626f75 71756574 73c043c0 0c000c00
+     01000151 4f0002c0 6f013002 39390332 30330769 6e2d6164 64720461 72706100
+     00020001 000545c2 0002c037 01300239 39033230 3307696e 2d616464 72046172
+     70610000 02000100 0545c200 11036e73 31077761 696b6174 6f026163 c046c037
+     00010001 0001514a 0004cb63 00fe036e 73310777 61696b61 746f0261 63c04600
+     01000100 02a2c200 048cc880 0d.
+ +0.006032
+ read fd=5 buflen=2433
+ read=EAGAIN
+ +0.020859
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.806492
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.022402
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 01000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021b002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000868
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 02000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021b002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.001114
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8380 00010013 00000000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000151 4f001302 6e730873 65637572
+     69747902 636f026e 7a00c00c 000c0001 0001514f 00080574 65747261 c043c00c
+     000c0001 0001514f 000d046d 61696c05 61676174 65c043c0 0c000c00 01000151
+     4f000502 6e73c06f c00c000c 00010001 514f0013 10736563 75726974 79747261
+     696e696e 67c043c0 0c000c00 01000151 4f001002 6e730a67 69667462 61736b65
+     74c043c0 0c000c00 01000151 4f001202 6e730873 65637572 69747903 67656ec0
+     46c00c00 0c000100 01514f00 0a07626f 75717565 74c043c0 0c000c00 01000151
+     4f00100d 696e7665 73746967 6174696f 6ec043c0 0c000c00 01000151 4f000f02
+     6e73056e 7a697069 036f7267 c046c00c 000c0001 0001514f 000c046d 61696c04
+     6e657275 c043c00c 000c0001 0001514f 0002c03a c00c000c 00010001 514f0010
+     026e730a 73746f72 65776174 6368c043 c00c000c 00010001 514f0002 c0d2c00c
+     000c0001 0001514f 0005026e 73c056c0 0c000c00 01000151 4f000704 6d61696c
+     c056c00c 000c0001 0001514f 0010026e 730a7365 63757269 63617264 c043c00c
+     000c0001 0001514f 000f026e 7309756e 64657268 6f7572c0 43c00c00 0c000100
+     01514f00 06036263 63c043.
+ +0.003373
+ write fd=5
+     002b312a 01000001 00000000 00000332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.000877
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 0f000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021c002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000880
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 06000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021c002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.001170
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8180 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 11000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010000 021b002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.001182
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000384
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.774242
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.050425
+ read fd=5 buflen=2433
+ read=OK
+     097f312a 81800001 005e0002 00020332 35340130 02393903 32303307 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 01514f00 13026e73 08736563
+     75726974 7902636f 026e7a00 c00c000c 00010001 514f0008 05746574 7261c043
+     c00c000c 00010001 514f000d 046d6169 6c056167 617465c0 43c00c00 0c000100
+     01514f00 05026e73 c06fc00c 000c0001 0001514f 00131073 65637572 69747974
+     7261696e 696e67c0 43c00c00 0c000100 01514f00 10026e73 0a676966 74626173
+     6b6574c0 43c00c00 0c000100 01514f00 12026e73 08736563 75726974 79036765
+     6ec046c0 0c000c00 01000151 4f000a07 626f7571 756574c0 43c00c00 0c000100
+     01514f00 100d696e 76657374 69676174 696f6ec0 43c00c00 0c000100 01514f00
+     0f026e73 056e7a69 7069036f 7267c046 c00c000c 00010001 514f000c 046d6169
+     6c046e65 7275c043 c00c000c 00010001 514f0002 c03ac00c 000c0001 0001514f
+     0010026e 730a7374 6f726577 61746368 c043c00c 000c0001 0001514f 0002c0d2
+     c00c000c 00010001 514f0005 026e73c0 56c00c00 0c000100 01514f00 07046d61
+     696cc056 c00c000c 00010001 514f0010 026e730a 73656375 72696361 7264c043
+     c00c000c 00010001 514f000f 026e7309 756e6465 72686f75 72c043c0 0c000c00
+     01000151 4f000603 626363c0 43c00c00 0c000100 01514f00 0b087365 63757269
+     7479c128 c00c000c 00010001 514f0010 0d627572 676c6172 616c6172 6d73c043
+     c00c000c 00010001 514f000b 026e7305 73616665 73c043c0 0c000c00 01000151
+     4f000502 6e73c1f7 c00c000c 00010001 514f0013 10636f75 70657263 6f6e7375
+     6c74696e 67c043c0 0c000c00 01000151 4f00110e 73656375 72697479 67756172
+     6473c043 c00c000c 00010001 514f000c 026e7306 67756172 6473c043 c00c000c
+     00010001 514f0007 04617369 73c128c0 0c000c00 01000151 4f0002c1 3fc00c00
+     0c000100 01514f00 02c0b6c0 0c000c00 01000151 4f000805 6d616769 63c043c0
+     0c000c00 01000151 4f000704 6d61696c c1e5c00c 000c0001 0001514f 0005026e
+     73c103c0 0c000c00 01000151 4f0002c1 22c00c00 0c000100 01514f00 05026e73
+     c0edc00c 000c0001 0001514f 0007046d 61696cc2 2dc00c00 0c000100 01514f00
+     05026e73 c1e5c00c 000c0001 0001514f 0005026e 73c20ec0 0c000c00 01000151
+     4f000502 6e73c271 c00c000c 00010001 514f0010 0d636f76 65727463 616d6572
+     6173c043 c00c000c 00010001 514f0005 026e73c1 3fc00c00 0c000100 01514f00
+     13026e73 0d636f76 65727463 616d6572 6173c043 c00c000c 00010001 514f000b
+     08626f75 71756574 73c043c0 0c000c00 01000151 4f000d0a 636f6e63 656e7472
+     6963c043 c00c000c 00010001 514f0005 026e73c0 94c00c00 0c000100 01514f00
+     07046d61 696cc252 c00c000c 00010001 514f0011 0e726574 61696c73 65637572
+     697479c0 43c00c00 0c000100 01514f00 10026e73 0a636f6e 63656e74 726963c0
+     43c00c00 0c000100 01514f00 0d046d61 696c056d 61676963 c043c00c 000c0001
+     0001514f 000c096e 7a616e67 6c696e67 c043c00c 000c0001 0001514f 0005026e
+     73c252c0 0c000c00 01000151 4f000f02 6e73096e 7a616e67 6c696e67 c043c00c
+     000c0001 0001514f 0007046d 61696cc1 63c00c00 0c000100 01514f00 08057377
+     696674c0 43c00c00 0c000100 01514f00 11046d61 696c0973 656c6563 74697665
+     c043c00c 000c0001 0001514f 000f026e 7309666f 72656672 6f6e74c0 43c00c00
+     0c000100 01514f00 11046d61 696c096e 7a616e67 6c696e67 c043c00c 000c0001
+     0001514f 00090667 75617264 73c043c0 0c000c00 01000151 4f001104 6d61696c
+     096e7a64 65736967 6e73c043 c00c000c 00010001 514f0002 c163c00c 000c0001
+     0001514f 0018026e 73127365 63757269 74796d61 6e616765 6d656e74 c043c00c
+     000c0001 0001514f 0012046d 61696c0a 776f6f6c 776f7274 6873c043 c00c000c
+     00010001 514f0012 046d6169 6c0a636f 6e63656e.
+ +0.008599
+ read fd=5 buflen=973
+ read=EAGAIN
+ +0.000251
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.714967
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.113339
+ read fd=5 buflen=973
+ read=OK
+     74726963 c043c00c 000c0001 0001514f 000c0973 656c6563 74697665 c043c00c
+     000c0001 0001514f 00181573 70656369 616c696e 76657374 69676174 696f6e73
+     c043c00c 000c0001 0001514f 000b026e 73057377 696674c0 43c00c00 0c000100
+     01514f00 0d046d61 696c0573 77696674 c043c00c 000c0001 0001514f 0013026e
+     73097365 63757265 6e657403 6e6574c0 46c00c00 0c000100 01514f00 17147072
+     69766174 65696e76 65737469 67617469 6f6ec043 c00c000c 00010001 514f001a
+     026e7314 70726976 61746569 6e766573 74696761 74696f6e c043c00c 000c0001
+     0001514f 00090665 74726164 65c043c0 0c000c00 01000151 4f001b02 6e731573
+     70656369 616c696e 76657374 69676174 696f6e73 c043c00c 000c0001 0001514f
+     000e046d 61696c06 616e7365 7474c043 c00c000c 00010001 514f000e 03667470
+     07776172 72656e74 c043c00c 000c0001 0001514f 0014026e 730e7265 7461696c
+     73656375 72697479 c043c00c 000c0001 0001514f 001a046d 61696c12 73656375
+     72697479 6d616e61 67656d65 6e74c043 c00c000c 00010001 514f000b 026e7305
+     6d616769 63c043c0 0c000c00 01000151 4f001104 6d61696c 09666f72 6566726f
+     6e74c043 c00c000c 00010001 514f0007 046d6169 6cc1b1c0 0c000c00 01000151
+     4f0002c1 b1c00c00 0c000100 01514f00 0f026e73 096e7a64 65736967 6e73c043
+     c00c000c 00010001 514f0002 c22dc00c 000c0001 0001514f 000f026e 73097365
+     6c656374 697665c0 43c00c00 0c000100 01514f00 0c09666f 72656672 6f6e74c0
+     43c00c00 0c000100 01514f00 15127365 63757269 74796d61 6e616765 6d656e74
+     c043c00c 000c0001 0001514f 0002c1cd c00c000c 00010001 514f0010 09736563
+     7572656e 6574036e 6574c046 c00c000c 00010001 514f001d 046d6169 6c157370
+     65636961 6c696e76 65737469 67617469 6f6e73c0 43c00c00 0c000100 01514f00
+     0c096e7a 64657369 676e73c0 43c00c00 0c000100 01514f00 0c026e73 06657472
+     616465c0 43c00c00 0c000100 01514f00 07046d61 696cc122 c00c000c 00010001
+     514f0007 046d6169 6cc1cdc0 0c000c00 01000151 4f000a02 6e730461 736973c1
+     28c00c00 0c000100 01514f00 0e026e73 08626f75 71756574 73c043c0 0c000c00
+     01000151 4f0002c0 6f013002 39390332 30330769 6e2d6164 64720461 72706100
+     00020001 000545c2 0002c037 01300239 39033230 3307696e 2d616464 72046172
+     70610000 02000100 0545c200 11036e73 31077761 696b6174 6f026163 c046c037
+     00010001 0001514a 0004cb63 00fe036e 73310777 61696b61 746f0261 63c04600
+     01000100 02a2c200 048cc880 0d.
+ +0.005794
+ sendto fd=4 addr=172.18.45.6:53
+     312e0100 00010000 00000000 026e7308 73656375 72697479 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.002525
+ sendto fd=4 addr=172.18.45.6:53
+     312f0100 00010000 00000000 05746574 72610263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001084
+ sendto fd=4 addr=172.18.45.6:53
+     31300100 00010000 00000000 046d6169 6c056167 61746502 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001089
+ sendto fd=4 addr=172.18.45.6:53
+     31310100 00010000 00000000 026e7305 61676174 6502636f 026e7a00 00010001.
+ sendto=32
+ +0.001018
+ sendto fd=4 addr=172.18.45.6:53
+     31320100 00010000 00000000 10736563 75726974 79747261 696e696e 6702636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001076
+ sendto fd=4 addr=172.18.45.6:53
+     31330100 00010000 00000000 026e730a 67696674 6261736b 65740263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001062
+ sendto fd=4 addr=172.18.45.6:53
+     31340100 00010000 00000000 026e7308 73656375 72697479 0367656e 026e7a00
+     00010001.
+ sendto=36
+ +0.001055
+ sendto fd=4 addr=172.18.45.6:53
+     31350100 00010000 00000000 07626f75 71756574 02636f02 6e7a0000 010001.
+ sendto=31
+ +0.001003
+ sendto fd=4 addr=172.18.45.6:53
+     31360100 00010000 00000000 0d696e76 65737469 67617469 6f6e0263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001169
+ sendto fd=4 addr=172.18.45.6:53
+     31370100 00010000 00000000 026e7305 6e7a6970 69036f72 67026e7a 00000100
+     01.
+ sendto=33
+ +0.001084
+ sendto fd=4 addr=172.18.45.6:53
+     31380100 00010000 00000000 046d6169 6c046e65 72750263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001052
+ sendto fd=4 addr=172.18.45.6:53
+     31390100 00010000 00000000 08736563 75726974 7902636f 026e7a00 00010001.
+ sendto=32
+ +0.001060
+ sendto fd=4 addr=172.18.45.6:53
+     313a0100 00010000 00000000 026e730a 73746f72 65776174 63680263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001385
+ sendto fd=4 addr=172.18.45.6:53
+     313b0100 00010000 00000000 08736563 75726974 79036765 6e026e7a 00000100
+     01.
+ sendto=33
+ +0.001319
+ sendto fd=4 addr=172.18.45.6:53
+     313c0100 00010000 00000000 026e7305 74657472 6102636f 026e7a00 00010001.
+ sendto=32
+ +0.001428
+ sendto fd=4 addr=172.18.45.6:53
+     313d0100 00010000 00000000 046d6169 6c057465 74726102 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001373
+ sendto fd=4 addr=172.18.45.6:53
+     313e0100 00010000 00000000 026e730a 73656375 72696361 72640263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001407
+ sendto fd=4 addr=172.18.45.6:53
+     313f0100 00010000 00000000 026e7309 756e6465 72686f75 7202636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001454
+ sendto fd=4 addr=172.18.45.6:53
+     31400100 00010000 00000000 03626363 02636f02 6e7a0000 010001.
+ sendto=27
+ +0.001405
+ sendto fd=4 addr=172.18.45.6:53
+     31410100 00010000 00000000 08736563 75726974 79036f72 67026e7a 00000100
+     01.
+ sendto=33
+ +0.001386
+ sendto fd=4 addr=172.18.45.6:53
+     31420100 00010000 00000000 0d627572 676c6172 616c6172 6d730263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001405
+ sendto fd=4 addr=172.18.45.6:53
+     31430100 00010000 00000000 026e7305 73616665 7302636f 026e7a00 00010001.
+ sendto=32
+ +0.001163
+ sendto fd=4 addr=172.18.45.6:53
+     31440100 00010000 00000000 026e7308 73656375 72697479 036f7267 026e7a00
+     00010001.
+ sendto=36
+ +0.001110
+ sendto fd=4 addr=172.18.45.6:53
+     31450100 00010000 00000000 10636f75 70657263 6f6e7375 6c74696e 6702636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001091
+ sendto fd=4 addr=172.18.45.6:53
+     31460100 00010000 00000000 0e736563 75726974 79677561 72647302 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001272
+ sendto fd=4 addr=172.18.45.6:53
+     31470100 00010000 00000000 026e7306 67756172 64730263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001067
+ sendto fd=4 addr=172.18.45.6:53
+     31480100 00010000 00000000 04617369 73036f72 67026e7a 00000100 01.
+ sendto=29
+ +0.001036
+ sendto fd=4 addr=172.18.45.6:53
+     31490100 00010000 00000000 046e6572 7502636f 026e7a00 00010001.
+ sendto=28
+ +0.001025
+ sendto fd=4 addr=172.18.45.6:53
+     314a0100 00010000 00000000 0a676966 74626173 6b657402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001078
+ sendto fd=4 addr=172.18.45.6:53
+     314b0100 00010000 00000000 056d6167 69630263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001042
+ sendto fd=4 addr=172.18.45.6:53
+     314c0100 00010000 00000000 046d6169 6c036263 6302636f 026e7a00 00010001.
+ sendto=32
+ +0.001065
+ sendto fd=4 addr=172.18.45.6:53
+     314d0100 00010000 00000000 026e730d 696e7665 73746967 6174696f 6e02636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001280
+ sendto fd=4 addr=172.18.45.6:53
+     314e0100 00010000 00000000 056e7a69 7069036f 7267026e 7a000001 0001.
+ sendto=30
+ +0.001047
+ sendto fd=4 addr=172.18.45.6:53
+     314f0100 00010000 00000000 026e7307 626f7571 75657402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001278
+ sendto fd=4 addr=172.18.45.6:53
+     31500100 00010000 00000000 046d6169 6c057361 66657302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001384
+ sendto fd=4 addr=172.18.45.6:53
+     31510100 00010000 00000000 026e7303 62636302 636f026e 7a000001 0001.
+ sendto=30
+ +0.001308
+ sendto fd=4 addr=172.18.45.6:53
+     31520100 00010000 00000000 026e730d 62757267 6c617261 6c61726d 7302636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001515
+ sendto fd=4 addr=172.18.45.6:53
+     31530100 00010000 00000000 026e730e 73656375 72697479 67756172 64730263
+     6f026e7a 00000100 01.
+ sendto=41
+ +0.001383
+ sendto fd=4 addr=172.18.45.6:53
+     31540100 00010000 00000000 0d636f76 65727463 616d6572 61730263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001401
+ sendto fd=4 addr=172.18.45.6:53
+     31550100 00010000 00000000 026e7304 6e657275 02636f02 6e7a0000 010001.
+ sendto=31
+ +0.001323
+ sendto fd=4 addr=172.18.45.6:53
+     31560100 00010000 00000000 026e730d 636f7665 72746361 6d657261 7302636f
+     026e7a00 00010001.
+ sendto=40
+ +0.001388
+ sendto fd=4 addr=172.18.45.6:53
+     31570100 00010000 00000000 08626f75 71756574 7302636f 026e7a00 00010001.
+ sendto=32
+ +0.001467
+ sendto fd=4 addr=172.18.45.6:53
+     31580100 00010000 00000000 0a636f6e 63656e74 72696302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001366
+ sendto fd=4 addr=172.18.45.6:53
+     31590100 00010000 00000000 026e7310 73656375 72697479 74726169 6e696e67
+     02636f02 6e7a0000 010001.
+ sendto=43
+ +0.001416
+ sendto fd=4 addr=172.18.45.6:53
+     315a0100 00010000 00000000 046d6169 6c10636f 75706572 636f6e73 756c7469
+     6e670263 6f026e7a 00000100 01.
+ sendto=45
+ +0.001440
+ sendto fd=4 addr=172.18.45.6:53
+     315b0100 00010000 00000000 0e726574 61696c73 65637572 69747902 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001438
+ sendto fd=4 addr=172.18.45.6:53
+     315c0100 00010000 00000000 026e730a 636f6e63 656e7472 69630263 6f026e7a
+     00000100 01.
+ sendto=37
+ +0.001523
+ sendto fd=4 addr=172.18.45.6:53
+     315d0100 00010000 00000000 046d6169 6c056d61 67696302 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001394
+ sendto fd=4 addr=172.18.45.6:53
+     315e0100 00010000 00000000 096e7a61 6e676c69 6e670263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001388
+ sendto fd=4 addr=172.18.45.6:53
+     315f0100 00010000 00000000 026e7310 636f7570 6572636f 6e73756c 74696e67
+     02636f02 6e7a0000 010001.
+ sendto=43
+ +0.001439
+ sendto fd=4 addr=172.18.45.6:53
+     31600100 00010000 00000000 026e7309 6e7a616e 676c696e 6702636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001369
+ sendto fd=4 addr=172.18.45.6:53
+     31610100 00010000 00000000 046d6169 6c0a7374 6f726577 61746368 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001556
+ sendto fd=4 addr=172.18.45.6:53
+     31620100 00010000 00000000 05737769 66740263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001365
+ sendto fd=4 addr=172.18.45.6:53
+     31630100 00010000 00000000 046d6169 6c097365 6c656374 69766502 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001401
+ sendto fd=4 addr=172.18.45.6:53
+     31640100 00010000 00000000 026e7309 666f7265 66726f6e 7402636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001427
+ sendto fd=4 addr=172.18.45.6:53
+     31650100 00010000 00000000 046d6169 6c096e7a 616e676c 696e6702 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001542
+ sendto fd=4 addr=172.18.45.6:53
+     31660100 00010000 00000000 06677561 72647302 636f026e 7a000001 0001.
+ sendto=30
+ +0.001362
+ sendto fd=4 addr=172.18.45.6:53
+     31670100 00010000 00000000 046d6169 6c096e7a 64657369 676e7302 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001390
+ sendto fd=4 addr=172.18.45.6:53
+     31680100 00010000 00000000 0a73746f 72657761 74636802 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001440
+ sendto fd=4 addr=172.18.45.6:53
+     31690100 00010000 00000000 026e7312 73656375 72697479 6d616e61 67656d65
+     6e740263 6f026e7a 00000100 01.
+ sendto=45
+ +0.001484
+ sendto fd=4 addr=172.18.45.6:53
+     316a0100 00010000 00000000 046d6169 6c0a776f 6f6c776f 72746873 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001522
+ sendto fd=4 addr=172.18.45.6:53
+     316b0100 00010000 00000000 046d6169 6c0a636f 6e63656e 74726963 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001418
+ sendto fd=4 addr=172.18.45.6:53
+     316c0100 00010000 00000000 0973656c 65637469 76650263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001842
+ sendto fd=4 addr=172.18.45.6:53
+     316d0100 00010000 00000000 15737065 6369616c 696e7665 73746967 6174696f
+     6e730263 6f026e7a 00000100 01.
+ sendto=45
+ +0.001742
+ sendto fd=4 addr=172.18.45.6:53
+     316e0100 00010000 00000000 026e7305 73776966 7402636f 026e7a00 00010001.
+ sendto=32
+ +0.001516
+ sendto fd=4 addr=172.18.45.6:53
+     316f0100 00010000 00000000 046d6169 6c057377 69667402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001513
+ sendto fd=4 addr=172.18.45.6:53
+     31700100 00010000 00000000 026e7309 73656375 72656e65 74036e65 74026e7a
+     00000100 01.
+ sendto=37
+ +0.001670
+ sendto fd=4 addr=172.18.45.6:53
+     31710100 00010000 00000000 14707269 76617465 696e7665 73746967 6174696f
+     6e02636f 026e7a00 00010001.
+ sendto=44
+ +0.001599
+ sendto fd=4 addr=172.18.45.6:53
+     31720100 00010000 00000000 026e7314 70726976 61746569 6e766573 74696761
+     74696f6e 02636f02 6e7a0000 010001.
+ sendto=47
+ +0.001618
+ sendto fd=4 addr=172.18.45.6:53
+     31730100 00010000 00000000 06657472 61646502 636f026e 7a000001 0001.
+ sendto=30
+ +0.001483
+ sendto fd=4 addr=172.18.45.6:53
+     31740100 00010000 00000000 026e7315 73706563 69616c69 6e766573 74696761
+     74696f6e 7302636f 026e7a00 00010001.
+ sendto=48
+ +0.001612
+ sendto fd=4 addr=172.18.45.6:53
+     31750100 00010000 00000000 046d6169 6c06616e 73657474 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001604
+ sendto fd=4 addr=172.18.45.6:53
+     31760100 00010000 00000000 03667470 07776172 72656e74 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001537
+ sendto fd=4 addr=172.18.45.6:53
+     31770100 00010000 00000000 026e730e 72657461 696c7365 63757269 74790263
+     6f026e7a 00000100 01.
+ sendto=41
+ +0.001577
+ sendto fd=4 addr=172.18.45.6:53
+     31780100 00010000 00000000 046d6169 6c127365 63757269 74796d61 6e616765
+     6d656e74 02636f02 6e7a0000 010001.
+ sendto=47
+ +0.001807
+ sendto fd=4 addr=172.18.45.6:53
+     31790100 00010000 00000000 026e7305 6d616769 6302636f 026e7a00 00010001.
+ sendto=32
+ +0.001481
+ sendto fd=4 addr=172.18.45.6:53
+     317a0100 00010000 00000000 046d6169 6c09666f 72656672 6f6e7402 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001548
+ sendto fd=4 addr=172.18.45.6:53
+     317b0100 00010000 00000000 046d6169 6c0a7365 63757269 63617264 02636f02
+     6e7a0000 010001.
+ sendto=39
+ +0.001498
+ sendto fd=4 addr=172.18.45.6:53
+     317c0100 00010000 00000000 0a736563 75726963 61726402 636f026e 7a000001
+     0001.
+ sendto=34
+ +0.001636
+ sendto fd=4 addr=172.18.45.6:53
+     317d0100 00010000 00000000 026e7309 6e7a6465 7369676e 7302636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001520
+ sendto fd=4 addr=172.18.45.6:53
+     317e0100 00010000 00000000 05736166 65730263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001506
+ sendto fd=4 addr=172.18.45.6:53
+     317f0100 00010000 00000000 026e7309 73656c65 63746976 6502636f 026e7a00
+     00010001.
+ sendto=36
+ +0.001523
+ sendto fd=4 addr=172.18.45.6:53
+     31800100 00010000 00000000 09666f72 6566726f 6e740263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001493
+ sendto fd=4 addr=172.18.45.6:53
+     31810100 00010000 00000000 12736563 75726974 796d616e 6167656d 656e7402
+     636f026e 7a000001 0001.
+ sendto=42
+ +0.001667
+ sendto fd=4 addr=172.18.45.6:53
+     31820100 00010000 00000000 09756e64 6572686f 75720263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001533
+ sendto fd=4 addr=172.18.45.6:53
+     31830100 00010000 00000000 09736563 7572656e 6574036e 6574026e 7a000001
+     0001.
+ sendto=34
+ +0.001495
+ sendto fd=4 addr=172.18.45.6:53
+     31840100 00010000 00000000 046d6169 6c157370 65636961 6c696e76 65737469
+     67617469 6f6e7302 636f026e 7a000001 0001.
+ sendto=50
+ +0.001627
+ sendto fd=4 addr=172.18.45.6:53
+     31850100 00010000 00000000 096e7a64 65736967 6e730263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001653
+ sendto fd=4 addr=172.18.45.6:53
+     31860100 00010000 00000000 026e7306 65747261 64650263 6f026e7a 00000100
+     01.
+ sendto=33
+ +0.001512
+ sendto fd=4 addr=172.18.45.6:53
+     31870100 00010000 00000000 046d6169 6c056e7a 69706903 6f726702 6e7a0000
+     010001.
+ sendto=35
+ +0.001512
+ sendto fd=4 addr=172.18.45.6:53
+     31880100 00010000 00000000 046d6169 6c09756e 64657268 6f757202 636f026e
+     7a000001 0001.
+ sendto=38
+ +0.001541
+ sendto fd=4 addr=172.18.45.6:53
+     31890100 00010000 00000000 026e7304 61736973 036f7267 026e7a00 00010001.
+ sendto=32
+ +0.001581
+ sendto fd=4 addr=172.18.45.6:53
+     318a0100 00010000 00000000 026e7308 626f7571 75657473 02636f02 6e7a0000
+     010001.
+ sendto=35
+ +0.001520
+ sendto fd=4 addr=172.18.45.6:53
+     318b0100 00010000 00000000 05616761 74650263 6f026e7a 00000100 01.
+ sendto=29
+ +0.001525
+ read fd=5 buflen=2433
+ read=EAGAIN
+ +0.000154
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.463947
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000380
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312e8180 00010001 00020002 026e7308 73656375 72697479 02636f02 6e7a0000
+     010001c0 0c000100 01000151 4a0004cb 6300fe08 73656375 72697479 02636f02
+     6e7a0000 02000100 01514a00 02c00cc0 33000200 01000151 4a001103 6e733107
+     7761696b 61746f02 6163c03f c00c0001 00010001 514a0004 cb6300fe c05b0001
+     00010002 a2c20004 8cc8800d.
+ +0.001006
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312f8180 00010001 00020002 05746574 72610263 6f026e7a 00000100 01c00c00
+     01000100 01515100 04cb6300 fec00c00 02000100 01515100 05026e73 c00cc00c
+     00020001 00015151 0013036e 73310777 61696b61 746f0261 63026e7a 00c03900
+     01000100 01407100 04cb6300 fec04a00 01000100 02a2c200 048cc880 0d.
+ +0.001541
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31308180 00010001 00020002 046d6169 6c056167 61746502 636f026e 7a000001
+     0001c00c 00010001 0001514c 0004cb63 00fe0561 67617465 02636f02 6e7a0000
+     02000100 01514c00 05026e73 c032c032 00020001 0001514c 0011036e 73310777
+     61696b61 746f0261 63c03bc0 49000100 01000140 6c0004cb 6300fec0 5a000100
+     010002a2 c200048c c8800d.
+ +0.001291
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31318180 00010001 00020002 026e7305 61676174 6502636f 026e7a00 00010001
+     c00c0001 00010001 30660004 cb6300fe 05616761 74650263 6f026e7a 00000200
+     01000151 4c0002c0 0cc03000 02000100 01514c00 11036e73 31077761 696b6174
+     6f026163 c039c00c 00010001 00013066 0004cb63 00fec055 00010001 0002a2c2
+     00048cc8 800d.
+ +0.001292
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31328180 00010001 00020002 10736563 75726974 79747261 696e696e 6702636f
+     026e7a00 00010001 c00c0001 00010001 514c0004 cb6300fe c00c0002 00010001
+     514c0005 026e73c0 0cc00c00 02000100 01514c00 13036e73 31077761 696b6174
+     6f026163 026e7a00 c0440001 00010001 406c0004 cb6300fe c0550001 00010002
+     a2c20004 8cc8800d.
+ +0.001315
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31338180 00010001 00020002 026e730a 67696674 6261736b 65740263 6f026e7a
+     00000100 01c00c00 01000100 01514f00 04cb6300 fe0a6769 66746261 736b6574
+     02636f02 6e7a0000 02000100 01514f00 02c00cc0 35000200 01000151 4f001103
+     6e733107 7761696b 61746f02 6163c043 c00c0001 00010001 514f0004 cb6300fe
+     c05f0001 00010002 a2c20004 8cc8800d.
+ +0.001316
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31348180 00010001 00020002 026e7308 73656375 72697479 0367656e 026e7a00
+     00010001 c00c0001 00010001 514c0004 cb6300fe 08736563 75726974 79036765
+     6e026e7a 00000200 01000151 4c0002c0 0cc03400 02000100 01514c00 11036e73
+     31077761 696b6174 6f026163 c041c00c 00010001 0001514c 0004cb63 00fec05d
+     00010001 0002a2c2 00048cc8 800d.
+ +0.001354
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31358180 00010001 00020002 07626f75 71756574 02636f02 6e7a0000 010001c0
+     0c000100 01000151 4c0004cb 6300fec0 0c000200 01000151 4c000502 6e73c00c
+     c00c0002 00010001 514c0013 036e7331 07776169 6b61746f 02616302 6e7a00c0
+     3b000100 01000140 6c0004cb 6300fec0 4c000100 010002a2 c200048c c8800d.
+ +0.001244
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31368180 00010001 00020002 0d696e76 65737469 67617469 6f6e0263 6f026e7a
+     00000100 01c00c00 01000100 01515100 04cb6300 fec00c00 02000100 01515100
+     05026e73 c00cc00c 00020001 00015151 0013036e 73310777 61696b61 746f0261
+     63026e7a 00c04100 01000100 01407100 04cb6300 fec05200 01000100 02a2c200
+     048cc880 0d.
+ +0.001200
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31378180 00010001 00020002 026e7305 6e7a6970 69036f72 67026e7a 00000100
+     01c00c00 01000100 01515100 04cb6300 fe056e7a 69706903 6f726702 6e7a0000
+     02000100 01515100 02c00cc0 31000200 01000151 51001103 6e733107 7761696b
+     61746f02 6163c03b c00c0001 00010001 51510004 cb6300fe c0570001 00010002
+     a2c20004 8cc8800d.
+ +0.001223
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31388180 00010001 00020002 046d6169 6c046e65 72750263 6f026e7a 00000100
+     01c00c00 01000100 01514c00 04cb6300 fe046e65 72750263 6f026e7a 00000200
+     01000151 51000502 6e73c031 c0310002 00010001 51510011 036e7331 07776169
+     6b61746f 026163c0 39c04700 01000100 01407100 04cb6300 fec05800 01000100
+     02a2c200 048cc880 0d.
+ +0.001353
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31398180 00010001 00020002 08736563 75726974 7902636f 026e7a00 00010001
+     c00c0001 00010001 514a0004 cb6300fe c00c0002 00010001 514a0005 026e73c0
+     0cc00c00 02000100 01514a00 13036e73 31077761 696b6174 6f026163 026e7a00
+     c03c0001 00010001 514a0004 cb6300fe c04d0001 00010002 a2c20004 8cc8800d.
+ +0.001193
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313a8583 00010000 00010000 026e730a 73746f72 65776174 63680263 6f026e7a
+     00000100 0102636f 026e7a00 00060001 00000222 002c046e 73393907 7761696b
+     61746f02 6163c028 03736f61 c03b7727 6ec50000 0e100000 07080027 8d000001
+     5180.
+ +0.001027
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313b8180 00010001 00020002 08736563 75726974 79036765 6e026e7a 00000100
+     01c00c00 01000100 01514c00 04cb6300 fec00c00 02000100 01514c00 05026e73
+     c00cc00c 00020001 0001514c 0013036e 73310777 61696b61 746f0261 63026e7a
+     00c03d00 01000100 01514c00 04cb6300 fec04e00 01000100 02a2c200 048cc880
+     0d.
+ +0.026055
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313c8180 00010001 00020002 026e7305 74657472 6102636f 026e7a00 00010001
+     c00c0001 00010001 306b0004 cb6300fe 05746574 72610263 6f026e7a 00000200
+     01000151 510002c0 0cc03000 02000100 01515100 11036e73 31077761 696b6174
+     6f026163 c039c00c 00010001 0001306b 0004cb63 00fec055 00010001 0002a2c2
+     00048cc8 800d.
+ +0.001134
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313d8180 00010001 00020002 046d6169 6c057465 74726102 636f026e 7a000001
+     0001c00c 00010001 00015151 0004cb63 00fe0574 65747261 02636f02 6e7a0000
+     02000100 01515100 05026e73 c032c032 00020001 00015151 0011036e 73310777
+     61696b61 746f0261 63c03bc0 49000100 01000130 6b0004cb 6300fec0 5a000100
+     010002a2 c200048c c8800d.
+ +0.001247
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313e8180 00010001 00020002 026e730a 73656375 72696361 72640263 6f026e7a
+     00000100 01c00c00 01000100 01515200 04cb6300 fe0a7365 63757269 63617264
+     02636f02 6e7a0000 02000100 01515200 02c00cc0 35000200 01000151 52001103
+     6e733107 7761696b 61746f02 6163c043 c00c0001 00010001 51520004 cb6300fe
+     c05f0001 00010002 a2c20004 8cc8800d.
+ +0.001158
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313f8180 00010001 00020002 026e7309 756e6465 72686f75 7202636f 026e7a00
+     00010001 c00c0001 00010001 51510004 cb6300fe 09756e64 6572686f 75720263
+     6f026e7a 00000200 01000151 510002c0 0cc03400 02000100 01515100 11036e73
+     31077761 696b6174 6f026163 c041c00c 00010001 00015151 0004cb63 00fec05d
+     00010001 0002a2c2 00048cc8 800d.
+ +0.001137
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31408180 00010001 00020002 03626363 02636f02 6e7a0000 010001c0 0c000100
+     01000151 4c0004cb 6300fec0 0c000200 01000151 4f000502 6e73c00c c00c0002
+     00010001 514f0013 036e7331 07776169 6b61746f 02616302 6e7a00c0 37000100
+     01000140 6f0004cb 6300fec0 48000100 010002a2 c200048c c8800d.
+ +0.001061
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31418180 00010001 00020002 08736563 75726974 79036f72 67026e7a 00000100
+     01c00c00 01000100 01514c00 04cb6300 fec00c00 02000100 01514c00 05026e73
+     c00cc00c 00020001 0001514c 0013036e 73310777 61696b61 746f0261 63026e7a
+     00c03d00 01000100 01406c00 04cb6300 fec04e00 01000100 02a2c200 048cc880
+     0d.
+ +0.001163
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31428180 00010001 00020002 0d627572 676c6172 616c6172 6d730263 6f026e7a
+     00000100 01c00c00 01000100 01514c00 04cb6300 fec00c00 02000100 01514c00
+     05026e73 c00cc00c 00020001 0001514c 0013036e 73310777 61696b61 746f0261
+     63026e7a 00c04100 01000100 01406c00 04cb6300 fec05200 01000100 02a2c200
+     048cc880 0d.
+ +0.001131
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31438583 00010000 00010000 026e7305 73616665 7302636f 026e7a00 00010001
+     05736166 65730263 6f026e7a 00000600 01000002 27002e03 6e733104 69687567
+     036e6574 c0290373 6f610469 687567c0 26772768 a9000151 8000002a 30001275
+     000002a3 00.
+ +0.000894
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31448180 00010001 00020002 026e7308 73656375 72697479 036f7267 026e7a00
+     00010001 c00c0001 00010001 30660004 cb6300fe 08736563 75726974 79036f72
+     67026e7a 00000200 01000151 4c0002c0 0cc03400 02000100 01514c00 11036e73
+     31077761 696b6174 6f026163 c041c00c 00010001 00013066 0004cb63 00fec05d
+     00010001 0002a2c2 00048cc8 800d.
+ +0.001127
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31458180 00010001 00020002 10636f75 70657263 6f6e7375 6c74696e 6702636f
+     026e7a00 00010001 c00c0001 00010001 514f0004 cb6300fe c00c0002 00010001
+     51520005 026e73c0 0cc00c00 02000100 01515200 13036e73 31077761 696b6174
+     6f026163 026e7a00 c0440001 00010001 40720004 cb6300fe c0550001 00010002
+     a2c20004 8cc8800d.
+ +0.001215
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31468180 00010001 00020002 0e736563 75726974 79677561 72647302 636f026e
+     7a000001 0001c00c 00010001 0001514f 0004cb63 00fec00c 00020001 0001514f
+     0005026e 73c00cc0 0c000200 01000151 4f001303 6e733107 7761696b 61746f02
+     6163026e 7a00c042 00010001 0001406f 0004cb63 00fec053 00010001 0002a2c2
+     00048cc8 800d.
+ +0.001099
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31478180 00010001 00020002 026e7306 67756172 64730263 6f026e7a 00000100
+     01c00c00 01000100 01514f00 04cb6300 fe066775 61726473 02636f02 6e7a0000
+     02000100 01514f00 02c00cc0 31000200 01000151 4f001103 6e733107 7761696b
+     61746f02 6163c03b c00c0001 00010001 514f0004 cb6300fe c0570001 00010002
+     a2c20004 8cc8800d.
+ +0.001123
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31488180 00010001 00020002 04617369 73036f72 67026e7a 00000100 01c00c00
+     01000100 01514f00 04cb6300 fec00c00 02000100 01514f00 05026e73 c00cc00c
+     00020001 0001514f 0013036e 73310777 61696b61 746f0261 63026e7a 00c03900
+     01000100 01406f00 04cb6300 fec04a00 01000100 02a2c200 048cc880 0d.
+ +0.001033
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31498180 00010001 00020002 046e6572 7502636f 026e7a00 00010001 c00c0001
+     00010001 514f0004 cb6300fe c00c0002 00010001 51510005 026e73c0 0cc00c00
+     02000100 01515100 13036e73 31077761 696b6174 6f026163 026e7a00 c0380001
+     00010001 40710004 cb6300fe c0490001 00010002 a2c20004 8cc8800d.
+ +0.001109
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     314a8180 00010001 00020002 0a676966 74626173 6b657402 636f026e 7a000001
+     0001c00c 00010001 0001514f 0004cb63 00fec00c 00020001 0001514f 0005026e
+     73c00cc0 0c000200 01000151 4f001303 6e733107 7761696b 61746f02 6163026e
+     7a00c03e 00010001 0001514f 0004cb63 00fec04f 00010001 0002a2c2 00048cc8
+     800d.
+ +0.001126
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     314b8180 00010001 00020002 056d6167 69630263 6f026e7a 00000100 01c00c00
+     01000100 01514f00 04cb6300 fec00c00 02000100 01515100 05026e73 c00cc00c
+     00020001 00015151 0013036e 73310777 61696b61 746f0261 63026e7a 00c03900
+     01000100 01407100 04cb6300 fec04a00 01000100 02a2c200 048cc880 0d.
+ +0.001034
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     314c8180 00010001 00020002 046d6169 6c036263 6302636f 026e7a00 00010001
+     c00c0001 00010001 514f0004 cb6300fe 03626363 02636f02 6e7a0000 02000100
+     01514f00 05026e73 c030c030 00020001 0001514f 0011036e 73310777 61696b61
+     746f0261 63c037c0 45000100 01000140 6f0004cb 6300fec0 56000100 010002a2
+     c200048c c8800d.
+ +0.001118
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     314d8180 00010001 00020002 026e730d 696e7665 73746967 6174696f 6e02636f
+     026e7a00 00010001 c00c0001 00010001 306b0004 cb6300fe 0d696e76 65737469
+     67617469 6f6e0263 6f026e7a 00000200 01000151 510002c0 0cc03800 02000100
+     01515100 11036e73 31077761 696b6174 6f026163 c049c00c 00010001 0001306b
+     0004cb63 00fec065 00010001 0002a2c2 00048cc8 800d.
+ +0.001270
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     314e8180 00010001 00020002 056e7a69 7069036f 7267026e 7a000001 0001c00c
+     00010001 0001514f 0004cb63 00fec00c 00020001 00015151 0005026e 73c00cc0
+     0c000200 01000151 51001303 6e733107 7761696b 61746f02 6163026e 7a00c03a
+     00010001 00015151 0004cb63 00fec04b 00010001 0002a2c2 00048cc8 800d.
+ +0.001059
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     314f8180 00010001 00020002 026e7307 626f7571 75657402 636f026e 7a000001
+     0001c00c 00010001 00013066 0004cb63 00fe0762 6f757175 65740263 6f026e7a
+     00000200 01000151 4c0002c0 0cc03200 02000100 01514c00 11036e73 31077761
+     696b6174 6f026163 c03dc00c 00010001 00013066 0004cb63 00fec059 00010001
+     0002a2c2 00048cc8 800d.
+ +0.001142
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000280
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.398497
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000524
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31508583 00010000 00010000 046d6169 6c057361 66657302 636f026e 7a000001
+     00010573 61666573 02636f02 6e7a0000 06000100 00022700 2e036e73 31046968
+     7567036e 6574c02b 03736f61 04696875 67c02877 2768a900 01518000 002a3000
+     12750000 02a300.
+ +0.000719
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000326
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.396928
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002842
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31518180 00010001 00020002 026e7303 62636302 636f026e 7a000001 0001c00c
+     00010001 00013069 0004cb63 00fe0362 63630263 6f026e7a 00000200 01000151
+     4f0002c0 0cc02e00 02000100 01514f00 11036e73 31077761 696b6174 6f026163
+     c035c00c 00010001 00013069 0004cb63 00fec051 00010001 0002a2c2 00048cc8
+     800d.
+ +0.000884
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000295
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.392907
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003411
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31528180 00010001 00020002 026e730d 62757267 6c617261 6c61726d 7302636f
+     026e7a00 00010001 c00c0001 00010001 30660004 cb6300fe 0d627572 676c6172
+     616c6172 6d730263 6f026e7a 00000200 01000151 4c0002c0 0cc03800 02000100
+     01514c00 11036e73 31077761 696b6174 6f026163 c049c00c 00010001 00013066
+     0004cb63 00fec065 00010001 0002a2c2 00048cc8 800d.
+ +0.000997
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000330
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.388169
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003160
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31538180 00010001 00020002 026e730e 73656375 72697479 67756172 64730263
+     6f026e7a 00000100 01c00c00 01000100 01306900 04cb6300 fe0e7365 63757269
+     74796775 61726473 02636f02 6e7a0000 02000100 01514f00 02c00cc0 39000200
+     01000151 4f001103 6e733107 7761696b 61746f02 6163c04b c00c0001 00010001
+     30690004 cb6300fe c0670001 00010002 a2c20004 8cc8800d.
+ +0.001023
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000298
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.383688
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003221
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31548180 00010001 00020002 0d636f76 65727463 616d6572 61730263 6f026e7a
+     00000100 01c00c00 01000100 01515200 04cb6300 fec00c00 02000100 01515200
+     05026e73 c00cc00c 00020001 00015152 0013036e 73310777 61696b61 746f0261
+     63026e7a 00c04100 01000100 01515200 04cb6300 fec05200 01000100 02a2c200
+     048cc880 0d.
+ +0.000929
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000291
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.379247
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002946
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31558180 00010001 00020002 026e7304 6e657275 02636f02 6e7a0000 010001c0
+     0c000100 01000130 6b0004cb 6300fe04 6e657275 02636f02 6e7a0000 02000100
+     01515100 02c00cc0 2f000200 01000151 51001103 6e733107 7761696b 61746f02
+     6163c037 c00c0001 00010001 306b0004 cb6300fe c0530001 00010002 a2c20004
+     8cc8800d.
+ +0.000895
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000294
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.375112
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003284
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31568180 00010001 00020002 026e730d 636f7665 72746361 6d657261 7302636f
+     026e7a00 00010001 c00c0001 00010001 51520004 cb6300fe 0d636f76 65727463
+     616d6572 61730263 6f026e7a 00000200 01000151 520002c0 0cc03800 02000100
+     01515200 11036e73 31077761 696b6174 6f026163 c049c00c 00010001 00015152
+     0004cb63 00fec065 00010001 0002a2c2 00048cc8 800d.
+ +0.001002
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000295
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.370531
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003077
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31578180 00010001 00020002 08626f75 71756574 7302636f 026e7a00 00010001
+     c00c0001 00010001 51530004 cb6300fe c00c0002 00010001 51530013 036e7331
+     07776169 6b61746f 02616302 6e7a00c0 0c000200 01000151 53000502 6e73c00c
+     c03c0001 00010002 a2c20004 8cc8800d c05b0001 00010001 51530004 cb6300fe.
+ +0.000868
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000322
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.366264
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003188
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31588180 00010001 00020002 0a636f6e 63656e74 72696302 636f026e 7a000001
+     0001c00c 00010001 0001514f 0004cb63 00fec00c 00020001 00015152 0005026e
+     73c00cc0 0c000200 01000151 52001303 6e733107 7761696b 61746f02 6163026e
+     7a00c03e 00010001 00014072 0004cb63 00fec04f 00010001 0002a2c2 00048cc8
+     800d.
+ +0.000883
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000292
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.361901
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003497
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31598180 00010001 00020002 026e7310 73656375 72697479 74726169 6e696e67
+     02636f02 6e7a0000 010001c0 0c000100 01000130 660004cb 6300fe10 73656375
+     72697479 74726169 6e696e67 02636f02 6e7a0000 02000100 01514c00 02c00cc0
+     3b000200 01000151 4c001103 6e733107 7761696b 61746f02 6163c04f c00c0001
+     00010001 30660004 cb6300fe c06b0001 00010002 a2c20004 8cc8800d.
+ +0.001031
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000343
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.357030
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003250
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     315a8180 00010001 00020002 046d6169 6c10636f 75706572 636f6e73 756c7469
+     6e670263 6f026e7a 00000100 01c00c00 01000100 01515200 04cb6300 fe10636f
+     75706572 636f6e73 756c7469 6e670263 6f026e7a 00000200 01000151 52000502
+     6e73c03d c03d0002 00010001 51520011 036e7331 07776169 6b61746f 026163c0
+     51c05f00 01000100 01407200 04cb6300 fec07000 01000100 02a2c200 048cc880
+     0d.
+ +0.001063
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000296
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.352421
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003258
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     315b8180 00010001 00020002 0e726574 61696c73 65637572 69747902 636f026e
+     7a000001 0001c00c 00010001 0001514f 0004cb63 00fec00c 00020001 00015151
+     0005026e 73c00cc0 0c000200 01000151 51001303 6e733107 7761696b 61746f02
+     6163026e 7a00c042 00010001 00014071 0004cb63 00fec053 00010001 0002a2c2
+     00048cc8 800d.
+ +0.000908
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000289
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.347966
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003170
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     315c8180 00010001 00020002 026e730a 636f6e63 656e7472 69630263 6f026e7a
+     00000100 01c00c00 01000100 01306c00 04cb6300 fe0a636f 6e63656e 74726963
+     02636f02 6e7a0000 02000100 01515200 02c00cc0 35000200 01000151 52001103
+     6e733107 7761696b 61746f02 6163c043 c00c0001 00010001 306c0004 cb6300fe
+     c05f0001 00010002 a2c20004 8cc8800d.
+ +0.000963
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000324
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.343509
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003025
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     315d8180 00010001 00020002 046d6169 6c056d61 67696302 636f026e 7a000001
+     0001c00c 00010001 0001514f 0004cb63 00fe056d 61676963 02636f02 6e7a0000
+     02000100 01515100 05026e73 c032c032 00020001 00015151 0011036e 73310777
+     61696b61 746f0261 63c03bc0 49000100 01000140 710004cb 6300fec0 5a000100
+     010002a2 c200048c c8800d.
+ +0.000934
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000292
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.339258
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003113
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     315e8180 00010001 00020002 096e7a61 6e676c69 6e670263 6f026e7a 00000100
+     01c00c00 01000100 01514f00 04cb6300 fec00c00 02000100 01514f00 05026e73
+     c00cc00c 00020001 0001514f 0013036e 73310777 61696b61 746f0261 63026e7a
+     00c03d00 01000100 01514f00 04cb6300 fec04e00 01000100 02a2c200 048cc880
+     0d.
+ +0.000877
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000320
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.334948
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004222
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     315f8180 00010001 00020002 026e7310 636f7570 6572636f 6e73756c 74696e67
+     02636f02 6e7a0000 010001c0 0c000100 01000130 6c0004cb 6300fe10 636f7570
+     6572636f 6e73756c 74696e67 02636f02 6e7a0000 02000100 01515200 02c00cc0
+     3b000200 01000151 52001103 6e733107 7761696b 61746f02 6163c04f c00c0001
+     00010001 306c0004 cb6300fe c06b0001 00010002 a2c20004 8cc8800d.
+ +0.001034
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000296
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.329396
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.008279
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010000 00010000 03323534 01300239 39033230 3307696e 2d616464
+     72046172 70610000 05000101 30023939 03323033 07696e2d 61646472 04617270
+     61000006 00010001 5180002e 026e7308 73656375 72697479 02636f02 6e7a0004
+     726f6f74 c04c7727 714c0000 2a300000 0e100009 3a800001 5180.
+ +0.000837
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000405
+ close fd=4
+ close=OK
+ +0.000415
+ close fd=5
+ close=OK
+ +0.000167
diff --git a/regress/case-ndots-as.err b/regress/case-ndots-as.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-ndots-as.out b/regress/case-ndots-as.out
new file mode 100644 (file)
index 0000000..9c4bb87
--- /dev/null
@@ -0,0 +1,16 @@
+adns debug: using nameserver 172.18.45.6
+newsx.davenant flags 5 type 1 A(-) submitted
+news.davenant flags 5 type 1 A(-) submitted
+news.davenant.greenend.org.uk flags 5 type 1 A(-) submitted
+trunc.test.iwj.relativity flags 5 type 1 A(-) submitted
+trunx.test.iwj.relativity flags 5 type 1 A(-) submitted
+test.iwj.relativity flags 5 type 1 A(-) submitted
+news.davenant.greenend.org.uk flags 5 type A(-): OK; nrrs=1; cname=davenant.relativity.greenend.org.uk; owner=news.davenant.greenend.org.uk; ttl=86400
+ 172.18.45.6
+newsx.davenant flags 5 type A(-): No such domain; nrrs=0; cname=$; owner=newsx.davenant.greenend.org.uk; ttl=86400
+news.davenant flags 5 type A(-): OK; nrrs=1; cname=davenant.relativity.greenend.org.uk; owner=news.davenant.greenend.org.uk; ttl=86400
+ 172.18.45.6
+trunc.test.iwj.relativity flags 5 type A(-): No such data; nrrs=0; cname=$; owner=trunc.test.iwj.relativity.greenend.org.uk; ttl=60
+trunx.test.iwj.relativity flags 5 type A(-): No such domain; nrrs=0; cname=$; owner=trunx.test.iwj.relativity.greenend.org.uk; ttl=60
+test.iwj.relativity flags 5 type A(-): No such data; nrrs=0; cname=$; owner=test.iwj.relativity.greenend.org.uk; ttl=60
+rc=0
diff --git a/regress/case-ndots-as.sys b/regress/case-ndots-as.sys
new file mode 100644 (file)
index 0000000..f4e7153
--- /dev/null
@@ -0,0 +1,316 @@
+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
+ start 931992163.221752
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000186
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000086
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000066
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 056e6577 73780864 6176656e 616e7400 00010001.
+ sendto=32
+ +0.000567
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 046e6577 73086461 76656e61 6e740000 010001.
+ sendto=31
+ +0.000453
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 046e6577 73086461 76656e61 6e740867 7265656e
+     656e6403 6f726702 756b0000 010001.
+ sendto=47
+ +0.000507
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790000 010001.
+ sendto=43
+ +0.000479
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 05747275 6e780474 65737403 69776a0a 72656c61
+     74697669 74790000 010001.
+ sendto=43
+ +0.000624
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 04746573 74036977 6a0a7265 6c617469 76697479
+     00000100 01.
+ sendto=37
+ +0.000457
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.996913
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.022284
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010002 00030003 046e6577 73086461 76656e61 6e740867 7265656e
+     656e6403 6f726702 756b0000 010001c0 0c000500 01000151 80002508 64617665
+     6e616e74 0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00
+     c03b0001 00010001 51800004 ac122d06 c0440002 00010001 51800006 036e7330
+     c044c044 00020001 00015180 0006036e 7331c044 c0440002 00010001 51800006
+     036e7332 c044c07c 00010001 00015180 0004ac12 2d06c08e 00010001 00015180
+     0004ac12 2d41c0a0 00010001 00015180 0004ac12 2d01.
+ +0.001420
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000291
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.972918
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.387236
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8583 00010000 00010000 056e6577 73780864 6176656e 616e7400 00010001
+     00000600 01000151 80003e01 410c524f 4f542d53 45525645 5253034e 4554000a
+     686f7374 6d617374 65720849 4e544552 4e4943c0 3a772768 44000007 08000003
+     8400093a 80000151 80.
+ +0.000745
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 056e6577 73780864 6176656e 616e7408 64617665
+     6e616e74 08677265 656e656e 64036f72 6702756b 00000100 01.
+ sendto=57
+ +0.000559
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000102
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.584843
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005460
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258583 00010000 00010000 056e6577 73780864 6176656e 616e7408 64617665
+     6e616e74 08677265 656e656e 64036f72 6702756b 00000100 01086772 65656e65
+     6e64036f 72670275 6b000006 00010001 5180002d 026e7306 63686961 726bc039
+     0a686f73 746d6173 746572c0 39772741 34000070 8000001c 2000093a 80000151
+     80.
+ +0.000861
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 056e6577 73780864 6176656e 616e7408 67726565
+     6e656e64 036f7267 02756b00 00010001.
+ sendto=48
+ +0.000511
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000100
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.577911
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003716
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268583 00010000 00010000 056e6577 73780864 6176656e 616e7408 67726565
+     6e656e64 036f7267 02756b00 00010001 08677265 656e656e 64036f72 6702756b
+     00000600 01000151 80002d02 6e730663 68696172 6bc0300a 686f7374 6d617374
+     6572c030 77274134 00007080 00001c20 00093a80 00015180.
+ +0.000808
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000127
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.573260
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.075508
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208583 00010000 00010000 046e6577 73086461 76656e61 6e740000 01000100
+     00060001 00015180 003e0141 0c524f4f 542d5345 52564552 53034e45 54000a68
+     6f73746d 61737465 7208494e 5445524e 4943c039 77276844 00000708 00000384
+     00093a80 00015180.
+ +0.000755
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 046e6577 73086461 76656e61 6e740864 6176656e
+     616e7408 67726565 6e656e64 036f7267 02756b00 00010001.
+ sendto=56
+ +0.000532
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000101
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.497324
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005326
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278583 00010000 00010000 046e6577 73086461 76656e61 6e740864 6176656e
+     616e7408 67726565 6e656e64 036f7267 02756b00 00010001 08677265 656e656e
+     64036f72 6702756b 00000600 01000151 80002d02 6e730663 68696172 6bc0380a
+     686f7374 6d617374 6572c038 77274134 00007080 00001c20 00093a80 00015180.
+ +0.000855
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 046e6577 73086461 76656e61 6e740867 7265656e
+     656e6403 6f726702 756b0000 010001.
+ sendto=47
+ +0.000503
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000100
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.490540
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.007220
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288580 00010002 00030003 046e6577 73086461 76656e61 6e740867 7265656e
+     656e6403 6f726702 756b0000 010001c0 0c000500 01000151 80002508 64617665
+     6e616e74 0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00
+     c03b0001 00010001 51800004 ac122d06 c0440002 00010001 51800006 036e7330
+     c044c044 00020001 00015180 0006036e 7331c044 c0440002 00010001 51800006
+     036e7332 c044c07c 00010001 00015180 0004ac12 2d06c08e 00010001 00015180
+     0004ac12 2d41c0a0 00010001 00015180 0004ac12 2d01.
+ +0.001356
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000223
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.481741
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.023419
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228583 00010000 00010000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790000 01000100 00060001 00015180 003e0141 0c524f4f 542d5345
+     52564552 53034e45 54000a68 6f73746d 61737465 7208494e 5445524e 4943c045
+     77276844 00000708 00000384 00093a80 00015180.
+ +0.000802
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790864 6176656e 616e7408 67726565 6e656e64 036f7267 02756b00
+     00010001.
+ sendto=68
+ +0.000607
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000101
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.457291
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005416
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298583 00010000 00010000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790864 6176656e 616e7408 67726565 6e656e64 036f7267 02756b00
+     00010001 08677265 656e656e 64036f72 6702756b 00000600 01000151 80002d02
+     6e730663 68696172 6bc0440a 686f7374 6d617374 6572c044 77274134 00007080
+     00001c20 00093a80 00015180.
+ +0.000925
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=59
+ +0.000575
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000101
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.450274
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.006009
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8580 00010000 00010000 05747275 6e630474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 01000104 74657374
+     0369776a 0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00
+     00060001 0000003c 0027036e 7330c044 0a686f73 746d6173 746572c0 44000000
+     1800000e 10000000 780064c8 00000000 3c.
+ +0.000954
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000145
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.443166
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.014229
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238583 00010000 00010000 05747275 6e780474 65737403 69776a0a 72656c61
+     74697669 74790000 01000100 00060001 00015180 003e0141 0c524f4f 542d5345
+     52564552 53034e45 54000a68 6f73746d 61737465 7208494e 5445524e 4943c045
+     77276844 00000708 00000384 00093a80 00015180.
+ +0.000805
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 05747275 6e780474 65737403 69776a0a 72656c61
+     74697669 74790864 6176656e 616e7408 67726565 6e656e64 036f7267 02756b00
+     00010001.
+ sendto=68
+ +0.000606
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000101
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.428049
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005331
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8583 00010000 00010000 05747275 6e780474 65737403 69776a0a 72656c61
+     74697669 74790864 6176656e 616e7408 67726565 6e656e64 036f7267 02756b00
+     00010001 08677265 656e656e 64036f72 6702756b 00000600 01000151 80002d02
+     6e730663 68696172 6bc0440a 686f7374 6d617374 6572c044 77274134 00007080
+     00001c20 00093a80 00015180.
+ +0.000923
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 05747275 6e780474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=59
+ +0.000584
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000101
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.421110
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004042
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8583 00010000 00010000 05747275 6e780474 65737403 69776a0a 72656c61
+     74697669 74790867 7265656e 656e6403 6f726702 756b0000 01000104 74657374
+     0369776a 0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00
+     00060001 0000003c 0027036e 7330c044 0a686f73 746d6173 746572c0 44000000
+     1800000e 10000000 780064c8 00000000 3c.
+ +0.000951
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000153
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.415964
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.026227
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248583 00010000 00010000 04746573 74036977 6a0a7265 6c617469 76697479
+     00000100 01000006 00010001 5180003e 01410c52 4f4f542d 53455256 45525303
+     4e455400 0a686f73 746d6173 74657208 494e5445 524e4943 c03f7727 68440000
+     07080000 03840009 3a800001 5180.
+ +0.000817
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 04746573 74036977 6a0a7265 6c617469 76697479
+     08646176 656e616e 74086772 65656e65 6e64036f 72670275 6b000001 0001.
+ sendto=62
+ +0.000579
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000102
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998502
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005185
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8583 00010000 00010000 04746573 74036977 6a0a7265 6c617469 76697479
+     08646176 656e616e 74086772 65656e65 6e64036f 72670275 6b000001 00010867
+     7265656e 656e6403 6f726702 756b0000 06000100 01518000 2d026e73 06636869
+     61726bc0 3e0a686f 73746d61 73746572 c03e7727 41340000 70800000 1c200009
+     3a800001 5180.
+ +0.000918
+ sendto fd=4 addr=172.18.45.6:53
+     312e0100 00010000 00000000 04746573 74036977 6a0a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01.
+ sendto=53
+ +0.000524
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000102
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.998456
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004007
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312e8580 00010000 00010000 04746573 74036977 6a0a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01c00c00 06000100 00003c00
+     41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     000a686f 73746d61 73746572 c0450000 00180000 0e100000 00780064 c8000000
+     003c.
+ +0.000867
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000175
+ close fd=4
+ close=OK
+ +0.000183
index 83770bacd3a69368695732af03025ea463908b94..24717239dcf7983ffec69ba1feb9b57d695ab1cb 100644 (file)
@@ -1,14 +1,14 @@
-ndots
+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
  start 924365863.351594
  socket type=SOCK_DGRAM
  socket=4
  +0.000212
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
+ fcntl=~O_NONBLOCK&...
  +0.000087
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
  +0.000069
  sendto fd=4 addr=172.18.45.6:53
      311f0100 00010000 00000000 056e6577 73780864 6176656e 616e7408 64617665
index 9050db49dc6180c4cbc42906681ec58bbac2d06a..700201a72b9479ebae207cc8585f6070add02cab 100644 (file)
@@ -1 +1 @@
-adns failure: init: code 22
+adns failure: init: errno=22
index 56d5877237268c044c6546bdc568c39757522c06..eaf457d3979e5ab1a643e22b21957a68aa570a13 100644 (file)
@@ -1,2 +1,2 @@
-ndotsbad
+adnstest ndotsbad
 :1 5/news.davenant.greenend.org.uk
diff --git a/regress/case-noinfto.err b/regress/case-noinfto.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-noinfto.out b/regress/case-noinfto.out
new file mode 100644 (file)
index 0000000..8f0d3df
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.36
+a.b.c.d flags 0 type 1 A(-) submitted
+a.b.c.d flags 0 type A(-): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604744
+rc=0
diff --git a/regress/case-noinfto.sys b/regress/case-noinfto.sys
new file mode 100644 (file)
index 0000000..ceeb290
--- /dev/null
@@ -0,0 +1,123 @@
+adnstest noserver -,p
+:1 a.b.c.d
+ start 940011574.766962
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000158
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000053
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000039
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.001065
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=1999
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.010188
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000218
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009786
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000282
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009708
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000217
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009800
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000272
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009786
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000216
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009723
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000273
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=EINTR
+ +18.-37194
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=0
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +10.-89436
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000256
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.006138
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000218
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009731
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000261
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009735
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000212
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009790
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000254
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009747
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000228
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009771
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000256
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009755
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 01610162 01630164 00000100 01.
+ sendto=25
+ +0.000226
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009768
+ close fd=4
+ close=OK
+ +0.000363
diff --git a/regress/case-norecurse.err b/regress/case-norecurse.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-norecurse.out b/regress/case-norecurse.out
new file mode 100644 (file)
index 0000000..8691f47
--- /dev/null
@@ -0,0 +1,59 @@
+adns debug: using nameserver 172.18.45.6
+4.204.50.158.in-addr.arpa flags 0 type 1 A(-) submitted
+4.204.50.158.in-addr.arpa flags 0 type 2 NS(raw) submitted
+4.204.50.158.in-addr.arpa flags 0 type 5 CNAME(-) submitted
+4.204.50.158.in-addr.arpa flags 0 type 6 SOA(raw) submitted
+4.204.50.158.in-addr.arpa flags 0 type 12 PTR(raw) submitted
+4.204.50.158.in-addr.arpa flags 0 type 13adns debug: TCP connected (NS=172.18.45.6)
+ HINFO(-) submitted
+4.204.50.158.in-addr.arpa flags 0 type 15 MX(raw) submitted
+4.204.50.158.in-addr.arpa flags 0 type 16 TXT(-) submitted
+4.204.50.158.in-addr.arpa flags 0 type 17 RP(raw) submitted
+4.204.50.158.in-addr.arpa flags 0 type 65537 A(addr) submitted
+4.204.50.158.in-addr.arpa flags 0 type 65538 NS(+addr) submitted
+4.204.50.158.in-addr.arpa flags 0 type 65548 PTR(checked) submitted
+4.204.50.158.in-addr.arpa flags 0 type 65551 MX(+addr) submitted
+4.204.50.158.in-addr.arpa flags 0 type 131078 SOA(822) submitted
+4.204.50.158.in-addr.arpa flags 0 type 131089adns debug: reply not found, id 3141, query owner ns2.afpdoc.com (NS=172.18.45.6)
+adns debug: reply not found, id 3142, query owner ns2.afp-notes.com (NS=172.18.45.6)
+adns debug: reply not found, id 3143, query owner ns2.afp-domino.com (NS=172.18.45.6)
+ RP(822) submitted
+4.204.50.158.in-addr.arpa flags 0 type A(-): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type NS(raw): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type SOA(raw): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type HINFO(-): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type MX(raw): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type PTR(raw): OK; nrrs=23; cname=$; owner=$; ttl=77948
+ ns2.afp.com
+ ns.afp.com
+ news.afp.com
+ ns2.afp.fr
+ ns.afp.fr
+ news.afp.fr
+ ns2.agencefrancepresse.com
+ news.agencefrancepresse.com
+ ns2.agencefrancepresse.fr
+ news.agencefrancepresse.fr
+ ns2.agencefrance-presse.com
+ news.agencefrance-presse.com
+ ns2.agencefrance-presse.fr
+ news.agencefrance-presse.fr
+ ns2.imageforum.com
+ news.imageforum.com
+ ns2.imageforum.tm.fr
+ news.imageforum.tm.fr
+ ns2.ooh-lah-lah.com
+ ns2.afpsciences.com
+ ns2.afpdoc.com
+ ns2.afp-notes.com
+ ns2.afp-domino.com
+4.204.50.158.in-addr.arpa flags 0 type TXT(-): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type RP(raw): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type A(addr): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type NS(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type MX(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type SOA(822): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type PTR(checked): Inconsistent resource records in DNS; nrrs=0; cname=$; owner=$; ttl=77948
+4.204.50.158.in-addr.arpa flags 0 type RP(822): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type CNAME(-): No such data; nrrs=0; cname=$; owner=$; ttl=0
+rc=0
diff --git a/regress/case-norecurse.sys b/regress/case-norecurse.sys
new file mode 100644 (file)
index 0000000..239b282
--- /dev/null
@@ -0,0 +1,636 @@
+adnstest default -0x16
+4.204.50.158.in-addr.arpa
+ start 939764098.821612
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000163
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000053
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000041
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.001437
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 010001.
+ +0.000286
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000152
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.000904
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 020001.
+ +0.000247
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000144
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.001157
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000093
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.000957
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 060001.
+ +0.000249
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000113
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001196
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238380 00010012 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000130 7c000d03 6e733203 61667003
+     636f6d00 c00c000c 00010001 307c0005 026e73c0 3bc00c00 0c000100 01307c00
+     07046e65 7773c03b c00c000c 00010001 307c000c 036e7332 03616670 02667200
+     c00c000c 00010001 307c0005 026e73c0 78c00c00 0c000100 01307c00 07046e65
+     7773c078 c00c000c 00010001 307c0019 036e7332 12616765 6e636566 72616e63
+     65707265 737365c0 3fc00c00 0c000100 01307c00 07046e65 7773c0b4 c00c000c
+     00010001 307c0019 036e7332 12616765 6e636566 72616e63 65707265 737365c0
+     7cc00c00 0c000100 01307c00 07046e65 7773c0ec c00c000c 00010001 307c001a
+     036e7332 13616765 6e636566 72616e63 652d7072 65737365 c03fc00c 000c0001
+     0001307c 0007046e 657773c1 24c00c00 0c000100 01307c00 1a036e73 32136167
+     656e6365 6672616e 63652d70 72657373 65c07cc0 0c000c00 01000130 7c000704
+     6e657773 c15dc00c 000c0001 0001307c 0011036e 73320a69 6d616765 666f7275
+     6dc03fc0 0c000c00 01000130 7c000704 6e657773 c196c00c 000c0001 0001307c
+     0014036e 73320a69 6d616765 666f7275 6d02746d c07cc00c 000c0001 0001307c
+     0007046e 657773c1 c6.
+ +0.002263
+ socket type=SOCK_STREAM
+ socket=5
+ +0.000942
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000045
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000041
+ connect fd=5 addr=172.18.45.6:53
+ connect=EINPROGRESS
+ +0.000500
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000083
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0d0001.
+ sendto=43
+ +0.000925
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0d0001.
+ +0.000256
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000116
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000123
+ write fd=5
+     002b3123 01000001 00000000 00000134 03323034 02353003 31353807 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.001681
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.001010
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0f0001.
+ +0.000266
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000117
+ read fd=5 buflen=2
+ read=OK
+     02ac.
+ +0.000175
+ read fd=5 buflen=684
+ read=OK
+     31238180 00010017 00010001 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000130 7c000d03 6e733203 61667003
+     636f6d00 c00c000c 00010001 307c0005 026e73c0 3bc00c00 0c000100 01307c00
+     07046e65 7773c03b c00c000c 00010001 307c000c 036e7332 03616670 02667200
+     c00c000c 00010001 307c0005 026e73c0 78c00c00 0c000100 01307c00 07046e65
+     7773c078 c00c000c 00010001 307c0019 036e7332 12616765 6e636566 72616e63
+     65707265 737365c0 3fc00c00 0c000100 01307c00 07046e65 7773c0b4 c00c000c
+     00010001 307c0019 036e7332 12616765 6e636566 72616e63 65707265 737365c0
+     7cc00c00 0c000100 01307c00 07046e65 7773c0ec c00c000c 00010001 307c001a
+     036e7332 13616765 6e636566 72616e63 652d7072 65737365 c03fc00c 000c0001
+     0001307c 0007046e 657773c1 24c00c00 0c000100 01307c00 1a036e73 32136167
+     656e6365 6672616e 63652d70 72657373 65c07cc0 0c000c00 01000130 7c000704
+     6e657773 c15dc00c 000c0001 0001307c 0011036e 73320a69 6d616765 666f7275
+     6dc03fc0 0c000c00 01000130 7c000704 6e657773 c196c00c 000c0001 0001307c
+     0014036e 73320a69 6d616765 666f7275 6d02746d c07cc00c 000c0001 0001307c
+     0007046e 657773c1 c6c00c00 0c000100 01307c00 12036e73 320b6f6f 682d6c61
+     682d6c61 68c03fc0 0c000c00 01000130 7c001203 6e73320b 61667073 6369656e
+     636573c0 3fc00c00 0c000100 01307c00 0d036e73 32066166 70646f63 c03fc00c
+     000c0001 0001307c 0010036e 73320961 66702d6e 6f746573 c03fc00c 000c0001
+     0001307c 0011036e 73320a61 66702d64 6f6d696e 6fc03f03 32303402 35300331
+     35380769 6e2d6164 64720461 72706100 00020001 0001307c 0002c037 c0370001
+     00010002 80980004 9e32cc04.
+ +0.002445
+ read fd=5 buflen=686
+ read=EAGAIN
+ +0.003811
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 100001.
+ sendto=43
+ +0.000940
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 100001.
+ +0.000256
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000115
+ read fd=5 buflen=686
+ read=EAGAIN
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.000928
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ +0.000259
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000112
+ read fd=5 buflen=686
+ read=EAGAIN
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.000917
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 010001.
+ +0.000259
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000124
+ read fd=5 buflen=686
+ read=EAGAIN
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.000899
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 020001.
+ +0.000262
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000123
+ read fd=5 buflen=686
+ read=EAGAIN
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001190
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8380 00010012 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000130 7c000d03 6e733203 61667003
+     636f6d00 c00c000c 00010001 307c0005 026e73c0 3bc00c00 0c000100 01307c00
+     07046e65 7773c03b c00c000c 00010001 307c000c 036e7332 03616670 02667200
+     c00c000c 00010001 307c0005 026e73c0 78c00c00 0c000100 01307c00 07046e65
+     7773c078 c00c000c 00010001 307c0019 036e7332 12616765 6e636566 72616e63
+     65707265 737365c0 3fc00c00 0c000100 01307c00 07046e65 7773c0b4 c00c000c
+     00010001 307c0019 036e7332 12616765 6e636566 72616e63 65707265 737365c0
+     7cc00c00 0c000100 01307c00 07046e65 7773c0ec c00c000c 00010001 307c001a
+     036e7332 13616765 6e636566 72616e63 652d7072 65737365 c03fc00c 000c0001
+     0001307c 0007046e 657773c1 24c00c00 0c000100 01307c00 1a036e73 32136167
+     656e6365 6672616e 63652d70 72657373 65c07cc0 0c000c00 01000130 7c000704
+     6e657773 c15dc00c 000c0001 0001307c 0011036e 73320a69 6d616765 666f7275
+     6dc03fc0 0c000c00 01000130 7c000704 6e657773 c196c00c 000c0001 0001307c
+     0014036e 73320a69 6d616765 666f7275 6d02746d c07cc00c 000c0001 0001307c
+     0007046e 657773c1 c6.
+ +0.001724
+ write fd=5
+     002b312a 01000001 00000000 00000134 03323034 02353003 31353807 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.001513
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000078
+ read fd=5 buflen=686
+ read=EAGAIN
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.000907
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0f0001.
+ +0.000264
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000118
+ read fd=5 buflen=686
+ read=EAGAIN
+ +0.001429
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.000875
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 060001.
+ +0.000265
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000115
+ read fd=5 buflen=686
+ read=OK
+     02ac312a 81800001 00170001 00010134 03323034 02353003 31353807 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 01307c00 0d036e73 32036166
+     7003636f 6d00c00c 000c0001 0001307c 0005026e 73c03bc0 0c000c00 01000130
+     7c000704 6e657773 c03bc00c 000c0001 0001307c 000c036e 73320361 66700266
+     7200c00c 000c0001 0001307c 0005026e 73c078c0 0c000c00 01000130 7c000704
+     6e657773 c078c00c 000c0001 0001307c 0019036e 73321261 67656e63 65667261
+     6e636570 72657373 65c03fc0 0c000c00 01000130 7c000704 6e657773 c0b4c00c
+     000c0001 0001307c 0019036e 73321261 67656e63 65667261 6e636570 72657373
+     65c07cc0 0c000c00 01000130 7c000704 6e657773 c0ecc00c 000c0001 0001307c
+     001a036e 73321361 67656e63 65667261 6e63652d 70726573 7365c03f c00c000c
+     00010001 307c0007 046e6577 73c124c0 0c000c00 01000130 7c001a03 6e733213
+     6167656e 63656672 616e6365 2d707265 737365c0 7cc00c00 0c000100 01307c00
+     07046e65 7773c15d c00c000c 00010001 307c0011 036e7332 0a696d61 6765666f
+     72756dc0 3fc00c00 0c000100 01307c00 07046e65 7773c196 c00c000c 00010001
+     307c0014 036e7332 0a696d61 6765666f 72756d02 746dc07c c00c000c 00010001
+     307c0007 046e6577 73c1c6c0 0c000c00 01000130 7c001203 6e73320b 6f6f682d
+     6c61682d 6c6168c0 3fc00c00 0c000100 01307c00 12036e73 320b6166 70736369
+     656e6365 73c03fc0 0c000c00 01000130 7c000d03 6e733206 61667064 6f63c03f
+     c00c000c 00010001 307c0010 036e7332 09616670 2d6e6f74 6573c03f c00c000c
+     00010001 307c0011 036e7332 0a616670 2d646f6d 696e6fc0 3f033230 34023530
+     03313538 07696e2d 61646472 04617270 61000002 00010001 307c0002 c037c037
+     00010001 00028098 00049e32 cc04.
+ +0.002314
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 036e7332 03616670 03636f6d 00000100 01.
+ sendto=29
+ +0.001132
+ sendto fd=4 addr=172.18.45.6:53
+     312e0100 00010000 00000000 026e7303 61667003 636f6d00 00010001.
+ sendto=28
+ +0.000872
+ sendto fd=4 addr=172.18.45.6:53
+     312f0100 00010000 00000000 046e6577 73036166 7003636f 6d000001 0001.
+ sendto=30
+ +0.000864
+ sendto fd=4 addr=172.18.45.6:53
+     31300100 00010000 00000000 036e7332 03616670 02667200 00010001.
+ sendto=28
+ +0.000857
+ sendto fd=4 addr=172.18.45.6:53
+     31310100 00010000 00000000 026e7303 61667002 66720000 010001.
+ sendto=27
+ +0.001077
+ sendto fd=4 addr=172.18.45.6:53
+     31320100 00010000 00000000 046e6577 73036166 70026672 00000100 01.
+ sendto=29
+ +0.001081
+ sendto fd=4 addr=172.18.45.6:53
+     31330100 00010000 00000000 036e7332 12616765 6e636566 72616e63 65707265
+     73736503 636f6d00 00010001.
+ sendto=44
+ +0.001138
+ sendto fd=4 addr=172.18.45.6:53
+     31340100 00010000 00000000 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 03636f6d 00000100 01.
+ sendto=45
+ +0.001216
+ sendto fd=4 addr=172.18.45.6:53
+     31350100 00010000 00000000 036e7332 12616765 6e636566 72616e63 65707265
+     73736502 66720000 010001.
+ sendto=43
+ +0.001134
+ sendto fd=4 addr=172.18.45.6:53
+     31360100 00010000 00000000 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 02667200 00010001.
+ sendto=44
+ +0.001163
+ sendto fd=4 addr=172.18.45.6:53
+     31370100 00010000 00000000 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 03636f6d 00000100 01.
+ sendto=45
+ +0.001153
+ sendto fd=4 addr=172.18.45.6:53
+     31380100 00010000 00000000 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 6503636f 6d000001 0001.
+ sendto=46
+ +0.001167
+ sendto fd=4 addr=172.18.45.6:53
+     31390100 00010000 00000000 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 02667200 00010001.
+ sendto=44
+ +0.001170
+ sendto fd=4 addr=172.18.45.6:53
+     313a0100 00010000 00000000 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 65026672 00000100 01.
+ sendto=45
+ +0.001174
+ sendto fd=4 addr=172.18.45.6:53
+     313b0100 00010000 00000000 036e7332 0a696d61 6765666f 72756d03 636f6d00
+     00010001.
+ sendto=36
+ +0.001119
+ sendto fd=4 addr=172.18.45.6:53
+     313c0100 00010000 00000000 046e6577 730a696d 61676566 6f72756d 03636f6d
+     00000100 01.
+ sendto=37
+ +0.001141
+ sendto fd=4 addr=172.18.45.6:53
+     313d0100 00010000 00000000 036e7332 0a696d61 6765666f 72756d02 746d0266
+     72000001 0001.
+ sendto=38
+ +0.001115
+ sendto fd=4 addr=172.18.45.6:53
+     313e0100 00010000 00000000 046e6577 730a696d 61676566 6f72756d 02746d02
+     66720000 010001.
+ sendto=39
+ +0.001383
+ sendto fd=4 addr=172.18.45.6:53
+     313f0100 00010000 00000000 036e7332 0b6f6f68 2d6c6168 2d6c6168 03636f6d
+     00000100 01.
+ sendto=37
+ +0.001190
+ sendto fd=4 addr=172.18.45.6:53
+     31400100 00010000 00000000 036e7332 0b616670 73636965 6e636573 03636f6d
+     00000100 01.
+ sendto=37
+ +0.001178
+ sendto fd=4 addr=172.18.45.6:53
+     31410100 00010000 00000000 036e7332 06616670 646f6303 636f6d00 00010001.
+ sendto=32
+ +0.001112
+ sendto fd=4 addr=172.18.45.6:53
+     31420100 00010000 00000000 036e7332 09616670 2d6e6f74 65730363 6f6d0000
+     010001.
+ sendto=35
+ +0.001167
+ sendto fd=4 addr=172.18.45.6:53
+     31430100 00010000 00000000 036e7332 0a616670 2d646f6d 696e6f03 636f6d00
+     00010001.
+ sendto=36
+ +0.001187
+ read fd=5 buflen=686
+ read=EAGAIN
+ +0.000694
+ sendto fd=4 addr=172.18.45.6:53
+     31440100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.001333
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8180 00010001 00020002 036e7332 03616670 03636f6d 00000100 01c00c00
+     01000100 02809800 049e32cc 04034146 5003636f 6d000002 00010001 4d720002
+     c00cc02d 00020001 00014d72 0006036e 7331c02d c00c0001 00010002 80980004
+     9e32cc04 c04e0001 00010002 80980004 d0dfa603.
+ +0.000734
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312e8180 00010001 00020002 026e7303 61667003 636f6d00 00010001 c00c0001
+     00010001 4d720004 9e32cc04 03414650 03636f6d 00000200 0100014d 72000603
+     6e7332c0 2cc02c00 02000100 014d7200 06036e73 31c02cc0 3f000100 01000280
+     9800049e 32cc04c0 51000100 01000280 980004d0 dfa603.
+ +0.000768
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312f8180 00010001 00020002 046e6577 73036166 7003636f 6d000001 0001c00c
+     00010001 00013089 00049e32 cc040341 46500363 6f6d0000 02000100 014d7200
+     06036e73 32c02ec0 2e000200 0100014d 72000603 6e7331c0 2ec04100 01000100
+     02809800 049e32cc 04c05300 01000100 02809800 04d0dfa6 03.
+ +0.000623
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31308180 00010001 00020002 036e7332 03616670 02667200 00010001 c00c0001
+     00010001 30850004 9e32cc04 03616670 02667200 00020001 00013085 0002c00c
+     c02c0002 00010001 30850006 036e7331 c02cc00c 00010001 00013085 00049e32
+     cc04c04c 00010001 00013085 0004d0df a603.
+ +0.000602
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31318180 00010001 00020002 026e7303 61667002 66720000 010001c0 0c000100
+     01000130 8500049e 32cc0403 61667002 66720000 02000100 01308500 06036e73
+     32c02bc0 2b000200 01000130 85000603 6e7331c0 2bc03d00 01000100 01308500
+     049e32cc 04c04f00 01000100 01308500 04d0dfa6 03.
+ +0.000624
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31328180 00010001 00020002 046e6577 73036166 70026672 00000100 01c00c00
+     01000100 012f4700 049e32cc 04036166 70026672 00000200 01000130 85000603
+     6e7332c0 2dc02d00 02000100 01308500 06036e73 31c02dc0 3f000100 01000130
+     8500049e 32cc04c0 51000100 01000130 850004d0 dfa603.
+ +0.000643
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31338180 00010001 00020002 036e7332 12616765 6e636566 72616e63 65707265
+     73736503 636f6d00 00010001 c00c0001 00010001 30850004 9e32cc04 12616765
+     6e636566 72616e63 65707265 73736503 636f6d00 00020001 00013085 0002c00c
+     c03c0002 00010001 30850006 036e7331 c03cc00c 00010001 00013085 00049e32
+     cc04c06c 00010001 00013085 0004d0df a603.
+ +0.000703
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31348180 00010001 00020002 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 03636f6d 00000100 01c00c00 01000100 01308500 049e32cc 04126167
+     656e6365 6672616e 63657072 65737365 03636f6d 00000200 01000130 85000603
+     6e7332c0 3dc03d00 02000100 01308500 06036e73 31c03dc0 5f000100 01000130
+     8500049e 32cc04c0 71000100 01000130 850004d0 dfa603.
+ +0.000750
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31358180 00010001 00020002 036e7332 12616765 6e636566 72616e63 65707265
+     73736502 66720000 010001c0 0c000100 01000130 8900049e 32cc0412 6167656e
+     63656672 616e6365 70726573 73650266 72000002 00010001 30890002 c00cc03b
+     00020001 00013089 0006036e 7331c03b c00c0001 00010001 30890004 9e32cc04
+     c06a0001 00010001 30890004 d0dfa603.
+ +0.000708
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31368180 00010001 00020002 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 02667200 00010001 c00c0001 00010001 30890004 9e32cc04 12616765
+     6e636566 72616e63 65707265 73736502 66720000 02000100 01308900 06036e73
+     32c03cc0 3c000200 01000130 89000603 6e7331c0 3cc05d00 01000100 01308900
+     049e32cc 04c06f00 01000100 01308900 04d0dfa6 03.
+ +0.000739
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31378180 00010001 00020002 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 03636f6d 00000100 01c00c00 01000100 014dd900 049e32cc 04136167
+     656e6365 6672616e 63652d70 72657373 6503636f 6d000002 00010001 4dd90002
+     c00cc03d 00020001 00014dd9 0006036e 7331c03d c00c0001 00010001 4dd90004
+     9e32cc04 c06e0001 00010001 4dd90004 d0dfa603.
+ +0.000723
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31388180 00010001 00020002 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 6503636f 6d000001 0001c00c 00010001 00014dd9 00049e32 cc041361
+     67656e63 65667261 6e63652d 70726573 73650363 6f6d0000 02000100 014dd900
+     06036e73 32c03ec0 3e000200 0100014d d9000603 6e7331c0 3ec06100 01000100
+     014dd900 049e32cc 04c07300 01000100 014dd900 04d0dfa6 03.
+ +0.000757
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31398180 00010001 00020002 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 02667200 00010001 c00c0001 00010001 30890004 9e32cc04 13616765
+     6e636566 72616e63 652d7072 65737365 02667200 00020001 00013089 0002c00c
+     c03c0002 00010001 30890006 036e7331 c03cc00c 00010001 00013089 00049e32
+     cc04c06c 00010001 00013089 0004d0df a603.
+ +0.000721
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313a8180 00010001 00020002 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 65026672 00000100 01c00c00 01000100 01308900 049e32cc 04136167
+     656e6365 6672616e 63652d70 72657373 65026672 00000200 01000130 89000603
+     6e7332c0 3dc03d00 02000100 01308900 06036e73 31c03dc0 5f000100 01000130
+     8900049e 32cc04c0 71000100 01000130 890004d0 dfa603.
+ +0.000732
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313b8180 00010001 00020002 036e7332 0a696d61 6765666f 72756d03 636f6d00
+     00010001 c00c0001 00010001 30890004 9e32cc04 0a696d61 6765666f 72756d03
+     636f6d00 00020001 00013089 0002c00c c0340002 00010001 30890006 036e7331
+     c034c00c 00010001 00013089 00049e32 cc04c05c 00010001 00013089 0004d0df
+     a603.
+ +0.000677
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313c8180 00010001 00020002 046e6577 730a696d 61676566 6f72756d 03636f6d
+     00000100 01c00c00 01000100 01308900 049e32cc 040a696d 61676566 6f72756d
+     03636f6d 00000200 01000130 89000603 6e7332c0 35c03500 02000100 01308900
+     06036e73 31c035c0 4f000100 01000130 8900049e 32cc04c0 61000100 01000130
+     890004d0 dfa603.
+ +0.000673
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313d8180 00010001 00020002 036e7332 0a696d61 6765666f 72756d02 746d0266
+     72000001 0001c00c 00010001 000280c4 00049e32 cc040a69 6d616765 666f7275
+     6d02746d 02667200 00020001 000280c4 0002c00c c0360002 00010002 80c40006
+     036e7331 c036c00c 00010001 000280c4 00049e32 cc04c060 00010001 000280c4
+     0004d0df a603.
+ +0.000687
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313e8180 00010001 00020002 046e6577 730a696d 61676566 6f72756d 02746d02
+     66720000 010001c0 0c000100 0100012f 4500049e 32cc040a 696d6167 65666f72
+     756d0274 6d026672 00000200 01000280 c4000603 6e7332c0 37c03700 02000100
+     0280c400 06036e73 31c037c0 53000100 01000280 c400049e 32cc04c0 65000100
+     01000280 c40004d0 dfa603.
+ +0.000685
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313f8180 00010001 00020002 036e7332 0b6f6f68 2d6c6168 2d6c6168 03636f6d
+     00000100 01c00c00 01000100 014dd900 049e32cc 040b6f6f 682d6c61 682d6c61
+     6803636f 6d000002 00010001 4dd90002 c00cc035 00020001 00014dd9 0006036e
+     7331c035 c00c0001 00010001 4dd90004 9e32cc04 c05e0001 00010001 4dd90004
+     d0dfa603.
+ +0.000664
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31408180 00010000 00010000 036e7332 0b616670 73636965 6e636573 03636f6d
+     00000100 010b6166 70736369 656e6365 7303636f 6d000006 00010000 0148002c
+     03646e73 08766963 746f6972 65026672 0004726f 6f74c044 77276589 00007080
+     00001c20 004f1a00 00015180.
+ +0.000607
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31418180 00010000 00010000 036e7332 06616670 646f6303 636f6d00 00010001
+     06616670 646f6303 636f6d00 00060001 00000148 002c0364 6e730876 6963746f
+     69726502 66720004 726f6f74 c03a7727 65890000 70800000 1c20004f 1a000001
+     5180.
+ +0.001536
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31428180 00010001 00020002 036e7332 09616670 2d6e6f74 65730363 6f6d0000
+     010001c0 0c000100 01000130 8900049e 32cc0409 6166702d 6e6f7465 7303636f
+     6d000002 00010001 30890002 c00cc033 00020001 00013089 0006036e 7331c033
+     c00c0001 00010001 30890004 9e32cc04 c05a0001 00010001 30890004 d0dfa603.
+ +0.000601
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31438180 00010001 00020002 036e7332 0a616670 2d646f6d 696e6f03 636f6d00
+     00010001 c00c0001 00010001 30890004 9e32cc04 0a616670 2d646f6d 696e6f03
+     636f6d00 00020001 00013089 0002c00c c0340002 00010001 30890006 036e7331
+     c034c00c 00010001 00013089 00049e32 cc04c05c 00010001 00013089 0004d0df
+     a603.
+ +0.000629
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31448180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ +0.000317
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000001
+ read fd=5 buflen=686
+ read=EAGAIN
+ +0.000115
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.920609
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-754319
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 050001.
+ +0.000252
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000127
+ close fd=4
+ close=OK
+ +0.000208
+ close fd=5
+ close=OK
+ +0.000001
diff --git a/regress/case-norecurse2.err b/regress/case-norecurse2.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-norecurse2.out b/regress/case-norecurse2.out
new file mode 100644 (file)
index 0000000..b00974a
--- /dev/null
@@ -0,0 +1,60 @@
+adns debug: using nameserver 172.18.45.6
+4.204.50.158.in-addr.arpa flags 0 type 1 A(-) submitted
+4.204.50.158.in-addr.arpa flags 0 type 2 NS(raw) submitted
+4.204.50.158.in-addr.arpa flags 0 type 5 CNAME(-) submitted
+4.204.50.158.in-addr.arpa flags 0 type 6 SOA(raw) submitted
+4.204.50.158.in-addr.arpa flags 0 type 12 PTR(raw) submitted
+4.204.50.158.in-addr.arpa flags 0 type 13 HINFO(-) submitted
+4.204.50.158.in-addr.arpa flags 0 type 15 MX(raw) submitted
+4.204.50.158.in-addr.arpa flags 0 type 16 TXT(-) submitted
+4.204.50.158.in-addr.arpa flags 0 type 17 RP(raw) submitted
+4.204.50.158.in-addr.arpa flags 0 type 65537 A(addr) submitted
+4.204.50.158.in-addr.arpa flags 0 type 65538 NS(+addr) submitted
+4.204.50.158.in-addr.arpa flags 0 type 65548 PTR(checked) submitted
+4.204.50.158.in-addr.arpa flags 0 type 65551 MX(+addr) submitted
+4.204.50.158.in-addr.arpa flags 0 type 131078 SOA(822) submitted
+4.204.50.158.in-addr.arpa flags 0 type 131089 RP(822) submitted
+4.204.50.158.in-addr.arpa flags 0 type SOA(raw): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type HINFO(-): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type MX(raw): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type TXT(-): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type MX(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type A(addr): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type NS(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type RP(822): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type A(-): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type NS(raw): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type SOA(822): No such data; nrrs=0; cname=$; owner=$; ttl=0
+adns debug: reply not found, id 312c, query owner 4.204.50.158.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 311f, query owner 4.204.50.158.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 3120, query owner 4.204.50.158.in-addr.arpa (NS=172.18.45.6)
+adns debug: reply not found, id 312a, query owner 4.204.50.158.in-addr.arpa (NS=172.18.45.6)
+4.204.50.158.in-addr.arpa flags 0 type RP(raw): No such data; nrrs=0; cname=$; owner=$; ttl=0
+4.204.50.158.in-addr.arpa flags 0 type CNAME(-): No such data; nrrs=0; cname=$; owner=$; ttl=0
+adns debug: TCP connected (NS=172.18.45.6)
+4.204.50.158.in-addr.arpa flags 0 type PTR(raw): OK; nrrs=23; cname=$; owner=$; ttl=0
+ ns2.afp.com
+ ns.afp.com
+ news.afp.com
+ ns2.afp.fr
+ ns.afp.fr
+ news.afp.fr
+ ns2.agencefrancepresse.com
+ news.agencefrancepresse.com
+ ns2.agencefrancepresse.fr
+ news.agencefrancepresse.fr
+ ns2.agencefrance-presse.com
+ news.agencefrance-presse.com
+ ns2.agencefrance-presse.fr
+ news.agencefrance-presse.fr
+ ns2.imageforum.com
+ news.imageforum.com
+ ns2.imageforum.tm.fr
+ news.imageforum.tm.fr
+ ns2.ooh-lah-lah.com
+ ns2.afpsciences.com
+ ns2.afpdoc.com
+ ns2.afp-notes.com
+ ns2.afp-domino.com
+4.204.50.158.in-addr.arpa flags 0 type PTR(checked): Inconsistent resource records in DNS; nrrs=0; cname=$; owner=$; ttl=-6
+rc=0
diff --git a/regress/case-norecurse2.sys b/regress/case-norecurse2.sys
new file mode 100644 (file)
index 0000000..4029009
--- /dev/null
@@ -0,0 +1,1224 @@
+adnstest default -0x16
+4.204.50.158.in-addr.arpa
+ start 939764277.018636
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000162
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000052
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000042
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.001984
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000131
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.001195
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000092
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.001175
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000096
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.001216
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000098
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001153
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000095
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0d0001.
+ sendto=43
+ +0.001170
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000103
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.001162
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000099
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 100001.
+ sendto=43
+ +0.001193
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000104
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.001203
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000105
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.001379
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000105
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.001199
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000107
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.001196
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000111
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0f0001.
+ sendto=43
+ +0.001229
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000114
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.001187
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000115
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.001165
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000116
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.979603
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.005569
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228580 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 060001.
+ +0.000287
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000173
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.973574
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.149373
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248580 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0d0001.
+ +0.000294
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000119
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.823788
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.019622
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258580 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0f0001.
+ +0.000268
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000116
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.803782
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.019566
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268580 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 100001.
+ +0.000266
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000116
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.783834
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.019476
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0f0001.
+ +0.000261
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000120
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.763977
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.189710
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288580 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 010001.
+ +0.000268
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000119
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.573880
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.019648
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298580 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 020001.
+ +0.000260
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000119
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.553853
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.019563
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ +0.000257
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000119
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.533914
+ select=0 rfds=[] wfds=[] efds=[]
+ +1.-463554
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 010001.
+ sendto=43
+ +0.000546
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 020001.
+ sendto=43
+ +0.000484
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.000484
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.001940
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000119
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 010001.
+ +0.000255
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 020001.
+ +0.000284
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000100
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.001182
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.007693
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000479
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.000465
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.001722
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009054
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000480
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 060001.
+ sendto=43
+ +0.000489
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.980098
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000131
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 060001.
+ +0.000231
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000119
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.979617
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-21402
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.001019
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009951
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.000505
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000529
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.000468
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008498
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008500
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000459
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.989538
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-10446
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.000537
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000484
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.000487
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008478
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008478
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000106
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000456
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.989451
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-10542
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.000612
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000551
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.000564
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008358
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008252
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000106
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009994
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000467
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.979559
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.372703
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 060001.
+ +0.000261
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000225
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.606370
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039270
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 010001.
+ +0.000255
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000224
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.566621
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.149484
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 020001.
+ +0.000261
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000200
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.416676
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-583334
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000010
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.010045
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 050001.
+ sendto=43
+ +0.000504
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000456
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ sendto=43
+ +0.000499
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.008480
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008495
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001.
+ sendto=43
+ +0.000644
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.989402
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.490712
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278580 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 110001.
+ +0.001892
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238380 00010012 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000000 00000d03 6e733203 61667003
+     636f6d00 c00c000c 00010000 00000005 026e73c0 3bc00c00 0c000100 00000000
+     07046e65 7773c03b c00c000c 00010000 0000000c 036e7332 03616670 02667200
+     c00c000c 00010000 00000005 026e73c0 78c00c00 0c000100 00000000 07046e65
+     7773c078 c00c000c 00010000 00000019 036e7332 12616765 6e636566 72616e63
+     65707265 737365c0 3fc00c00 0c000100 00000000 07046e65 7773c0b4 c00c000c
+     00010000 00000019 036e7332 12616765 6e636566 72616e63 65707265 737365c0
+     7cc00c00 0c000100 00000000 07046e65 7773c0ec c00c000c 00010000 0000001a
+     036e7332 13616765 6e636566 72616e63 652d7072 65737365 c03fc00c 000c0001
+     00000000 0007046e 657773c1 24c00c00 0c000100 00000000 1a036e73 32136167
+     656e6365 6672616e 63652d70 72657373 65c07cc0 0c000c00 01000000 00000704
+     6e657773 c15dc00c 000c0001 00000000 0011036e 73320a69 6d616765 666f7275
+     6dc03fc0 0c000c00 01000000 00000704 6e657773 c196c00c 000c0001 00000000
+     0014036e 73320a69 6d616765 666f7275 6d02746d c07cc00c 000c0001 00000000
+     0007046e 657773c1 c6.
+ +0.003281
+ socket type=SOCK_STREAM
+ socket=5
+ +0.002885
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000045
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000039
+ connect fd=5 addr=172.18.45.6:53
+ connect=EINPROGRESS
+ +0.000565
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010000 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 050001.
+ +0.000249
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8380 00010012 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000000 00000d03 6e733203 61667003
+     636f6d00 c00c000c 00010000 00000005 026e73c0 3bc00c00 0c000100 00000000
+     07046e65 7773c03b c00c000c 00010000 0000000c 036e7332 03616670 02667200
+     c00c000c 00010000 00000005 026e73c0 78c00c00 0c000100 00000000 07046e65
+     7773c078 c00c000c 00010000 00000019 036e7332 12616765 6e636566 72616e63
+     65707265 737365c0 3fc00c00 0c000100 00000000 07046e65 7773c0b4 c00c000c
+     00010000 00000019 036e7332 12616765 6e636566 72616e63 65707265 737365c0
+     7cc00c00 0c000100 00000000 07046e65 7773c0ec c00c000c 00010000 0000001a
+     036e7332 13616765 6e636566 72616e63 652d7072 65737365 c03fc00c 000c0001
+     00000000 0007046e 657773c1 24c00c00 0c000100 00000000 1a036e73 32136167
+     656e6365 6672616e 63652d70 72657373 65c07cc0 0c000c00 01000000 00000704
+     6e657773 c15dc00c 000c0001 00000000 0011036e 73320a69 6d616765 666f7275
+     6dc03fc0 0c000c00 01000000 00000704 6e657773 c196c00c 000c0001 00000000
+     0014036e 73320a69 6d616765 666f7275 6d02746d c07cc00c 000c0001 00000000
+     0007046e 657773c1 c6.
+ +0.001704
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8380 00010012 00000000 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000000 00000d03 6e733203 61667003
+     636f6d00 c00c000c 00010000 00000005 026e73c0 3bc00c00 0c000100 00000000
+     07046e65 7773c03b c00c000c 00010000 0000000c 036e7332 03616670 02667200
+     c00c000c 00010000 00000005 026e73c0 78c00c00 0c000100 00000000 07046e65
+     7773c078 c00c000c 00010000 00000019 036e7332 12616765 6e636566 72616e63
+     65707265 737365c0 3fc00c00 0c000100 00000000 07046e65 7773c0b4 c00c000c
+     00010000 00000019 036e7332 12616765 6e636566 72616e63 65707265 737365c0
+     7cc00c00 0c000100 00000000 07046e65 7773c0ec c00c000c 00010000 0000001a
+     036e7332 13616765 6e636566 72616e63 652d7072 65737365 c03fc00c 000c0001
+     00000000 0007046e 657773c1 24c00c00 0c000100 00000000 1a036e73 32136167
+     656e6365 6672616e 63652d70 72657373 65c07cc0 0c000c00 01000000 00000704
+     6e657773 c15dc00c 000c0001 00000000 0011036e 73320a69 6d616765 666f7275
+     6dc03fc0 0c000c00 01000000 00000704 6e657773 c196c00c 000c0001 00000000
+     0014036e 73320a69 6d616765 666f7275 6d02746d c07cc00c 000c0001 00000000
+     0007046e 657773c1 c6.
+ +0.001827
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000201
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.987312
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.000364
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000127
+ write fd=5
+     002b3123 01000001 00000000 00000134 03323034 02353003 31353807 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.001692
+ write fd=5
+     002b312a 01000001 00000000 00000134 03323034 02353003 31353807 696e2d61
+     64647204 61727061 00000c00 01.
+ write=45
+ +0.001275
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.983854
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.000150
+ read fd=5 buflen=2
+ read=OK
+     02e1.
+ +0.000196
+ read fd=5 buflen=737
+ read=OK
+     31238180 00010017 00020002 01340332 30340235 30033135 3807696e 2d616464
+     72046172 70610000 0c0001c0 0c000c00 01000000 00000d03 6e733203 61667003
+     636f6d00 c00c000c 00010000 00000005 026e73c0 3bc00c00 0c000100 00000000
+     07046e65 7773c03b c00c000c 00010000 0000000c 036e7332 03616670 02667200
+     c00c000c 00010000 00000005 026e73c0 78c00c00 0c000100 00000000 07046e65
+     7773c078 c00c000c 00010000 00000019 036e7332 12616765 6e636566 72616e63
+     65707265 737365c0 3fc00c00 0c000100 00000000 07046e65 7773c0b4 c00c000c
+     00010000 00000019 036e7332 12616765 6e636566 72616e63 65707265 737365c0
+     7cc00c00 0c000100 00000000 07046e65 7773c0ec c00c000c 00010000 0000001a
+     036e7332 13616765 6e636566 72616e63 652d7072 65737365 c03fc00c 000c0001
+     00000000 0007046e 657773c1 24c00c00 0c000100 00000000 1a036e73 32136167
+     656e6365 6672616e 63652d70 72657373 65c07cc0 0c000c00 01000000 00000704
+     6e657773 c15dc00c 000c0001 00000000 0011036e 73320a69 6d616765 666f7275
+     6dc03fc0 0c000c00 01000000 00000704 6e657773 c196c00c 000c0001 00000000
+     0014036e 73320a69 6d616765 666f7275 6d02746d c07cc00c 000c0001 00000000
+     0007046e 657773c1 c6c00c00 0c000100 00000000 12036e73 320b6f6f 682d6c61
+     682d6c61 68c03fc0 0c000c00 01000000 00001203 6e73320b 61667073 6369656e
+     636573c0 3fc00c00 0c000100 00000000 0d036e73 32066166 70646f63 c03fc00c
+     000c0001 00000000 0010036e 73320961 66702d6e 6f746573 c03fc00c 000c0001
+     00000000 0011036e 73320a61 66702d64 6f6d696e 6fc03f02 35300331 35380769
+     6e2d6164 64720461 72706100 00020001 0007e8fe 0002c037 02353003 31353807
+     696e2d61 64647204 61727061 00000200 010007e8 fe000603 4e5331c0 3bc03700
+     01000100 02a2fe00 049e32cc 04034e53 31c03b00 01000100 02a2fe00 04d0dfa6
+     03.
+ +0.002595
+ read fd=5 buflen=739
+ read=OK
+     02e1312a 81800001 00170002 00020134 03323034 02353003 31353807 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 00000000 0d036e73 32036166
+     7003636f 6d00c00c 000c0001 00000000 0005026e 73c03bc0 0c000c00 01000000
+     00000704 6e657773 c03bc00c 000c0001 00000000 000c036e 73320361 66700266
+     7200c00c 000c0001 00000000 0005026e 73c078c0 0c000c00 01000000 00000704
+     6e657773 c078c00c 000c0001 00000000 0019036e 73321261 67656e63 65667261
+     6e636570 72657373 65c03fc0 0c000c00 01000000 00000704 6e657773 c0b4c00c
+     000c0001 00000000 0019036e 73321261 67656e63 65667261 6e636570 72657373
+     65c07cc0 0c000c00 01000000 00000704 6e657773 c0ecc00c 000c0001 00000000
+     001a036e 73321361 67656e63 65667261 6e63652d 70726573 7365c03f c00c000c
+     00010000 00000007 046e6577 73c124c0 0c000c00 01000000 00001a03 6e733213
+     6167656e 63656672 616e6365 2d707265 737365c0 7cc00c00 0c000100 00000000
+     07046e65 7773c15d c00c000c 00010000 00000011 036e7332 0a696d61 6765666f
+     72756dc0 3fc00c00 0c000100 00000000 07046e65 7773c196 c00c000c 00010000
+     00000014 036e7332 0a696d61 6765666f 72756d02 746dc07c c00c000c 00010000
+     00000007 046e6577 73c1c6c0 0c000c00 01000000 00001203 6e73320b 6f6f682d
+     6c61682d 6c6168c0 3fc00c00 0c000100 00000000 12036e73 320b6166 70736369
+     656e6365 73c03fc0 0c000c00 01000000 00000d03 6e733206 61667064 6f63c03f
+     c00c000c 00010000 00000010 036e7332 09616670 2d6e6f74 6573c03f c00c000c
+     00010000 00000011 036e7332 0a616670 2d646f6d 696e6fc0 3f023530 03313538
+     07696e2d 61646472 04617270 61000002 00010007 e8fe0002 c0370235 30033135
+     3807696e 2d616464 72046172 70610000 02000100 07e8fe00 06034e53 31c03bc0
+     37000100 010002a2 fe00049e 32cc0403 4e5331c0 3b000100 010002a2 fe0004d0
+     dfa603.
+ +0.004644
+ sendto fd=4 addr=172.18.45.6:53
+     312e0100 00010000 00000000 036e7332 03616670 03636f6d 00000100 01.
+ sendto=29
+ +0.001410
+ sendto fd=4 addr=172.18.45.6:53
+     312f0100 00010000 00000000 026e7303 61667003 636f6d00 00010001.
+ sendto=28
+ +0.001075
+ sendto fd=4 addr=172.18.45.6:53
+     31300100 00010000 00000000 046e6577 73036166 7003636f 6d000001 0001.
+ sendto=30
+ +0.001072
+ sendto fd=4 addr=172.18.45.6:53
+     31310100 00010000 00000000 036e7332 03616670 02667200 00010001.
+ sendto=28
+ +0.001053
+ sendto fd=4 addr=172.18.45.6:53
+     31320100 00010000 00000000 026e7303 61667002 66720000 010001.
+ sendto=27
+ +0.001065
+ sendto fd=4 addr=172.18.45.6:53
+     31330100 00010000 00000000 046e6577 73036166 70026672 00000100 01.
+ sendto=29
+ +0.001063
+ sendto fd=4 addr=172.18.45.6:53
+     31340100 00010000 00000000 036e7332 12616765 6e636566 72616e63 65707265
+     73736503 636f6d00 00010001.
+ sendto=44
+ +0.001117
+ sendto fd=4 addr=172.18.45.6:53
+     31350100 00010000 00000000 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 03636f6d 00000100 01.
+ sendto=45
+ +0.001230
+ sendto fd=4 addr=172.18.45.6:53
+     31360100 00010000 00000000 036e7332 12616765 6e636566 72616e63 65707265
+     73736502 66720000 010001.
+ sendto=43
+ +0.001352
+ sendto fd=4 addr=172.18.45.6:53
+     31370100 00010000 00000000 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 02667200 00010001.
+ sendto=44
+ +0.001324
+ sendto fd=4 addr=172.18.45.6:53
+     31380100 00010000 00000000 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 03636f6d 00000100 01.
+ sendto=45
+ +0.001336
+ sendto fd=4 addr=172.18.45.6:53
+     31390100 00010000 00000000 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 6503636f 6d000001 0001.
+ sendto=46
+ +0.001340
+ sendto fd=4 addr=172.18.45.6:53
+     313a0100 00010000 00000000 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 02667200 00010001.
+ sendto=44
+ +0.001322
+ sendto fd=4 addr=172.18.45.6:53
+     313b0100 00010000 00000000 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 65026672 00000100 01.
+ sendto=45
+ +0.001312
+ sendto fd=4 addr=172.18.45.6:53
+     313c0100 00010000 00000000 036e7332 0a696d61 6765666f 72756d03 636f6d00
+     00010001.
+ sendto=36
+ +0.001330
+ sendto fd=4 addr=172.18.45.6:53
+     313d0100 00010000 00000000 046e6577 730a696d 61676566 6f72756d 03636f6d
+     00000100 01.
+ sendto=37
+ +0.001298
+ sendto fd=4 addr=172.18.45.6:53
+     313e0100 00010000 00000000 036e7332 0a696d61 6765666f 72756d02 746d0266
+     72000001 0001.
+ sendto=38
+ +0.001326
+ sendto fd=4 addr=172.18.45.6:53
+     313f0100 00010000 00000000 046e6577 730a696d 61676566 6f72756d 02746d02
+     66720000 010001.
+ sendto=39
+ +0.001310
+ sendto fd=4 addr=172.18.45.6:53
+     31400100 00010000 00000000 036e7332 0b6f6f68 2d6c6168 2d6c6168 03636f6d
+     00000100 01.
+ sendto=37
+ +0.001326
+ sendto fd=4 addr=172.18.45.6:53
+     31410100 00010000 00000000 036e7332 0b616670 73636965 6e636573 03636f6d
+     00000100 01.
+ sendto=37
+ +0.001329
+ sendto fd=4 addr=172.18.45.6:53
+     31420100 00010000 00000000 036e7332 06616670 646f6303 636f6d00 00010001.
+ sendto=32
+ +0.001283
+ sendto fd=4 addr=172.18.45.6:53
+     31430100 00010000 00000000 036e7332 09616670 2d6e6f74 65730363 6f6d0000
+     010001.
+ sendto=35
+ +0.001386
+ sendto fd=4 addr=172.18.45.6:53
+     31440100 00010000 00000000 036e7332 0a616670 2d646f6d 696e6f03 636f6d00
+     00010001.
+ sendto=36
+ +0.001512
+ read fd=5 buflen=739
+ read=EAGAIN
+ +0.000090
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.963304
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004077
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312e8180 00010001 000d000d 036e7332 03616670 03636f6d 00000100 01c00c00
+     01000100 02813e00 049e32cc 04000002 00010007 e8df0014 014c0c52 4f4f542d
+     53455256 45525303 4e455400 00000200 010007e8 df000401 4dc03a00 00020001
+     0007e8df 00040149 c03a0000 02000100 07e8df00 040145c0 3a000002 00010007
+     e8df0004 0144c03a 00000200 010007e8 df000401 41c03a00 00020001 0007e8df
+     00040148 c03a0000 02000100 07e8df00 040143c0 3a000002 00010007 e8df0004
+     0147c03a 00000200 010007e8 df000401 46c03a00 00020001 0007e8df 00040142
+     c03a0000 02000100 07e8df00 04014ac0 3a000002 00010007 e8df0004 014bc03a
+     c0380001 00010009 3a5f0004 c620400c c0570001 00010009 3a5f0004 ca0c1b21
+     c0660001 00010009 3a5f0004 c0249411 c0750001 00010009 3a5f0004 c0cbe60a
+     c0840001 00010009 3a5f0004 80080a5a c0930001 00010009 3a5f0004 c6290004
+     c0a20001 00010009 3a5f0004 803f0235 c0b10001 00010009 3a5f0004 c021040c
+     c0c00001 00010009 3a5f0004 c0702404 c0cf0001 00010009 3a5f0004 c00505f1
+     c0de0001 00010009 3a5f0004 8009006b c0ed0001 00010009 3a5f0004 c629000a
+     c0fc0001 00010009 3a5f0004 c1000e81.
+ +0.001847
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000277
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.957103
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-40545
+ sendto fd=4 addr=172.18.45.6:53
+     312f0100 00010000 00000000 026e7303 61667003 636f6d00 00010001.
+ sendto=28
+ +0.000601
+ sendto fd=4 addr=172.18.45.6:53
+     31300100 00010000 00000000 046e6577 73036166 7003636f 6d000001 0001.
+ sendto=30
+ +0.000404
+ sendto fd=4 addr=172.18.45.6:53
+     31310100 00010000 00000000 036e7332 03616670 02667200 00010001.
+ sendto=28
+ +0.000424
+ sendto fd=4 addr=172.18.45.6:53
+     31320100 00010000 00000000 026e7303 61667002 66720000 010001.
+ sendto=27
+ +0.000383
+ sendto fd=4 addr=172.18.45.6:53
+     31330100 00010000 00000000 046e6577 73036166 70026672 00000100 01.
+ sendto=29
+ +0.000389
+ sendto fd=4 addr=172.18.45.6:53
+     31340100 00010000 00000000 036e7332 12616765 6e636566 72616e63 65707265
+     73736503 636f6d00 00010001.
+ sendto=44
+ +0.000446
+ sendto fd=4 addr=172.18.45.6:53
+     31350100 00010000 00000000 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 03636f6d 00000100 01.
+ sendto=45
+ +0.000449
+ sendto fd=4 addr=172.18.45.6:53
+     31360100 00010000 00000000 036e7332 12616765 6e636566 72616e63 65707265
+     73736502 66720000 010001.
+ sendto=43
+ +0.000440
+ sendto fd=4 addr=172.18.45.6:53
+     31370100 00010000 00000000 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 02667200 00010001.
+ sendto=44
+ +0.000441
+ sendto fd=4 addr=172.18.45.6:53
+     31380100 00010000 00000000 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 03636f6d 00000100 01.
+ sendto=45
+ +0.000474
+ sendto fd=4 addr=172.18.45.6:53
+     31390100 00010000 00000000 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 6503636f 6d000001 0001.
+ sendto=46
+ +0.000451
+ sendto fd=4 addr=172.18.45.6:53
+     313a0100 00010000 00000000 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 02667200 00010001.
+ sendto=44
+ +0.000440
+ sendto fd=4 addr=172.18.45.6:53
+     313b0100 00010000 00000000 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 65026672 00000100 01.
+ sendto=45
+ +0.000439
+ sendto fd=4 addr=172.18.45.6:53
+     313c0100 00010000 00000000 036e7332 0a696d61 6765666f 72756d03 636f6d00
+     00010001.
+ sendto=36
+ +0.000413
+ sendto fd=4 addr=172.18.45.6:53
+     313d0100 00010000 00000000 046e6577 730a696d 61676566 6f72756d 03636f6d
+     00000100 01.
+ sendto=37
+ +0.000416
+ sendto fd=4 addr=172.18.45.6:53
+     313e0100 00010000 00000000 036e7332 0a696d61 6765666f 72756d02 746d0266
+     72000001 0001.
+ sendto=38
+ +0.000442
+ sendto fd=4 addr=172.18.45.6:53
+     313f0100 00010000 00000000 046e6577 730a696d 61676566 6f72756d 02746d02
+     66720000 010001.
+ sendto=39
+ +0.000418
+ sendto fd=4 addr=172.18.45.6:53
+     31400100 00010000 00000000 036e7332 0b6f6f68 2d6c6168 2d6c6168 03636f6d
+     00000100 01.
+ sendto=37
+ +0.000412
+ sendto fd=4 addr=172.18.45.6:53
+     31410100 00010000 00000000 036e7332 0b616670 73636965 6e636573 03636f6d
+     00000100 01.
+ sendto=37
+ +0.000413
+ sendto fd=4 addr=172.18.45.6:53
+     31420100 00010000 00000000 036e7332 06616670 646f6303 636f6d00 00010001.
+ sendto=32
+ +0.000394
+ sendto fd=4 addr=172.18.45.6:53
+     31430100 00010000 00000000 036e7332 09616670 2d6e6f74 65730363 6f6d0000
+     010001.
+ sendto=35
+ +0.000403
+ sendto fd=4 addr=172.18.45.6:53
+     31440100 00010000 00000000 036e7332 0a616670 2d646f6d 696e6f03 636f6d00
+     00010001.
+ sendto=36
+ +0.000407
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.990501
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-09491
+ sendto fd=4 addr=172.18.45.6:53
+     312f0100 00010000 00000000 026e7303 61667003 636f6d00 00010001.
+ sendto=28
+ +0.000642
+ sendto fd=4 addr=172.18.45.6:53
+     31300100 00010000 00000000 046e6577 73036166 7003636f 6d000001 0001.
+ sendto=30
+ +0.000399
+ sendto fd=4 addr=172.18.45.6:53
+     31310100 00010000 00000000 036e7332 03616670 02667200 00010001.
+ sendto=28
+ +0.000385
+ sendto fd=4 addr=172.18.45.6:53
+     31320100 00010000 00000000 026e7303 61667002 66720000 010001.
+ sendto=27
+ +0.000380
+ sendto fd=4 addr=172.18.45.6:53
+     31330100 00010000 00000000 046e6577 73036166 70026672 00000100 01.
+ sendto=29
+ +0.000388
+ sendto fd=4 addr=172.18.45.6:53
+     31340100 00010000 00000000 036e7332 12616765 6e636566 72616e63 65707265
+     73736503 636f6d00 00010001.
+ sendto=44
+ +0.000443
+ sendto fd=4 addr=172.18.45.6:53
+     31350100 00010000 00000000 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 03636f6d 00000100 01.
+ sendto=45
+ +0.000447
+ sendto fd=4 addr=172.18.45.6:53
+     31360100 00010000 00000000 036e7332 12616765 6e636566 72616e63 65707265
+     73736502 66720000 010001.
+ sendto=43
+ +0.000456
+ sendto fd=4 addr=172.18.45.6:53
+     31370100 00010000 00000000 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 02667200 00010001.
+ sendto=44
+ +0.000438
+ sendto fd=4 addr=172.18.45.6:53
+     31380100 00010000 00000000 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 03636f6d 00000100 01.
+ sendto=45
+ +0.000445
+ sendto fd=4 addr=172.18.45.6:53
+     31390100 00010000 00000000 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 6503636f 6d000001 0001.
+ sendto=46
+ +0.000447
+ sendto fd=4 addr=172.18.45.6:53
+     313a0100 00010000 00000000 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 02667200 00010001.
+ sendto=44
+ +0.000437
+ sendto fd=4 addr=172.18.45.6:53
+     313b0100 00010000 00000000 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 65026672 00000100 01.
+ sendto=45
+ +0.000438
+ sendto fd=4 addr=172.18.45.6:53
+     313c0100 00010000 00000000 036e7332 0a696d61 6765666f 72756d03 636f6d00
+     00010001.
+ sendto=36
+ +0.000434
+ sendto fd=4 addr=172.18.45.6:53
+     313d0100 00010000 00000000 046e6577 730a696d 61676566 6f72756d 03636f6d
+     00000100 01.
+ sendto=37
+ +0.000416
+ sendto fd=4 addr=172.18.45.6:53
+     313e0100 00010000 00000000 036e7332 0a696d61 6765666f 72756d02 746d0266
+     72000001 0001.
+ sendto=38
+ +0.000415
+ sendto fd=4 addr=172.18.45.6:53
+     313f0100 00010000 00000000 046e6577 730a696d 61676566 6f72756d 02746d02
+     66720000 010001.
+ sendto=39
+ +0.000416
+ sendto fd=4 addr=172.18.45.6:53
+     31400100 00010000 00000000 036e7332 0b6f6f68 2d6c6168 2d6c6168 03636f6d
+     00000100 01.
+ sendto=37
+ +0.000412
+ sendto fd=4 addr=172.18.45.6:53
+     31410100 00010000 00000000 036e7332 0b616670 73636965 6e636573 03636f6d
+     00000100 01.
+ sendto=37
+ +0.000414
+ sendto fd=4 addr=172.18.45.6:53
+     31420100 00010000 00000000 036e7332 06616670 646f6303 636f6d00 00010001.
+ sendto=32
+ +0.000392
+ sendto fd=4 addr=172.18.45.6:53
+     31430100 00010000 00000000 036e7332 09616670 2d6e6f74 65730363 6f6d0000
+     010001.
+ sendto=35
+ +0.000425
+ sendto fd=4 addr=172.18.45.6:53
+     31440100 00010000 00000000 036e7332 0a616670 2d646f6d 696e6f03 636f6d00
+     00010001.
+ sendto=36
+ +0.000409
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.990522
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-235306
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312f8580 00010001 00020002 026e7303 61667003 636f6d00 00010001 c00c0001
+     00010001 51800004 9e32cc04 03616670 03636f6d 00000200 01000151 80000603
+     6e7332c0 2cc02c00 02000100 01518000 06036e73 31c02cc0 3f000100 01000151
+     8000049e 32cc04c0 51000100 01000151 800004d0 dfa603.
+ +0.000734
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000269
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.224825
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.179062
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31448580 00010001 00020002 036e7332 0a616670 2d646f6d 696e6f03 636f6d00
+     00010001 c00c0001 00010001 51800004 9e32cc04 0a616670 2d646f6d 696e6f03
+     636f6d00 00020001 00015180 0002c00c c0340002 00010001 51800006 036e7331
+     c034c00c 00010001 00015180 00049e32 cc04c05c 00010001 00015180 0004d0df
+     a603.
+ +0.000758
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000284
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.044721
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038932
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31438580 00010001 00020002 036e7332 09616670 2d6e6f74 65730363 6f6d0000
+     010001c0 0c000100 01000151 8000049e 32cc0409 6166702d 6e6f7465 7303636f
+     6d000002 00010001 51800002 c00cc033 00020001 00015180 0006036e 7331c033
+     c00c0001 00010001 51800004 9e32cc04 c05a0001 00010001 51800004 d0dfa603.
+ +0.000729
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000258
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.004802
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.399140
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313a8180 00010001 00020002 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 02667200 00010001 c00c0001 00010005 46000004 9e32cc04 13616765
+     6e636566 72616e63 652d7072 65737365 02667200 00020001 00054600 0002c00c
+     c03c0002 00010005 46000006 036e7331 c03cc00c 00010001 00054600 00049e32
+     cc04c06c 00010001 00054600 0004d0df a603.
+ +0.000770
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000288
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.604604
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038862
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313d8580 00010001 00020002 046e6577 730a696d 61676566 6f72756d 03636f6d
+     00000100 01c00c00 01000100 01518000 049e32cc 040a696d 61676566 6f72756d
+     03636f6d 00000200 01000151 80000603 6e7332c0 35c03500 02000100 01518000
+     06036e73 31c035c0 4f000100 01000151 8000049e 32cc04c0 61000100 01000151
+     800004d0 dfa603.
+ +0.000714
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000248
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.564780
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-870685
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31358580 00010001 00020002 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 03636f6d 00000100 01c00c00 01000100 01518000 049e32cc 04126167
+     656e6365 6672616e 63657072 65737365 03636f6d 00000200 01000151 80000603
+     6e7332c0 3dc03d00 02000100 01518000 06036e73 31c03dc0 5f000100 01000151
+     8000049e 32cc04c0 71000100 01000151 800004d0 dfa603.
+ +0.000749
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000248
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.434468
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038661
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31348580 00010001 00020002 036e7332 12616765 6e636566 72616e63 65707265
+     73736503 636f6d00 00010001 c00c0001 00010001 51800004 9e32cc04 12616765
+     6e636566 72616e63 65707265 73736503 636f6d00 00020001 00015180 0002c00c
+     c03c0002 00010001 51800006 036e7331 c03cc00c 00010001 00015180 00049e32
+     cc04c06c 00010001 00015180 0004d0df a603.
+ +0.000722
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000266
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.394819
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.049154
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31368180 00010001 00020002 036e7332 12616765 6e636566 72616e63 65707265
+     73736502 66720000 010001c0 0c000100 01000546 0000049e 32cc0412 6167656e
+     63656672 616e6365 70726573 73650266 72000002 00010005 46000002 c00cc03b
+     00020001 00054600 0006036e 7331c03b c00c0001 00010005 46000004 9e32cc04
+     c06a0001 00010005 46000004 d0dfa603.
+ +0.000707
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000243
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.344715
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039336
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31388580 00010001 00020002 036e7332 13616765 6e636566 72616e63 652d7072
+     65737365 03636f6d 00000100 01c00c00 01000100 01518000 049e32cc 04136167
+     656e6365 6672616e 63652d70 72657373 6503636f 6d000002 00010001 51800002
+     c00cc03d 00020001 00015180 0006036e 7331c03d c00c0001 00010001 51800004
+     9e32cc04 c06e0001 00010001 51800004 d0dfa603.
+ +0.000695
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000267
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.304417
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.078532
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31308580 00010001 00020002 046e6577 73036166 7003636f 6d000001 0001c00c
+     00010001 00015180 00049e32 cc040361 66700363 6f6d0000 02000100 01518000
+     06036e73 32c02ec0 2e000200 01000151 80000603 6e7331c0 2ec04100 01000100
+     01518000 049e32cc 04c05300 01000100 01518000 04d0dfa6 03.
+ +0.000600
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000235
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.225050
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039210
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31318180 00010001 00020002 036e7332 03616670 02667200 00010001 c00c0001
+     00010005 46000004 9e32cc04 03616670 02667200 00020001 00054600 0002c00c
+     c02c0002 00010005 46000006 036e7331 c02cc00c 00010001 00054600 00049e32
+     cc04c04c 00010001 00054600 0004d0df a603.
+ +0.000589
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000236
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.185015
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.159098
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31378180 00010001 00010001 046e6577 73126167 656e6365 6672616e 63657072
+     65737365 02667200 00010001 c00c0001 00010000 00000004 9e32cc04 12616765
+     6e636566 72616e63 65707265 73736502 66720000 02000100 00000000 06036e73
+     31c03cc0 5d000100 01000000 000004d0 dfa603.
+ +0.000578
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000253
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.025086
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.025066
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=0.000020
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009997
+ sendto fd=4 addr=172.18.45.6:53
+     31320100 00010000 00000000 026e7303 61667002 66720000 010001.
+ sendto=27
+ +0.000458
+ sendto fd=4 addr=172.18.45.6:53
+     31330100 00010000 00000000 046e6577 73036166 70026672 00000100 01.
+ sendto=29
+ +0.000387
+ sendto fd=4 addr=172.18.45.6:53
+     31390100 00010000 00000000 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 6503636f 6d000001 0001.
+ sendto=46
+ +0.000441
+ sendto fd=4 addr=172.18.45.6:53
+     313b0100 00010000 00000000 046e6577 73136167 656e6365 6672616e 63652d70
+     72657373 65026672 00000100 01.
+ sendto=45
+ +0.000438
+ sendto fd=4 addr=172.18.45.6:53
+     313c0100 00010000 00000000 036e7332 0a696d61 6765666f 72756d03 636f6d00
+     00010001.
+ sendto=36
+ +0.000561
+ sendto fd=4 addr=172.18.45.6:53
+     313e0100 00010000 00000000 036e7332 0a696d61 6765666f 72756d02 746d0266
+     72000001 0001.
+ sendto=38
+ +0.000423
+ sendto fd=4 addr=172.18.45.6:53
+     313f0100 00010000 00000000 046e6577 730a696d 61676566 6f72756d 02746d02
+     66720000 010001.
+ sendto=39
+ +0.000446
+ sendto fd=4 addr=172.18.45.6:53
+     31400100 00010000 00000000 036e7332 0b6f6f68 2d6c6168 2d6c6168 03636f6d
+     00000100 01.
+ sendto=37
+ +0.000418
+ sendto fd=4 addr=172.18.45.6:53
+     31410100 00010000 00000000 036e7332 0b616670 73636965 6e636573 03636f6d
+     00000100 01.
+ sendto=37
+ +0.000584
+ sendto fd=4 addr=172.18.45.6:53
+     31420100 00010000 00000000 036e7332 06616670 646f6303 636f6d00 00010001.
+ sendto=32
+ +0.000560
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.995284
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000226
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313c8180 00010001 00020002 036e7332 0a696d61 6765666f 72756d03 636f6d00
+     00010001 c00c0001 00010001 409f0004 9e32cc04 0a696d61 6765666f 72756d03
+     434f4d00 00020001 0001517f 0002c00c c0340002 00010001 517f0006 036e7331
+     c034c00c 00010001 0001409f 00049e32 cc04c05c 00010001 0001517f 0004d0df
+     a603.
+ +0.000582
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000266
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.994210
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.168328
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31328180 00010001 00010001 026e7303 61667002 66720000 010001c0 0c000100
+     01000000 0000049e 32cc0403 61667002 66720000 02000100 00000000 06036e73
+     31c02bc0 3d000100 01000000 000004d0 dfa603.
+ +0.000470
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000252
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=1.825160
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.229075
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31428580 00010000 00010000 036e7332 06616670 646f6303 636f6d00 00010001
+     06616670 646f6303 636f6d00 00060001 00015180 002c0364 6e730876 6963746f
+     69726502 66720004 726f6f74 c03a7727 65890000 70800000 1c20004f 1a000001
+     5180.
+ +0.000492
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.001505
+ close fd=4
+ close=OK
+ +0.000260
+ close fd=5
+ close=OK
+ +0.000401
diff --git a/regress/case-norecurse3.err b/regress/case-norecurse3.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-norecurse3.out b/regress/case-norecurse3.out
new file mode 100644 (file)
index 0000000..f59ec8b
--- /dev/null
@@ -0,0 +1,32 @@
+adns debug: using nameserver 172.18.45.6
+2.203.156.195.in-addr.arpa1 flags 0 type 1 A(-) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 2 NS(raw) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 5 CNAME(-) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 6 SOA(raw) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 12 PTR(raw) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 13 HINFO(-) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 15 MX(raw) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 16 TXT(-) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 17 RP(raw) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 65537 A(addr) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 65538 NS(+addr) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 65548 PTR(checked) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 65551 MX(+addr) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 131078 SOA(822) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type 131089 RP(822) submitted
+2.203.156.195.in-addr.arpa1 flags 0 type A(-): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type RP(822): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type SOA(822): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type MX(+addr): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type PTR(checked): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type NS(+addr): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type A(addr): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type RP(raw): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type TXT(-): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type MX(raw): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type HINFO(-): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type PTR(raw): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type SOA(raw): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type CNAME(-): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+2.203.156.195.in-addr.arpa1 flags 0 type NS(raw): No such domain; nrrs=0; cname=$; owner=$; ttl=86400
+rc=0
diff --git a/regress/case-norecurse3.sys b/regress/case-norecurse3.sys
new file mode 100644 (file)
index 0000000..56651c2
--- /dev/null
@@ -0,0 +1,516 @@
+adnstest default -0x16
+2.203.156.195.in-addr.arpa1
+ start 939764258.086555
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000189
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000054
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000041
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000100 01.
+ sendto=45
+ +0.002044
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000133
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000200 01.
+ sendto=45
+ +0.001173
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000092
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000500 01.
+ sendto=45
+ +0.001197
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000095
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000600 01.
+ sendto=45
+ +0.001228
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000095
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000c00 01.
+ sendto=45
+ +0.001194
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000095
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000d00 01.
+ sendto=45
+ +0.001205
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000099
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000f00 01.
+ sendto=45
+ +0.001196
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000104
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001000 01.
+ sendto=45
+ +0.001186
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000122
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001100 01.
+ sendto=45
+ +0.001225
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000104
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000100 01.
+ sendto=45
+ +0.001179
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000112
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000200 01.
+ sendto=45
+ +0.001344
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000109
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000c00 01.
+ sendto=45
+ +0.001205
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000113
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000f00 01.
+ sendto=45
+ +0.001214
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000118
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000600 01.
+ sendto=45
+ +0.001221
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000120
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001100 01.
+ sendto=45
+ +0.001203
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000129
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.979346
+ select=0 rfds=[] wfds=[] efds=[]
+ +2.-26085
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.005431
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.009976
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000100 01.
+ sendto=45
+ +0.000545
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000200 01.
+ sendto=45
+ +0.000472
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000500 01.
+ sendto=45
+ +0.000438
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000600 01.
+ sendto=45
+ +0.000482
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000c00 01.
+ sendto=45
+ +0.000001
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000861
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008517
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000d00 01.
+ sendto=45
+ +0.000438
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000f00 01.
+ sendto=45
+ +0.000454
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001000 01.
+ sendto=45
+ +0.000434
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001100 01.
+ sendto=45
+ +0.000433
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000100 01.
+ sendto=45
+ +0.000435
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000200 01.
+ sendto=45
+ +0.000829
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000c00 01.
+ sendto=45
+ +0.000487
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000f00 01.
+ sendto=45
+ +0.000457
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000600 01.
+ sendto=45
+ +0.000430
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001100 01.
+ sendto=45
+ +0.000001
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.985143
+ select=0 rfds=[] wfds=[] efds=[]
+ +1.985166
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000100 01.
+ sendto=45
+ +0.000564
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000200 01.
+ sendto=45
+ +0.000441
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000500 01.
+ sendto=45
+ +0.000455
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000600 01.
+ sendto=45
+ +0.000482
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000145
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000c00 01.
+ sendto=45
+ +0.000448
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.007898
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.008039
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000d00 01.
+ sendto=45
+ +0.000434
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000f00 01.
+ sendto=45
+ +0.000431
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001000 01.
+ sendto=45
+ +0.000454
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001100 01.
+ sendto=45
+ +0.000434
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000100 01.
+ sendto=45
+ +0.000434
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000200 01.
+ sendto=45
+ +0.000428
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000268
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.006792
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000c00 01.
+ sendto=45
+ +0.000445
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000f00 01.
+ sendto=45
+ +0.000431
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000600 01.
+ sendto=45
+ +0.000461
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001100 01.
+ sendto=45
+ +0.000432
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.978249
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.291904
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000100 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000689
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000167
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.685489
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.038802
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001100 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000514
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000165
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.646008
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.099281
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000600 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000520
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000145
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.546062
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039368
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000f00 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000535
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000134
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.506025
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039372
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000c00 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000507
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000132
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.466014
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039305
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000200 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000538
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000132
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.426039
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039291
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000100 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000502
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000132
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.386114
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039825
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001100 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000500
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000131
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.345658
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039138
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00001000 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000498
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000132
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.305890
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039192
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000f00 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000495
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000130
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.266073
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039369
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000d00 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000494
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000149
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.226061
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039356
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000c00 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000493
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000130
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.186082
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039358
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000600 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000490
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000157
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.146077
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.039772
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000500 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000496
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000131
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.105678
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-960894
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208583 00010000 00010000 01320332 30330331 35360331 39350769 6e2d6164
+     64720561 72706131 00000200 01000006 00010001 5180003e 01410c52 4f4f542d
+     53455256 45525303 4e455400 0a686f73 746d6173 74657208 696e7465 726e6963
+     c0477727 dd100000 07080000 03840009 3a800001 5180.
+ +0.000487
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000143
+ close fd=4
+ close=OK
+ +0.000235
index 7342fde630638bfd622db33c23b6c3cac6e77a52..ab58174776ea5db9b6526a0b0e0105109e016e82 100644 (file)
@@ -1,14 +1,14 @@
-default
+adnstest default
 :1 chiark.greenend.org.uk
  start 912888966.802483
  socket type=SOCK_DGRAM
  socket=4
  +0.000204
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
+ fcntl=~O_NONBLOCK&...
  +0.000670
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
  +0.000072
  sendto fd=4 addr=172.18.45.6:53
      311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
index 6953cea6d403782eb8aaf90506c47ce7aa29439c..9cb3358b2514975857e7fad07455dd0e7bf3c83d 100644 (file)
@@ -1,5 +1,36 @@
 adns debug: using nameserver 172.18.45.6
-chiark.greenend.org.uk flags 0 type 1 A(-) submitted
-chiark.greenend.org.uk flags 0 type A(-): OK; nrrs=1; cname=$; owner=$; ttl=86400
+chiark.greenend.org.uk flags 4 type 1 A(-) submitted
+chiark.greenend.org.uk flags 4 type 2 NS(raw) submitted
+chiark.greenend.org.uk flags 4 type 5 CNAME(-) submitted
+chiark.greenend.org.uk flags 4 type 6 SOA(raw) submitted
+chiark.greenend.org.uk flags 4 type 12 PTR(raw) submitted
+chiark.greenend.org.uk flags 4 type 13 HINFO(-) submitted
+chiark.greenend.org.uk flags 4 type 15 MX(raw) submitted
+chiark.greenend.org.uk flags 4 type 16 TXT(-) submitted
+chiark.greenend.org.uk flags 4 type 17 RP(raw) submitted
+chiark.greenend.org.uk flags 4 type 65537 A(addr) submitted
+chiark.greenend.org.uk flags 4 type 65538 NS(+addr) submitted
+chiark.greenend.org.uk flags 4 type 65548 PTR(checked) submitted
+chiark.greenend.org.uk flags 4 type 65551 MX(+addr) submitted
+chiark.greenend.org.uk flags 4 type 131078 SOA(822) submitted
+chiark.greenend.org.uk flags 4 type 131089 RP(822) submitted
+chiark.greenend.org.uk flags 4 type A(-): OK; nrrs=1; cname=$; owner=chiark.greenend.org.uk; ttl=86400
  195.224.76.132
+chiark.greenend.org.uk flags 4 type NS(raw): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+chiark.greenend.org.uk flags 4 type CNAME(-): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+chiark.greenend.org.uk flags 4 type SOA(raw): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+chiark.greenend.org.uk flags 4 type PTR(raw): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+chiark.greenend.org.uk flags 4 type HINFO(-): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+chiark.greenend.org.uk flags 4 type MX(raw): OK; nrrs=1; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+ 5 permutation-city.greenend.org.uk
+chiark.greenend.org.uk flags 4 type TXT(-): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+chiark.greenend.org.uk flags 4 type RP(raw): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+chiark.greenend.org.uk flags 4 type A(addr): OK; nrrs=1; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+ INET 195.224.76.132
+chiark.greenend.org.uk flags 4 type NS(+addr): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+chiark.greenend.org.uk flags 4 type PTR(checked): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+chiark.greenend.org.uk flags 4 type MX(+addr): OK; nrrs=1; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+ 5 permutation-city.greenend.org.uk ok 0 ok "OK" ( INET 195.224.76.134 )
+chiark.greenend.org.uk flags 4 type SOA(822): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+chiark.greenend.org.uk flags 4 type RP(822): No such data; nrrs=0; cname=$; owner=chiark.greenend.org.uk; ttl=86400
 rc=0
index fb1ae3d731bb1f2813d138de84fd1b18aa2442ea..aecce8007302952f08ae462d8a22471509ade169 100644 (file)
@@ -1,23 +1,93 @@
-default
-:1 chiark.greenend.org.uk
- start 924360510.895567
+adnstest default
+4/chiark.greenend.org.uk
+ start 933206012.504679
  socket type=SOCK_DGRAM
  socket=4
- +0.000363
+ +0.000275
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
- +0.000092
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
- +0.000067
+ fcntl=~O_NONBLOCK&...
+ +0.000094
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000073
  sendto fd=4 addr=172.18.45.6:53
      311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
      02756b00 00010001.
  sendto=40
- +0.001845
- select max=5 rfds=[4] wfds=[] efds=[] to=1.998155
+ +0.001715
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00020001.
+ sendto=40
+ +0.001142
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00050001.
+ sendto=40
+ +0.001143
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00060001.
+ sendto=40
+ +0.001213
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 000c0001.
+ sendto=40
+ +0.001183
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 000d0001.
+ sendto=40
+ +0.001273
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 000f0001.
+ sendto=40
+ +0.001188
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00100001.
+ sendto=40
+ +0.001185
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00110001.
+ sendto=40
+ +0.001192
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.001315
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00020001.
+ sendto=40
+ +0.001206
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 000c0001.
+ sendto=40
+ +0.001199
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 000f0001.
+ sendto=40
+ +0.001162
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00060001.
+ sendto=40
+ +0.001234
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00110001.
+ sendto=40
+ +0.001320
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.981330
  select=1 rfds=[4] wfds=[] efds=[]
- +0.005511
+ +0.000364
  recvfrom fd=4 buflen=512 *addrlen=16
  recvfrom=OK addr=172.18.45.6:53
      311f8580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
@@ -25,10 +95,191 @@ default
      64036f72 6702756b 00000200 01000151 80001103 6e73300a 72656c61 74697669
      7479c038 c0380002 00010001 51800006 036e7331 c057c053 00010001 00015180
      0004ac12 2d06c070 00010001 00015180 0004ac12 2d41.
- +0.000881
+ +0.001489
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00020001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.001437
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000394
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.980503
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.001013
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00050001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.000770
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000496
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.979367
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.001726
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00060001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.000812
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000408
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.977634
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002560
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 000c0001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.000777
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000403
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.975077
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002559
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 000d0001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.000960
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000412
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.972419
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004697
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258580 00010001 00020003 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 000f0001 c00c000f 00010001 51800024 00051070 65726d75 74617469
+     6f6e2d63 69747908 67726565 6e656e64 036f7267 02756b00 c0470002 00010001
+     51800011 036e7330 0a72656c 61746976 697479c0 47c04700 02000100 01518000
+     06036e73 31c068c0 36000100 01000151 800004c3 e04c86c0 64000100 01000151
+     800004ac 122d06c0 81000100 01000151 800004ac 122d41.
+ +0.001256
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000769
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.966885
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.001768
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00100001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.001528
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000443
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.964331
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.001739
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00110001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.000776
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000429
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.962579
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004212
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001 c00c0001 00010001 51800004 c3e04c84 08677265 656e656e
+     64036f72 6702756b 00000200 01000151 80001103 6e73300a 72656c61 74697669
+     7479c038 c0380002 00010001 51800006 036e7331 c057c053 00010001 00015180
+     0004ac12 2d06c070 00010001 00015180 0004ac12 2d41.
+ +0.001050
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000589
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.958043
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002059
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00020001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.000776
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000435
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.955979
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002598
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 000c0001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.000777
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000396
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.953407
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004872
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8580 00010001 00020003 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 000f0001 c00c000f 00010001 51800024 00051070 65726d75 74617469
+     6f6e2d63 69747908 67726565 6e656e64 036f7267 02756b00 c0470002 00010001
+     51800011 036e7330 0a72656c 61746976 697479c0 47c04700 02000100 01518000
+     06036e73 31c068c0 36000100 01000151 800004c3 e04c86c0 64000100 01000151
+     800004ac 122d06c0 81000100 01000151 800004ac 122d41.
+ +0.001252
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000950
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.947495
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.001580
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00060001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.000780
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000401
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.945968
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.002592
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8580 00010000 00010000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00110001 08677265 656e656e 64036f72 6702756b 00000600 01000151
+     80002602 6e73c00c 0a686f73 746d6173 746572c0 2877276a 9c000070 8000001c
+     2000093a 80000151 80.
+ +0.000794
  recvfrom fd=4 buflen=512 *addrlen=16
  recvfrom=EAGAIN
  +0.000441
  close fd=4
  close=OK
- +0.000218
+ +0.000387
diff --git a/regress/case-poll.err b/regress/case-poll.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-poll.out b/regress/case-poll.out
new file mode 100644 (file)
index 0000000..6953cea
--- /dev/null
@@ -0,0 +1,5 @@
+adns debug: using nameserver 172.18.45.6
+chiark.greenend.org.uk flags 0 type 1 A(-) submitted
+chiark.greenend.org.uk flags 0 type A(-): OK; nrrs=1; cname=$; owner=$; ttl=86400
+ 195.224.76.132
+rc=0
diff --git a/regress/case-poll.sys b/regress/case-poll.sys
new file mode 100644 (file)
index 0000000..a01e333
--- /dev/null
@@ -0,0 +1,34 @@
+adnstest default -,p
+:1 chiark.greenend.org.uk
+ start 931719947.391142
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000208
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000087
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000066
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000592
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=1 fds=[{fd=4, events=POLLIN, revents=POLLIN}]
+ +0.006530
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001 c00c0001 00010001 51800004 c3e04c84 08677265 656e656e
+     64036f72 6702756b 00000200 01000151 80001103 6e73300a 72656c61 74697669
+     7479c038 c0380002 00010001 51800006 036e7331 c057c053 00010001 00015180
+     0004ac12 2d06c070 00010001 00015180 0004ac12 2d41.
+ +0.001044
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000211
+ close fd=4
+ close=OK
+ +0.000248
diff --git a/regress/case-polltimeout.err b/regress/case-polltimeout.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-polltimeout.out b/regress/case-polltimeout.out
new file mode 100644 (file)
index 0000000..a3f7495
--- /dev/null
@@ -0,0 +1,4 @@
+adns debug: using nameserver 172.18.45.36
+chiark.greenend.org.uk flags 0 type 1 A(-) submitted
+chiark.greenend.org.uk flags 0 type A(-): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+rc=0
diff --git a/regress/case-polltimeout.sys b/regress/case-polltimeout.sys
new file mode 100644 (file)
index 0000000..3da57c0
--- /dev/null
@@ -0,0 +1,135 @@
+adnstest noserver -,p
+:1 chiark.greenend.org.uk
+ start 931719968.733439
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000199
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000087
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000067
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000790
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009031
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000436
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009093
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000519
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.008993
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000500
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009010
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000486
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009050
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000485
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009014
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000485
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009045
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000451
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009050
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000483
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009042
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000433
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009083
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000521
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009017
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000442
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009058
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000510
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009012
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000436
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.009085
+ sendto fd=4 addr=172.18.45.36:53
+     311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000514
+ poll fds=[{fd=4, events=POLLIN, revents=0}] timeout=2000
+ poll=0 fds=[{fd=4, events=POLLIN, revents=0}]
+ +2.008998
+ close fd=4
+ close=OK
+ +0.000302
diff --git a/regress/case-ptrbaddom.err b/regress/case-ptrbaddom.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-ptrbaddom.out b/regress/case-ptrbaddom.out
new file mode 100644 (file)
index 0000000..3be9371
--- /dev/null
@@ -0,0 +1,7 @@
+adns debug: using nameserver 172.18.45.6
+37.45.18.172.in-addr.arpa.test.iwj.relativity.greenend.org.uk. flags 0 type 12 PTR(raw) submitted
+37.45.18.172.in-addr.arpa.test.iwj.relativity.greenend.org.uk. flags 0 type 65548 PTR(checked) submitted
+37.45.18.172.in-addr.arpa.test.iwj.relativity.greenend.org.uk. flags 0 type PTR(raw): OK; nrrs=1; cname=$; owner=$; ttl=60
+ ptr.test.iwj.relativity.greenend.org.uk
+37.45.18.172.in-addr.arpa.test.iwj.relativity.greenend.org.uk. flags 0 type PTR(checked): Domain invalid for particular DNS query type; nrrs=0; cname=$; owner=$; ttl=60
+rc=0
diff --git a/regress/case-ptrbaddom.sys b/regress/case-ptrbaddom.sys
new file mode 100644 (file)
index 0000000..11f376b
--- /dev/null
@@ -0,0 +1,51 @@
+adnstest default
+:12,65548 37.45.18.172.in-addr.arpa.test.iwj.relativity.greenend.org.uk.
+ start 951960654.608219
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000194
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000055
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000035
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 02333702 34350231 38033137 3207696e 2d616464
+     72046172 70610474 65737403 69776a0a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 0c0001.
+ sendto=79
+ +0.001355
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 02333702 34350231 38033137 3207696e 2d616464
+     72046172 70610474 65737403 69776a0a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 0c0001.
+ sendto=79
+ +0.000776
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997869
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000258
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00010001 02333702 34350231 38033137 3207696e 2d616464
+     72046172 70610474 65737403 69776a0a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 0c0001c0 0c000c00 01000000 3c002903 70747204
+     74657374 0369776a 0a72656c 61746976 69747908 67726565 6e656e64 036f7267
+     02756b00 c05f0002 00010000 003c0006 036e7330 c068c090 00010001 00015180
+     0004ac12 2d06.
+ +0.000613
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010001 00010001 02333702 34350231 38033137 3207696e 2d616464
+     72046172 70610474 65737403 69776a0a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 0c0001c0 0c000c00 01000000 3c002903 70747204
+     74657374 0369776a 0a72656c 61746976 69747908 67726565 6e656e64 036f7267
+     02756b00 c05f0002 00010000 003c0006 036e7330 c068c090 00010001 00015180
+     0004ac12 2d06.
+ +0.000711
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000133
+ close fd=4
+ close=OK
+ +0.000187
diff --git a/regress/case-quote.err b/regress/case-quote.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-quote.out b/regress/case-quote.out
new file mode 100644 (file)
index 0000000..a72dcd9
--- /dev/null
@@ -0,0 +1,28 @@
+adns debug: using nameserver 172.18.45.6
+hyphen.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+dot.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+plus.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+slash.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+underscore.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+quote.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+backslash.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+null.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+space.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+hash.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+del.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+meta-null.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+meta-del.cname.test.iwj.relativity.greenend.org.uk flags 0 type 1 A(-) submitted
+hyphen.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a-b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+dot.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a\.b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+plus.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a+b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+slash.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a/b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+underscore.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a_b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+quote.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a\"b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+backslash.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a\\b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+null.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a\000b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+space.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a\040b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+hash.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a\#b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+del.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a\177b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+meta-null.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a\310b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+meta-del.cname.test.iwj.relativity.greenend.org.uk flags 0 type A(-): No such domain; nrrs=0; cname=a\377b.cname.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+rc=0
diff --git a/regress/case-quote.sys b/regress/case-quote.sys
new file mode 100644 (file)
index 0000000..0fec635
--- /dev/null
@@ -0,0 +1,211 @@
+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
+ start 951958420.936685
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000229
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000057
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000034
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 06687970 68656e05 636e616d 65047465 73740369
+     776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000001
+     0001.
+ sendto=66
+ +0.001345
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 03646f74 05636e61 6d650474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=63
+ +0.000708
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 04706c75 7305636e 616d6504 74657374 0369776a
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 00010001.
+ sendto=64
+ +0.000669
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 05736c61 73680563 6e616d65 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=65
+ +0.000670
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 0a756e64 65727363 6f726505 636e616d 65047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001.
+ sendto=70
+ +0.000690
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 0571756f 74650563 6e616d65 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=65
+ +0.000699
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 09626163 6b736c61 73680563 6e616d65 04746573
+     74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000100 01.
+ sendto=69
+ +0.000911
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 046e756c 6c05636e 616d6504 74657374 0369776a
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 00010001.
+ sendto=64
+ +0.000831
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 05737061 63650563 6e616d65 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000100
+     01.
+ sendto=65
+ +0.000684
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 04686173 6805636e 616d6504 74657374 0369776a
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 00010001.
+ sendto=64
+ +0.000672
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 0364656c 05636e61 6d650474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ sendto=63
+ +0.000715
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 096d6574 612d6e75 6c6c0563 6e616d65 04746573
+     74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000100 01.
+ sendto=69
+ +0.000695
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 086d6574 612d6465 6c05636e 616d6504 74657374
+     0369776a 0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00
+     00010001.
+ sendto=68
+ +0.000695
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.990016
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000248
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8583 00010001 00010000 06687970 68656e05 636e616d 65047465 73740369
+     776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b000001
+     0001c00c 00050001 0000003c 002f0361 2d620563 6e616d65 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00c05800
+     06000100 00003c00 27036e73 30c0610a 686f7374 6d617374 6572c061 00000023
+     00000e10 00000078 0064c800 0000003c.
+ +0.000645
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208583 00010001 00010000 03646f74 05636e61 6d650474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001c0
+     0c000500 01000000 3c002f03 612e6205 636e616d 65047465 73740369 776a0a72
+     656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b00c055 00060001
+     0000003c 0027036e 7330c05e 0a686f73 746d6173 746572c0 5e000000 2300000e
+     10000000 780064c8 00000000 3c.
+ +0.001014
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218583 00010001 00010000 04706c75 7305636e 616d6504 74657374 0369776a
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 00010001
+     c00c0005 00010000 003c002f 03612b62 05636e61 6d650474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b00c0 56000600
+     01000000 3c002703 6e7330c0 5f0a686f 73746d61 73746572 c05f0000 00230000
+     0e100000 00780064 c8000000 003c.
+ +0.000717
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228583 00010001 00010000 05736c61 73680563 6e616d65 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000100
+     01c00c00 05000100 00003c00 2f03612f 6205636e 616d6504 74657374 0369776a
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 c0570006
+     00010000 003c0027 036e7330 c0600a68 6f73746d 61737465 72c06000 00002300
+     000e1000 00007800 64c80000 00003c.
+ +0.000666
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238583 00010001 00010000 0a756e64 65727363 6f726505 636e616d 65047465
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000001 0001c00c 00050001 0000003c 002f0361 5f620563 6e616d65 04746573
+     74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00c05c00 06000100 00003c00 27036e73 30c0650a 686f7374 6d617374 6572c065
+     00000023 00000e10 00000078 0064c800 0000003c.
+ +0.000663
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248583 00010001 00010000 0571756f 74650563 6e616d65 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000100
+     01c00c00 05000100 00003c00 2f036122 6205636e 616d6504 74657374 0369776a
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 c0570006
+     00010000 003c0027 036e7330 c0600a68 6f73746d 61737465 72c06000 00002300
+     000e1000 00007800 64c80000 00003c.
+ +0.000667
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258583 00010001 00010000 09626163 6b736c61 73680563 6e616d65 04746573
+     74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000100 01c00c00 05000100 00003c00 2f03615c 6205636e 616d6504 74657374
+     0369776a 0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00
+     c05b0006 00010000 003c0027 036e7330 c0640a68 6f73746d 61737465 72c06400
+     00002300 000e1000 00007800 64c80000 00003c.
+ +0.000663
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268583 00010001 00010000 046e756c 6c05636e 616d6504 74657374 0369776a
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 00010001
+     c00c0005 00010000 003c002f 03610062 05636e61 6d650474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b00c0 56000600
+     01000000 3c002703 6e7330c0 5f0a686f 73746d61 73746572 c05f0000 00230000
+     0e100000 00780064 c8000000 003c.
+ +0.000670
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278583 00010001 00010000 05737061 63650563 6e616d65 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00000100
+     01c00c00 05000100 00003c00 2f036120 6205636e 616d6504 74657374 0369776a
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 c0570006
+     00010000 003c0027 036e7330 c0600a68 6f73746d 61737465 72c06000 00002300
+     000e1000 00007800 64c80000 00003c.
+ +0.000651
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288583 00010001 00010000 04686173 6805636e 616d6504 74657374 0369776a
+     0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00 00010001
+     c00c0005 00010000 003c002f 03612362 05636e61 6d650474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b00c0 56000600
+     01000000 3c002703 6e7330c0 5f0a686f 73746d61 73746572 c05f0000 00230000
+     0e100000 00780064 c8000000 003c.
+ +0.000664
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298583 00010001 00010000 0364656c 05636e61 6d650474 65737403 69776a0a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0000 010001c0
+     0c000500 01000000 3c002f03 617f6205 636e616d 65047465 73740369 776a0a72
+     656c6174 69766974 79086772 65656e65 6e64036f 72670275 6b00c055 00060001
+     0000003c 0027036e 7330c05e 0a686f73 746d6173 746572c0 5e000000 2300000e
+     10000000 780064c8 00000000 3c.
+ +0.000646
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8583 00010001 00010000 096d6574 612d6e75 6c6c0563 6e616d65 04746573
+     74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000100 01c00c00 05000100 00003c00 2f0361c8 6205636e 616d6504 74657374
+     0369776a 0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00
+     c05b0006 00010000 003c0027 036e7330 c0640a68 6f73746d 61737465 72c06400
+     00002300 000e1000 00007800 64c80000 00003c.
+ +0.000708
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8583 00010001 00010000 086d6574 612d6465 6c05636e 616d6504 74657374
+     0369776a 0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00
+     00010001 c00c0005 00010000 003c002f 0361ff62 05636e61 6d650474 65737403
+     69776a0a 72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b00c0
+     5a000600 01000000 3c002703 6e7330c0 630a686f 73746d61 73746572 c0630000
+     00230000 0e100000 00780064 c8000000 003c.
+ +0.000665
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000123
+ close fd=4
+ close=OK
+ +0.000708
index 575646dbdd8c88b3b7ca2e21c27f9f57e2d42d26..d78d4698c9c3da74a8d81b99aaec882c69be02e0 100644 (file)
@@ -2,7 +2,7 @@ adns debug: using nameserver 172.18.45.6
 . flags 0 type 131078 SOA(822) submitted
 . flags 1 type 131078 SOA(822) submitted
 . flags 0 type SOA(822): OK; nrrs=1; cname=$; owner=$; ttl=60222
"A.ROOT-SERVERS.NET" "hostmaster@INTERNIC.NET" 1999041600 1800 900 604800 86400
A.ROOT-SERVERS.NET hostmaster@INTERNIC.NET 1999041600 1800 900 604800 86400
 . flags 1 type SOA(822): OK; nrrs=1; cname=$; owner=$; ttl=57210
"A.ROOT-SERVERS.NET" "hostmaster@INTERNIC.NET" 1999041600 1800 900 604800 86400
A.ROOT-SERVERS.NET hostmaster@INTERNIC.NET 1999041600 1800 900 604800 86400
 rc=0
index f0386d2241a1c15a297f4e38e8d97247e27fcaf0..1a91711480a8a3a15cf71728a4ed5bb364f0b81b 100644 (file)
@@ -1,14 +1,14 @@
-default
+adnstest default
 :131078 . 1/.
  start 924364442.672925
  socket type=SOCK_DGRAM
  socket=4
  +0.000222
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
+ fcntl=~O_NONBLOCK&...
  +0.000085
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
  +0.000069
  sendto fd=4 addr=172.18.45.6:53
      311f0100 00010000 00000000 00000600 01.
diff --git a/regress/case-rootqueryall-as.err b/regress/case-rootqueryall-as.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-rootqueryall-as.out b/regress/case-rootqueryall-as.out
new file mode 100644 (file)
index 0000000..dcfbc8e
--- /dev/null
@@ -0,0 +1,118 @@
+adns debug: using nameserver 172.18.45.6
+. flags 0 type 1 A(-) submitted
+. flags 0 type 2 NS(raw) submitted
+. flags 0 type 5 CNAME(-) submitted
+. flags 0 type 6 SOA(raw) submitted
+. flags 0 type 12 PTR(raw) submitted
+. flags 0 type 13 HINFO(-) submitted
+. flags 0 type 15 MX(raw) submitted
+. flags 0 type 16 TXT(-) submitted
+. flags 0 type 17 RP(raw) submitted
+. flags 0 type 65537 A(addr) submitted
+. flags 0 type 65538 NS(+addr) submitted
+. flags 0 type 65548 PTR(checked) submitted
+. flags 0 type 65551 MX(+addr) submitted
+. flags 0 type 131078 SOA(822) submitted
+. flags 0 type 131089 RP(822) submitted
+. flags 1 type 1 A(-) submitted
+. flags 1 type 2 NS(raw) submitted
+. flags 1 type 5 CNAME(-) submitted
+. flags 1 type 6 SOA(raw) submitted
+. flags 1 type 12 PTR(raw) submitted
+. flags 1 type 13 HINFO(-) submitted
+. flags 1 type 15 MX(raw) submitted
+. flags 1 type 16 TXT(-) submitted
+. flags 1 type 17 RP(raw) submitted
+. flags 1 type 65537 A(addr) submitted
+. flags 1 type 65538 NS(+addr) submitted
+. flags 1 type 65548 PTR(checked) submitted
+. flags 1 type 65551 MX(+addr) submitted
+. flags 1 type 131078 SOA(822) submitted
+. flags 1 type 131089 RP(822) submitted
+. flags 0 type A(-): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 0 type NS(raw): OK; nrrs=13; cname=$; owner=$; ttl=518399
+ E.ROOT-SERVERS.NET
+ I.ROOT-SERVERS.NET
+ F.ROOT-SERVERS.NET
+ G.ROOT-SERVERS.NET
+ J.ROOT-SERVERS.NET
+ K.ROOT-SERVERS.NET
+ L.ROOT-SERVERS.NET
+ M.ROOT-SERVERS.NET
+ A.ROOT-SERVERS.NET
+ H.ROOT-SERVERS.NET
+ B.ROOT-SERVERS.NET
+ C.ROOT-SERVERS.NET
+ D.ROOT-SERVERS.NET
+. flags 0 type SOA(raw): OK; nrrs=1; cname=$; owner=$; ttl=82079
+ A.ROOT-SERVERS.NET hostmaster.INTERNIC.NET 1999071300 1800 900 604800 86400
+. flags 0 type PTR(raw): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 0 type HINFO(-): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 0 type MX(raw): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 0 type TXT(-): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 0 type RP(raw): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 0 type A(addr): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 0 type NS(+addr): OK; nrrs=13; cname=$; owner=$; ttl=518399
+ I.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.36.148.17 )
+ F.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.5.5.241 )
+ G.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.112.36.4 )
+ J.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.41.0.10 )
+ K.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 193.0.14.129 )
+ L.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.32.64.12 )
+ M.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 202.12.27.33 )
+ A.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.41.0.4 )
+ H.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.63.2.53 )
+ B.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.9.0.107 )
+ C.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.33.4.12 )
+ D.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.8.10.90 )
+ E.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.203.230.10 )
+. flags 0 type PTR(checked): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 0 type MX(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 0 type SOA(822): OK; nrrs=1; cname=$; owner=$; ttl=77975
+ A.ROOT-SERVERS.NET hostmaster@INTERNIC.NET 1999071300 1800 900 604800 86400
+. flags 0 type RP(822): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 1 type A(-): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 1 type NS(raw): OK; nrrs=13; cname=$; owner=$; ttl=518399
+ F.ROOT-SERVERS.NET
+ G.ROOT-SERVERS.NET
+ J.ROOT-SERVERS.NET
+ K.ROOT-SERVERS.NET
+ L.ROOT-SERVERS.NET
+ M.ROOT-SERVERS.NET
+ A.ROOT-SERVERS.NET
+ H.ROOT-SERVERS.NET
+ B.ROOT-SERVERS.NET
+ C.ROOT-SERVERS.NET
+ D.ROOT-SERVERS.NET
+ E.ROOT-SERVERS.NET
+ I.ROOT-SERVERS.NET
+. flags 1 type SOA(raw): OK; nrrs=1; cname=$; owner=$; ttl=74076
+ A.ROOT-SERVERS.NET hostmaster.INTERNIC.NET 1999071300 1800 900 604800 86400
+. flags 1 type PTR(raw): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 1 type HINFO(-): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 1 type MX(raw): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 1 type TXT(-): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 1 type RP(raw): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 1 type A(addr): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 1 type NS(+addr): OK; nrrs=13; cname=$; owner=$; ttl=518399
+ G.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.112.36.4 )
+ J.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.41.0.10 )
+ K.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 193.0.14.129 )
+ L.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.32.64.12 )
+ M.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 202.12.27.33 )
+ A.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.41.0.4 )
+ H.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.63.2.53 )
+ B.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.9.0.107 )
+ C.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.33.4.12 )
+ D.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.8.10.90 )
+ E.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.203.230.10 )
+ I.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.36.148.17 )
+ F.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.5.5.241 )
+. flags 1 type PTR(checked): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 1 type MX(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 1 type SOA(822): OK; nrrs=1; cname=$; owner=$; ttl=70372
+ A.ROOT-SERVERS.NET hostmaster@INTERNIC.NET 1999071300 1800 900 604800 86400
+. flags 1 type RP(822): No such data; nrrs=0; cname=$; owner=$; ttl=599
+. flags 0 type CNAME(-): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+. flags 1 type CNAME(-): No such data; nrrs=0; cname=$; owner=$; ttl=86400
+rc=0
diff --git a/regress/case-rootqueryall-as.sys b/regress/case-rootqueryall-as.sys
new file mode 100644 (file)
index 0000000..745100d
--- /dev/null
@@ -0,0 +1,579 @@
+adnstest default
+. 1/.
+ start 931992019.753022
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000216
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000082
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000065
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 00000100 01.
+ sendto=17
+ +0.000454
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 00000200 01.
+ sendto=17
+ +0.000348
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 00000500 01.
+ sendto=17
+ +0.000303
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 00000600 01.
+ sendto=17
+ +0.000298
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 00000c00 01.
+ sendto=17
+ +0.000298
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 00000d00 01.
+ sendto=17
+ +0.000375
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 00000f00 01.
+ sendto=17
+ +0.000301
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 00001000 01.
+ sendto=17
+ +0.000299
+ sendto fd=4 addr=172.18.45.6:53
+     31270100 00010000 00000000 00001100 01.
+ sendto=17
+ +0.000351
+ sendto fd=4 addr=172.18.45.6:53
+     31280100 00010000 00000000 00000100 01.
+ sendto=17
+ +0.000868
+ sendto fd=4 addr=172.18.45.6:53
+     31290100 00010000 00000000 00000200 01.
+ sendto=17
+ +0.000318
+ sendto fd=4 addr=172.18.45.6:53
+     312a0100 00010000 00000000 00000c00 01.
+ sendto=17
+ +0.000299
+ sendto fd=4 addr=172.18.45.6:53
+     312b0100 00010000 00000000 00000f00 01.
+ sendto=17
+ +0.000299
+ sendto fd=4 addr=172.18.45.6:53
+     312c0100 00010000 00000000 00000600 01.
+ sendto=17
+ +0.000297
+ sendto fd=4 addr=172.18.45.6:53
+     312d0100 00010000 00000000 00001100 01.
+ sendto=17
+ +0.000297
+ sendto fd=4 addr=172.18.45.6:53
+     312e0100 00010000 00000000 00000100 01.
+ sendto=17
+ +0.000307
+ sendto fd=4 addr=172.18.45.6:53
+     312f0100 00010000 00000000 00000200 01.
+ sendto=17
+ +0.000299
+ sendto fd=4 addr=172.18.45.6:53
+     31300100 00010000 00000000 00000500 01.
+ sendto=17
+ +0.000298
+ sendto fd=4 addr=172.18.45.6:53
+     31310100 00010000 00000000 00000600 01.
+ sendto=17
+ +0.000330
+ sendto fd=4 addr=172.18.45.6:53
+     31320100 00010000 00000000 00000c00 01.
+ sendto=17
+ +0.000323
+ sendto fd=4 addr=172.18.45.6:53
+     31330100 00010000 00000000 00000d00 01.
+ sendto=17
+ +0.000384
+ sendto fd=4 addr=172.18.45.6:53
+     31340100 00010000 00000000 00000f00 01.
+ sendto=17
+ +0.000302
+ sendto fd=4 addr=172.18.45.6:53
+     31350100 00010000 00000000 00001000 01.
+ sendto=17
+ +0.000300
+ sendto fd=4 addr=172.18.45.6:53
+     31360100 00010000 00000000 00001100 01.
+ sendto=17
+ +0.000296
+ sendto fd=4 addr=172.18.45.6:53
+     31370100 00010000 00000000 00000100 01.
+ sendto=17
+ +0.000298
+ sendto fd=4 addr=172.18.45.6:53
+     31380100 00010000 00000000 00000200 01.
+ sendto=17
+ +0.000298
+ sendto fd=4 addr=172.18.45.6:53
+     31390100 00010000 00000000 00000c00 01.
+ sendto=17
+ +0.000297
+ sendto fd=4 addr=172.18.45.6:53
+     313a0100 00010000 00000000 00000f00 01.
+ sendto=17
+ +0.000296
+ sendto fd=4 addr=172.18.45.6:53
+     313b0100 00010000 00000000 00000600 01.
+ sendto=17
+ +0.000326
+ sendto fd=4 addr=172.18.45.6:53
+     313c0100 00010000 00000000 00001100 01.
+ sendto=17
+ +0.000303
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.989938
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.007735
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8180 00010000 00010000 00000100 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000703
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000151
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.981803
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.011771
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208180 0001000d 0000000d 00000200 01000002 00010007 e8ff0014 01450c52
+     4f4f542d 53455256 45525303 4e455400 00000200 010007e8 ff000401 49c01e00
+     00020001 0007e8ff 00040146 c01e0000 02000100 07e8ff00 040147c0 1e000002
+     00010007 e8ff0004 014ac01e 00000200 010007e8 ff000401 4bc01e00 00020001
+     0007e8ff 0004014c c01e0000 02000100 07e8ff00 04014dc0 1e000002 00010007
+     e8ff0004 0141c01e 00000200 010007e8 ff000401 48c01e00 00020001 0007e8ff
+     00040142 c01e0000 02000100 07e8ff00 040143c0 1e000002 00010007 e8ff0004
+     0144c01e c01c0001 00010009 3a7f0004 c0cbe60a c03b0001 00010009 3a7f0004
+     c0249411 c04a0001 00010009 3a7f0004 c00505f1 c0590001 00010009 3a7f0004
+     c0702404 c0680001 00010009 3a7f0004 c629000a c0770001 00010009 3a7f0004
+     c1000e81 c0860001 00010009 3a7f0004 c620400c c0950001 00010009 3a7f0004
+     ca0c1b21 c0a40001 00010009 3a7f0004 c6290004 c0b30001 00010009 3a7f0004
+     803f0235 c0c20001 00010009 3a7f0004 8009006b c0d10001 00010009 3a7f0004
+     c021040c c0e00001 00010009 3a7f0004 80080a5a.
+ +0.002660
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000492
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.967228
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.016740
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228180 00010001 000d000d 00000600 01000006 00010001 409f003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 51800000 02000100
+     07e8ff00 040145c0 1e000002 00010007 e8ff0004 0149c01e 00000200 010007e8
+     ff000401 46c01e00 00020001 0007e8ff 00040147 c01e0000 02000100 07e8ff00
+     04014ac0 1e000002 00010007 e8ff0004 014bc01e 00000200 010007e8 ff000401
+     4cc01e00 00020001 0007e8ff 0004014d c01e0000 02000100 07e8ff00 02c01c00
+     00020001 0007e8ff 00040148 c01e0000 02000100 07e8ff00 040142c0 1e000002
+     00010007 e8ff0004 0143c01e 00000200 010007e8 ff000401 44c01ec0 65000100
+     0100093a 7f0004c0 cbe60ac0 74000100 0100093a 7f0004c0 249411c0 83000100
+     0100093a 7f0004c0 0505f1c0 92000100 0100093a 7f0004c0 702404c0 a1000100
+     0100093a 7f0004c6 29000ac0 b0000100 0100093a 7f0004c1 000e81c0 bf000100
+     0100093a 7f0004c6 20400cc0 ce000100 0100093a 7f0004ca 0c1b21c0 1c000100
+     0100093a 7f0004c6 290004c0 ea000100 0100093a 7f000480 3f0235c0 f9000100
+     0100093a 7f000480 09006bc1 08000100 0100093a 7f0004c0 21040cc1 17000100
+     0100093a 7f000480 080a5a.
+ +0.002984
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000231
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.947273
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000462
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238180 00010000 00010000 00000c00 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000634
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000101
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.946076
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003306
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248180 00010000 00010000 00000d00 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000640
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000124
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.942006
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003471
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258180 00010000 00010000 00000f00 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000640
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000101
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.937794
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003503
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268180 00010000 00010000 00001000 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000657
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000120
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.933514
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003470
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31278180 00010000 00010000 00001100 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000640
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000100
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.929304
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003089
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31288180 00010000 00010000 00000100 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000639
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000100
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.925476
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.011378
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31298180 0001000d 0000000d 00000200 01000002 00010007 e8ff0014 01490c52
+     4f4f542d 53455256 45525303 4e455400 00000200 010007e8 ff000401 46c01e00
+     00020001 0007e8ff 00040147 c01e0000 02000100 07e8ff00 04014ac0 1e000002
+     00010007 e8ff0004 014bc01e 00000200 010007e8 ff000401 4cc01e00 00020001
+     0007e8ff 0004014d c01e0000 02000100 07e8ff00 040141c0 1e000002 00010007
+     e8ff0004 0148c01e 00000200 010007e8 ff000401 42c01e00 00020001 0007e8ff
+     00040143 c01e0000 02000100 07e8ff00 040144c0 1e000002 00010007 e8ff0004
+     0145c01e c01c0001 00010009 3a7f0004 c0249411 c03b0001 00010009 3a7f0004
+     c00505f1 c04a0001 00010009 3a7f0004 c0702404 c0590001 00010009 3a7f0004
+     c629000a c0680001 00010009 3a7f0004 c1000e81 c0770001 00010009 3a7f0004
+     c620400c c0860001 00010009 3a7f0004 ca0c1b21 c0950001 00010009 3a7f0004
+     c6290004 c0a40001 00010009 3a7f0004 803f0235 c0b30001 00010009 3a7f0004
+     8009006b c0c20001 00010009 3a7f0004 c021040c c0d10001 00010009 3a7f0004
+     80080a5a c0e00001 00010009 3a7f0004 c0cbe60a.
+ +0.002666
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312a8180 00010000 00010000 00000c00 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.001684
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000096
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.909652
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003338
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312b8180 00010000 00010000 00000f00 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000643
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000106
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.905565
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.012071
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312c8180 00010001 000d000d 00000600 01000006 00010001 3097003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 51800000 02000100
+     07e8ff00 040149c0 1e000002 00010007 e8ff0004 0146c01e 00000200 010007e8
+     ff000401 47c01e00 00020001 0007e8ff 0004014a c01e0000 02000100 07e8ff00
+     04014bc0 1e000002 00010007 e8ff0004 014cc01e 00000200 010007e8 ff000401
+     4dc01e00 00020001 0007e8ff 0002c01c 00000200 010007e8 ff000401 48c01e00
+     00020001 0007e8ff 00040142 c01e0000 02000100 07e8ff00 040143c0 1e000002
+     00010007 e8ff0004 0144c01e 00000200 010007e8 ff000401 45c01ec0 65000100
+     0100093a 7f0004c0 249411c0 74000100 0100093a 7f0004c0 0505f1c0 83000100
+     0100093a 7f0004c0 702404c0 92000100 0100093a 7f0004c6 29000ac0 a1000100
+     0100093a 7f0004c1 000e81c0 b0000100 0100093a 7f0004c6 20400cc0 bf000100
+     0100093a 7f0004ca 0c1b21c0 1c000100 0100093a 7f0004c6 290004c0 db000100
+     0100093a 7f000480 3f0235c0 ea000100 0100093a 7f000480 09006bc0 f9000100
+     0100093a 7f0004c0 21040cc1 08000100 0100093a 7f000480 080a5ac1 17000100
+     0100093a 7f0004c0 cbe60a.
+ +0.002963
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000237
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.890294
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000878
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312d8180 00010000 00010000 00001100 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000645
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000107
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.888664
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003147
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312e8180 00010000 00010000 00000100 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000643
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000141
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.884733
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.011290
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     312f8180 0001000d 0000000d 00000200 01000002 00010007 e8ff0014 01460c52
+     4f4f542d 53455256 45525303 4e455400 00000200 010007e8 ff000401 47c01e00
+     00020001 0007e8ff 0004014a c01e0000 02000100 07e8ff00 04014bc0 1e000002
+     00010007 e8ff0004 014cc01e 00000200 010007e8 ff000401 4dc01e00 00020001
+     0007e8ff 00040141 c01e0000 02000100 07e8ff00 040148c0 1e000002 00010007
+     e8ff0004 0142c01e 00000200 010007e8 ff000401 43c01e00 00020001 0007e8ff
+     00040144 c01e0000 02000100 07e8ff00 040145c0 1e000002 00010007 e8ff0004
+     0149c01e c01c0001 00010009 3a7f0004 c00505f1 c03b0001 00010009 3a7f0004
+     c0702404 c04a0001 00010009 3a7f0004 c629000a c0590001 00010009 3a7f0004
+     c1000e81 c0680001 00010009 3a7f0004 c620400c c0770001 00010009 3a7f0004
+     ca0c1b21 c0860001 00010009 3a7f0004 c6290004 c0950001 00010009 3a7f0004
+     803f0235 c0a40001 00010009 3a7f0004 8009006b c0b30001 00010009 3a7f0004
+     c021040c c0c20001 00010009 3a7f0004 80080a5a c0d10001 00010009 3a7f0004
+     c0cbe60a c0e00001 00010009 3a7f0004 c0249411.
+ +0.002658
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000400
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.870385
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.019033
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31318180 00010001 000d000d 00000600 01000006 00010001 215c003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 51800000 02000100
+     07e8ff00 040146c0 1e000002 00010007 e8ff0004 0147c01e 00000200 010007e8
+     ff000401 4ac01e00 00020001 0007e8ff 0004014b c01e0000 02000100 07e8ff00
+     04014cc0 1e000002 00010007 e8ff0004 014dc01e 00000200 010007e8 ff0002c0
+     1c000002 00010007 e8ff0004 0148c01e 00000200 010007e8 ff000401 42c01e00
+     00020001 0007e8ff 00040143 c01e0000 02000100 07e8ff00 040144c0 1e000002
+     00010007 e8ff0004 0145c01e 00000200 010007e8 ff000401 49c01ec0 65000100
+     0100093a 7f0004c0 0505f1c0 74000100 0100093a 7f0004c0 702404c0 83000100
+     0100093a 7f0004c6 29000ac0 92000100 0100093a 7f0004c1 000e81c0 a1000100
+     0100093a 7f0004c6 20400cc0 b0000100 0100093a 7f0004ca 0c1b21c0 1c000100
+     0100093a 7f0004c6 290004c0 cc000100 0100093a 7f000480 3f0235c0 db000100
+     0100093a 7f000480 09006bc0 ea000100 0100093a 7f0004c0 21040cc0 f9000100
+     0100093a 7f000480 080a5ac1 08000100 0100093a 7f0004c0 cbe60ac1 17000100
+     0100093a 7f0004c0 249411.
+ +0.002965
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000228
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.848159
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000402
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31328180 00010000 00010000 00000c00 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000658
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000104
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.846995
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003222
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31338180 00010000 00010000 00000d00 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000645
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000107
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.843021
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003535
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31348180 00010000 00010000 00000f00 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000640
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000128
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.838718
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003396
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31358180 00010000 00010000 00001000 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000643
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000108
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.834571
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003560
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31368180 00010000 00010000 00001100 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000642
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000133
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.830236
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003060
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31378180 00010000 00010000 00000100 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000645
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000106
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.826425
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.011323
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31388180 0001000d 0000000d 00000200 01000002 00010007 e8ff0014 01470c52
+     4f4f542d 53455256 45525303 4e455400 00000200 010007e8 ff000401 4ac01e00
+     00020001 0007e8ff 0004014b c01e0000 02000100 07e8ff00 04014cc0 1e000002
+     00010007 e8ff0004 014dc01e 00000200 010007e8 ff000401 41c01e00 00020001
+     0007e8ff 00040148 c01e0000 02000100 07e8ff00 040142c0 1e000002 00010007
+     e8ff0004 0143c01e 00000200 010007e8 ff000401 44c01e00 00020001 0007e8ff
+     00040145 c01e0000 02000100 07e8ff00 040149c0 1e000002 00010007 e8ff0004
+     0146c01e c01c0001 00010009 3a7f0004 c0702404 c03b0001 00010009 3a7f0004
+     c629000a c04a0001 00010009 3a7f0004 c1000e81 c0590001 00010009 3a7f0004
+     c620400c c0680001 00010009 3a7f0004 ca0c1b21 c0770001 00010009 3a7f0004
+     c6290004 c0860001 00010009 3a7f0004 803f0235 c0950001 00010009 3a7f0004
+     8009006b c0a40001 00010009 3a7f0004 c021040c c0b30001 00010009 3a7f0004
+     80080a5a c0c20001 00010009 3a7f0004 c0cbe60a c0d10001 00010009 3a7f0004
+     c0249411 c0e00001 00010009 3a7f0004 c00505f1.
+ +0.002663
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31398180 00010000 00010000 00000c00 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.001663
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000127
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.810649
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003326
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313a8180 00010000 00010000 00000f00 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000643
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000105
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.806575
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.025669
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313b8180 00010001 000d000d 00000600 01000006 00010001 12e4003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 51800000 02000100
+     07e8ff00 040147c0 1e000002 00010007 e8ff0004 014ac01e 00000200 010007e8
+     ff000401 4bc01e00 00020001 0007e8ff 0004014c c01e0000 02000100 07e8ff00
+     04014dc0 1e000002 00010007 e8ff0002 c01c0000 02000100 07e8ff00 040148c0
+     1e000002 00010007 e8ff0004 0142c01e 00000200 010007e8 ff000401 43c01e00
+     00020001 0007e8ff 00040144 c01e0000 02000100 07e8ff00 040145c0 1e000002
+     00010007 e8ff0004 0149c01e 00000200 010007e8 ff000401 46c01ec0 65000100
+     0100093a 7f0004c0 702404c0 74000100 0100093a 7f0004c6 29000ac0 83000100
+     0100093a 7f0004c1 000e81c0 92000100 0100093a 7f0004c6 20400cc0 a1000100
+     0100093a 7f0004ca 0c1b21c0 1c000100 0100093a 7f0004c6 290004c0 bd000100
+     0100093a 7f000480 3f0235c0 cc000100 0100093a 7f000480 09006bc0 db000100
+     0100093a 7f0004c0 21040cc0 ea000100 0100093a 7f000480 080a5ac0 f9000100
+     0100093a 7f0004c0 cbe60ac1 08000100 0100093a 7f0004c0 249411c1 17000100
+     0100093a 7f0004c0 0505f1.
+ +0.002963
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000233
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.777710
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004017
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     313c8180 00010000 00010000 00001100 01000006 00010000 0257003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000640
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000106
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.772947
+ select=1 rfds=[4] wfds=[] efds=[]
+ +1.-752512
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010000 00010000 00000500 01000006 00010001 5180003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000649
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000106
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.529913
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.181054
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31308580 00010000 00010000 00000500 01000006 00010001 5180003e 01410c52
+     4f4f542d 53455256 45525303 4e455400 0a686f73 746d6173 74657208 494e5445
+     524e4943 c02b7727 68440000 07080000 03840009 3a800001 5180.
+ +0.000687
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000112
+ close fd=4
+ close=OK
+ +0.000197
index ba426f15c99cc756e1ec06e213fce535ed3be817..fed0a882bb89b4fc16cd93c0a79ab1052a662827 100644 (file)
@@ -31,22 +31,22 @@ adns debug: using nameserver 172.18.45.6
 . flags 1 type 131089 RP(822) submitted
 . flags 0 type A(-): No such data; nrrs=0; cname=$; owner=$; ttl=86400
 . flags 0 type NS(raw): OK; nrrs=13; cname=$; owner=$; ttl=305624
- "E.ROOT-SERVERS.NET"
- "I.ROOT-SERVERS.NET"
- "F.ROOT-SERVERS.NET"
- "G.ROOT-SERVERS.NET"
- "J.ROOT-SERVERS.NET"
- "K.ROOT-SERVERS.NET"
- "L.ROOT-SERVERS.NET"
- "M.ROOT-SERVERS.NET"
- "A.ROOT-SERVERS.NET"
- "H.ROOT-SERVERS.NET"
- "B.ROOT-SERVERS.NET"
- "C.ROOT-SERVERS.NET"
- "D.ROOT-SERVERS.NET"
+ E.ROOT-SERVERS.NET
+ I.ROOT-SERVERS.NET
+ F.ROOT-SERVERS.NET
+ G.ROOT-SERVERS.NET
+ J.ROOT-SERVERS.NET
+ K.ROOT-SERVERS.NET
+ L.ROOT-SERVERS.NET
+ M.ROOT-SERVERS.NET
+ A.ROOT-SERVERS.NET
+ H.ROOT-SERVERS.NET
+ B.ROOT-SERVERS.NET
+ C.ROOT-SERVERS.NET
+ D.ROOT-SERVERS.NET
 . flags 0 type CNAME(-): No such data; nrrs=0; cname=$; owner=$; ttl=86400
 . flags 0 type SOA(raw): OK; nrrs=1; cname=$; owner=$; ttl=54334
"A.ROOT-SERVERS.NET" "hostmaster@INTERNIC.NET" 1999041600 1800 900 604800 86400
A.ROOT-SERVERS.NET hostmaster.INTERNIC.NET 1999041600 1800 900 604800 86400
 . flags 0 type PTR(raw): No such data; nrrs=0; cname=$; owner=$; ttl=599
 adns debug: reply not found, id 3123, query owner  (NS=172.18.45.6)
 . flags 0 type HINFO(-): No such data; nrrs=0; cname=$; owner=$; ttl=86400
@@ -58,42 +58,42 @@ adns debug: reply not found, id 312e, query owner  (NS=172.18.45.6)
 . flags 0 type RP(raw): No such data; nrrs=0; cname=$; owner=$; ttl=86400
 . flags 0 type A(addr): No such data; nrrs=0; cname=$; owner=$; ttl=599
 . flags 0 type NS(+addr): OK; nrrs=13; cname=$; owner=$; ttl=305624
- "I.ROOT-SERVERS.NET": AF_INET 192.36.148.17
- "F.ROOT-SERVERS.NET": AF_INET 192.5.5.241
- "G.ROOT-SERVERS.NET": AF_INET 192.112.36.4
- "J.ROOT-SERVERS.NET": AF_INET 198.41.0.10
- "K.ROOT-SERVERS.NET": AF_INET 193.0.14.129
- "L.ROOT-SERVERS.NET": AF_INET 198.32.64.12
- "M.ROOT-SERVERS.NET": AF_INET 202.12.27.33
- "A.ROOT-SERVERS.NET": AF_INET 198.41.0.4
- "H.ROOT-SERVERS.NET": AF_INET 128.63.2.53
- "B.ROOT-SERVERS.NET": AF_INET 128.9.0.107
- "C.ROOT-SERVERS.NET": AF_INET 192.33.4.12
- "D.ROOT-SERVERS.NET": AF_INET 128.8.10.90
- "E.ROOT-SERVERS.NET": AF_INET 192.203.230.10
+ I.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.36.148.17 )
+ F.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.5.5.241 )
+ G.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.112.36.4 )
+ J.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.41.0.10 )
+ K.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 193.0.14.129 )
+ L.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.32.64.12 )
+ M.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 202.12.27.33 )
+ A.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.41.0.4 )
+ H.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.63.2.53 )
+ B.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.9.0.107 )
+ C.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.33.4.12 )
+ D.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.8.10.90 )
+ E.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.203.230.10 )
 . flags 0 type PTR(checked): No such data; nrrs=0; cname=$; owner=$; ttl=599
 . flags 0 type MX(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=86400
 . flags 0 type SOA(822): OK; nrrs=1; cname=$; owner=$; ttl=51616
"A.ROOT-SERVERS.NET" "hostmaster@INTERNIC.NET" 1999041600 1800 900 604800 86400
A.ROOT-SERVERS.NET hostmaster@INTERNIC.NET 1999041600 1800 900 604800 86400
 . flags 0 type RP(822): No such data; nrrs=0; cname=$; owner=$; ttl=86400
 . flags 1 type A(-): No such data; nrrs=0; cname=$; owner=$; ttl=599
 . flags 1 type NS(raw): OK; nrrs=13; cname=$; owner=$; ttl=305624
- "F.ROOT-SERVERS.NET"
- "G.ROOT-SERVERS.NET"
- "J.ROOT-SERVERS.NET"
- "K.ROOT-SERVERS.NET"
- "L.ROOT-SERVERS.NET"
- "M.ROOT-SERVERS.NET"
- "A.ROOT-SERVERS.NET"
- "H.ROOT-SERVERS.NET"
- "B.ROOT-SERVERS.NET"
- "C.ROOT-SERVERS.NET"
- "D.ROOT-SERVERS.NET"
- "E.ROOT-SERVERS.NET"
- "I.ROOT-SERVERS.NET"
+ F.ROOT-SERVERS.NET
+ G.ROOT-SERVERS.NET
+ J.ROOT-SERVERS.NET
+ K.ROOT-SERVERS.NET
+ L.ROOT-SERVERS.NET
+ M.ROOT-SERVERS.NET
+ A.ROOT-SERVERS.NET
+ H.ROOT-SERVERS.NET
+ B.ROOT-SERVERS.NET
+ C.ROOT-SERVERS.NET
+ D.ROOT-SERVERS.NET
+ E.ROOT-SERVERS.NET
+ I.ROOT-SERVERS.NET
 . flags 1 type CNAME(-): No such data; nrrs=0; cname=$; owner=$; ttl=86400
 . flags 1 type SOA(raw): OK; nrrs=1; cname=$; owner=$; ttl=49034
"A.ROOT-SERVERS.NET" "hostmaster@INTERNIC.NET" 1999041600 1800 900 604800 86400
A.ROOT-SERVERS.NET hostmaster.INTERNIC.NET 1999041600 1800 900 604800 86400
 . flags 1 type PTR(raw): No such data; nrrs=0; cname=$; owner=$; ttl=599
 . flags 1 type HINFO(-): No such data; nrrs=0; cname=$; owner=$; ttl=599
 adns debug: reply not found, id 3132, query owner  (NS=172.18.45.6)
@@ -106,22 +106,22 @@ adns debug: reply not found, id 3139, query owner  (NS=172.18.45.6)
 . flags 1 type RP(raw): No such data; nrrs=0; cname=$; owner=$; ttl=86399
 . flags 1 type A(addr): No such data; nrrs=0; cname=$; owner=$; ttl=598
 . flags 1 type NS(+addr): OK; nrrs=13; cname=$; owner=$; ttl=305623
- "G.ROOT-SERVERS.NET": AF_INET 192.112.36.4
- "J.ROOT-SERVERS.NET": AF_INET 198.41.0.10
- "K.ROOT-SERVERS.NET": AF_INET 193.0.14.129
- "L.ROOT-SERVERS.NET": AF_INET 198.32.64.12
- "M.ROOT-SERVERS.NET": AF_INET 202.12.27.33
- "A.ROOT-SERVERS.NET": AF_INET 198.41.0.4
- "H.ROOT-SERVERS.NET": AF_INET 128.63.2.53
- "B.ROOT-SERVERS.NET": AF_INET 128.9.0.107
- "C.ROOT-SERVERS.NET": AF_INET 192.33.4.12
- "D.ROOT-SERVERS.NET": AF_INET 128.8.10.90
- "E.ROOT-SERVERS.NET": AF_INET 192.203.230.10
- "I.ROOT-SERVERS.NET": AF_INET 192.36.148.17
- "F.ROOT-SERVERS.NET": AF_INET 192.5.5.241
+ G.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.112.36.4 )
+ J.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.41.0.10 )
+ K.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 193.0.14.129 )
+ L.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.32.64.12 )
+ M.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 202.12.27.33 )
+ A.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 198.41.0.4 )
+ H.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.63.2.53 )
+ B.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.9.0.107 )
+ C.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.33.4.12 )
+ D.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 128.8.10.90 )
+ E.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.203.230.10 )
+ I.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.36.148.17 )
+ F.ROOT-SERVERS.NET ok 0 ok "OK" ( INET 192.5.5.241 )
 . flags 1 type PTR(checked): No such data; nrrs=0; cname=$; owner=$; ttl=598
 . flags 1 type MX(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=598
 . flags 1 type SOA(822): OK; nrrs=1; cname=$; owner=$; ttl=46580
"A.ROOT-SERVERS.NET" "hostmaster@INTERNIC.NET" 1999041600 1800 900 604800 86400
A.ROOT-SERVERS.NET hostmaster@INTERNIC.NET 1999041600 1800 900 604800 86400
 . flags 1 type RP(822): No such data; nrrs=0; cname=$; owner=$; ttl=598
 rc=0
index a5cc7124142ea6291373f534f698eade52f2f06f..d3427504c56d3b351e2f62adfbbf1cf966a32b1e 100644 (file)
@@ -1,14 +1,14 @@
-default
+adnstest default -,s
 . 1/.
  start 924364450.165424
  socket type=SOCK_DGRAM
  socket=4
  +0.000220
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
+ fcntl=~O_NONBLOCK&...
  +0.000087
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
  +0.000070
  sendto fd=4 addr=172.18.45.6:53
      311f0100 00010000 00000000 00000100 01.
@@ -377,10 +377,13 @@ default
      31300100 00010000 00000000 00000500 01.
  sendto=17
  +0.000710
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
  sendto fd=4 addr=172.18.45.6:53
      31320100 00010000 00000000 00000c00 01.
  sendto=17
- +0.000724
+ +0.000723
  sendto fd=4 addr=172.18.45.6:53
      31330100 00010000 00000000 00000d00 01.
  sendto=17
@@ -413,7 +416,7 @@ default
      313c0100 00010000 00000000 00001100 01.
  sendto=17
  +0.000681
- select max=5 rfds=[4] wfds=[] efds=[] to=1.989843
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.983502
  select=0 rfds=[] wfds=[] efds=[]
  +2.-06971
  sendto fd=4 addr=172.18.45.6:53
@@ -468,10 +471,13 @@ default
      31300100 00010000 00000000 00000500 01.
  sendto=17
  +0.000709
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
  sendto fd=4 addr=172.18.45.6:53
      31320100 00010000 00000000 00000c00 01.
  sendto=17
- +0.000721
+ +0.000720
  sendto fd=4 addr=172.18.45.6:53
      31330100 00010000 00000000 00000d00 01.
  sendto=17
@@ -504,7 +510,7 @@ default
      313c0100 00010000 00000000 00001100 01.
  sendto=17
  +0.000682
- select max=5 rfds=[4] wfds=[] efds=[] to=1.989780
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.983562
  select=0 rfds=[] wfds=[] efds=[]
  +2.-06911
  sendto fd=4 addr=172.18.45.6:53
@@ -559,10 +565,13 @@ default
      31300100 00010000 00000000 00000500 01.
  sendto=17
  +0.000689
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000001
  sendto fd=4 addr=172.18.45.6:53
      31320100 00010000 00000000 00000c00 01.
  sendto=17
- +0.000743
+ +0.000742
  sendto fd=4 addr=172.18.45.6:53
      31330100 00010000 00000000 00000d00 01.
  sendto=17
@@ -595,7 +604,7 @@ default
      313c0100 00010000 00000000 00001100 01.
  sendto=17
  +0.000678
- select max=5 rfds=[4] wfds=[] efds=[] to=1.990318
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.981795
  select=1 rfds=[4] wfds=[] efds=[]
  +0.010527
  recvfrom fd=4 buflen=512 *addrlen=16
@@ -870,7 +879,7 @@ default
  +0.000584
  recvfrom fd=4 buflen=512 *addrlen=16
  recvfrom=EAGAIN
- +0.000123
+ +0.000124
  select max=5 rfds=[4] wfds=[] efds=[] to=0.361302
  select=1 rfds=[4] wfds=[] efds=[]
  +0.029558
diff --git a/regress/case-search-as.err b/regress/case-search-as.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-search-as.out b/regress/case-search-as.out
new file mode 100644 (file)
index 0000000..95e15a5
--- /dev/null
@@ -0,0 +1,14 @@
+adns debug: using nameserver 172.18.45.6
+news flags 5 type 1 A(-) submitted
+chiark flags 5 type 1 A(-) submitted
+news flags 1 type 1 A(-) submitted
+chiark flags 1 type 1 A(-) submitted
+news flags 5 type A(-): OK; nrrs=1; cname=davenant.relativity.greenend.org.uk; owner=news.davenant.greenend.org.uk; ttl=86400
+ 172.18.45.6
+news flags 1 type A(-): OK; nrrs=1; cname=davenant.relativity.greenend.org.uk; owner=$; ttl=86400
+ 172.18.45.6
+chiark flags 5 type A(-): OK; nrrs=1; cname=$; owner=chiark.greenend.org.uk; ttl=86400
+ 195.224.76.132
+chiark flags 1 type A(-): OK; nrrs=1; cname=$; owner=$; ttl=86400
+ 195.224.76.132
+rc=0
diff --git a/regress/case-search-as.sys b/regress/case-search-as.sys
new file mode 100644 (file)
index 0000000..5a7f11d
--- /dev/null
@@ -0,0 +1,131 @@
+adnstest default
+:1 0x5/news 0x5/chiark 1/news 1/chiark
+ start 931992052.232208
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000202
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000109
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000065
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 046e6577 73086461 76656e61 6e740867 7265656e
+     656e6403 6f726702 756b0000 010001.
+ sendto=47
+ +0.000696
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 06636869 61726b08 64617665 6e616e74 08677265
+     656e656e 64036f72 6702756b 00000100 01.
+ sendto=49
+ +0.000559
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 046e6577 73086461 76656e61 6e740867 7265656e
+     656e6403 6f726702 756b0000 010001.
+ sendto=47
+ +0.000991
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 06636869 61726b08 64617665 6e616e74 08677265
+     656e656e 64036f72 6702756b 00000100 01.
+ sendto=49
+ +0.000516
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.997238
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.019885
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010002 00030003 046e6577 73086461 76656e61 6e740867 7265656e
+     656e6403 6f726702 756b0000 010001c0 0c000500 01000151 80002508 64617665
+     6e616e74 0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00
+     c03b0001 00010001 51800004 ac122d06 c0440002 00010001 51800006 036e7330
+     c044c044 00020001 00015180 0006036e 7331c044 c0440002 00010001 51800006
+     036e7332 c044c07c 00010001 00015180 0004ac12 2d06c08e 00010001 00015180
+     0004ac12 2d41c0a0 00010001 00015180 0004ac12 2d01.
+ +0.001537
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000296
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.976216
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.001966
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208583 00010000 00010000 06636869 61726b08 64617665 6e616e74 08677265
+     656e656e 64036f72 6702756b 00000100 01086772 65656e65 6e64036f 72670275
+     6b000006 00010001 5180002d 026e7306 63686961 726bc031 0a686f73 746d6173
+     746572c0 31772741 34000070 8000001c 2000093a 80000151 80.
+ +0.000819
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000471
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000102
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.973417
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.006224
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010002 00030003 046e6577 73086461 76656e61 6e740867 7265656e
+     656e6403 6f726702 756b0000 010001c0 0c000500 01000151 80002508 64617665
+     6e616e74 0a72656c 61746976 69747908 67726565 6e656e64 036f7267 02756b00
+     c03b0001 00010001 51800004 ac122d06 c0440002 00010001 51800006 036e7330
+     c044c044 00020001 00015180 0006036e 7331c044 c0440002 00010001 51800006
+     036e7332 c044c07c 00010001 00015180 0004ac12 2d06c08e 00010001 00015180
+     0004ac12 2d41c0a0 00010001 00015180 0004ac12 2d01.
+ +0.001353
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000239
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.966592
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.001978
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228583 00010000 00010000 06636869 61726b08 64617665 6e616e74 08677265
+     656e656e 64036f72 6702756b 00000100 01086772 65656e65 6e64036f 72670275
+     6b000006 00010001 5180002d 026e7306 63686961 726bc031 0a686f73 746d6173
+     746572c0 31772741 34000070 8000001c 2000093a 80000151 80.
+ +0.000817
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001.
+ sendto=40
+ +0.000436
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000101
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.987460
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004418
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001 c00c0001 00010001 51800004 c3e04c84 08677265 656e656e
+     64036f72 6702756b 00000200 01000151 80001103 6e73300a 72656c61 74697669
+     7479c038 c0380002 00010001 51800006 036e7331 c057c053 00010001 00015180
+     0004ac12 2d06c070 00010001 00015180 0004ac12 2d41.
+ +0.000982
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000180
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.993066
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003953
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248580 00010001 00020002 06636869 61726b08 67726565 6e656e64 036f7267
+     02756b00 00010001 c00c0001 00010001 51800004 c3e04c84 08677265 656e656e
+     64036f72 6702756b 00000200 01000151 80001103 6e73300a 72656c61 74697669
+     7479c038 c0380002 00010001 51800006 036e7331 c057c053 00010001 00015180
+     0004ac12 2d06c070 00010001 00015180 0004ac12 2d41.
+ +0.000986
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000143
+ close fd=4
+ close=OK
+ +0.000193
index 4e6ac0f4ab4d4a69081a53f02700f2dbf8cc84f0..29b719490fb711e612816db37c14c9d7e50080b5 100644 (file)
@@ -1,14 +1,14 @@
-default
+adnstest default -,s
 :1 0x5/news 0x5/chiark 1/news 1/chiark
  start 924360470.478357
  socket type=SOCK_DGRAM
  socket=4
  +0.000200
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
+ fcntl=~O_NONBLOCK&...
  +0.000084
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
  +0.000067
  sendto fd=4 addr=172.18.45.6:53
      311f0100 00010000 00000000 046e6577 73086461 76656e61 6e740867 7265656e
index 3e30bf782db8178514b6a68804c3d80722e8df24..1167a7a4569dea744b4511a962627c94ef169692 100644 (file)
@@ -1,14 +1,14 @@
-default
+adnstest default
 :1 1/news.davenant
  start 924363451.882765
  socket type=SOCK_DGRAM
  socket=4
  +0.000207
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
+ fcntl=~O_NONBLOCK&...
  +0.000088
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
  +0.000071
  sendto fd=4 addr=172.18.45.6:53
      311f0100 00010000 00000000 046e6577 73086461 76656e61 6e740000 010001.
diff --git a/regress/case-sillyrp.err b/regress/case-sillyrp.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-sillyrp.out b/regress/case-sillyrp.out
new file mode 100644 (file)
index 0000000..f947914
--- /dev/null
@@ -0,0 +1,22 @@
+adns debug: using nameserver 172.18.45.6
+silly-rp-dm.test.iwj.relativity.greenend.org.uk flags 112 type 17 RP(raw) submitted
+silly-rp-dm.test.iwj.relativity.greenend.org.uk flags 112 type 131089 RP(822) submitted
+silly-rp-lp.test.iwj.relativity.greenend.org.uk flags 112 type 17 RP(raw) submitted
+silly-rp-lp.test.iwj.relativity.greenend.org.uk flags 112 type 131089 RP(822) submitted
+silly-rp-lp.test.iwj.relativity.greenend.org.uk flags 0 type 17 RP(raw) submitted
+silly-rp-lp.test.iwj.relativity.greenend.org.uk flags 0 type 131089 RP(822) submitted
+silly-rp-dm.test.iwj.relativity.greenend.org.uk flags 0 type 17 RP(raw) submitted
+silly-rp-dm.test.iwj.relativity.greenend.org.uk flags 0 type 131089 RP(822) submitted
+silly-rp-dm.test.iwj.relativity.greenend.org.uk flags 112 type RP(raw): OK; nrrs=1; cname=$; owner=$; ttl=60
+ i\..root\000null.org .
+silly-rp-dm.test.iwj.relativity.greenend.org.uk flags 112 type RP(822): Found syntactically invalid domain name; nrrs=0; cname=$; owner=$; ttl=60
+silly-rp-lp.test.iwj.relativity.greenend.org.uk flags 112 type RP(raw): OK; nrrs=1; cname=$; owner=$; ttl=60
+ spong\000flibble.ucam.org .
+silly-rp-lp.test.iwj.relativity.greenend.org.uk flags 112 type RP(822): Found invalid DNS data; nrrs=0; cname=$; owner=$; ttl=60
+silly-rp-lp.test.iwj.relativity.greenend.org.uk flags 0 type RP(raw): OK; nrrs=1; cname=$; owner=$; ttl=60
+ spong\000flibble.ucam.org .
+silly-rp-lp.test.iwj.relativity.greenend.org.uk flags 0 type RP(822): Found invalid DNS data; nrrs=0; cname=$; owner=$; ttl=60
+silly-rp-dm.test.iwj.relativity.greenend.org.uk flags 0 type RP(raw): OK; nrrs=1; cname=$; owner=$; ttl=60
+ i\..root\000null.org .
+silly-rp-dm.test.iwj.relativity.greenend.org.uk flags 0 type RP(822): Found syntactically invalid domain name; nrrs=0; cname=$; owner=$; ttl=60
+rc=0
diff --git a/regress/case-sillyrp.sys b/regress/case-sillyrp.sys
new file mode 100644 (file)
index 0000000..3fbdb54
--- /dev/null
@@ -0,0 +1,183 @@
+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
+ start 929580348.131048
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000207
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000086
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000061
+ sendto fd=4 addr=172.18.45.6:53
+     311f0100 00010000 00000000 0b73696c 6c792d72 702d646d 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=65
+ +0.000768
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 0b73696c 6c792d72 702d646d 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=65
+ +0.001010
+ sendto fd=4 addr=172.18.45.6:53
+     31210100 00010000 00000000 0b73696c 6c792d72 702d6c70 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=65
+ +0.000607
+ sendto fd=4 addr=172.18.45.6:53
+     31220100 00010000 00000000 0b73696c 6c792d72 702d6c70 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=65
+ +0.000543
+ sendto fd=4 addr=172.18.45.6:53
+     31230100 00010000 00000000 0b73696c 6c792d72 702d6c70 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=65
+ +0.000544
+ sendto fd=4 addr=172.18.45.6:53
+     31240100 00010000 00000000 0b73696c 6c792d72 702d6c70 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=65
+ +0.000535
+ sendto fd=4 addr=172.18.45.6:53
+     31250100 00010000 00000000 0b73696c 6c792d72 702d646d 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=65
+ +0.000538
+ sendto fd=4 addr=172.18.45.6:53
+     31260100 00010000 00000000 0b73696c 6c792d72 702d646d 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01.
+ sendto=65
+ +0.000569
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.994886
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005696
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     311f8580 00010001 00010001 0b73696c 6c792d72 702d646d 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01c00c00 11000100 00003c00 1302692e 09726f6f 74006e75 6c6c036f 72670000
+     04746573 74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00000200 01000000 3c000603 6e7330c0 69c08f00 01000100 01518000
+     04ac122d 06.
+ +0.000936
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000308
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.988714
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003951
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31208580 00010001 00010001 0b73696c 6c792d72 702d646d 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01c00c00 11000100 00003c00 1302692e 09726f6f 74006e75 6c6c036f 72670000
+     04746573 74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00000200 01000000 3c000603 6e7330c0 69c08f00 01000100 01518000
+     04ac122d 06.
+ +0.000891
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000192
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.984690
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003968
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31218580 00010001 00010001 0b73696c 6c792d72 702d6c70 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01c00c00 11000100 00003c00 190d7370 6f6e6700 666c6962 626c6504 7563616d
+     036f7267 00000474 65737403 69776a0a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 02000100 00003c00 06036e73 30c06fc0 95000100
+     01000151 800004ac 122d06.
+ +0.000915
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000193
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.980221
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004041
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31228580 00010001 00010001 0b73696c 6c792d72 702d6c70 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01c00c00 11000100 00003c00 190d7370 6f6e6700 666c6962 626c6504 7563616d
+     036f7267 00000474 65737403 69776a0a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 02000100 00003c00 06036e73 30c06fc0 95000100
+     01000151 800004ac 122d06.
+ +0.000915
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000154
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.975654
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.003970
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31238580 00010001 00010001 0b73696c 6c792d72 702d6c70 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01c00c00 11000100 00003c00 190d7370 6f6e6700 666c6962 626c6504 7563616d
+     036f7267 00000474 65737403 69776a0a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 02000100 00003c00 06036e73 30c06fc0 95000100
+     01000151 800004ac 122d06.
+ +0.000911
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000173
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.971144
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.005737
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31248580 00010001 00010001 0b73696c 6c792d72 702d6c70 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01c00c00 11000100 00003c00 190d7370 6f6e6700 666c6962 626c6504 7563616d
+     036f7267 00000474 65737403 69776a0a 72656c61 74697669 74790867 7265656e
+     656e6403 6f726702 756b0000 02000100 00003c00 06036e73 30c06fc0 95000100
+     01000151 800004ac 122d06.
+ +0.000914
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000151
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.964877
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004001
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31258580 00010001 00010001 0b73696c 6c792d72 702d646d 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01c00c00 11000100 00003c00 1302692e 09726f6f 74006e75 6c6c036f 72670000
+     04746573 74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00000200 01000000 3c000603 6e7330c0 69c08f00 01000100 01518000
+     04ac122d 06.
+ +0.000911
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000155
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.960348
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.004043
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+     31268580 00010001 00010001 0b73696c 6c792d72 702d646d 04746573 74036977
+     6a0a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b 00001100
+     01c00c00 11000100 00003c00 1302692e 09726f6f 74006e75 6c6c036f 72670000
+     04746573 74036977 6a0a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00000200 01000000 3c000603 6e7330c0 69c08f00 01000100 01518000
+     04ac122d 06.
+ +0.000886
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000191
+ close fd=4
+ close=OK
+ +0.000160
diff --git a/regress/case-tcpallfail.err b/regress/case-tcpallfail.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-tcpallfail.out b/regress/case-tcpallfail.out
new file mode 100644 (file)
index 0000000..1294f3b
--- /dev/null
@@ -0,0 +1,34 @@
+adns debug: using nameserver 172.18.45.2
+test.iwj.relativity.greenend.org.uk. flags 2 type 1 A(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 2 NS(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 5 CNAME(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 6 SOA(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 12 PTR(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 13 HINFO(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 15 MX(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 16 TXT(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 17 RP(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65537 A(addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65538 NS(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65548 PTR(checked) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65551 MX(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131078 SOA(822) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131089 RP(822) submitted
+adns warning: TCP connection failed: connect/read: Connection refused (NS=172.18.45.2)
+adns warning: TCP connection failed: connect/read: Connection refused (NS=172.18.45.2)
+test.iwj.relativity.greenend.org.uk. flags 2 type A(-): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(raw): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type CNAME(-): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(raw): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(raw): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type HINFO(-): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(raw): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type TXT(-): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(raw): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type A(addr): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(+addr): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(checked): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(+addr): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(822): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(822): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604800
+rc=0
diff --git a/regress/case-tcpallfail.sys b/regress/case-tcpallfail.sys
new file mode 100644 (file)
index 0000000..f17346b
--- /dev/null
@@ -0,0 +1,63 @@
+adnstest anarres
+2/test.iwj.relativity.greenend.org.uk.
+ start 962142174.403028
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000120
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000053
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000034
+ socket type=SOCK_STREAM
+ socket=5
+ +0.000479
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000036
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000031
+ connect fd=5 addr=172.18.45.2:53
+ connect=EINPROGRESS
+ +0.000182
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.999272
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.000862
+ read fd=5 buflen=1
+ read=ECONNREFUSED
+ +0.000087
+ close fd=5
+ close=OK
+ +0.000109
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000103
+ socket type=SOCK_STREAM
+ socket=5
+ +0.000392
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000037
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000030
+ connect fd=5 addr=172.18.45.2:53
+ connect=EINPROGRESS
+ +0.000127
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.999414
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.000339
+ read fd=5 buflen=1
+ read=ECONNREFUSED
+ +0.000075
+ close fd=5
+ close=OK
+ +0.000084
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000098
+ close fd=4
+ close=OK
+ +0.000879
diff --git a/regress/case-tcpblock.err b/regress/case-tcpblock.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-tcpblock.out b/regress/case-tcpblock.out
new file mode 100644 (file)
index 0000000..41f8854
--- /dev/null
@@ -0,0 +1,33 @@
+adns debug: using nameserver 172.18.45.2
+test.iwj.relativity.greenend.org.uk. flags 2 type 1 A(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 2 NS(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 5 CNAME(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 6 SOA(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 12 PTR(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 13 HINFO(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 15 MX(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 16 TXT(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 17 RP(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65537 A(addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65538 NS(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65548 PTR(checked) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65551 MX(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131078 SOA(822) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131089 RP(822) submitted
+adns debug: TCP connected (NS=172.18.45.2)
+test.iwj.relativity.greenend.org.uk. flags 2 type A(-): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(raw): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type CNAME(-): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(raw): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(raw): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type HINFO(-): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(raw): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type TXT(-): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(raw): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type A(addr): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(+addr): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(checked): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(+addr): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(822): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(822): DNS query timed out; nrrs=0; cname=$; owner=$; ttl=604770
+rc=0
diff --git a/regress/case-tcpblock.sys b/regress/case-tcpblock.sys
new file mode 100644 (file)
index 0000000..1257e1e
--- /dev/null
@@ -0,0 +1,114 @@
+adnstest anarres
+2/test.iwj.relativity.greenend.org.uk.
+ start 962142246.340485
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000126
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000052
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000035
+ socket type=SOCK_STREAM
+ socket=5
+ +0.000459
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000036
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000031
+ connect fd=5 addr=172.18.45.2:53
+ connect=EINPROGRESS
+ +0.000184
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.999290
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.000937
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000090
+ write fd=5
+     0035311f 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=55
+ +0.000427
+ write fd=5
+     00353120 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001.
+ write=55
+ +0.000271
+ write fd=5
+     00353121 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 050001.
+ write=55
+ +0.000429
+ write fd=5
+     00353122 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001.
+ write=55
+ +0.000218
+ write fd=5
+     00353123 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ write=55
+ +0.000212
+ write fd=5
+     00353124 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0d0001.
+ write=55
+ +0.000213
+ write fd=5
+     00353125 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0f0001.
+ write=55
+ +0.000212
+ write fd=5
+     00353126 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 100001.
+ write=55
+ +0.000214
+ write fd=5
+     00353127 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001.
+ write=55
+ +0.000494
+ write fd=5
+     00353128 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=55
+ +0.000239
+ write fd=5
+     00353129 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001.
+ write=55
+ +0.000212
+ write fd=5
+     0035312a 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ write=55
+ +0.000213
+ write fd=5
+     0035312b 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0f0001.
+ write=55
+ +0.000213
+ write fd=5
+     0035312c 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001.
+ write=55
+ +0.000215
+ write fd=5
+     0035312d 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001.
+ write=55
+ +0.000236
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.994245
+ select=0 rfds=[] wfds=[] efds=[]
+ +30.-04653
+ close fd=4
+ close=OK
+ +0.000943
+ close fd=5
+ close=OK
+ +0.000113
diff --git a/regress/case-tcpblockbrk.err b/regress/case-tcpblockbrk.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-tcpblockbrk.out b/regress/case-tcpblockbrk.out
new file mode 100644 (file)
index 0000000..31f0488
--- /dev/null
@@ -0,0 +1,35 @@
+adns debug: using nameserver 172.18.45.2
+test.iwj.relativity.greenend.org.uk. flags 2 type 1 A(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 2 NS(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 5 CNAME(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 6 SOA(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 12 PTR(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 13 HINFO(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 15 MX(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 16 TXT(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 17 RP(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65537 A(addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65538 NS(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65548 PTR(checked) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65551 MX(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131078 SOA(822) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131089 RP(822) submitted
+adns debug: TCP connected (NS=172.18.45.2)
+adns warning: TCP connection failed: read: Connection reset by peer (NS=172.18.45.2)
+adns warning: TCP connection failed: connect/read: Connection refused (NS=172.18.45.2)
+test.iwj.relativity.greenend.org.uk. flags 2 type A(-): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(raw): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type CNAME(-): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(raw): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(raw): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type HINFO(-): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(raw): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type TXT(-): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(raw): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type A(addr): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(+addr): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(checked): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(+addr): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(822): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(822): All nameservers failed; nrrs=0; cname=$; owner=$; ttl=604798
+rc=0
diff --git a/regress/case-tcpblockbrk.sys b/regress/case-tcpblockbrk.sys
new file mode 100644 (file)
index 0000000..b4f5171
--- /dev/null
@@ -0,0 +1,144 @@
+adnstest anarres -0x300
+2/test.iwj.relativity.greenend.org.uk.
+ start 962143388.709150
+ socket type=SOCK_DGRAM
+ socket=5
+ +0.000434
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000462
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000439
+ socket type=SOCK_STREAM
+ socket=6
+ +0.001725
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000438
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000414
+ connect fd=6 addr=172.18.45.2:53
+ connect=EINPROGRESS
+ +0.000724
+ select max=7 rfds=[5] wfds=[6] efds=[] to=13.996699
+ select=1 rfds=[] wfds=[6] efds=[]
+ +0.003661
+ read fd=6 buflen=1
+ read=EAGAIN
+ +0.000477
+ write fd=6
+     0035311f 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=55
+ +0.001553
+ write fd=6
+     00353120 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001.
+ write=55
+ +0.001612
+ write fd=6
+     00353121 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 050001.
+ write=55
+ +0.001289
+ write fd=6
+     00353122 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001.
+ write=55
+ +0.001204
+ write fd=6
+     00353123 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ write=55
+ +0.001200
+ write fd=6
+     00353124 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0d0001.
+ write=55
+ +0.001417
+ write fd=6
+     00353125 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0f0001.
+ write=55
+ +0.001199
+ write fd=6
+     00353126 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 100001.
+ write=55
+ +0.001217
+ write fd=6
+     00353127 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001.
+ write=55
+ +0.001214
+ write fd=6
+     00353128 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=55
+ +0.001259
+ write fd=6
+     00353129 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001.
+ write=55
+ +0.001231
+ write fd=6
+     0035312a 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ write=55
+ +0.001214
+ write fd=6
+     0035312b 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0f0001.
+ write=55
+ +0.001254
+ write fd=6
+     0035312c 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001.
+ write=55
+ +0.001443
+ write fd=6
+     0035312d 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001.
+ write=55
+ +0.001271
+ select max=7 rfds=[5,6] wfds=[] efds=[6] to=29.972984
+ select=1 rfds=[6] wfds=[] efds=[]
+ +2.-661933
+ read fd=6 buflen=2
+ read=ECONNRESET
+ +0.000519
+ close fd=6
+ close=OK
+ +0.000636
+ select max=6 rfds=[5] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000702
+ socket type=SOCK_STREAM
+ socket=6
+ +0.001734
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000435
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000537
+ connect fd=6 addr=172.18.45.2:53
+ connect=EINPROGRESS
+ +0.000608
+ select max=7 rfds=[5] wfds=[6] efds=[] to=13.996686
+ select=1 rfds=[] wfds=[6] efds=[]
+ +0.000977
+ read fd=6 buflen=1
+ read=ECONNREFUSED
+ +0.000450
+ close fd=6
+ close=OK
+ +0.000617
+ select max=6 rfds=[5] wfds=[] efds=[] to=0.000000
+ select=0 rfds=[] wfds=[] efds=[]
+ +0.000689
+ close fd=5
+ close=OK
+ +0.002951
diff --git a/regress/case-tcpblockwr.err b/regress/case-tcpblockwr.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-tcpblockwr.out b/regress/case-tcpblockwr.out
new file mode 100644 (file)
index 0000000..fa0e89a
--- /dev/null
@@ -0,0 +1,105 @@
+adns debug: using nameserver 172.18.45.2
+test.iwj.relativity.greenend.org.uk. flags 2 type 1 A(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 2 NS(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 5 CNAME(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 6 SOA(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 12 PTR(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 13 HINFO(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 15 MX(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 16 TXT(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 17 RP(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65537 A(addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65538 NS(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65548 PTR(checked) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65551 MX(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131078 SOA(822) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131089 RP(822) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 1 A(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 2 NS(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 5 CNAME(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 6 SOA(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 12 PTR(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 13 HINFO(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 15 MX(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 16 TXT(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 17 RP(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65537 A(addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65538 NS(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65548 PTR(checked) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65551 MX(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131078 SOA(822) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131089 RP(822) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 1 A(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 2 NS(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 5 CNAME(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 6 SOA(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 12 PTR(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 13 HINFO(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 15 MX(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 16 TXT(-) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 17 RP(raw) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65537 A(addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65538 NS(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65548 PTR(checked) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 65551 MX(+addr) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131078 SOA(822) submitted
+test.iwj.relativity.greenend.org.uk. flags 2 type 131089 RP(822) submitted
+adns debug: TCP connected (NS=172.18.45.2)
+test.iwj.relativity.greenend.org.uk. flags 2 type A(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(raw): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk
+test.iwj.relativity.greenend.org.uk. flags 2 type CNAME(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(raw): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk hostmaster.relativity.greenend.org.uk 42 3600 120 6604800 60
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(raw): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type HINFO(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(raw): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type TXT(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(raw): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type A(addr): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(+addr): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk ok 0 ok "OK" ( INET 172.18.45.6 )
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(checked): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(822): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk hostmaster@relativity.greenend.org.uk 42 3600 120 6604800 60
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(822): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type A(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(raw): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk
+test.iwj.relativity.greenend.org.uk. flags 2 type CNAME(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(raw): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk hostmaster.relativity.greenend.org.uk 42 3600 120 6604800 60
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(raw): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type HINFO(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(raw): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type TXT(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(raw): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type A(addr): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(+addr): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk ok 0 ok "OK" ( INET 172.18.45.6 )
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(checked): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(822): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk hostmaster@relativity.greenend.org.uk 42 3600 120 6604800 60
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(822): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type A(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(raw): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk
+test.iwj.relativity.greenend.org.uk. flags 2 type CNAME(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(raw): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk hostmaster.relativity.greenend.org.uk 42 3600 120 6604800 60
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(raw): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type HINFO(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(raw): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type TXT(-): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(raw): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type A(addr): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type NS(+addr): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk ok 0 ok "OK" ( INET 172.18.45.6 )
+test.iwj.relativity.greenend.org.uk. flags 2 type PTR(checked): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type MX(+addr): No such data; nrrs=0; cname=$; owner=$; ttl=59
+test.iwj.relativity.greenend.org.uk. flags 2 type SOA(822): OK; nrrs=1; cname=$; owner=$; ttl=59
+ ns0.relativity.greenend.org.uk hostmaster@relativity.greenend.org.uk 42 3600 120 6604800 60
+test.iwj.relativity.greenend.org.uk. flags 2 type RP(822): No such data; nrrs=0; cname=$; owner=$; ttl=60
+rc=0
diff --git a/regress/case-tcpblockwr.sys b/regress/case-tcpblockwr.sys
new file mode 100644 (file)
index 0000000..81864aa
--- /dev/null
@@ -0,0 +1,644 @@
+adnstest anarres -0x300
+2/test.iwj.relativity.greenend.org.uk. 2/test.iwj.relativity.greenend.org.uk. 2/test.iwj.relativity.greenend.org.uk.
+ start 962143438.172669
+ socket type=SOCK_DGRAM
+ socket=5
+ +0.000433
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000443
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000409
+ socket type=SOCK_STREAM
+ socket=6
+ +0.001762
+ fcntl fd=6 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000420
+ fcntl fd=6 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000408
+ connect fd=6 addr=172.18.45.2:53
+ connect=EINPROGRESS
+ +0.000689
+ select max=7 rfds=[5] wfds=[6] efds=[] to=13.996721
+ select=1 rfds=[] wfds=[6] efds=[]
+ +0.278976
+ read fd=6 buflen=1
+ read=EAGAIN
+ +0.001048
+ write fd=6
+     0035311f 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=55
+ +0.001447
+ write fd=6
+     00353120 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001.
+ write=55
+ +0.001424
+ write fd=6
+     00353121 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 050001.
+ write=55
+ +0.001287
+ write fd=6
+     00353122 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001.
+ write=55
+ +0.001199
+ write fd=6
+     00353123 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ write=55
+ +0.001220
+ write fd=6
+     00353124 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0d0001.
+ write=55
+ +0.001189
+ write fd=6
+     00353125 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0f0001.
+ write=55
+ +0.001368
+ write fd=6
+     00353126 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 100001.
+ write=55
+ +0.001220
+ write fd=6
+     00353127 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001.
+ write=55
+ +0.001313
+ write fd=6
+     00353128 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=55
+ +0.001209
+ write fd=6
+     00353129 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001.
+ write=55
+ +0.001192
+ write fd=6
+     0035312a 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ write=55
+ +0.001192
+ write fd=6
+     0035312b 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0f0001.
+ write=55
+ +0.001214
+ write fd=6
+     0035312c 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001.
+ write=55
+ +0.001195
+ write fd=6
+     0035312d 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001.
+ write=55
+ +0.001424
+ write fd=6
+     0035312e 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=55
+ +0.001226
+ write fd=6
+     0035312f 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001.
+ write=55
+ +0.001214
+ write fd=6
+     00353130 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 050001.
+ write=55
+ +0.001202
+ write fd=6
+     00353131 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001.
+ write=55
+ +0.001187
+ write fd=6
+     00353132 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ write=55
+ +0.001207
+ write fd=6
+     00353133 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0d0001.
+ write=55
+ +0.001192
+ write fd=6
+     00353134 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0f0001.
+ write=55
+ +0.001214
+ write fd=6
+     00353135 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 100001.
+ write=55
+ +0.001386
+ write fd=6
+     00353136 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001.
+ write=55
+ +0.001215
+ write fd=6
+     00353137 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=55
+ +0.001448
+ write fd=6
+     00353138 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001.
+ write=55
+ +0.001202
+ write fd=6
+     00353139 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ write=55
+ +0.001201
+ write fd=6
+     0035313a 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0f0001.
+ write=55
+ +0.001231
+ write fd=6
+     0035313b 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001.
+ write=55
+ +0.001197
+ write fd=6
+     0035313c 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001.
+ write=55
+ +0.001212
+ write fd=6
+     0035313d 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=55
+ +0.001369
+ write fd=6
+     0035313e 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001.
+ write=55
+ +0.001212
+ write fd=6
+     0035313f 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 050001.
+ write=55
+ +0.001334
+ write fd=6
+     00353140 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001.
+ write=55
+ +0.001212
+ write fd=6
+     00353141 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ write=55
+ +0.001207
+ write fd=6
+     00353142 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0d0001.
+ write=55
+ +0.001187
+ write fd=6
+     00353143 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0f0001.
+ write=55
+ +0.001186
+ write fd=6
+     00353144 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 100001.
+ write=55
+ +0.001204
+ write fd=6
+     00353145 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001.
+ write=55
+ +0.001365
+ write fd=6
+     00353146 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=55
+ +0.001254
+ write fd=6
+     00353147 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001.
+ write=55
+ +0.001278
+ write fd=6
+     00353148 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001.
+ write=55
+ +0.001207
+ write fd=6
+     00353149 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0f0001.
+ write=55
+ +0.001201
+ write fd=6
+     0035314a 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001.
+ write=55
+ +0.001188
+ write fd=6
+     0035314b 01000001 00000000 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001.
+ write=30
+ +1.814491
+ select max=7 rfds=[5,6] wfds=[6] efds=[6] to=27.847175
+ select=2 rfds=[6] wfds=[6] efds=[]
+ +5.-217468
+ read fd=6 buflen=2
+ read=OK
+     0082.
+ +0.012764
+ read fd=6 buflen=130
+ read=OK
+     311f8580 00010000 00010000 04746573 74036977 6a0a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01c00c00 06000100 00003c00
+     41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064 c8000000
+     003c.
+ +0.003700
+ read fd=6 buflen=132
+ read=OK
+     00713120 85800001 00010000 00010474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 020001c0 0c000200 01000000
+     3c002003 6e73300a 72656c61 74697669 74790867 7265656e 656e6403 6f726702
+     756b00c0 41000100 01000151 800004ac 122d0600 82312185 80000100 00000100
+     00047465.
+ +0.003001
+ read fd=6 buflen=115
+ read=OK
+     73740369 776a0a72 656c6174 69766974 79086772 65656e65 6e64036f 72670275
+     6b000005 0001c00c 00060001 0000003c 0041036e 73300a72 656c6174 69766974
+     79086772 65656e65 6e64036f 72670275 6b000a68 6f73746d 61737465 72c04500
+     00002a00 000e1000 00007800 64c80000 00003c.
+ +0.001128
+ read fd=6 buflen=132
+ read=OK
+     00a03122 85800001 00010001 00010474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 060001c0 0c000600 01000000
+     3c004103 6e73300a 72656c61 74697669 74790867 7265656e 656e6403 6f726702
+     756b000a 686f7374 6d617374 6572c045 0000002a 00000e10 00000078 0064c800
+     0000003c.
+ +0.299749
+ read fd=6 buflen=30
+ read=OK
+     c00c0002 00010000 003c0002 c041c041 00010001 00015180 0004ac12 2d06.
+ +0.000767
+ read fd=6 buflen=162
+ read=OK
+     00823123 85800001 00000001 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001c0 0c000600 01000000
+     3c004103 6e73300a 72656c61 74697669 74790867 7265656e 656e6403 6f726702
+     756b000a 686f7374 6d617374 6572c045 0000002a 00000e10 00000078 0064c800
+     0000003c 00823124 85800001 00000001 00000474 65737403 69776a0a 72656c61
+     7469.
+ +0.001110
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000d00 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31258580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000934
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000f00 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31268580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.001041
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00001000 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31278580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000940
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00001100 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31288580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.001164
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000100 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0071 31298580 00010001 00000001 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000955
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000200 01c00c00 02000100
+     00003c00 20036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00c04100 01000100 01518000 04ac122d 06008231 2a858000 01000000
+     01000004 74657374 0369776a 0a72656c 61746976 69747908 67726565 6e656e64
+     036f7267.
+ +0.001035
+ read fd=6 buflen=115
+ read=OK
+     02756b00 000c0001 c00c0006 00010000 003c0041 036e7330 0a72656c 61746976
+     69747908 67726565 6e656e64 036f7267 02756b00 0a686f73 746d6173 746572c0
+     45000000 2a00000e 10000000 780064c8 00000000 3c008231 2b858000 01000000
+     01000004 74657374 0369776a 0a72656c 617469.
+ +0.000978
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000f00 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c00a0 312c8580 00010001 00010001 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000953
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000600 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003cc00c 00020001 0000003c 0002c041 c0410001 00010001 51800004
+     ac122d06.
+ +0.002102
+ read fd=6 buflen=162
+ read=OK
+     0082312d 85800001 00000001 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001c0 0c000600 01000000
+     3c004103 6e73300a 72656c61 74697669 74790867 7265656e 656e6403 6f726702
+     756b000a 686f7374 6d617374 6572c045 0000002a 00000e10 00000078 0064c800
+     0000003c 0082312e 85800001 00000001 00000474 65737403 69776a0a 72656c61
+     7469.
+ +0.001126
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000100 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0071 312f8580 00010001 00000001 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000976
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000200 01c00c00 02000100
+     00003c00 20036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00c04100 01000100 01518000 04ac122d 06008231 30858000 01000000
+     01000004 74657374 0369776a 0a72656c 61746976 69747908 67726565 6e656e64
+     036f7267.
+ +0.000930
+ read fd=6 buflen=115
+ read=OK
+     02756b00 00050001 c00c0006 00010000 003c0041 036e7330 0a72656c 61746976
+     69747908 67726565 6e656e64 036f7267 02756b00 0a686f73 746d6173 746572c0
+     45000000 2a00000e 10000000 780064c8 00000000 3c00a031 31858000 01000100
+     01000104 74657374 0369776a 0a72656c 617469.
+ +0.001062
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000600 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003cc00c 00020001 0000003c 0002c041 c0410001 00010001 51800004
+     ac122d06.
+ +0.000937
+ read fd=6 buflen=162
+ read=OK
+     00823132 85800001 00000001 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001c0 0c000600 01000000
+     3c004103 6e73300a 72656c61 74697669 74790867 7265656e 656e6403 6f726702
+     756b000a 686f7374 6d617374 6572c045 0000002a 00000e10 00000078 0064c800
+     0000003c 00823133 85800001 00000001 00000474 65737403 69776a0a 72656c61
+     7469.
+ +0.001660
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000d00 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31348580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.001133
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000f00 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31358580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000963
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00001000 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31368580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.001248
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00001100 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31378580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.001740
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000100 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0071 31388580 00010001 00000001 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000981
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000200 01c00c00 02000100
+     00003c00 20036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00c04100 01000100 01518000 04ac122d 06008231 39858000 01000000
+     01000004 74657374 0369776a 0a72656c 61746976 69747908 67726565 6e656e64
+     036f7267.
+ +0.000931
+ read fd=6 buflen=115
+ read=OK
+     02756b00 000c0001 c00c0006 00010000 003c0041 036e7330 0a72656c 61746976
+     69747908 67726565 6e656e64 036f7267 02756b00 0a686f73 746d6173 746572c0
+     45000000 2a00000e 10000000 780064c8 00000000 3c008231 3a858000 01000000
+     01000004 74657374 0369776a 0a72656c 617469.
+ +0.000978
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000f00 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c00a0 313b8580 00010001 00010001 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000926
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000600 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003cc00c 00020001 0000003c 0002c041 c0410001 00010001 51800004
+     ac122d06.
+ +0.012223
+ read fd=6 buflen=162
+ read=OK
+     0082313c 85800001 00000001 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001c0 0c000600 01000000
+     3c004103 6e73300a 72656c61 74697669 74790867 7265656e 656e6403 6f726702
+     756b000a 686f7374 6d617374 6572c045 0000002a 00000e10 00000078 0064c800
+     0000003c 0082313d 85800001 00000001 00000474 65737403 69776a0a 72656c61
+     7469.
+ +0.001327
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000100 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0071 313e8580 00010001 00000001 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000945
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000200 01c00c00 02000100
+     00003c00 20036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00c04100 01000100 01518000 04ac122d 06008231 3f858000 01000000
+     01000004 74657374 0369776a 0a72656c 61746976 69747908 67726565 6e656e64
+     036f7267.
+ +0.000969
+ read fd=6 buflen=115
+ read=OK
+     02756b00 00050001 c00c0006 00010000 003c0041 036e7330 0a72656c 61746976
+     69747908 67726565 6e656e64 036f7267 02756b00 0a686f73 746d6173 746572c0
+     45000000 2a00000e 10000000 780064c8 00000000 3c00a031 40858000 01000100
+     01000104 74657374 0369776a 0a72656c 617469.
+ +0.000930
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000600 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003cc00c 00020001 0000003c 0002c041 c0410001 00010001 51800004
+     ac122d06.
+ +0.000929
+ read fd=6 buflen=162
+ read=OK
+     00823141 85800001 00000001 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 0c0001c0 0c000600 01000000
+     3c004103 6e73300a 72656c61 74697669 74790867 7265656e 656e6403 6f726702
+     756b000a 686f7374 6d617374 6572c045 0000002a 00000e10 00000078 0064c800
+     0000003c 00823142 85800001 00000001 00000474 65737403 69776a0a 72656c61
+     7469.
+ +0.001098
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000d00 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31438580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.001053
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000f00 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31448580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.001035
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00001000 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31458580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000974
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00001100 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0082 31468580 00010000 00010000 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000933
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000100 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c0071 31478580 00010001 00000001 04746573 74036977 6a0a7265
+     6c617469.
+ +0.001037
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000200 01c00c00 02000100
+     00003c00 20036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 00c04100 01000100 01518000 04ac122d 06008231 48858000 01000000
+     01000004 74657374 0369776a 0a72656c 61746976 69747908 67726565 6e656e64
+     036f7267.
+ +0.000956
+ read fd=6 buflen=115
+ read=OK
+     02756b00 000c0001 c00c0006 00010000 003c0041 036e7330 0a72656c 61746976
+     69747908 67726565 6e656e64 036f7267 02756b00 0a686f73 746d6173 746572c0
+     45000000 2a00000e 10000000 780064c8 00000000 3c008231 49858000 01000000
+     01000004 74657374 0369776a 0a72656c 617469.
+ +0.001151
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000f00 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003c00a0 314a8580 00010001 00010001 04746573 74036977 6a0a7265
+     6c617469.
+ +0.000955
+ read fd=6 buflen=132
+ read=OK
+     76697479 08677265 656e656e 64036f72 6702756b 00000600 01c00c00 06000100
+     00003c00 41036e73 300a7265 6c617469 76697479 08677265 656e656e 64036f72
+     6702756b 000a686f 73746d61 73746572 c0450000 002a0000 0e100000 00780064
+     c8000000 003cc00c 00020001 0000003c 0002c041 c0410001 00010001 51800004
+     ac122d06.
+ +0.000578
+ read fd=6 buflen=162
+ read=EAGAIN
+ +1.000435
+ write fd=6
+     76697479 08677265 656e656e 64036f72 6702756b 00001100 01.
+ write=25
+ +0.000932
+ select max=7 rfds=[5,6] wfds=[] efds=[6] to=21.691550
+ select=1 rfds=[6] wfds=[] efds=[]
+ +5.-217468
+ read fd=6 buflen=162
+ read=OK
+     0082314b 85800001 00000001 00000474 65737403 69776a0a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 110001c0 0c000600 01000000
+     3c004103 6e73300a 72656c61 74697669 74790867 7265656e 656e6403 6f726702
+     756b000a 686f7374 6d617374 6572c045 0000002a 00000e10 00000078 0064c800
+     0000003c.
+ +0.217468
+ read fd=6 buflen=162
+ read=EAGAIN
+ +0.017051
+ close fd=5
+ close=OK
+ +0.595595
+ close fd=6
+ close=OK
+ +0.000531
diff --git a/regress/case-tcpbreakin.err b/regress/case-tcpbreakin.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-tcpbreakin.out b/regress/case-tcpbreakin.out
new file mode 100644 (file)
index 0000000..46cafba
--- /dev/null
@@ -0,0 +1,8 @@
+adns debug: using nameserver 172.18.45.6
+6.45.18.172.in-addr.arpa flags 2 type 65548 PTR(checked) submitted
+adns debug: TCP connected (NS=172.18.45.6)
+adns warning: TCP connection failed: write: Broken pipe (NS=172.18.45.6)
+adns debug: TCP connected (NS=172.18.45.6)
+6.45.18.172.in-addr.arpa flags 2 type PTR(checked): OK; nrrs=1; cname=$; owner=$; ttl=86400
+ davenant.relativity.greenend.org.uk
+rc=0
diff --git a/regress/case-tcpbreakin.sys b/regress/case-tcpbreakin.sys
new file mode 100644 (file)
index 0000000..9e8e75b
--- /dev/null
@@ -0,0 +1,114 @@
+adnstest default
+:65548 2/6.45.18.172.in-addr.arpa
+ start 957718868.938329
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000161
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000059
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000038
+ socket type=SOCK_STREAM
+ socket=5
+ +0.001056
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000238
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000055
+ connect fd=5 addr=172.18.45.6:53
+ connect=EINPROGRESS
+ +0.000723
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.997928
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.000536
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000118
+ write fd=5
+     002a311f 01000001 00000000 00000136 02343502 31380331 37320769 6e2d6164
+     64720461 72706100 000c0001.
+ write=44
+ +0.001433
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.995841
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.000260
+ read fd=5 buflen=2
+ read=OK
+     00d7.
+ +0.000302
+ read fd=5 buflen=215
+ read=OK
+     311f8580 00010001 00030003 01360234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00250864 6176656e 616e740a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0002 34350231
+     38033137 3207696e 2d616464 72046172 70610000 02000100 01518000 06036e73
+     30c03fc0 5b000200 01000151 80000603 6e7331c0 3fc05b00 02000100 01518000
+     06036e73 32c03fc0 7d000100 01000151 800004ac 122d06c0 8f000100 01000151
+     800004ac 122d41c0 a1000100 01000151 800004ac 122d01.
+ +0.001364
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01.
+ sendto=EMSGSIZE
+ +0.000001
+ write fd=5
+     00353120 01000001 00000000 00000864 6176656e 616e740a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=EPIPE
+ +0.001233
+ close fd=5
+ close=OK
+ +0.000001
+ select max=5 rfds=[4] wfds=[] efds=[] to=0.000000
+ select=1 rfds=[] wfds=[] efds=[]
+ +0.000118
+ socket type=SOCK_STREAM
+ socket=5
+ +0.001056
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000238
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000055
+ connect fd=5 addr=172.18.45.6:53
+ connect=EINPROGRESS
+ +0.000723
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.997928
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.000536
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000723
+ write fd=5
+     00353120 01000001 00000000 00000864 6176656e 616e740a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=44
+ +0.000001
+ select max=6 rfds=[4,5] wfds=[5] efds=[5] to=29.993649
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.000260
+ read fd=5 buflen=217
+ read=OK
+     00c5
+     31208580 00010001 00030003 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01c00c00 01000100 01518000
+     04ac122d 060a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000200 01000151 80000603 6e7330c0 45c04500 02000100 01518000 06036e73
+     31c045c0 45000200 01000151 80000603 6e7332c0 45c06b00 01000100 01518000
+     04ac122d 06c07d00 01000100 01518000 04ac122d 41c08f00 01000100 01518000
+     04ac122d 01.
+ +0.001171
+ read fd=5 buflen=217
+ read=EAGAIN
+ +0.000189
+ close fd=4
+ close=OK
+ +0.000352
+ close fd=5
+ close=OK
+ +0.000507
diff --git a/regress/case-tcpmultipart.err b/regress/case-tcpmultipart.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-tcpmultipart.out b/regress/case-tcpmultipart.out
new file mode 100644 (file)
index 0000000..3a7a124
--- /dev/null
@@ -0,0 +1,71 @@
+adns debug: using nameserver 172.31.80.9
+132.76.224.195.in-addr.arpa flags 2 type 12 PTR(raw) submitted
+manymorerrs.test.culture.dotat.at. flags 2 type 12 PTR(raw) submitted
+132.76.224.195.in-addr.arpa flags 2 type 12 PTR(raw) submitted
+adns debug: TCP connected (NS=172.31.80.9)
+132.76.224.195.in-addr.arpa flags 2 type PTR(raw): OK; nrrs=1; cname=$; owner=$; ttl=86400
+ chiark.greenend.org.uk
+manymorerrs.test.culture.dotat.at. flags 2 type PTR(raw): OK; nrrs=60; cname=$; owner=$; ttl=86400
+ very-long-domain.to-ensure-truncation.00.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.01.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.02.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.03.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.04.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.05.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.06.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.07.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.08.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.09.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.10.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.11.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.12.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.13.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.14.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.15.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.16.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.17.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.18.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.19.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.20.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.21.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.22.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.23.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.24.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.25.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.26.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.27.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.28.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.29.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.30.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.31.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.32.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.33.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.34.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.35.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.36.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.37.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.38.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.39.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.40.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.41.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.42.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.43.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.44.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.45.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.46.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.47.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.48.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.49.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.50.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.51.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.52.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.53.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.54.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.55.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.56.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.57.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.58.test.culture.dotat.at
+ very-long-domain.to-ensure-truncation.59.test.culture.dotat.at
+132.76.224.195.in-addr.arpa flags 2 type PTR(raw): OK; nrrs=1; cname=$; owner=$; ttl=86400
+ chiark.greenend.org.uk
+rc=0
diff --git a/regress/case-tcpmultipart.sys b/regress/case-tcpmultipart.sys
new file mode 100644 (file)
index 0000000..d26ded2
--- /dev/null
@@ -0,0 +1,248 @@
+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
+ start 938365454.994875
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000164
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000055
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000043
+ socket type=SOCK_STREAM
+ socket=5
+ +0.001177
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000044
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000041
+ connect fd=5 addr=172.31.80.9:53
+ connect=EINPROGRESS
+ +0.000414
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.998324
+ select=1 rfds=[] wfds=[5] efds=[]
+ +1.-647444
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000176
+ write fd=5
+     002d311f 01000001 00000000 00000331 33320237 36033232 34033139 3507696e
+     2d616464 72046172 70610000 0c0001.
+ write=47
+ +0.000727
+ write fd=5
+     00333120 01000001 00000000 00000b6d 616e796d 6f726572 72730474 65737407
+     63756c74 75726505 646f7461 74026174 00000c00 01.
+ write=53
+ +0.000359
+ write fd=5
+     002d3121 01000001 00000000 00000331 33320237 36033232 34033139 3507696e
+     2d616464 72046172 70610000 0c0001.
+ write=47
+ +0.000273
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.644233
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.538651
+ read fd=5 buflen=2
+ read=OK
+     0127.
+ +0.000289
+ read fd=5 buflen=295
+ read=OK
+     311f8580 00010001 00050005 03313332 02373603 32323403 31393507 696e2d61
+     64647204 61727061 00000c00 01c00c00 0c000100 01518000 18066368 6961726b
+     08677265 656e656e 64036f72 6702756b 00023736 03323234 03313935 07696e2d
+     61646472 04617270 61000002 00010001 51800011 04646e73 3006656c 6d61696c
+     02636fc0 4dc05100 02000100 01518000 0704646e 7331c079 c0510002 00010001
+     51800007 04646e73 32c079c0 51000200 01000151 80000e03 6e733204 78617261
+     036e6574 00c05100 02000100 01518000 06036e73 33c0bbc0 74000100 01000055
+     c80004c1 7ae911c0 91000100 0100004f 650004c1 7ae901c0 a4000100 0100004f
+     650004c3 e04cc1c0 b7000100 0100014c 4b0004c2 8fa16bc0 d1000100 0100014c
+     4b0004c2 8fa319.
+ +0.001247
+ read fd=5 buflen=297
+ read=EAGAIN
+ +0.000476
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.105246
+ select=1 rfds=[5] wfds=[] efds=[]
+ +1.-401146
+ read fd=5 buflen=297
+ read=OK
+     0dbe3120 85800001 003c0002 00020b6d 616e796d 6f726572 72730474 65737407
+     63756c74 75726505 646f7461 74026174 00000c00 01c00c00 0c000100 01518000
+     40107665 72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e 73757265 2d747275
+     6e636174 696f6e02 30300474 65737407 63756c74 75726505 646f7461 74026174
+     00c00c00 0c000100 01518000 2b107665 72792d6c 6f6e672d 646f6d61 696e1474
+     6f2d656e 73757265 2d747275 6e636174 696f6e02 3031c068 c00c000c 00010001
+     5180002b 10766572 792d6c6f 6e672d64 6f6d6169 6e14746f 2d656e73 7572652d
+     7472756e 63617469 6f6e0230 32c068c0 0c000c00 01000151 80002b10 76657279
+     2d6c6f6e 672d646f 6d61696e 14746f2d 656e7375 72652d74 72756e63 6174696f
+     6e023033 c068c00c 00.
+ +0.001076
+ read fd=5 buflen=3223
+ read=OK
+     0c000100 01518000 2b107665 72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e
+     73757265 2d747275 6e636174 696f6e02 3034c068 c00c000c 00010001 5180002b
+     10766572 792d6c6f 6e672d64 6f6d6169 6e14746f 2d656e73 7572652d 7472756e
+     63617469 6f6e0230 35c068c0 0c000c00 01000151 80002b10 76657279 2d6c6f6e
+     672d646f 6d61696e 14746f2d 656e7375 72652d74 72756e63 6174696f 6e023036
+     c068c00c 000c0001 00015180 002b1076 6572792d 6c6f6e67 2d646f6d 61696e14
+     746f2d65 6e737572 652d7472 756e6361 74696f6e 023037c0 68c00c00 0c000100
+     01518000 2b107665 72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e 73757265
+     2d747275 6e636174 696f6e02 3038c068 c00c000c 00010001 5180002b 10766572
+     792d6c6f 6e672d64 6f6d6169 6e14746f 2d656e73 7572652d 7472756e 63617469
+     6f6e0230 39c068c0 0c000c00 01000151 80002b10 76657279 2d6c6f6e 672d646f
+     6d61696e 14746f2d 656e7375 72652d74 72756e63 6174696f 6e023130 c068c00c
+     000c0001 00015180 002b1076 6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65
+     6e737572 652d7472 756e6361 74696f6e 023131c0 68c00c00 0c000100 01518000
+     2b107665 72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e 73757265 2d747275
+     6e636174 696f6e02 3132c068 c00c000c 00010001 5180002b 10766572 792d6c6f
+     6e672d64 6f6d6169 6e14746f 2d656e73 7572652d 7472756e 63617469 6f6e0231
+     33c068c0 0c000c00 01000151 80002b10 76657279 2d6c6f6e 672d646f 6d61696e
+     14746f2d 656e7375 72652d74 72756e63 6174696f 6e023134 c068c00c 000c0001
+     00015180 002b1076 6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65 6e737572
+     652d7472 756e6361 74696f.
+ +0.002411
+ read fd=5 buflen=2572
+ read=EAGAIN
+ +0.000101
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=28.502804
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.336462
+ read fd=5 buflen=2572
+ read=OK
+     6e023135 c068c00c 000c0001 00015180 002b1076 6572792d 6c6f6e67 2d646f6d
+     61696e14 746f2d65 6e737572 652d7472 756e6361 74696f6e 023136c0 68c00c00
+     0c000100 01518000 2b107665 72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e
+     73757265 2d747275 6e636174 696f6e02 3137c068 c00c000c 00010001 5180002b
+     10766572 792d6c6f 6e672d64 6f6d6169 6e14746f 2d656e73 7572652d 7472756e
+     63617469 6f6e0231 38c068c0 0c000c00 01000151 80002b10 76657279 2d6c6f6e
+     672d646f 6d61696e 14746f2d 656e7375 72652d74 72756e63 6174696f 6e023139
+     c068c00c 000c0001 00015180 002b1076 6572792d 6c6f6e67 2d646f6d 61696e14
+     746f2d65 6e737572 652d7472 756e6361 74696f6e 023230c0 68c00c00 0c000100
+     01518000 2b107665 72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e 73757265
+     2d747275 6e636174 696f6e02 3231c068 c00c000c 00010001 5180002b 10766572
+     792d6c6f 6e672d64 6f6d6169 6e14746f 2d656e73 7572652d 7472756e 63617469
+     6f6e0232 32c068c0 0c000c00 01000151 80002b10 76657279 2d6c6f6e 672d646f
+     6d61696e 14746f2d 656e7375 72652d74 72756e63 6174696f 6e023233 c068c00c
+     000c0001 00015180 002b1076 6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65
+     6e737572 652d7472 756e6361 74696f6e 023234c0 68c00c00 0c000100 01518000
+     2b107665 72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e 73757265 2d747275
+     6e636174 696f6e02 3235c068 c00c000c 00010001 5180002b 10766572 792d6c6f
+     6e672d64 6f6d6169 6e14746f 2d656e73 7572652d 7472756e 63617469 6f6e0232
+     36c068c0 0c000c00 01000151 80002b10 76657279 2d6c6f6e 672d646f 6d61696e
+     14746f2d 656e7375 72652d74 72756e63 6174696f 6e023237 c068c00c 000c0001
+     00015180 002b1076 6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65 6e737572
+     652d7472 756e6361 74696f6e 023238c0 68c00c00 0c000100 01518000 2b107665
+     72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e 73757265 2d747275 6e636174
+     696f6e02 3239c068 c00c000c 00010001 5180002b 10766572 792d6c6f 6e672d64
+     6f6d6169 6e14746f 2d656e73 7572652d 7472756e 63617469 6f6e0233 30c068c0
+     0c000c00 01000151 80002b10 76657279 2d6c6f6e 672d646f 6d61696e 14746f2d
+     656e7375 72652d74 72756e63 6174696f 6e023331 c068c00c 000c0001 00015180
+     002b1076 6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65 6e737572 652d7472
+     756e6361 74696f6e 023332c0 68c00c00 0c000100.
+ +0.003315
+ read fd=5 buflen=1624
+ read=EAGAIN
+ +0.000124
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=28.162903
+ select=1 rfds=[5] wfds=[] efds=[]
+ +1.-683589
+ read fd=5 buflen=1624
+ read=OK
+     01518000 2b107665 72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e 73757265
+     2d747275 6e636174 696f6e02 3333c068 c00c000c 00010001 5180002b 10766572
+     792d6c6f 6e672d64 6f6d6169 6e14746f 2d656e73 7572652d 7472756e 63617469
+     6f6e0233 34c068c0 0c000c00 01000151 80002b10 76657279 2d6c6f6e 672d646f
+     6d61696e 14746f2d 656e7375 72652d74 72756e63 6174696f 6e023335 c068c00c
+     000c0001 00015180 002b1076 6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65
+     6e737572 652d7472 756e6361 74696f6e 023336c0 68c00c00 0c000100 01518000
+     2b107665 72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e 73757265 2d747275
+     6e636174 696f6e02 3337c068 c00c000c 00010001 5180002b 10766572 792d6c6f
+     6e672d64 6f6d6169 6e14746f 2d656e73 7572652d 7472756e 63617469 6f6e0233
+     38c068c0 0c000c00 01000151 80002b10 76657279 2d6c6f6e 672d646f 6d61696e
+     14746f2d 656e7375 72652d74 72756e63 6174696f 6e023339 c068c00c 000c0001
+     00015180 002b1076 6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65 6e737572
+     652d7472 756e6361 74696f6e 023430c0 68c00c00 0c000100 01518000 2b107665
+     72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e 73757265 2d747275 6e636174
+     696f6e02 3431c068 c00c000c 00010001 5180002b 10766572 792d6c6f 6e672d64
+     6f6d6169 6e14746f 2d656e73 7572652d 7472756e 63617469 6f6e0234 32c068c0
+     0c000c00 01000151 80002b10 76657279 2d6c6f6e 672d646f 6d61696e 14746f2d
+     656e7375 72652d74 72756e63 6174696f 6e023433 c068c00c 000c0001 00015180
+     002b1076 6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65 6e737572 652d7472
+     756e6361 74696f6e 023434c0 68c00c00 0c000100 01518000 2b107665 72792d6c
+     6f6e672d 646f6d61 696e1474 6f2d656e 73757265 2d747275 6e636174 696f6e02
+     3435c068 c00c000c 00010001 5180002b 10766572 792d6c6f 6e672d64 6f6d6169
+     6e14746f 2d656e73 7572652d 7472756e 63617469 6f6e0234 36c068c0 0c000c00
+     01000151 80002b10 76657279 2d6c6f6e 672d646f 6d61696e 14746f2d 656e7375
+     72652d74 72756e63 6174696f 6e023437 c068c00c 000c0001 00015180 002b1076
+     6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65 6e737572 652d7472 756e6361
+     74696f6e 023438c0 68c00c00 0c000100 01518000 2b107665 72792d6c 6f6e672d
+     646f6d61 696e1474 6f2d656e 73757265 2d747275 6e636174 696f6e02 3439c068
+     c00c000c 00010001 5180002b 10766572 792d6c6f.
+ +0.003201
+ read fd=5 buflen=676
+ read=EAGAIN
+ +0.000114
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=27.843177
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.376863
+ read fd=5 buflen=676
+ read=OK
+     6e672d64 6f6d6169 6e14746f 2d656e73 7572652d 7472756e 63617469 6f6e0235
+     30c068c0 0c000c00 01000151 80002b10 76657279 2d6c6f6e 672d646f 6d61696e
+     14746f2d 656e7375 72652d74 72756e63 6174696f 6e023531 c068c00c 000c0001
+     00015180 002b1076 6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65 6e737572
+     652d7472 756e6361 74696f6e 023532c0 68c00c00 0c000100 01518000 2b107665
+     72792d6c 6f6e672d 646f6d61 696e1474 6f2d656e 73757265 2d747275 6e636174
+     696f6e02 3533c068 c00c000c 00010001 5180002b 10766572 792d6c6f 6e672d64
+     6f6d6169 6e14746f 2d656e73 7572652d 7472756e 63617469 6f6e0235 34c068c0
+     0c000c00 01000151 80002b10 76657279 2d6c6f6e 672d646f 6d61696e 14746f2d
+     656e7375 72652d74 72756e63 6174696f 6e023535 c068c00c 000c0001 00015180
+     002b1076 6572792d 6c6f6e67 2d646f6d 61696e14 746f2d65 6e737572 652d7472
+     756e6361 74696f6e 023536c0 68c00c00 0c000100 01518000 2b107665 72792d6c
+     6f6e672d 646f6d61 696e1474 6f2d656e 73757265 2d747275 6e636174 696f6e02
+     3537c068 c00c000c 00010001 5180002b 10766572 792d6c6f 6e672d64 6f6d6169
+     6e14746f 2d656e73 7572652d 7472756e 63617469 6f6e0235 38c068c0 0c000c00
+     01000151 80002b10 76657279 2d6c6f6e 672d646f 6d61696e 14746f2d 656e7375
+     72652d74 72756e63 6174696f 6e023539 c068c06d 00020001 00054600 0014076c
+     69627261 7279066c 73706163 65036f72 6700c06d 00020001 00054600 001b026e
+     73066368 6961726b 08677265 656e656e 64036f72 6702756b 00076c69 62726172
+     79066c73 70616365 036f7267 00000100 01000161 890004c3 c8013a02 6e730663
+     68696172 6b086772 65656e65 6e64036f 72670275 6b000001 00010001 51800004
+     c3e04c84.
+ +0.002355
+ read fd=5 buflen=3520
+ read=OK
+     01273121 85800001 00010005 00050331 33320237 36033232 34033139 3507696e
+     2d616464 72046172 70610000 0c0001c0 0c000c00 01000151 80001806 63686961
+     726b0867 7265656e 656e6403 6f726702 756b0002 37360332 32340331 39350769
+     6e2d6164 64720461 72706100 00020001 00015180 00110464 6e733006 656c6d61
+     696c0263 6fc04dc0 51000200 01000151 80000704 646e7331 c079c051 00020001
+     00015180 00070464 6e7332c0 79c05100 02000100 01518000 0e036e73 32047861
+     7261036e 657400c0 51000200 01000151 80000603 6e7333c0 bbc07400 01000100
+     0055c800 04c17ae9 11c09100 01000100 004f6500 04c17ae9 01c0a400 01000100
+     004f6500 04c3e04c c1c0b700 01000100.
+ +0.009447
+ read fd=5 buflen=3248
+ read=EAGAIN
+ +0.000066
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=27.454446
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.316770
+ read fd=5 buflen=3248
+ read=OK
+     014c4b00 04c28fa1 6bc0d100 01000100 014c4b00 04c28fa3 19.
+ +0.000195
+ read fd=5 buflen=3520
+ read=EAGAIN
+ +0.000429
+ close fd=4
+ close=OK
+ +0.000375
+ close fd=5
+ close=OK
+ +0.000226
diff --git a/regress/case-tcpptr.err b/regress/case-tcpptr.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-tcpptr.out b/regress/case-tcpptr.out
new file mode 100644 (file)
index 0000000..a22ae89
--- /dev/null
@@ -0,0 +1,6 @@
+adns debug: using nameserver 172.18.45.6
+6.45.18.172.in-addr.arpa flags 2 type 65548 PTR(checked) submitted
+adns debug: TCP connected (NS=172.18.45.6)
+6.45.18.172.in-addr.arpa flags 2 type PTR(checked): OK; nrrs=1; cname=$; owner=$; ttl=86400
+ davenant.relativity.greenend.org.uk
+rc=0
diff --git a/regress/case-tcpptr.sys b/regress/case-tcpptr.sys
new file mode 100644 (file)
index 0000000..387dc87
--- /dev/null
@@ -0,0 +1,88 @@
+adnstest default
+:65548 2/6.45.18.172.in-addr.arpa
+ start 957718868.938329
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000161
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000059
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000038
+ socket type=SOCK_STREAM
+ socket=5
+ +0.001056
+ fcntl fd=5 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000238
+ fcntl fd=5 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000055
+ connect fd=5 addr=172.18.45.6:53
+ connect=EINPROGRESS
+ +0.000723
+ select max=6 rfds=[4] wfds=[5] efds=[] to=13.997928
+ select=1 rfds=[] wfds=[5] efds=[]
+ +0.000536
+ read fd=5 buflen=1
+ read=EAGAIN
+ +0.000118
+ write fd=5
+     002a311f 01000001 00000000 00000136 02343502 31380331 37320769 6e2d6164
+     64720461 72706100 000c0001.
+ write=44
+ +0.001433
+ select max=6 rfds=[4,5] wfds=[] efds=[5] to=29.995841
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.000260
+ read fd=5 buflen=2
+ read=OK
+     00d7.
+ +0.000302
+ read fd=5 buflen=215
+ read=OK
+     311f8580 00010001 00030003 01360234 35023138 03313732 07696e2d 61646472
+     04617270 6100000c 0001c00c 000c0001 00015180 00250864 6176656e 616e740a
+     72656c61 74697669 74790867 7265656e 656e6403 6f726702 756b0002 34350231
+     38033137 3207696e 2d616464 72046172 70610000 02000100 01518000 06036e73
+     30c03fc0 5b000200 01000151 80000603 6e7331c0 3fc05b00 02000100 01518000
+     06036e73 32c03fc0 7d000100 01000151 800004ac 122d06c0 8f000100 01000151
+     800004ac 122d41c0 a1000100 01000151 800004ac 122d01.
+ +0.001364
+ sendto fd=4 addr=172.18.45.6:53
+     31200100 00010000 00000000 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01.
+ sendto=EMSGSIZE
+ +0.000001
+ write fd=5
+     00353120 01000001 00000000 00000864 6176656e 616e740a 72656c61 74697669
+     74790867 7265656e 656e6403 6f726702 756b0000 010001.
+ write=53
+ +0.001233
+ read fd=5 buflen=217
+ read=EAGAIN
+ +0.000100
+ select max=6 rfds=[4,5] wfds=[5] efds=[5] to=29.997000
+ select=1 rfds=[5] wfds=[] efds=[]
+ +0.000118
+ read fd=5 buflen=217
+ read=OK
+     00c5
+     31208580 00010001 00030003 08646176 656e616e 740a7265 6c617469 76697479
+     08677265 656e656e 64036f72 6702756b 00000100 01c00c00 01000100 01518000
+     04ac122d 060a7265 6c617469 76697479 08677265 656e656e 64036f72 6702756b
+     00000200 01000151 80000603 6e7330c0 45c04500 02000100 01518000 06036e73
+     31c045c0 45000200 01000151 80000603 6e7332c0 45c06b00 01000100 01518000
+     04ac122d 06c07d00 01000100 01518000 04ac122d 41c08f00 01000100 01518000
+     04ac122d 01.
+ +0.001171
+ read fd=5 buflen=217
+ read=EAGAIN
+ +0.000189
+ close fd=4
+ close=OK
+ +0.000352
+ close fd=5
+ close=OK
+ +0.000507
index f236a2db53f3f3f2e3b44f9bb48acfe1c7de8241..f810c3b55496b7c0e01d50191cb80d0561bfd761 100644 (file)
@@ -1,14 +1,14 @@
-noserver
+adnstest noserver
 :1 chiark.greenend.org.uk
  start 912889153.349504
  socket type=SOCK_DGRAM
  socket=4
  +0.000193
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
+ fcntl=~O_NONBLOCK&...
  +0.000088
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
  +0.000072
  sendto fd=4 addr=172.18.45.36:53
      311f0100 00010000 00000000 06636869 61726b08 67726565 6e656e64 036f7267
index 67020096c6136843eca4140e073d34e4dc7fa0fb..3698827b7138cc28c142f4797471ed48012f7126 100644 (file)
@@ -1,14 +1,14 @@
-default
+adnstest default
 :1 trunc.test.iwj.relativity.greenend.org.uk
  start 912888921.274801
  socket type=SOCK_DGRAM
  socket=4
  +0.000207
  fcntl fd=4 cmd=F_GETFL
- fcntl=2
+ fcntl=~O_NONBLOCK&...
  +0.000321
- fcntl fd=4 cmd=F_SETFL 2050
- fcntl=0
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
  +0.000443
  sendto fd=4 addr=172.18.45.6:53
      311f0100 00010000 00000000 05747275 6e630474 65737403 69776a0a 72656c61
diff --git a/regress/case-unknownq.err b/regress/case-unknownq.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/regress/case-unknownq.out b/regress/case-unknownq.out
new file mode 100644 (file)
index 0000000..c9e53e4
--- /dev/null
@@ -0,0 +1,3 @@
+adns debug: using nameserver 172.18.45.6
+davenant.relativity.greenend.org.uk. flags 0 type 32767 not implemented
+rc=0
diff --git a/regress/case-unknownq.sys b/regress/case-unknownq.sys
new file mode 100644 (file)
index 0000000..736210d
--- /dev/null
@@ -0,0 +1,15 @@
+adnstest default
+:32767 davenant.relativity.greenend.org.uk.
+ start 933811310.565828
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000264
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000087
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000067
+ close fd=4
+ close=OK
+ +0.000307
index 2191ae28cc18c30a8ce2efc6e87ed45bed2dd096..6657094da46fa3ee75ca71240376432b269a88d1 100755 (executable)
@@ -1,29 +1,70 @@
 #!/bin/sh
+# usage: checkall
+# runs all test cases
+#
+#  This file is
+#    Copyright (C) 1998-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+#  
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2, or (at your option)
+#  any later version.
+#  
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#  
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
 
-allok=true
+set -e
+
+failed=''
+passed=''
+skipped=''
 
 for f in case-*.sys
 do
        case="`echo \"$f\" | sed -e 's/^case-//; s/\.sys$//'`"
-       if ./r1test $case
-       then
-               :
-       else
-               echo
-               allok=false
+       set +e
+       ./r1test $case
+       rc=$?
+       set -e
+       case $rc in
+       0)      passed="$passed $case" ;;
+       5)      skipped="$skipped $case" ;;
+       *)      echo
+               failed="$failed $case"
                echo
-       fi
+               ;;
+       esac
 done
 
-if $allok
+if [ "x$failed" = x ]
 then
        echo "
-all tests passed."
+"
+       if [ "x$skipped" = x ]
+       then
+               echo "all tests passed."
+       else
+               echo "all applicable tests passed (skipped:$skipped)"
+       fi
+       echo
        exit 0
 fi
 
-echo >&2 '
+echo >&2 "
 AT LEAST ONE TEST FAILED
-'
+passed tests:${passed:- NONE}
+skipped tests:${skipped:- NONE}
+failed tests:$failed
+"
 
 exit 1
diff --git a/regress/harness.h b/regress/harness.h
new file mode 100644 (file)
index 0000000..2708e66
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef HARNESS_H_INCLUDED
+#define HARNESS_H_INCLUDED
+#include "internal.h"
+#include "hsyscalls.h"
+/* There is a Q function (Q for Question) for each such syscall;
+ * it constructs a string representing the call, and calls Q_str
+ * on it, or constructs it in vb and calls Q_vb;
+ */
+void Qselect(  int max , const fd_set *rfds , const fd_set *wfds , const fd_set *efds , struct timeval *to     );
+#ifdef HAVE_POLL
+void Qpoll(    const struct pollfd *fds , int nfds , int timeout       );
+#endif
+void Qsocket(   int type       );
+void Qfcntl(   int fd , int cmd , long arg     );
+void Qconnect( int fd , const struct sockaddr *addr , int addrlen      );
+void Qclose(   int fd  );
+void Qsendto(  int fd , const void *msg , int msglen , const struct sockaddr *addr , int addrlen       );
+void Qrecvfrom(        int fd , int buflen , int addrlen       );
+void Qread(    int fd , size_t buflen  );
+void Qwrite(   int fd , const void *buf , size_t len   );
+void Q_vb(void);
+extern void Tshutdown(void);
+/* General help functions */
+void Tfailed(const char *why);
+void Toutputerr(void);
+void Tnomem(void);
+void Tfsyscallr(const char *fmt, ...) PRINTFFORMAT(1,2);
+void Tensureoutputfile(void);
+void Tmust(const char *call, const char *arg, int cond);
+void Tvbf(const char *fmt, ...) PRINTFFORMAT(1,2);
+void Tvbvf(const char *fmt, va_list al);
+void Tvbfdset(int max, const fd_set *set);
+void Tvbpollfds(const struct pollfd *fds, int nfds);
+void Tvbaddr(const struct sockaddr *addr, int addrlen);
+void Tvbbytes(const void *buf, int len);
+void Tvberrno(int e);
+void Tvba(const char *str);
+/* Shared globals */
+extern vbuf vb;
+extern struct timeval currenttime;
+extern const struct Terrno { const char *n; int v; } Terrnos[];
+#endif
index b9fddb37421518b23f19c438ed5d4e01b9e45441..a25bd37ee79dbff73f99c45d9d4c28d276dcf4cc 100644 (file)
@@ -2,7 +2,12 @@ m4_dnl harness.h.m4
 m4_dnl (part of complex test harness, not of the library)
 m4_dnl - function and other declarations
 
-m4_dnl  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+m4_dnl  This file is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl
+m4_dnl  It is part of adns, which is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
 m4_dnl  
 m4_dnl  This program is free software; you can redistribute it and/or modify
 m4_dnl  it under the terms of the GNU General Public License as published by
@@ -23,21 +28,8 @@ m4_include(hmacros.i4)
 #ifndef HARNESS_H_INCLUDED
 #define HARNESS_H_INCLUDED
 
-#include <sys/time.h>
-#include <sys/socket.h>
-#include <sys/uio.h>
-#include <unistd.h>
-
 #include "internal.h"
-
-/* We override several system calls with #define's */
-
-hm_create_proto_h
-m4_define(`hm_syscall', `int H$1(hm_args_massage($3,void));')
-m4_include(`hsyscalls.i4')
-
-int Hwritev(int fd, const struct iovec *vector, size_t count);
-int Hgettimeofday(struct timeval *tv, struct timezone *tz);
+#include "hsyscalls.h"
 
 /* There is a Q function (Q for Question) for each such syscall;
  * it constructs a string representing the call, and calls Q_str
@@ -46,10 +38,13 @@ int Hgettimeofday(struct timeval *tv, struct timezone *tz);
 
 hm_create_proto_q
 m4_define(`hm_syscall', `void Q$1(hm_args_massage($3,void));')
+m4_define(`hm_specsyscall', `')
 m4_include(`hsyscalls.i4')
 
 void Q_vb(void);
 
+extern void Tshutdown(void);
+
 /* General help functions */
 
 void Tfailed(const char *why);
@@ -62,6 +57,7 @@ void Tmust(const char *call, const char *arg, int cond);
 void Tvbf(const char *fmt, ...) PRINTFFORMAT(1,2);
 void Tvbvf(const char *fmt, va_list al);
 void Tvbfdset(int max, const fd_set *set);
+void Tvbpollfds(const struct pollfd *fds, int nfds);
 void Tvbaddr(const struct sockaddr *addr, int addrlen);
 void Tvbbytes(const void *buf, int len);
 void Tvberrno(int e);
diff --git a/regress/hcommon.c b/regress/hcommon.c
new file mode 100644 (file)
index 0000000..2cd3508
--- /dev/null
@@ -0,0 +1,281 @@
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include "harness.h"
+#include "internal.h"
+vbuf vb;
+FILE *Toutputfile= 0;
+struct timeval currenttime;
+const struct Terrno Terrnos[]= {
+  { "EBADF",                     EBADF                        },
+  { "EAGAIN",                    EAGAIN                       },
+  { "EINPROGRESS",               EINPROGRESS                  },
+  { "EINTR",                     EINTR                        },
+  { "EINVAL",                    EINVAL                       },
+  { "EMSGSIZE",                  EMSGSIZE                     },
+  { "ENOBUFS",                   ENOBUFS                      },
+  { "ENOENT",                    ENOENT                       },
+  { "ENOPROTOOPT",               ENOPROTOOPT                  },
+  { "ENOSPC",                    ENOSPC                       },
+  { "EWOULDBLOCK",               EWOULDBLOCK                  },
+  { "EHOSTUNREACH",              EHOSTUNREACH                 },
+  { "ECONNRESET",                ECONNRESET                   },
+  { "ECONNREFUSED",              ECONNREFUSED                 },
+  { "EPIPE",                     EPIPE                        },
+  {  0,                          0                            }
+};
+static vbuf vbw;
+int Hgettimeofday(struct timeval *tv, struct timezone *tz) {
+  Tmust("gettimeofday","tz",!tz);
+  *tv= currenttime;
+  return 0;
+}
+int Hwritev(int fd, const struct iovec *vector, size_t count) {
+  size_t i;
+  vbw.used= 0;
+  for (i=0; i<count; i++, vector++) {
+    if (!adns__vbuf_append(&vbw,vector->iov_base,vector->iov_len)) Tnomem();
+  }
+  return Hwrite(fd,vbw.buf,vbw.used);
+}
+void Qselect(  int max , const fd_set *rfds , const fd_set *wfds , const fd_set *efds , struct timeval *to     ) {
+ vb.used= 0;
+ Tvba("select");
+       Tvbf(" max=%d",max); 
+       Tvbf(" rfds="); Tvbfdset(max,rfds); 
+       Tvbf(" wfds="); Tvbfdset(max,wfds); 
+       Tvbf(" efds="); Tvbfdset(max,efds); 
+  if (to) Tvbf(" to=%ld.%06ld",(long)to->tv_sec,(long)to->tv_usec);
+  else Tvba(" to=null"); 
+  Q_vb();
+}
+#ifdef HAVE_POLL
+void Qpoll(    const struct pollfd *fds , int nfds , int timeout       ) {
+ vb.used= 0;
+ Tvba("poll");
+        Tvbf(" fds="); Tvbpollfds(fds,nfds); 
+       Tvbf(" timeout=%d",timeout); 
+  Q_vb();
+}
+#endif
+void Qsocket(   int type       ) {
+ vb.used= 0;
+ Tvba("socket");
+  Tvbf(type==SOCK_STREAM ? " type=SOCK_STREAM" : " type=SOCK_DGRAM"); 
+  Q_vb();
+}
+void Qfcntl(   int fd , int cmd , long arg     ) {
+ vb.used= 0;
+ Tvba("fcntl");
+       Tvbf(" fd=%d",fd); 
+  if (cmd == F_SETFL) {
+   Tvbf(" cmd=F_SETFL %s",arg & O_NONBLOCK ? "O_NONBLOCK|..." : "~O_NONBLOCK&...");
+  } else if (cmd == F_GETFL) {
+   Tvba(" cmd=F_GETFL");
+  } else {
+   Tmust("cmd","F_GETFL/F_SETFL",0);
+  } 
+  Q_vb();
+}
+void Qconnect( int fd , const struct sockaddr *addr , int addrlen      ) {
+ vb.used= 0;
+ Tvba("connect");
+       Tvbf(" fd=%d",fd); 
+       Tvba(" addr="); Tvbaddr(addr,addrlen); 
+  Q_vb();
+}
+void Qclose(   int fd  ) {
+ vb.used= 0;
+ Tvba("close");
+       Tvbf(" fd=%d",fd); 
+  Q_vb();
+}
+void Qsendto(  int fd , const void *msg , int msglen , const struct sockaddr *addr , int addrlen       ) {
+ vb.used= 0;
+ Tvba("sendto");
+       Tvbf(" fd=%d",fd); 
+       Tvba(" addr="); Tvbaddr(addr,addrlen); 
+       Tvbbytes(msg,msglen); 
+  Q_vb();
+}
+void Qrecvfrom(        int fd , int buflen , int addrlen       ) {
+ vb.used= 0;
+ Tvba("recvfrom");
+       Tvbf(" fd=%d",fd); 
+       Tvbf(" buflen=%lu",(unsigned long)buflen); 
+       Tvbf(" *addrlen=%d",addrlen); 
+  Q_vb();
+}
+void Qread(    int fd , size_t buflen  ) {
+ vb.used= 0;
+ Tvba("read");
+       Tvbf(" fd=%d",fd); 
+       Tvbf(" buflen=%lu",(unsigned long)buflen); 
+  Q_vb();
+}
+void Qwrite(   int fd , const void *buf , size_t len   ) {
+ vb.used= 0;
+ Tvba("write");
+       Tvbf(" fd=%d",fd); 
+       Tvbbytes(buf,len); 
+  Q_vb();
+}
+void Tvbaddr(const struct sockaddr *addr, int len) {
+  const struct sockaddr_in *ai= (const struct sockaddr_in*)addr;
+  assert(len==sizeof(struct sockaddr_in));
+  assert(ai->sin_family==AF_INET);
+  Tvbf("%s:%u",inet_ntoa(ai->sin_addr),htons(ai->sin_port));
+}
+void Tvbbytes(const void *buf, int len) {
+  const byte *bp;
+  int i;
+  if (!len) { Tvba("\n     ."); return; }
+  for (i=0, bp=buf; i<len; i++, bp++) {
+    if (!(i&31)) Tvba("\n     ");
+    else if (!(i&3)) Tvba(" ");
+    Tvbf("%02x",*bp);
+  }
+  Tvba(".");
+}
+void Tvbfdset(int max, const fd_set *fds) {
+  int i;
+  const char *comma= "";
+  Tvba("[");
+  for (i=0; i<max; i++) {
+    if (!FD_ISSET(i,fds)) continue;
+    Tvba(comma);
+    Tvbf("%d",i);
+    comma= ",";
+  }
+  Tvba("]");
+}
+static void Tvbpollevents(int events) {
+  const char *delim= "";
+  events &= (POLLIN|POLLOUT|POLLPRI);
+  if (!events) { Tvba("0"); return; }
+  if (events & POLLIN) { Tvba("POLLIN"); delim= "|"; }
+  if (events & POLLOUT) { Tvba(delim); Tvba("POLLOUT"); delim= "|"; }
+  if (events & POLLPRI) { Tvba(delim); Tvba("POLLPRI"); }
+}
+void Tvbpollfds(const struct pollfd *fds, int nfds) {
+  const char *comma= "";
+  Tvba("[");
+  while (nfds>0) {
+    Tvba(comma);
+    Tvbf("{fd=%d, events=",fds->fd);
+    Tvbpollevents(fds->events);
+    Tvba(", revents=");
+    Tvbpollevents(fds->revents);
+    Tvba("}");
+    comma= ", ";
+    nfds--; fds++;
+  }
+  Tvba("]");
+}
+void Tvberrno(int e) {
+  const struct Terrno *te;
+  for (te= Terrnos; te->n && te->v != e; te++);
+  assert(te->n);
+  Tvba(te->n);
+}
+void Tvba(const char *str) {
+  if (!adns__vbuf_appendstr(&vb,str)) Tnomem();
+}
+void Tvbvf(const char *fmt, va_list al) {
+  char buf[1000];
+  buf[sizeof(buf)-2]= '\t';
+  vsnprintf(buf,sizeof(buf),fmt,al);
+  assert(buf[sizeof(buf)-2] == '\t');
+  Tvba(buf);
+}
+void Tvbf(const char *fmt, ...) {
+  va_list al;
+  va_start(al,fmt);
+  Tvbvf(fmt,al);
+  va_end(al);
+}
+void Tmust(const char *call, const char *arg, int cond) {
+  if (cond) return;
+  fprintf(stderr,"adns test harness: case not handled: system call %s, arg %s",call,arg);
+  exit(-1);
+}
+void Tfailed(const char *why) {
+  fprintf(stderr,"adns test harness: failure: %s: %s\n",why,strerror(errno));
+  exit(-1);
+}
+void Tnomem(void) {
+  Tfailed("unable to malloc/realloc");
+}
+void Toutputerr(void) {
+  Tfailed("write error on test harness output");
+}
+struct malloced {
+  struct malloced *next, *back;
+  size_t sz;
+  unsigned long count;
+  struct { double d; long ul; void *p; void (*fp)(void); } data;
+};
+static unsigned long malloccount, mallocfailat;
+static struct { struct malloced *head, *tail; } mallocedlist;
+#define MALLOCHSZ ((char*)&mallocedlist.head->data - (char*)mallocedlist.head)
+void *Hmalloc(size_t sz) {
+  struct malloced *newnode;
+  const char *mfavar;
+  char *ep;
+  assert(sz);
+  newnode= malloc(MALLOCHSZ + sz);  if (!newnode) Tnomem();
+  LIST_LINK_TAIL(mallocedlist,newnode);
+  newnode->sz= sz;
+  newnode->count= ++malloccount;
+  if (!mallocfailat) {
+    mfavar= getenv("ADNS_REGRESS_MALLOCFAILAT");
+    if (mfavar) {
+      mallocfailat= strtoul(mfavar,&ep,10);
+      if (!mallocfailat || *ep) Tfailed("ADNS_REGRESS_MALLOCFAILAT bad value");
+    } else {
+      mallocfailat= ~0UL;
+    }
+  }
+  assert(newnode->count != mallocfailat);
+  memset(&newnode->data,0xc7,sz);
+  return &newnode->data;
+}
+void Hfree(void *ptr) {
+  struct malloced *oldnode;
+  if (!ptr) return;
+  oldnode= (void*)((char*)ptr - MALLOCHSZ);
+  LIST_UNLINK(mallocedlist,oldnode);
+  memset(&oldnode->data,0x38,oldnode->sz);
+  free(oldnode);
+}
+void *Hrealloc(void *op, size_t nsz) {
+  struct malloced *oldnode;
+  void *np;
+  size_t osz;
+  if (op) { oldnode= (void*)((char*)op - MALLOCHSZ); osz= oldnode->sz; } else { osz= 0; }
+  np= Hmalloc(nsz);
+  memcpy(np,op, osz>nsz ? nsz : osz);
+  Hfree(op);
+  return np;
+}
+void Hexit(int rv) {
+  struct malloced *loopnode;
+  Tshutdown();
+  adns__vbuf_free(&vb);
+  adns__vbuf_free(&vbw);
+  if (mallocedlist.head) {
+    fprintf(stderr,"adns test harness: memory leaked:");
+    for (loopnode=mallocedlist.head; loopnode; loopnode=loopnode->next)
+      fprintf(stderr," %lu(%lu)",loopnode->count,(unsigned long)loopnode->sz);
+    putc('\n',stderr);
+    if (ferror(stderr)) exit(-1);
+  }
+  exit(rv);
+}
index 4684eafc81cc3df472e7c8fac1c486e3953acacb..68127bea0ba3099ca0374990c9117e2119991fa7 100644 (file)
@@ -2,7 +2,12 @@ m4_dnl hcommon.c
 m4_dnl (part of complex test harness, not of the library)
 m4_dnl - routines used for both record and playback
 
-m4_dnl  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+m4_dnl  This file is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl
+m4_dnl  It is part of adns, which is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
 m4_dnl  
 m4_dnl  This program is free software; you can redistribute it and/or modify
 m4_dnl  it under the terms of the GNU General Public License as published by
@@ -20,14 +25,19 @@ m4_dnl  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 m4_include(hmacros.i4)
 
-#include <fcntl.h>
 #include <string.h>
 #include <errno.h>
+#include <stdlib.h>
+#include <stdarg.h>
 
+#include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
+#include <unistd.h>
+#include <fcntl.h>
+
 #include "harness.h"
 #include "internal.h"
 
@@ -36,6 +46,7 @@ FILE *Toutputfile= 0;
 struct timeval currenttime;
 
 const struct Terrno Terrnos[]= {
+  { "EBADF",                     EBADF                        },
   { "EAGAIN",                    EAGAIN                       },
   { "EINPROGRESS",               EINPROGRESS                  },
   { "EINTR",                     EINTR                        },
@@ -46,6 +57,10 @@ const struct Terrno Terrnos[]= {
   { "ENOPROTOOPT",               ENOPROTOOPT                  },
   { "ENOSPC",                    ENOSPC                       },
   { "EWOULDBLOCK",               EWOULDBLOCK                  },
+  { "EHOSTUNREACH",              EHOSTUNREACH                 },
+  { "ECONNRESET",                ECONNRESET                   },
+  { "ECONNREFUSED",              ECONNREFUSED                 },
+  { "EPIPE",                     EPIPE                        },
   {  0,                          0                            }
 };
 
@@ -77,6 +92,7 @@ void Q$1(hm_args_massage($3,void)) {
  m4_define(`hm_arg_nullptr',`')
  m4_define(`hm_arg_int', `Tvbf(" $'`1=%d",$'`1);')
  m4_define(`hm_arg_fdset_io', `Tvbf(" $'`1="); Tvbfdset($'`2,$'`1);')
+ m4_define(`hm_arg_pollfds_io', `Tvbf(" $'`1="); Tvbpollfds($'`1,$'`2);')
  m4_define(`hm_arg_timeval_in_rel_null', `
   if ($'`1) Tvbf(" $'`1=%ld.%06ld",(long)$'`1->tv_sec,(long)$'`1->tv_usec);
   else Tvba(" $'`1=null");')
@@ -87,9 +103,11 @@ void Q$1(hm_args_massage($3,void)) {
  m4_define(`hm_arg_fd', `Tvbf(" $'`1=%d",$'`1);')
  m4_define(`hm_arg_fcntl_cmd_arg', `
   if ($'`1 == F_SETFL) {
-   Tvbf(" $'`1=F_SETFL %ld",arg);
-  } else {
+   Tvbf(" $'`1=F_SETFL %s",arg & O_NONBLOCK ? "O_NONBLOCK|..." : "~O_NONBLOCK&...");
+  } else if ($'`1 == F_GETFL) {
    Tvba(" $'`1=F_GETFL");
+  } else {
+   Tmust("$'`1","F_GETFL/F_SETFL",0);
   }')
  m4_define(`hm_arg_addr_in', `Tvba(" $'`1="); Tvbaddr($'`1,$'`2);')
  m4_define(`hm_arg_bytes_in', `')
@@ -105,8 +123,9 @@ void Q$1(hm_args_massage($3,void)) {
 }
 ')
 
-m4_include(`hsyscalls.i4')
+m4_define(`hm_specsyscall', `')
 
+m4_include(`hsyscalls.i4')
 
 void Tvbaddr(const struct sockaddr *addr, int len) {
   const struct sockaddr_in *ai= (const struct sockaddr_in*)addr;
@@ -120,7 +139,7 @@ void Tvbbytes(const void *buf, int len) {
   const byte *bp;
   int i;
 
-  if (!len) { Tvba(" empty"); return; }
+  if (!len) { Tvba("\n     ."); return; }
   for (i=0, bp=buf; i<len; i++, bp++) {
     if (!(i&31)) Tvba("\n     ");
     else if (!(i&3)) Tvba(" ");
@@ -143,12 +162,39 @@ void Tvbfdset(int max, const fd_set *fds) {
   Tvba("]");
 }
 
+static void Tvbpollevents(int events) {
+  const char *delim= "";
+
+  events &= (POLLIN|POLLOUT|POLLPRI);
+  if (!events) { Tvba("0"); return; }
+  if (events & POLLIN) { Tvba("POLLIN"); delim= "|"; }
+  if (events & POLLOUT) { Tvba(delim); Tvba("POLLOUT"); delim= "|"; }
+  if (events & POLLPRI) { Tvba(delim); Tvba("POLLPRI"); }
+}
+
+void Tvbpollfds(const struct pollfd *fds, int nfds) {
+  const char *comma= "";
+  
+  Tvba("[");
+  while (nfds>0) {
+    Tvba(comma);
+    Tvbf("{fd=%d, events=",fds->fd);
+    Tvbpollevents(fds->events);
+    Tvba(", revents=");
+    Tvbpollevents(fds->revents);
+    Tvba("}");
+    comma= ", ";
+    nfds--; fds++;
+  }
+  Tvba("]");
+}
+
 void Tvberrno(int e) {
   const struct Terrno *te;
 
   for (te= Terrnos; te->n && te->v != e; te++);
-  if (te->n) Tvba(te->n);
-  else Tvbf("E#%d",e);
+  assert(te->n);
+  Tvba(te->n);
 }
 
 void Tvba(const char *str) {
@@ -190,3 +236,80 @@ void Tnomem(void) {
 void Toutputerr(void) {
   Tfailed("write error on test harness output");
 }
+
+struct malloced {
+  struct malloced *next, *back;
+  size_t sz;
+  unsigned long count;
+  struct { double d; long ul; void *p; void (*fp)(void); } data;
+};
+
+static unsigned long malloccount, mallocfailat;
+static struct { struct malloced *head, *tail; } mallocedlist;
+
+#define MALLOCHSZ ((char*)&mallocedlist.head->data - (char*)mallocedlist.head)
+
+void *Hmalloc(size_t sz) {
+  struct malloced *newnode;
+  const char *mfavar;
+  char *ep;
+
+  assert(sz);
+
+  newnode= malloc(MALLOCHSZ + sz);  if (!newnode) Tnomem();
+
+  LIST_LINK_TAIL(mallocedlist,newnode);
+  newnode->sz= sz;
+  newnode->count= ++malloccount;
+  if (!mallocfailat) {
+    mfavar= getenv("ADNS_REGRESS_MALLOCFAILAT");
+    if (mfavar) {
+      mallocfailat= strtoul(mfavar,&ep,10);
+      if (!mallocfailat || *ep) Tfailed("ADNS_REGRESS_MALLOCFAILAT bad value");
+    } else {
+      mallocfailat= ~0UL;
+    }
+  }
+  assert(newnode->count != mallocfailat);
+  memset(&newnode->data,0xc7,sz);
+  return &newnode->data;
+}
+
+void Hfree(void *ptr) {
+  struct malloced *oldnode;
+
+  if (!ptr) return;
+
+  oldnode= (void*)((char*)ptr - MALLOCHSZ);
+  LIST_UNLINK(mallocedlist,oldnode);
+  memset(&oldnode->data,0x38,oldnode->sz);
+  free(oldnode);
+}
+
+void *Hrealloc(void *op, size_t nsz) {
+  struct malloced *oldnode;
+  void *np;
+  size_t osz;
+
+  if (op) { oldnode= (void*)((char*)op - MALLOCHSZ); osz= oldnode->sz; } else { osz= 0; }
+  np= Hmalloc(nsz);
+  memcpy(np,op, osz>nsz ? nsz : osz);
+  Hfree(op);
+  return np;
+}
+
+void Hexit(int rv) {
+  struct malloced *loopnode;
+
+  Tshutdown();
+  adns__vbuf_free(&vb);
+  adns__vbuf_free(&vbw);
+  if (mallocedlist.head) {
+    fprintf(stderr,"adns test harness: memory leaked:");
+    for (loopnode=mallocedlist.head; loopnode; loopnode=loopnode->next)
+      fprintf(stderr," %lu(%lu)",loopnode->count,(unsigned long)loopnode->sz);
+    putc('\n',stderr);
+    if (ferror(stderr)) exit(-1);
+  }
+  exit(rv);
+}
index 3194e03fc90970677229345f5decebd158465934..7c685309ef68d1b314e6c74587e293106596937a 100644 (file)
@@ -2,7 +2,12 @@ m4_dnl hmacros.h.m4
 m4_dnl (part of complex test harness, not of the library)
 m4_dnl - common macros
 
-m4_dnl  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+m4_dnl  This file is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl
+m4_dnl  It is part of adns, which is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl    Copyright (C) 1999 Tony Finch <dot@dotat.at>
 m4_dnl  
 m4_dnl  This program is free software; you can redistribute it and/or modify
 m4_dnl  it under the terms of the GNU General Public License as published by
@@ -27,10 +32,10 @@ m4_define(`hm_args_massage',
                                `'),
                `',
                `$2',
-               `
+               `m4_dnl
        m4_patsubst(m4_patsubst(m4_patsubst(m4_translit($1, `
        ',` '), `\(hm_comma *\)*$', `'), `^\( *hm_comma\)*', `'),
-               `\( *hm_comma *\)+',` hm_comma ')
+               `\( *hm_comma *\)+',` hm_comma ')m4_dnl
        ')')
 
 m4_define(`hm_create_nothing', `
@@ -38,6 +43,7 @@ m4_define(`hm_create_nothing', `
  m4_define(`hm_arg_nullptr', `')
  m4_define(`hm_arg_int', `')
  m4_define(`hm_arg_fdset_io', `')
+ m4_define(`hm_arg_pollfds_io', `')
  m4_define(`hm_arg_timeval_in_rel_null',`')
  m4_define(`hm_arg_must', `')
  m4_define(`hm_arg_socktype',`')
@@ -55,6 +61,7 @@ m4_define(`hm_create_proto_h',`
  m4_define(`hm_arg_nullptr', `$'`1 $'`2')
  m4_define(`hm_arg_int', `int $'`1')
  m4_define(`hm_arg_fdset_io', `fd_set *$'`1')
+ m4_define(`hm_arg_pollfds_io', `struct pollfd *$'`1 hm_comma int $'`2')
  m4_define(`hm_arg_timeval_in_rel_null', `struct timeval *$'`1')
  m4_define(`hm_arg_must', `$'`1 $'`2')
  m4_define(`hm_arg_socktype', `int $'`1')
@@ -71,6 +78,7 @@ m4_define(`hm_create_proto_q',`
  hm_create_proto_h
  m4_define(`hm_arg_nullptr', `')
  m4_define(`hm_arg_fdset_io', `const fd_set *$'`1')
+ m4_define(`hm_arg_pollfds_io', `const struct pollfd *$'`1 hm_comma int $'`2')
  m4_define(`hm_arg_must', `')
  m4_define(`hm_arg_ign', `')
  m4_define(`hm_arg_fcntl_cmd_arg', `int $'`1 hm_comma long $'`2')
@@ -104,6 +112,7 @@ m4_define(`hm_create_realcall_args',`
  m4_define(`hm_arg_nullptr', `0')
  m4_define(`hm_arg_int', `$'`1')
  m4_define(`hm_arg_fdset_io', `$'`1')
+ m4_define(`hm_arg_pollfds_io', `$'`1 hm_comma $'`2')
  m4_define(`hm_arg_timeval_in_rel_null', `$'`1')
  m4_define(`hm_arg_must', `$'`2')
  m4_define(`hm_arg_socktype', `$'`1')
diff --git a/regress/hplayback.c b/regress/hplayback.c
new file mode 100644 (file)
index 0000000..fdb3a7d
--- /dev/null
@@ -0,0 +1,530 @@
+#include <assert.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include "harness.h"
+static FILE *Tinputfile, *Treportfile;
+static vbuf vb2;
+extern void Tshutdown(void) {
+  adns__vbuf_free(&vb2);
+}
+static void Tensurereportfile(void) {
+  const char *fdstr;
+  int fd;
+  if (Treportfile) return;
+  Treportfile= stderr;
+  fdstr= getenv("ADNS_TEST_REPORT_FD"); if (!fdstr) return;
+  fd= atoi(fdstr);
+  Treportfile= fdopen(fd,"a"); if (!Treportfile) Tfailed("fdopen ADNS_TEST_REPORT_FD");
+}
+static void Psyntax(const char *where) {
+  fprintf(stderr,"adns test harness: syntax error in test log input file: %s\n",where);
+  exit(-1);
+}
+static void Pcheckinput(void) {
+  if (ferror(Tinputfile)) Tfailed("read test log input file");
+  if (feof(Tinputfile)) Psyntax("eof at syscall reply");
+}
+static void Tensureinputfile(void) {
+  const char *fdstr;
+  int fd;
+  int chars;
+  unsigned long sec, usec;
+  if (Tinputfile) return;
+  Tinputfile= stdin;
+  fdstr= getenv("ADNS_TEST_IN_FD");
+  if (fdstr) {
+    fd= atoi(fdstr);
+    Tinputfile= fdopen(fd,"r"); if (!Tinputfile) Tfailed("fdopen ADNS_TEST_IN_FD");
+  }
+  setvbuf(Tinputfile,0,_IONBF,0);
+  if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+  fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+  chars= -1;
+  sscanf(vb2.buf," start %lu.%lu%n",&sec,&usec,&chars);
+  if (chars==-1) Psyntax("start time invalid");
+  currenttime.tv_sec= sec;
+  currenttime.tv_usec= usec;
+  if (vb2.buf[chars] != '\n') Psyntax("not newline after start time");
+}
+static void Parg(const char *argname) {
+  int l;
+  if (vb2.buf[vb2.used++] != ' ') Psyntax("not a space before argument");
+  l= strlen(argname);
+  if (memcmp(vb2.buf+vb2.used,argname,l)) Psyntax("argument name wrong");
+  vb2.used+= l;
+  if (vb2.buf[vb2.used++] != '=') Psyntax("not = after argument name");
+}
+static int Pstring_maybe(const char *string) {
+  int l;
+  l= strlen(string);
+  if (memcmp(vb2.buf+vb2.used,string,l)) return 0;
+  vb2.used+= l;
+  return 1;
+}
+static void Pstring(const char *string, const char *emsg) {
+  if (Pstring_maybe(string)) return;
+  Psyntax(emsg);
+}
+static int Perrno(const char *stuff) {
+  const struct Terrno *te;
+  int r;
+  char *ep;
+  for (te= Terrnos; te->n && strcmp(te->n,stuff); te++);
+  if (te->n) return te->v;
+  r= strtoul(stuff+2,&ep,10);
+  if (*ep) Psyntax("errno value not recognised, not numeric");
+  return r;
+}
+static void P_updatetime(void) {
+  int chars;
+  unsigned long sec, usec;
+  if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+  fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+  chars= -1;
+  sscanf(vb2.buf," +%lu.%lu%n",&sec,&usec,&chars);
+  if (chars==-1) Psyntax("update time invalid");
+  currenttime.tv_sec+= sec;
+  currenttime.tv_usec+= usec;
+  if (currenttime.tv_usec > 1000000) {
+    currenttime.tv_sec++;
+    currenttime.tv_usec -= 1000000;
+  }
+  if (vb2.buf[chars] != '\n') Psyntax("not newline after update time");
+}
+static void Pfdset(fd_set *set, int max) {
+  int r, c;
+  char *ep;
+  if (vb2.buf[vb2.used++] != '[') Psyntax("fd set start not [");
+  FD_ZERO(set);
+  if (vb2.buf[vb2.used] == ']') { vb2.used++; return; }
+  for (;;) {
+    r= strtoul(vb2.buf+vb2.used,&ep,10);
+    if (r>=max) Psyntax("fd set member > max");
+    if (ep == (char*)vb2.buf+vb2.used) Psyntax("empty entry in fd set");
+    FD_SET(r,set);
+    vb2.used= ep - (char*)vb2.buf;
+    c= vb2.buf[vb2.used++];
+    if (c == ']') break;
+    if (c != ',') Psyntax("fd set separator not ,");
+  }
+}
+#ifdef HAVE_POLL
+static int Ppollfdevents(void) {
+  int events;
+  if (Pstring_maybe("0")) return 0;
+  events= 0;
+  if (Pstring_maybe("POLLIN")) {
+    events |= POLLIN;
+    if (!Pstring_maybe("|")) return events;
+  }
+  if (Pstring_maybe("POLLOUT")) {
+    events |= POLLOUT;
+    if (!Pstring_maybe("|")) return events;
+  }
+  Pstring("POLLPRI","pollfdevents PRI?");
+  return events;
+}
+static void Ppollfds(struct pollfd *fds, int nfds) {
+  int i;
+  char *ep;
+  const char *comma= "";
+  if (vb2.buf[vb2.used++] != '[') Psyntax("pollfds start not [");
+  for (i=0; i<nfds; i++) {
+    Pstring("{fd=","{fd= in pollfds");
+    fds->fd= strtoul(vb2.buf+vb2.used,&ep,10);
+    vb2.used= ep - (char*)vb2.buf;    
+    Pstring(", events=",", events= in pollfds");
+    fds->events= Ppollfdevents();
+    Pstring(", revents=",", revents= in pollfds");
+    fds->revents= Ppollfdevents();
+    Pstring("}","} in pollfds");
+    Pstring(comma,"separator in pollfds");
+    comma= ", ";
+  }
+  if (vb2.buf[vb2.used++] != ']') Psyntax("pollfds end not ]");
+}
+#endif
+static void Paddr(struct sockaddr *addr, int *lenr) {
+  struct sockaddr_in *sa= (struct sockaddr_in*)addr;
+  char *p, *ep;
+  long ul;
+  assert(*lenr >= sizeof(*sa));
+  p= strchr(vb2.buf+vb2.used,':');
+  if (!p) Psyntax("no port on address");
+  *p++= 0;
+  memset(sa,0,sizeof(*sa));
+  sa->sin_family= AF_INET;
+  if (!inet_aton(vb2.buf+vb2.used,&sa->sin_addr)) Psyntax("invalid address");
+  ul= strtoul(p,&ep,10);
+  if (*ep && *ep != ' ') Psyntax("invalid port (bad syntax)");
+  if (ul >= 65536) Psyntax("port too large");
+  sa->sin_port= htons(ul);
+  *lenr= sizeof(*sa);
+  vb2.used= ep - (char*)vb2.buf;
+}
+static int Pbytes(byte *buf, int maxlen) {
+  static const char hexdigits[]= "0123456789abcdef";
+  int c, v, done;
+  const char *pf;
+  done= 0;
+  for (;;) {
+    c= getc(Tinputfile); Pcheckinput();
+    if (c=='\n' || c==' ' || c=='\t') continue;
+    if (c=='.') break;
+    pf= strchr(hexdigits,c); if (!pf) Psyntax("invalid first hex digit");
+    v= (pf-hexdigits)<<4;
+    c= getc(Tinputfile); Pcheckinput();
+    pf= strchr(hexdigits,c); if (!pf) Psyntax("invalid second hex digit");
+    v |= (pf-hexdigits);
+    if (maxlen<=0) Psyntax("buffer overflow in bytes");
+    *buf++= v;
+    maxlen--; done++;
+  }
+  for (;;) {
+    c= getc(Tinputfile); Pcheckinput();
+    if (c=='\n') return done;
+  }
+}
+void Q_vb(void) {
+  int r;
+  const char *nl;
+  Tensureinputfile();
+  if (!adns__vbuf_ensure(&vb2,vb.used+2)) Tnomem();
+  r= fread(vb2.buf,1,vb.used+2,Tinputfile);
+  if (feof(Tinputfile)) {
+    fprintf(stderr,"adns test harness: input ends prematurely; program did:\n %.*s\n",
+           vb.used,vb.buf);
+    exit(-1);
+  }
+  Pcheckinput();
+  if (vb2.buf[0] != ' ') Psyntax("not space before call");
+  if (memcmp(vb.buf,vb2.buf+1,vb.used) ||
+      vb2.buf[vb.used+1] != '\n') {
+    fprintf(stderr,
+            "adns test harness: program did unexpected:\n %.*s\n"
+            "was expecting:\n %.*s\n",
+            vb.used,vb.buf, vb.used,vb2.buf+1);
+    exit(1);
+  }
+  Tensurereportfile();
+  nl= memchr(vb.buf,'\n',vb.used);
+  fprintf(Treportfile," %.*s\n", (int)(nl ? nl - (const char*)vb.buf : vb.used), vb.buf);
+}
+int Hselect(   int max , fd_set *rfds , fd_set *wfds , fd_set *efds , struct timeval *to       ) {
+ int r, amtread;
+ char *ep;
+ Qselect(      max , rfds , wfds , efds , to   );
+ if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+ fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+ Tensurereportfile();
+ fprintf(Treportfile,"%s",vb2.buf);
+ amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!='\n')
+  Psyntax("badly formed line");
+ vb2.buf[amtread]= 0;
+ if (memcmp(vb2.buf," select=",8)) Psyntax("syscall reply mismatch");
+ if (vb2.buf[8] == 'E') {
+  int e;
+  e= Perrno(vb2.buf+8);
+  P_updatetime();
+  errno= e;
+  return -1;
+ }
+  r= strtoul(vb2.buf+8,&ep,10);
+  if (*ep && *ep!=' ') Psyntax("return value not E* or positive number");
+  vb2.used= ep - (char*)vb2.buf;
+       Parg("rfds"); Pfdset(rfds,max); 
+       Parg("wfds"); Pfdset(wfds,max); 
+       Parg("efds"); Pfdset(efds,max); 
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
+ P_updatetime();
+ return r;
+}
+#ifdef HAVE_POLL
+int Hpoll(     struct pollfd *fds , int nfds , int timeout     ) {
+ int r, amtread;
+ char *ep;
+ Qpoll(        fds , nfds , timeout    );
+ if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+ fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+ Tensurereportfile();
+ fprintf(Treportfile,"%s",vb2.buf);
+ amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!='\n')
+  Psyntax("badly formed line");
+ vb2.buf[amtread]= 0;
+ if (memcmp(vb2.buf," poll=",6)) Psyntax("syscall reply mismatch");
+ if (vb2.buf[6] == 'E') {
+  int e;
+  e= Perrno(vb2.buf+6);
+  P_updatetime();
+  errno= e;
+  return -1;
+ }
+  r= strtoul(vb2.buf+6,&ep,10);
+  if (*ep && *ep!=' ') Psyntax("return value not E* or positive number");
+  vb2.used= ep - (char*)vb2.buf;
+        Parg("fds"); Ppollfds(fds,nfds); 
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
+ P_updatetime();
+ return r;
+}
+#endif
+int Hsocket(   int domain , int type , int protocol    ) {
+ int r, amtread;
+ char *ep;
+       Tmust("socket","domain",domain==AF_INET); 
+  Tmust("socket","type",type==SOCK_STREAM || type==SOCK_DGRAM); 
+ Qsocket(       type   );
+ if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+ fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+ Tensurereportfile();
+ fprintf(Treportfile,"%s",vb2.buf);
+ amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!='\n')
+  Psyntax("badly formed line");
+ vb2.buf[amtread]= 0;
+ if (memcmp(vb2.buf," socket=",8)) Psyntax("syscall reply mismatch");
+ if (vb2.buf[8] == 'E') {
+  int e;
+  e= Perrno(vb2.buf+8);
+  P_updatetime();
+  errno= e;
+  return -1;
+ }
+  r= strtoul(vb2.buf+8,&ep,10);
+  if (*ep && *ep!=' ') Psyntax("return value not E* or positive number");
+  vb2.used= ep - (char*)vb2.buf;
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
+ P_updatetime();
+ return r;
+}
+int Hfcntl(    int fd , int cmd , ...  ) {
+ int r, amtread;
+       va_list al; long arg; 
+  Tmust("fcntl","cmd",cmd==F_SETFL || cmd==F_GETFL);
+  if (cmd == F_SETFL) {
+    va_start(al,cmd); arg= va_arg(al,long); va_end(al);
+  } else {
+    arg= 0;
+  } 
+ Qfcntl(       fd , cmd , arg  );
+ if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+ fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+ Tensurereportfile();
+ fprintf(Treportfile,"%s",vb2.buf);
+ amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!='\n')
+  Psyntax("badly formed line");
+ vb2.buf[amtread]= 0;
+ if (memcmp(vb2.buf," fcntl=",7)) Psyntax("syscall reply mismatch");
+ if (vb2.buf[7] == 'E') {
+  int e;
+  e= Perrno(vb2.buf+7);
+  P_updatetime();
+  errno= e;
+  return -1;
+ }
+  r= 0;
+  if (cmd == F_GETFL) {
+    if (!memcmp(vb2.buf+7,"O_NONBLOCK|...",14)) {
+      r= O_NONBLOCK;
+      vb2.used= 7+14;
+    } else if (!memcmp(vb2.buf+7,"~O_NONBLOCK&...",15)) {
+      vb2.used= 7+15;
+    } else {
+      Psyntax("fcntl flags not O_NONBLOCK|... or ~O_NONBLOCK&...");
+    }
+  } else if (cmd == F_SETFL) {
+  if (memcmp(vb2.buf+7,"OK",2)) Psyntax("success/fail not E* or OK");
+  vb2.used= 7+2;
+  r= 0;
+  } else {
+    Psyntax("fcntl not F_GETFL or F_SETFL");
+  }
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
+ P_updatetime();
+ return r;
+}
+int Hconnect(  int fd , const struct sockaddr *addr , int addrlen      ) {
+ int r, amtread;
+ Qconnect(     fd , addr , addrlen     );
+ if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+ fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+ Tensurereportfile();
+ fprintf(Treportfile,"%s",vb2.buf);
+ amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!='\n')
+  Psyntax("badly formed line");
+ vb2.buf[amtread]= 0;
+ if (memcmp(vb2.buf," connect=",9)) Psyntax("syscall reply mismatch");
+ if (vb2.buf[9] == 'E') {
+  int e;
+  e= Perrno(vb2.buf+9);
+  P_updatetime();
+  errno= e;
+  return -1;
+ }
+  if (memcmp(vb2.buf+9,"OK",2)) Psyntax("success/fail not E* or OK");
+  vb2.used= 9+2;
+  r= 0;
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
+ P_updatetime();
+ return r;
+}
+int Hclose(    int fd  ) {
+ int r, amtread;
+ Qclose(       fd      );
+ if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+ fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+ Tensurereportfile();
+ fprintf(Treportfile,"%s",vb2.buf);
+ amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!='\n')
+  Psyntax("badly formed line");
+ vb2.buf[amtread]= 0;
+ if (memcmp(vb2.buf," close=",7)) Psyntax("syscall reply mismatch");
+ if (vb2.buf[7] == 'E') {
+  int e;
+  e= Perrno(vb2.buf+7);
+  P_updatetime();
+  errno= e;
+  return -1;
+ }
+  if (memcmp(vb2.buf+7,"OK",2)) Psyntax("success/fail not E* or OK");
+  vb2.used= 7+2;
+  r= 0;
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
+ P_updatetime();
+ return r;
+}
+int Hsendto(   int fd , const void *msg , int msglen , unsigned int flags , const struct sockaddr *addr , int addrlen  ) {
+ int r, amtread;
+ char *ep;
+       Tmust("sendto","flags",flags==0); 
+ Qsendto(      fd , msg , msglen , addr , addrlen      );
+ if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+ fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+ Tensurereportfile();
+ fprintf(Treportfile,"%s",vb2.buf);
+ amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!='\n')
+  Psyntax("badly formed line");
+ vb2.buf[amtread]= 0;
+ if (memcmp(vb2.buf," sendto=",8)) Psyntax("syscall reply mismatch");
+ if (vb2.buf[8] == 'E') {
+  int e;
+  e= Perrno(vb2.buf+8);
+  P_updatetime();
+  errno= e;
+  return -1;
+ }
+  r= strtoul(vb2.buf+8,&ep,10);
+  if (*ep && *ep!=' ') Psyntax("return value not E* or positive number");
+  vb2.used= ep - (char*)vb2.buf;
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
+ P_updatetime();
+ return r;
+}
+int Hrecvfrom( int fd , void *buf , int buflen , unsigned int flags , struct sockaddr *addr , int *addrlen     ) {
+ int r, amtread;
+       Tmust("recvfrom","flags",flags==0); 
+       Tmust("recvfrom","*addrlen",*addrlen>=sizeof(struct sockaddr_in)); 
+ Qrecvfrom(    fd , buflen , *addrlen  );
+ if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+ fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+ Tensurereportfile();
+ fprintf(Treportfile,"%s",vb2.buf);
+ amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!='\n')
+  Psyntax("badly formed line");
+ vb2.buf[amtread]= 0;
+ if (memcmp(vb2.buf," recvfrom=",10)) Psyntax("syscall reply mismatch");
+ if (vb2.buf[10] == 'E') {
+  int e;
+  e= Perrno(vb2.buf+10);
+  P_updatetime();
+  errno= e;
+  return -1;
+ }
+  if (memcmp(vb2.buf+10,"OK",2)) Psyntax("success/fail not E* or OK");
+  vb2.used= 10+2;
+  r= 0;
+       Parg("addr"); Paddr(addr,addrlen); 
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
+       r= Pbytes(buf,buflen); 
+ P_updatetime();
+ return r;
+}
+int Hread(     int fd , void *buf , size_t buflen      ) {
+ int r, amtread;
+ Qread(        fd , buflen     );
+ if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+ fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+ Tensurereportfile();
+ fprintf(Treportfile,"%s",vb2.buf);
+ amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!='\n')
+  Psyntax("badly formed line");
+ vb2.buf[amtread]= 0;
+ if (memcmp(vb2.buf," read=",6)) Psyntax("syscall reply mismatch");
+ if (vb2.buf[6] == 'E') {
+  int e;
+  e= Perrno(vb2.buf+6);
+  P_updatetime();
+  errno= e;
+  return -1;
+ }
+  if (memcmp(vb2.buf+6,"OK",2)) Psyntax("success/fail not E* or OK");
+  vb2.used= 6+2;
+  r= 0;
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
+       r= Pbytes(buf,buflen); 
+ P_updatetime();
+ return r;
+}
+int Hwrite(    int fd , const void *buf , size_t len   ) {
+ int r, amtread;
+ char *ep;
+ Qwrite(       fd , buf , len  );
+ if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
+ fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
+ Tensurereportfile();
+ fprintf(Treportfile,"%s",vb2.buf);
+ amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!='\n')
+  Psyntax("badly formed line");
+ vb2.buf[amtread]= 0;
+ if (memcmp(vb2.buf," write=",7)) Psyntax("syscall reply mismatch");
+ if (vb2.buf[7] == 'E') {
+  int e;
+  e= Perrno(vb2.buf+7);
+  P_updatetime();
+  errno= e;
+  return -1;
+ }
+  r= strtoul(vb2.buf+7,&ep,10);
+  if (*ep && *ep!=' ') Psyntax("return value not E* or positive number");
+  vb2.used= ep - (char*)vb2.buf;
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
+ P_updatetime();
+ return r;
+}
index aec03930cecd955df60ca971df275931efbb9b10..3437293d9a71fa651101386e65c3b55c0ad62c33 100644 (file)
@@ -2,7 +2,12 @@ m4_dnl hplayback.c.m4
 m4_dnl (part of complex test harness, not of the library)
 m4_dnl - playback routines
 
-m4_dnl  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+m4_dnl  This file is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl
+m4_dnl  It is part of adns, which is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
 m4_dnl  
 m4_dnl  This program is free software; you can redistribute it and/or modify
 m4_dnl  it under the terms of the GNU General Public License as published by
@@ -22,23 +27,32 @@ m4_include(hmacros.i4)
 
 #include <assert.h>
 #include <string.h>
-#include <fcntl.h>
 #include <errno.h>
 #include <stdlib.h>
 
+#include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include <sys/time.h>
+
+#include <unistd.h>
+#include <fcntl.h>
 
 #include "harness.h"
 
 static FILE *Tinputfile, *Treportfile;
 static vbuf vb2;
 
+extern void Tshutdown(void) {
+  adns__vbuf_free(&vb2);
+}
+
 static void Tensurereportfile(void) {
   const char *fdstr;
   int fd;
 
+  if (Treportfile) return;
   Treportfile= stderr;
   fdstr= getenv("ADNS_TEST_REPORT_FD"); if (!fdstr) return;
   fd= atoi(fdstr);
@@ -68,6 +82,7 @@ static void Tensureinputfile(void) {
     fd= atoi(fdstr);
     Tinputfile= fdopen(fd,"r"); if (!Tinputfile) Tfailed("fdopen ADNS_TEST_IN_FD");
   }
+  setvbuf(Tinputfile,0,_IONBF,0);
 
   if (!adns__vbuf_ensure(&vb2,1000)) Tnomem();
   fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
@@ -89,6 +104,20 @@ static void Parg(const char *argname) {
   if (vb2.buf[vb2.used++] != hm_squote=hm_squote) Psyntax("not = after argument name");
 }
 
+static int Pstring_maybe(const char *string) {
+  int l;
+
+  l= strlen(string);
+  if (memcmp(vb2.buf+vb2.used,string,l)) return 0;
+  vb2.used+= l;
+  return 1;
+}
+
+static void Pstring(const char *string, const char *emsg) {
+  if (Pstring_maybe(string)) return;
+  Psyntax(emsg);
+}
+
 static int Perrno(const char *stuff) {
   const struct Terrno *te;
   int r;
@@ -96,8 +125,8 @@ static int Perrno(const char *stuff) {
 
   for (te= Terrnos; te->n && strcmp(te->n,stuff); te++);
   if (te->n) return te->v;
-  r= strtoul(stuff+1,&ep,10);
-  if (ep) Psyntax("errno value not recognised, not numeric");
+  r= strtoul(stuff+2,&ep,10);
+  if (*ep) Psyntax("errno value not recognised, not numeric");
   return r;
 }
 
@@ -125,9 +154,11 @@ static void Pfdset(fd_set *set, int max) {
   
   if (vb2.buf[vb2.used++] != hm_squote[hm_squote) Psyntax("fd set start not [");
   FD_ZERO(set);
+  if (vb2.buf[vb2.used] == hm_squote]hm_squote) { vb2.used++; return; }
   for (;;) {
     r= strtoul(vb2.buf+vb2.used,&ep,10);
     if (r>=max) Psyntax("fd set member > max");
+    if (ep == (char*)vb2.buf+vb2.used) Psyntax("empty entry in fd set");
     FD_SET(r,set);
     vb2.used= ep - (char*)vb2.buf;
     c= vb2.buf[vb2.used++];
@@ -136,6 +167,49 @@ static void Pfdset(fd_set *set, int max) {
   }
 }
 
+#ifdef HAVE_POLL
+static int Ppollfdevents(void) {
+  int events;
+
+  if (Pstring_maybe("0")) return 0;
+  events= 0;
+
+  if (Pstring_maybe("POLLIN")) {
+    events |= POLLIN;
+    if (!Pstring_maybe("|")) return events;
+  }
+
+  if (Pstring_maybe("POLLOUT")) {
+    events |= POLLOUT;
+    if (!Pstring_maybe("|")) return events;
+  }
+
+  Pstring("POLLPRI","pollfdevents PRI?");
+  return events;
+}
+
+static void Ppollfds(struct pollfd *fds, int nfds) {
+  int i;
+  char *ep;
+  const char *comma= "";
+  
+  if (vb2.buf[vb2.used++] != hm_squote[hm_squote) Psyntax("pollfds start not [");
+  for (i=0; i<nfds; i++) {
+    Pstring("{fd=","{fd= in pollfds");
+    fds->fd= strtoul(vb2.buf+vb2.used,&ep,10);
+    vb2.used= ep - (char*)vb2.buf;    
+    Pstring(", events=",", events= in pollfds");
+    fds->events= Ppollfdevents();
+    Pstring(", revents=",", revents= in pollfds");
+    fds->revents= Ppollfdevents();
+    Pstring("}","} in pollfds");
+    Pstring(comma,"separator in pollfds");
+    comma= ", ";
+  }
+  if (vb2.buf[vb2.used++] != hm_squote]hm_squote) Psyntax("pollfds end not ]");
+}
+#endif
+
 static void Paddr(struct sockaddr *addr, int *lenr) {
   struct sockaddr_in *sa= (struct sockaddr_in*)addr;
   char *p, *ep;
@@ -185,6 +259,7 @@ static int Pbytes(byte *buf, int maxlen) {
   
 void Q_vb(void) {
   int r;
+  const char *nl;
 
   Tensureinputfile();
   if (!adns__vbuf_ensure(&vb2,vb.used+2)) Tnomem();
@@ -204,17 +279,21 @@ void Q_vb(void) {
             vb.used,vb.buf, vb.used,vb2.buf+1);
     exit(1);
   }
+  Tensurereportfile();
+  nl= memchr(vb.buf,'\n',vb.used);
+  fprintf(Treportfile," %.*s\n", (int)(nl ? nl - (const char*)vb.buf : vb.used), vb.buf);
 }
 
 m4_define(`hm_syscall', `
  hm_create_proto_h
 int H$1(hm_args_massage($3,void)) {
- int r;
+ int r, amtread;
  m4_define(`hm_rv_fd',`char *ep;')
  m4_define(`hm_rv_any',`char *ep;')
  m4_define(`hm_rv_len',`')
  m4_define(`hm_rv_must',`')
  m4_define(`hm_rv_succfail',`')
+ m4_define(`hm_rv_fcntl',`')
  $2
 
  hm_create_hqcall_vars
@@ -231,11 +310,11 @@ int H$1(hm_args_massage($3,void)) {
  fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
 
  Tensurereportfile();
- fprintf(Treportfile,"syscallr %s",vb2.buf);
vb2.avail= strlen(vb2.buf);
- if (vb.avail<=0 || vb2.buf[--vb2.avail]!=hm_squote\nhm_squote)
+ fprintf(Treportfile,"%s",vb2.buf);
amtread= strlen(vb2.buf);
+ if (amtread<=0 || vb2.buf[--amtread]!=hm_squote\nhm_squote)
   Psyntax("badly formed line");
- vb2.buf[vb2.avail]= 0;
+ vb2.buf[amtread]= 0;
  if (memcmp(vb2.buf," $1=",hm_r_offset)) Psyntax("syscall reply mismatch");
 
  if (vb2.buf[hm_r_offset] == hm_squoteEhm_squote) {
@@ -259,13 +338,32 @@ int H$1(hm_args_massage($3,void)) {
   vb2.used= ep - (char*)vb2.buf;
  ')
  m4_define(`hm_rv_fd',`hm_rv_any')
+ m4_define(`hm_rv_fcntl',`
+  r= 0;
+  if (cmd == F_GETFL) {
+    if (!memcmp(vb2.buf+hm_r_offset,"O_NONBLOCK|...",14)) {
+      r= O_NONBLOCK;
+      vb2.used= hm_r_offset+14;
+    } else if (!memcmp(vb2.buf+hm_r_offset,"~O_NONBLOCK&...",15)) {
+      vb2.used= hm_r_offset+15;
+    } else {
+      Psyntax("fcntl flags not O_NONBLOCK|... or ~O_NONBLOCK&...");
+    }
+  } else if (cmd == F_SETFL) {
+    hm_rv_succfail
+  } else {
+    Psyntax("fcntl not F_GETFL or F_SETFL");
+  }
+ ')
  $2
 
  hm_create_nothing
  m4_define(`hm_arg_fdset_io',`Parg("$'`1"); Pfdset($'`1,$'`2);')
+ m4_define(`hm_arg_pollfds_io',`Parg("$'`1"); Ppollfds($'`1,$'`2);')
  m4_define(`hm_arg_addr_out',`Parg("$'`1"); Paddr($'`1,$'`2);')
  $3
- if (vb2.used != vb2.avail) Psyntax("junk at end of line");
+ assert(vb2.used <= amtread);
+ if (vb2.used != amtread) Psyntax("junk at end of line");
 
  hm_create_nothing
  m4_define(`hm_arg_bytes_out',`r= Pbytes($'`2,$'`4);')
@@ -276,4 +374,6 @@ int H$1(hm_args_massage($3,void)) {
 }
 ')
 
+m4_define(`hm_specsyscall', `')
+
 m4_include(`hsyscalls.i4')
diff --git a/regress/hrecord.c b/regress/hrecord.c
new file mode 100644 (file)
index 0000000..c60f93c
--- /dev/null
@@ -0,0 +1,227 @@
+#include <assert.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include "harness.h"
+static FILE *Toutputfile;
+void Tshutdown(void) {
+}
+static void R_recordtime(void) {
+  int r;
+  struct timeval tv, tvrel;
+  Tensureoutputfile();
+  r= gettimeofday(&tv,0); if (r) Tfailed("gettimeofday syscallbegin");
+  tvrel.tv_sec= tv.tv_sec - currenttime.tv_sec;
+  tvrel.tv_usec= tv.tv_usec - currenttime.tv_usec;
+  if (tv.tv_usec < 0) { tvrel.tv_usec += 1000000; tvrel.tv_sec--; }
+  Tvbf("\n +%ld.%06ld",(long)tvrel.tv_sec,(long)tvrel.tv_usec);
+  currenttime= tv;
+}
+void Tensureoutputfile(void) {
+  const char *fdstr;
+  int fd, r;
+  if (Toutputfile) return;
+  Toutputfile= stdout;
+  fdstr= getenv("ADNS_TEST_OUT_FD");
+  if (fdstr) {
+    fd= atoi(fdstr);
+    Toutputfile= fdopen(fd,"a"); if (!Toutputfile) Tfailed("fdopen ADNS_TEST_OUT_FD");
+  }
+  r= gettimeofday(&currenttime,0); if (r) Tfailed("gettimeofday syscallbegin");
+  if (fprintf(Toutputfile," start %ld.%06ld\n",
+             (long)currenttime.tv_sec,(long)currenttime.tv_usec) == EOF) Toutputerr();
+}
+void Q_vb(void) {
+  if (!adns__vbuf_append(&vb,"",1)) Tnomem();
+  Tensureoutputfile();
+  if (fprintf(Toutputfile," %s\n",vb.buf) == EOF) Toutputerr();
+  if (fflush(Toutputfile)) Toutputerr();
+}
+static void R_vb(void) {
+  Q_vb();
+}
+int Hselect(   int max , fd_set *rfds , fd_set *wfds , fd_set *efds , struct timeval *to       ) {
+ int r, e;
+ Qselect(      max , rfds , wfds , efds , to   );
+ r= select(    max , rfds , wfds , efds , to   );
+ e= errno;
+ vb.used= 0;
+ Tvba("select=");
+  if (r==-1) { Tvberrno(e); goto x_error; }
+  Tvbf("%d",r);
+       Tvba(" rfds="); Tvbfdset(max,rfds); 
+       Tvba(" wfds="); Tvbfdset(max,wfds); 
+       Tvba(" efds="); Tvbfdset(max,efds); 
+ x_error:
+ R_recordtime();
+ R_vb();
+ errno= e;
+ return r;
+}
+#ifdef HAVE_POLL
+int Hpoll(     struct pollfd *fds , int nfds , int timeout     ) {
+ int r, e;
+ Qpoll(        fds , nfds , timeout    );
+ r= poll(      fds , nfds , timeout    );
+ e= errno;
+ vb.used= 0;
+ Tvba("poll=");
+  if (r==-1) { Tvberrno(e); goto x_error; }
+  Tvbf("%d",r);
+        Tvba(" fds="); Tvbpollfds(fds,nfds); 
+ x_error:
+ R_recordtime();
+ R_vb();
+ errno= e;
+ return r;
+}
+#endif
+int Hsocket(   int domain , int type , int protocol    ) {
+ int r, e;
+       Tmust("socket","domain",domain==AF_INET); 
+  Tmust("socket","type",type==SOCK_STREAM || type==SOCK_DGRAM); 
+ Qsocket(       type   );
+ r= socket(    domain , type , protocol        );
+ e= errno;
+ vb.used= 0;
+ Tvba("socket=");
+  if (r==-1) { Tvberrno(e); goto x_error; }
+  Tvbf("%d",r);
+ x_error:
+ R_recordtime();
+ R_vb();
+ errno= e;
+ return r;
+}
+int Hfcntl(    int fd , int cmd , ...  ) {
+ int r, e;
+       va_list al; long arg; 
+  Tmust("fcntl","cmd",cmd==F_SETFL || cmd==F_GETFL);
+  if (cmd == F_SETFL) {
+    va_start(al,cmd); arg= va_arg(al,long); va_end(al);
+  } else {
+    arg= 0;
+  } 
+ Qfcntl(       fd , cmd , arg  );
+ r= fcntl(     fd , cmd , arg  );
+ e= errno;
+ vb.used= 0;
+ Tvba("fcntl=");
+  if (r==-1) { Tvberrno(e); goto x_error; }
+  if (cmd == F_GETFL) {
+    Tvbf(r & O_NONBLOCK ? "O_NONBLOCK|..." : "~O_NONBLOCK&...");
+  } else {
+    if (cmd == F_SETFL) {
+      Tmust("fcntl","return",!r);
+    } else {
+      Tmust("cmd","F_GETFL/F_SETFL",0);
+    }
+    Tvba("OK");
+  }
+ x_error:
+ R_recordtime();
+ R_vb();
+ errno= e;
+ return r;
+}
+int Hconnect(  int fd , const struct sockaddr *addr , int addrlen      ) {
+ int r, e;
+ Qconnect(     fd , addr , addrlen     );
+ r= connect(   fd , addr , addrlen     );
+ e= errno;
+ vb.used= 0;
+ Tvba("connect=");
+  if (r) { Tvberrno(e); goto x_error; }
+  Tvba("OK");
+ x_error:
+ R_recordtime();
+ R_vb();
+ errno= e;
+ return r;
+}
+int Hclose(    int fd  ) {
+ int r, e;
+ Qclose(       fd      );
+ r= close(     fd      );
+ e= errno;
+ vb.used= 0;
+ Tvba("close=");
+  if (r) { Tvberrno(e); goto x_error; }
+  Tvba("OK");
+ x_error:
+ R_recordtime();
+ R_vb();
+ errno= e;
+ return r;
+}
+int Hsendto(   int fd , const void *msg , int msglen , unsigned int flags , const struct sockaddr *addr , int addrlen  ) {
+ int r, e;
+       Tmust("sendto","flags",flags==0); 
+ Qsendto(      fd , msg , msglen , addr , addrlen      );
+ r= sendto(    fd , msg , msglen , flags , addr , addrlen      );
+ e= errno;
+ vb.used= 0;
+ Tvba("sendto=");
+  if (r==-1) { Tvberrno(e); goto x_error; }
+  Tvbf("%d",r);
+ x_error:
+ R_recordtime();
+ R_vb();
+ errno= e;
+ return r;
+}
+int Hrecvfrom( int fd , void *buf , int buflen , unsigned int flags , struct sockaddr *addr , int *addrlen     ) {
+ int r, e;
+       Tmust("recvfrom","flags",flags==0); 
+       Tmust("recvfrom","*addrlen",*addrlen>=sizeof(struct sockaddr_in)); 
+ Qrecvfrom(    fd , buflen , *addrlen  );
+ r= recvfrom(  fd , buf , buflen , flags , addr , addrlen      );
+ e= errno;
+ vb.used= 0;
+ Tvba("recvfrom=");
+  if (r==-1) { Tvberrno(e); goto x_error; }
+  Tmust("recvfrom","return",r<=buflen);
+  Tvba("OK");
+       Tvba(" addr="); Tvbaddr(addr,*addrlen); 
+       Tvbbytes(buf,r); 
+ x_error:
+ R_recordtime();
+ R_vb();
+ errno= e;
+ return r;
+}
+int Hread(     int fd , void *buf , size_t buflen      ) {
+ int r, e;
+ Qread(        fd , buflen     );
+ r= read(      fd , buf , buflen       );
+ e= errno;
+ vb.used= 0;
+ Tvba("read=");
+  if (r==-1) { Tvberrno(e); goto x_error; }
+  Tmust("read","return",r<=buflen);
+  Tvba("OK");
+       Tvbbytes(buf,r); 
+ x_error:
+ R_recordtime();
+ R_vb();
+ errno= e;
+ return r;
+}
+int Hwrite(    int fd , const void *buf , size_t len   ) {
+ int r, e;
+ Qwrite(       fd , buf , len  );
+ r= write(     fd , buf , len  );
+ e= errno;
+ vb.used= 0;
+ Tvba("write=");
+  if (r==-1) { Tvberrno(e); goto x_error; }
+  Tvbf("%d",r);
+ x_error:
+ R_recordtime();
+ R_vb();
+ errno= e;
+ return r;
+}
index e383ac5cbdd3fb8c89d5a4b95a5c3c571ed7044f..e5287a0d09a383ece9533a1f3b54bd458b5b8f7c 100644 (file)
@@ -2,7 +2,12 @@ m4_dnl hrecord.c.m4
 m4_dnl (part of complex test harness, not of the library)
 m4_dnl - recording routines
 
-m4_dnl  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+m4_dnl  This file is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl
+m4_dnl  It is part of adns, which is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
 m4_dnl  
 m4_dnl  This program is free software; you can redistribute it and/or modify
 m4_dnl  it under the terms of the GNU General Public License as published by
@@ -22,14 +27,20 @@ m4_include(hmacros.i4)
 
 #include <assert.h>
 #include <string.h>
-#include <fcntl.h>
 #include <errno.h>
 #include <stdlib.h>
 
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+
 #include "harness.h"
 
 static FILE *Toutputfile;
 
+void Tshutdown(void) {
+}
+
 static void R_recordtime(void) {
   int r;
   struct timeval tv, tvrel;
@@ -104,10 +115,23 @@ int H$1(hm_args_massage($3,void)) {
   if (r==-1) { Tvberrno(e); goto x_error; }
   Tmust("$1","return",r<=$'`1);
   Tvba("OK");')
+ m4_define(`hm_rv_fcntl',`
+  if (r==-1) { Tvberrno(e); goto x_error; }
+  if (cmd == F_GETFL) {
+    Tvbf(r & O_NONBLOCK ? "O_NONBLOCK|..." : "~O_NONBLOCK&...");
+  } else {
+    if (cmd == F_SETFL) {
+      Tmust("$1","return",!r);
+    } else {
+      Tmust("cmd","F_GETFL/F_SETFL",0);
+    }
+    Tvba("OK");
+  }')
  $2
 
  hm_create_nothing
  m4_define(`hm_arg_fdset_io',`Tvba(" $'`1="); Tvbfdset($'`2,$'`1);')
+ m4_define(`hm_arg_pollfds_io',`Tvba(" $'`1="); Tvbpollfds($'`1,$'`2);')
  m4_define(`hm_arg_addr_out',`Tvba(" $'`1="); Tvbaddr($'`1,*$'`2);')
  $3
 
@@ -119,6 +143,7 @@ int H$1(hm_args_massage($3,void)) {
  m4_define(`hm_rv_fd',`x_error:')
  m4_define(`hm_rv_succfail',`x_error:')
  m4_define(`hm_rv_len',`x_error:')
+ m4_define(`hm_rv_fcntl',`x_error:')
  m4_define(`hm_rv_must',`')
  $2
 
@@ -129,4 +154,6 @@ int H$1(hm_args_massage($3,void)) {
 }
 ')
 
+m4_define(`hm_specsyscall', `')
+
 m4_include(`hsyscalls.i4')
diff --git a/regress/hredirect.h b/regress/hredirect.h
new file mode 100644 (file)
index 0000000..d49da69
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef HREDIRECT_H_INCLUDED
+#define HREDIRECT_H_INCLUDED
+#include "hsyscalls.h"
+#undef select
+#define select Hselect
+#ifdef HAVE_POLL
+#undef poll
+#define poll Hpoll
+#endif
+#undef socket
+#define socket Hsocket
+#undef fcntl
+#define fcntl Hfcntl
+#undef connect
+#define connect Hconnect
+#undef close
+#define close Hclose
+#undef sendto
+#define sendto Hsendto
+#undef recvfrom
+#define recvfrom Hrecvfrom
+#undef read
+#define read Hread
+#undef write
+#define write Hwrite
+#undef int
+#define writev Hwritev
+#undef int
+#define gettimeofday Hgettimeofday
+#undef void*
+#define malloc Hmalloc
+#undef void
+#define free Hfree
+#undef void*
+#define realloc Hrealloc
+#undef void
+#define exit Hexit
+#endif
diff --git a/regress/hredirect.h.m4 b/regress/hredirect.h.m4
new file mode 100644 (file)
index 0000000..49a36c3
--- /dev/null
@@ -0,0 +1,40 @@
+m4_dnl hredirect.h.m4
+m4_dnl (part of complex test harness, not of the library)
+m4_dnl - redefinitions of system calls
+
+m4_dnl  This file is
+m4_dnl    Copyright (C) 2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl
+m4_dnl  It is part of adns, which is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+m4_dnl  
+m4_dnl  This program is free software; you can redistribute it and/or modify
+m4_dnl  it under the terms of the GNU General Public License as published by
+m4_dnl  the Free Software Foundation; either version 2, or (at your option)
+m4_dnl  any later version.
+m4_dnl  
+m4_dnl  This program is distributed in the hope that it will be useful,
+m4_dnl  but WITHOUT ANY WARRANTY; without even the implied warranty of
+m4_dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+m4_dnl  GNU General Public License for more details.
+m4_dnl  
+m4_dnl  You should have received a copy of the GNU General Public License
+m4_dnl  along with this program; if not, write to the Free Software Foundation,
+m4_dnl  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+
+m4_include(hmacros.i4)
+
+#ifndef HREDIRECT_H_INCLUDED
+#define HREDIRECT_H_INCLUDED
+
+#include "hsyscalls.h"
+
+hm_create_nothing
+m4_define(`hm_syscall', `#undef $1
+#define $1 H$1')
+m4_define(`hm_specsyscall',`#undef $1
+#define $2 H$2')
+m4_include(`hsyscalls.i4')
+
+#endif
diff --git a/regress/hsyscalls.h b/regress/hsyscalls.h
new file mode 100644 (file)
index 0000000..afec8ca
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef HSYSCALLS_H_INCLUDED
+#define HSYSCALLS_H_INCLUDED
+#include <sys/time.h>
+#include <sys/socket.h>
+#include <sys/uio.h>
+#include <unistd.h>
+#ifdef HAVE_POLL
+#include <sys/poll.h>
+#endif
+int Hselect(   int max , fd_set *rfds , fd_set *wfds , fd_set *efds , struct timeval *to       );
+#ifdef HAVE_POLL
+int Hpoll(     struct pollfd *fds , int nfds , int timeout     );
+#endif
+int Hsocket(   int domain , int type , int protocol    );
+int Hfcntl(    int fd , int cmd , ...  );
+int Hconnect(  int fd , const struct sockaddr *addr , int addrlen      );
+int Hclose(    int fd  );
+int Hsendto(   int fd , const void *msg , int msglen , unsigned int flags , const struct sockaddr *addr , int addrlen  );
+int Hrecvfrom( int fd , void *buf , int buflen , unsigned int flags , struct sockaddr *addr , int *addrlen     );
+int Hread(     int fd , void *buf , size_t buflen      );
+int Hwrite(    int fd , const void *buf , size_t len   );
+int Hwritev(int fd, const struct iovec *vector, size_t count);
+int Hgettimeofday(struct timeval *tv, struct timezone *tz);
+void* Hmalloc(size_t sz);
+void Hfree(void *ptr);
+void* Hrealloc(void *op, size_t nsz);
+void Hexit(int rv)NONRETURNING;
+#endif
diff --git a/regress/hsyscalls.h.m4 b/regress/hsyscalls.h.m4
new file mode 100644 (file)
index 0000000..5b73680
--- /dev/null
@@ -0,0 +1,45 @@
+m4_dnl hsyscalls.h.m4
+m4_dnl (part of complex test harness, not of the library)
+m4_dnl - prototypes of redefinitions of system calls
+
+m4_dnl  This file is
+m4_dnl    Copyright (C) 2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl
+m4_dnl  It is part of adns, which is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+m4_dnl  
+m4_dnl  This program is free software; you can redistribute it and/or modify
+m4_dnl  it under the terms of the GNU General Public License as published by
+m4_dnl  the Free Software Foundation; either version 2, or (at your option)
+m4_dnl  any later version.
+m4_dnl  
+m4_dnl  This program is distributed in the hope that it will be useful,
+m4_dnl  but WITHOUT ANY WARRANTY; without even the implied warranty of
+m4_dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+m4_dnl  GNU General Public License for more details.
+m4_dnl  
+m4_dnl  You should have received a copy of the GNU General Public License
+m4_dnl  along with this program; if not, write to the Free Software Foundation,
+m4_dnl  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+
+m4_include(hmacros.i4)
+
+#ifndef HSYSCALLS_H_INCLUDED
+#define HSYSCALLS_H_INCLUDED
+
+#include <sys/time.h>
+#include <sys/socket.h>
+#include <sys/uio.h>
+#include <unistd.h>
+
+#ifdef HAVE_POLL
+#include <sys/poll.h>
+#endif
+
+hm_create_proto_h
+m4_define(`hm_syscall', `int H$1(hm_args_massage($3,void));')
+m4_define(`hm_specsyscall', `$1 H$2($3)$4;')
+m4_include(`hsyscalls.i4')
+
+#endif
index dc6ff403ceb854a4f20d80001950b0491781fefd..d5a57b75e2ebd7085240cce3cb26531c35aa27ee 100644 (file)
@@ -2,7 +2,12 @@ m4_dnl hsyscalls.i4
 m4_dnl (part of complex test harness, not of the library)
 m4_dnl - list of syscalls to override/log and their args
 
-m4_dnl  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+m4_dnl  This file is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl
+m4_dnl  It is part of adns, which is
+m4_dnl    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+m4_dnl    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
 m4_dnl  
 m4_dnl  This program is free software; you can redistribute it and/or modify
 m4_dnl  it under the terms of the GNU General Public License as published by
@@ -19,13 +24,14 @@ m4_dnl  along with this program; if not, write to the Free Software Foundation,
 m4_dnl  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
 
 m4_dnl each system call has
-m4_dnl  hm_syscall(<name>,<returnvalue>,<args>
+m4_dnl  hm_syscall(<name>,<returnvalue>,<args>)
 m4_dnl <returnvalue> is one of
 m4_dnl  hm_rv_must       must succeed and return 0
 m4_dnl  hm_rv_any        any nonnegative return allowed, -1 means see errno
 m4_dnl  hm_rv_fd         file descriptor is returned, -1 means see errno
 m4_dnl  hm_rv_succfail   returns 0 (ok) or -1 (see errno)
 m4_dnl  hm_rv_len(<max>) returns length read/written, must be <=max, -1 => errno
+m4_dnl  hm_rv_fcntl      syscall is fcntl, do special processing
 m4_dnl <args> is list of macros for arguments, each followed by hm_na
 m4_dnl  hm_arg_nullptr(<type>,<arg>)    pointer of type type, must be null
 m4_dnl  hm_arg_int(<arg>)               signed integer
@@ -55,6 +61,14 @@ hm_syscall(
        hm_arg_timeval_in_rel_null(to) hm_na
 ')
 
+#ifdef HAVE_POLL
+hm_syscall(
+       poll, `hm_rv_any', `
+        hm_arg_pollfds_io(fds,nfds) hm_na
+       hm_arg_int(timeout) hm_na
+')
+#endif
+
 hm_syscall(
        socket, `hm_rv_fd', `
        hm_arg_must(int,domain,AF_INET) hm_na
@@ -63,7 +77,7 @@ hm_syscall(
 ')
 
 hm_syscall(
-       fcntl, `hm_rv_any', `
+       fcntl, `hm_rv_fcntl', `
        hm_arg_fd(fd) hm_na
        hm_arg_fcntl_cmd_arg(cmd,arg) hm_na
 ')
@@ -106,3 +120,11 @@ hm_syscall(
        hm_arg_fd(fd) hm_na
        hm_arg_bytes_in(void,buf,size_t,len) hm_na
 ')
+
+hm_specsyscall(int, writev, `int fd, const struct iovec *vector, size_t count')
+hm_specsyscall(int, gettimeofday, `struct timeval *tv, struct timezone *tz')
+
+hm_specsyscall(void*, malloc, `size_t sz')
+hm_specsyscall(void, free, `void *ptr')
+hm_specsyscall(void*, realloc, `void *op, size_t nsz')
+hm_specsyscall(void, exit, `int rv', NONRETURNING)
diff --git a/regress/init-1stservbroken.text b/regress/init-1stservbroken.text
new file mode 100644 (file)
index 0000000..56cd423
--- /dev/null
@@ -0,0 +1,3 @@
+nameserver 172.18.45.2
+nameserver 172.18.45.6
+sortlist 127.0.0.1/32 172.18.45.0/28 172.18.45.0/24
diff --git a/regress/init-1stservto.text b/regress/init-1stservto.text
new file mode 100644 (file)
index 0000000..b70e678
--- /dev/null
@@ -0,0 +1,3 @@
+nameserver 10.0.0.1
+nameserver 172.18.45.6
+sortlist 127.0.0.1/32 172.18.45.0/28 172.18.45.0/24
diff --git a/regress/init-2ndserver.text b/regress/init-2ndserver.text
new file mode 100644 (file)
index 0000000..88cb0d2
--- /dev/null
@@ -0,0 +1,3 @@
+nameserver 172.18.45.36
+nameserver 172.18.45.6
+sortlist 127.0.0.1/32 172.18.45.0/28 172.18.45.0/24
diff --git a/regress/init-anarres.text b/regress/init-anarres.text
new file mode 100644 (file)
index 0000000..1918381
--- /dev/null
@@ -0,0 +1,2 @@
+nameserver 172.18.45.2
+search davenant.greenend.org.uk
diff --git a/regress/init-manyptrwrong.text b/regress/init-manyptrwrong.text
new file mode 100644 (file)
index 0000000..34b6084
--- /dev/null
@@ -0,0 +1 @@
+nameserver 140.200.128.13
diff --git a/regress/init-ncipher.text b/regress/init-ncipher.text
new file mode 100644 (file)
index 0000000..11ef2db
--- /dev/null
@@ -0,0 +1,3 @@
+nameserver 195.224.55.129
+sortlist 127.0.0.1/32 195.224.55.128/25 195.224.55.0/24
+search ncipher.com
diff --git a/regress/init-ndots100.text b/regress/init-ndots100.text
new file mode 100644 (file)
index 0000000..e241120
--- /dev/null
@@ -0,0 +1,4 @@
+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
+options ndots:100
diff --git a/regress/init-tunnel.text b/regress/init-tunnel.text
new file mode 100644 (file)
index 0000000..29c789e
--- /dev/null
@@ -0,0 +1,3 @@
+nameserver 172.31.80.9
+sortlist 127.0.0.1/32 172.18.45.0/24 172.31.80.0/28
+search davenant.greenend.org.uk greenend.org.uk
diff --git a/regress/junk b/regress/junk
deleted file mode 100644 (file)
index 54e797b..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-
-
-
-m4_define(`hm_arg_timeval_out_abs', `')
-m4_define(`hm_arg_nullptr', `')
-m4_define(`hm_arg_fdset_io', `const fd_set *$1 $3')
-m4_define(`hm_arg_must', `')
-m4_define(`hm_arg_ign', `')
-m4_define(`hm_arg_fcntl_arg', `long arg')
-m4_define(`hm_arg_bytes_out', `$3 $4 $6')
-m4_define(`hm_arg_addr_out', `int $2 $3')
-
-
-m4_define(`hm_syscall', `void Q$1(hm_args_checkvoid(`$3'));')
-
-
-
-
-
-int Hgettimeofday(struct timeval *tv, struct timezone *tz) {
-  int r;
-  struct timeval diff;
-
-  assert(tv); assert(!tz);
-
-  Qgettimeofday();
-
-  r= gettimeofday(tv,0); if (r) Tfailed("gettimeofday");
-
-  vb.used= 0;
-  if (!begin_set) {
-    Tvbf("gettimeofday= %ld.%06ld",tv->tv_sec,tv->tv_usec);
-    begin= *tv;
-    begin_set= 1;
-  } else {
-    diff.tv_sec= tv->tv_sec - begin.tv_sec;
-    diff.tv_usec= tv->tv_usec - begin.tv_usec;
-    if (diff.tv_usec < 0) {
-      diff.tv_sec -= 1;
-      diff.tv_usec += 1000000;
-    }
-    assert(diff.tv_sec >= 0);
-    assert(diff.tv_usec >= 0);
-    Tvbf("gettimeofday= +%ld.%06ld",diff.tv_sec,diff.tv_usec);
-  }
-  Rvb();
-  
-  return 0;
-}
-
-int Hselect(int n, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *to) {
-  int r;
-  
-  Qselect(n,rfds,wfds,efds,to);
-
-  r= select(n,rfds,wfds,efds,to);
-
-  if (r==-1) {
-    Rerrno("select");
-  } else {
-    vb.used= 0;
-    Tvbf("select= %d",r);
-    Tvbfdset(n,rfds);
-    Tvbfdset(n,wfds);
-    Tvbfdset(n,efds);
-    Rvb();
-  }
-
-  if (to) memset(to,0x5a,sizeof(*to));
-
-  return r;
-}
-
-int Hsocket(int domain, int type, int protocol) {
-  int r;
-  
-  assert(domain == AF_INET);
-
-  Qsocket(type);
-  r= socket(domain,type,protocol); if (r==-1) Tfailed("socket");
-
-  Rf("socket= %d",r);
-  return r;
-}
-
-int Hfcntl(int fd, int cmd, ...) {
-  long arg;
-  int r;
-  va_list al;
-
-  if (cmd == F_SETFL) {
-    va_start(al,cmd);
-    arg= va_arg(al,long);
-    va_end(al);
-    Qfcntl_setfl(fd,cmd,arg);
-    r= fcntl(fd, cmd, arg);
-  } else {
-    Qfcntl_other(fd,cmd);
-    r= fcntl(fd, cmd);
-  }
-
-  if (r==-1) Tfailed("fcntl");
-  Rf("fcntl= %d",r);
-  return r;
-}
-
-int Hconnect(int fd, struct sockaddr *addr, int addrlen) {
-  int r;
-  
-  Qconnect(fd,addr,addrlen);
-
-  r= connect(fd, addr, addrlen);
-
-  if (r) {
-    Rerrno("connect");
-  } else {
-    Rf("connect= ok");
-  }
-  return r;
-}
-
-int Hclose(int fd) {
-  Qclose(fd);
-  return 0;
-}
-
-int Hsendto(int fd, const void *msg, int msglen, unsigned int flags,
-           const struct sockaddr *addr, int addrlen) {
-  int r;
-  
-  assert(!flags);
-  Qsendto(fd,msg,msglen,addr,addrlen);
-
-  r= sendto(fd,msg,msglen,flags,addr,addrlen);
-  if (r==-1) {
-    Rerrno("sendto");
-  } else {
-    Rf("sendto= %d",r);
-  }
-  return r;
-}
-
-int Hrecvfrom(int fd, void *buf, int buflen, unsigned int flags,
-             struct sockaddr *addr, int *addrlen) {
-  int r;
-  
-  assert(!flags);
-  Qrecvfrom(fd,buflen,*addrlen);
-
-  r= recvfrom(fd,buf,buflen,flags,addr,addrlen);
-  if (r==-1) {
-    Rerrno("recvfrom");
-  } else {
-    vb.used= 0;
-    Tvbf("recvfrom= %d",r);
-    Tvbaddr(addr,*addrlen);
-    Tvbbytes(buf,r);
-    Rvb();
-  }
-
-  return r;
-}
-
-int Hread(int fd, void *buf, size_t len) {
-  int r;
-  
-  Qread(fd,len);
-
-  r= read(fd,buf,len);
-  if (r==-1) {
-    Rerrno("read");
-  } else {
-    vb.used= 0;
-    Tvba("read=");
-    Tvbbytes(buf,r);
-    Rvb();
-  }
-
-  return r;
-}
-
-int Hwrite(int fd, const void *buf, size_t len) {
-  int r;
-  
-  Qwrite(fd,buf,len);
-
-  r= write(fd,buf,len);
-  if (r==-1) {
-    Rerrno("write");
-  } else {
-    Rf("write= %d",r);
-  }
-  
-  return r;
-}
-
-
-
-
-
-
index 81cd024fe6b6bc7e6fd2af7d95615b66aaa7af91..2ee0eeb6311f6f4466d5e2f53924d577718da797 100755 (executable)
-#!/bin/sh
+#!/bin/bash
+# usage: m1test <name> <initfile> [<initflags>] <queryargs>'
+# test recording script
+#
+#  This file is
+#    Copyright (C) 1998-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+#  
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2, or (at your option)
+#  any later version.
+#  
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#  
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
 
 set -e
 
 if [ $# -lt 3 ]
 then
-       echo >&2 'usage: m1test <name> <initfile> <queryargs>'
+       echo >&2 \
+'usage: m1test <name> <initfile> [-<initflags>] ["<"]
+              [=<hrecord-command-args>] <queryargs>
+("<" means read input from case-<name>.in)'
        exit 1
 fi
 
 case="case-$1"; shift
 initfile="$1"; shift
+
+hrecord="./adnstest_record"
+
+case "$1" in
+-*)    initflags="$1"; shift
+esac
+
+if test "x$1" = "x<"
+then
+       shift; exec <"$case.in"
+fi
+
+case "$1" in
+=*)    hrecord="`echo \"$1\" | sed -e 's/^=//'`"; shift
+esac
+
+if test ! -f "$hrecord" -a -f "${hrecord}_record"
+then
+       case "$hrecord" in
+       /*)     program="$hrecord"      ;;
+       *)      program="./$hrecord"    ;;
+       esac
+       hrecord="${program}_record"
+else
+       program="$(echo "$hrecord" | sed -e 's/ .*//; s/_record$//')"
+fi
+
 queryargs="$*"
 
 initstring="`cat init-$initfile.text`"
+xinitflagsf=$program-xinitflags.text
+if test -f $xinitflagsf
+then
+       useinitflags="$initflags $(cat $xinitflagsf)";
+else
+       useinitflags="$initflags /"
+fi
 
-echo "$initfile" >"$case.sys"
+echo $program $initfile $initflags >"$case.sys"
 echo "$queryargs" >>"$case.sys"
 
-echo running "hrecord /... $queryargs"
+EF_DISABLE_BANNER=1
+export EF_DISABLE_BANNER
+
+rm -f pipe.out pipe.err
+mknod pipe.out p
+mknod pipe.err p
+tee <pipe.out "$case.out" &
+tee_out=$!
+tee <pipe.err "$case.err" &
+tee_err=$!
+exec 4>pipe.out
+exec 5>pipe.err
+
+echo running hrecord $initflags "... $queryargs"
 set +e
-ADNS_TEST_OUT_FD=3 3>>"$case.sys" >"$case.out" 2>"$case.err" </dev/null \
./hrecord "/$initstring" $queryargs
+ADNS_TEST_OUT_FD=3 3>>"$case.sys" >&4 2>&5 \
$hrecord $useinitflags"$initstring" $queryargs
 rc=$?
 set -e
 
-echo "rc=$rc" >>$case.out
+echo "rc=$rc" >&4
+exec 4>&-
+exec 5>&-
+
+wait $tee_out
+wait $tee_err
 
-egrep . -- "$case.err" "$case.out"
 echo "exit status: $rc"
index ce6b2831578cf5b934181745d488fec0ed0d888a..564efaca378a7c47622d5fdcb5e74efb97b994b6 100755 (executable)
 #!/bin/sh
 # usage: r1test <testcasename>
+# test execution script, for running one test
+#
+#  This file is
+#    Copyright (C) 1998-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+#  
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2, or (at your option)
+#  any later version.
+#  
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#  
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
 
 set -e
+mrc=1
+trap 'exit $mrc' 0
+
 casename="$1"
 case="case-$casename"
 ocase="output-$casename"
 
-exec <"$case.sys"
-read initfile
-read queryargs
+exec 4<"$case.sys"
+read <&4 program initfile initflags
+read <&4 queryargs
 
 initstring="`cat init-$initfile.text`"
+xinitflagsf=$program-xinitflags.text
+if test -f $xinitflagsf
+then
+       initflags="$initflags `cat $xinitflagsf`";
+else
+       initflags="$initflags /"
+fi
 
 rm -f $ocase.*
 
+EF_DISABLE_BANNER=1
+export EF_DISABLE_BANNER
+
+if test -f "$case.in"
+then
+       exec <"$case.in"
+else
+       exec </dev/null
+fi
+
+playback=./${program}_playback
+if test ! -f $playback
+then
+       printf "SKIPPED-$casename "
+       mrc=5
+       exit
+fi
+
 set +e
-ADNS_TEST_REPORT_FD=3 3>>"$ocase.report" >"$ocase.out" 2>"$ocase.err" \
- ./hplayback "/$initstring" $queryargs
+ADNS_TEST_REPORT_FD=3 ADNS_TEST_IN_FD=4 \
+ 3>>"$ocase.report" 4<&4 >"$ocase.out" 2>"$ocase.err" \
+ $playback $initflags"$initstring" $queryargs
 rc=$?
 set -e
 
+if [ "$rc" = 5 ]
+then
+       printf "SKIPPED-$casename "
+       mrc=5
+       exit
+fi
+
 echo "rc=$rc" >>$ocase.out
 
-for part in out err
+failed=false
+for part in err out
 do
        if diff -u -- "$case.$part" "$ocase.$part"
        then
                :
        else
-               echo >&2 "FAILED $case - WRONG OUTPUT"
-               exit 2
+               failwhy="$failwhy WRONG OUTPUT"
        fi
 done
 
-echo -n "$casename "
+cat <&4 >"$ocase.leftover"
+if egrep . /dev/null "$ocase.leftover"
+then
+       failwhy="$failwhy EXITED EARLY"
+fi
+
+if [ "x$failwhy" != x ]
+then
+       scremain="`wc -l <\"$ocase.leftover\"`"
+       echo >&2 "FAILED $case -$failwhy - lines of syscall remaining $scremain"
+       mrc=2
+       exit
+fi
 
-exit 0
+printf "$casename "
+mrc=0
index 6b705656c0a4966ef0cd130c9036d9ecd0794ff7..4385c25f7b99e76f847171403d5734019e1e9ff0 100644 (file)
@@ -1,8 +1,13 @@
 # settings.make.in - main configuration settings for Makefiles,
 #  used by autoconf/configure to generate settings.make
 #  
-#  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+#  This file is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
 #
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+#  
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
 #  the Free Software Foundation; either version 2, or (at your option)
@@ -21,11 +26,14 @@ MAJOR=              0
 MINOR=         1
 SHLIBFILE=     @SHLIBFILE@
 SHLIBSONAME=   @SHLIBSONAME@
+SHLIBFORLINK=  @SHLIBFORLINK@
 
 CC=            @CC@
 CFLAGS=                $(AUTOCFLAGS) $(WARNS) $(WERROR) $(DIRCFLAGS) $(XCFLAGS)
+LDFLAGS=       $(AUTOLDFLAGS) $(DIRLDFLAGS) $(XLDFLAGS)
 LDLIBS=                @LIBS@ $(XLIBS)
 AUTOCFLAGS=    @CFLAGS@
+AUTOLDFLAGS=   @LDFLAGS@
 WARNS=         @WARNS@
 #WERROR=       -Werror
 
@@ -44,19 +52,25 @@ bin_dir=    $(exec_prefix)/bin
 lib_dir=       $(exec_prefix)/lib
 include_dir=   $(prefix)/include
 
-INSTALL=               install -o 0 -g 0
+AC_INSTALL=    @INSTALL@
+ifeq ($(AC_INSTALL),./install-sh -c)
+INSTALL=       $(srcdir)/../$(AC_INSTALL)
+else
+INSTALL=       $(AC_INSTALL)
+endif
+
 INSTALL_PROGRAM=       $(INSTALL) -m 755 $(INSTALL_PROGRAM_FLAGS)
 INSTALL_DATA=          $(INSTALL) -m 644
 
 all:                   $(TARGETS)
 
 clean mostlyclean:
-               rm -f *.o *.tmp*
+               rm -f *.o *.tmp* *.so *.so.*
 
 distclean:             clean
                rm -f $(TARGETS) *~ ./#*# core *.orig *.rej Makefile
 
-distprep:              $(AUTOCSRCS)
+distprep:              $(AUTOCSRCS) $(AUTOCHDRS)
 
 maintainer-clean:      distclean
-               -rm -f $(AUTOCSRCS)
+               -rm -f $(AUTOCSRCS) $(AUTOCHDRS)
index 43de7a4bedfc00111bc2f0ddd7ba60e6873b77f0..6967e8a9842da8baa1f678e20d82074fce2d765b 100644 (file)
@@ -1,6 +1,11 @@
 # src/Makefile - library main Makefile
 # 
-#  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+#  This file is
+#    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
 #  
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
index 400ba9f466b68a26bc303475be1c1d738cf6392d..df1dede9663c5213bcd4f9c34beee8f1e8278fe2 100644 (file)
@@ -3,7 +3,13 @@
  * - adns user-visible API (single-threaded, without any locking)
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *
+ *  This file is
+ *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
+ *
+ * 
+ *  For the benefit of certain LGPL'd `omnibus' software which
+ *  provides a uniform interface to various things including adns, I
+ *  make the following additional licence.  I do this because the GPL
+ *  would otherwise force either the omnibus software to be GPL'd or
+ *  the adns-using part to be distributed separately.
+ *  
+ *  So: you may also redistribute and/or modify adns.h (but only the
+ *  public header file adns.h and not any other part of adns) under the
+ *  terms of the GNU Library General Public License as published by the
+ *  Free Software Foundation; either version 2 of the License, or (at
+ *  your option) any later version.
  *  
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software Foundation,
+ *  Note that adns itself is GPL'd.  Authors of adns-using applications
+ *  with GPL-incompatible licences, and people who distribute adns with
+ *  applications where the whole distribution is not GPL'd, are still
+ *  likely to be in violation of the GPL.  Anyone who wants to do this
+ *  should contact Ian Jackson.  Please note that to avoid encouraging
+ *  people to infringe the GPL as it applies to the body of adns, Ian
+ *  thinks that if you take advantage of the special exception to
+ *  redistribute just adns.h under the LGPL, you should retain this
+ *  paragraph in its place in the appropriate copyright statements.
+ *
+ *
+ *  You should have received a copy of the GNU General Public License,
+ *  or the GNU Library General Public License, as appropriate, along
+ *  with this program; if not, write to the Free Software Foundation,
  *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  *
+ *
  *  $Id$
  */
 
 
 #include <sys/socket.h>
 #include <netinet/in.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+#ifdef __cplusplus
+extern "C" { /* I really dislike this - iwj. */
+#endif
 
 /* All struct in_addr anywhere in adns are in NETWORK byte order. */
 
@@ -40,21 +79,25 @@ typedef enum {
   adns_if_noerrprint=   0x0002, /* never print output to stderr (_debug overrides) */
   adns_if_noserverwarn= 0x0004, /* do not warn to stderr about duff nameservers etc */
   adns_if_debug=        0x0008, /* enable all output to stderr plus debug msgs */
+  adns_if_logpid=       0x0080, /* include pid in diagnostic output */
   adns_if_noautosys=    0x0010, /* do not make syscalls at every opportunity */
   adns_if_eintr=        0x0020, /* allow _wait and _synchronous to return EINTR */
   adns_if_nosigpipe=    0x0040, /* applic has SIGPIPE set to SIG_IGN, do not protect */
+  adns_if_checkc_entex= 0x0100, /* do consistency checks on entry/exit to adns funcs */
+  adns_if_checkc_freq=  0x0300  /* do consistency checks very frequently (slow!) */
 } adns_initflags;
 
 typedef enum {
-  adns_qf_search=          0x000001, /* use the searchlist */
-  adns_qf_usevc=           0x000002, /* use a virtual circuit (TCP connection) */
-  adns_qf_owner=           0x000004, /* fill in the owner field in the answer */
-  adns_qf_quoteok_query=   0x000010, /* allow quote-requiring chars in query domain */
-  adns_qf_quoteok_cname=   0x000020, /* allow ... in CNAME we go via */
-  adns_qf_quoteok_anshost= 0x000040, /* allow ... in answers expected to be hostnames */
-  adns_qf_cname_loose=     0x000100, /* allow refs to CNAMEs - without, get _s_cname */
-  adns_qf_cname_forbid=    0x000200, /* don't follow CNAMEs, instead give _s_cname */
-  adns__qf_internalmask=   0x0ff000
+  adns_qf_search=          0x00000001, /* use the searchlist */
+  adns_qf_usevc=           0x00000002, /* use a virtual circuit (TCP connection) */
+  adns_qf_owner=           0x00000004, /* fill in the owner field in the answer */
+  adns_qf_quoteok_query=   0x00000010, /* allow special chars in query domain */
+  adns_qf_quoteok_cname=   0x00000000, /* allow ... in CNAME we go via - now default */
+  adns_qf_quoteok_anshost= 0x00000040, /* allow ... in things supposed to be 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_forbid=    0x00000200, /* don't follow CNAMEs, instead give _s_cname */
+  adns__qf_internalmask=   0x0ff00000
 } adns_queryflags;
 
 typedef enum {
@@ -91,18 +134,65 @@ typedef enum {
   
 } adns_rrtype;
 
-/* In queries without qtf_quoteok_*, all domains must have standard
- * legal syntax.  In queries _with_ qtf_anyquote, domains in the query
- * or response may contain any characters, quoted according to
- * RFC1035 5.1.  On input to adns, the char* is a pointer to the
- * interior of a " delimited string, except that " may appear in it,
- * and on output, the char* is a pointer to a string which would be
- * legal either inside or outside " delimiters, and any characters
- * not usually legal in domain names will be quoted as \X
- * (if the character is 33-126 except \ and ") or \DDD.
- *
- * Do not ask for _raw records containing mailboxes without
- * specifying _qf_anyquote.
+/*
+ * In queries without qf_quoteok_*, all domains must have standard
+ * legal syntax, or you get adns_s_querydomainvalid (if the query
+ * domain contains bad characters) or adns_s_answerdomaininvalid (if
+ * the answer contains bad characters).
+ * 
+ * In queries _with_ qf_quoteok_*, domains in the query or response
+ * may contain any characters, quoted according to RFC1035 5.1.  On
+ * input to adns, the char* is a pointer to the interior of a "
+ * delimited string, except that " may appear in it unquoted.  On
+ * output, the char* is a pointer to a string which would be legal
+ * either inside or outside " delimiters; any character which isn't
+ * legal in a hostname (ie alphanumeric or hyphen) or one of _ / +
+ * (the three other punctuation characters commonly abused in domain
+ * names) will be quoted, as \X if it is a printing ASCII character or
+ * \DDD otherwise.
+ *
+ * (The characters which will be unquoted are the printing 7-bit ASCII
+ * characters except the punctuation characters " ( ) @ ; $ \
+
+ * I.e. unquoted characters are alphanumerics, and the following
+ * punctuation characters:  ! # % ^ & * - _ = + [ ] { } 
+ *
+ * If the query goes via a CNAME then the canonical name (ie, the
+ * thing that the CNAME record refers to) is usually allowed to
+ * contain any characters, which will be quoted as above.  With
+ * adns_qf_quotefail_cname you get adns_s_answerdomaininvalid when
+ * this happens.  (This is a change from version 0.4 and earlier, in
+ * which failing the query was the default, and you had to say
+ * adns_qf_quoteok_cname to avoid this; that flag is now deprecated.)
+ *
+ * In version 0.4 and earlier, asking for _raw records containing
+ * mailboxes without specifying _qf_quoteok_anshost was silly.  This
+ * is no longer the case.  In this version only parts of responses
+ * that are actually supposed to be hostnames will be refused by
+ * default if quote-requiring characters are found.
+ */
+
+/*
+ * If you ask for an RR which contains domains which are actually
+ * encoded mailboxes, and don't ask for the _raw version, then adns
+ * returns the mailbox formatted suitably for an RFC822 recipient
+ * header field.  The particular format used is that if the mailbox
+ * requires quoting according to the rules in RFC822 then the
+ * local-part is quoted in double quotes, which end at the next
+ * unescaped double quote.  (\ is the escape char, and is doubled, and
+ * is used to escape only \ and ".)  Otherwise the local-part is
+ * presented as-is.  In any case this is followed by an @ and the
+ * domain.  The domain will not contain any characters not legal in
+ * hostnames.  adns will protect the application from local parts
+ * containing control characters - these appear to be legal according
+ * to RFC822 but are clearly a bad idea.
+ *
+ * If you ask for the domain with _raw then _no_ checking is done
+ * (even on the host part, regardless of adns_qf_quoteok_anshost), and
+ * you just get the domain name in master file format.
+ *
+ * If no mailbox is supplied the returned string will be `.' in either
+ * caswe.
  */
 
 typedef enum {
@@ -111,6 +201,9 @@ typedef enum {
   /* locally induced errors */
   adns_s_nomemory,
   adns_s_unknownrrtype,
+  adns_s_systemfail,
+
+  adns_s_max_localfail= 29,
   
   /* remotely induced errors, detected locally */
   adns_s_timeout,
@@ -118,6 +211,8 @@ typedef enum {
   adns_s_norecurse,
   adns_s_invalidresponse,
   adns_s_unknownformat,
+
+  adns_s_max_remotefail= 59,
   
   /* remotely induced errors, reported by remote server to us */
   adns_s_rcodeservfail,
@@ -125,7 +220,7 @@ typedef enum {
   adns_s_rcodenotimplemented,
   adns_s_rcoderefused,
   adns_s_rcodeunknown,
-  
+
   adns_s_max_tempfail= 99,
 
   /* remote configuration errors */
@@ -147,6 +242,8 @@ typedef enum {
   /* permanent errors */
   adns_s_nxdomain,
   adns_s_nodata,
+
+  adns_s_max_permfail= 499
   
 } adns_status;
 
@@ -196,10 +293,10 @@ typedef struct {
 typedef struct {
   adns_status status;
   char *cname; /* always NULL if query was for CNAME records */
-  char *owner; /* only set if requested in query flags */
+  char *owner; /* only set if requested in query flags, and may be 0 on error anyway */
   adns_rrtype type; /* guaranteed to be same as in query */
   time_t expires; /* expiry time, defined only if _s_ok, nxdomain or nodata. NOT TTL! */
-  int nrrs, rrsz;
+  int nrrs, rrsz; /* nrrs is 0 if an error occurs */
   union {
     void *untyped;
     unsigned char *bytes;
@@ -228,15 +325,25 @@ typedef struct {
  *  If the call is successful, *query_io, *answer_r, and *context_r
  *  will all be set.
  * Errors:
- *  Return values are 0 or an errno value;
- *  Seriously fatal system errors (eg, failure to create sockets,
- *  malloc failure, etc.) return errno values;
- *  Other errors (nameserver failure, timed out connections, &c)
- *  are returned in the status field of the answer.  If status is
- *  nonzero then nrrs will be 0, otherwise it will be >0.
- *  type will always be the type requested;
- *  If no (appropriate) requests are done adns_check returns EWOULDBLOCK;
- *  If no (appropriate) requests are outstanding adns_query and adns_wait return ESRCH;
+ *  Return values are 0 or an errno value.
+ *
+ *  For _init, _init_strcfg, _submit and _synchronous, system errors
+ *  (eg, failure to create sockets, malloc failure, etc.) return errno
+ *  values.
+ * 
+ *  For _wait and _check failures are reported in the answer
+ *  structure, and only 0, ESRCH or (for _check) EAGAIN is
+ *  returned: if no (appropriate) requests are done adns_check returns
+ *  EAGAIN; if no (appropriate) requests are outstanding both
+ *  adns_query and adns_wait return ESRCH.
+ *
+ *  Additionally, _wait can return EINTR if you set adns_if_eintr.
+ *
+ *  All other errors (nameserver failure, timed out connections, &c)
+ *  are returned in the status field of the answer.  After a
+ *  successful _wait or _check, if status is nonzero then nrrs will be
+ *  0, otherwise it will be >0.  type will always be the type
+ *  requested.
  */
 
 int adns_init(adns_state *newstate_r, adns_initflags flags,
@@ -245,6 +352,106 @@ int adns_init(adns_state *newstate_r, adns_initflags flags,
 int adns_init_strcfg(adns_state *newstate_r, adns_initflags flags,
                     FILE *diagfile /*0=>discard*/, const char *configtext);
 
+/* Configuration:
+ *  adns_init reads /etc/resolv.conf, which is expected to be (broadly
+ *  speaking) in the format expected by libresolv, and then
+ *  /etc/resolv-adns.conf if it exists.  adns_init_strcfg is instead
+ *  passed a string which is interpreted as if it were the contents of
+ *  resolv.conf or resolv-adns.conf.  In general, configuration which
+ *  is set later overrides any that is set earlier.
+ *
+ * Standard directives understood in resolv[-adns].conf:
+ * 
+ *  nameserver <address>
+ *   Must be followed by the IP address of a nameserver.  Several
+ *   nameservers may be specified, and they will be tried in the order
+ *   found.  There is a compiled in limit, currently 5, on the number
+ *   of nameservers.  (libresolv supports only 3 nameservers.)
+ *
+ *  search <domain> ...
+ *   Specifies the search list for queries which specify
+ *   adns_qf_search.  This is a list of domains to append to the query
+ *   domain.  The query domain will be tried as-is either before all
+ *   of these or after them, depending on the ndots option setting
+ *   (see below).
+ *
+ *  domain <domain>
+ *   This is present only for backward compatibility with obsolete
+ *   versions of libresolv.  It should not be used, and is interpreted
+ *   by adns as if it were `search' - note that this is subtly
+ *   different to libresolv's interpretation of this directive.
+ *
+ *  sortlist <addr>/<mask> ...
+ *   Should be followed by a sequence of IP-address and netmask pairs,
+ *   separated by spaces.  They may be specified as
+ *   eg. 172.30.206.0/24 or 172.30.206.0/255.255.255.0.  Currently up
+ *   to 15 pairs may be specified (but note that libresolv only
+ *   supports up to 10).
+ *
+ *  options
+ *   Should followed by one or more options, separated by spaces.
+ *   Each option consists of an option name, followed by optionally
+ *   a colon and a value.  Options are listed below.
+ *
+ * Non-standard directives understood in resolv[-adns].conf:
+ *
+ *  clearnameservers
+ *   Clears the list of nameservers, so that further nameserver lines
+ *   start again from the beginning.
+ *
+ *  include <filename>
+ *   The specified file will be read.
+ *
+ * Additionally, adns will ignore lines in resolv[-adns].conf which
+ * start with a #.
+ *
+ * Standard options understood:
+ *
+ *  debug
+ *   Enables debugging output from the resolver, which will be written
+ *   to stderr.
+ *
+ *  ndots:<count>
+ *   Affects whether queries with adns_qf_search will be tried first
+ *   without adding domains from the searchlist, or whether the bare
+ *   query domain will be tried last.  Queries which contain at least
+ *   <count> dots will be tried bare first.  The default is 1.
+ *
+ * Non-standard options understood:
+ *
+ *  adns_checkc:none
+ *  adns_checkc:entex
+ *  adns_checkc:freq
+ *   Changes the consistency checking frequency; this overrides the
+ *   setting of adns_if_check_entex, adns_if_check_freq, or neither,
+ *   in the flags passed to adns_init.
+ * 
+ * There are a number of environment variables which can modify the
+ * behaviour of adns.  They take effect only if adns_init is used, and
+ * the caller of adns_init can disable them using adns_if_noenv.  In
+ * each case there is both a FOO and an ADNS_FOO; the latter is
+ * interpreted later so that it can override the former.  Unless
+ * otherwise stated, environment variables are interpreted after
+ * resolv[-adns].conf are read, in the order they are listed here.
+ *
+ *  RES_CONF, ADNS_RES_CONF
+ *   A filename, whose contets are in the format of resolv.conf.
+ *
+ *  RES_CONF_TEXT, ADNS_RES_CONF_TEXT
+ *   A string in the format of resolv.conf.
+ *
+ *  RES_OPTIONS, ADNS_RES_OPTIONS
+ *   These are parsed as if they appeared in the `options' line of a
+ *   resolv.conf.  In addition to being parsed at this point in the
+ *   sequence, they are also parsed at the very beginning before
+ *   resolv.conf or any other environment variables are read, so that
+ *   any debug option can affect the processing of the configuration.
+ *
+ *  LOCALDOMAIN, ADNS_LOCALDOMAIN
+ *   These are interpreted as if their contents appeared in a `search'
+ *   line in resolv.conf.
+ */
+
 int adns_synchronous(adns_state ads,
                     const char *owner,
                     adns_rrtype type,
@@ -252,8 +459,8 @@ int adns_synchronous(adns_state ads,
                     adns_answer **answer_r);
 
 /* NB: if you set adns_if_noautosys then _submit and _check do not
- * make any system calls; you must use adns_callback (possibly after
- * adns_interest) to actually get things to happen.
+ * make any system calls; you must use some of the asynch-io event
+ * processing functions to actually get things to happen.
  */
 
 int adns_submit(adns_state ads,
@@ -263,6 +470,8 @@ int adns_submit(adns_state ads,
                void *context,
                adns_query *query_r);
 
+/* The owner should be quoted in master file format. */
+
 int adns_check(adns_state ads,
               adns_query *query_io,
               adns_answer **answer_r,
@@ -273,79 +482,308 @@ int adns_wait(adns_state ads,
              adns_answer **answer_r,
              void **context_r);
 
+/* same as adns_wait but uses poll(2) internally */
+int adns_wait_poll(adns_state ads,
+                  adns_query *query_io,
+                  adns_answer **answer_r,
+                  void **context_r);
+
 void adns_cancel(adns_query query);
 
-void adns_finish(adns_state);
+/* The adns_query you get back from _submit is valid (ie, can be
+ * legitimately passed into adns functions) until it is returned by
+ * adns_check or adns_wait, or passed to adns_cancel.  After that it
+ * must not be used.  You can rely on it not being reused until the
+ * first adns_submit or _transact call using the same adns_state after
+ * it became invalid, so you may compare it for equality with other
+ * query handles until you next call _query or _transact.
+ *
+ * _submit and _synchronous return ENOSYS if they don't understand the
+ * query type.
+ */
+
+int adns_submit_reverse(adns_state ads,
+                       const struct sockaddr *addr,
+                       adns_rrtype type,
+                       adns_queryflags flags,
+                       void *context,
+                       adns_query *query_r);
+/* type must be _r_ptr or _r_ptr_raw.  _qf_search is ignored.
+ * addr->sa_family must be AF_INET or you get ENOSYS.
+ */
+
+int adns_submit_reverse_any(adns_state ads,
+                           const struct sockaddr *addr,
+                           const char *rzone,
+                           adns_rrtype type,
+                           adns_queryflags flags,
+                           void *context,
+                           adns_query *query_r);
+/* For RBL-style reverse `zone's; look up
+ *   <reversed-address>.<zone>
+ * Any type is allowed.  _qf_search is ignored.
+ * addr->sa_family must be AF_INET or you get ENOSYS.
+ */
+
+void adns_finish(adns_state ads);
 /* You may call this even if you have queries outstanding;
  * they will be cancelled.
  */
 
-int adns_callback(adns_state, int maxfd, const fd_set *readfds, const fd_set *writefds,
-                 const fd_set *exceptfds);
-/* Gives adns flow-of-control for a bit.  This will never block.
- * If maxfd == -1 then adns will check (make nonblocking system calls on)
- * all of its own filedescriptors; otherwise it will only use those
- * < maxfd and specified in the fd_set's, as if select had returned them.
- * Other fd's may be in the fd_sets, and will be ignored.
- * _callback returns how many adns fd's were in the various sets, so
- * you can tell if your select handling code has missed something and is going awol.
- *
- * May also return -1 if a critical syscall failed, setting errno.
+
+void adns_forallqueries_begin(adns_state ads);
+adns_query adns_forallqueries_next(adns_state ads, void **context_r);
+/* Iterator functions, which you can use to loop over the outstanding
+ * (submitted but not yet successfuly checked/waited) queries.
+ *
+ * You can only have one iteration going at once.  You may call _begin
+ * at any time; after that, an iteration will be in progress.  You may
+ * only call _next when an iteration is in progress - anything else
+ * may coredump.  The iteration remains in progress until _next
+ * returns 0, indicating that all the queries have been walked over,
+ * or ANY other adns function is called with the same adns_state (or a
+ * query in the same adns_state).  There is no need to explicitly
+ * finish an iteration.
+ *
+ * context_r may be 0.  *context_r may not be set when _next returns 0.
  */
 
-void adns_interest(adns_state, int *maxfd_io, fd_set *readfds_io,
-                  fd_set *writefds_io, fd_set *exceptfds_io,
-                  struct timeval **tv_mod, struct timeval *tv_buf);
-/* Find out file descriptors adns is interested in, and when it
- * would like the opportunity to time something out.  If you do not plan to
- * block then tv_mod may be 0.  Otherwise, tv_mod may point to 0 meaning
- * you have no timeout of your own, in which case tv_buf must be non-null and
- * _interest may fill it in and set *tv_mod=tv_buf.
- * readfds, writefds, exceptfds and maxfd may not be 0.
+void adns_checkconsistency(adns_state ads, adns_query qu);
+/* Checks the consistency of adns's internal data structures.
+ * If any error is found, the program will abort().
+ * You may pass 0 for qu; if you pass non-null then additional checks
+ * are done to make sure that qu is a valid query.
  */
 
-/* Example expected/legal calling sequences:
+/*
+ * Example expected/legal calling sequence for submit/check/wait:
  *  adns_init
  *  adns_submit 1
  *  adns_submit 2
  *  adns_submit 3
  *  adns_wait 1
- *  adns_check 3 -> EWOULDBLOCK
+ *  adns_check 3 -> EAGAIN
  *  adns_wait 2
  *  adns_wait 3
  *  ....
  *  adns_finish
+ */
+
+/*
+ * Entrypoints for generic asynch io:
+ * (these entrypoints are not very useful except in combination with *
+ * some of the other I/O model calls which can tell you which fds to
+ * be interested in):
+ *
+ * Note that any adns call may cause adns to open and close fds, so
+ * you must call beforeselect or beforepoll again just before
+ * blocking, or you may not have an up-to-date list of it's fds.
+ */
+
+int adns_processany(adns_state ads);
+/* Gives adns flow-of-control for a bit.  This will never block, and
+ * can be used with any threading/asynch-io model.  If some error
+ * occurred which might cause an event loop to spin then the errno
+ * value is returned.
+ */
+
+int adns_processreadable(adns_state ads, int fd, const struct timeval *now);
+int adns_processwriteable(adns_state ads, int fd, const struct timeval *now);
+int adns_processexceptional(adns_state ads, int fd, const struct timeval *now);
+/* Gives adns flow-of-control so that it can process incoming data
+ * from, or send outgoing data via, fd.  Very like _processany.  If it
+ * returns zero then fd will no longer be readable or writeable
+ * (unless of course more data has arrived since).  adns will _only_
+ * use that fd and only in the manner specified, regardless of whether
+ * adns_if_noautosys was specified.
+ *
+ * adns_processexceptional should be called when select(2) reports an
+ * exceptional condition, or poll(2) reports POLLPRI.
+ *
+ * It is fine to call _processreabable or _processwriteable when the
+ * fd is not ready, or with an fd that doesn't belong to adns; it will
+ * then just return 0.
+ *
+ * If some error occurred which might prevent an event loop to spin
+ * then the errno value is returned.
+ */
+
+void adns_processtimeouts(adns_state ads, const struct timeval *now);
+/* Gives adns flow-of-control so that it can process any timeouts
+ * which might have happened.  Very like _processreadable/writeable.
+ *
+ * now may be 0; if it isn't, *now must be the current time, recently
+ * obtained from gettimeofday.
+ */
+
+void adns_firsttimeout(adns_state ads,
+                      struct timeval **tv_mod, struct timeval *tv_buf,
+                      struct timeval now);
+/* Asks adns when it would first like the opportunity to time
+ * something out.  now must be the current time, from gettimeofday.
+ * 
+ * If tv_mod points to 0 then tv_buf must be non-null, and
+ * _firsttimeout will fill in *tv_buf with the time until the first
+ * timeout, and make *tv_mod point to tv_buf.  If adns doesn't have
+ * anything that might need timing out it will leave *tv_mod as 0.
+ *
+ * If *tv_mod is not 0 then tv_buf is not used.  adns will update
+ * *tv_mod if it has any earlier timeout, and leave it alone if it
+ * doesn't.
+ *
+ * This call will not actually do any I/O, or change the fds that adns
+ * is using.  It always succeeds and never blocks.
+ */
+
+void adns_globalsystemfailure(adns_state ads);
+/* If serious problem(s) happen which globally affect your ability to
+ * interact properly with adns, or adns's ability to function
+ * properly, you or adns can call this function.
+ *
+ * All currently outstanding queries will be made to fail with
+ * adns_s_systemfail, and adns will close any stream sockets it has
+ * open.
+ *
+ * This is used by adns, for example, if gettimeofday() fails.
+ * Without this the program's event loop might start to spin !
+ *
+ * This call will never block.
+ */
+
+/*
+ * Entrypoints for select-loop based asynch io:
+ */
+
+void adns_beforeselect(adns_state ads, int *maxfd, fd_set *readfds,
+                      fd_set *writefds, fd_set *exceptfds,
+                      struct timeval **tv_mod, struct timeval *tv_buf,
+                      const struct timeval *now);
+/* Find out file descriptors adns is interested in, and when it would
+ * like the opportunity to time something out.  If you do not plan to
+ * block then tv_mod may be 0.  Otherwise, tv_mod and tv_buf are as
+ * for adns_firsttimeout.  readfds, writefds, exceptfds and maxfd_io may
+ * not be 0.
+ *
+ * If now is not 0 then this will never actually do any I/O, or change
+ * the fds that adns is using or the timeouts it wants.  In any case
+ * it won't block, and it will set the timeout to zero if a query
+ * finishes in _beforeselect.
+ */
+
+void adns_afterselect(adns_state ads, int maxfd, const fd_set *readfds,
+                     const fd_set *writefds, const fd_set *exceptfds,
+                     const struct timeval *now);
+/* Gives adns flow-of-control for a bit; intended for use after
+ * select.  This is just a fancy way of calling adns_processreadable/
+ * writeable/timeouts as appropriate, as if select had returned the
+ * data being passed.  Always succeeds.
+ */
+
+/*
+ * Example calling sequence:
  *
  *  adns_init _noautosys
  *  loop {
- *   adns_interest
+ *   adns_beforeselect
  *   select
- *   adns_callback
+ *   adns_afterselect
  *   ...
  *   adns_submit / adns_check
  *   ...
  *  }
  */
 
+/*
+ * Entrypoints for poll-loop based asynch io:
+ */
+
+struct pollfd;
+/* In case your system doesn't have it or you forgot to include
+ * <sys/poll.h>, to stop the following declarations from causing
+ * problems.  If your system doesn't have poll then the following
+ * entrypoints will not be defined in libadns.  Sorry !
+ */
+
+int adns_beforepoll(adns_state ads, struct pollfd *fds, int *nfds_io, int *timeout_io,
+                   const struct timeval *now);
+/* Finds out which fd's adns is interested in, and when it would like
+ * to be able to time things out.  This is in a form suitable for use
+ * with poll(2).
+ * 
+ * On entry, usually fds should point to at least *nfds_io structs.
+ * adns will fill up to that many structs will information for poll,
+ * and record in *nfds_io how many structs it filled.  If it wants to
+ * listen for more structs then *nfds_io will be set to the number
+ * required and _beforepoll will return ERANGE.
+ *
+ * You may call _beforepoll with fds==0 and *nfds_io 0, in which case
+ * adns will fill in the number of fds that it might be interested in
+ * in *nfds_io, and always return either 0 (if it is not interested in
+ * any fds) or ERANGE (if it is).
+ *
+ * NOTE that (unless now is 0) adns may acquire additional fds
+ * from one call to the next, so you must put adns_beforepoll in a
+ * loop, rather than assuming that the second call (with the buffer
+ * size requested by the first) will not return ERANGE.
+ *
+ * adns only ever sets POLLIN, POLLOUT and POLLPRI in its pollfd
+ * structs, and only ever looks at those bits.  POLLPRI is required to
+ * detect TCP Urgent Data (which should not be used by a DNS server)
+ * so that adns can know that the TCP stream is now useless.
+ *
+ * In any case, *timeout_io should be a timeout value as for poll(2),
+ * which adns will modify downwards as required.  If the caller does
+ * not plan to block then *timeout_io should be 0 on entry, or
+ * alternatively, timeout_io may be 0.  (Alternatively, the caller may
+ * use _beforeselect with timeout_io==0 to find out about file
+ * descriptors, and use _firsttimeout is used to find out when adns
+ * might want to time something out.)
+ *
+ * adns_beforepoll will return 0 on success, and will not fail for any
+ * reason other than the fds buffer being too small (ERANGE).
+ *
+ * This call will never actually do any I/O.  If you supply the
+ * current time it will not change the fds that adns is using or the
+ * timeouts it wants.
+ *
+ * In any case this call won't block.
+ */
+
+#define ADNS_POLLFDS_RECOMMENDED 2
+/* If you allocate an fds buf with at least RECOMMENDED entries then
+ * you are unlikely to need to enlarge it.  You are recommended to do
+ * so if it's convenient.  However, you must be prepared for adns to
+ * require more space than this.
+ */
+
+void adns_afterpoll(adns_state ads, const struct pollfd *fds, int nfds,
+                   const struct timeval *now);
+/* Gives adns flow-of-control for a bit; intended for use after
+ * poll(2).  fds and nfds should be the results from poll().  pollfd
+ * structs mentioning fds not belonging to adns will be ignored.
+ */
+
+
 adns_status adns_rr_info(adns_rrtype type,
                         const char **rrtname_r, const char **fmtname_r,
                         int *len_r,
                         const void *datap, char **data_r);
-/* Gets information in human-readable (but non-i18n) form
- * for eg debugging purposes.  type must be specified,
- * and the official name of the corresponding RR type will
- * be returned in *rrtname_r, and information about the processing
- * style in *fmtname_r.  The length of the table entry in an answer
- * for that type will be returned in in *len_r.
- * Any or all of rrtname_r, fmtname_r and len_r may be 0.
- * If fmtname_r is non-null then *fmtname_r may be
- * null on return, indicating that no special processing is
- * involved.
- *
- * data_r be must be non-null iff datap is.  In this case
- * *data_r will be set to point to a human-readable text
- * string representing the RR data.  The text will have
- * been obtained from malloc() and must be freed by the caller.
+/*
+ * Get information about a query type, or convert reply data to a
+ * textual form.  type must be specified, and the official name of the
+ * corresponding RR type will be returned in *rrtname_r, and
+ * information about the processing style in *fmtname_r.  The length
+ * of the table entry in an answer for that type will be returned in
+ * in *len_r.  Any or all of rrtname_r, fmtname_r and len_r may be 0.
+ * If fmtname_r is non-null then *fmtname_r may be null on return,
+ * indicating that no special processing is involved.
+ *
+ * data_r be must be non-null iff datap is.  In this case *data_r will
+ * be set to point to a string pointing to a representation of the RR
+ * data in master file format.  (The owner name, timeout, class and
+ * type will not be present - only the data part of the RR.)  The
+ * memory will have been obtained from malloc() and must be freed by
+ * the caller.
  *
  * Usually this routine will succeed.  Possible errors include:
  *  adns_s_nomemory
@@ -353,8 +791,51 @@ adns_status adns_rr_info(adns_rrtype type,
  *  adns_s_invaliddata (*datap contained garbage)
  * If an error occurs then no memory has been allocated,
  * and *rrtname_r, *fmtname_r, *len_r and *data_r are undefined.
+ *
+ * There are some adns-invented data formats which are not official
+ * master file formats.  These include:
+ *
+ * Mailboxes if __qtf_mail822: these are just included as-is.
+ *
+ * Addresses (adns_rr_addr): these may be of pretty much any type.
+ * The representation is in two parts: first, a word for the address
+ * family (ie, in AF_XXX, the XXX), and then one or more items for the
+ * address itself, depending on the format.  For an IPv4 address the
+ * syntax is INET followed by the dotted quad (from inet_ntoa).
+ * Currently only IPv4 is supported.
+ *
+ * Text strings (as in adns_rr_txt) appear inside double quotes, and
+ * use \" and \\ to represent " and \, and \xHH to represent
+ * characters not in the range 32-126.
+ *
+ * Hostname with addresses (adns_rr_hostaddr): this consists of the
+ * hostname, as usual, followed by the adns_status value, as an
+ * abbreviation, and then a descriptive string (encoded as if it were
+ * a piece of text), for the address lookup, followed by zero or more
+ * addresses enclosed in ( and ).  If the result was a temporary
+ * failure, then a single ?  appears instead of the ( ).  If the
+ * result was a permanent failure then an empty pair of parentheses
+ * appears (which a space in between).  For example, one of the NS
+ * records for greenend.org.uk comes out like
+ *  ns.chiark.greenend.org.uk ok "OK" ( INET 195.224.76.132 )
+ * an MX referring to a nonexistent host might come out like:
+ *  50 sun2.nsfnet-relay.ac.uk nxdomain "No such domain" ( )
+ * and if nameserver information is not available you might get:
+ *  dns2.spong.dyn.ml.org timeout "DNS query timed out" ?
  */
 
 const char *adns_strerror(adns_status st);
+const char *adns_errabbrev(adns_status st);
+const char *adns_errtypeabbrev(adns_status st);
+/* Like strerror but for adns_status values.  adns_errabbrev returns
+ * the abbreviation of the error - eg, for adns_s_timeout it returns
+ * "timeout".  adns_errtypeabbrev returns the abbreviation of the
+ * error class: ie, for values up to adns_s_max_XXX it will return the
+ * string XXX.  You MUST NOT call these functions with status values
+ * not returned by the same adns library.
+ */
 
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
 #endif
index 6d3979a5b7c5255bbf600c2e910fdc57c3428c31..14b70bdec52f47b53b8d0187e98f60eabda520f4 100644 (file)
@@ -1,6 +1,11 @@
 # src/adns.make - library definitions, including list of object files
 # 
-#  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+#  This file is
+#    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+#  It is part of adns, which is
+#    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+#    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
 #  
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
@@ -16,4 +21,5 @@
 #  along with this program; if not, write to the Free Software Foundation,
 #  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
 
-LIBOBJS=       types.o event.o query.o reply.o general.o setup.o transmit.o parse.o
+LIBOBJS=       types.o event.o query.o reply.o general.o setup.o transmit.o \
+               parse.o poll.o check.o
diff --git a/src/check.c b/src/check.c
new file mode 100644 (file)
index 0000000..7cca534
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+ * check.c
+ * - consistency checks
+ */
+/*
+ *  This file is
+ *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ */
+
+#include "internal.h"
+
+void adns_checkconsistency(adns_state ads, adns_query qu) {
+  adns__consistency(ads,qu,cc_user);
+}
+
+#define DLIST_CHECK(list, nodevar, part, body)                                 \
+  if ((list).head) {                                                           \
+    assert(! (list).head->part back);                                          \
+    for ((nodevar)= (list).head; (nodevar); (nodevar)= (nodevar)->part next) { \
+      assert((nodevar)->part next                                              \
+            ? (nodevar) == (nodevar)->part next->part back                     \
+            : (nodevar) == (list).tail);                                       \
+      body                                                                     \
+    }                                                                          \
+  }
+
+#define DLIST_ASSERTON(node, nodevar, list, part)                              \
+  do {                                                                         \
+    for ((nodevar)= (list).head;                                               \
+        (nodevar) != (node);                                                   \
+        (nodevar)= (nodevar)->part next) {                                     \
+      assert((nodevar));                                                       \
+    }                                                                          \
+  } while(0)
+
+static void checkc_query_alloc(adns_state ads, adns_query qu) {
+  allocnode *an;
+
+  DLIST_CHECK(qu->allocations, an, , {
+  });
+}
+
+static void checkc_query(adns_state ads, adns_query qu) {
+  adns_query child;
+
+  assert(qu->udpnextserver < ads->nservers);
+  assert(!(qu->udpsent & (~0UL << ads->nservers)));
+  assert(qu->search_pos <= ads->nsearchlist);
+  if (qu->parent) DLIST_ASSERTON(qu, child, qu->parent->children, siblings.);
+}
+
+static void checkc_notcpbuf(adns_state ads) {
+  assert(!ads->tcpsend.used);
+  assert(!ads->tcprecv.used);
+  assert(!ads->tcprecv_skip);
+}
+
+static void checkc_global(adns_state ads) {
+  int i;
+  
+  assert(ads->udpsocket >= 0);
+
+  for (i=0; i<ads->nsortlist; i++)
+    assert(!(ads->sortlist[i].base.s_addr & ~ads->sortlist[i].mask.s_addr));
+
+  assert(ads->tcpserver >= 0 && ads->tcpserver < ads->nservers);
+  
+  switch (ads->tcpstate) {
+  case server_connecting:
+    assert(ads->tcpsocket >= 0);
+    checkc_notcpbuf(ads);
+    break;
+  case server_disconnected:
+  case server_broken:
+    assert(ads->tcpsocket == -1);
+    checkc_notcpbuf(ads);
+    break;
+  case server_ok:
+    assert(ads->tcpsocket >= 0);
+    assert(ads->tcprecv_skip <= ads->tcprecv.used);
+    break;
+  default:
+    assert(!"ads->tcpstate value");
+  }
+
+  assert(ads->searchlist || !ads->nsearchlist);
+}
+
+static void checkc_queue_udpw(adns_state ads) {
+  adns_query qu;
+  
+  DLIST_CHECK(ads->udpw, qu, , {
+    assert(qu->state==query_tosend);
+    assert(qu->retries <= UDPMAXRETRIES);
+    assert(qu->udpsent);
+    assert(!qu->children.head && !qu->children.tail);
+    checkc_query(ads,qu);
+    checkc_query_alloc(ads,qu);
+  });
+}
+
+static void checkc_queue_tcpw(adns_state ads) {
+  adns_query qu;
+  
+  DLIST_CHECK(ads->tcpw, qu, , {
+    assert(qu->state==query_tcpw);
+    assert(!qu->children.head && !qu->children.tail);
+    assert(qu->retries <= ads->nservers+1);
+    checkc_query(ads,qu);
+    checkc_query_alloc(ads,qu);
+  });
+}
+
+static void checkc_queue_childw(adns_state ads) {
+  adns_query parent, child;
+
+  DLIST_CHECK(ads->childw, parent, , {
+    assert(parent->state == query_childw);
+    assert(parent->children.head);
+    DLIST_CHECK(parent->children, child, siblings., {
+      assert(child->parent == parent);
+      assert(child->state != query_done);
+    });
+    checkc_query(ads,parent);
+    checkc_query_alloc(ads,parent);
+  });
+}
+
+static void checkc_queue_output(adns_state ads) {
+  adns_query qu;
+  
+  DLIST_CHECK(ads->output, qu, , {
+    assert(qu->state == query_done);
+    assert(!qu->children.head && !qu->children.tail);
+    assert(!qu->parent);
+    assert(!qu->allocations.head && !qu->allocations.tail);
+    checkc_query(ads,qu);
+  });
+}
+
+void adns__consistency(adns_state ads, adns_query qu, consistency_checks cc) {
+  adns_query search;
+  
+  switch (cc) {
+  case cc_user:
+    break;
+  case cc_entex:
+    if (!(ads->iflags & adns_if_checkc_entex)) return;
+    break;
+  case cc_freq:
+    if ((ads->iflags & adns_if_checkc_freq) != adns_if_checkc_freq) return;
+    break;
+  default:
+    abort();
+  }
+
+  checkc_global(ads);
+  checkc_queue_udpw(ads);
+  checkc_queue_tcpw(ads);
+  checkc_queue_childw(ads);
+  checkc_queue_output(ads);
+
+  if (qu) {
+    switch (qu->state) {
+    case query_tosend:
+      DLIST_ASSERTON(qu, search, ads->udpw, );
+      break;
+    case query_tcpw:
+      DLIST_ASSERTON(qu, search, ads->tcpw, );
+      break;
+    case query_childw:
+      DLIST_ASSERTON(qu, search, ads->childw, );
+      break;
+    case query_done:
+      DLIST_ASSERTON(qu, search, ads->output, );
+      break;
+    default:
+      assert(!"specific query state");
+    }
+  }
+}
index 74267bfb20a024071958cc3ae4a8121499b428cb..a22abe8a7206aeaea1e39079a5f3d1185f17d482 100644 (file)
@@ -1,5 +1,8 @@
 /* src/config.h.in.  Generated automatically from configure.in by autoheader.  */
 
+/* Define if inline functions a la GCC are available.  */
+#undef HAVE_INLINE
+
 /* Define if function attributes a la GCC 2.5 and higher are available.  */
 #undef HAVE_GNUC25_ATTRIB
 
 /* Define if printf-format argument lists a la GCC are available.  */
 #undef HAVE_GNUC25_PRINTFFORMAT
 
+/* Define if we want to include rpc/types.h.  Crap BSDs put INADDR_LOOPBACK there. */
+#undef HAVEUSE_RPCTYPES_H
+
+/* Define if you have the poll function.  */
+#undef HAVE_POLL
+
+/* Define if you have the <sys/select.h> header file.  */
+#undef HAVE_SYS_SELECT_H
+
 /* Define if you have the nsl library (-lnsl).  */
 #undef HAVE_LIBNSL
 
 
 /* Use the definitions: */
 
+#ifndef HAVE_INLINE
+#define inline
+#endif
+
+#ifdef HAVE_POLL
+#include <sys/poll.h>
+#else
+/* kludge it up */
+struct pollfd { int fd; short events; short revents; };
+#define POLLIN  1
+#define POLLPRI 2
+#define POLLOUT 4
+#endif
+
 /* GNU C attributes. */
 #ifndef FUNCATTR
 #ifdef HAVE_GNUC25_ATTRIB
 #ifndef CONSTANT
 #define CONSTANT FUNCATTR((ATTRCONST))
 #endif
+
+#ifdef HAVEUSE_RPCTYPES_H
+#include <rpc/types.h>
+#endif
+
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
diff --git a/src/dlist.h b/src/dlist.h
new file mode 100644 (file)
index 0000000..44bf556
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * dlist.h
+ * - macros for handling doubly linked lists
+ */
+/*
+ *  This file is
+ *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999 Tony Finch <dot@dotat.at>
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ */
+
+#ifndef ADNS_DLIST_H_INCLUDED
+#define ADNS_DLIST_H_INCLUDED
+
+#define LIST_INIT(list) ((list).head= (list).tail= 0)
+#define LINK_INIT(link) ((link).next= (link).back= 0)
+
+#define LIST_UNLINK_PART(list,node,part) \
+  do { \
+    if ((node)->part back) (node)->part back->part next= (node)->part next; \
+      else                                  (list).head= (node)->part next; \
+    if ((node)->part next) (node)->part next->part back= (node)->part back; \
+      else                                  (list).tail= (node)->part back; \
+  } while(0)
+
+#define LIST_LINK_TAIL_PART(list,node,part) \
+  do { \
+    (node)->part next= 0; \
+    (node)->part back= (list).tail; \
+    if ((list).tail) (list).tail->part next= (node); else (list).head= (node); \
+    (list).tail= (node); \
+  } while(0)
+
+#define LIST_UNLINK(list,node) LIST_UNLINK_PART(list,node,)
+#define LIST_LINK_TAIL(list,node) LIST_LINK_TAIL_PART(list,node,)
+
+#endif
index 154a9b8f5c2dd3c62849b1e06ce8a16b4ecc7936..f1d22dc7d9a95b6853583e008d4184c7099c3c7d 100644 (file)
@@ -5,7 +5,12 @@
  * - user-visible check/wait and event-loop-related functions
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -22,7 +27,6 @@
  *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
  */
 
-#include <string.h>
 #include <errno.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <arpa/inet.h>
 
 #include "internal.h"
+#include "tvarith.h"
 
-/* TCP connection management */
+/* TCP connection management. */
 
-void adns__tcp_broken(adns_state ads, const char *what, const char *why) {
+static void tcp_close(adns_state ads) {
   int serv;
-  adns_query qu, nqu;
   
-  assert(ads->tcpstate == server_connecting || ads->tcpstate == server_ok);
   serv= ads->tcpserver;
-  adns__warn(ads,serv,0,"TCP connection lost: %s: %s",what,why);
   close(ads->tcpsocket);
-  ads->tcpstate= server_disconnected;
+  ads->tcpsocket= -1;
+  ads->tcprecv.used= ads->tcprecv_skip= ads->tcpsend.used= 0;
+}
+
+void adns__tcp_broken(adns_state ads, const char *what, const char *why) {
+  int serv;
+  adns_query qu;
   
-  for (qu= ads->timew.head; qu; qu= nqu) {
-    nqu= qu->next;
-    if (qu->state == query_udp) continue;
-    assert(qu->state == query_tcpwait || qu->state == query_tcpsent);
-    qu->state= query_tcpwait;
-    qu->tcpfailed |= (1<<serv);
-    if (qu->tcpfailed == (1<<ads->nservers)-1) {
-      LIST_UNLINK(ads->timew,qu);
-      adns__query_fail(qu,adns_s_allservfail);
-    }
+  assert(ads->tcpstate == server_connecting || ads->tcpstate == server_ok);
+  serv= ads->tcpserver;
+  if (what) adns__warn(ads,serv,0,"TCP connection failed: %s: %s",what,why);
+
+  if (ads->tcpstate == server_connecting) {
+    /* Counts as a retry for all the queries waiting for TCP. */
+    for (qu= ads->tcpw.head; qu; qu= qu->next)
+      qu->retries++;
   }
 
-  ads->tcprecv.used= ads->tcpsend.used= 0;
+  tcp_close(ads);
+  ads->tcpstate= server_broken;
   ads->tcpserver= (serv+1)%ads->nservers;
 }
 
@@ -69,11 +76,10 @@ static void tcp_connected(adns_state ads, struct timeval now) {
   
   adns__debug(ads,ads->tcpserver,0,"TCP connected");
   ads->tcpstate= server_ok;
-  for (qu= ads->timew.head; qu; qu= nqu) {
+  for (qu= ads->tcpw.head; qu && ads->tcpstate == server_ok; qu= nqu) {
     nqu= qu->next;
-    if (qu->state == query_udp) continue;
-    assert (qu->state == query_tcpwait);
-    adns__query_tcp(qu,now);
+    assert(qu->state == query_tcpw);
+    adns__querysend_tcp(qu,now);
   }
 }
 
@@ -83,10 +89,20 @@ void adns__tcp_tryconnect(adns_state ads, struct timeval now) {
   struct protoent *proto;
 
   for (tries=0; tries<ads->nservers; tries++) {
-    if (ads->tcpstate == server_connecting || ads->tcpstate == server_ok) return;
-    assert(ads->tcpstate == server_disconnected);
+    switch (ads->tcpstate) {
+    case server_connecting:
+    case server_ok:
+    case server_broken:
+      return;
+    case server_disconnected:
+      break;
+    default:
+      abort();
+    }
+    
     assert(!ads->tcpsend.used);
     assert(!ads->tcprecv.used);
+    assert(!ads->tcprecv_skip);
 
     proto= getprotobyname("tcp");
     if (!proto) { adns__diag(ads,-1,0,"unable to find protocol no. for TCP !"); return; }
@@ -108,16 +124,43 @@ void adns__tcp_tryconnect(adns_state ads, struct timeval now) {
     r= connect(fd,(const struct sockaddr*)&addr,sizeof(addr));
     ads->tcpsocket= fd;
     ads->tcpstate= server_connecting;
-    if (r==0) { tcp_connected(ads,now); continue; }
-    if (errno == EWOULDBLOCK || errno == EINPROGRESS) return;
+    if (r==0) { tcp_connected(ads,now); return; }
+    if (errno == EWOULDBLOCK || errno == EINPROGRESS) {
+      ads->tcptimeout= now;
+      timevaladd(&ads->tcptimeout,TCPCONNMS);
+      return;
+    }
     adns__tcp_broken(ads,"connect",strerror(errno));
+    ads->tcpstate= server_disconnected;
   }
 }
 
-/* `Interest' functions - find out which fd's we might be interested in,
- * and when we want to be called back for a timeout.
- */
+/* Timeout handling functions. */
+
+void adns__must_gettimeofday(adns_state ads, const struct timeval **now_io,
+                            struct timeval *tv_buf) {
+  const struct timeval *now;
+  int r;
+
+  now= *now_io;
+  if (now) return;
+  r= gettimeofday(tv_buf,0); if (!r) { *now_io= tv_buf; return; }
+  adns__diag(ads,-1,0,"gettimeofday failed: %s",strerror(errno));
+  adns_globalsystemfailure(ads);
+  return;
+}
 
+static void inter_immed(struct timeval **tv_io, struct timeval *tvbuf) {
+  struct timeval *rbuf;
+
+  if (!tv_io) return;
+
+  rbuf= *tv_io;
+  if (!rbuf) { *tv_io= rbuf= tvbuf; }
+
+  timerclear(rbuf);
+}
+    
 static void inter_maxto(struct timeval **tv_io, struct timeval *tvbuf,
                        struct timeval maxto) {
   struct timeval *rbuf;
@@ -135,6 +178,7 @@ static void inter_maxto(struct timeval **tv_io, struct timeval *tvbuf,
 
 static void inter_maxtoabs(struct timeval **tv_io, struct timeval *tvbuf,
                           struct timeval now, struct timeval maxtime) {
+  /* tv_io may be 0 */
   ldiv_t dr;
 
 /*fprintf(stderr,"inter_maxtoabs now=%ld.%06ld maxtime=%ld.%06ld\n",
@@ -149,178 +193,210 @@ static void inter_maxtoabs(struct timeval **tv_io, struct timeval *tvbuf,
   inter_maxto(tv_io,tvbuf,maxtime);
 }
 
-static void inter_addfd(int *maxfd, fd_set *fds, int fd) {
-  if (!maxfd || !fds) return;
-  if (fd>=*maxfd) *maxfd= fd+1;
-  FD_SET(fd,fds);
-}
-
-static void checktimeouts(adns_state ads, struct timeval now,
-                         struct timeval **tv_io, struct timeval *tvbuf) {
+static void timeouts_queue(adns_state ads, int act,
+                          struct timeval **tv_io, struct timeval *tvbuf,
+                          struct timeval now, struct query_queue *queue) {
   adns_query qu, nqu;
   
-  for (qu= ads->timew.head; qu; qu= nqu) {
+  for (qu= queue->head; qu; qu= nqu) {
     nqu= qu->next;
-    if (timercmp(&now,&qu->timeout,>)) {
-      LIST_UNLINK(ads->timew,qu);
-      if (qu->state != query_udp) {
+    if (!timercmp(&now,&qu->timeout,>)) {
+      inter_maxtoabs(tv_io,tvbuf,now,qu->timeout);
+    } else {
+      if (!act) { inter_immed(tv_io,tvbuf); return; }
+      LIST_UNLINK(*queue,qu);
+      if (qu->state != query_tosend) {
        adns__query_fail(qu,adns_s_timeout);
       } else {
-       adns__query_udp(qu,now);
+       adns__query_send(qu,now);
       }
-    } else {
-      inter_maxtoabs(tv_io,tvbuf,now,qu->timeout);
+      nqu= queue->head;
     }
   }
-}  
-void adns_interest(adns_state ads, int *maxfd,
-                  fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
-                  struct timeval **tv_io, struct timeval *tvbuf) {
-  struct timeval now;
-  struct timeval tvto_lr;
-  int r;
-  
-/*fprintf(stderr,"adns_interest\n");*/
+}
 
-  r= gettimeofday(&now,0);
-  if (r) {
-    adns__warn(ads,-1,0,"gettimeofday failed - will sleep for a bit: %s",
-              strerror(errno));
-    timerclear(&tvto_lr); timevaladd(&tvto_lr,LOCALRESOURCEMS);
-    inter_maxto(tv_io, tvbuf, tvto_lr);
-  } else {
-    checktimeouts(ads,now,tv_io,tvbuf);
-  }
+static void tcp_events(adns_state ads, int act,
+                      struct timeval **tv_io, struct timeval *tvbuf,
+                      struct timeval now) {
+  adns_query qu, nqu;
   
-  inter_addfd(maxfd,readfds,ads->udpsocket);
+  for (;;) {
+    switch (ads->tcpstate) {
+    case server_broken:
+      if (!act) { inter_immed(tv_io,tvbuf); return; }
+      for (qu= ads->tcpw.head; qu; qu= nqu) {
+       nqu= qu->next;
+       assert(qu->state == query_tcpw);
+       if (qu->retries > ads->nservers) {
+         LIST_UNLINK(ads->tcpw,qu);
+         adns__query_fail(qu,adns_s_allservfail);
+       }
+      }
+      ads->tcpstate= server_disconnected;
+    case server_disconnected: /* fall through */
+      if (!ads->tcpw.head) return;
+      if (!act) { inter_immed(tv_io,tvbuf); return; }
+      adns__tcp_tryconnect(ads,now);
+      break;
+    case server_ok:
+      if (ads->tcpw.head) return;
+      if (!ads->tcptimeout.tv_sec) {
+       assert(!ads->tcptimeout.tv_usec);
+       ads->tcptimeout= now;
+       timevaladd(&ads->tcptimeout,TCPIDLEMS);
+      }
+    case server_connecting: /* fall through */
+      if (!act || !timercmp(&now,&ads->tcptimeout,>)) {
+       inter_maxtoabs(tv_io,tvbuf,now,ads->tcptimeout);
+       return;
+      } {
+       /* TCP timeout has happened */
+       switch (ads->tcpstate) {
+       case server_connecting: /* failed to connect */
+         adns__tcp_broken(ads,"unable to make connection","timed out");
+         break;
+       case server_ok: /* idle timeout */
+         tcp_close(ads);
+         ads->tcpstate= server_disconnected;
+         return;
+       default:
+         abort();
+       }
+      }
+      break;
+    default:
+      abort();
+    }
+  }
+  return;
+}
+
+void adns__timeouts(adns_state ads, int act,
+                   struct timeval **tv_io, struct timeval *tvbuf,
+                   struct timeval now) {
+  timeouts_queue(ads,act,tv_io,tvbuf,now, &ads->udpw);
+  timeouts_queue(ads,act,tv_io,tvbuf,now, &ads->tcpw);
+  tcp_events(ads,act,tv_io,tvbuf,now);
+}
+
+void adns_firsttimeout(adns_state ads,
+                      struct timeval **tv_io, struct timeval *tvbuf,
+                      struct timeval now) {
+  adns__consistency(ads,0,cc_entex);
+  adns__timeouts(ads, 0, tv_io,tvbuf, now);
+  adns__consistency(ads,0,cc_entex);
+}
+
+void adns_processtimeouts(adns_state ads, const struct timeval *now) {
+  struct timeval tv_buf;
+
+  adns__consistency(ads,0,cc_entex);
+  adns__must_gettimeofday(ads,&now,&tv_buf);
+  if (now) adns__timeouts(ads, 1, 0,0, *now);
+  adns__consistency(ads,0,cc_entex);
+}
+
+/* fd handling functions.  These are the top-level of the real work of
+ * reception and often transmission.
+ */
+
+int adns__pollfds(adns_state ads, struct pollfd pollfds_buf[MAX_POLLFDS]) {
+  /* Returns the number of entries filled in.  Always zeroes revents. */
+
+  assert(MAX_POLLFDS==2);
+
+  pollfds_buf[0].fd= ads->udpsocket;
+  pollfds_buf[0].events= POLLIN;
+  pollfds_buf[0].revents= 0;
 
   switch (ads->tcpstate) {
   case server_disconnected:
-    break;
+  case server_broken:
+    return 1;
   case server_connecting:
-    inter_addfd(maxfd,writefds,ads->tcpsocket);
+    pollfds_buf[1].events= POLLOUT;
     break;
   case server_ok:
-    inter_addfd(maxfd,readfds,ads->tcpsocket);
-    inter_addfd(maxfd,exceptfds,ads->tcpsocket);
-    if (ads->tcpsend.used) inter_addfd(maxfd,writefds,ads->tcpsocket);
+    pollfds_buf[1].events= ads->tcpsend.used ? POLLIN|POLLOUT|POLLPRI : POLLIN|POLLPRI;
     break;
   default:
     abort();
   }
+  pollfds_buf[1].fd= ads->tcpsocket;
+  return 2;
 }
 
-/* Callback procedures - these do the real work of reception and timeout, etc. */
-
-static int callb_checkfd(int maxfd, const fd_set *fds, int fd) {
-  return maxfd<0 || !fds ? 1 :
-         fd<maxfd && FD_ISSET(fd,fds);
-}
-
-static int internal_callback(adns_state ads, int maxfd,
-                            const fd_set *readfds, const fd_set *writefds,
-                            const fd_set *exceptfds,
-                            struct timeval now) {
-  int skip, want, dgramlen, count, udpaddrlen, r, serv;
+int adns_processreadable(adns_state ads, int fd, const struct timeval *now) {
+  int want, dgramlen, r, udpaddrlen, serv, old_skip;
   byte udpbuf[DNS_MAXUDP];
   struct sockaddr_in udpaddr;
-
-  count= 0;
+  
+  adns__consistency(ads,0,cc_entex);
 
   switch (ads->tcpstate) {
   case server_disconnected:
-    break;
+  case server_broken:
   case server_connecting:
-    if (callb_checkfd(maxfd,writefds,ads->tcpsocket)) {
-      count++;
-      assert(ads->tcprecv.used==0);
-      if (!adns__vbuf_ensure(&ads->tcprecv,1)) return -1;
-      if (ads->tcprecv.buf) {
-       r= read(ads->tcpsocket,&ads->tcprecv.buf,1);
-       if (r==0 || (r<0 && (errno==EAGAIN || errno==EWOULDBLOCK))) {
-         tcp_connected(ads,now);
-       } else if (r>0) {
-         adns__tcp_broken(ads,"connect/read","sent data before first request");
-       } else if (errno!=EINTR) {
-         adns__tcp_broken(ads,"connect/read",strerror(errno));
-       }
-      }
-    }
     break;
   case server_ok:
-    count+= callb_checkfd(maxfd,readfds,ads->tcpsocket) +
-            callb_checkfd(maxfd,exceptfds,ads->tcpsocket) +
-      (ads->tcpsend.used && callb_checkfd(maxfd,writefds,ads->tcpsocket));
-    if (callb_checkfd(maxfd,readfds,ads->tcpsocket)) {
-      skip= 0;
-      for (;;) {
-       if (ads->tcprecv.used<skip+2) {
-         want= 2;
+    if (fd != ads->tcpsocket) break;
+    assert(!ads->tcprecv_skip);
+    do {
+      if (ads->tcprecv.used >= ads->tcprecv_skip+2) {
+       dgramlen= ((ads->tcprecv.buf[ads->tcprecv_skip]<<8) |
+                  ads->tcprecv.buf[ads->tcprecv_skip+1]);
+       if (ads->tcprecv.used >= ads->tcprecv_skip+2+dgramlen) {
+         old_skip= ads->tcprecv_skip;
+         ads->tcprecv_skip += 2+dgramlen;
+         adns__procdgram(ads, ads->tcprecv.buf+old_skip+2,
+                         dgramlen, ads->tcpserver, 1,*now);
+         continue;
        } else {
-         dgramlen= (ads->tcprecv.buf[skip]<<8) | ads->tcprecv.buf[skip+1];
-         if (ads->tcprecv.used<skip+2+dgramlen) {
-           want= 2+dgramlen;
-         } else {
-           adns__procdgram(ads,ads->tcprecv.buf+skip+2,dgramlen,ads->tcpserver,now);
-           skip+= 2+dgramlen; continue;
-         }
-       }
-       ads->tcprecv.used -= skip;
-       memmove(ads->tcprecv.buf,ads->tcprecv.buf+skip,ads->tcprecv.used);
-       skip= 0;
-       if (!adns__vbuf_ensure(&ads->tcprecv,want)) return -1;
-       assert(ads->tcprecv.used <= ads->tcprecv.avail);
-       if (ads->tcprecv.used == ads->tcprecv.avail) continue;
-       r= read(ads->tcpsocket,
-               ads->tcprecv.buf+ads->tcprecv.used,
-               ads->tcprecv.avail-ads->tcprecv.used);
-       if (r>0) {
-         ads->tcprecv.used+= r;
-       } else {
-         if (r<0) {
-           if (errno==EAGAIN || errno==EWOULDBLOCK || errno==ENOMEM) break;
-           if (errno==EINTR) continue;
-         }
-         adns__tcp_broken(ads,"read",r?strerror(errno):"closed");
-         break;
+         want= 2+dgramlen;
        }
+      } else {
+       want= 2;
       }
-    } else if (callb_checkfd(maxfd,exceptfds,ads->tcpsocket)) {
-      adns__tcp_broken(ads,"select","exceptional condition detected");
-    } else if (ads->tcpsend.used && callb_checkfd(maxfd,writefds,ads->tcpsocket)) {
-      adns__sigpipe_protect(ads);
-      r= write(ads->tcpsocket,ads->tcpsend.buf,ads->tcpsend.used);
-      adns__sigpipe_unprotect(ads);
-      if (r<0) {
-       if (errno!=EAGAIN && errno!=EWOULDBLOCK && errno!=ENOMEM && errno!=EINTR) {
-         adns__tcp_broken(ads,"write",strerror(errno));
+      ads->tcprecv.used -= ads->tcprecv_skip;
+      memmove(ads->tcprecv.buf,ads->tcprecv.buf+ads->tcprecv_skip,ads->tcprecv.used);
+      ads->tcprecv_skip= 0;
+      if (!adns__vbuf_ensure(&ads->tcprecv,want)) { r= ENOMEM; goto xit; }
+      assert(ads->tcprecv.used <= ads->tcprecv.avail);
+      if (ads->tcprecv.used == ads->tcprecv.avail) continue;
+      r= read(ads->tcpsocket,
+             ads->tcprecv.buf+ads->tcprecv.used,
+             ads->tcprecv.avail-ads->tcprecv.used);
+      if (r>0) {
+       ads->tcprecv.used+= r;
+      } else {
+       if (r) {
+         if (errno==EAGAIN || errno==EWOULDBLOCK) { r= 0; goto xit; }
+         if (errno==EINTR) continue;
+         if (errno_resources(errno)) { r= errno; goto xit; }
        }
-      } else if (r>0) {
-       ads->tcpsend.used -= r;
-       memmove(ads->tcpsend.buf,ads->tcpsend.buf+r,ads->tcpsend.used);
+       adns__tcp_broken(ads,"read",r?strerror(errno):"closed");
       }
-    }
-    break;
+    } while (ads->tcpstate == server_ok);
+    r= 0; goto xit;
   default:
     abort();
   }
-
-  if (callb_checkfd(maxfd,readfds,ads->udpsocket)) {
-    count++;
+  if (fd == ads->udpsocket) {
     for (;;) {
       udpaddrlen= sizeof(udpaddr);
       r= recvfrom(ads->udpsocket,udpbuf,sizeof(udpbuf),0,
                  (struct sockaddr*)&udpaddr,&udpaddrlen);
       if (r<0) {
-       if (!(errno == EAGAIN || errno == EWOULDBLOCK ||
-             errno == EINTR || errno == ENOMEM || errno == ENOBUFS))
-         adns__warn(ads,-1,0,"datagram receive error: %s",strerror(errno));
-       break;
+       if (errno == EAGAIN || errno == EWOULDBLOCK) { r= 0; goto xit; }
+       if (errno == EINTR) continue;
+       if (errno_resources(errno)) { r= errno; goto xit; }
+       adns__warn(ads,-1,0,"datagram receive error: %s",strerror(errno));
+       r= 0; goto xit;
       }
       if (udpaddrlen != sizeof(udpaddr)) {
        adns__diag(ads,-1,0,"datagram received with wrong address length %d"
-                  " (expected %d)", udpaddrlen,sizeof(udpaddr));
+                  " (expected %lu)", udpaddrlen,
+                  (unsigned long)sizeof(udpaddr));
        continue;
       }
       if (udpaddr.sin_family != AF_INET) {
@@ -342,46 +418,258 @@ static int internal_callback(adns_state ads, int maxfd,
                   inet_ntoa(udpaddr.sin_addr));
        continue;
       }
-      adns__procdgram(ads,udpbuf,r,serv,now);
+      adns__procdgram(ads,udpbuf,r,serv,0,*now);
     }
   }
-  return count;
+  r= 0;
+xit:
+  adns__consistency(ads,0,cc_entex);
+  return r;
 }
 
-int adns_callback(adns_state ads, int maxfd,
-                 const fd_set *readfds, const fd_set *writefds,
-                 const fd_set *exceptfds) {
-  struct timeval now;
+int adns_processwriteable(adns_state ads, int fd, const struct timeval *now) {
   int r;
+  
+  adns__consistency(ads,0,cc_entex);
 
-  r= gettimeofday(&now,0); if (r) return -1;
-  checktimeouts(ads,now,0,0);
-  return internal_callback(ads,maxfd,readfds,writefds,exceptfds,now);
+  switch (ads->tcpstate) {
+  case server_disconnected:
+  case server_broken:
+    break;
+  case server_connecting:
+    if (fd != ads->tcpsocket) break;
+    assert(ads->tcprecv.used==0);
+    assert(ads->tcprecv_skip==0);
+    for (;;) {
+      if (!adns__vbuf_ensure(&ads->tcprecv,1)) { r= ENOMEM; goto xit; }
+      r= read(ads->tcpsocket,&ads->tcprecv.buf,1);
+      if (r==0 || (r<0 && (errno==EAGAIN || errno==EWOULDBLOCK))) {
+       tcp_connected(ads,*now);
+       r= 0; goto xit;
+      }
+      if (r>0) {
+       adns__tcp_broken(ads,"connect/read","sent data before first request");
+       r= 0; goto xit;
+      }
+      if (errno==EINTR) continue;
+      if (errno_resources(errno)) { r= errno; goto xit; }
+      adns__tcp_broken(ads,"connect/read",strerror(errno));
+      r= 0; goto xit;
+    } /* not reached */
+  case server_ok:
+    if (fd != ads->tcpsocket) break;
+    while (ads->tcpsend.used) {
+      adns__sigpipe_protect(ads);
+      r= write(ads->tcpsocket,ads->tcpsend.buf,ads->tcpsend.used);
+      adns__sigpipe_unprotect(ads);
+      if (r<0) {
+       if (errno==EINTR) continue;
+       if (errno==EAGAIN || errno==EWOULDBLOCK) { r= 0; goto xit; }
+       if (errno_resources(errno)) { r= errno; goto xit; }
+       adns__tcp_broken(ads,"write",strerror(errno));
+       r= 0; goto xit;
+      } else if (r>0) {
+       ads->tcpsend.used -= r;
+       memmove(ads->tcpsend.buf,ads->tcpsend.buf+r,ads->tcpsend.used);
+      }
+    }
+    r= 0;
+    goto xit;
+  default:
+    abort();
+  }
+  r= 0;
+xit:
+  adns__consistency(ads,0,cc_entex);
+  return r;
+}
+  
+int adns_processexceptional(adns_state ads, int fd, const struct timeval *now) {
+  adns__consistency(ads,0,cc_entex);
+  switch (ads->tcpstate) {
+  case server_disconnected:
+  case server_broken:
+    break;
+  case server_connecting:
+  case server_ok:
+    if (fd != ads->tcpsocket) break;
+    adns__tcp_broken(ads,"poll/select","exceptional condition detected");
+    break;
+  default:
+    abort();
+  }
+  adns__consistency(ads,0,cc_entex);
+  return 0;
 }
 
-/* User-visible functions and their implementation. */
+static void fd_event(adns_state ads, int fd,
+                    int revent, int pollflag,
+                    int maxfd, const fd_set *fds,
+                    int (*func)(adns_state, int fd, const struct timeval *now),
+                    struct timeval now, int *r_r) {
+  int r;
+  
+  if (!(revent & pollflag)) return;
+  if (fds && !(fd<maxfd && FD_ISSET(fd,fds))) return;
+  r= func(ads,fd,&now);
+  if (r) {
+    if (r_r) {
+      *r_r= r;
+    } else {
+      adns__diag(ads,-1,0,"process fd failed after select: %s",strerror(errno));
+      adns_globalsystemfailure(ads);
+    }
+  }
+}
+
+void adns__fdevents(adns_state ads,
+                   const struct pollfd *pollfds, int npollfds,
+                   int maxfd, const fd_set *readfds,
+                   const fd_set *writefds, const fd_set *exceptfds,
+                   struct timeval now, int *r_r) {
+  int i, fd, revents;
+
+  for (i=0; i<npollfds; i++) {
+    fd= pollfds[i].fd;
+    if (fd >= maxfd) maxfd= fd+1;
+    revents= pollfds[i].revents;
+    fd_event(ads,fd, revents,POLLIN, maxfd,readfds, adns_processreadable,now,r_r);
+    fd_event(ads,fd, revents,POLLOUT, maxfd,writefds, adns_processwriteable,now,r_r);
+    fd_event(ads,fd, revents,POLLPRI, maxfd,exceptfds, adns_processexceptional,now,r_r);
+  }
+}
+
+/* Wrappers for select(2). */
+
+void adns_beforeselect(adns_state ads, int *maxfd_io, fd_set *readfds_io,
+                      fd_set *writefds_io, fd_set *exceptfds_io,
+                      struct timeval **tv_mod, struct timeval *tv_tobuf,
+                      const struct timeval *now) {
+  struct timeval tv_nowbuf;
+  struct pollfd pollfds[MAX_POLLFDS];
+  int i, fd, maxfd, npollfds;
+  
+  adns__consistency(ads,0,cc_entex);
+
+  if (tv_mod && (!*tv_mod || (*tv_mod)->tv_sec || (*tv_mod)->tv_usec)) {
+    /* The caller is planning to sleep. */
+    adns__must_gettimeofday(ads,&now,&tv_nowbuf);
+    if (!now) { inter_immed(tv_mod,tv_tobuf); goto xit; }
+    adns__timeouts(ads, 0, tv_mod,tv_tobuf, *now);
+  }
+
+  npollfds= adns__pollfds(ads,pollfds);
+  maxfd= *maxfd_io;
+  for (i=0; i<npollfds; i++) {
+    fd= pollfds[i].fd;
+    if (fd >= maxfd) maxfd= fd+1;
+    if (pollfds[i].events & POLLIN) FD_SET(fd,readfds_io);
+    if (pollfds[i].events & POLLOUT) FD_SET(fd,writefds_io);
+    if (pollfds[i].events & POLLPRI) FD_SET(fd,exceptfds_io);
+  }
+  *maxfd_io= maxfd;
+
+xit:
+  adns__consistency(ads,0,cc_entex);
+}
+
+void adns_afterselect(adns_state ads, int maxfd, const fd_set *readfds,
+                     const fd_set *writefds, const fd_set *exceptfds,
+                     const struct timeval *now) {
+  struct timeval tv_buf;
+  struct pollfd pollfds[MAX_POLLFDS];
+  int npollfds, i;
+
+  adns__consistency(ads,0,cc_entex);
+  adns__must_gettimeofday(ads,&now,&tv_buf);
+  if (!now) goto xit;
+  adns_processtimeouts(ads,now);
+
+  npollfds= adns__pollfds(ads,pollfds);
+  for (i=0; i<npollfds; i++) pollfds[i].revents= POLLIN|POLLOUT|POLLPRI;
+  adns__fdevents(ads,
+                pollfds,npollfds,
+                maxfd,readfds,writefds,exceptfds,
+                *now, 0);
+xit:
+  adns__consistency(ads,0,cc_entex);
+}
+
+/* General helpful functions. */
+
+void adns_globalsystemfailure(adns_state ads) {
+  adns__consistency(ads,0,cc_entex);
+
+  while (ads->udpw.head) adns__query_fail(ads->udpw.head, adns_s_systemfail);
+  while (ads->tcpw.head) adns__query_fail(ads->tcpw.head, adns_s_systemfail);
+  
+  switch (ads->tcpstate) {
+  case server_connecting:
+  case server_ok:
+    adns__tcp_broken(ads,0,0);
+    break;
+  case server_disconnected:
+  case server_broken:
+    break;
+  default:
+    abort();
+  }
+  adns__consistency(ads,0,cc_entex);
+}
+
+int adns_processany(adns_state ads) {
+  int r, i;
+  struct timeval now;
+  struct pollfd pollfds[MAX_POLLFDS];
+  int npollfds;
+
+  adns__consistency(ads,0,cc_entex);
+
+  r= gettimeofday(&now,0);
+  if (!r) adns_processtimeouts(ads,&now);
+
+  /* We just use adns__fdevents to loop over the fd's trying them.
+   * This seems more sensible than calling select, since we're most
+   * likely just to want to do a read on one or two fds anyway.
+   */
+  npollfds= adns__pollfds(ads,pollfds);
+  for (i=0; i<npollfds; i++) pollfds[i].revents= pollfds[i].events & ~POLLPRI;
+  adns__fdevents(ads,
+                pollfds,npollfds,
+                0,0,0,0,
+                now,&r);
+
+  adns__consistency(ads,0,cc_entex);
+  return 0;
+}
 
 void adns__autosys(adns_state ads, struct timeval now) {
   if (ads->iflags & adns_if_noautosys) return;
-  adns_callback(ads,-1,0,0,0);
+  adns_processany(ads);
 }
 
-static int internal_check(adns_state ads,
-                         adns_query *query_io,
-                         adns_answer **answer,
-                         void **context_r) {
+int adns__internal_check(adns_state ads,
+                        adns_query *query_io,
+                        adns_answer **answer,
+                        void **context_r) {
   adns_query qu;
 
   qu= *query_io;
   if (!qu) {
-    if (!ads->output.head) return EWOULDBLOCK;
-    qu= ads->output.head;
+    if (ads->output.head) {
+      qu= ads->output.head;
+    } else if (ads->udpw.head || ads->tcpw.head) {
+      return EAGAIN;
+    } else {
+      return ESRCH;
+    }
   } else {
-    if (qu->id>=0) return EWOULDBLOCK;
+    if (qu->id>=0) return EAGAIN;
   }
   LIST_UNLINK(ads->output,qu);
   *answer= qu->answer;
   if (context_r) *context_r= qu->ctx.ext;
+  *query_io= qu;
   free(qu);
   return 0;
 }
@@ -390,24 +678,33 @@ int adns_wait(adns_state ads,
              adns_query *query_io,
              adns_answer **answer_r,
              void **context_r) {
-  int r, maxfd, rsel, rcb;
+  int r, maxfd, rsel;
   fd_set readfds, writefds, exceptfds;
   struct timeval tvbuf, *tvp;
   
+  adns__consistency(ads,*query_io,cc_entex);
   for (;;) {
-    r= internal_check(ads,query_io,answer_r,context_r);
-    if (r != EWOULDBLOCK) return r;
+    r= adns__internal_check(ads,query_io,answer_r,context_r);
+    if (r != EAGAIN) break;
     maxfd= 0; tvp= 0;
     FD_ZERO(&readfds); FD_ZERO(&writefds); FD_ZERO(&exceptfds);
-    adns_interest(ads,&maxfd,&readfds,&writefds,&exceptfds,&tvp,&tvbuf);
+    adns_beforeselect(ads,&maxfd,&readfds,&writefds,&exceptfds,&tvp,&tvbuf,0);
+    assert(tvp);
     rsel= select(maxfd,&readfds,&writefds,&exceptfds,tvp);
     if (rsel==-1) {
-      if (errno == EINTR && !(ads->iflags & adns_if_eintr)) continue;
-      return errno;
+      if (errno == EINTR) {
+       if (ads->iflags & adns_if_eintr) { r= EINTR; break; }
+      } else {
+       adns__diag(ads,-1,0,"select failed in wait: %s",strerror(errno));
+       adns_globalsystemfailure(ads);
+      }
+    } else {
+      assert(rsel >= 0);
+      adns_afterselect(ads,maxfd,&readfds,&writefds,&exceptfds,0);
     }
-    rcb= adns_callback(ads,maxfd,&readfds,&writefds,&exceptfds);
-    assert(rcb==rsel);
   }
+  adns__consistency(ads,0,cc_entex);
+  return r;
 }
 
 int adns_check(adns_state ads,
@@ -417,7 +714,11 @@ int adns_check(adns_state ads,
   struct timeval now;
   int r;
   
-  r= gettimeofday(&now,0); if (r) return errno;
-  adns__autosys(ads,now);
-  return internal_check(ads,query_io,answer_r,context_r);
+  adns__consistency(ads,*query_io,cc_entex);
+  r= gettimeofday(&now,0);
+  if (!r) adns__autosys(ads,now);
+
+  r= adns__internal_check(ads,query_io,answer_r,context_r);
+  adns__consistency(ads,0,cc_entex);
+  return r;
 }
index 079f8b7cd30efc77b9d66f105e3f6007e1374c69..0d159df18c8129464d27853651df1e4977b9840e 100644 (file)
@@ -4,7 +4,12 @@
  * - vbuf handling
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -22,7 +27,7 @@
  */
 
 #include <stdlib.h>
-#include <string.h>
+#include <unistd.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -42,7 +47,11 @@ void adns__vdiag(adns_state ads, const char *pfx, adns_initflags prevent,
       (!(ads->iflags & adns_if_debug) && (!prevent || (ads->iflags & prevent))))
     return;
 
-  fprintf(ads->diagfile,"adns%s: ",pfx);
+  if (ads->iflags & adns_if_logpid) {
+    fprintf(ads->diagfile,"adns%s [%ld]: ",pfx,(long)getpid());
+  } else {
+    fprintf(ads->diagfile,"adns%s: ",pfx);
+  }
 
   vfprintf(ads->diagfile,fmt,al);
 
@@ -59,6 +68,7 @@ void adns__vdiag(adns_state ads, const char *pfx, adns_initflags prevent,
     if (qu->typei && qu->typei->fmtname)
       fprintf(ads->diagfile,"(%s)",qu->typei->fmtname);
     bef=", "; aft=")\n";
+    adns__vbuf_free(&vb);
   }
   
   if (serv>=0) {
@@ -200,16 +210,19 @@ adns_status adns_rr_info(adns_rrtype type,
   return st;
 }
 
-#define SINFO(n,s) { adns_s_##n, s }
+
+#define SINFO(n,s) { adns_s_##n, #n, s }
 
 static const struct sinfo {
   adns_status st;
+  const char *abbrev;
   const char *string;
 } sinfos[]= {
   SINFO(  ok,                  "OK"                                            ),
 
   SINFO(  nomemory,            "Out of memory"                                 ),
   SINFO(  unknownrrtype,       "Query not implemented in DNS library"          ),
+  SINFO(  systemfail,          "General resolver or system failure"            ),
 
   SINFO(  timeout,             "DNS query timed out"                           ),
   SINFO(  allservfail,         "All nameservers failed"                        ),
@@ -224,17 +237,17 @@ static const struct sinfo {
   SINFO(  rcodeunknown,        "Nameserver sent unknown response code"         ),
   
   SINFO(  inconsistent,        "Inconsistent resource records in DNS"          ),
-  SINFO(  prohibitedcname,     "DNS data refers to an alias"                   ),
+  SINFO(  prohibitedcname,     "DNS alias found where canonical name wanted"   ),
   SINFO(  answerdomaininvalid, "Found syntactically invalid domain name"       ),
   SINFO(  answerdomaintoolong, "Found overly-long domain name"                 ),
   SINFO(  invaliddata,         "Found invalid DNS data"                        ),
 
   SINFO(  querydomainwrong,    "Domain invalid for particular DNS query type"  ),
   SINFO(  querydomaininvalid,  "Domain name is syntactically invalid"          ),
-  SINFO(  querydomaintoolong,  "Domain name is too long"                       ),
+  SINFO(  querydomaintoolong,  "Domain name or component is too long"          ),
 
   SINFO(  nxdomain,            "No such domain"                                ),
-  SINFO(  nodata,              "No such data"                                  ),
+  SINFO(  nodata,              "No such data"                                  )
 };
 
 static int si_compar(const void *key, const void *elem) {
@@ -244,18 +257,61 @@ static int si_compar(const void *key, const void *elem) {
   return *st < si->st ? -1 : *st > si->st ? 1 : 0;
 }
 
+static const struct sinfo *findsinfo(adns_status st) {
+  return bsearch(&st,sinfos,sizeof(sinfos)/sizeof(*sinfos),sizeof(*sinfos),si_compar);
+}
+
 const char *adns_strerror(adns_status st) {
-  static char buf[100];
+  const struct sinfo *si;
 
+  si= findsinfo(st);
+  return si->string;
+}
+
+const char *adns_errabbrev(adns_status st) {
   const struct sinfo *si;
 
-  si= bsearch(&st,sinfos,sizeof(sinfos)/sizeof(*si),sizeof(*si),si_compar);
-  if (si) return si->string;
+  si= findsinfo(st);
+  return si->abbrev;
+}
+
+
+#define STINFO(max) { adns_s_max_##max, #max }
+
+static const struct stinfo {
+  adns_status stmax;
+  const char *abbrev;
+} stinfos[]= {
+  { adns_s_ok, "ok" },
+  STINFO(  localfail   ),
+  STINFO(  remotefail  ),
+  STINFO(  tempfail    ),
+  STINFO(  misconfig   ),
+  STINFO(  misquery    ),
+  STINFO(  permfail    )
+};
+
+static int sti_compar(const void *key, const void *elem) {
+  const adns_status *st= key;
+  const struct stinfo *sti= elem;
+
+  adns_status here, min, max;
+
+  here= *st;
+  min= (sti==stinfos) ? 0 : sti[-1].stmax+1;
+  max= sti->stmax;
   
-  snprintf(buf,sizeof(buf),"code %d",st);
-  return buf;
+  return here < min  ? -1 : here > max ? 1 : 0;
 }
 
+const char *adns_errtypeabbrev(adns_status st) {
+  const struct stinfo *sti;
+
+  sti= bsearch(&st,stinfos,sizeof(stinfos)/sizeof(*stinfos),sizeof(*stinfos),sti_compar);
+  return sti->abbrev;
+}
+
+
 void adns__isort(void *array, int nobjs, int sz, void *tempbuf,
                 int (*needswap)(void *context, const void *a, const void *b),
                 void *context) {
index 5a58f9585454f07eff690b8da91c945988667516..4caa9de6031c8177ffb73880f6b6bd07add6ccbc 100644 (file)
@@ -5,21 +5,26 @@
  * - comments regarding library data structures
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
- *  
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  *  the Free Software Foundation; either version 2, or (at your option)
  *  any later version.
- *  
+ *
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *  
+ *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software Foundation,
- *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
 #ifndef ADNS_INTERNAL_H_INCLUDED
@@ -32,10 +37,17 @@ typedef unsigned char byte;
 #include <assert.h>
 #include <unistd.h>
 #include <signal.h>
+#include <errno.h>
+#include <string.h>
 
 #include <sys/time.h>
 
 #include "adns.h"
+#include "dlist.h"
+
+#ifdef ADNS_REGRESS_TEST
+# include "hredirect.h"
+#endif
 
 /* Configuration and constants */
 
@@ -43,12 +55,14 @@ typedef unsigned char byte;
 #define MAXSORTLIST 15
 #define UDPMAXRETRIES 15
 #define UDPRETRYMS 2000
-#define TCPMS 30000
-#define LOCALRESOURCEMS 20
+#define TCPWAITMS 30000
+#define TCPCONNMS 14000
+#define TCPIDLEMS 30000
 #define MAXTTLBELIEVE (7*86400) /* any TTL > 7 days is capped */
 
 #define DNS_PORT 53
 #define DNS_MAXUDP 512
+#define DNS_MAXLABEL 63
 #define DNS_MAXDOMAIN 255
 #define DNS_HDRSIZE 12
 #define DNS_IDOFFSET 0
@@ -56,6 +70,14 @@ typedef unsigned char byte;
 
 #define DNS_INADDR_ARPA "in-addr", "arpa"
 
+#define MAX_POLLFDS  ADNS_POLLFDS_RECOMMENDED
+
+typedef enum {
+  cc_user,
+  cc_entex,
+  cc_freq
+} consistency_checks;
+
 typedef enum {
   rcode_noerror,
   rcode_formaterror,
@@ -149,18 +171,18 @@ typedef struct {
 
 struct adns__query {
   adns_state ads;
-  enum { query_udp, query_tcpwait, query_tcpsent, query_child, query_done } state;
+  enum { query_tosend, query_tcpw, query_childw, query_done } state;
   adns_query back, next, parent;
   struct { adns_query head, tail; } children;
   struct { adns_query back, next; } siblings;
   struct { allocnode *head, *tail; } allocations;
-  int interim_allocd;
+  int interim_allocd, preserved_allocd;
   void *final_allocspace;
-  
+
   const typeinfo *typei;
   byte *query_dgram;
   int query_dglen;
-  
+
   vbuf vb;
   /* General-purpose messing-about buffer.
    * Wherever a `big' interface is crossed, this may be corrupted/changed
@@ -177,7 +199,7 @@ struct adns__query {
    * owner is set during querying unless we're doing searchlist,
    * in which case it is set only when we find an answer.
    */
-  
+
   byte *cname_dgram;
   int cname_dglen, cname_begin;
   /* If non-0, has been allocated using . */
@@ -192,10 +214,10 @@ struct adns__query {
    * but not done yet).  If flags doesn't have adns_qf_search then
    * the vbuf is initialised but empty and everything else is zero.
    */
-  
-  int id, flags, udpretries;
+
+  int id, flags, retries;
   int udpnextserver;
-  unsigned long udpsent, tcpfailed; /* bitmap indexed by server */
+  unsigned long udpsent; /* bitmap indexed by server */
   struct timeval timeout;
   time_t expires; /* Earliest expiry time of any record we used. */
 
@@ -203,41 +225,42 @@ struct adns__query {
 
   /* Possible states:
    *
-   *  state   Queue   child  id   nextudpserver  sentudp     failedtcp
-   *                             
-   *  udp     NONE    null   >=0  0              zero        zero
-   *  udp     timew   null   >=0  any            nonzero     zero
-   *  udp     NONE    null   >=0  any            nonzero     zero
-   *                             
-   *  tcpwait timew   null   >=0  irrelevant     zero        any
-   *  tcpsent timew   null   >=0  irrelevant     zero        any
-   *                             
+   *  state   Queue   child  id   nextudpserver  udpsent     tcpfailed
+   *
+   *  tosend  NONE    null   >=0  0              zero        zero
+   *  tosend  udpw    null   >=0  any            nonzero     zero
+   *  tosend  NONE    null   >=0  any            nonzero     zero
+   *
+   *  tcpw    tcpw    null   >=0  irrelevant     any         any
+   *
    *  child   childw  set    >=0  irrelevant     irrelevant  irrelevant
+   *  child   NONE    null   >=0  irrelevant     irrelevant  irrelevant
    *  done    output  null   -1   irrelevant     irrelevant  irrelevant
    *
+   * Queries are only not on a queue when they are actually being processed.
+   * Queries in state tcpw/tcpw have been sent (or are in the to-send buffer)
+   * iff the tcp connection is in state server_ok.
+   *
    *                         +------------------------+
-   *             START -----> |      udp/NONE          |
+   *             START -----> |      tosend/NONE       |
    *                         +------------------------+
    *                         /                       |\  \
    *        too big for UDP /             UDP timeout  \  \ send via UDP
-   *        do this ASAP!  /              more retries  \  \   do this ASAP!
-   *                     |_                  desired     \  _|
-   *             +---------------+                     +-----------+
-   *              | tcpwait/timew | ____                | udp/timew |
-   *              +---------------+     \              +-----------+
-   *                    |  ^             |                 | |
-   *     TCP conn'd;    |  | TCP died    |                 | |
-   *     send via TCP   |  | more        |     UDP timeout | |
-   *     do this ASAP!  |  | servers     |      no more    | |
-   *                    v  | to try      |      retries    | |
-   *              +---------------+      |      desired    | |
-   *              | tcpsent/timew | ____ |                 | |
-   *             +---------------+     \|                 | |
-   *                  \   \ TCP died     | TCP             | |
-   *                   \   \ no more     | timeout         / |
-   *                    \   \ servers    |                /  |
-   *                     \   \ to try    |               /   |
-   *                  got \   \          v             |_    / got
+   *        send via TCP   /              more retries  \  \
+   *        when conn'd   /                  desired     \  \
+   *                     |                                       |  |
+   *                     v                               |  v
+   *              +-----------+                        +-------------+
+   *              | tcpw/tcpw | ________                | tosend/udpw |
+   *              +-----------+         \              +-------------+
+   *                 |    |              |     UDP timeout | |
+   *                 |    |              |      no more    | |
+   *                 |    |              |      retries    | |
+   *                  \   | TCP died     |      desired    | |
+   *                   \   \ no more     |                 | |
+   *                    \   \ servers    | TCP            /  |
+   *                     \   \ to try    | timeout       /   |
+   *                  got \   \          v             |_    | got
    *                 reply \   _| +------------------+      / reply
    *                               \     | done/output FAIL |     /
    *                         \    +------------------+    /
@@ -248,24 +271,36 @@ struct adns__query {
    *        need child query/ies /                     \ no child query
    *                            /                       \
    *                          |_                         _|
-   *               +--------------+                   +----------------+
-   *                | child/childw | ----------------> | done/output OK |
-   *                +--------------+  children done    +----------------+
+   *              +---------------+                   +----------------+
+   *               | childw/childw | ----------------> | done/output OK |
+   *               +---------------+  children done    +----------------+
    */
 };
 
+struct query_queue { adns_query head, tail; };
+
 struct adns__state {
   adns_initflags iflags;
   FILE *diagfile;
   int configerrno;
-  struct { adns_query head, tail; } timew, childw, output;
+  struct query_queue udpw, tcpw, childw, output;
+  adns_query forallnext;
   int nextid, udpsocket, tcpsocket;
   vbuf tcpsend, tcprecv;
-  int nservers, nsortlist, nsearchlist, searchndots, tcpserver;
-  enum adns__tcpstate { server_disconnected, server_connecting, server_ok } tcpstate;
+  int nservers, nsortlist, nsearchlist, searchndots, tcpserver, tcprecv_skip;
+  enum adns__tcpstate {
+    server_disconnected, server_connecting,
+    server_ok, server_broken
+  } tcpstate;
   struct timeval tcptimeout;
+  /* This will have tv_sec==0 if it is not valid.  It will always be
+   * valid if tcpstate _connecting.  When _ok, it will be nonzero if
+   * we are idle (ie, tcpw queue is empty), in which case it is the
+   * absolute time when we will close the connection.
+   */
   struct sigaction stdsigpipe;
   sigset_t stdsigmask;
+  struct pollfd pollfds_buf[MAX_POLLFDS];
   struct server {
     struct in_addr addr;
   } servers[MAXSERVERS];
@@ -311,7 +346,7 @@ const char *adns__diag_domain(adns_state ads, int serv, adns_query qu,
  * Returns either vb->buf, or a pointer to a string literal.  Do not modify
  * vb before using the return value.
  */
-  
+
 void adns__isort(void *array, int nobjs, int sz, void *tempbuf,
                 int (*needswap)(void *context, const void *a, const void *b),
                 void *context);
@@ -326,7 +361,8 @@ void adns__sigpipe_unprotect(adns_state);
 /* If SIGPIPE protection is not disabled, will block all signals except
  * SIGPIPE, and set SIGPIPE's disposition to SIG_IGN.  (And then restore.)
  * Each call to _protect must be followed by a call to _unprotect before
- * any significant amount of code gets to run.
+ * any significant amount of code gets to run, since the old signal mask
+ * is stored in the adns structure.
  */
 
 /* From transmit.c: */
@@ -344,23 +380,20 @@ adns_status adns__mkquery_frdgram(adns_state ads, vbuf *vb, int *id_r,
  * That domain must be correct and untruncated.
  */
 
-void adns__query_tcp(adns_query qu, struct timeval now);
-/* Query must be in state tcpwait/timew; it will be moved to a new state
- * if possible and no further processing can be done on it for now.
- * (Resulting state is one of tcpwait/timew (if server not connected),
- *  tcpsent/timew, child/childw or done/output.)
- *
- * adns__tcp_tryconnect should already have been called - _tcp
- * will only use an existing connection (if there is one), which it
- * may break.  If the conn list lost then the caller is responsible for any
- * reestablishment and retry.
+void adns__querysend_tcp(adns_query qu, struct timeval now);
+/* Query must be in state tcpw/tcpw; it will be sent if possible and
+ * no further processing can be done on it for now.  The connection
+ * might be broken, but no reconnect will be attempted.
  */
 
-void adns__query_udp(adns_query qu, struct timeval now);
-/* Query must be in state udp/NONE; it will be moved to a new state,
+void adns__query_send(adns_query qu, struct timeval now);
+/* Query must be in state tosend/NONE; it will be moved to a new state,
  * and no further processing can be done on it for now.
  * (Resulting state is one of udp/timew, tcpwait/timew (if server not connected),
  *  tcpsent/timew, child/childw or done/output.)
+ * __query_send may decide to use either UDP or TCP depending whether
+ * _qf_usevc is set (or has become set) and whether the query is too
+ * large.
  */
 
 /* From query.c: */
@@ -378,6 +411,19 @@ adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
  * succeeds or fails (if it succeeds, the vbuf is reused for qu->vb).
  *
  * *ctx is copied byte-for-byte into the query.
+ *
+ * When the child query is done, ctx->callback will be called.  The
+ * child will already have been taken off both the global list of
+ * queries in ads and the list of children in the parent.  The child
+ * will be freed when the callback returns.  The parent will have been
+ * taken off the global childw queue.
+ *
+ * The callback should either call adns__query_done, if it is
+ * complete, or adns__query_fail, if an error has occurred, in which
+ * case the other children (if any) will be cancelled.  If the parent
+ * has more unfinished children (or has just submitted more) then the
+ * callback may choose to wait for them - it must then put the parent
+ * back on the childw queue.
  */
 
 void adns__search_next(adns_state ads, adns_query qu, struct timeval now);
@@ -391,20 +437,27 @@ void adns__search_next(adns_state ads, adns_query qu, struct timeval now);
  */
 
 void *adns__alloc_interim(adns_query qu, size_t sz);
+void *adns__alloc_preserved(adns_query qu, size_t sz);
 /* Allocates some memory, and records which query it came from
  * and how much there was.
  *
- * If an error occurs in the query, all its memory is simply freed.
- *
- * If the query succeeds, one large buffer will be made which is
- * big enough for all these allocations, and then adns__alloc_final
- * will get memory from this buffer.
+ * If an error occurs in the query, all the memory from _interim is
+ * simply freed.  If the query succeeds, one large buffer will be made
+ * which is big enough for all these allocations, and then
+ * adns__alloc_final will get memory from this buffer.
  *
  * _alloc_interim can fail (and return 0).
  * The caller must ensure that the query is failed.
  *
- * adns__alloc_interim_{only,fail}(qu,0) will not return 0,
- * but it will not necessarily return a distinct pointer each time.
+ * The memory from _preserved is is kept and transferred into the
+ * larger buffer - unless we run out of memory, in which case it too
+ * is freed.  When you use _preserved you have to add code to the
+ * x_nomem error exit case in adns__makefinal_query to clear out the
+ * pointers you made to those allocations, because that's when they're
+ * thrown away; you should also make a note in the declaration of
+ * those pointer variables, to note that they are _preserved rather
+ * than _interim.  If they're in the answer, note it here:
+ *  answer->cname and answer->owner are _preserved.
  */
 
 void adns__transfer_interim(adns_query from, adns_query to, void *block, size_t sz);
@@ -434,21 +487,29 @@ void *adns__alloc_final(adns_query qu, size_t sz);
 void adns__makefinal_block(adns_query qu, void **blpp, size_t sz);
 void adns__makefinal_str(adns_query qu, char **strp);
 
-void adns__reset_cnameonly(adns_query qu);
-/* Resets all of the memory management stuff etc. to
- * take account of only the CNAME.  Used when we find an error somewhere
- * and want to just report the error (with perhaps CNAME info), and also
- * when we're halfway through RRs in a datagram and discover that we
- * need to retry the query.
+void adns__reset_preserved(adns_query qu);
+/* Resets all of the memory management stuff etc. to take account of
+ * only the _preserved stuff from _alloc_preserved.  Used when we find
+ * an error somewhere and want to just report the error (with perhaps
+ * CNAME, owner, etc. info), and also when we're halfway through RRs
+ * in a datagram and discover that we need to retry the query.
  */
 
 void adns__query_done(adns_query qu);
 void adns__query_fail(adns_query qu, adns_status stat);
-   
+
 /* From reply.c: */
 
 void adns__procdgram(adns_state ads, const byte *dgram, int len,
-                    int serv, struct timeval now);
+                    int serv, int viatcp, struct timeval now);
+/* This function is allowed to cause new datagrams to be constructed
+ * and sent, or even new queries to be started.  However,
+ * query-sending functions are not allowed to call any general event
+ * loop functions in case they accidentally call this.
+ *
+ * Ie, receiving functions may call sending functions.
+ * Sending functions may NOT call receiving functions.
+ */
 
 /* From types.c: */
 
@@ -584,57 +645,61 @@ int vbuf__append_quoted1035(vbuf *vb, const byte *buf, int len);
 /* From event.c: */
 
 void adns__tcp_broken(adns_state ads, const char *what, const char *why);
+/* what and why may be both 0, or both non-0. */
+
 void adns__tcp_tryconnect(adns_state ads, struct timeval now);
 
 void adns__autosys(adns_state ads, struct timeval now);
-/* Make all the system calls we want to if the application wants us to. */
+/* Make all the system calls we want to if the application wants us to.
+ * Must not be called from within adns internal processing functions,
+ * lest we end up in recursive descent !
+ */
 
-/* Useful static inline functions: */
+void adns__must_gettimeofday(adns_state ads, const struct timeval **now_io,
+                            struct timeval *tv_buf);
+
+int adns__pollfds(adns_state ads, struct pollfd pollfds_buf[MAX_POLLFDS]);
+void adns__fdevents(adns_state ads,
+                   const struct pollfd *pollfds, int npollfds,
+                   int maxfd, const fd_set *readfds,
+                   const fd_set *writefds, const fd_set *exceptfds,
+                   struct timeval now, int *r_r);
+int adns__internal_check(adns_state ads,
+                        adns_query *query_io,
+                        adns_answer **answer,
+                        void **context_r);
+
+void adns__timeouts(adns_state ads, int act,
+                   struct timeval **tv_io, struct timeval *tvbuf,
+                   struct timeval now);
+/* If act is !0, then this will also deal with the TCP connection
+ * if previous events broke it or require it to be connected.
+ */
 
-static inline void timevaladd(struct timeval *tv_io, long ms) {
-  struct timeval tmp;
-  assert(ms>=0);
-  tmp= *tv_io;
-  tmp.tv_usec += (ms%1000)*1000000;
-  tmp.tv_sec += ms/1000;
-  if (tmp.tv_usec >= 1000000) { tmp.tv_sec++; tmp.tv_usec -= 1000; }
-  *tv_io= tmp;
-}
+/* From check.c: */
+
+void adns__consistency(adns_state ads, adns_query qu, consistency_checks cc);
+
+/* Useful static inline functions: */
 
 static inline int ctype_whitespace(int c) { return c==' ' || c=='\n' || c=='\t'; }
 static inline int ctype_digit(int c) { return c>='0' && c<='9'; }
 static inline int ctype_alpha(int c) {
-  return (c >= 'a' && c <= 'z') || (c >= 'A' || c <= 'Z');
+  return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+}
+static inline int ctype_822special(int c) { return strchr("()<>@,;:\\\".[]",c) != 0; }
+static inline int ctype_domainunquoted(int c) {
+  return ctype_alpha(c) || ctype_digit(c) || (strchr("-_/+",c) != 0);
 }
 
+static inline int errno_resources(int e) { return e==ENOMEM || e==ENOBUFS; }
+
 /* Useful macros */
 
 #define MEM_ROUND(sz) \
   (( ((sz)+sizeof(union maxalign)-1) / sizeof(union maxalign) ) \
    * sizeof(union maxalign) )
 
-#define LIST_INIT(list) ((list).head= (list).tail= 0)
-#define LINK_INIT(link) ((link).next= (link).back= 0)
-
-#define LIST_UNLINK_PART(list,node,part) \
-  do { \
-    if ((node)->part back) (node)->part back->part next= (node)->part next; \
-      else                                  (list).head= (node)->part next; \
-    if ((node)->part next) (node)->part next->part back= (node)->part back; \
-      else                                  (list).tail= (node)->part back; \
-  } while(0)
-
-#define LIST_LINK_TAIL_PART(list,node,part) \
-  do { \
-    (node)->part next= 0; \
-    (node)->part back= (list).tail; \
-    if ((list).tail) (list).tail->part next= (node); else (list).head= (node); \
-    (list).tail= (node); \
-  } while(0)
-
-#define LIST_UNLINK(list,node) LIST_UNLINK_PART(list,node,)
-#define LIST_LINK_TAIL(list,node) LIST_LINK_TAIL_PART(list,node,)
-
 #define GETIL_B(cb) (((dgram)[(cb)++]) & 0x0ff)
 #define GET_B(cb,tv) ((tv)= GETIL_B((cb)))
 #define GET_W(cb,tv) ((tv)=0, (tv)|=(GETIL_B((cb))<<8), (tv)|=GETIL_B(cb), (tv))
index 5c4bdaf7a9196fe9ffbc67eb52c8dbd4c21cc427..73f53f79f5a8b7ae80ac2807e572a893ecea9355 100644 (file)
@@ -3,7 +3,12 @@
  * - parsing assistance functions (mainly for domains inside datagrams)
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -30,13 +35,12 @@ int vbuf__append_quoted1035(vbuf *vb, const byte *buf, int len) {
     qbuf[0]= 0;
     for (i=0; i<len; i++) {
       ch= buf[i];
-      if (ch == '.' || ch == '"' || ch == '(' || ch == ')' ||
-         ch == '@' || ch == ';' || ch == '$' || ch == '\\') {
-       sprintf(qbuf,"\\%c",ch);
-       break;
-      } else if (ch <= ' ' || ch >= 127) {
+      if (ch <= ' ' || ch >= 127) {
        sprintf(qbuf,"\\%03o",ch);
        break;
+      } else if (!ctype_domainunquoted(ch)) {
+       sprintf(qbuf,"\\%c",ch);
+       break;
       }
     }
     if (!adns__vbuf_append(vb,buf,i) || !adns__vbuf_append(vb,qbuf,strlen(qbuf)))
@@ -65,10 +69,9 @@ void adns__findlabel_start(findlabel_state *fls, adns_state ads,
 
 adns_status adns__findlabel_next(findlabel_state *fls,
                                 int *lablen_r, int *labstart_r) {
-  int lablen, jumped, jumpto;
+  int lablen, jumpto;
   const char *dgram;
 
-  jumped= 0;
   dgram= fls->dgram;
   for (;;) {
     if (fls->cbyte >= fls->dglen) goto x_truncated;
@@ -76,10 +79,6 @@ adns_status adns__findlabel_next(findlabel_state *fls,
     GET_B(fls->cbyte,lablen);
     if (!(lablen & 0x0c0)) break;
     if ((lablen & 0x0c0) != 0x0c0) return adns_s_unknownformat;
-    if (jumped++) {
-      adns__diag(fls->ads,fls->serv,fls->qu,"compressed datagram contains loop");
-      return adns_s_invalidresponse;
-    }
     if (fls->cbyte >= fls->dglen) goto x_truncated;
     if (fls->cbyte >= fls->max) goto x_badresponse;
     GET_B(fls->cbyte,jumpto);
@@ -100,7 +99,6 @@ adns_status adns__findlabel_next(findlabel_state *fls,
     if (fls->dmend_r) *(fls->dmend_r)= fls->cbyte;
   }
   *lablen_r= lablen;
-/*if (labstart_r) fprintf(stderr,"label %d >%.*s<\n",lablen,lablen,fls->dgram+*labstart_r);*/
   return adns_s_ok;
 
  x_truncated:
diff --git a/src/poll.c b/src/poll.c
new file mode 100644 (file)
index 0000000..63de431
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * poll.c
+ * - wrappers for poll(2)
+ */
+/*
+ *  This file is
+ *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ */
+
+#include <limits.h>
+#include <string.h>
+
+#include "internal.h"
+
+#ifdef HAVE_POLL
+
+int adns_beforepoll(adns_state ads, struct pollfd *fds, int *nfds_io, int *timeout_io,
+                   const struct timeval *now) {
+  struct timeval tv_nowbuf, tv_tobuf, *tv_to;
+  int space, found, timeout_ms, r;
+  struct pollfd fds_tmp[MAX_POLLFDS];
+
+  adns__consistency(ads,0,cc_entex);
+
+  if (timeout_io) {
+    adns__must_gettimeofday(ads,&now,&tv_nowbuf);
+    if (!now) { *nfds_io= 0; r= 0; goto xit; }
+
+    timeout_ms= *timeout_io;
+    if (timeout_ms == -1) {
+      tv_to= 0;
+    } else {
+      tv_tobuf.tv_sec= timeout_ms / 1000;
+      tv_tobuf.tv_usec= (timeout_ms % 1000)*1000;
+      tv_to= &tv_tobuf;
+    }
+
+    adns__timeouts(ads, 0, &tv_to,&tv_tobuf, *now);
+
+    if (tv_to) {
+      assert(tv_to == &tv_tobuf);
+      timeout_ms= (tv_tobuf.tv_usec+999)/1000;
+      assert(tv_tobuf.tv_sec < (INT_MAX-timeout_ms)/1000);
+      timeout_ms += tv_tobuf.tv_sec*1000;
+    } else {
+      timeout_ms= -1;
+    }
+    *timeout_io= timeout_ms;
+  }
+  
+  space= *nfds_io;
+  if (space >= MAX_POLLFDS) {
+    found= adns__pollfds(ads,fds);
+    *nfds_io= found;
+  } else {
+    found= adns__pollfds(ads,fds_tmp);
+    *nfds_io= found;
+    if (space < found) { r= ERANGE; goto xit; }
+    memcpy(fds,fds_tmp,sizeof(struct pollfd)*found);
+  }
+  r= 0;
+xit:
+  adns__consistency(ads,0,cc_entex);
+  return r;
+}
+
+void adns_afterpoll(adns_state ads, const struct pollfd *fds, int nfds,
+                   const struct timeval *now) {
+  struct timeval tv_buf;
+
+  adns__consistency(ads,0,cc_entex);
+  adns__must_gettimeofday(ads,&now,&tv_buf);
+  if (now) {
+    adns__timeouts(ads, 1, 0,0, *now);
+    adns__fdevents(ads, fds,nfds, 0,0,0,0, *now,0);
+  }
+  adns__consistency(ads,0,cc_entex);
+}
+
+int adns_wait_poll(adns_state ads,
+                  adns_query *query_io,
+                  adns_answer **answer_r,
+                  void **context_r) {
+  int r, nfds, to;
+  struct pollfd fds[MAX_POLLFDS];
+  
+  adns__consistency(ads,0,cc_entex);
+
+  for (;;) {
+    r= adns__internal_check(ads,query_io,answer_r,context_r);
+    if (r != EAGAIN) goto xit;
+    nfds= MAX_POLLFDS; to= -1;
+    adns_beforepoll(ads,fds,&nfds,&to,0);
+    r= poll(fds,nfds,to);
+    if (r == -1) {
+      if (errno == EINTR) {
+       if (ads->iflags & adns_if_eintr) { r= EINTR; goto xit; }
+      } else {
+       adns__diag(ads,-1,0,"poll failed in wait: %s",strerror(errno));
+       adns_globalsystemfailure(ads);
+      }
+    } else {
+      assert(r >= 0);
+      adns_afterpoll(ads,fds,nfds,0);
+    }
+  }
+
+ xit:
+  adns__consistency(ads,0,cc_entex);
+  return r;
+}
+
+#endif
index 2302c811705f630a49ed29ef6a29af6eab11c726..6cfebb5d00d0c25611fac4fbbcba4dfdb2ceeb2e 100644 (file)
@@ -5,7 +5,12 @@
  * - query submission and cancellation (user-visible and internal)
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -27,7 +32,6 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <errno.h>
-#include <string.h>
 
 #include <sys/time.h>
 
@@ -42,12 +46,13 @@ static adns_query query_alloc(adns_state ads, const typeinfo *typei,
   qu->answer= malloc(sizeof(*qu->answer));  if (!qu->answer) { free(qu); return 0; }
   
   qu->ads= ads;
-  qu->state= query_udp;
+  qu->state= query_tosend;
   qu->back= qu->next= qu->parent= 0;
   LIST_INIT(qu->children);
   LINK_INIT(qu->siblings);
   LIST_INIT(qu->allocations);
   qu->interim_allocd= 0;
+  qu->preserved_allocd= 0;
   qu->final_allocspace= 0;
 
   qu->typei= typei;
@@ -61,11 +66,11 @@ static adns_query query_alloc(adns_state ads, const typeinfo *typei,
   adns__vbuf_init(&qu->search_vb);
   qu->search_origlen= qu->search_pos= qu->search_doneabs= 0;
 
-  qu->id= 0;
+  qu->id= -2; /* will be overwritten with real id before we leave adns */
   qu->flags= flags;
-  qu->udpretries= 0;
+  qu->retries= 0;
   qu->udpnextserver= 0;
-  qu->udpsent= qu->tcpfailed= 0;
+  qu->udpsent= 0;
   timerclear(&qu->timeout);
   qu->expires= now.tv_sec + MAXTTLBELIEVE;
 
@@ -86,7 +91,7 @@ static void query_submit(adns_state ads, adns_query qu,
                         const typeinfo *typei, vbuf *qumsg_vb, int id,
                         adns_queryflags flags, struct timeval now) {
   /* Fills in the query message in for a previously-allocated query,
-   * and submits it.  Cannot fail.
+   * and submits it.  Cannot fail.  Takes over the memory for qumsg_vb.
    */
 
   qu->vb= *qumsg_vb;
@@ -99,8 +104,7 @@ static void query_submit(adns_state ads, adns_query qu,
   qu->query_dglen= qu->vb.used;
   memcpy(qu->query_dgram,qu->vb.buf,qu->vb.used);
   
-  adns__query_udp(qu,now);
-  adns__autosys(ads,now);
+  adns__query_send(qu,now);
 }
 
 adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
@@ -123,16 +127,24 @@ static void query_simple(adns_state ads, adns_query qu,
                         const char *owner, int ol,
                         const typeinfo *typei, adns_queryflags flags,
                         struct timeval now) {
-  vbuf vb;
+  vbuf vb_new;
   int id;
   adns_status stat;
 
-  adns__vbuf_init(&vb);
-  
-  stat= adns__mkquery(ads,&vb,&id, owner,ol, typei,flags);
-  if (stat) { adns__query_fail(qu,stat); return; }
+  stat= adns__mkquery(ads,&qu->vb,&id, owner,ol, typei,flags);
+  if (stat) {
+    if (stat == adns_s_querydomaintoolong && (flags & adns_qf_search)) {
+      adns__search_next(ads,qu,now);
+      return;
+    } else {
+      adns__query_fail(qu,stat);
+      return;
+    }
+  }
 
-  query_submit(ads,qu, typei,&vb,id, flags,now);
+  vb_new= qu->vb;
+  adns__vbuf_init(&qu->vb);
+  query_submit(ads,qu, typei,&vb_new,id, flags,now);
 }
 
 void adns__search_next(adns_state ads, adns_query qu, struct timeval now) {
@@ -181,7 +193,7 @@ static int save_owner(adns_query qu, const char *owner, int ol) {
   ans= qu->answer;
   assert(!ans->owner);
 
-  ans->owner= adns__alloc_interim(qu,ol+1);  if (!ans->owner) return 0;
+  ans->owner= adns__alloc_preserved(qu,ol+1);  if (!ans->owner) return 0;
 
   memcpy(ans->owner,owner,ol);
   ans->owner[ol]= 0;
@@ -201,8 +213,10 @@ int adns_submit(adns_state ads,
   adns_query qu;
   const char *p;
 
+  adns__consistency(ads,0,cc_entex);
+
   typei= adns__findtype(type);
-  if (!typei) return adns_s_unknownrrtype;
+  if (!typei) return ENOSYS;
 
   r= gettimeofday(&now,0); if (r) goto x_errno;
   qu= query_alloc(ads,typei,flags,now); if (!qu) goto x_errno;
@@ -219,6 +233,7 @@ int adns_submit(adns_state ads,
                                 
   if (ol>=1 && owner[ol-1]=='.' && (ol<2 || owner[ol-2]!='\\')) {
     flags &= ~adns_qf_search;
+    qu->flags= flags;
     ol--;
   }
 
@@ -236,18 +251,65 @@ int adns_submit(adns_state ads,
     }
     query_simple(ads,qu, owner,ol, typei,flags, now);
   }
+  adns__autosys(ads,now);
+  adns__consistency(ads,qu,cc_entex);
   return 0;
 
  x_adnsfail:
   adns__query_fail(qu,stat);
+  adns__consistency(ads,qu,cc_entex);
   return 0;
 
  x_errno:
   r= errno;
   assert(r);
+  adns__consistency(ads,0,cc_entex);
   return r;
 }
 
+int adns_submit_reverse_any(adns_state ads,
+                           const struct sockaddr *addr,
+                           const char *zone,
+                           adns_rrtype type,
+                           adns_queryflags flags,
+                           void *context,
+                           adns_query *query_r) {
+  const unsigned char *iaddr;
+  char *buf, *buf_free;
+  char shortbuf[100];
+  int r, lreq;
+
+  flags &= ~adns_qf_search;
+
+  if (addr->sa_family != AF_INET) return ENOSYS;
+  iaddr= (const unsigned char*) &(((const struct sockaddr_in*)addr) -> sin_addr);
+
+  lreq= strlen(zone) + 4*4 + 1;
+  if (lreq > sizeof(shortbuf)) {
+    buf= malloc(strlen(zone) + 4*4 + 1);
+    if (!buf) return errno;
+    buf_free= buf;
+  } else {
+    buf= shortbuf;
+    buf_free= 0;
+  }
+  sprintf(buf, "%d.%d.%d.%d.%s", iaddr[3], iaddr[2], iaddr[1], iaddr[0], zone);
+
+  r= adns_submit(ads,buf,type,flags,context,query_r);
+  free(buf_free);
+  return r;
+}
+
+int adns_submit_reverse(adns_state ads,
+                       const struct sockaddr *addr,
+                       adns_rrtype type,
+                       adns_queryflags flags,
+                       void *context,
+                       adns_query *query_r) {
+  if (type != adns_r_ptr && type != adns_r_ptr_raw) return EINVAL;
+  return adns_submit_reverse_any(ads,addr,"in-addr.arpa",type,flags,context,query_r);
+}
+
 int adns_synchronous(adns_state ads,
                     const char *owner,
                     adns_rrtype type,
@@ -277,9 +339,23 @@ static void *alloc_common(adns_query qu, size_t sz) {
 }
 
 void *adns__alloc_interim(adns_query qu, size_t sz) {
+  void *rv;
+  
   sz= MEM_ROUND(sz);
+  rv= alloc_common(qu,sz);
+  if (!rv) return 0;
   qu->interim_allocd += sz;
-  return alloc_common(qu,sz);
+  return rv;
+}
+
+void *adns__alloc_preserved(adns_query qu, size_t sz) {
+  void *rv;
+  
+  sz= MEM_ROUND(sz);
+  rv= adns__alloc_interim(qu,sz);
+  if (!rv) return 0;
+  qu->preserved_allocd += sz;
+  return rv;
 }
 
 void *adns__alloc_mine(adns_query qu, size_t sz) {
@@ -298,6 +374,7 @@ void adns__transfer_interim(adns_query from, adns_query to, void *block, size_t
   LIST_UNLINK(from->allocations,an);
   LIST_LINK_TAIL(to->allocations,an);
 
+  sz= MEM_ROUND(sz);
   from->interim_allocd -= sz;
   to->interim_allocd += sz;
 
@@ -327,15 +404,14 @@ static void cancel_children(adns_query qu) {
     ncqu= cqu->siblings.next;
     adns_cancel(cqu);
   }
-  LIST_INIT(qu->children);
 }
 
-void adns__reset_cnameonly(adns_query qu) {
+void adns__reset_preserved(adns_query qu) {
   assert(!qu->final_allocspace);
   cancel_children(qu);
   qu->answer->nrrs= 0;
   qu->answer->rrs.untyped= 0;
-  qu->interim_allocd= qu->answer->cname ? MEM_ROUND(strlen(qu->answer->cname)+1) : 0;
+  qu->interim_allocd= qu->preserved_allocd;
 }
 
 static void free_query_allocs(adns_query qu) {
@@ -343,19 +419,31 @@ static void free_query_allocs(adns_query qu) {
 
   cancel_children(qu);
   for (an= qu->allocations.head; an; an= ann) { ann= an->next; free(an); }
+  LIST_INIT(qu->allocations);
   adns__vbuf_free(&qu->vb);
+  adns__vbuf_free(&qu->search_vb);
+  free(qu->query_dgram);
+  qu->query_dgram= 0;
 }
 
 void adns_cancel(adns_query qu) {
+  adns_state ads;
+
+  ads= qu->ads;
+  adns__consistency(ads,qu,cc_entex);
+  if (qu->parent) LIST_UNLINK_PART(qu->parent->children,qu,siblings.);
   switch (qu->state) {
-  case query_udp: case query_tcpwait: case query_tcpsent:
-    LIST_UNLINK(qu->ads->timew,qu);
+  case query_tosend:
+    LIST_UNLINK(ads->udpw,qu);
     break;
-  case query_child:
-    LIST_UNLINK(qu->ads->childw,qu);
+  case query_tcpw:
+    LIST_UNLINK(ads->tcpw,qu);
+    break;
+  case query_childw:
+    LIST_UNLINK(ads->childw,qu);
     break;
   case query_done:
-    LIST_UNLINK(qu->ads->output,qu);
+    LIST_UNLINK(ads->output,qu);
     break;
   default:
     abort();
@@ -363,6 +451,7 @@ void adns_cancel(adns_query qu) {
   free_query_allocs(qu);
   free(qu->answer);
   free(qu);
+  adns__consistency(ads,0,cc_entex);
 }
 
 void adns__update_expires(adns_query qu, unsigned long ttl, struct timeval now) {
@@ -401,9 +490,12 @@ static void makefinal_query(adns_query qu) {
   return;
   
  x_nomem:
-  qu->answer->status= adns_s_nomemory;
+  qu->preserved_allocd= 0;
   qu->answer->cname= 0;
-  adns__reset_cnameonly(qu);
+  qu->answer->owner= 0;
+  adns__reset_preserved(qu); /* (but we just threw away the preserved stuff) */
+
+  qu->answer->status= adns_s_nomemory;
   free_query_allocs(qu);
 }
 
@@ -411,6 +503,8 @@ void adns__query_done(adns_query qu) {
   adns_answer *ans;
   adns_query parent;
 
+  cancel_children(qu);
+
   qu->id= -1;
   ans= qu->answer;
 
@@ -437,17 +531,20 @@ void adns__query_done(adns_query qu) {
   parent= qu->parent;
   if (parent) {
     LIST_UNLINK_PART(parent->children,qu,siblings.);
+    LIST_UNLINK(qu->ads->childw,parent);
     qu->ctx.callback(parent,qu);
     free_query_allocs(qu);
+    free(qu->answer);
     free(qu);
   } else {
     makefinal_query(qu);
     LIST_LINK_TAIL(qu->ads->output,qu);
+    qu->state= query_done;
   }
 }
 
 void adns__query_fail(adns_query qu, adns_status stat) {
-  adns__reset_cnameonly(qu);
+  adns__reset_preserved(qu);
   qu->answer->status= stat;
   adns__query_done(qu);
 }
index ab7c8ff4aadbc37c6cdb589baf43b49aa384cc88..83988a026e4995282d564014fb6ab748a06360e7 100644 (file)
@@ -3,7 +3,12 @@
  * - main handling and parsing routine for received datagrams
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  */
 
 #include <stdlib.h>
-#include <string.h>
 
 #include "internal.h"
     
 void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
-                    int serv, struct timeval now) {
+                    int serv, int viatcp, struct timeval now) {
   int cbyte, rrstart, wantedrrs, rri, foundsoa, foundns, cname_here;
   int id, f1, f2, qdcount, ancount, nscount, arcount;
   int flg_ra, flg_rd, flg_tc, flg_qr, opcode;
@@ -73,64 +77,84 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
     adns__diag(ads,serv,0,"server sent us unknown opcode %d (wanted 0=QUERY)",opcode);
     return;
   }
-  if (!qdcount) {
-    adns__diag(ads,serv,0,"server sent reply without quoting our question");
-    return;
-  } else if (qdcount>1) {
-    adns__diag(ads,serv,0,"server claimed to answer %d questions with one message",
-              qdcount);
-    return;
-  }
-  for (qu= ads->timew.head; qu; qu= nqu) {
-    nqu= qu->next;
-    if (qu->id != id) continue;
-    if (dglen < qu->query_dglen) continue;
-    if (memcmp(qu->query_dgram+DNS_HDRSIZE,
-              dgram+DNS_HDRSIZE,
-              qu->query_dglen-DNS_HDRSIZE))
-      continue;
-    break;
-  }
-  if (!qu) {
-    if (ads->iflags & adns_if_debug) {
-      adns__vbuf_init(&tempvb);
-      adns__debug(ads,serv,0,"reply not found, id %02x, query owner %s",
-                 id, adns__diag_domain(ads,serv,0,&tempvb,dgram,dglen,DNS_HDRSIZE));
-      adns__vbuf_free(&tempvb);
+
+  qu= 0;
+  /* See if we can find the relevant query, or leave qu=0 otherwise ... */   
+
+  if (qdcount == 1) {
+    for (qu= viatcp ? ads->tcpw.head : ads->udpw.head; qu; qu= nqu) {
+      nqu= qu->next;
+      if (qu->id != id) continue;
+      if (dglen < qu->query_dglen) continue;
+      if (memcmp(qu->query_dgram+DNS_HDRSIZE,
+                dgram+DNS_HDRSIZE,
+                qu->query_dglen-DNS_HDRSIZE))
+       continue;
+      if (viatcp) {
+       assert(qu->state == query_tcpw);
+      } else {
+       assert(qu->state == query_tosend);
+       if (!(qu->udpsent & (1<<serv))) continue;
+      }
+      break;
+    }
+    if (qu) {
+      /* We're definitely going to do something with this query now */
+      if (viatcp) LIST_UNLINK(ads->tcpw,qu);
+      else LIST_UNLINK(ads->udpw,qu);
     }
-    return;
   }
-  anstart= qu->query_dglen;
-  arstart= -1;
-
-  LIST_UNLINK(ads->timew,qu);
-  /* We're definitely going to do something with this query now */
   
+  /* If we're going to ignore the packet, we return as soon as we have
+   * failed the query (if any) and printed the warning message (if
+   * any).
+   */
   switch (rcode) {
   case rcode_noerror:
   case rcode_nxdomain:
     break;
   case rcode_formaterror:
     adns__warn(ads,serv,qu,"server cannot understand our query (Format Error)");
-    adns__query_fail(qu,adns_s_rcodeformaterror);
+    if (qu) adns__query_fail(qu,adns_s_rcodeformaterror);
     return;
   case rcode_servfail:
-    adns__query_fail(qu,adns_s_rcodeservfail);
+    if (qu) adns__query_fail(qu,adns_s_rcodeservfail);
+    else adns__debug(ads,serv,qu,"server failure on unidentifiable query");
     return;
   case rcode_notimp:
     adns__warn(ads,serv,qu,"server claims not to implement our query");
-    adns__query_fail(qu,adns_s_rcodenotimplemented);
+    if (qu) adns__query_fail(qu,adns_s_rcodenotimplemented);
     return;
   case rcode_refused:
-    adns__warn(ads,serv,qu,"server refused our query");
-    adns__query_fail(qu,adns_s_rcoderefused);
+    adns__debug(ads,serv,qu,"server refused our query");
+    if (qu) adns__query_fail(qu,adns_s_rcoderefused);
     return;
   default:
     adns__warn(ads,serv,qu,"server gave unknown response code %d",rcode);
-    adns__query_fail(qu,adns_s_rcodeunknown);
+    if (qu) adns__query_fail(qu,adns_s_rcodeunknown);
     return;
   }
 
+  if (!qu) {
+    if (!qdcount) {
+      adns__diag(ads,serv,0,"server sent reply without quoting our question");
+    } else if (qdcount>1) {
+      adns__diag(ads,serv,0,"server claimed to answer %d questions with one message",
+                qdcount);
+    } else if (ads->iflags & adns_if_debug) {
+      adns__vbuf_init(&tempvb);
+      adns__debug(ads,serv,0,"reply not found, id %02x, query owner %s",
+                 id, adns__diag_domain(ads,serv,0,&tempvb,dgram,dglen,DNS_HDRSIZE));
+      adns__vbuf_free(&tempvb);
+    }
+    return;
+  }
+
+  /* We're definitely going to do something with this packet and this query now. */
+  
+  anstart= qu->query_dglen;
+  arstart= -1;
+
   /* Now, take a look at the answer section, and see if it is complete.
    * If it has any CNAMEs we stuff them in the answer.
    */
@@ -161,16 +185,25 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
       if (qu->flags & adns_qf_cname_forbid) {
        adns__query_fail(qu,adns_s_prohibitedcname);
        return;
-      } else if (!qu->cname_dgram) { /* Ignore second and subsequent CNAMEs */
+      } else if (qu->cname_dgram) { /* Ignore second and subsequent CNAME(s) */
+       adns__debug(ads,serv,qu,"allegedly canonical name %s is actually alias for %s",
+                   qu->answer->cname,
+                   adns__diag_domain(ads,serv,qu, &qu->vb, dgram,dglen,rdstart));
+       adns__query_fail(qu,adns_s_prohibitedcname);
+       return;
+      } else if (wantedrrs) { /* Ignore CNAME(s) after RR(s). */
+       adns__debug(ads,serv,qu,"ignoring CNAME (to %s) coexisting with RR",
+                   adns__diag_domain(ads,serv,qu, &qu->vb, dgram,dglen,rdstart));
+      } else {
        qu->cname_begin= rdstart;
        qu->cname_dglen= dglen;
        st= adns__parse_domain(ads,serv,qu, &qu->vb,
-                              qu->flags & adns_qf_quoteok_cname ? pdf_quoteok : 0,
+                              qu->flags & adns_qf_quotefail_cname ? 0 : pdf_quoteok,
                               dgram,dglen, &rdstart,rdstart+rdlength);
        if (!qu->vb.used) goto x_truncated;
        if (st) { adns__query_fail(qu,st); return; }
        l= strlen(qu->vb.buf)+1;
-       qu->answer->cname= adns__alloc_interim(qu,l);
+       qu->answer->cname= adns__alloc_preserved(qu,l);
        if (!qu->answer->cname) { adns__query_fail(qu,adns_s_nomemory); return; }
 
        qu->cname_dgram= adns__alloc_mine(qu,dglen);
@@ -184,10 +217,6 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
         * TCP.  If there is no truncation we can use the whole answer if
         * it contains the relevant info.
         */
-      } else {
-       adns__debug(ads,serv,qu,"ignoring duplicate CNAME (%s, as well as %s)",
-                   adns__diag_domain(ads,serv,qu, &qu->vb, dgram,dglen,rdstart),
-                   qu->answer->cname);
       }
     } else if (rrtype == (qu->typei->type & adns__rrt_typemask)) {
       wantedrrs++;
@@ -251,14 +280,14 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
     if (cname_here) goto x_restartquery;
 
     /* Bloody hell, I thought we asked for recursion ? */
-    if (flg_rd) {
-      adns__diag(ads,serv,qu,"server thinks we didn't ask for recursive lookup");
-    }
     if (!flg_ra) {
       adns__diag(ads,serv,qu,"server is not willing to do recursive lookups for us");
       adns__query_fail(qu,adns_s_norecurse);
     } else {
-      adns__diag(ads,serv,qu,"server claims to do recursion, but gave us a referral");
+      if (!flg_rd)
+       adns__diag(ads,serv,qu,"server thinks we didn't ask for recursive lookup");
+      else
+       adns__debug(ads,serv,qu,"server claims to do recursion, but gave us a referral");
       adns__query_fail(qu,adns_s_invalidresponse);
     }
     return;
@@ -303,11 +332,10 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
 
   /* This may have generated some child queries ... */
   if (qu->children.head) {
-    qu->state= query_child;
+    qu->state= query_childw;
     LIST_LINK_TAIL(ads->childw,qu);
     return;
   }
-
   adns__query_done(qu);
   return;
 
@@ -321,7 +349,6 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
   qu->flags |= adns_qf_usevc;
   
  x_restartquery:
-  
   if (qu->cname_dgram) {
     st= adns__mkquery_frdgram(qu->ads,&qu->vb,&qu->id,
                              qu->cname_dgram, qu->cname_dglen, qu->cname_begin,
@@ -336,6 +363,8 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
     memcpy(newquery,qu->vb.buf,qu->vb.used);
   }
   
-  adns__reset_cnameonly(qu);
-  adns__query_udp(qu,now);
+  if (qu->state == query_tcpw) qu->state= query_tosend;
+  qu->retries= 0;
+  adns__reset_preserved(qu);
+  adns__query_send(qu,now);
 }
index 2765dc4a8d3c884fb3ccc785f38bed549216447c..f4be5dd993d79ce366aa15b5decaac2f2b47fd39 100644 (file)
@@ -4,7 +4,12 @@
  * - management of global state
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -23,7 +28,6 @@
 
 #include <stdlib.h>
 #include <errno.h>
-#include <string.h>
 #include <limits.h>
 #include <unistd.h>
 #include <fcntl.h>
@@ -35,7 +39,7 @@
 
 #include "internal.h"
 
-static void readconfig(adns_state ads, const char *filename);
+static void readconfig(adns_state ads, const char *filename, int warnmissing);
 
 static void addserver(adns_state ads, struct in_addr addr) {
   int i;
@@ -58,6 +62,11 @@ static void addserver(adns_state ads, struct in_addr addr) {
   ads->nservers++;
 }
 
+static void freesearchlist(adns_state ads) {
+  if (ads->nsearchlist) free(*ads->searchlist);
+  free(ads->searchlist);
+}
+
 static void saveerr(adns_state ads, int en) {
   if (!ads->configerrno) ads->configerrno= en;
 }
@@ -129,7 +138,7 @@ static void ccf_search(adns_state ads, const char *fn, int lno, const char *buf)
     *newchars++ = 0;
   }
 
-  free(ads->searchlist);
+  freesearchlist(ads);
   ads->nsearchlist= count;
   ads->searchlist= newptrs;
 }
@@ -227,6 +236,21 @@ static void ccf_options(adns_state ads, const char *fn, int lno, const char *buf
       ads->searchndots= v;
       continue;
     }
+    if (l>=12 && !memcmp(word,"adns_checkc:",12)) {
+      if (!strcmp(word+12,"none")) {
+       ads->iflags &= ~adns_if_checkc_freq;
+       ads->iflags |= adns_if_checkc_entex;
+      } else if (!strcmp(word+12,"entex")) {
+       ads->iflags &= ~adns_if_checkc_freq;
+       ads->iflags |= adns_if_checkc_entex;
+      } else if (!strcmp(word+12,"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);
+      }
+      continue;
+    }
     adns__diag(ads,-1,0,"%s:%d: unknown option `%.*s'", fn,lno, l,word);
   }
 }
@@ -240,7 +264,7 @@ static void ccf_include(adns_state ads, const char *fn, int lno, const char *buf
     configparseerr(ads,fn,lno,"`include' directive with no filename");
     return;
   }
-  readconfig(ads,buf);
+  readconfig(ads,buf,1);
 }
 
 static const struct configcommandinfo {
@@ -375,13 +399,14 @@ static const char *instrum_getenv(adns_state ads, const char *envvar) {
   return value;
 }
 
-static void readconfig(adns_state ads, const char *filename) {
+static void readconfig(adns_state ads, const char *filename, int warnmissing) {
   getline_ctx gl_ctx;
   
   gl_ctx.file= fopen(filename,"r");
   if (!gl_ctx.file) {
     if (errno == ENOENT) {
-      adns__debug(ads,-1,0,"configuration file `%s' does not exist",filename);
+      if (warnmissing)
+       adns__debug(ads,-1,0,"configuration file `%s' does not exist",filename);
       return;
     }
     saveerr(ads,errno);
@@ -410,7 +435,7 @@ static void readconfigenv(adns_state ads, const char *envvar) {
     return;
   }
   filename= instrum_getenv(ads,envvar);
-  if (filename) readconfig(ads,filename);
+  if (filename) readconfig(ads,filename,1);
 }
 
 static void readconfigenvtext(adns_state ads, const char *envvar) {
@@ -441,18 +466,22 @@ static int init_begin(adns_state *ads_r, adns_initflags flags, FILE *diagfile) {
 
   ads->iflags= flags;
   ads->diagfile= diagfile;
-  LIST_INIT(ads->timew);
+  ads->configerrno= 0;
+  LIST_INIT(ads->udpw);
+  LIST_INIT(ads->tcpw);
   LIST_INIT(ads->childw);
   LIST_INIT(ads->output);
+  ads->forallnext= 0;
   ads->nextid= 0x311f;
   ads->udpsocket= ads->tcpsocket= -1;
   adns__vbuf_init(&ads->tcpsend);
   adns__vbuf_init(&ads->tcprecv);
+  ads->tcprecv_skip= 0;
   ads->nservers= ads->nsortlist= ads->nsearchlist= ads->tcpserver= 0;
-  ads->tcpstate= server_disconnected;
-  ads->searchlist= 0;
   ads->searchndots= 1;
+  ads->tcpstate= server_disconnected;
   timerclear(&ads->tcptimeout);
+  ads->searchlist= 0;
 
   *ads_r= ads;
   return 0;
@@ -507,7 +536,8 @@ int adns_init(adns_state *ads_r, adns_initflags flags, FILE *diagfile) {
   ccf_options(ads,"RES_OPTIONS",-1,res_options);
   ccf_options(ads,"ADNS_RES_OPTIONS",-1,adns_res_options);
 
-  readconfig(ads,"/etc/resolv.conf");
+  readconfig(ads,"/etc/resolv.conf",1);
+  readconfig(ads,"/etc/resolv-adns.conf",0);
   readconfigenv(ads,"RES_CONF");
   readconfigenv(ads,"ADNS_RES_CONF");
 
@@ -529,6 +559,7 @@ int adns_init(adns_state *ads_r, adns_initflags flags, FILE *diagfile) {
   r= init_finish(ads);
   if (r) return r;
 
+  adns__consistency(ads,0,cc_entex);
   *ads_r= ads;
   return 0;
 }
@@ -548,13 +579,17 @@ int adns_init_strcfg(adns_state *ads_r, adns_initflags flags,
   }
 
   r= init_finish(ads);  if (r) return r;
+  adns__consistency(ads,0,cc_entex);
   *ads_r= ads;
   return 0;
 }
 
+
 void adns_finish(adns_state ads) {
+  adns__consistency(ads,0,cc_entex);
   for (;;) {
-    if (ads->timew.head) adns_cancel(ads->timew.head);
+    if (ads->udpw.head) adns_cancel(ads->udpw.head);
+    else if (ads->tcpw.head) adns_cancel(ads->tcpw.head);
     else if (ads->childw.head) adns_cancel(ads->childw.head);
     else if (ads->output.head) adns_cancel(ads->output.head);
     else break;
@@ -563,5 +598,46 @@ void adns_finish(adns_state ads) {
   if (ads->tcpsocket >= 0) close(ads->tcpsocket);
   adns__vbuf_free(&ads->tcpsend);
   adns__vbuf_free(&ads->tcprecv);
+  freesearchlist(ads);
   free(ads);
 }
+
+void adns_forallqueries_begin(adns_state ads) {
+  adns__consistency(ads,0,cc_entex);
+  ads->forallnext=
+    ads->udpw.head ? ads->udpw.head :
+    ads->tcpw.head ? ads->tcpw.head :
+    ads->childw.head ? ads->childw.head :
+    ads->output.head;
+}
+  
+adns_query adns_forallqueries_next(adns_state ads, void **context_r) {
+  adns_query qu, nqu;
+
+  adns__consistency(ads,0,cc_entex);
+  nqu= ads->forallnext;
+  for (;;) {
+    qu= nqu;
+    if (!qu) return 0;
+    if (qu->next) {
+      nqu= qu->next;
+    } else if (qu == ads->udpw.tail) {
+      nqu=
+       ads->tcpw.head ? ads->tcpw.head :
+       ads->childw.head ? ads->childw.head :
+       ads->output.head;
+    } else if (qu == ads->tcpw.tail) {
+      nqu=
+       ads->childw.head ? ads->childw.head :
+       ads->output.head;
+    } else if (qu == ads->childw.tail) {
+      nqu= ads->output.head;
+    } else {
+      nqu= 0;
+    }
+    if (!qu->parent) break;
+  }
+  ads->forallnext= nqu;
+  if (context_r) *context_r= qu->ctx.ext;
+  return qu;
+}
index e373b48c77bdb010f0f1ac9a451af939f98aac33..47785e6b57bab73c7a773a12b54630d54d789bc2 100644 (file)
@@ -4,7 +4,12 @@
  * - send queries
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  */
 
 #include <errno.h>
-#include <string.h>
 
 #include <sys/types.h>
 #include <sys/uio.h>
 
 #include "internal.h"
+#include "tvarith.h"
 
 #define MKQUERY_START(vb) (rqp= (vb)->buf+(vb)->used)
 #define MKQUERY_ADDB(b) *rqp++= (b)
@@ -72,17 +77,17 @@ static adns_status mkquery_footer(vbuf *vb, adns_rrtype type) {
 adns_status adns__mkquery(adns_state ads, vbuf *vb, int *id_r,
                          const char *owner, int ol,
                          const typeinfo *typei, adns_queryflags flags) {
-  int ll, c, nlabs;
+  int ll, c, nbytes;
   byte label[255], *rqp;
   const char *p, *pe;
   adns_status st;
 
-  st= mkquery_header(ads,vb,id_r,strlen(owner)+2); if (st) return st;
+  st= mkquery_header(ads,vb,id_r,ol+2); if (st) return st;
   
   MKQUERY_START(vb);
 
   p= owner; pe= owner+ol;
-  nlabs= 0;
+  nbytes= 0;
   while (p!=pe) {
     ll= 0;
     while (p!=pe && (c= *p++)!='.') {
@@ -110,7 +115,9 @@ adns_status adns__mkquery(adns_state ads, vbuf *vb, int *id_r,
       label[ll++]= c;
     }
     if (!ll) return adns_s_querydomaininvalid;
-    if (nlabs++ > 63) return adns_s_querydomaintoolong;
+    if (ll > DNS_MAXLABEL) return adns_s_querydomaintoolong;
+    nbytes+= ll+1;
+    if (nbytes >= DNS_MAXDOMAIN) return adns_s_querydomaintoolong;
     MKQUERY_ADDB(ll);
     memcpy(rqp,label,ll); rqp+= ll;
   }
@@ -153,7 +160,7 @@ adns_status adns__mkquery_frdgram(adns_state ads, vbuf *vb, int *id_r,
   return adns_s_ok;
 }
 
-void adns__query_tcp(adns_query qu, struct timeval now) {
+void adns__querysend_tcp(adns_query qu, struct timeval now) {
   byte length[2];
   struct iovec iov[2];
   int wr, r;
@@ -161,15 +168,18 @@ void adns__query_tcp(adns_query qu, struct timeval now) {
 
   if (qu->ads->tcpstate != server_ok) return;
 
+  assert(qu->state == query_tcpw);
+
   length[0]= (qu->query_dglen&0x0ff00U) >>8;
   length[1]= (qu->query_dglen&0x0ff);
 
   ads= qu->ads;
   if (!adns__vbuf_ensure(&ads->tcpsend,ads->tcpsend.used+qu->query_dglen+2)) return;
 
-  timevaladd(&now,TCPMS);
-  qu->timeout= now;
-  qu->state= query_tcpsent;
+  qu->retries++;
+
+  /* Reset idle timeout. */
+  ads->tcptimeout.tv_sec= ads->tcptimeout.tv_usec= 0;
 
   if (ads->tcpsend.used) {
     wr= 0;
@@ -203,26 +213,26 @@ void adns__query_tcp(adns_query qu, struct timeval now) {
 }
 
 static void query_usetcp(adns_query qu, struct timeval now) {
-  timevaladd(&now,TCPMS);
+  qu->state= query_tcpw;
   qu->timeout= now;
-  qu->state= query_tcpwait;
-  LIST_LINK_TAIL(qu->ads->timew,qu);
-  adns__query_tcp(qu,now);
+  timevaladd(&qu->timeout,TCPWAITMS);
+  LIST_LINK_TAIL(qu->ads->tcpw,qu);
+  adns__querysend_tcp(qu,now);
   adns__tcp_tryconnect(qu->ads,now);
 }
 
-void adns__query_udp(adns_query qu, struct timeval now) {
+void adns__query_send(adns_query qu, struct timeval now) {
   struct sockaddr_in servaddr;
   int serv, r;
   adns_state ads;
 
-  assert(qu->state == query_udp);
+  assert(qu->state == query_tosend);
   if ((qu->flags & adns_qf_usevc) || (qu->query_dglen > DNS_MAXUDP)) {
     query_usetcp(qu,now);
     return;
   }
 
-  if (qu->udpretries >= UDPMAXRETRIES) {
+  if (qu->retries >= UDPMAXRETRIES) {
     adns__query_fail(qu,adns_s_timeout);
     return;
   }
@@ -237,13 +247,13 @@ void adns__query_udp(adns_query qu, struct timeval now) {
   
   r= sendto(ads->udpsocket,qu->query_dgram,qu->query_dglen,0,
            (const struct sockaddr*)&servaddr,sizeof(servaddr));
-  if (r<0 && errno == EMSGSIZE) { query_usetcp(qu,now); return; }
-  if (r<0) adns__warn(ads,serv,0,"sendto failed: %s",strerror(errno));
+  if (r<0 && errno == EMSGSIZE) { qu->retries= 0; query_usetcp(qu,now); return; }
+  if (r<0 && errno != EAGAIN) adns__warn(ads,serv,0,"sendto failed: %s",strerror(errno));
   
-  timevaladd(&now,UDPRETRYMS);
   qu->timeout= now;
+  timevaladd(&qu->timeout,UDPRETRYMS);
   qu->udpsent |= (1<<serv);
   qu->udpnextserver= (serv+1)%ads->nservers;
-  qu->udpretries++;
-  LIST_LINK_TAIL(ads->timew,qu);
+  qu->retries++;
+  LIST_LINK_TAIL(ads->udpw,qu);
 }
diff --git a/src/tvarith.h b/src/tvarith.h
new file mode 100644 (file)
index 0000000..a401b4a
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * tvarith.h
+ * - static inline functions for doing arithmetic on timevals
+ */
+/*
+ *  This file is
+ *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef ADNS_TVARITH_H_INCLUDED
+#define ADNS_TVARITH_H_INCLUDED
+
+static inline void timevaladd(struct timeval *tv_io, long ms) {
+  struct timeval tmp;
+  assert(ms>=0);
+  tmp= *tv_io;
+  tmp.tv_usec += (ms%1000)*1000;
+  tmp.tv_sec += ms/1000;
+  if (tmp.tv_usec >= 1000000) { tmp.tv_sec++; tmp.tv_usec -= 1000000; }
+  *tv_io= tmp;
+}
+
+#endif
index c1d613af64008762732eae80fa938e980ec3ded3..43ccc2b25884e6ef58da907f28cad2d61a995168 100644 (file)
@@ -3,7 +3,12 @@
  * - RR-type-specific code, and the machinery to call it
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ *
+ *  It is part of adns, which is
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -21,7 +26,6 @@
  */
 
 #include <stdlib.h>
-#include <string.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -31,7 +35,7 @@
 #include "internal.h"
 
 #define R_NOMEM           return adns_s_nomemory
-#define CSP_ADDSTR(s)     if (!adns__vbuf_appendstr(vb,(s))) R_NOMEM; else;
+#define CSP_ADDSTR(s)     do { if (!adns__vbuf_appendstr(vb,(s))) R_NOMEM; } while (0)
 
 /*
  * order of sections:
@@ -54,7 +58,7 @@
  * _strpair                   (mf,cs)
  * _intstrpair                (mf,cs)
  * _hinfo                     (pa)
- * _mailbox                   (pap)
+ * _mailbox                   (pap +pap_mailbox822)
  * _rp                        (pa)
  * _soa                       (pa,mf,cs)
  * _flat                      (mf)
  */
 
 /*
- * _string               (pap)
- * _textdata, _qstring   (csp)
+ * _qstring               (pap,csp)
  */
 
-static adns_status pap_string(const parseinfo *pai, int *cbyte_io, int max,
+static adns_status pap_qstring(const parseinfo *pai, int *cbyte_io, int max,
                              int *len_r, char **str_r) {
   /* Neither len_r nor str_r may be null.
    * End of datagram (overrun) is indicated by returning adns_s_invaliddata;
@@ -103,7 +106,7 @@ static adns_status pap_string(const parseinfo *pai, int *cbyte_io, int max,
   return adns_s_ok;
 }
 
-static adns_status csp_textdata(vbuf *vb, const char *dp, int len) {
+static adns_status csp_qstring(vbuf *vb, const char *dp, int len) {
   unsigned char ch;
   char buf[10];
   int cn;
@@ -111,10 +114,12 @@ static adns_status csp_textdata(vbuf *vb, const char *dp, int len) {
   CSP_ADDSTR("\"");
   for (cn=0; cn<len; cn++) {
     ch= *dp++;
-    if (ch >= 32 && ch <= 126 && ch != '"' && ch != '\\') {
-      if (!adns__vbuf_append(vb,&ch,1)) R_NOMEM;
-    } else if (ch == '\\') {
+    if (ch == '\\') {
       CSP_ADDSTR("\\\\");
+    } else if (ch == '"') {
+      CSP_ADDSTR("\\\"");
+    } else if (ch >= 32 && ch <= 126) {
+      if (!adns__vbuf_append(vb,&ch,1)) R_NOMEM;
     } else {
       sprintf(buf,"\\x%02x",ch);
       CSP_ADDSTR(buf);
@@ -125,12 +130,8 @@ static adns_status csp_textdata(vbuf *vb, const char *dp, int len) {
   return adns_s_ok;
 }
 
-static adns_status csp_qstring(vbuf *vb, const char *dp) {
-  return csp_textdata(vb, dp, strlen(dp));
-}
-
 /*
- * _str  (mf,cs)
+ * _str  (mf)
  */
 
 static void mf_str(adns_query qu, void *datap) {
@@ -139,14 +140,8 @@ static void mf_str(adns_query qu, void *datap) {
   adns__makefinal_str(qu,rrp);
 }
 
-static adns_status cs_str(vbuf *vb, const void *datap) {
-  const char *const *rrp= datap;
-
-  return csp_qstring(vb,*rrp);
-}
-
 /*
- * _intstr  (mf,csp,cs)
+ * _intstr  (mf)
  */
 
 static void mf_intstr(adns_query qu, void *datap) {
@@ -155,22 +150,8 @@ static void mf_intstr(adns_query qu, void *datap) {
   adns__makefinal_str(qu,&rrp->str);
 }
 
-static adns_status csp_intstr(vbuf *vb, const adns_rr_intstr *rrp) {
-  char buf[10];
-
-  sprintf(buf,"%u ",rrp->i);
-  CSP_ADDSTR(buf);
-  return csp_qstring(vb,rrp->str);
-}
-
-static adns_status cs_intstr(vbuf *vb, const void *datap) {
-  const adns_rr_intstr *rrp= datap;
-  
-  return csp_intstr(vb,rrp);
-}
-
 /*
- * _manyistr   (mf,cs)
+ * _manyistr   (mf)
  */
 
 static void mf_manyistr(adns_query qu, void *datap) {
@@ -187,21 +168,8 @@ static void mf_manyistr(adns_query qu, void *datap) {
     adns__makefinal_str(qu,&te->str);
 }
 
-static adns_status cs_manyistr(vbuf *vb, const void *datap) {
-  const adns_rr_intstr *const *rrp= datap;
-  const adns_rr_intstr *current;
-  adns_status st;
-  int spc;
-
-  for (spc=0, current= *rrp; current->i >= 0; current++) {
-    if (spc) CSP_ADDSTR(" ");
-    st= csp_textdata(vb,current->str,current->i); if (st) return st;
-  }
-  return adns_s_ok;
-}
-
 /*
- * _txt   (pa)
+ * _txt   (pa,cs)
  */
 
 static adns_status pa_txt(const parseinfo *pai, int cbyte, int max, void *datap) {
@@ -218,13 +186,13 @@ static adns_status pa_txt(const parseinfo *pai, int cbyte, int max, void *datap)
     cbyte+= l;
     tc++;
   }
-  if (cbyte != max) return adns_s_invaliddata;
+  if (cbyte != max || !tc) return adns_s_invaliddata;
 
   table= adns__alloc_interim(pai->qu,sizeof(*table)*(tc+1));
   if (!table) R_NOMEM;
 
   for (cbyte=startbyte, ti=0, te=table; ti<tc; ti++, te++) {
-    st= pap_string(pai, &cbyte, max, &te->i, &te->str);
+    st= pap_qstring(pai, &cbyte, max, &te->i, &te->str);
     if (st) return st;
   }
   assert(cbyte == max);
@@ -236,6 +204,33 @@ static adns_status pa_txt(const parseinfo *pai, int cbyte, int max, void *datap)
   return adns_s_ok;
 }
 
+static adns_status cs_txt(vbuf *vb, const void *datap) {
+  const adns_rr_intstr *const *rrp= datap;
+  const adns_rr_intstr *current;
+  adns_status st;
+  int spc;
+
+  for (current= *rrp, spc=0;  current->i >= 0;  current++, spc=1) {
+    if (spc) CSP_ADDSTR(" ");
+    st= csp_qstring(vb,current->str,current->i); if (st) return st;
+  }
+  return adns_s_ok;
+}
+
+/*
+ * _hinfo   (cs)
+ */
+
+static adns_status cs_hinfo(vbuf *vb, const void *datap) {
+  const adns_rr_intstrpair *rrp= datap;
+  adns_status st;
+
+  st= csp_qstring(vb,rrp->array[0].str,rrp->array[0].i);  if (st) return st;
+  CSP_ADDSTR(" ");
+  st= csp_qstring(vb,rrp->array[1].str,rrp->array[1].i);  if (st) return st;
+  return adns_s_ok;
+}
+
 /*
  * _inaddr   (pa,dip,di)
  */
@@ -318,7 +313,7 @@ static adns_status csp_addr(vbuf *vb, const adns_rr_addr *rrp) {
 
   switch (rrp->addr.inet.sin_family) {
   case AF_INET:
-    CSP_ADDSTR("AF_INET ");
+    CSP_ADDSTR("INET ");
     ia= inet_ntoa(rrp->addr.inet.sin_addr); assert(ia);
     CSP_ADDSTR(ia);
     break;
@@ -337,7 +332,8 @@ static adns_status cs_addr(vbuf *vb, const void *datap) {
 }
 
 /*
- * _domain  (pap)
+ * _domain      (pap,csp,cs)
+ * _dom_raw     (pa)
  */
 
 static adns_status pap_domain(const parseinfo *pai, int *cbyte_io, int max,
@@ -360,6 +356,28 @@ static adns_status pap_domain(const parseinfo *pai, int *cbyte_io, int max,
   return adns_s_ok;
 }
 
+static adns_status csp_domain(vbuf *vb, const char *domain) {
+  CSP_ADDSTR(domain);
+  if (!*domain) CSP_ADDSTR(".");
+  return adns_s_ok;
+}
+
+static adns_status cs_domain(vbuf *vb, const void *datap) {
+  const char *const *domainp= datap;
+  return csp_domain(vb,*domainp);
+}
+
+static adns_status pa_dom_raw(const parseinfo *pai, int cbyte, int max, void *datap) {
+  char **rrp= datap;
+  adns_status st;
+
+  st= pap_domain(pai, &cbyte, max, rrp, pdf_quoteok);
+  if (st) return st;
+  
+  if (cbyte != max) return adns_s_invaliddata;
+  return adns_s_ok;
+}
+
 /*
  * _host_raw   (pa)
  */
@@ -421,13 +439,20 @@ static adns_status pap_findaddrs(const parseinfo *pai, adns_rr_hostaddr *ha,
 static void icb_hostaddr(adns_query parent, adns_query child) {
   adns_answer *cans= child->answer;
   adns_rr_hostaddr *rrp= child->ctx.info.hostaddr;
+  adns_state ads= parent->ads;
+  adns_status st;
 
-  rrp->astatus= cans->status;
-  rrp->naddrs= cans->nrrs;
+  st= cans->status;
+  rrp->astatus= st;
+  rrp->naddrs= (st>0 && st<=adns_s_max_tempfail) ? -1 : cans->nrrs;
   rrp->addrs= cans->rrs.addr;
   adns__transfer_interim(child, parent, rrp->addrs, rrp->naddrs*sizeof(adns_rr_addr));
 
-  if (!parent->children.head) adns__query_done(parent);
+  if (parent->children.head) {
+    LIST_LINK_TAIL(ads->childw,parent);
+  } else {
+    adns__query_done(parent);
+  }
 }
 
 static adns_status pap_hostaddr(const parseinfo *pai, int *cbyte_io,
@@ -525,21 +550,34 @@ static void mf_hostaddr(adns_query qu, void *datap) {
 }
 
 static adns_status csp_hostaddr(vbuf *vb, const adns_rr_hostaddr *rrp) {
-  const char *to_add;
+  const char *errstr;
   adns_status st;
+  char buf[20];
   int i;
 
-  st= csp_qstring(vb,rrp->host); if (st) return st;
+  st= csp_domain(vb,rrp->host);  if (st) return st;
 
-  if (rrp->astatus) {
-    CSP_ADDSTR(" - ");
-    CSP_ADDSTR(adns_strerror(rrp->astatus));
-  } else {
-    assert(rrp->naddrs > 0);
-    for (i=0, to_add= ": "; i<rrp->naddrs; i++, to_add= ", ") {
-      CSP_ADDSTR(to_add);
+  CSP_ADDSTR(" ");
+  CSP_ADDSTR(adns_errtypeabbrev(rrp->astatus));
+
+  sprintf(buf," %d ",rrp->astatus);
+  CSP_ADDSTR(buf);
+
+  CSP_ADDSTR(adns_errabbrev(rrp->astatus));
+  CSP_ADDSTR(" ");
+
+  errstr= adns_strerror(rrp->astatus);
+  st= csp_qstring(vb,errstr,strlen(errstr));  if (st) return st;
+  
+  if (rrp->naddrs >= 0) {
+    CSP_ADDSTR(" (");
+    for (i=0; i<rrp->naddrs; i++) {
+      CSP_ADDSTR(" ");
       st= csp_addr(vb,&rrp->addrs[i]);
     }
+    CSP_ADDSTR(" )");
+  } else {
+    CSP_ADDSTR(" ?");
   }
   return adns_s_ok;
 }
@@ -627,6 +665,19 @@ static adns_status cs_inthostaddr(vbuf *vb, const void *datap) {
   return csp_hostaddr(vb,&rrp->ha);
 }
 
+/*
+ * _inthost  (cs)
+ */
+
+static adns_status cs_inthost(vbuf *vb, const void *datap) {
+  const adns_rr_intstr *rrp= datap;
+  char buf[10];
+
+  sprintf(buf,"%u ",rrp->i);
+  CSP_ADDSTR(buf);
+  return csp_domain(vb,rrp->str);
+}
+
 /*
  * _ptr   (pa, +icb_ptr)
  */
@@ -634,6 +685,7 @@ static adns_status cs_inthostaddr(vbuf *vb, const void *datap) {
 static void icb_ptr(adns_query parent, adns_query child) {
   adns_answer *cans= child->answer;
   const adns_rr_addr *queried, *found;
+  adns_state ads= parent->ads;
   int i;
 
   if (cans->status == adns_s_nxdomain || cans->status == adns_s_nodata) {
@@ -648,8 +700,13 @@ static void icb_ptr(adns_query parent, adns_query child) {
   for (i=0, found=cans->rrs.addr; i<cans->nrrs; i++, found++) {
     if (queried->len == found->len &&
        !memcmp(&queried->addr,&found->addr,queried->len)) {
-      if (!parent->children.head) adns__query_done(parent);
-      return;
+      if (!parent->children.head) {
+       adns__query_done(parent);
+       return;
+      } else {
+       LIST_LINK_TAIL(ads->childw,parent);
+       return;
+      }
     }
   }
 
@@ -720,12 +777,11 @@ static adns_status pa_ptr(const parseinfo *pai, int dmstart, int max, void *data
 
   nqu->parent= pai->qu;
   LIST_LINK_TAIL_PART(pai->qu->children,nqu,siblings.);
-  
   return adns_s_ok;
 }
 
 /*
- * _strpair   (mf,cs)
+ * _strpair   (mf)
  */
 
 static void mf_strpair(adns_query qu, void *datap) {
@@ -735,19 +791,8 @@ static void mf_strpair(adns_query qu, void *datap) {
   adns__makefinal_str(qu,&rrp->array[1]);
 }
 
-static adns_status cs_strpair(vbuf *vb, const void *datap) {
-  const adns_rr_strpair *rrp= datap;
-  adns_status st;
-
-  st= csp_qstring(vb,rrp->array[0]);  if (st) return st;
-  CSP_ADDSTR(" ");
-  st= csp_qstring(vb,rrp->array[1]);  if (st) return st;
-
-  return adns_s_ok;
-}
-
 /*
- * _intstrpair   (mf,cs)
+ * _intstrpair   (mf)
  */
 
 static void mf_intstrpair(adns_query qu, void *datap) {
@@ -757,17 +802,6 @@ static void mf_intstrpair(adns_query qu, void *datap) {
   adns__makefinal_str(qu,&rrp->array[1].str);
 }
 
-static adns_status cs_intstrpair(vbuf *vb, const void *datap) {
-  const adns_rr_intstrpair *rrp= datap;
-  adns_status st;
-
-  st= csp_intstr(vb,&rrp->array[0]);  if (st) return st;
-  CSP_ADDSTR(" ");
-  st= csp_intstr(vb,&rrp->array[1]);  if (st) return st;
-
-  return adns_s_ok;
-}
-
 /*
  * _hinfo   (pa)
  */
@@ -778,7 +812,7 @@ static adns_status pa_hinfo(const parseinfo *pai, int cbyte, int max, void *data
   int i;
 
   for (i=0; i<2; i++) {
-    st= pap_string(pai, &cbyte, max, &rrp->array[i].i, &rrp->array[i].str);
+    st= pap_qstring(pai, &cbyte, max, &rrp->array[i].i, &rrp->array[i].str);
     if (st) return st;
   }
 
@@ -788,11 +822,11 @@ static adns_status pa_hinfo(const parseinfo *pai, int cbyte, int max, void *data
 }
 
 /*
- * _mailbox   (pap)
+ * _mailbox   (pap,cs)
  */
 
-static adns_status pap_mailbox(const parseinfo *pai, int *cbyte_io, int max,
-                              char **mb_r) {
+static adns_status pap_mailbox822(const parseinfo *pai, int *cbyte_io, int max,
+                                 char **mb_r) {
   int lablen, labstart, i, needquote, c, r, neednorm;
   const unsigned char *p;
   char *str;
@@ -808,7 +842,7 @@ static adns_status pap_mailbox(const parseinfo *pai, int *cbyte_io, int max,
                        *cbyte_io, cbyte_io);
   st= adns__findlabel_next(&fls,&lablen,&labstart);
   if (!lablen) {
-    adns__vbuf_appendstr(vb,"<>");
+    adns__vbuf_appendstr(vb,".");
     goto x_ok;
   }
 
@@ -817,7 +851,7 @@ static adns_status pap_mailbox(const parseinfo *pai, int *cbyte_io, int max,
     c= *p++;
     if ((c&~128) < 32 || (c&~128) == 127) return adns_s_invaliddata;
     if (c == '.' && !neednorm) neednorm= 1;
-    else if (strchr("()<>@,;:\\\".[]",c)) needquote++;
+    else if (c==' ' || ctype_822special(c)) needquote++;
     else neednorm= 0;
   }
 
@@ -826,7 +860,7 @@ static adns_status pap_mailbox(const parseinfo *pai, int *cbyte_io, int max,
     adns__vbuf_appendq(vb,"\"",1);
     for (i=0, needquote=0, p= pai->dgram+labstart; i<lablen; i++, p++) {
       c= *p;
-      if (strchr("()<>@,;:\\\".[]",c)) adns__vbuf_appendq(vb,"\\",1);
+      if (c == '"' || c=='\\') adns__vbuf_appendq(vb,"\\",1);
       adns__vbuf_appendq(vb,p,1);
     }
     adns__vbuf_appendq(vb,"\"",1);
@@ -847,8 +881,21 @@ static adns_status pap_mailbox(const parseinfo *pai, int *cbyte_io, int max,
   return adns_s_ok;
 }
 
+static adns_status pap_mailbox(const parseinfo *pai, int *cbyte_io, int max,
+                              char **mb_r) {
+  if (pai->qu->typei->type & adns__qtf_mail822) {
+    return pap_mailbox822(pai, cbyte_io, max, mb_r);
+  } else {
+    return pap_domain(pai, cbyte_io, max, mb_r, pdf_quoteok);
+  }
+}
+
+static adns_status csp_mailbox(vbuf *vb, const char *mailbox) {
+  return csp_domain(vb,mailbox);
+}
+
 /*
- * _rp   (pa)
+ * _rp   (pa,cs)
  */
 
 static adns_status pa_rp(const parseinfo *pai, int cbyte, int max, void *datap) {
@@ -865,6 +912,17 @@ static adns_status pa_rp(const parseinfo *pai, int cbyte, int max, void *datap)
   return adns_s_ok;
 }
 
+static adns_status cs_rp(vbuf *vb, const void *datap) {
+  const adns_rr_strpair *rrp= datap;
+  adns_status st;
+
+  st= csp_mailbox(vb,rrp->array[0]);  if (st) return st;
+  CSP_ADDSTR(" ");
+  st= csp_domain(vb,rrp->array[1]);  if (st) return st;
+
+  return adns_s_ok;
+}  
+
 /*
  * _soa   (pa,mf,cs)
  */
@@ -906,9 +964,9 @@ static adns_status cs_soa(vbuf *vb, const void *datap) {
   int i;
   adns_status st;
   
-  st= csp_qstring(vb,rrp->mname);  if (st) return st;
+  st= csp_domain(vb,rrp->mname);  if (st) return st;
   CSP_ADDSTR(" ");
-  st= csp_qstring(vb,rrp->rname);  if (st) return st;
+  st= csp_mailbox(vb,rrp->rname);  if (st) return st;
 
   for (i=0; i<5; i++) {
     sprintf(buf," %lu",(&rrp->serial)[i]);
@@ -933,32 +991,32 @@ static void mf_flat(adns_query qu, void *data) { }
 #define DEEP_MEMB(memb) TYPESZ_M(memb), mf_##memb, cs_##memb
 #define FLAT_MEMB(memb) TYPESZ_M(memb), mf_flat, cs_##memb
 
-#define DEEP_TYPE(code,rrt,fmt,memb,parser,comparer) \
- { adns_r_##code, rrt, fmt, TYPESZ_M(memb), mf_##memb, cs_##memb, parser, comparer }
-#define FLAT_TYPE(code,rrt,fmt,memb,parser,comparer) \
- { adns_r_##code, rrt, fmt, TYPESZ_M(memb), mf_flat, cs_##memb, parser, comparer }
+#define DEEP_TYPE(code,rrt,fmt,memb,parser,comparer,printer) \
+ { adns_r_##code, rrt, fmt, TYPESZ_M(memb), mf_##memb, printer, parser, comparer }
+#define FLAT_TYPE(code,rrt,fmt,memb,parser,comparer,printer) \
+ { adns_r_##code, rrt, fmt, TYPESZ_M(memb), mf_flat, printer, parser, comparer }
 
 static const typeinfo typeinfos[] = {
 /* Must be in ascending order of rrtype ! */
-/* mem-mgmt code     rrt     fmt      member       parser        comparer    */
-                                                            
-  FLAT_TYPE(a,       "A",     0,      inaddr,      pa_inaddr,    di_inaddr   ),
-  DEEP_TYPE(ns_raw,  "NS",   "raw",   str,         pa_host_raw,  0           ),
-  DEEP_TYPE(cname,   "CNAME", 0,      str,         pa_host_raw,  0           ),
-  DEEP_TYPE(soa_raw, "SOA",  "raw",   soa,         pa_soa,       0           ),
-  DEEP_TYPE(ptr_raw, "PTR",  "raw",   str,         pa_host_raw,  0           ),
-  DEEP_TYPE(hinfo,   "HINFO", 0,      intstrpair,  pa_hinfo,     0           ),
-  DEEP_TYPE(mx_raw,  "MX",   "raw",   intstr,      pa_mx_raw,    di_mx_raw   ),
-  DEEP_TYPE(txt,     "TXT",   0,      manyistr,    pa_txt,       0           ),
-  DEEP_TYPE(rp_raw,  "RP",   "raw",   strpair,     pa_rp,        0           ),
-                                                                                    
-  FLAT_TYPE(addr,    "A",  "addr",    addr,        pa_addr,      di_addr     ),
-  DEEP_TYPE(ns,      "NS", "+addr",   hostaddr,    pa_hostaddr,  di_hostaddr ),
-  DEEP_TYPE(ptr,     "PTR","checked", str,         pa_ptr,       0           ),
-  DEEP_TYPE(mx,      "MX", "+addr",   inthostaddr, pa_mx,        di_mx       ),
-                                                                          
-  DEEP_TYPE(soa,     "SOA","822",     soa,         pa_soa,       0           ),
-  DEEP_TYPE(rp,      "RP", "822",     strpair,     pa_rp,        0           ),
+/* mem-mgmt code  rrt     fmt     member      parser      comparer    printer       */
+                                                                                      
+FLAT_TYPE(a,      "A",     0,     inaddr,     pa_inaddr,  di_inaddr,  cs_inaddr     ),
+DEEP_TYPE(ns_raw, "NS",   "raw",  str,        pa_host_raw,0,          cs_domain     ),
+DEEP_TYPE(cname,  "CNAME", 0,     str,        pa_dom_raw, 0,          cs_domain     ),
+DEEP_TYPE(soa_raw,"SOA",  "raw",  soa,        pa_soa,     0,          cs_soa        ),
+DEEP_TYPE(ptr_raw,"PTR",  "raw",  str,        pa_host_raw,0,          cs_domain     ),
+DEEP_TYPE(hinfo,  "HINFO", 0,     intstrpair, pa_hinfo,   0,          cs_hinfo      ),
+DEEP_TYPE(mx_raw, "MX",   "raw",  intstr,     pa_mx_raw,  di_mx_raw,  cs_inthost    ),
+DEEP_TYPE(txt,    "TXT",   0,     manyistr,   pa_txt,     0,          cs_txt        ),
+DEEP_TYPE(rp_raw, "RP",   "raw",  strpair,    pa_rp,      0,          cs_rp         ),
+                                                                                      
+FLAT_TYPE(addr,   "A",  "addr",   addr,       pa_addr,    di_addr,    cs_addr       ),
+DEEP_TYPE(ns,     "NS", "+addr",  hostaddr,   pa_hostaddr,di_hostaddr,cs_hostaddr   ),
+DEEP_TYPE(ptr,    "PTR","checked",str,        pa_ptr,     0,          cs_domain     ),
+DEEP_TYPE(mx,     "MX", "+addr",  inthostaddr,pa_mx,      di_mx,      cs_inthostaddr),
+                                                                             
+DEEP_TYPE(soa,    "SOA","822",    soa,        pa_soa,     0,          cs_soa        ),
+DEEP_TYPE(rp,     "RP", "822",    strpair,    pa_rp,      0,          cs_rp         ),
 };
 
 const typeinfo *adns__findtype(adns_rrtype type) {