From b365d68ae5de07ef9dc4a3b92058a13edba5ad6f Mon Sep 17 00:00:00 2001 From: ian Date: Sat, 14 Aug 1999 18:54:26 +0000 Subject: [PATCH] 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). * Reject TXT RRs with no strings. --- changelog | 9 +- regress/case-abbrev.out | 16 +- regress/case-child.out | 2 +- regress/case-datapluscname.out | 6 +- regress/case-datapluscnamewait.out | 6 +- regress/case-mailboxes.out | 12 +- regress/case-manyptrwrong.out | 188 ++++++++++---------- regress/case-manyptrwrongrem.out | 188 ++++++++++---------- regress/case-manyptrwrongrst.out | 188 ++++++++++---------- regress/case-manyptrwrongrty.out | 188 ++++++++++---------- regress/case-owner.out | 6 +- regress/case-rootquery.out | 4 +- regress/case-rootqueryall-as.out | 112 ++++++------ regress/case-rootqueryall.out | 112 ++++++------ regress/case-sillyrp.out | 10 +- src/adns.h | 140 +++++++++++---- src/event.c | 1 - src/general.c | 1 - src/internal.h | 2 + src/query.c | 1 - src/reply.c | 1 - src/setup.c | 1 - src/transmit.c | 1 - src/types.c | 264 ++++++++++++++++------------- 24 files changed, 781 insertions(+), 678 deletions(-) diff --git a/changelog b/changelog index 878c22e..16cc744 100644 --- 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. -- diff --git a/regress/case-abbrev.out b/regress/case-abbrev.out index ef461cd..d50f6a0 100644 --- a/regress/case-abbrev.out +++ b/regress/case-abbrev.out @@ -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 diff --git a/regress/case-child.out b/regress/case-child.out index ab0706f..6c0b673 100644 --- a/regress/case-child.out +++ b/regress/case-child.out @@ -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 diff --git a/regress/case-datapluscname.out b/regress/case-datapluscname.out index ace55e3..d5b36af 100644 --- a/regress/case-datapluscname.out +++ b/regress/case-datapluscname.out @@ -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 diff --git a/regress/case-datapluscnamewait.out b/regress/case-datapluscnamewait.out index 4d20c48..18508a2 100644 --- a/regress/case-datapluscnamewait.out +++ b/regress/case-datapluscnamewait.out @@ -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 diff --git a/regress/case-mailboxes.out b/regress/case-mailboxes.out index 9bf4e87..98edaf4 100644 --- a/regress/case-mailboxes.out +++ b/regress/case-mailboxes.out @@ -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 diff --git a/regress/case-manyptrwrong.out b/regress/case-manyptrwrong.out index 866a15c..819a929 100644 --- a/regress/case-manyptrwrong.out +++ b/regress/case-manyptrwrong.out @@ -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) diff --git a/regress/case-manyptrwrongrem.out b/regress/case-manyptrwrongrem.out index 584bbb9..6d0370c 100644 --- a/regress/case-manyptrwrongrem.out +++ b/regress/case-manyptrwrongrem.out @@ -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 diff --git a/regress/case-manyptrwrongrst.out b/regress/case-manyptrwrongrst.out index 7069a3c..e48321d 100644 --- a/regress/case-manyptrwrongrst.out +++ b/regress/case-manyptrwrongrst.out @@ -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 diff --git a/regress/case-manyptrwrongrty.out b/regress/case-manyptrwrongrty.out index 61b6fee..41b13d9 100644 --- a/regress/case-manyptrwrongrty.out +++ b/regress/case-manyptrwrongrty.out @@ -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 diff --git a/regress/case-owner.out b/regress/case-owner.out index c76f8f2..d683c98 100644 --- a/regress/case-owner.out +++ b/regress/case-owner.out @@ -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 diff --git a/regress/case-rootquery.out b/regress/case-rootquery.out index 575646d..d78d469 100644 --- a/regress/case-rootquery.out +++ b/regress/case-rootquery.out @@ -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 diff --git a/regress/case-rootqueryall-as.out b/regress/case-rootqueryall-as.out index 1909c9e..a62a9ab 100644 --- a/regress/case-rootqueryall-as.out +++ b/regress/case-rootqueryall-as.out @@ -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 diff --git a/regress/case-rootqueryall.out b/regress/case-rootqueryall.out index cf4c81b..1441916 100644 --- a/regress/case-rootqueryall.out +++ b/regress/case-rootqueryall.out @@ -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 diff --git a/regress/case-sillyrp.out b/regress/case-sillyrp.out index c8937d2..f947914 100644 --- a/regress/case-sillyrp.out +++ b/regress/case-sillyrp.out @@ -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 diff --git a/src/adns.h b/src/adns.h index 698cfb4..90c4eeb 100644 --- a/src/adns.h +++ b/src/adns.h @@ -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); diff --git a/src/event.c b/src/event.c index 481fb73..5bdda8f 100644 --- a/src/event.c +++ b/src/event.c @@ -22,7 +22,6 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include #include #include #include diff --git a/src/general.c b/src/general.c index 12e5983..a54c439 100644 --- a/src/general.c +++ b/src/general.c @@ -22,7 +22,6 @@ */ #include -#include #include #include diff --git a/src/internal.h b/src/internal.h index 6dbac0c..eba0b05 100644 --- a/src/internal.h +++ b/src/internal.h @@ -33,6 +33,7 @@ typedef unsigned char byte; #include #include #include +#include #include @@ -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; } diff --git a/src/query.c b/src/query.c index a35d8ba..81fedb8 100644 --- a/src/query.c +++ b/src/query.c @@ -27,7 +27,6 @@ #include #include #include -#include #include diff --git a/src/reply.c b/src/reply.c index 4dec0e3..61fee52 100644 --- a/src/reply.c +++ b/src/reply.c @@ -21,7 +21,6 @@ */ #include -#include #include "internal.h" diff --git a/src/setup.c b/src/setup.c index 23a01d1..d1bdb04 100644 --- a/src/setup.c +++ b/src/setup.c @@ -23,7 +23,6 @@ #include #include -#include #include #include #include diff --git a/src/transmit.c b/src/transmit.c index 33a8cc2..fc712b1 100644 --- a/src/transmit.c +++ b/src/transmit.c @@ -22,7 +22,6 @@ */ #include -#include #include #include diff --git a/src/types.c b/src/types.c index 6b99d08..53b40e2 100644 --- a/src/types.c +++ b/src/types.c @@ -21,7 +21,6 @@ */ #include -#include #include #include @@ -71,11 +70,10 @@ */ /* - * _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= 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; tii, &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= ": "; inaddrs; i++, to_add= ", ") { - CSP_ADDSTR(to_add); + CSP_ADDSTR(" "); + CSP_ADDSTR(adns_errabbrev(rrp->astatus)); + + if (rrp->naddrs >= 0) { + CSP_ADDSTR(" ("); + for (i=0; inaddrs; 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@,;:\\\".[]",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) { -- 2.30.2