Dnsruby 0.5.0
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/README +34 -0
- data/doc/classes/Dnsruby/Classes.html +197 -0
- data/doc/classes/Dnsruby/Classes.src/M000157.html +23 -0
- data/doc/classes/Dnsruby/Classes.src/M000158.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.html +370 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000130.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000131.html +33 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000132.html +21 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000133.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000134.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000135.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000136.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000137.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000138.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000139.html +31 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000140.html +19 -0
- data/doc/classes/Dnsruby/Config.html +410 -0
- data/doc/classes/Dnsruby/Config.src/M000098.html +18 -0
- data/doc/classes/Dnsruby/Config.src/M000099.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000100.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000101.html +21 -0
- data/doc/classes/Dnsruby/Config.src/M000102.html +21 -0
- data/doc/classes/Dnsruby/Config.src/M000103.html +38 -0
- data/doc/classes/Dnsruby/Config.src/M000104.html +26 -0
- data/doc/classes/Dnsruby/Config.src/M000105.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000106.html +23 -0
- data/doc/classes/Dnsruby/Config.src/M000107.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000108.html +18 -0
- data/doc/classes/Dnsruby/DNS/DecodeError.html +111 -0
- data/doc/classes/Dnsruby/DNS/EncodeError.html +111 -0
- data/doc/classes/Dnsruby/DNS.html +469 -0
- data/doc/classes/Dnsruby/DNS.src/M000196.html +24 -0
- data/doc/classes/Dnsruby/DNS.src/M000197.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000198.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000199.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000200.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000201.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000202.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000203.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000204.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000205.html +28 -0
- data/doc/classes/Dnsruby/DNS.src/M000206.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000207.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000208.html +41 -0
- data/doc/classes/Dnsruby/DNS.src/M000209.html +32 -0
- data/doc/classes/Dnsruby/DNS.src/M000210.html +50 -0
- data/doc/classes/Dnsruby/DNSSEC/Algorithms.html +154 -0
- data/doc/classes/Dnsruby/DNSSEC.html +111 -0
- data/doc/classes/Dnsruby/DecodeError.html +111 -0
- data/doc/classes/Dnsruby/EncodeError.html +111 -0
- data/doc/classes/Dnsruby/FormErr.html +113 -0
- data/doc/classes/Dnsruby/Header.html +516 -0
- data/doc/classes/Dnsruby/Header.src/M000168.html +35 -0
- data/doc/classes/Dnsruby/Header.src/M000169.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000170.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000171.html +21 -0
- data/doc/classes/Dnsruby/Header.src/M000172.html +20 -0
- data/doc/classes/Dnsruby/Header.src/M000173.html +32 -0
- data/doc/classes/Dnsruby/Header.src/M000174.html +26 -0
- data/doc/classes/Dnsruby/Header.src/M000175.html +47 -0
- data/doc/classes/Dnsruby/Header.src/M000176.html +28 -0
- data/doc/classes/Dnsruby/Header.src/M000177.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000178.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000179.html +30 -0
- data/doc/classes/Dnsruby/Hosts.html +305 -0
- data/doc/classes/Dnsruby/Hosts.src/M000141.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000142.html +49 -0
- data/doc/classes/Dnsruby/Hosts.src/M000143.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000144.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000145.html +21 -0
- data/doc/classes/Dnsruby/Hosts.src/M000146.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000147.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000148.html +21 -0
- data/doc/classes/Dnsruby/IPv4.html +298 -0
- data/doc/classes/Dnsruby/IPv4.src/M000149.html +32 -0
- data/doc/classes/Dnsruby/IPv4.src/M000150.html +21 -0
- data/doc/classes/Dnsruby/IPv4.src/M000151.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000152.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000153.html +19 -0
- data/doc/classes/Dnsruby/IPv4.src/M000154.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000155.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000156.html +18 -0
- data/doc/classes/Dnsruby/IPv6.html +318 -0
- data/doc/classes/Dnsruby/IPv6.src/M000180.html +60 -0
- data/doc/classes/Dnsruby/IPv6.src/M000181.html +21 -0
- data/doc/classes/Dnsruby/IPv6.src/M000182.html +22 -0
- data/doc/classes/Dnsruby/IPv6.src/M000183.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000184.html +21 -0
- data/doc/classes/Dnsruby/IPv6.src/M000185.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000186.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000187.html +18 -0
- data/doc/classes/Dnsruby/Message.html +689 -0
- data/doc/classes/Dnsruby/Message.src/M000076.html +34 -0
- data/doc/classes/Dnsruby/Message.src/M000077.html +26 -0
- data/doc/classes/Dnsruby/Message.src/M000078.html +22 -0
- data/doc/classes/Dnsruby/Message.src/M000079.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000080.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000081.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000082.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000083.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000084.html +21 -0
- data/doc/classes/Dnsruby/Message.src/M000085.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000086.html +18 -0
- data/doc/classes/Dnsruby/Message.src/M000087.html +54 -0
- data/doc/classes/Dnsruby/Message.src/M000088.html +42 -0
- data/doc/classes/Dnsruby/Message.src/M000089.html +45 -0
- data/doc/classes/Dnsruby/MetaTypes.html +136 -0
- data/doc/classes/Dnsruby/Modes.html +171 -0
- data/doc/classes/Dnsruby/NXDomain.html +113 -0
- data/doc/classes/Dnsruby/Name/Label.html +300 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000067.html +21 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000068.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000069.html +22 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000070.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000071.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000072.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000073.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000074.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000075.html +18 -0
- data/doc/classes/Dnsruby/Name.html +357 -0
- data/doc/classes/Dnsruby/Name.src/M000057.html +28 -0
- data/doc/classes/Dnsruby/Name.src/M000058.html +20 -0
- data/doc/classes/Dnsruby/Name.src/M000059.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000060.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000061.html +21 -0
- data/doc/classes/Dnsruby/Name.src/M000062.html +19 -0
- data/doc/classes/Dnsruby/Name.src/M000064.html +22 -0
- data/doc/classes/Dnsruby/Name.src/M000065.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000066.html +20 -0
- data/doc/classes/Dnsruby/NotImp.html +113 -0
- data/doc/classes/Dnsruby/OpCode.html +146 -0
- data/doc/classes/Dnsruby/OtherResolvError.html +113 -0
- data/doc/classes/Dnsruby/QTypes.html +146 -0
- data/doc/classes/Dnsruby/Question.html +256 -0
- data/doc/classes/Dnsruby/Question.src/M000166.html +47 -0
- data/doc/classes/Dnsruby/Question.src/M000167.html +18 -0
- data/doc/classes/Dnsruby/RCode.html +211 -0
- data/doc/classes/Dnsruby/RR/ANY.html +133 -0
- data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +169 -0
- data/doc/classes/Dnsruby/RR/CERT.html +180 -0
- data/doc/classes/Dnsruby/RR/CNAME.html +150 -0
- data/doc/classes/Dnsruby/RR/DNAME.html +150 -0
- data/doc/classes/Dnsruby/RR/DomainName.html +175 -0
- data/doc/classes/Dnsruby/RR/DomainName.src/M000051.html +22 -0
- data/doc/classes/Dnsruby/RR/Generic.html +156 -0
- data/doc/classes/Dnsruby/RR/Generic.src/M000041.html +25 -0
- data/doc/classes/Dnsruby/RR/HINFO.html +155 -0
- data/doc/classes/Dnsruby/RR/IN/A.html +199 -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/A.src/M000020.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/AAAA.html +138 -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 +243 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +29 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +26 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000017.html +22 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.html +166 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.src/M000021.html +20 -0
- data/doc/classes/Dnsruby/RR/IN.html +155 -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 +150 -0
- data/doc/classes/Dnsruby/RR/NSAP.html +293 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000053.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000054.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000055.html +22 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000056.html +31 -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/M000050.html +19 -0
- data/doc/classes/Dnsruby/RR/RT.html +155 -0
- data/doc/classes/Dnsruby/RR/SOA.html +230 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000039.html +24 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000040.html +27 -0
- data/doc/classes/Dnsruby/RR/SPF.html +138 -0
- data/doc/classes/Dnsruby/RR/TKEY.html +285 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +19 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +29 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +30 -0
- data/doc/classes/Dnsruby/RR/TSIG.html +416 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000042.html +22 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000043.html +71 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000044.html +34 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000045.html +37 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000046.html +31 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000047.html +34 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000048.html +22 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000049.html +29 -0
- data/doc/classes/Dnsruby/RR/TXT.html +233 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000034.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000035.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000036.html +20 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000037.html +27 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000038.html +25 -0
- data/doc/classes/Dnsruby/RR/X25.html +203 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000031.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000032.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000033.html +22 -0
- data/doc/classes/Dnsruby/RR.html +620 -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 +18 -0
- data/doc/classes/Dnsruby/RR.src/M000006.html +36 -0
- data/doc/classes/Dnsruby/RR.src/M000007.html +100 -0
- data/doc/classes/Dnsruby/RR.src/M000008.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000009.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000010.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000011.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000012.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000013.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000014.html +24 -0
- data/doc/classes/Dnsruby/RRSet.html +257 -0
- data/doc/classes/Dnsruby/RRSet.src/M000159.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000160.html +44 -0
- data/doc/classes/Dnsruby/RRSet.src/M000161.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000162.html +20 -0
- data/doc/classes/Dnsruby/RRSet.src/M000163.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000164.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000165.html +18 -0
- data/doc/classes/Dnsruby/Refused.html +113 -0
- data/doc/classes/Dnsruby/Resolv.html +400 -0
- data/doc/classes/Dnsruby/Resolv.src/M000109.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000110.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000111.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000112.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000113.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000114.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000115.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000116.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000117.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000118.html +29 -0
- data/doc/classes/Dnsruby/Resolv.src/M000119.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000120.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000121.html +25 -0
- data/doc/classes/Dnsruby/ResolvError.html +111 -0
- data/doc/classes/Dnsruby/ResolvTimeout.html +111 -0
- data/doc/classes/Dnsruby/Resolver.html +807 -0
- data/doc/classes/Dnsruby/Resolver.src/M000211.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000212.html +37 -0
- data/doc/classes/Dnsruby/Resolver.src/M000213.html +64 -0
- data/doc/classes/Dnsruby/Resolver.src/M000214.html +23 -0
- data/doc/classes/Dnsruby/Resolver.src/M000215.html +46 -0
- data/doc/classes/Dnsruby/Resolver.src/M000216.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000217.html +22 -0
- data/doc/classes/Dnsruby/Resolver.src/M000218.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000219.html +20 -0
- data/doc/classes/Dnsruby/Resolver.src/M000220.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000221.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000222.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000223.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000224.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000225.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000226.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000227.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000228.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000229.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000230.html +19 -0
- data/doc/classes/Dnsruby/ServFail.html +113 -0
- data/doc/classes/Dnsruby/SingleResolver.html +496 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000122.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000123.html +19 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000124.html +49 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000125.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000126.html +21 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000127.html +25 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000128.html +78 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000129.html +21 -0
- data/doc/classes/Dnsruby/TheLog.html +196 -0
- data/doc/classes/Dnsruby/TheLog.src/M000188.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000189.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000190.html +20 -0
- data/doc/classes/Dnsruby/Types.html +426 -0
- data/doc/classes/Dnsruby/Update.html +368 -0
- data/doc/classes/Dnsruby/Update.src/M000191.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000192.html +37 -0
- data/doc/classes/Dnsruby/Update.src/M000193.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000194.html +41 -0
- data/doc/classes/Dnsruby/Update.src/M000195.html +34 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +183 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000097.html +19 -0
- data/doc/classes/Dnsruby/ZoneTransfer.html +248 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000095.html +22 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000096.html +35 -0
- data/doc/classes/Dnsruby.html +388 -0
- data/doc/created.rid +1 -0
- data/doc/files/lib/Dnsruby/Config_rb.html +101 -0
- data/doc/files/lib/Dnsruby/DNSSEC_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 +108 -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/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/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/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/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 +110 -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 +125 -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 +102 -0
- data/doc/fr_file_index.html +68 -0
- data/doc/fr_method_index.html +256 -0
- data/doc/index.html +24 -0
- data/lib/Dnsruby/Config.rb +350 -0
- data/lib/Dnsruby/DNS.rb +253 -0
- data/lib/Dnsruby/DNSSEC.rb +29 -0
- data/lib/Dnsruby/Hosts.rb +119 -0
- data/lib/Dnsruby/Resolver.rb +618 -0
- data/lib/Dnsruby/SingleResolver.rb +312 -0
- data/lib/Dnsruby/TheLog.rb +61 -0
- data/lib/Dnsruby/code_mapper.rb +164 -0
- data/lib/Dnsruby/ipv4.rb +83 -0
- data/lib/Dnsruby/ipv6.rb +142 -0
- data/lib/Dnsruby/message.rb +819 -0
- data/lib/Dnsruby/name.rb +325 -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/HINFO.rb +52 -0
- data/lib/Dnsruby/resource/IN.rb +69 -0
- data/lib/Dnsruby/resource/ISDN.rb +54 -0
- data/lib/Dnsruby/resource/LOC.rb +255 -0
- data/lib/Dnsruby/resource/MINFO.rb +66 -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/OPT.rb +153 -0
- data/lib/Dnsruby/resource/PX.rb +71 -0
- data/lib/Dnsruby/resource/RP.rb +67 -0
- data/lib/Dnsruby/resource/RT.rb +67 -0
- data/lib/Dnsruby/resource/SOA.rb +89 -0
- data/lib/Dnsruby/resource/SPF.rb +29 -0
- data/lib/Dnsruby/resource/SRV.rb +108 -0
- data/lib/Dnsruby/resource/TKEY.rb +160 -0
- data/lib/Dnsruby/resource/TSIG.rb +328 -0
- data/lib/Dnsruby/resource/TXT.rb +76 -0
- data/lib/Dnsruby/resource/X25.rb +53 -0
- data/lib/Dnsruby/resource/domain_name.rb +58 -0
- data/lib/Dnsruby/resource/generic.rb +142 -0
- data/lib/Dnsruby/resource/resource.rb +444 -0
- data/lib/Dnsruby/select_thread.rb +474 -0
- data/lib/Dnsruby/update.rb +263 -0
- data/lib/Dnsruby/zone_transfer.rb +296 -0
- data/lib/dnsruby.rb +468 -0
- data/test/custom.txt +4 -0
- data/test/resolv.conf +4 -0
- data/test/tc_axfr.rb +42 -0
- data/test/tc_dns.rb +231 -0
- data/test/tc_dnsruby.rb +42 -0
- data/test/tc_escapedchars.rb +510 -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_packet.rb +158 -0
- data/test/tc_packet_unique_push.rb +102 -0
- data/test/tc_question.rb +52 -0
- data/test/tc_res_config.rb +92 -0
- data/test/tc_res_env.rb +62 -0
- data/test/tc_res_file.rb +42 -0
- data/test/tc_res_opt.rb +185 -0
- data/test/tc_resolver.rb +177 -0
- data/test/tc_rr-opt.rb +42 -0
- data/test/tc_rr-txt.rb +137 -0
- data/test/tc_rr-unknown.rb +99 -0
- data/test/tc_rr.rb +259 -0
- data/test/tc_single_resolver.rb +153 -0
- data/test/tc_soak.rb +310 -0
- data/test/tc_tcp.rb +35 -0
- data/test/tc_tkey.rb +106 -0
- data/test/tc_update.rb +215 -0
- data/test/ts_dnsruby.rb +17 -0
- data/test/ts_offline.rb +35 -0
- data/test/ts_online.rb +40 -0
- metadata +512 -0
|
@@ -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) #: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,58 @@
|
|
|
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
|
+
# Superclass for RR's which have an additional 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
|
+
# if (!(newname.kind_of?Name))
|
|
25
|
+
@domainname=Name.create(newname)
|
|
26
|
+
# else
|
|
27
|
+
# @domainname = newname
|
|
28
|
+
# end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
alias domainname= set_domain_name
|
|
32
|
+
|
|
33
|
+
def from_hash(hash) #:nodoc: all
|
|
34
|
+
set_domain_name(hash[:domainname])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def from_data(data) #:nodoc: all
|
|
38
|
+
@domainname = data
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def from_string(input) #:nodoc: all
|
|
42
|
+
set_domain_name(input)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def rdata_to_string #:nodoc: all
|
|
46
|
+
return @domainname.to_s
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
50
|
+
msg.put_name(@domainname, canonical)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
54
|
+
return self.new(msg.get_name)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,142 @@
|
|
|
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
|
+
attr_reader :data
|
|
21
|
+
|
|
22
|
+
def from_data(data) #:nodoc: all
|
|
23
|
+
@data = data[0]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def rdata_to_string #:nodoc: all
|
|
27
|
+
if (@data!=nil)
|
|
28
|
+
return "\\# " + @data.length.to_s + " " + @data.unpack("H*")[0]
|
|
29
|
+
end
|
|
30
|
+
return "#NO DATA"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def from_string(data) #:nodoc: all
|
|
34
|
+
@data = data
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def encode_rdata(msg) #:nodoc: all
|
|
38
|
+
msg.put_bytes(data)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
42
|
+
return self.new(msg.get_bytes)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.create(type_value, class_value)
|
|
46
|
+
c = Class.new(Generic)
|
|
47
|
+
# c.type = type_value
|
|
48
|
+
# c.klass = class_value
|
|
49
|
+
c.const_set(:TypeValue, type_value)
|
|
50
|
+
c.const_set(:ClassValue, class_value)
|
|
51
|
+
Generic.const_set("Type#{type_value}_Class#{class_value}", c)
|
|
52
|
+
ClassHash[[type_value, class_value]] = c
|
|
53
|
+
return c
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
#--
|
|
58
|
+
# Standard (class generic) RRs
|
|
59
|
+
#++
|
|
60
|
+
#NS RR
|
|
61
|
+
class NS < DomainName
|
|
62
|
+
ClassValue = nil #:nodoc: all
|
|
63
|
+
TypeValue = Types::NS #:nodoc: all
|
|
64
|
+
|
|
65
|
+
alias nsdname domainname
|
|
66
|
+
alias nsdname= domainname=
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
#CNAME RR
|
|
70
|
+
class CNAME < DomainName
|
|
71
|
+
ClassValue = nil #:nodoc: all
|
|
72
|
+
TypeValue = Types::CNAME #:nodoc: all
|
|
73
|
+
|
|
74
|
+
alias cname domainname
|
|
75
|
+
alias cname= domainname=
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
#DNAME RR
|
|
79
|
+
class DNAME < DomainName
|
|
80
|
+
ClassValue = nil #:nodoc: all
|
|
81
|
+
TypeValue = Types::DNAME #:nodoc: all
|
|
82
|
+
|
|
83
|
+
alias dname domainname
|
|
84
|
+
alias dname= domainname=
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
#MB RR
|
|
88
|
+
class MB < DomainName
|
|
89
|
+
ClassValue = nil #:nodoc: all
|
|
90
|
+
TypeValue = Types::MB #:nodoc: all
|
|
91
|
+
alias madname domainname
|
|
92
|
+
alias madname= domainname=
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
#MG RR
|
|
96
|
+
class MG < DomainName
|
|
97
|
+
ClassValue = nil #:nodoc: all
|
|
98
|
+
TypeValue = Types::MG #:nodoc: all
|
|
99
|
+
alias mgmname domainname
|
|
100
|
+
alias mgmname= domainname=
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
#MR RR
|
|
104
|
+
class MR < DomainName
|
|
105
|
+
ClassValue = nil #:nodoc: all
|
|
106
|
+
TypeValue = Types::MR #:nodoc: all
|
|
107
|
+
alias newname domainname
|
|
108
|
+
alias newname= domainname=
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
#PTR RR
|
|
112
|
+
class PTR < DomainName
|
|
113
|
+
ClassValue = nil #:nodoc: all
|
|
114
|
+
TypeValue = Types::PTR #:nodoc: all
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
#ANY RR
|
|
118
|
+
# class ANY < Query
|
|
119
|
+
class ANY < RR
|
|
120
|
+
ClassValue = nil #:nodoc: all
|
|
121
|
+
TypeValue = Types::ANY #:nodoc: all
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
require 'Dnsruby/resource/HINFO'
|
|
126
|
+
require 'Dnsruby/resource/MINFO'
|
|
127
|
+
require 'Dnsruby/resource/ISDN'
|
|
128
|
+
require 'Dnsruby/resource/MX'
|
|
129
|
+
require 'Dnsruby/resource/NAPTR'
|
|
130
|
+
require 'Dnsruby/resource/NSAP'
|
|
131
|
+
require 'Dnsruby/resource/PX'
|
|
132
|
+
require 'Dnsruby/resource/RP'
|
|
133
|
+
require 'Dnsruby/resource/RT'
|
|
134
|
+
require 'Dnsruby/resource/SOA'
|
|
135
|
+
require 'Dnsruby/resource/TXT'
|
|
136
|
+
require 'Dnsruby/resource/X25'
|
|
137
|
+
require 'Dnsruby/resource/SPF'
|
|
138
|
+
require 'Dnsruby/resource/CERT'
|
|
139
|
+
require 'Dnsruby/resource/LOC'
|
|
140
|
+
require 'Dnsruby/resource/OPT'
|
|
141
|
+
require 'Dnsruby/resource/TSIG'
|
|
142
|
+
require 'Dnsruby/resource/TKEY'
|
|
@@ -0,0 +1,444 @@
|
|
|
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
|
+
class RRSet
|
|
25
|
+
def initialize()
|
|
26
|
+
@rrs = []
|
|
27
|
+
end
|
|
28
|
+
#Add the RR to this RRSet
|
|
29
|
+
def add(r)
|
|
30
|
+
if @rrs.include?r
|
|
31
|
+
return false
|
|
32
|
+
end
|
|
33
|
+
if (rrs.size() == 0)
|
|
34
|
+
@rrs.push(r)
|
|
35
|
+
return;
|
|
36
|
+
end
|
|
37
|
+
# Check the type, klass and ttl are correct
|
|
38
|
+
first = @rrs[0]
|
|
39
|
+
if (!r.sameRRset(first))
|
|
40
|
+
raise ArgumentError.new("record does not match rrset")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if (r.ttl != first.ttl) # RFC2181, section 5.2
|
|
44
|
+
if (r.ttl > first.ttl)
|
|
45
|
+
# r = r.cloneRecord();
|
|
46
|
+
r.ttl=(first.ttl);
|
|
47
|
+
else
|
|
48
|
+
@rrs.each do |rr|
|
|
49
|
+
rr.ttl = r.ttl
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
if (!rrs.contains(r))
|
|
55
|
+
@rrs.push(r)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
#Delete the RR from this RRSet
|
|
60
|
+
def delete(rr)
|
|
61
|
+
@rrs.delete(rr)
|
|
62
|
+
end
|
|
63
|
+
def each
|
|
64
|
+
@rrs.each do |rr|
|
|
65
|
+
yield rr
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
#Return the type of this RRSet
|
|
69
|
+
def type
|
|
70
|
+
return @rrs[0].type
|
|
71
|
+
end
|
|
72
|
+
#Return the klass of this RRSet
|
|
73
|
+
def klass
|
|
74
|
+
return @rrs[0].klass
|
|
75
|
+
end
|
|
76
|
+
#Return the ttl of this RRSet
|
|
77
|
+
def ttl
|
|
78
|
+
return @rrs[0].ttl
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
#Superclass for all Dnsruby resource records.
|
|
83
|
+
#
|
|
84
|
+
#Represents a DNS RR (resource record) [RFC1035, section 3.2]
|
|
85
|
+
#
|
|
86
|
+
#Use Dnsruby::RR::create(...) to create a new RR record.
|
|
87
|
+
#
|
|
88
|
+
# mx = Dnsruby::RR.create("example.com. 7200 MX 10 mailhost.example.com.")
|
|
89
|
+
#
|
|
90
|
+
# rr = Dnsruby::RR.create({:name => "example.com", :type => "MX", :ttl => 7200,
|
|
91
|
+
# :preference => 10, :exchange => "mailhost.example.com"})
|
|
92
|
+
#
|
|
93
|
+
# s = rr.to_s # Get a String representation of the RR (in zone file format)
|
|
94
|
+
# rr_again = Dnsruby::RR.create(s)
|
|
95
|
+
#
|
|
96
|
+
class RR
|
|
97
|
+
|
|
98
|
+
# A regular expression which catches any valid resource record.
|
|
99
|
+
@@RR_REGEX = Regexp.new("^\\s*(\\S+)\\s*(\\d+)?\\s*(#{Classes.regexp + "|CLASS\\d+"})?\\s*(#{Types.regexp + '|TYPE\\d+'})?\\s*([\\s\\S]*)\$") #:nodoc: all
|
|
100
|
+
|
|
101
|
+
#The Resource's domain name
|
|
102
|
+
attr_accessor :name
|
|
103
|
+
#The Resource type
|
|
104
|
+
attr_accessor :type
|
|
105
|
+
#The Resource class
|
|
106
|
+
attr_accessor :klass
|
|
107
|
+
#The Resource Time-To-Live
|
|
108
|
+
attr_accessor :ttl
|
|
109
|
+
#The Resource data section
|
|
110
|
+
attr_accessor :rdata
|
|
111
|
+
|
|
112
|
+
def rdlength
|
|
113
|
+
return rdata.length
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def name=(newname)
|
|
117
|
+
if (!(newname.kind_of?Name))
|
|
118
|
+
@name=Name.create(newname)
|
|
119
|
+
else
|
|
120
|
+
@name = newname
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def type=(type)
|
|
125
|
+
@type = Types.new(type)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def klass=(klass)
|
|
129
|
+
@klass= Classes.new(klass)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Determines if two Records could be part of the same RRset.
|
|
133
|
+
# This compares the name, type, and class of the Records; the ttl and
|
|
134
|
+
# rdata are not compared.
|
|
135
|
+
def sameRRset(rec)
|
|
136
|
+
return (@type == rec.type && @klass == rec.klass && @name== rec.name)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
private
|
|
140
|
+
def initialize(*args) #:nodoc: all
|
|
141
|
+
if (args.length > 0)
|
|
142
|
+
if (args[0].class == Hash)
|
|
143
|
+
from_hash(args[0])
|
|
144
|
+
return
|
|
145
|
+
else
|
|
146
|
+
@rdata = args[0]
|
|
147
|
+
if (args[0].class == String)
|
|
148
|
+
from_string(args[0])
|
|
149
|
+
return
|
|
150
|
+
else
|
|
151
|
+
from_data(args[0])
|
|
152
|
+
return
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
# raise ArgumentError.new("Don't call new! Use Dnsruby::RR::create() instead")
|
|
157
|
+
end
|
|
158
|
+
public
|
|
159
|
+
|
|
160
|
+
def from_hash(hash) #:nodoc: all
|
|
161
|
+
hash.keys.each do |param|
|
|
162
|
+
send(param.to_s+"=", hash[param])
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
#Create a new RR from the hash. The name is required; all other fields are optional.
|
|
167
|
+
#Type defaults to ANY and the Class defaults to IN. The TTL defaults to 0.
|
|
168
|
+
#
|
|
169
|
+
#If the type is specified, then it is necessary to provide ALL of the resource record fields which
|
|
170
|
+
#are specific to that record; i.e. for
|
|
171
|
+
#an MX record, you would need to specify the exchange and the preference
|
|
172
|
+
#
|
|
173
|
+
# require 'Dnsruby'
|
|
174
|
+
# rr = Dnsruby::RR.new_from_hash({:name => "example.com"})
|
|
175
|
+
# rr = Dnsruby::RR.new_from_hash({:name => "example.com", :type => Types.MX, :ttl => 10, :preference => 5, :exchange => "mx1.example.com"})
|
|
176
|
+
def RR.new_from_hash(inhash)
|
|
177
|
+
hash = inhash.clone
|
|
178
|
+
type = hash[:type] || Types::ANY
|
|
179
|
+
klass = hash[:class] || Classes::IN
|
|
180
|
+
ttl = hash[:ttl] || 0
|
|
181
|
+
recordclass = get_class(type, klass)
|
|
182
|
+
record = recordclass.new
|
|
183
|
+
record.name=hash[:name]
|
|
184
|
+
if !(record.name.kind_of?Name)
|
|
185
|
+
record.name = Name.create(record.name)
|
|
186
|
+
end
|
|
187
|
+
record.ttl=ttl
|
|
188
|
+
record.type = type
|
|
189
|
+
record.klass = klass
|
|
190
|
+
hash.delete(:name)
|
|
191
|
+
hash.delete(:type)
|
|
192
|
+
hash.delete(:ttl)
|
|
193
|
+
hash.delete(:class)
|
|
194
|
+
record.from_hash(hash)
|
|
195
|
+
return record
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
#Returns a Dnsruby::RR object of the appropriate type and
|
|
199
|
+
#initialized from the string passed by the user. The format of the
|
|
200
|
+
#string is that used in zone files, and is compatible with the string
|
|
201
|
+
#returned by Net::DNS::RR.inspect
|
|
202
|
+
#
|
|
203
|
+
#The name and RR type are required; all other information is optional.
|
|
204
|
+
#If omitted, the TTL defaults to 0 and the RR class defaults to IN.
|
|
205
|
+
#
|
|
206
|
+
#All names must be fully qualified. The trailing dot (.) is optional.
|
|
207
|
+
#
|
|
208
|
+
#
|
|
209
|
+
# a = Dnsruby::RR.new_from_string("foo.example.com. 86400 A 10.1.2.3")
|
|
210
|
+
# mx = Dnsruby::RR.new_from_string("example.com. 7200 MX 10 mailhost.example.com.")
|
|
211
|
+
# cname = Dnsruby::RR.new_from_string("www.example.com 300 IN CNAME www1.example.com")
|
|
212
|
+
# txt = Dnsruby::RR.new_from_string('baz.example.com 3600 HS TXT "text record"')
|
|
213
|
+
#
|
|
214
|
+
#
|
|
215
|
+
def RR.new_from_string(rrstring)
|
|
216
|
+
# strip out comments
|
|
217
|
+
# Test for non escaped ";" by means of the look-behind assertion
|
|
218
|
+
# (the backslash is escaped)
|
|
219
|
+
rrstring.gsub!(/(\?<!\\);.*/o, "");
|
|
220
|
+
|
|
221
|
+
if ((rrstring =~/#{@@RR_REGEX}/xo) == nil)
|
|
222
|
+
raise Exception, "#{rrstring} did not match RR pat.\nPlease report this to the author!\n"
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
name = $1;
|
|
226
|
+
ttl = $2.to_i || 0;
|
|
227
|
+
rrclass = $3 || '';
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
rrtype = $4 || '';
|
|
231
|
+
rdata = $5 || '';
|
|
232
|
+
|
|
233
|
+
if rdata
|
|
234
|
+
rdata.gsub!(/\s+$/o, "")
|
|
235
|
+
end
|
|
236
|
+
if name
|
|
237
|
+
name.gsub!(/\.$/o, "");
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
# RFC3597 tweaks
|
|
242
|
+
# This converts to known class and type if specified as TYPE###
|
|
243
|
+
if rrtype =~/^TYPE\d+/o
|
|
244
|
+
rrtype = Dnsruby::Types.typesbyval(Dnsruby::Types::typesbyname(rrtype))
|
|
245
|
+
end
|
|
246
|
+
if rrclass =~/^CLASS\d+/o
|
|
247
|
+
rrclass = Dnsruby::Classes.classesbyval(Dnsruby::Classes::classesbyname(rrclass))
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
if (rrtype=='' && rrclass && rrclass == 'ANY')
|
|
252
|
+
rrtype = 'ANY';
|
|
253
|
+
rrclass = 'IN';
|
|
254
|
+
elsif (rrclass=='')
|
|
255
|
+
rrclass = 'IN';
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
if (rrtype == '')
|
|
259
|
+
rrtype = 'ANY';
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
if (implemented_rrs.include?(rrtype) && rdata !~/^\s*\\#/o )
|
|
263
|
+
subclass = _get_subclass(name, rrtype, rrclass, ttl, rdata)
|
|
264
|
+
return subclass
|
|
265
|
+
elsif (implemented_rrs.include?(rrtype)) # A known RR type starting with \#
|
|
266
|
+
rdata =~ /\\\#\s+(\d+)\s+(.*)$/o;
|
|
267
|
+
|
|
268
|
+
rdlength = $1.to_i;
|
|
269
|
+
hexdump = $2;
|
|
270
|
+
hexdump.gsub!(/\s*/, "");
|
|
271
|
+
|
|
272
|
+
if hexdump.length() != rdlength*2
|
|
273
|
+
raise Exception, "#{rdata} is inconsistent; length does not match content"
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
rdata = [hexdump].pack('H*');
|
|
277
|
+
|
|
278
|
+
return new_from_data(name, rrtype, rrclass, ttl, rdlength, rdata, 0) # rdata.length() - rdlength);
|
|
279
|
+
elsif (rdata=~/\s*\\\#\s+\d+\s+/o)
|
|
280
|
+
#We are now dealing with the truly unknown.
|
|
281
|
+
raise Exception, 'Expected RFC3597 representation of RDATA' unless rdata =~/\\\#\s+(\d+)\s+(.*)$/o;
|
|
282
|
+
|
|
283
|
+
rdlength = $1.to_i;
|
|
284
|
+
hexdump = $2;
|
|
285
|
+
hexdump.gsub!(/\s*/o, "");
|
|
286
|
+
|
|
287
|
+
if hexdump.length() != rdlength*2
|
|
288
|
+
raise Exception, "#{rdata} is inconsistent; length does not match content" ;
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
rdata = [hexdump].pack('H*');
|
|
292
|
+
|
|
293
|
+
return new_from_data(name,rrtype,rrclass,ttl,rdlength,rdata,0) # rdata.length() - rdlength);
|
|
294
|
+
else
|
|
295
|
+
#God knows how to handle these...
|
|
296
|
+
subclass = _get_subclass(name, rrtype, rrclass, ttl, "")
|
|
297
|
+
return subclass
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
def RR.new_from_data(*args) #:nodoc: all
|
|
302
|
+
name = args[0]
|
|
303
|
+
rrtype = args[1]
|
|
304
|
+
rrclass = args[2]
|
|
305
|
+
ttl = args[3]
|
|
306
|
+
rdlength = args[4]
|
|
307
|
+
data = args[5]
|
|
308
|
+
offset = args[6]
|
|
309
|
+
rdata = data[offset, rdlength]
|
|
310
|
+
|
|
311
|
+
record = nil
|
|
312
|
+
MessageDecoder.new(rdata) {|msg|
|
|
313
|
+
record = get_class(rrtype, rrclass).decode_rdata(msg)
|
|
314
|
+
}
|
|
315
|
+
record.name = name
|
|
316
|
+
record.ttl = ttl
|
|
317
|
+
record.type = rrtype
|
|
318
|
+
record.klass = rrclass
|
|
319
|
+
|
|
320
|
+
return record
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
#Return an array of all the currently implemented RR types
|
|
324
|
+
def RR.implemented_rrs
|
|
325
|
+
return ClassHash.keys.map {|k| Dnsruby::Types.to_string(k[0])}
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
private
|
|
329
|
+
def RR._get_subclass(name, rrtype, rrclass, ttl, rdata) #:nodoc: all
|
|
330
|
+
return unless (rrtype!=nil)
|
|
331
|
+
record = get_class(rrtype, rrclass).new(rdata)
|
|
332
|
+
record.name = name
|
|
333
|
+
record.ttl = ttl
|
|
334
|
+
record.type = rrtype
|
|
335
|
+
record.klass = rrclass
|
|
336
|
+
return record
|
|
337
|
+
end
|
|
338
|
+
public
|
|
339
|
+
|
|
340
|
+
#Returns a string representation of the RR in zone file format
|
|
341
|
+
def to_s
|
|
342
|
+
return (@name?@name.to_s():"") + ".\t" +(@ttl?@ttl.to_s():"") + "\t" + (klass()?klass.string():"") + "\t" + (type()?type.string():"") + "\t" + rdata_to_string
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
#Get a string representation of the data section of the RR (in zone file format)
|
|
346
|
+
def rdata_to_string
|
|
347
|
+
if (@rdata && @rdata.length > 0)
|
|
348
|
+
return @rdata
|
|
349
|
+
else
|
|
350
|
+
return "no rdata"
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
def from_data(data) #:nodoc: all
|
|
355
|
+
# to be implemented by subclasses
|
|
356
|
+
raise NotImplementedError.new
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
def from_string(input) #:nodoc: all
|
|
360
|
+
# to be implemented by subclasses
|
|
361
|
+
# raise NotImplementedError.new
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
def encode_rdata(msg) #:nodoc: all
|
|
365
|
+
# to be implemented by subclasses
|
|
366
|
+
raise EncodeError.new("#{self.class} is RR.")
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
370
|
+
# to be implemented by subclasses
|
|
371
|
+
raise DecodeError.new("#{self.class} is RR.")
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
def ==(other)
|
|
375
|
+
# @TODO@ TTL should not be compared for Updates! (RFC 2136, 1.1.1)
|
|
376
|
+
return self.class == other.class &&
|
|
377
|
+
self.instance_variables == other.instance_variables &&
|
|
378
|
+
self.instance_variables.collect {|name| self.instance_eval name} ==
|
|
379
|
+
other.instance_variables.collect {|name| other.instance_eval name}
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def eql?(other)
|
|
383
|
+
return self == other
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
def hash
|
|
387
|
+
h = 0
|
|
388
|
+
self.instance_variables.each {|name|
|
|
389
|
+
h ^= self.instance_eval("#{name}.hash")
|
|
390
|
+
}
|
|
391
|
+
return h
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
#Get an RR of the specified type and class
|
|
395
|
+
def self.get_class(type_value, class_value) #:nodoc: all
|
|
396
|
+
if (type_value.class == Class)
|
|
397
|
+
type_value = type_value.const_get(:TypeValue)
|
|
398
|
+
return ClassHash[[type_value, Classes.to_code(class_value)]] ||
|
|
399
|
+
Generic.create(type_value, Classes.to_code(class_value))
|
|
400
|
+
else
|
|
401
|
+
if (type_value.class == Types)
|
|
402
|
+
type_value = type_value.code
|
|
403
|
+
else
|
|
404
|
+
type_value = Types.new(type_value).code
|
|
405
|
+
end
|
|
406
|
+
if (class_value.class == Classes)
|
|
407
|
+
class_value = class_value.code
|
|
408
|
+
else
|
|
409
|
+
class_value = Classes.new(class_value).code
|
|
410
|
+
end
|
|
411
|
+
return ClassHash[[type_value, class_value]] ||
|
|
412
|
+
Generic.create(type_value, class_value)
|
|
413
|
+
end
|
|
414
|
+
return ret
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
#Create a new RR from the arguments, which can be either a String or a Hash.
|
|
419
|
+
#See new_from_string and new_from_hash for details
|
|
420
|
+
#
|
|
421
|
+
# a = Dnsruby::RR.create("foo.example.com. 86400 A 10.1.2.3")
|
|
422
|
+
# mx = Dnsruby::RR.create("example.com. 7200 MX 10 mailhost.example.com.")
|
|
423
|
+
# cname = Dnsruby::RR.create("www.example.com 300 IN CNAME www1.example.com")
|
|
424
|
+
# txt = Dnsruby::RR.create('baz.example.com 3600 HS TXT "text record"')
|
|
425
|
+
#
|
|
426
|
+
# rr = Dnsruby::RR.create({:name => "example.com"})
|
|
427
|
+
# rr = Dnsruby::RR.create({:name => "example.com", :type => "MX", :ttl => 10,
|
|
428
|
+
# :preference => 5, :exchange => "mx1.example.com"})
|
|
429
|
+
#
|
|
430
|
+
def RR.create(*args)
|
|
431
|
+
if (args.length == 1) && (args[0].class == String)
|
|
432
|
+
return new_from_string(args[0])
|
|
433
|
+
elsif (args.length == 1) && (args[0].class == Hash)
|
|
434
|
+
return new_from_hash(args[0])
|
|
435
|
+
else
|
|
436
|
+
return new_from_data(args)
|
|
437
|
+
end
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
end
|
|
441
|
+
end
|
|
442
|
+
require 'Dnsruby/resource/domain_name'
|
|
443
|
+
require 'Dnsruby/resource/generic'
|
|
444
|
+
require 'Dnsruby/resource/IN'
|