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,76 @@
|
|
|
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 'shellwords'
|
|
17
|
+
module Dnsruby
|
|
18
|
+
class RR
|
|
19
|
+
#Class for DNS Text (TXT) resource records.
|
|
20
|
+
#RFC 1035 Section 3.3.14
|
|
21
|
+
class TXT < RR
|
|
22
|
+
ClassValue = nil #:nodoc: all
|
|
23
|
+
TypeValue = Types::TXT #:nodoc: all
|
|
24
|
+
|
|
25
|
+
#List of the individual elements
|
|
26
|
+
attr_accessor :strings
|
|
27
|
+
|
|
28
|
+
def data
|
|
29
|
+
@strings[0]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def from_data(data)
|
|
33
|
+
@strings = data
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def from_hash(hash)
|
|
37
|
+
if (hash.has_key?:strings)
|
|
38
|
+
from_string(hash[:strings])
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def from_string(input)
|
|
43
|
+
words = Shellwords.shellwords(input)
|
|
44
|
+
|
|
45
|
+
@strings=[]
|
|
46
|
+
|
|
47
|
+
if (words != nil)
|
|
48
|
+
words.each { |string|
|
|
49
|
+
string .gsub!(/\\"/, '"')
|
|
50
|
+
@strings.push(string)
|
|
51
|
+
}
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def rdata_to_string
|
|
56
|
+
if (defined?@strings)
|
|
57
|
+
temp = @strings.map {|str|
|
|
58
|
+
str.gsub(/"/, '\\"')
|
|
59
|
+
%<"#{str}">
|
|
60
|
+
}
|
|
61
|
+
return temp.join(' ')
|
|
62
|
+
end
|
|
63
|
+
return ''
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
67
|
+
msg.put_string_list(@strings)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
71
|
+
strings = msg.get_string_list
|
|
72
|
+
return self.new(strings)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
class RR
|
|
18
|
+
#Class for DNS X25 resource records.
|
|
19
|
+
#RFC 1183 Section 3.1
|
|
20
|
+
class X25 < RR
|
|
21
|
+
ClassValue = nil #:nodoc: all
|
|
22
|
+
TypeValue = Types::X25 #:nodoc: all
|
|
23
|
+
|
|
24
|
+
#The PSDN address
|
|
25
|
+
attr_accessor :address
|
|
26
|
+
|
|
27
|
+
def from_data(data)
|
|
28
|
+
@address = data
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def from_string(input)
|
|
32
|
+
@address = input
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def rdata_to_string
|
|
36
|
+
if (@address!=nil)
|
|
37
|
+
return @address
|
|
38
|
+
else
|
|
39
|
+
return ""
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
44
|
+
msg.put_string(@address)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
48
|
+
address = msg.get_string
|
|
49
|
+
return self.new(*address)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
class RR
|
|
18
|
+
# Abstract superclass for RR's which have a domain name in the data section.
|
|
19
|
+
class DomainName < RR
|
|
20
|
+
# The domain name in the RR data section.
|
|
21
|
+
attr_reader :domainname
|
|
22
|
+
|
|
23
|
+
def set_domain_name(newname)
|
|
24
|
+
@domainname=Name.create(newname)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
alias domainname= set_domain_name
|
|
28
|
+
|
|
29
|
+
def from_hash(hash) #:nodoc: all
|
|
30
|
+
set_domain_name(hash[:domainname])
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def from_data(data) #:nodoc: all
|
|
34
|
+
@domainname = data
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def from_string(input) #:nodoc: all
|
|
38
|
+
set_domain_name(input)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def rdata_to_string #:nodoc: all
|
|
42
|
+
return @domainname.to_s
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
46
|
+
msg.put_name(@domainname, canonical)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
50
|
+
return self.new(msg.get_name)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,151 @@
|
|
|
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
|
+
class RR
|
|
18
|
+
#Class to store generic RRs (RFC 3597)
|
|
19
|
+
class Generic < RR # RFC 3597
|
|
20
|
+
#data for the generic resource record
|
|
21
|
+
attr_reader :data
|
|
22
|
+
|
|
23
|
+
def from_data(data) #:nodoc: all
|
|
24
|
+
@data = data[0]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def rdata_to_string #:nodoc: all
|
|
28
|
+
if (@data!=nil)
|
|
29
|
+
return "\\# " + @data.length.to_s + " " + @data.unpack("H*")[0]
|
|
30
|
+
end
|
|
31
|
+
return "#NO DATA"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def from_string(data) #:nodoc: all
|
|
35
|
+
@data = data
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
39
|
+
msg.put_bytes(data)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
43
|
+
return self.new(msg.get_bytes)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.create(type_value, class_value) #:nodoc:
|
|
47
|
+
c = Class.new(Generic)
|
|
48
|
+
# c.type = type_value
|
|
49
|
+
# c.klass = class_value
|
|
50
|
+
c.const_set(:TypeValue, type_value)
|
|
51
|
+
c.const_set(:ClassValue, class_value)
|
|
52
|
+
Generic.const_set("Type#{type_value}_Class#{class_value}", c)
|
|
53
|
+
ClassHash[[type_value, class_value]] = c
|
|
54
|
+
return c
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#--
|
|
59
|
+
# Standard (class generic) RRs
|
|
60
|
+
#++
|
|
61
|
+
#NS RR
|
|
62
|
+
#Nameserver resource record
|
|
63
|
+
class NS < DomainName
|
|
64
|
+
ClassValue = nil #:nodoc: all
|
|
65
|
+
TypeValue = Types::NS #:nodoc: all
|
|
66
|
+
|
|
67
|
+
alias nsdname domainname
|
|
68
|
+
alias nsdname= domainname=
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
#CNAME RR
|
|
72
|
+
#The canonical name for an alias
|
|
73
|
+
class CNAME < DomainName
|
|
74
|
+
ClassValue = nil #:nodoc: all
|
|
75
|
+
TypeValue = Types::CNAME #:nodoc: all
|
|
76
|
+
|
|
77
|
+
alias cname domainname
|
|
78
|
+
alias cname= domainname=
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
#DNAME RR
|
|
82
|
+
class DNAME < DomainName
|
|
83
|
+
ClassValue = nil #:nodoc: all
|
|
84
|
+
TypeValue = Types::DNAME #:nodoc: all
|
|
85
|
+
|
|
86
|
+
alias dname domainname
|
|
87
|
+
alias dname= domainname=
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
#MB RR
|
|
91
|
+
class MB < DomainName
|
|
92
|
+
ClassValue = nil #:nodoc: all
|
|
93
|
+
TypeValue = Types::MB #:nodoc: all
|
|
94
|
+
alias madname domainname
|
|
95
|
+
alias madname= domainname=
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
#MG RR
|
|
99
|
+
class MG < DomainName
|
|
100
|
+
ClassValue = nil #:nodoc: all
|
|
101
|
+
TypeValue = Types::MG #:nodoc: all
|
|
102
|
+
alias mgmname domainname
|
|
103
|
+
alias mgmname= domainname=
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
#MR RR
|
|
107
|
+
class MR < DomainName
|
|
108
|
+
ClassValue = nil #:nodoc: all
|
|
109
|
+
TypeValue = Types::MR #:nodoc: all
|
|
110
|
+
alias newname domainname
|
|
111
|
+
alias newname= domainname=
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
#PTR RR
|
|
115
|
+
class PTR < DomainName
|
|
116
|
+
ClassValue = nil #:nodoc: all
|
|
117
|
+
TypeValue = Types::PTR #:nodoc: all
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
#ANY RR
|
|
121
|
+
# A Query type requesting any RR
|
|
122
|
+
class ANY < RR
|
|
123
|
+
ClassValue = nil #:nodoc: all
|
|
124
|
+
TypeValue = Types::ANY #:nodoc: all
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
require 'Dnsruby/resource/HINFO'
|
|
129
|
+
require 'Dnsruby/resource/MINFO'
|
|
130
|
+
require 'Dnsruby/resource/ISDN'
|
|
131
|
+
require 'Dnsruby/resource/MX'
|
|
132
|
+
require 'Dnsruby/resource/NAPTR'
|
|
133
|
+
require 'Dnsruby/resource/NSAP'
|
|
134
|
+
require 'Dnsruby/resource/PX'
|
|
135
|
+
require 'Dnsruby/resource/RP'
|
|
136
|
+
require 'Dnsruby/resource/RT'
|
|
137
|
+
require 'Dnsruby/resource/SOA'
|
|
138
|
+
require 'Dnsruby/resource/TXT'
|
|
139
|
+
require 'Dnsruby/resource/X25'
|
|
140
|
+
require 'Dnsruby/resource/SPF'
|
|
141
|
+
require 'Dnsruby/resource/CERT'
|
|
142
|
+
require 'Dnsruby/resource/LOC'
|
|
143
|
+
require 'Dnsruby/resource/OPT'
|
|
144
|
+
require 'Dnsruby/resource/TSIG'
|
|
145
|
+
require 'Dnsruby/resource/TKEY'
|
|
146
|
+
require 'Dnsruby/resource/DNSKEY'
|
|
147
|
+
require 'Dnsruby/resource/RRSIG'
|
|
148
|
+
require 'Dnsruby/resource/NSEC'
|
|
149
|
+
require 'Dnsruby/resource/DS'
|
|
150
|
+
require 'Dnsruby/resource/NSEC3'
|
|
151
|
+
require 'Dnsruby/resource/NSEC3PARAM'
|
|
@@ -0,0 +1,561 @@
|
|
|
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
|
+
ClassHash = {} #:nodoc: all
|
|
18
|
+
|
|
19
|
+
# RFC2181, section 5
|
|
20
|
+
# "It is however possible for most record types to exist
|
|
21
|
+
# with the same label, class and type, but with different data. Such a
|
|
22
|
+
# group of records is hereby defined to be a Resource Record Set
|
|
23
|
+
# (RRSet)."
|
|
24
|
+
# This class also stores the RRSIG records which cover the RRSet
|
|
25
|
+
class RRSet
|
|
26
|
+
# The number of RRSIGs stored in this RRSet
|
|
27
|
+
attr_reader :num_sigs
|
|
28
|
+
def initialize(rrs = [])
|
|
29
|
+
if (!rrs.instance_of?Array)
|
|
30
|
+
rrs = [rrs]
|
|
31
|
+
end
|
|
32
|
+
@rrs = []
|
|
33
|
+
@num_sigs = 0
|
|
34
|
+
rrs.each {|rr| add(rr)}
|
|
35
|
+
end
|
|
36
|
+
# The RRSIGs stored with this RRSet
|
|
37
|
+
def sigs
|
|
38
|
+
return @rrs[@rrs.length-@num_sigs, @num_sigs]
|
|
39
|
+
end
|
|
40
|
+
# The RRs (not RRSIGs) stored in this RRSet
|
|
41
|
+
def rrs
|
|
42
|
+
return @rrs[0, @rrs.length-@num_sigs]
|
|
43
|
+
end
|
|
44
|
+
def privateAdd(r) #:nodoc:
|
|
45
|
+
if @rrs.include?r
|
|
46
|
+
return true
|
|
47
|
+
end
|
|
48
|
+
new_pos = @rrs.length - @num_sigs
|
|
49
|
+
if ((@num_sigs == @rrs.length) && @num_sigs > 0) # if we added RRSIG first
|
|
50
|
+
if (r.type != @rrs.last.type_covered)
|
|
51
|
+
return false
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
if (r.type == Types.RRSIG)
|
|
55
|
+
new_pos = @rrs.length
|
|
56
|
+
@num_sigs += 1
|
|
57
|
+
end
|
|
58
|
+
@rrs.insert(new_pos, r)
|
|
59
|
+
return true
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
#Add the RR to this RRSet
|
|
63
|
+
def add(r)
|
|
64
|
+
if (r.instance_of?RRSet)
|
|
65
|
+
ret = false
|
|
66
|
+
[r.rrs, r.sigs].each {|rr| ret = add(rr)}
|
|
67
|
+
return ret
|
|
68
|
+
end
|
|
69
|
+
r = RR.create(r.to_s) # clone the record
|
|
70
|
+
if (@rrs.size() == 0) # && !(r.type == Types.RRSIG))
|
|
71
|
+
return privateAdd(r)
|
|
72
|
+
end
|
|
73
|
+
# Check the type, klass and ttl are correct
|
|
74
|
+
first = @rrs[0]
|
|
75
|
+
if (!r.sameRRset(first))
|
|
76
|
+
return false
|
|
77
|
+
# raise ArgumentError.new("record does not match rrset")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
if (!(r.type == Types.RRSIG) && (!(first.type == Types.RRSIG)))
|
|
81
|
+
if (r.ttl != first.ttl) # RFC2181, section 5.2
|
|
82
|
+
if (r.ttl > first.ttl)
|
|
83
|
+
r.ttl=(first.ttl)
|
|
84
|
+
else
|
|
85
|
+
@rrs.each do |rr|
|
|
86
|
+
rr.ttl = r.ttl
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
return privateAdd(r)
|
|
93
|
+
return true
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
#Return a new RRset which contains the RRs from this
|
|
97
|
+
#RRset into canonical order (RFC 4034 section 6)
|
|
98
|
+
def sort_canonical
|
|
99
|
+
#Make a list, for all the RRs, where each RR contributes
|
|
100
|
+
#the canonical RDATA encoding
|
|
101
|
+
canonical_rrs = []
|
|
102
|
+
self.rrs.each do |rr|
|
|
103
|
+
data = MessageEncoder.new {|msg|
|
|
104
|
+
msg.put_rr(rr, true)
|
|
105
|
+
}.to_s
|
|
106
|
+
canonical_rrs.push(data)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Check there are no identical records - if there are duplicated entries
|
|
110
|
+
# then remove them
|
|
111
|
+
canonical_rrs.uniq!
|
|
112
|
+
|
|
113
|
+
#Sort it (the absence of an octet sorts before a zero octet.)
|
|
114
|
+
canonical_rrs.sort!
|
|
115
|
+
|
|
116
|
+
return_rrs = RRSet.new
|
|
117
|
+
canonical_rrs.each {|rr|
|
|
118
|
+
MessageDecoder.new(rr) {|msg|
|
|
119
|
+
new_rr = msg.get_rr
|
|
120
|
+
return_rrs.add(new_rr)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return return_rrs
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
#Delete the RR from this RRSet
|
|
127
|
+
def delete(rr)
|
|
128
|
+
@rrs.delete(rr)
|
|
129
|
+
end
|
|
130
|
+
def each
|
|
131
|
+
@rrs.each do |rr|
|
|
132
|
+
yield rr
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
def [](index)
|
|
136
|
+
return @rrs[index]
|
|
137
|
+
end
|
|
138
|
+
#Return the type of this RRSet
|
|
139
|
+
def type
|
|
140
|
+
return @rrs[0].type
|
|
141
|
+
end
|
|
142
|
+
#Return the klass of this RRSet
|
|
143
|
+
def klass
|
|
144
|
+
return @rrs[0].klass
|
|
145
|
+
end
|
|
146
|
+
#Return the ttl of this RRSet
|
|
147
|
+
def ttl
|
|
148
|
+
return @rrs[0].ttl
|
|
149
|
+
end
|
|
150
|
+
def ttl=(ttl)
|
|
151
|
+
[rrs, sigs].each {|rrs|
|
|
152
|
+
rrs.each {|rr|
|
|
153
|
+
rr.ttl = ttl
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
end
|
|
157
|
+
def name
|
|
158
|
+
return @rrs[0].name
|
|
159
|
+
end
|
|
160
|
+
def to_s
|
|
161
|
+
ret = ""
|
|
162
|
+
each {|rec|
|
|
163
|
+
ret += rec.to_s + "\n"
|
|
164
|
+
}
|
|
165
|
+
return ret
|
|
166
|
+
end
|
|
167
|
+
def length
|
|
168
|
+
return @rrs.length
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
#Superclass for all Dnsruby resource records.
|
|
173
|
+
#
|
|
174
|
+
#Represents a DNS RR (resource record) [RFC1035, section 3.2]
|
|
175
|
+
#
|
|
176
|
+
#Use Dnsruby::RR::create(...) to create a new RR record.
|
|
177
|
+
#
|
|
178
|
+
# mx = Dnsruby::RR.create("example.com. 7200 MX 10 mailhost.example.com.")
|
|
179
|
+
#
|
|
180
|
+
# rr = Dnsruby::RR.create({:name => "example.com", :type => "MX", :ttl => 7200,
|
|
181
|
+
# :preference => 10, :exchange => "mailhost.example.com"})
|
|
182
|
+
#
|
|
183
|
+
# s = rr.to_s # Get a String representation of the RR (in zone file format)
|
|
184
|
+
# rr_again = Dnsruby::RR.create(s)
|
|
185
|
+
#
|
|
186
|
+
class RR
|
|
187
|
+
|
|
188
|
+
# A regular expression which catches any valid resource record.
|
|
189
|
+
@@RR_REGEX = Regexp.new("^\\s*(\\S+)\\s*(\\d+)?\\s*(#{Classes.regexp +
|
|
190
|
+
"|CLASS\\d+"})?\\s*(#{Types.regexp + '|TYPE\\d+'})?\\s*([\\s\\S]*)\$") #:nodoc: all
|
|
191
|
+
|
|
192
|
+
#The Resource's domain name
|
|
193
|
+
attr_reader :name
|
|
194
|
+
#The Resource type
|
|
195
|
+
attr_reader :type
|
|
196
|
+
#The Resource class
|
|
197
|
+
attr_reader :klass
|
|
198
|
+
#The Resource Time-To-Live
|
|
199
|
+
attr_accessor :ttl
|
|
200
|
+
#The Resource data section
|
|
201
|
+
attr_accessor :rdata
|
|
202
|
+
|
|
203
|
+
def rdlength
|
|
204
|
+
return rdata.length
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def name=(newname)
|
|
208
|
+
if (!(newname.kind_of?Name))
|
|
209
|
+
@name=Name.create(newname)
|
|
210
|
+
else
|
|
211
|
+
@name = newname
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def type=(type)
|
|
216
|
+
@type = Types.new(type)
|
|
217
|
+
end
|
|
218
|
+
alias :rr_type :type
|
|
219
|
+
|
|
220
|
+
def klass=(klass)
|
|
221
|
+
@klass= Classes.new(klass)
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# Determines if two Records could be part of the same RRset.
|
|
225
|
+
# This compares the name, type, and class of the Records; the ttl and
|
|
226
|
+
# rdata are not compared.
|
|
227
|
+
def sameRRset(rec)
|
|
228
|
+
if (@klass != rec.klass || @name != rec.name)
|
|
229
|
+
return false
|
|
230
|
+
end
|
|
231
|
+
[rec, self].each { |rr|
|
|
232
|
+
if (rr.type == Types.RRSIG)
|
|
233
|
+
return ((@type == rr.type_covered) || (rec.type == rr.type_covered))
|
|
234
|
+
end
|
|
235
|
+
}
|
|
236
|
+
return (@type == rec.type)
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def init_defaults
|
|
240
|
+
# Default to do nothing
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
private
|
|
244
|
+
def initialize(*args) #:nodoc: all
|
|
245
|
+
init_defaults
|
|
246
|
+
if (args.length > 0)
|
|
247
|
+
if (args[0].class == Hash)
|
|
248
|
+
from_hash(args[0])
|
|
249
|
+
return
|
|
250
|
+
else
|
|
251
|
+
@rdata = args[0]
|
|
252
|
+
if (args[0].class == String)
|
|
253
|
+
from_string(args[0])
|
|
254
|
+
return
|
|
255
|
+
else
|
|
256
|
+
from_data(args[0])
|
|
257
|
+
return
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
# raise ArgumentError.new("Don't call new! Use Dnsruby::RR::create() instead")
|
|
262
|
+
end
|
|
263
|
+
public
|
|
264
|
+
|
|
265
|
+
def from_hash(hash) #:nodoc: all
|
|
266
|
+
hash.keys.each do |param|
|
|
267
|
+
send(param.to_s+"=", hash[param])
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
#Create a new RR from the hash. The name is required; all other fields are optional.
|
|
272
|
+
#Type defaults to ANY and the Class defaults to IN. The TTL defaults to 0.
|
|
273
|
+
#
|
|
274
|
+
#If the type is specified, then it is necessary to provide ALL of the resource record fields which
|
|
275
|
+
#are specific to that record; i.e. for
|
|
276
|
+
#an MX record, you would need to specify the exchange and the preference
|
|
277
|
+
#
|
|
278
|
+
# require 'Dnsruby'
|
|
279
|
+
# rr = Dnsruby::RR.new_from_hash({:name => "example.com"})
|
|
280
|
+
# rr = Dnsruby::RR.new_from_hash({:name => "example.com", :type => Types.MX, :ttl => 10, :preference => 5, :exchange => "mx1.example.com"})
|
|
281
|
+
def RR.new_from_hash(inhash)
|
|
282
|
+
hash = inhash.clone
|
|
283
|
+
type = hash[:type] || Types::ANY
|
|
284
|
+
klass = hash[:klass] || Classes::IN
|
|
285
|
+
ttl = hash[:ttl] || 0
|
|
286
|
+
recordclass = get_class(type, klass)
|
|
287
|
+
record = recordclass.new
|
|
288
|
+
record.name=hash[:name]
|
|
289
|
+
if !(record.name.kind_of?Name)
|
|
290
|
+
record.name = Name.create(record.name)
|
|
291
|
+
end
|
|
292
|
+
record.ttl=ttl
|
|
293
|
+
record.type = type
|
|
294
|
+
record.klass = klass
|
|
295
|
+
hash.delete(:name)
|
|
296
|
+
hash.delete(:type)
|
|
297
|
+
hash.delete(:ttl)
|
|
298
|
+
hash.delete(:klass)
|
|
299
|
+
record.from_hash(hash)
|
|
300
|
+
return record
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
#Returns a Dnsruby::RR object of the appropriate type and
|
|
304
|
+
#initialized from the string passed by the user. The format of the
|
|
305
|
+
#string is that used in zone files, and is compatible with the string
|
|
306
|
+
#returned by Net::DNS::RR.inspect
|
|
307
|
+
#
|
|
308
|
+
#The name and RR type are required; all other information is optional.
|
|
309
|
+
#If omitted, the TTL defaults to 0 and the RR class defaults to IN.
|
|
310
|
+
#
|
|
311
|
+
#All names must be fully qualified. The trailing dot (.) is optional.
|
|
312
|
+
#
|
|
313
|
+
#
|
|
314
|
+
# a = Dnsruby::RR.new_from_string("foo.example.com. 86400 A 10.1.2.3")
|
|
315
|
+
# mx = Dnsruby::RR.new_from_string("example.com. 7200 MX 10 mailhost.example.com.")
|
|
316
|
+
# cname = Dnsruby::RR.new_from_string("www.example.com 300 IN CNAME www1.example.com")
|
|
317
|
+
# txt = Dnsruby::RR.new_from_string('baz.example.com 3600 HS TXT "text record"')
|
|
318
|
+
#
|
|
319
|
+
#
|
|
320
|
+
def RR.new_from_string(rrstring)
|
|
321
|
+
# strip out comments
|
|
322
|
+
# Test for non escaped ";" by means of the look-behind assertion
|
|
323
|
+
# (the backslash is escaped)
|
|
324
|
+
rrstring.gsub!(/(\?<!\\);.*/o, "");
|
|
325
|
+
|
|
326
|
+
if ((rrstring =~/#{@@RR_REGEX}/xo) == nil)
|
|
327
|
+
raise Exception, "#{rrstring} did not match RR pat.\nPlease report this to the author!\n"
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
name = $1;
|
|
331
|
+
ttl = $2.to_i || 0;
|
|
332
|
+
rrclass = $3 || '';
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
rrtype = $4 || '';
|
|
336
|
+
rdata = $5 || '';
|
|
337
|
+
|
|
338
|
+
if rdata
|
|
339
|
+
rdata.gsub!(/\s+$/o, "")
|
|
340
|
+
end
|
|
341
|
+
if name
|
|
342
|
+
name.gsub!(/\.$/o, "");
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
# RFC3597 tweaks
|
|
347
|
+
# This converts to known class and type if specified as TYPE###
|
|
348
|
+
if rrtype =~/^TYPE\d+/o
|
|
349
|
+
rrtype = Dnsruby::Types.typesbyval(Dnsruby::Types::typesbyname(rrtype))
|
|
350
|
+
end
|
|
351
|
+
if rrclass =~/^CLASS\d+/o
|
|
352
|
+
rrclass = Dnsruby::Classes.classesbyval(Dnsruby::Classes::classesbyname(rrclass))
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
if (rrtype=='' && rrclass && rrclass == 'ANY')
|
|
357
|
+
rrtype = 'ANY';
|
|
358
|
+
rrclass = 'IN';
|
|
359
|
+
elsif (rrclass=='')
|
|
360
|
+
rrclass = 'IN';
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
if (rrtype == '')
|
|
364
|
+
rrtype = 'ANY';
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
if (implemented_rrs.include?(rrtype) && rdata !~/^\s*\\#/o )
|
|
368
|
+
subclass = _get_subclass(name, rrtype, rrclass, ttl, rdata)
|
|
369
|
+
return subclass
|
|
370
|
+
elsif (implemented_rrs.include?(rrtype)) # A known RR type starting with \#
|
|
371
|
+
rdata =~ /\\\#\s+(\d+)\s+(.*)$/o;
|
|
372
|
+
|
|
373
|
+
rdlength = $1.to_i;
|
|
374
|
+
hexdump = $2;
|
|
375
|
+
hexdump.gsub!(/\s*/, "");
|
|
376
|
+
|
|
377
|
+
if hexdump.length() != rdlength*2
|
|
378
|
+
raise Exception, "#{rdata} is inconsistent; length does not match content"
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
rdata = [hexdump].pack('H*');
|
|
382
|
+
|
|
383
|
+
return new_from_data(name, rrtype, rrclass, ttl, rdlength, rdata, 0) # rdata.length() - rdlength);
|
|
384
|
+
elsif (rdata=~/\s*\\\#\s+\d+\s+/o)
|
|
385
|
+
#We are now dealing with the truly unknown.
|
|
386
|
+
raise Exception, 'Expected RFC3597 representation of RDATA' unless rdata =~/\\\#\s+(\d+)\s+(.*)$/o;
|
|
387
|
+
|
|
388
|
+
rdlength = $1.to_i;
|
|
389
|
+
hexdump = $2;
|
|
390
|
+
hexdump.gsub!(/\s*/o, "");
|
|
391
|
+
|
|
392
|
+
if hexdump.length() != rdlength*2
|
|
393
|
+
raise Exception, "#{rdata} is inconsistent; length does not match content" ;
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
rdata = [hexdump].pack('H*');
|
|
397
|
+
|
|
398
|
+
return new_from_data(name,rrtype,rrclass,ttl,rdlength,rdata,0) # rdata.length() - rdlength);
|
|
399
|
+
else
|
|
400
|
+
#God knows how to handle these...
|
|
401
|
+
subclass = _get_subclass(name, rrtype, rrclass, ttl, "")
|
|
402
|
+
return subclass
|
|
403
|
+
end
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
def RR.new_from_data(*args) #:nodoc: all
|
|
407
|
+
name = args[0]
|
|
408
|
+
rrtype = args[1]
|
|
409
|
+
rrclass = args[2]
|
|
410
|
+
ttl = args[3]
|
|
411
|
+
rdlength = args[4]
|
|
412
|
+
data = args[5]
|
|
413
|
+
offset = args[6]
|
|
414
|
+
rdata = data[offset, rdlength]
|
|
415
|
+
|
|
416
|
+
record = nil
|
|
417
|
+
MessageDecoder.new(rdata) {|msg|
|
|
418
|
+
record = get_class(rrtype, rrclass).decode_rdata(msg)
|
|
419
|
+
}
|
|
420
|
+
record.name = name
|
|
421
|
+
record.ttl = ttl
|
|
422
|
+
record.type = rrtype
|
|
423
|
+
record.klass = rrclass
|
|
424
|
+
|
|
425
|
+
return record
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
#Return an array of all the currently implemented RR types
|
|
429
|
+
def RR.implemented_rrs
|
|
430
|
+
return ClassHash.keys.map {|k| Dnsruby::Types.to_string(k[0])}
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
private
|
|
434
|
+
def RR._get_subclass(name, rrtype, rrclass, ttl, rdata) #:nodoc: all
|
|
435
|
+
return unless (rrtype!=nil)
|
|
436
|
+
record = get_class(rrtype, rrclass).new(rdata)
|
|
437
|
+
record.name = name
|
|
438
|
+
record.ttl = ttl
|
|
439
|
+
record.type = rrtype
|
|
440
|
+
record.klass = rrclass
|
|
441
|
+
return record
|
|
442
|
+
end
|
|
443
|
+
public
|
|
444
|
+
|
|
445
|
+
#Returns a string representation of the RR in zone file format
|
|
446
|
+
def to_s
|
|
447
|
+
return (@name ? @name.to_s():"") + ".\t" +(@ttl ? @ttl.to_s():"") + "\t" + (klass() ? klass.to_s():"") + "\t" + (type() ? type.to_s():"") + "\t" + rdata_to_string
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
#Get a string representation of the data section of the RR (in zone file format)
|
|
451
|
+
def rdata_to_string
|
|
452
|
+
if (@rdata && @rdata.length > 0)
|
|
453
|
+
return @rdata
|
|
454
|
+
else
|
|
455
|
+
return "no rdata"
|
|
456
|
+
end
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
def from_data(data) #:nodoc: all
|
|
460
|
+
# to be implemented by subclasses
|
|
461
|
+
raise NotImplementedError.new
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
def from_string(input) #:nodoc: all
|
|
465
|
+
# to be implemented by subclasses
|
|
466
|
+
# raise NotImplementedError.new
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
470
|
+
# to be implemented by subclasses
|
|
471
|
+
raise EncodeError.new("#{self.class} is RR.")
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
475
|
+
# to be implemented by subclasses
|
|
476
|
+
raise DecodeError.new("#{self.class} is RR.")
|
|
477
|
+
end
|
|
478
|
+
|
|
479
|
+
def ==(other)
|
|
480
|
+
return false unless self.class == other.class
|
|
481
|
+
s_ivars = self.instance_variables
|
|
482
|
+
s_ivars.sort!
|
|
483
|
+
s_ivars.delete "@ttl" # RFC 2136 section 1.1
|
|
484
|
+
|
|
485
|
+
o_ivars = other.instance_variables
|
|
486
|
+
o_ivars.sort!
|
|
487
|
+
o_ivars.delete "@ttl" # RFC 2136 section 1.1
|
|
488
|
+
|
|
489
|
+
return s_ivars == o_ivars &&
|
|
490
|
+
s_ivars.collect {|name| self.instance_variable_get name} ==
|
|
491
|
+
o_ivars.collect {|name| other.instance_variable_get name}
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
def eql?(other) #:nodoc:
|
|
495
|
+
return self == other
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
def hash # :nodoc:
|
|
499
|
+
h = 0
|
|
500
|
+
vars = self.instance_variables
|
|
501
|
+
vars.delete "@ttl"
|
|
502
|
+
vars.each {|name|
|
|
503
|
+
h ^= self.instance_variable_get(name).hash
|
|
504
|
+
}
|
|
505
|
+
return h
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
#Get an RR of the specified type and class
|
|
509
|
+
def self.get_class(type_value, class_value) #:nodoc: all
|
|
510
|
+
# if (type_value == Types.OPT)
|
|
511
|
+
# return Class.new(OPT)
|
|
512
|
+
# end
|
|
513
|
+
if (type_value.class == Class)
|
|
514
|
+
type_value = type_value.const_get(:TypeValue)
|
|
515
|
+
return ClassHash[[type_value, Classes.to_code(class_value)]] ||
|
|
516
|
+
Generic.create(type_value, Classes.to_code(class_value))
|
|
517
|
+
else
|
|
518
|
+
if (type_value.class == Types)
|
|
519
|
+
type_value = type_value.code
|
|
520
|
+
else
|
|
521
|
+
type_value = Types.new(type_value).code
|
|
522
|
+
end
|
|
523
|
+
if (class_value.class == Classes)
|
|
524
|
+
class_value = class_value.code
|
|
525
|
+
else
|
|
526
|
+
class_value = Classes.new(class_value).code
|
|
527
|
+
end
|
|
528
|
+
return ClassHash[[type_value, class_value]] ||
|
|
529
|
+
Generic.create(type_value, class_value)
|
|
530
|
+
end
|
|
531
|
+
return ret
|
|
532
|
+
end
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
#Create a new RR from the arguments, which can be either a String or a Hash.
|
|
536
|
+
#See new_from_string and new_from_hash for details
|
|
537
|
+
#
|
|
538
|
+
# a = Dnsruby::RR.create("foo.example.com. 86400 A 10.1.2.3")
|
|
539
|
+
# mx = Dnsruby::RR.create("example.com. 7200 MX 10 mailhost.example.com.")
|
|
540
|
+
# cname = Dnsruby::RR.create("www.example.com 300 IN CNAME www1.example.com")
|
|
541
|
+
# txt = Dnsruby::RR.create('baz.example.com 3600 HS TXT "text record"')
|
|
542
|
+
#
|
|
543
|
+
# rr = Dnsruby::RR.create({:name => "example.com"})
|
|
544
|
+
# rr = Dnsruby::RR.create({:name => "example.com", :type => "MX", :ttl => 10,
|
|
545
|
+
# :preference => 5, :exchange => "mx1.example.com"})
|
|
546
|
+
#
|
|
547
|
+
def RR.create(*args)
|
|
548
|
+
if (args.length == 1) && (args[0].class == String)
|
|
549
|
+
return new_from_string(args[0])
|
|
550
|
+
elsif (args.length == 1) && (args[0].class == Hash)
|
|
551
|
+
return new_from_hash(args[0])
|
|
552
|
+
else
|
|
553
|
+
return new_from_data(args)
|
|
554
|
+
end
|
|
555
|
+
end
|
|
556
|
+
|
|
557
|
+
end
|
|
558
|
+
end
|
|
559
|
+
require 'Dnsruby/resource/domain_name'
|
|
560
|
+
require 'Dnsruby/resource/generic'
|
|
561
|
+
require 'Dnsruby/resource/IN'
|