chiark / gitweb /
Incompatible changes:
authorian <ian>
Sat, 14 Aug 1999 18:54:26 +0000 (18:54 +0000)
committerian <ian>
Sat, 14 Aug 1999 18:54:26 +0000 (18:54 +0000)
* RRs with mailboxes never rejected due to strange chars if _raw.
* Lack of a mailbox produces `.' not `<>'.

Bugfixes and portability improvements:
* Mailboxes containing spaces in their names are quoted.
* adns_rr_hostaddr naddrs is -1 on temporary failure (as documented).
* Reject TXT RRs with no strings.

24 files changed:
changelog
regress/case-abbrev.out
regress/case-child.out
regress/case-datapluscname.out
regress/case-datapluscnamewait.out
regress/case-mailboxes.out
regress/case-manyptrwrong.out
regress/case-manyptrwrongrem.out
regress/case-manyptrwrongrst.out
regress/case-manyptrwrongrty.out
regress/case-owner.out
regress/case-rootquery.out
regress/case-rootqueryall-as.out
regress/case-rootqueryall.out
regress/case-sillyrp.out
src/adns.h
src/event.c
src/general.c
src/internal.h
src/query.c
src/reply.c
src/setup.c
src/transmit.c
src/types.c

index 878c22e0ca6c0e3ad8920be51086b62528e1a1e5..16cc744a9c0f6ce6007a076d639894f8473d1c01 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,7 +1,14 @@
 adns (0.5) unstable; urgency=medium
 
-  Portability fixes:
+  Incompatible changes:
+  * RRs with mailboxes never rejected due to strange chars if _raw.
+  * Lack of a mailbox produces `.' not `<>'.
+  
+  Bugfixes and portability improvements:
+  * Mailboxes containing spaces in their names are quoted.
+  * adns_rr_hostaddr naddrs is -1 on temporary failure (as documented).
   * Give install the '-c' flag (otherwise some delete the original !).
+  * Reject TXT RRs with no strings.
 
  --
 
index ef461cd1fac75a318e9b4b51c3aafd76b95472d1..d50f6a0d2d86f675187ca4f21cfb5518f5cf4941 100644 (file)
@@ -16,25 +16,25 @@ 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"
+ 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
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"
+ 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": AF_INET 172.18.45.6
- "ns1.relativity.greenend.org.uk": AF_INET 172.18.45.65
+ ns0.relativity.greenend.org.uk ok ( INET 172.18.45.6 )
+ ns1.relativity.greenend.org.uk 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": AF_INET 195.224.76.132
+ 10 chiark.greenend.org.uk 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
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
index ab0706fcd1de8d3fb767df6da2dbbd59d68d387c..6c0b673d15c4926035c925ad92e7c0330ad68ff9 100644 (file)
@@ -1,5 +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"
+ permutation-city.greenend.org.uk
 rc=0
index ace55e3a78f445110689eb0476907086813e0d94..d5b36af1c9bc5a596d4ec16df93fb916fbadd634 100644 (file)
@@ -22,7 +22,7 @@ adns debug: ignoring RR with an unexpected owner 170.168.99.219.194.in-addr.arpa
 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"
+ 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
@@ -33,7 +33,7 @@ adns debug: ignoring RR with an unexpected owner 170.168.99.219.194.in-addr.arpa
 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"
+ 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"
+ 170.168.99.219.194.in-addr.arpa
 rc=0
index 4d20c48a703dea1b43fa20f8fd8746f0e1801c58..18508a2fe86a4f69f97e54c8cbc3abc9ef340a9c 100644 (file)
@@ -19,9 +19,9 @@ adns debug: ignoring RR with an unexpected owner 170.168.99.219.194.in-addr.arpa
 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"
+ 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"
+ 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
@@ -74,5 +74,5 @@ adns debug: reply not found, id 3120, query owner 170.168.99.219.194.in-addr.arp
 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"
+ 170.168.99.219.194.in-addr.arpa
 rc=0
index 9bf4e875b9d54e351e0bb2f2e27f0465f2e2d521..98edaf4c9ab8d80076143bcb2aa68955168cd2bf 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 866a15c7bc520380f1cd1c0cb797ccb2cfdd0a60..819a929e25de4ccb05f4ce035d4fb173eae3ee18 100644 (file)
@@ -16,100 +16,100 @@ adns debug: using nameserver 195.224.55.129
 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"
+ 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)
index 584bbb999bd249acd302423c2316519181507846..6d0370ca9e0a0588abf4fef3c8ac00481388db39 100644 (file)
@@ -29,99 +29,99 @@ adns debug: using nameserver 140.200.128.13
 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"
+ 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
index 7069a3ced07607ba12c48acd023f574cf70f6ce4..e48321d0621303acacfef2409f77e709fccc28ef 100644 (file)
@@ -34,99 +34,99 @@ adns debug: reply not found, id 312d, query owner 254.0.99.203.in-addr.arpa (NS=
 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"
+ 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
index 61b6fee837dd44c5dbe2b5706b5344529e67f869..41b13d9bfd19848a44b3ef47b6b22287edb6f59a 100644 (file)
@@ -23,100 +23,100 @@ adns debug: TCP connected (NS=172.18.45.6)
 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"
+ 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
index c76f8f2a68345b8fa14bff8b70815d3b83d4d0bd..d683c985c39c08bacefacc8b5ead2a7064bd20ac 100644 (file)
@@ -22,15 +22,15 @@ chiark.greenend.org.uk flags 4 type SOA(raw): No such data; nrrs=0; cname=$; own
 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"
+ 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
AF_INET 195.224.76.132
+ 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": AF_INET 195.224.76.134
+ 5 permutation-city.greenend.org.uk 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 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 1909c9e3597b6cb3e2c279fc68ad1e663504b3f2..a62a9ab0e58efcf2ff345388d6c03e235a2a0c5a 100644 (file)
@@ -31,21 +31,21 @@ 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=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"
+ 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
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
@@ -53,41 +53,41 @@ adns debug: using nameserver 172.18.45.6
 . 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": 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 ( INET 192.36.148.17 )
+ F.ROOT-SERVERS.NET ok ( INET 192.5.5.241 )
+ G.ROOT-SERVERS.NET ok ( INET 192.112.36.4 )
+ J.ROOT-SERVERS.NET ok ( INET 198.41.0.10 )
+ K.ROOT-SERVERS.NET ok ( INET 193.0.14.129 )
+ L.ROOT-SERVERS.NET ok ( INET 198.32.64.12 )
+ M.ROOT-SERVERS.NET ok ( INET 202.12.27.33 )
+ A.ROOT-SERVERS.NET ok ( INET 198.41.0.4 )
+ H.ROOT-SERVERS.NET ok ( INET 128.63.2.53 )
+ B.ROOT-SERVERS.NET ok ( INET 128.9.0.107 )
+ C.ROOT-SERVERS.NET ok ( INET 192.33.4.12 )
+ D.ROOT-SERVERS.NET ok ( INET 128.8.10.90 )
+ E.ROOT-SERVERS.NET 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
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"
+ 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
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
@@ -95,23 +95,23 @@ adns debug: using nameserver 172.18.45.6
 . 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": 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 ( INET 192.112.36.4 )
+ J.ROOT-SERVERS.NET ok ( INET 198.41.0.10 )
+ K.ROOT-SERVERS.NET ok ( INET 193.0.14.129 )
+ L.ROOT-SERVERS.NET ok ( INET 198.32.64.12 )
+ M.ROOT-SERVERS.NET ok ( INET 202.12.27.33 )
+ A.ROOT-SERVERS.NET ok ( INET 198.41.0.4 )
+ H.ROOT-SERVERS.NET ok ( INET 128.63.2.53 )
+ B.ROOT-SERVERS.NET ok ( INET 128.9.0.107 )
+ C.ROOT-SERVERS.NET ok ( INET 192.33.4.12 )
+ D.ROOT-SERVERS.NET ok ( INET 128.8.10.90 )
+ E.ROOT-SERVERS.NET ok ( INET 192.203.230.10 )
+ I.ROOT-SERVERS.NET ok ( INET 192.36.148.17 )
+ F.ROOT-SERVERS.NET 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
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
index cf4c81ba651aeeb01ff031ce679c1b71e9f9edd3..14419166e99e3869b1441737681fc543ff677f62 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 ( INET 192.36.148.17 )
+ F.ROOT-SERVERS.NET ok ( INET 192.5.5.241 )
+ G.ROOT-SERVERS.NET ok ( INET 192.112.36.4 )
+ J.ROOT-SERVERS.NET ok ( INET 198.41.0.10 )
+ K.ROOT-SERVERS.NET ok ( INET 193.0.14.129 )
+ L.ROOT-SERVERS.NET ok ( INET 198.32.64.12 )
+ M.ROOT-SERVERS.NET ok ( INET 202.12.27.33 )
+ A.ROOT-SERVERS.NET ok ( INET 198.41.0.4 )
+ H.ROOT-SERVERS.NET ok ( INET 128.63.2.53 )
+ B.ROOT-SERVERS.NET ok ( INET 128.9.0.107 )
+ C.ROOT-SERVERS.NET ok ( INET 192.33.4.12 )
+ D.ROOT-SERVERS.NET ok ( INET 128.8.10.90 )
+ E.ROOT-SERVERS.NET 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 ( INET 192.112.36.4 )
+ J.ROOT-SERVERS.NET ok ( INET 198.41.0.10 )
+ K.ROOT-SERVERS.NET ok ( INET 193.0.14.129 )
+ L.ROOT-SERVERS.NET ok ( INET 198.32.64.12 )
+ M.ROOT-SERVERS.NET ok ( INET 202.12.27.33 )
+ A.ROOT-SERVERS.NET ok ( INET 198.41.0.4 )
+ H.ROOT-SERVERS.NET ok ( INET 128.63.2.53 )
+ B.ROOT-SERVERS.NET ok ( INET 128.9.0.107 )
+ C.ROOT-SERVERS.NET ok ( INET 192.33.4.12 )
+ D.ROOT-SERVERS.NET ok ( INET 128.8.10.90 )
+ E.ROOT-SERVERS.NET ok ( INET 192.203.230.10 )
+ I.ROOT-SERVERS.NET ok ( INET 192.36.148.17 )
+ F.ROOT-SERVERS.NET 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 c8937d26ef1882bf5f5ce29e65c466692ea76e83..f947914e2d757061b1e7ce0dbb202fed4f012a56 100644 (file)
@@ -8,13 +8,15 @@ silly-rp-lp.test.iwj.relativity.greenend.org.uk flags 0 type 131089 RP(822) subm
 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" ""
+ 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" ""
+ 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): Found syntactically invalid domain name; 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): Found syntactically invalid domain name; 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
index 698cfb4c5c8f6dfc7ec7bfc52b38a8263949d0da..90c4eeb35b0bac663a53dadd099edbd55170dd92 100644 (file)
@@ -52,15 +52,16 @@ typedef enum {
 } 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 quote-requiring 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 {
@@ -97,18 +98,57 @@ typedef enum {
   
 } adns_rrtype;
 
-/* In queries without qf_quoteok_*, all domains must have standard
- * legal syntax.  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, and on output,
+/*
+ * 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, 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.
+ * 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 {
@@ -210,7 +250,7 @@ typedef struct {
   char *owner; /* only set if requested in query flags */
   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;
@@ -308,6 +348,14 @@ void adns_cancel(adns_query query);
  * 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. */
+
 void adns_finish(adns_state ads);
 /* You may call this even if you have queries outstanding;
  * they will be cancelled.
@@ -541,21 +589,23 @@ 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
@@ -563,6 +613,32 @@ 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.
+ *
+ * Hostname with addresses (adns_rr_hostaddr): this consists of the
+ * hostname, as usual, followed by the adns_status value (as an
+ * abbreviation) for the address lookup, followed by zero or more
+ * addresses enclosed in ( and ).  If the result was a permanent
+ * failure, then a single ?  appears instead of the ( ).  If the
+ * result was a temporary 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 ( INET 195.224.76.132 )
+ * an MX referring to a nonexistent host might come out like:
+ *  50 sun2.nsfnet-relay.ac.uk nxdomain ( )
+ * and if nameserver information is not available you might get:
+ *  dns2.spong.dyn.ml.org timeout ?
  */
 
 const char *adns_strerror(adns_status st);
index 481fb73eb8762c184d4989e983143c0dc3c2a208..5bdda8f6dd3cc0c3f3846f1f6258d95569d3b661 100644 (file)
@@ -22,7 +22,6 @@
  *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
  */
 
-#include <string.h>
 #include <errno.h>
 #include <stdlib.h>
 #include <unistd.h>
index 12e5983efcec7593e93ffd42f5c3ce39c4341815..a54c4395232245673dcaeb82a99c2481da7d9d46 100644 (file)
@@ -22,7 +22,6 @@
  */
 
 #include <stdlib.h>
-#include <string.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>
index 6dbac0c432195d2875eafda976c6ef2bf1723c95..eba0b05050941397f4abfb1aa0c8601c2cd492d9 100644 (file)
@@ -33,6 +33,7 @@ typedef unsigned char byte;
 #include <unistd.h>
 #include <signal.h>
 #include <errno.h>
+#include <string.h>
 
 #include <sys/time.h>
 
@@ -650,6 +651,7 @@ 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');
 }
+static inline int ctype_822special(int c) { return strchr("()<>@,;:\\\".[]",c) != 0; }
 
 static inline int errno_resources(int e) { return e==ENOMEM || e==ENOBUFS; }
 
index a35d8ba4bb799039ba4cf0a2b553857e8ce63ab3..81fedb8af48c318c430d1d412c9976a22e50d872 100644 (file)
@@ -27,7 +27,6 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <errno.h>
-#include <string.h>
 
 #include <sys/time.h>
 
index 4dec0e3f661fb8a0b616ee85da6d2b0e206db950..61fee52fee8cd77c74c607bbc9187206555b7dda 100644 (file)
@@ -21,7 +21,6 @@
  */
 
 #include <stdlib.h>
-#include <string.h>
 
 #include "internal.h"
     
index 23a01d14f9503e1a3e0ad23a0a195d0db1851ea9..d1bdb04306a17dd7dfd152e6ab13312c6cb17054 100644 (file)
@@ -23,7 +23,6 @@
 
 #include <stdlib.h>
 #include <errno.h>
-#include <string.h>
 #include <limits.h>
 #include <unistd.h>
 #include <fcntl.h>
index 33a8cc2e4254d6285b301c87fc6467ee06626ef8..fc712b1f04901bb74d123a5ce312fc3f6572ba21 100644 (file)
@@ -22,7 +22,6 @@
  */
 
 #include <errno.h>
-#include <string.h>
 
 #include <sys/types.h>
 #include <sys/uio.h>
index 6b99d088e3bde3d4eba429f6fd7e6cedf04c0a6d..53b40e2ecc4464bda59a6d10505dd3fe66f9337b 100644 (file)
@@ -21,7 +21,6 @@
  */
 
 #include <stdlib.h>
-#include <string.h>
 
 #include <sys/types.h>
 #include <sys/socket.h>
  */
 
 /*
- * _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 +101,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 +109,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 +125,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 +135,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 +145,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 +163,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 +181,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 +199,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 +308,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 +327,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 +351,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)
  */
@@ -422,9 +435,11 @@ 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));
 
@@ -530,21 +545,23 @@ 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;
   adns_status st;
   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_errabbrev(rrp->astatus));
+  
+  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;
 }
@@ -632,6 +649,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)
  */
@@ -735,7 +765,7 @@ static adns_status pa_ptr(const parseinfo *pai, int dmstart, int max, void *data
 }
 
 /*
- * _strpair   (mf,cs)
+ * _strpair   (mf)
  */
 
 static void mf_strpair(adns_query qu, void *datap) {
@@ -745,19 +775,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) {
@@ -767,17 +786,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)
  */
@@ -788,7 +796,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;
   }
 
@@ -798,7 +806,7 @@ static adns_status pa_hinfo(const parseinfo *pai, int cbyte, int max, void *data
 }
 
 /*
- * _mailbox   (pap)
+ * _mailbox   (pap,cs)
  */
 
 static adns_status pap_mailbox822(const parseinfo *pai, int *cbyte_io, int max,
@@ -818,7 +826,7 @@ static adns_status pap_mailbox822(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;
   }
 
@@ -827,7 +835,7 @@ static adns_status pap_mailbox822(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;
   }
 
@@ -836,7 +844,7 @@ static adns_status pap_mailbox822(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);
@@ -862,13 +870,16 @@ static adns_status pap_mailbox(const parseinfo *pai, int *cbyte_io, int max,
   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,
-                     pai->qu->flags & adns_qf_quoteok_anshost ? pdf_quoteok : 0);
+    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) {
@@ -885,6 +896,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)
  */
@@ -926,9 +948,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]);
@@ -953,32 +975,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) {