* 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.
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.
--
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
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
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
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
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
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
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
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)
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
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
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
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
. 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
. 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
. 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
. 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
. 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
. 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)
. 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
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
} 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 {
} 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 {
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;
* 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.
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
* 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);
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
*/
#include <stdlib.h>
-#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
+#include <string.h>
#include <sys/time.h>
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; }
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
-#include <string.h>
#include <sys/time.h>
*/
#include <stdlib.h>
-#include <string.h>
#include "internal.h"
#include <stdlib.h>
#include <errno.h>
-#include <string.h>
#include <limits.h>
#include <unistd.h>
#include <fcntl.h>
*/
#include <errno.h>
-#include <string.h>
#include <sys/types.h>
#include <sys/uio.h>
*/
#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;
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;
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);
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) {
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) {
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) {
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) {
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);
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)
*/
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;
}
/*
- * _domain (pap)
+ * _domain (pap,csp,cs)
+ * _dom_raw (pa)
*/
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)
*/
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));
}
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;
}
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)
*/
}
/*
- * _strpair (mf,cs)
+ * _strpair (mf)
*/
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) {
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)
*/
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;
}
}
/*
- * _mailbox (pap)
+ * _mailbox (pap,cs)
*/
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;
}
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;
}
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);
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) {
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)
*/
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]);
#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) {