dnsruby 1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/EVENTMACHINE +64 -0
- data/README +63 -0
- data/doc/classes/Dnsruby.html +463 -0
- data/doc/classes/Dnsruby/Algorithms.html +171 -0
- data/doc/classes/Dnsruby/Classes.html +197 -0
- data/doc/classes/Dnsruby/Classes.src/M000209.html +23 -0
- data/doc/classes/Dnsruby/Classes.src/M000210.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.html +375 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000186.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000187.html +33 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000188.html +21 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000189.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000190.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000191.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000192.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000193.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000194.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000195.html +31 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000196.html +19 -0
- data/doc/classes/Dnsruby/Config.html +413 -0
- data/doc/classes/Dnsruby/Config.src/M000148.html +18 -0
- data/doc/classes/Dnsruby/Config.src/M000149.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000150.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000151.html +25 -0
- data/doc/classes/Dnsruby/Config.src/M000152.html +21 -0
- data/doc/classes/Dnsruby/Config.src/M000153.html +38 -0
- data/doc/classes/Dnsruby/Config.src/M000154.html +26 -0
- data/doc/classes/Dnsruby/Config.src/M000155.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000156.html +27 -0
- data/doc/classes/Dnsruby/Config.src/M000157.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000158.html +21 -0
- data/doc/classes/Dnsruby/DNS.html +571 -0
- data/doc/classes/Dnsruby/DNS.src/M000258.html +24 -0
- data/doc/classes/Dnsruby/DNS.src/M000259.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000260.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000261.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000262.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000263.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000264.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000265.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000266.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000267.html +28 -0
- data/doc/classes/Dnsruby/DNS.src/M000268.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000269.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000270.html +31 -0
- data/doc/classes/Dnsruby/DecodeError.html +120 -0
- data/doc/classes/Dnsruby/Dnssec.html +287 -0
- data/doc/classes/Dnsruby/Dnssec.src/M000249.html +23 -0
- data/doc/classes/Dnsruby/Dnssec.src/M000250.html +19 -0
- data/doc/classes/Dnsruby/Dnssec.src/M000251.html +90 -0
- data/doc/classes/Dnsruby/Dnssec.src/M000252.html +76 -0
- data/doc/classes/Dnsruby/EncodeError.html +120 -0
- data/doc/classes/Dnsruby/FormErr.html +119 -0
- data/doc/classes/Dnsruby/Header.html +501 -0
- data/doc/classes/Dnsruby/Header.src/M000231.html +35 -0
- data/doc/classes/Dnsruby/Header.src/M000232.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000233.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000234.html +21 -0
- data/doc/classes/Dnsruby/Header.src/M000235.html +20 -0
- data/doc/classes/Dnsruby/Header.src/M000236.html +32 -0
- data/doc/classes/Dnsruby/Header.src/M000237.html +27 -0
- data/doc/classes/Dnsruby/Header.src/M000238.html +26 -0
- data/doc/classes/Dnsruby/Header.src/M000239.html +47 -0
- data/doc/classes/Dnsruby/Header.src/M000240.html +28 -0
- data/doc/classes/Dnsruby/Header.src/M000241.html +30 -0
- data/doc/classes/Dnsruby/Hosts.html +316 -0
- data/doc/classes/Dnsruby/Hosts.src/M000197.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000198.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000199.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000200.html +21 -0
- data/doc/classes/Dnsruby/Hosts.src/M000201.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000202.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000203.html +21 -0
- data/doc/classes/Dnsruby/IPv4.html +233 -0
- data/doc/classes/Dnsruby/IPv4.src/M000204.html +32 -0
- data/doc/classes/Dnsruby/IPv4.src/M000205.html +19 -0
- data/doc/classes/Dnsruby/IPv4.src/M000206.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000207.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000208.html +18 -0
- data/doc/classes/Dnsruby/IPv6.html +281 -0
- data/doc/classes/Dnsruby/IPv6.src/M000242.html +60 -0
- data/doc/classes/Dnsruby/IPv6.src/M000243.html +22 -0
- data/doc/classes/Dnsruby/IPv6.src/M000244.html +20 -0
- data/doc/classes/Dnsruby/IPv6.src/M000245.html +18 -0
- data/doc/classes/Dnsruby/Message.html +803 -0
- data/doc/classes/Dnsruby/Message.src/M000119.html +38 -0
- data/doc/classes/Dnsruby/Message.src/M000120.html +26 -0
- data/doc/classes/Dnsruby/Message.src/M000121.html +22 -0
- data/doc/classes/Dnsruby/Message.src/M000122.html +22 -0
- data/doc/classes/Dnsruby/Message.src/M000123.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000124.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000125.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000126.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000127.html +18 -0
- data/doc/classes/Dnsruby/Message.src/M000128.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000129.html +23 -0
- data/doc/classes/Dnsruby/Message.src/M000130.html +30 -0
- data/doc/classes/Dnsruby/Message.src/M000131.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000132.html +18 -0
- data/doc/classes/Dnsruby/Message.src/M000133.html +56 -0
- data/doc/classes/Dnsruby/Message.src/M000134.html +35 -0
- data/doc/classes/Dnsruby/Message.src/M000135.html +46 -0
- data/doc/classes/Dnsruby/Message/Section.html +160 -0
- data/doc/classes/Dnsruby/Message/Section.src/M000141.html +29 -0
- data/doc/classes/Dnsruby/Message/Section.src/M000142.html +30 -0
- data/doc/classes/Dnsruby/MetaTypes.html +136 -0
- data/doc/classes/Dnsruby/Modes.html +171 -0
- data/doc/classes/Dnsruby/NXDomain.html +119 -0
- data/doc/classes/Dnsruby/Name.html +330 -0
- data/doc/classes/Dnsruby/Name.src/M000104.html +28 -0
- data/doc/classes/Dnsruby/Name.src/M000105.html +20 -0
- data/doc/classes/Dnsruby/Name.src/M000106.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000107.html +21 -0
- data/doc/classes/Dnsruby/Name.src/M000108.html +22 -0
- data/doc/classes/Dnsruby/Name.src/M000109.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.html +300 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000110.html +21 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000111.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000112.html +22 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000113.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000114.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000115.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000116.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000117.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000118.html +18 -0
- data/doc/classes/Dnsruby/NotImp.html +119 -0
- data/doc/classes/Dnsruby/OpCode.html +146 -0
- data/doc/classes/Dnsruby/OtherResolvError.html +119 -0
- data/doc/classes/Dnsruby/QTypes.html +146 -0
- data/doc/classes/Dnsruby/Question.html +301 -0
- data/doc/classes/Dnsruby/Question.src/M000226.html +47 -0
- data/doc/classes/Dnsruby/Question.src/M000227.html +18 -0
- data/doc/classes/Dnsruby/Question.src/M000228.html +18 -0
- data/doc/classes/Dnsruby/Question.src/M000229.html +32 -0
- data/doc/classes/Dnsruby/Question.src/M000230.html +18 -0
- data/doc/classes/Dnsruby/RCode.html +211 -0
- data/doc/classes/Dnsruby/RR.html +648 -0
- data/doc/classes/Dnsruby/RR.src/M000001.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000002.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000003.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000004.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000005.html +26 -0
- data/doc/classes/Dnsruby/RR.src/M000006.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000007.html +36 -0
- data/doc/classes/Dnsruby/RR.src/M000008.html +100 -0
- data/doc/classes/Dnsruby/RR.src/M000009.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000010.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000011.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000012.html +29 -0
- data/doc/classes/Dnsruby/RR.src/M000013.html +24 -0
- data/doc/classes/Dnsruby/RR/ANY.html +133 -0
- data/doc/classes/Dnsruby/RR/CERT.html +180 -0
- data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +169 -0
- data/doc/classes/Dnsruby/RR/CNAME.html +151 -0
- data/doc/classes/Dnsruby/RR/DNAME.html +150 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.html +422 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000044.html +20 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000045.html +21 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000046.html +28 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000047.html +22 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000048.html +18 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000049.html +22 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000050.html +18 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000051.html +26 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000052.html +38 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000053.html +45 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000054.html +21 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000055.html +24 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000056.html +32 -0
- data/doc/classes/Dnsruby/RR/DNSKEY.src/M000057.html +24 -0
- data/doc/classes/Dnsruby/RR/DS.html +286 -0
- data/doc/classes/Dnsruby/RR/DS.src/M000039.html +22 -0
- data/doc/classes/Dnsruby/RR/DS.src/M000040.html +28 -0
- data/doc/classes/Dnsruby/RR/DS.src/M000041.html +24 -0
- data/doc/classes/Dnsruby/RR/DS.src/M000042.html +28 -0
- data/doc/classes/Dnsruby/RR/DS.src/M000043.html +36 -0
- data/doc/classes/Dnsruby/RR/DomainName.html +175 -0
- data/doc/classes/Dnsruby/RR/DomainName.src/M000083.html +18 -0
- data/doc/classes/Dnsruby/RR/Generic.html +133 -0
- data/doc/classes/Dnsruby/RR/HINFO.html +155 -0
- data/doc/classes/Dnsruby/RR/IN.html +155 -0
- data/doc/classes/Dnsruby/RR/IN/A.html +200 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000017.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000018.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000019.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/AAAA.html +139 -0
- data/doc/classes/Dnsruby/RR/IN/AFSDB.html +145 -0
- data/doc/classes/Dnsruby/RR/IN/PX.html +143 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.html +238 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000014.html +29 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +26 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +22 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.html +166 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.src/M000020.html +20 -0
- data/doc/classes/Dnsruby/RR/ISDN.html +155 -0
- data/doc/classes/Dnsruby/RR/LOC.html +395 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000025.html +32 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000026.html +23 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000027.html +25 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000028.html +21 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000029.html +20 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000030.html +23 -0
- data/doc/classes/Dnsruby/RR/MB.html +150 -0
- data/doc/classes/Dnsruby/RR/MG.html +150 -0
- data/doc/classes/Dnsruby/RR/MINFO.html +156 -0
- data/doc/classes/Dnsruby/RR/MR.html +150 -0
- data/doc/classes/Dnsruby/RR/MX.html +155 -0
- data/doc/classes/Dnsruby/RR/NAPTR.html +190 -0
- data/doc/classes/Dnsruby/RR/NS.html +151 -0
- data/doc/classes/Dnsruby/RR/NSAP.html +293 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000093.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000094.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000095.html +22 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000096.html +31 -0
- data/doc/classes/Dnsruby/RR/NSEC.html +301 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000031.html +19 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000032.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000033.html +34 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000034.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000035.html +71 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000036.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000037.html +80 -0
- data/doc/classes/Dnsruby/RR/NSEC.src/M000038.html +23 -0
- data/doc/classes/Dnsruby/RR/NSEC3.html +366 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000085.html +28 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000086.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000087.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000088.html +22 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000089.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000090.html +21 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000091.html +21 -0
- data/doc/classes/Dnsruby/RR/NSEC3.src/M000092.html +29 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.html +279 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000077.html +28 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000078.html +18 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000079.html +22 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000080.html +21 -0
- data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000081.html +25 -0
- data/doc/classes/Dnsruby/RR/PTR.html +132 -0
- data/doc/classes/Dnsruby/RR/RP.html +183 -0
- data/doc/classes/Dnsruby/RR/RP.src/M000082.html +19 -0
- data/doc/classes/Dnsruby/RR/RRSIG.html +357 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000097.html +26 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000098.html +28 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000099.html +23 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000100.html +23 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000101.html +46 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000102.html +50 -0
- data/doc/classes/Dnsruby/RR/RRSIG.src/M000103.html +27 -0
- data/doc/classes/Dnsruby/RR/RT.html +155 -0
- data/doc/classes/Dnsruby/RR/SOA.html +233 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000066.html +24 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000067.html +27 -0
- data/doc/classes/Dnsruby/RR/SPF.html +138 -0
- data/doc/classes/Dnsruby/RR/TKEY.html +313 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000021.html +19 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +29 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +21 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +29 -0
- data/doc/classes/Dnsruby/RR/TSIG.html +524 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000068.html +24 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000069.html +32 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000070.html +54 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000071.html +121 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000072.html +33 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000073.html +25 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000074.html +36 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000075.html +22 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000076.html +29 -0
- data/doc/classes/Dnsruby/RR/TXT.html +233 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000061.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000062.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000063.html +20 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000064.html +27 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000065.html +25 -0
- data/doc/classes/Dnsruby/RR/X25.html +203 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000058.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000059.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000060.html +22 -0
- data/doc/classes/Dnsruby/RRSet.html +404 -0
- data/doc/classes/Dnsruby/RRSet.src/M000211.html +23 -0
- data/doc/classes/Dnsruby/RRSet.src/M000212.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000213.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000214.html +47 -0
- data/doc/classes/Dnsruby/RRSet.src/M000215.html +42 -0
- data/doc/classes/Dnsruby/RRSet.src/M000216.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000217.html +20 -0
- data/doc/classes/Dnsruby/RRSet.src/M000218.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000219.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000220.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000221.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000222.html +22 -0
- data/doc/classes/Dnsruby/RRSet.src/M000223.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000224.html +22 -0
- data/doc/classes/Dnsruby/RRSet.src/M000225.html +18 -0
- data/doc/classes/Dnsruby/Refused.html +119 -0
- data/doc/classes/Dnsruby/Resolv.html +401 -0
- data/doc/classes/Dnsruby/Resolv.src/M000159.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000160.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000161.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000162.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000163.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000164.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000165.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000166.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000167.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000168.html +29 -0
- data/doc/classes/Dnsruby/Resolv.src/M000169.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000170.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000171.html +25 -0
- data/doc/classes/Dnsruby/ResolvError.html +117 -0
- data/doc/classes/Dnsruby/ResolvTimeout.html +117 -0
- data/doc/classes/Dnsruby/Resolver.html +1055 -0
- data/doc/classes/Dnsruby/Resolver.src/M000271.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000272.html +27 -0
- data/doc/classes/Dnsruby/Resolver.src/M000273.html +28 -0
- data/doc/classes/Dnsruby/Resolver.src/M000274.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000275.html +51 -0
- data/doc/classes/Dnsruby/Resolver.src/M000276.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000277.html +22 -0
- data/doc/classes/Dnsruby/Resolver.src/M000278.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000279.html +20 -0
- data/doc/classes/Dnsruby/Resolver.src/M000280.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000281.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000282.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000283.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000284.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000285.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000286.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000287.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000288.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000289.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000290.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000291.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000292.html +26 -0
- data/doc/classes/Dnsruby/Resolver.src/M000293.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000294.html +23 -0
- data/doc/classes/Dnsruby/Resolver.src/M000295.html +18 -0
- data/doc/classes/Dnsruby/ServFail.html +119 -0
- data/doc/classes/Dnsruby/SingleResolver.html +674 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000172.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000173.html +24 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000174.html +36 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000175.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000176.html +19 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000177.html +50 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000178.html +19 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000179.html +21 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000180.html +25 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000181.html +54 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000182.html +27 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000183.html +27 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000184.html +35 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000185.html +21 -0
- data/doc/classes/Dnsruby/TheLog.html +196 -0
- data/doc/classes/Dnsruby/TheLog.src/M000246.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000247.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000248.html +20 -0
- data/doc/classes/Dnsruby/Types.html +436 -0
- data/doc/classes/Dnsruby/Update.html +368 -0
- data/doc/classes/Dnsruby/Update.src/M000253.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000254.html +36 -0
- data/doc/classes/Dnsruby/Update.src/M000255.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000256.html +41 -0
- data/doc/classes/Dnsruby/Update.src/M000257.html +34 -0
- data/doc/classes/Dnsruby/VerifyError.html +119 -0
- data/doc/classes/Dnsruby/ZoneTransfer.html +300 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000143.html +18 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000144.html +24 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000145.html +35 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +200 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000146.html +19 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000147.html +19 -0
- data/doc/created.rid +1 -0
- data/doc/files/lib/Dnsruby/Config_rb.html +101 -0
- data/doc/files/lib/Dnsruby/DNS_rb.html +110 -0
- data/doc/files/lib/Dnsruby/Hosts_rb.html +108 -0
- data/doc/files/lib/Dnsruby/Resolver_rb.html +109 -0
- data/doc/files/lib/Dnsruby/SingleResolver_rb.html +108 -0
- data/doc/files/lib/Dnsruby/TheLog_rb.html +110 -0
- data/doc/files/lib/Dnsruby/code_mapper_rb.html +101 -0
- data/doc/files/lib/Dnsruby/dnssec_rb.html +107 -0
- data/doc/files/lib/Dnsruby/event_machine_interface_rb.html +108 -0
- data/doc/files/lib/Dnsruby/ipv4_rb.html +101 -0
- data/doc/files/lib/Dnsruby/ipv6_rb.html +101 -0
- data/doc/files/lib/Dnsruby/message_rb.html +109 -0
- data/doc/files/lib/Dnsruby/name_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/A_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/CERT_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/DNSKEY_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/DS_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/IN_rb.html +112 -0
- data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/LOC_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/MX_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NSEC3PARAM_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NSEC3_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NSEC_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/OPT_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/PX_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/RP_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/RRSIG_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/RT_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/SOA_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/SPF_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/SRV_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +114 -0
- data/doc/files/lib/Dnsruby/resource/TXT_rb.html +108 -0
- data/doc/files/lib/Dnsruby/resource/X25_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/generic_rb.html +131 -0
- data/doc/files/lib/Dnsruby/resource/resource_rb.html +110 -0
- data/doc/files/lib/Dnsruby/select_thread_rb.html +111 -0
- data/doc/files/lib/Dnsruby/update_rb.html +101 -0
- data/doc/files/lib/Dnsruby/zone_transfer_rb.html +101 -0
- data/doc/files/lib/dnsruby_rb.html +118 -0
- data/doc/fr_class_index.html +108 -0
- data/doc/fr_file_index.html +75 -0
- data/doc/fr_method_index.html +321 -0
- data/doc/index.html +24 -0
- data/lib/Dnsruby/Config.rb +363 -0
- data/lib/Dnsruby/DNS.rb +293 -0
- data/lib/Dnsruby/Hosts.rb +126 -0
- data/lib/Dnsruby/Resolver.rb +999 -0
- data/lib/Dnsruby/SingleResolver.rb +493 -0
- data/lib/Dnsruby/TheLog.rb +60 -0
- data/lib/Dnsruby/code_mapper.rb +165 -0
- data/lib/Dnsruby/dnssec.rb +357 -0
- data/lib/Dnsruby/event_machine_interface.rb +264 -0
- data/lib/Dnsruby/ipv4.rb +74 -0
- data/lib/Dnsruby/ipv6.rb +144 -0
- data/lib/Dnsruby/message.rb +961 -0
- data/lib/Dnsruby/name.rb +332 -0
- data/lib/Dnsruby/resource/A.rb +56 -0
- data/lib/Dnsruby/resource/AAAA.rb +54 -0
- data/lib/Dnsruby/resource/AFSDB.rb +68 -0
- data/lib/Dnsruby/resource/CERT.rb +89 -0
- data/lib/Dnsruby/resource/DNSKEY.rb +242 -0
- data/lib/Dnsruby/resource/DS.rb +162 -0
- data/lib/Dnsruby/resource/HINFO.rb +52 -0
- data/lib/Dnsruby/resource/IN.rb +70 -0
- data/lib/Dnsruby/resource/ISDN.rb +54 -0
- data/lib/Dnsruby/resource/LOC.rb +255 -0
- data/lib/Dnsruby/resource/MINFO.rb +70 -0
- data/lib/Dnsruby/resource/MX.rb +66 -0
- data/lib/Dnsruby/resource/NAPTR.rb +90 -0
- data/lib/Dnsruby/resource/NSAP.rb +172 -0
- data/lib/Dnsruby/resource/NSEC.rb +243 -0
- data/lib/Dnsruby/resource/NSEC3.rb +173 -0
- data/lib/Dnsruby/resource/NSEC3PARAM.rb +120 -0
- data/lib/Dnsruby/resource/OPT.rb +210 -0
- data/lib/Dnsruby/resource/PX.rb +71 -0
- data/lib/Dnsruby/resource/RP.rb +67 -0
- data/lib/Dnsruby/resource/RRSIG.rb +256 -0
- data/lib/Dnsruby/resource/RT.rb +67 -0
- data/lib/Dnsruby/resource/SOA.rb +95 -0
- data/lib/Dnsruby/resource/SPF.rb +29 -0
- data/lib/Dnsruby/resource/SRV.rb +112 -0
- data/lib/Dnsruby/resource/TKEY.rb +163 -0
- data/lib/Dnsruby/resource/TSIG.rb +584 -0
- data/lib/Dnsruby/resource/TXT.rb +76 -0
- data/lib/Dnsruby/resource/X25.rb +53 -0
- data/lib/Dnsruby/resource/domain_name.rb +54 -0
- data/lib/Dnsruby/resource/generic.rb +151 -0
- data/lib/Dnsruby/resource/resource.rb +561 -0
- data/lib/Dnsruby/select_thread.rb +449 -0
- data/lib/Dnsruby/update.rb +262 -0
- data/lib/Dnsruby/zone_transfer.rb +332 -0
- data/lib/dnsruby.rb +512 -0
- data/test/custom.txt +4 -0
- data/test/resolv.conf +4 -0
- data/test/tc_axfr.rb +32 -0
- data/test/tc_dns.rb +230 -0
- data/test/tc_dnskey.rb +52 -0
- data/test/tc_dnsruby.rb +42 -0
- data/test/tc_dnssec.rb +88 -0
- data/test/tc_ds.rb +38 -0
- data/test/tc_escapedchars.rb +484 -0
- data/test/tc_event_machine_deferrable.rb +85 -0
- data/test/tc_event_machine_res.rb +174 -0
- data/test/tc_event_machine_single_res.rb +101 -0
- data/test/tc_event_machine_soak.rb +98 -0
- data/test/tc_header.rb +104 -0
- data/test/tc_misc.rb +139 -0
- data/test/tc_name.rb +53 -0
- data/test/tc_nsec.rb +36 -0
- data/test/tc_nsec3.rb +63 -0
- data/test/tc_nsec3param.rb +30 -0
- data/test/tc_packet.rb +179 -0
- data/test/tc_packet_unique_push.rb +102 -0
- data/test/tc_question.rb +51 -0
- data/test/tc_res_config.rb +92 -0
- data/test/tc_res_env.rb +51 -0
- data/test/tc_res_file.rb +42 -0
- data/test/tc_res_opt.rb +187 -0
- data/test/tc_resolver.rb +184 -0
- data/test/tc_rr-opt.rb +82 -0
- data/test/tc_rr-txt.rb +137 -0
- data/test/tc_rr-unknown.rb +99 -0
- data/test/tc_rr.rb +258 -0
- data/test/tc_rrset.rb +58 -0
- data/test/tc_rrsig.rb +32 -0
- data/test/tc_single_resolver.rb +169 -0
- data/test/tc_soak.rb +200 -0
- data/test/tc_soak_base.rb +136 -0
- data/test/tc_tcp.rb +35 -0
- data/test/tc_tkey.rb +75 -0
- data/test/tc_tsig.rb +237 -0
- data/test/tc_update.rb +215 -0
- data/test/ts_dnsruby.rb +17 -0
- data/test/ts_offline.rb +42 -0
- data/test/ts_online.rb +107 -0
- metadata +627 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#--
|
|
2
|
+
#Copyright 2007 Nominet UK
|
|
3
|
+
#
|
|
4
|
+
#Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
#you may not use this file except in compliance with the License.
|
|
6
|
+
#You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
#Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
#distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
#See the License for the specific language governing permissions and
|
|
14
|
+
#limitations under the License.
|
|
15
|
+
#++
|
|
16
|
+
require 'logger'
|
|
17
|
+
require 'singleton'
|
|
18
|
+
require 'thread'
|
|
19
|
+
module Dnsruby
|
|
20
|
+
#This singleton class holds a reference to the Logger object used by the whole of the Dnsruby project.
|
|
21
|
+
#
|
|
22
|
+
#It's Logger (which defaults to STDOUT, level FATAL) can be configured, or a new Logger can be supplied.
|
|
23
|
+
#
|
|
24
|
+
# Dnsruby::TheLog.level=Logger::DEBUG
|
|
25
|
+
# Dnsruby::TheLog.debug("Debug message")
|
|
26
|
+
#
|
|
27
|
+
class TheLog
|
|
28
|
+
include Singleton
|
|
29
|
+
def initialize() #:nodoc: all
|
|
30
|
+
@@mutex=Mutex.new
|
|
31
|
+
@@logger = Logger.new(STDOUT)
|
|
32
|
+
@@logger.level = Logger::FATAL
|
|
33
|
+
end
|
|
34
|
+
# Set a new Logger for use by Dnsruby
|
|
35
|
+
def set_logger(logger)
|
|
36
|
+
@@mutex.synchronize{
|
|
37
|
+
@@logger = logger
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
# Change the Logger level.
|
|
41
|
+
def level=(level)
|
|
42
|
+
@@mutex.synchronize{
|
|
43
|
+
@@logger.level = level
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
def level
|
|
47
|
+
@@mutex.synchronize{
|
|
48
|
+
return @@logger.level
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def self.method_missing(symbol, *args) #:nodoc: all
|
|
53
|
+
@@mutex.synchronize{
|
|
54
|
+
now = Time.now
|
|
55
|
+
@@logger.send(symbol, *args)
|
|
56
|
+
}
|
|
57
|
+
end
|
|
58
|
+
log = TheLog.instance
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
#--
|
|
2
|
+
#Copyright 2007 Nominet UK
|
|
3
|
+
#
|
|
4
|
+
#Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
#you may not use this file except in compliance with the License.
|
|
6
|
+
#You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
#Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
#distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
#See the License for the specific language governing permissions and
|
|
14
|
+
#limitations under the License.
|
|
15
|
+
#++
|
|
16
|
+
module Dnsruby
|
|
17
|
+
# CodeMapper superclass looks after String to code mappings (e.g. OpCode, RCode, etc.)
|
|
18
|
+
#
|
|
19
|
+
# Subclasses simply define a mapping of codes to variable names, and CodeMapper provides utility methods.
|
|
20
|
+
#
|
|
21
|
+
# All strings will come out as upper case
|
|
22
|
+
#
|
|
23
|
+
# Example :
|
|
24
|
+
# Types::AAAA or Types.AAAA
|
|
25
|
+
# rcode.string or rcode.code
|
|
26
|
+
class CodeMapper
|
|
27
|
+
include Comparable
|
|
28
|
+
|
|
29
|
+
@@strings = {}
|
|
30
|
+
@@stringsdown = {}
|
|
31
|
+
@@values = {}
|
|
32
|
+
@@maxcode = {}
|
|
33
|
+
|
|
34
|
+
attr_accessor :string, :code
|
|
35
|
+
alias to_code code
|
|
36
|
+
alias to_i code
|
|
37
|
+
alias to_string string
|
|
38
|
+
alias to_s string
|
|
39
|
+
|
|
40
|
+
def CodeMapper.maxcode
|
|
41
|
+
return @maxcode
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Creates the CodeMapper from the defined constants
|
|
45
|
+
def CodeMapper.update
|
|
46
|
+
|
|
47
|
+
@@strings[self] = {}
|
|
48
|
+
@@stringsdown[self] = {}
|
|
49
|
+
@@values[self] = {}
|
|
50
|
+
@@maxcode[self] = 0
|
|
51
|
+
|
|
52
|
+
constants = self.constants - CodeMapper.constants
|
|
53
|
+
constants.each do |i|
|
|
54
|
+
@@strings[self].store(i, const_get(i))
|
|
55
|
+
end
|
|
56
|
+
@@maxcode[self] = constants.length
|
|
57
|
+
@@values[self] = @@strings[self].invert
|
|
58
|
+
@@stringsdown[self] = Hash.new
|
|
59
|
+
@@strings[self].keys.each do |s|
|
|
60
|
+
@@stringsdown[self].store(s.downcase, @@strings[self][s])
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Add new a code to the CodeMapper
|
|
65
|
+
def CodeMapper.add_pair(string, code)
|
|
66
|
+
@@strings[self].store(string, code)
|
|
67
|
+
@@values[self]=@@strings[self].invert
|
|
68
|
+
@@stringsdown[self].store(string.downcase, code)
|
|
69
|
+
@@maxcode[self]+=1
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def unknown_string(arg) #:nodoc: all
|
|
73
|
+
raise ArgumentError.new("String #{arg} not a member of #{self.class}")
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def unknown_code(arg) #:nodoc: all
|
|
77
|
+
raise ArgumentError.new("Code #{arg} not a member of #{self.class}")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def self.method_missing(methId) #:nodoc: all
|
|
81
|
+
str = methId.id2name
|
|
82
|
+
return self.new(str)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def initialize(arg) #:nodoc: all
|
|
86
|
+
if (arg.kind_of?String)
|
|
87
|
+
if (@@stringsdown[self.class][arg.downcase] != nil)
|
|
88
|
+
set_string(arg)
|
|
89
|
+
else unknown_string(arg)
|
|
90
|
+
end
|
|
91
|
+
elsif (arg.kind_of?Fixnum)
|
|
92
|
+
if (@@values[self.class][arg] != nil)
|
|
93
|
+
set_code(arg)
|
|
94
|
+
else unknown_code(arg)
|
|
95
|
+
end
|
|
96
|
+
elsif (arg.kind_of?self.class)
|
|
97
|
+
set_code(arg.code)
|
|
98
|
+
else
|
|
99
|
+
raise ArgumentError.new("Unknown argument #{arg} for #{self.class}")
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def set_code(arg)
|
|
104
|
+
@code = arg
|
|
105
|
+
@string = @@values[self.class][@code]
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def set_string(arg)
|
|
109
|
+
@code = @@stringsdown[self.class][arg.downcase]
|
|
110
|
+
@string = @@strings[self.class].invert[@code]
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def inspect
|
|
114
|
+
return @string
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def CodeMapper.to_string(arg)
|
|
118
|
+
if (arg.kind_of?String)
|
|
119
|
+
return arg
|
|
120
|
+
else
|
|
121
|
+
return @@values[self][arg]
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def CodeMapper.to_code(arg)
|
|
126
|
+
if (arg.kind_of?Fixnum)
|
|
127
|
+
return arg
|
|
128
|
+
else
|
|
129
|
+
return @@stringsdown[self][arg.downcase]
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def <=>(other)
|
|
134
|
+
if (other.class == Fixnum)
|
|
135
|
+
self.code <=> other
|
|
136
|
+
else
|
|
137
|
+
self.code <=> other.code
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def ==(other)
|
|
142
|
+
if other.kind_of?CodeMapper
|
|
143
|
+
if other.string == @string && other.code == @code
|
|
144
|
+
return true
|
|
145
|
+
end
|
|
146
|
+
elsif other.kind_of?String
|
|
147
|
+
if other == @string
|
|
148
|
+
return true
|
|
149
|
+
end
|
|
150
|
+
elsif other.kind_of?Fixnum
|
|
151
|
+
if other == @code
|
|
152
|
+
return true
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
return false
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Return a regular expression which matches any codes or strings from the CodeMapper.
|
|
159
|
+
def self.regexp
|
|
160
|
+
# Longest ones go first, so the regex engine will match AAAA before A, etc.
|
|
161
|
+
return @@strings[self].keys.sort { |a, b| b.length <=> a.length }.join('|')
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
end
|
|
165
|
+
end
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
#---
|
|
2
|
+
# @TODO@
|
|
3
|
+
# RFC4033, section 7
|
|
4
|
+
# There is one more step that a security-aware stub resolver can take
|
|
5
|
+
# if, for whatever reason, it is not able to establish a useful trust
|
|
6
|
+
# relationship with the recursive name servers that it uses: it can
|
|
7
|
+
# perform its own signature validation by setting the Checking Disabled
|
|
8
|
+
# (CD) bit in its query messages. A validating stub resolver is thus
|
|
9
|
+
# able to treat the DNSSEC signatures as trust relationships between
|
|
10
|
+
# the zone administrators and the stub resolver itself.
|
|
11
|
+
#+++
|
|
12
|
+
module Dnsruby
|
|
13
|
+
# Dnsruby will, by default, request DNSSEC records on each query. It
|
|
14
|
+
# will also, by default, request that any checking be done by an upstream
|
|
15
|
+
# resolver - this assumes a secure link to a trusted resolver. In this case,
|
|
16
|
+
# the client application need do nothing to enjoy the benefits of DNSSEC.
|
|
17
|
+
#
|
|
18
|
+
# If an insecure link or untrusted resolver is used, then it is possible to
|
|
19
|
+
# verify messages using the Dnsruby::Dnssec#verify method, once a chain
|
|
20
|
+
# of trust has been established. In the absence of a signed root, the client
|
|
21
|
+
# application must supply Dnsruby
|
|
22
|
+
# with a (set of) trusted key(s). Dnsruby can then use those keys to verify
|
|
23
|
+
# responses, and build up a new set of trusted keys under the apex of the
|
|
24
|
+
# supplied trusted key. For example :
|
|
25
|
+
#
|
|
26
|
+
# res = Dnsruby::Resolver.new("dnssec.nominet.org.uk")
|
|
27
|
+
#
|
|
28
|
+
# # Create the trusted key that we know for a parent zone of the zone
|
|
29
|
+
# # we are interested in. This is assumed to be a Secure Entry Point
|
|
30
|
+
# # (the SEP flag of the key will be set by default)
|
|
31
|
+
# trusted_key = Dnsruby::RR.create({:name => "uk-dnssec.nic.uk.",
|
|
32
|
+
# :type => Dnsruby::Types.DNSKEY,
|
|
33
|
+
# :key=> "AQPJO6LjrCHhzSF9PIVV7YoQ8iE31FXvghx+14E+jsv4uWJR9jLrxMYm sFOGAKWhiis832ISbPTYtF8sxbNVEotgf9eePruAFPIg6ZixG4yMO9XG LXmcKTQ/cVudqkU00V7M0cUzsYrhc4gPH/NKfQJBC5dbBkbIXJkksPLv Fe8lReKYqocYP6Bng1eBTtkA+N+6mSXzCwSApbNysFnm6yfQwtKlr75p m+pd0/Um+uBkR4nJQGYNt0mPuw4QVBu1TfF5mQYIFoDYASLiDQpvNRN3 US0U5DEG9mARulKSSw448urHvOBwT9Gx5qF2NE4H9ySjOdftjpj62kjb Lmc8/v+z"
|
|
34
|
+
# })
|
|
35
|
+
# ret = Dnsruby::DnssecVerifier.add_trusted_key(trusted_key)
|
|
36
|
+
#
|
|
37
|
+
# # Now use the trusted key to obtain the other keys for the zone
|
|
38
|
+
# r = res.query("uk-dnssec.nic.uk", Dnsruby::Types.ANY)
|
|
39
|
+
# if (!Dnsruby::DnssecVerifier.verify(r))
|
|
40
|
+
# # handle verification failure
|
|
41
|
+
# end
|
|
42
|
+
#
|
|
43
|
+
# r = res.query("www.uk-dnssec.nic.uk", Dnsruby::Types.ANY)
|
|
44
|
+
# if (!Dnsruby::DnssecVerifier.verify(r))
|
|
45
|
+
# # handle verification failure
|
|
46
|
+
# end
|
|
47
|
+
#
|
|
48
|
+
# # Follow the chain of trust
|
|
49
|
+
# r = res.query("bigzone.uk-dnssec.nic.uk", Dnsruby::Types.DS)
|
|
50
|
+
# if (!Dnsruby::DnssecVerifier.verify(r))
|
|
51
|
+
# # handle verification failure
|
|
52
|
+
# end
|
|
53
|
+
#
|
|
54
|
+
# r = res.query("bigzone.uk-dnssec.nic.uk", Dnsruby::Types.ANY)
|
|
55
|
+
# if (!Dnsruby::DnssecVerifier.verify(r))
|
|
56
|
+
# # handle verification failure
|
|
57
|
+
# end
|
|
58
|
+
#
|
|
59
|
+
# # Now query records in the zone we are interested in.
|
|
60
|
+
# # Dnsruby stores all the keys so we can now verify any record signed by
|
|
61
|
+
# # any key in the trusted key store.
|
|
62
|
+
# r = res.query("aaa.bigzone.uk-dnssec.nic.uk", Dnsruby::Types.ANY)
|
|
63
|
+
# if (!Dnsruby::DnssecVerifier.verify(r))
|
|
64
|
+
# # handle verification failure
|
|
65
|
+
# end
|
|
66
|
+
#
|
|
67
|
+
# # Verify an rrset
|
|
68
|
+
# rrset = r.answer.rrset('NSEC')
|
|
69
|
+
# if (!Dnsruby::DnssecVerifier.verify(rrset))
|
|
70
|
+
# # handle verification failure
|
|
71
|
+
# end
|
|
72
|
+
|
|
73
|
+
class Dnssec
|
|
74
|
+
# A class to cache trusted keys
|
|
75
|
+
class KeyCache #:nodoc: all
|
|
76
|
+
def initialize(keys=[])
|
|
77
|
+
@keys = []
|
|
78
|
+
add(keys)
|
|
79
|
+
end
|
|
80
|
+
def add(k)
|
|
81
|
+
if (k == nil)
|
|
82
|
+
return false
|
|
83
|
+
elsif (k.instance_of?RRSet)
|
|
84
|
+
k.rrs.each {|rr| @keys.push(rr)}
|
|
85
|
+
elsif (k.kind_of?RR)
|
|
86
|
+
@keys.push(k)
|
|
87
|
+
elsif (k.kind_of?Array)
|
|
88
|
+
k.each {|rr| @keys.push(rr)}
|
|
89
|
+
else
|
|
90
|
+
return false
|
|
91
|
+
end
|
|
92
|
+
remove_duplicate_keys
|
|
93
|
+
return true
|
|
94
|
+
end
|
|
95
|
+
def remove_duplicate_keys
|
|
96
|
+
# There must be a better way than this!!
|
|
97
|
+
@keys.each_index do |index|
|
|
98
|
+
key = @keys[index]
|
|
99
|
+
(index+1..@keys.length-1).each do |pos|
|
|
100
|
+
if (key == @keys[pos])
|
|
101
|
+
@keys.delete_at(pos)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
def each
|
|
107
|
+
@keys.each {|key| yield key}
|
|
108
|
+
end
|
|
109
|
+
def keys
|
|
110
|
+
return @keys
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# The set of keys which are trusted. These must be initialised with at least
|
|
115
|
+
# one trusted key by the client application, if verification is to be performed.
|
|
116
|
+
@@trusted_keys = KeyCache.new
|
|
117
|
+
|
|
118
|
+
# The set of keys which have been indicated by a DS RRSet which has been
|
|
119
|
+
# signed by a trusted key. Although we have not yet located these keys, we
|
|
120
|
+
# have the details (tag and digest) which can identify the keys when we
|
|
121
|
+
# see them. At that point, they will be added to our trusted keys.
|
|
122
|
+
@@to_be_trusted_keys = []
|
|
123
|
+
|
|
124
|
+
# def initialize
|
|
125
|
+
# # @TODO@ Maybe write a recursive validating resolver?
|
|
126
|
+
#
|
|
127
|
+
# end
|
|
128
|
+
|
|
129
|
+
# Check that the RRSet and RRSIG record are compatible
|
|
130
|
+
def self.check_rr_data(rrset, sigrec)#:nodoc: all
|
|
131
|
+
#Each RR MUST have the same owner name as the RRSIG RR;
|
|
132
|
+
if (rrset.name.to_s != sigrec.name.to_s)
|
|
133
|
+
raise VerifyError.new("RRSET should have same owner name as RRSIG for verification (rrsert=#{rrset.name}, sigrec=#{sigrec.name}")
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
#Each RR MUST have the same class as the RRSIG RR;
|
|
137
|
+
if (rrset.klass != sigrec.klass)
|
|
138
|
+
raise VerifyError.new("RRSET should have same DNS class as RRSIG for verification")
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
#Each RR in the RRset MUST have the RR type listed in the
|
|
142
|
+
#RRSIG RR's Type Covered field;
|
|
143
|
+
if (rrset.type != sigrec.type_covered)
|
|
144
|
+
raise VerifyError.new("RRSET should have same type as RRSIG for verification")
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
#Each RR in the RRset MUST have the TTL listed in the
|
|
148
|
+
#RRSIG Original TTL Field;
|
|
149
|
+
if (rrset.ttl != sigrec.ttl)
|
|
150
|
+
raise VerifyError.new("RRSET should have same ttl as RRSIG for verification")
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Now check that we are in the validity period for the RRSIG
|
|
154
|
+
now = Time.now.to_i
|
|
155
|
+
if ((sigrec.expiration < now) || (sigrec.inception > now))
|
|
156
|
+
raise VerifyError.new("Signature record not in validity period")
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Add the specified key(s) to the trusted key cache.
|
|
161
|
+
# k can be a DNSKEY, or an Array or RRSet of DNSKEYs.
|
|
162
|
+
def self.add_trusted_key(k)
|
|
163
|
+
if (k.instance_of?RRSet)
|
|
164
|
+
k.rrs.each {|key| add_trusted_key(key)}
|
|
165
|
+
return
|
|
166
|
+
end
|
|
167
|
+
k.flags = k.flags | RR::IN::DNSKEY::SEP_KEY
|
|
168
|
+
@@trusted_keys.add(k)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Wipes the cache of trusted keys
|
|
172
|
+
def self.clear_trusted_keys
|
|
173
|
+
@@trusted_keys = KeyCache.new
|
|
174
|
+
@@to_be_trusted_keys = []
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# Check that the key fits a signed DS record key details
|
|
178
|
+
# If so, then add the key to the trusted keys
|
|
179
|
+
def self.check_ds(key, ds)#:nodoc: all
|
|
180
|
+
if (ds.check_key(key))
|
|
181
|
+
@@trusted_keys.add(key)
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
# Verify the specified message (or RRSet) using the set of trusted keys.
|
|
186
|
+
# If keys is a DNSKEY, or an Array or RRSet of DNSKEYs, then keys
|
|
187
|
+
# is added to the set of trusted keys before the message (or RRSet) is
|
|
188
|
+
# verified.
|
|
189
|
+
#
|
|
190
|
+
# If msg is a Dnsruby::Message, then any signed DNSKEY or DS RRSets are
|
|
191
|
+
# processed first, and any new keys are added to the trusted key set
|
|
192
|
+
# before the other RRSets are checked.
|
|
193
|
+
#
|
|
194
|
+
# msg can be a Dnsruby::Message or Dnsruby::RRSet.
|
|
195
|
+
# keys may be nil, or a Dsnruby::RR::DNSKEY or an Array or RRSet of
|
|
196
|
+
# Dnsruby::RR::DNSKEY
|
|
197
|
+
#
|
|
198
|
+
# Returns true if the message verifies OK, and false otherwise.
|
|
199
|
+
def self.verify(msg, keys = nil)
|
|
200
|
+
if (msg.kind_of?RRSet)
|
|
201
|
+
return verify_rrset(msg, keys)
|
|
202
|
+
end
|
|
203
|
+
# Use the set of trusted keys to check any RRSets we can, ideally
|
|
204
|
+
# those of other DNSKEY RRSets first. Then, see if we can use any of the
|
|
205
|
+
# new total set of keys to check the rest of the rrsets.
|
|
206
|
+
# Return true if we can verify the whole message.
|
|
207
|
+
|
|
208
|
+
@@trusted_keys.add(keys)
|
|
209
|
+
|
|
210
|
+
msg.each_section do |section|
|
|
211
|
+
ds_rrset = section.rrset(Types.DS)
|
|
212
|
+
if (ds_rrset && ds_rrset.num_sigs > 0)
|
|
213
|
+
if (verify_rrset(ds_rrset))
|
|
214
|
+
ds_rrset.rrs.each do |ds|
|
|
215
|
+
# Work out which key this refers to, and add it to the trusted key store
|
|
216
|
+
found = false
|
|
217
|
+
msg.each_section do |section|
|
|
218
|
+
section.rrset('DNSKEY').rrs.each do |rr|
|
|
219
|
+
if (check_ds(rr, ds))
|
|
220
|
+
found = true
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
@@trusted_keys.each {|key|
|
|
225
|
+
if (check_ds(key, ds))
|
|
226
|
+
found = true
|
|
227
|
+
end
|
|
228
|
+
}
|
|
229
|
+
# If we couldn't find the trusted key, then we should store the
|
|
230
|
+
# key tag and digest in a @@to_be_trusted_keys.
|
|
231
|
+
# Each time we see a new key (which has been signed) then we should
|
|
232
|
+
# check if it is sitting on the to_be_trusted_keys store.
|
|
233
|
+
# If it is, then we should add it to the trusted_keys and remove the
|
|
234
|
+
# DS from the to_be_trusted store
|
|
235
|
+
if (!found)
|
|
236
|
+
@@to_be_trusted_keys.push(ds)
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
else
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
key_rrset = section.rrset(Types.DNSKEY)
|
|
244
|
+
if (key_rrset && key_rrset.num_sigs > 0)
|
|
245
|
+
if (verify_rrset(key_rrset))
|
|
246
|
+
key_rrset.rrs.each do |rr|
|
|
247
|
+
@@trusted_keys.add(rr)
|
|
248
|
+
end
|
|
249
|
+
else
|
|
250
|
+
# See if the keys match any of the to_be_trusted_keys
|
|
251
|
+
key_rrset.rrs.each do |key|
|
|
252
|
+
@@to_be_trusted_keys.each do |tbtk|
|
|
253
|
+
if (check_ds(key, tbtk))
|
|
254
|
+
@@to_be_trusted_keys.delete(tbtk)
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
msg.section_rrsets.each do |section, rrsets|
|
|
263
|
+
rrsets.each do |rrset|
|
|
264
|
+
if (section == "additional" && rrset.num_sigs == 0)
|
|
265
|
+
next
|
|
266
|
+
end
|
|
267
|
+
if (!verify_rrset(rrset))
|
|
268
|
+
return false
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
return true
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# Find the first matching DNSKEY and RRSIG record in the two sets.
|
|
276
|
+
def self.get_matching_key(keys, sigrecs)#:nodoc: all
|
|
277
|
+
if ((keys == nil) || (sigrecs == nil))
|
|
278
|
+
return nil, nil
|
|
279
|
+
end
|
|
280
|
+
keys.each {|key|
|
|
281
|
+
sigrecs.each {|sig|
|
|
282
|
+
if ((key.key_tag == sig.key_tag) && (key.algorithm == sig.algorithm))
|
|
283
|
+
return key, sig
|
|
284
|
+
end
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return nil, nil
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# Verify the signature of an rrset encoded with the specified dnskey record
|
|
291
|
+
# or the set of trusted keys.
|
|
292
|
+
#
|
|
293
|
+
# Returns true if the RRSet verified, false otherwise.
|
|
294
|
+
def self.verify_rrset(rrset, keys = nil)
|
|
295
|
+
# @TODO@ Finer-grained reporting than "false".
|
|
296
|
+
sigrecs = rrset.sigs
|
|
297
|
+
# print "\n\n NO RRSIGS!!!\n\n" if (rrset.num_sigs == 0)
|
|
298
|
+
return true if (rrset.num_sigs == 0)
|
|
299
|
+
sigrecs.each do |sigrec|
|
|
300
|
+
check_rr_data(rrset, sigrec)
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
keyrec = nil
|
|
304
|
+
sigrec = nil
|
|
305
|
+
keyrec, sigrec = get_matching_key(@@trusted_keys, sigrecs)
|
|
306
|
+
if (keyrec == nil)
|
|
307
|
+
keyrec, sigrec = get_matching_key(keys, sigrecs)
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
return false if !keyrec
|
|
311
|
+
|
|
312
|
+
# RFC 4034
|
|
313
|
+
#3.1.8.1. Signature Calculation
|
|
314
|
+
|
|
315
|
+
if (keyrec.sep_key? && !keyrec.zone_key?)
|
|
316
|
+
TheLog.error("DNSKEY with with SEP flag set and Zone Key flag not set was used to verify RRSIG over RRSET - this is not allowed by RFC4034 section 2.1.1")
|
|
317
|
+
return false
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
#Any DNS names in the RDATA field of each RR MUST be in
|
|
321
|
+
#canonical form; and
|
|
322
|
+
#The RRset MUST be sorted in canonical order.
|
|
323
|
+
rrset = rrset.sort_canonical
|
|
324
|
+
|
|
325
|
+
sig_data =sigrec.sig_data
|
|
326
|
+
|
|
327
|
+
#RR(i) = owner | type | class | TTL | RDATA length | RDATA
|
|
328
|
+
rrset.each do |rec|
|
|
329
|
+
data = MessageEncoder.new { |msg|
|
|
330
|
+
msg.put_rr(rec, true)
|
|
331
|
+
}.to_s # @TODO@ worry about wildcards here?
|
|
332
|
+
sig_data += data
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
# Now calculate the signature
|
|
336
|
+
verified = false
|
|
337
|
+
if (sigrec.algorithm == Algorithms.RSASHA1)
|
|
338
|
+
verified = keyrec.public_key.verify(OpenSSL::Digest::SHA1.new, sigrec.signature, sig_data)
|
|
339
|
+
elsif (sigrec.algorithm == HMAC_SHA256)
|
|
340
|
+
verified = keyrec.public_key.verify(OpenSSL::Digest::SHA256.new, sigrec.signature, sig_data)
|
|
341
|
+
else
|
|
342
|
+
raise RuntimeError.new("Algorithm #{sigrec.algorithm.string} unsupported by Dnsruby")
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
if (verified)
|
|
346
|
+
# Sort out the TTLs - set it to the minimum valid ttl
|
|
347
|
+
expiration_diff = (sigrec.expiration - Time.now.to_i).abs
|
|
348
|
+
rrset.ttl = ([rrset.ttl, sigrec.ttl, sigrec.original_ttl,
|
|
349
|
+
expiration_diff].sort)[0]
|
|
350
|
+
|
|
351
|
+
return true
|
|
352
|
+
end
|
|
353
|
+
return false
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
end
|
|
357
|
+
end
|