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,108 @@
|
|
|
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
|
+
module IN
|
|
19
|
+
# SRV resource record defined in RFC 2782
|
|
20
|
+
#
|
|
21
|
+
# These records identify the hostname and port that a service is
|
|
22
|
+
# available at.
|
|
23
|
+
#
|
|
24
|
+
# The format is:
|
|
25
|
+
# _Service._Proto.Name TTL Class SRV Priority Weight Port Target
|
|
26
|
+
#
|
|
27
|
+
# The fields specific to SRV are defined in RFC 2782 as meaning:
|
|
28
|
+
# - +priority+ The priority of this target host. A client MUST attempt
|
|
29
|
+
# to contact the target host with the lowest-numbered priority it can
|
|
30
|
+
# reach; target hosts with the same priority SHOULD be tried in an
|
|
31
|
+
# order defined by the weight field. The range is 0-65535. Note that
|
|
32
|
+
# it is not widely implemented and should be set to zero.
|
|
33
|
+
#
|
|
34
|
+
# - +weight+ A server selection mechanism. The weight field specifies
|
|
35
|
+
# a relative weight for entries with the same priority. Larger weights
|
|
36
|
+
# SHOULD be given a proportionately higher probability of being
|
|
37
|
+
# selected. The range of this number is 0-65535. Domain administrators
|
|
38
|
+
# SHOULD use Weight 0 when there isn't any server selection to do, to
|
|
39
|
+
# make the RR easier to read for humans (less noisy). Note that it is
|
|
40
|
+
# not widely implemented and should be set to zero.
|
|
41
|
+
#
|
|
42
|
+
# - +port+ The port on this target host of this service. The range is 0-
|
|
43
|
+
# 65535.
|
|
44
|
+
#
|
|
45
|
+
# - +target+ The domain name of the target host. A target of "." means
|
|
46
|
+
# that the service is decidedly not available at this domain.
|
|
47
|
+
class SRV < RR
|
|
48
|
+
ClassHash[[TypeValue = Types::SRV, ClassValue = ClassValue]] = self #:nodoc: all
|
|
49
|
+
|
|
50
|
+
attr_accessor :priority, :weight, :port, :target
|
|
51
|
+
|
|
52
|
+
def from_data(data) #:nodoc: all
|
|
53
|
+
@priority, @weight, @port, @target = data
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def from_hash(hash)
|
|
57
|
+
if hash[:priority]
|
|
58
|
+
@priority = hash[:priority].to_int
|
|
59
|
+
end
|
|
60
|
+
if hash[:weight]
|
|
61
|
+
@weight = hash[:weight].to_int
|
|
62
|
+
end
|
|
63
|
+
if hash[:port]
|
|
64
|
+
@port = hash[:port].to_int
|
|
65
|
+
end
|
|
66
|
+
if hash[:target]
|
|
67
|
+
@target= Name.create(hash[:target])
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def from_string(input)
|
|
72
|
+
if (input.length > 0)
|
|
73
|
+
names = input.split(" ")
|
|
74
|
+
@priority = names[0]
|
|
75
|
+
@weight = names[1]
|
|
76
|
+
@port = names[2]
|
|
77
|
+
if (names[3])
|
|
78
|
+
@target = Name.create(names[3])
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def rdata_to_string
|
|
84
|
+
if (@target!=nil)
|
|
85
|
+
return "#{@priority} #{@weight} #{@port} #{@target}"
|
|
86
|
+
else
|
|
87
|
+
return ""
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
|
92
|
+
msg.put_pack("n", @priority)
|
|
93
|
+
msg.put_pack("n", @weight)
|
|
94
|
+
msg.put_pack("n", @port)
|
|
95
|
+
msg.put_name(@target,canonical)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
99
|
+
priority, = msg.get_unpack("n")
|
|
100
|
+
weight, = msg.get_unpack("n")
|
|
101
|
+
port, = msg.get_unpack("n")
|
|
102
|
+
target = msg.get_name
|
|
103
|
+
return self.new([priority, weight, port, target])
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,160 @@
|
|
|
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
|
+
|
|
18
|
+
class Modes < CodeMapper
|
|
19
|
+
# The key is assigned by the server (unimplemented)
|
|
20
|
+
SERVERASSIGNED = 1
|
|
21
|
+
|
|
22
|
+
# The key is computed using a Diffie-Hellman key exchange
|
|
23
|
+
DIFFIEHELLMAN = 2
|
|
24
|
+
|
|
25
|
+
# The key is computed using GSS_API (unimplemented)
|
|
26
|
+
GSSAPI = 3
|
|
27
|
+
|
|
28
|
+
# The key is assigned by the resolver (unimplemented)
|
|
29
|
+
RESOLVERASSIGNED = 4
|
|
30
|
+
|
|
31
|
+
# The key should be deleted
|
|
32
|
+
DELETE = 5
|
|
33
|
+
update()
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class RR
|
|
37
|
+
#@TODO@ Implement this RR!
|
|
38
|
+
#RFC2930
|
|
39
|
+
class TKEY < RR
|
|
40
|
+
ClassHash[[TypeValue = Types::TKEY, ClassValue = Classes.ANY]] = self #:nodoc: all
|
|
41
|
+
|
|
42
|
+
attr_reader :key_size
|
|
43
|
+
attr_accessor :key
|
|
44
|
+
#Gets or sets the domain name that specifies the name of the algorithm.
|
|
45
|
+
#The default algorithm is gss.microsoft.com
|
|
46
|
+
#
|
|
47
|
+
# rr.algorithm=(algorithm_name)
|
|
48
|
+
# print "algorithm = ", rr.algorithm, "\n"
|
|
49
|
+
#
|
|
50
|
+
attr_accessor :algorithm
|
|
51
|
+
#Gets or sets the inception time as the number of seconds since 1 Jan 1970
|
|
52
|
+
#00:00:00 UTC.
|
|
53
|
+
#
|
|
54
|
+
#The default inception time is the current time.
|
|
55
|
+
#
|
|
56
|
+
# rr.inception=(time)
|
|
57
|
+
# print "inception = ", rr.inception, "\n"
|
|
58
|
+
#
|
|
59
|
+
attr_accessor :inception
|
|
60
|
+
#Gets or sets the expiration time as the number of seconds since 1 Jan 1970
|
|
61
|
+
#00:00:00 UTC.
|
|
62
|
+
#
|
|
63
|
+
#The default expiration time is the current time plus 1 day.
|
|
64
|
+
#
|
|
65
|
+
# rr.expiration=(time)
|
|
66
|
+
# print "expiration = ", rr.expiration, "\n"
|
|
67
|
+
#
|
|
68
|
+
attr_accessor :expiration
|
|
69
|
+
#Sets the key mode (see rfc2930). The default is 3 which corresponds to GSSAPI
|
|
70
|
+
#
|
|
71
|
+
# rr.mode=(3)
|
|
72
|
+
# print "mode = ", rr.mode, "\n"
|
|
73
|
+
#
|
|
74
|
+
attr_accessor :mode
|
|
75
|
+
#Returns the RCODE covering TKEY processing. See RFC 2930 for details.
|
|
76
|
+
#
|
|
77
|
+
# print "error = ", rr.error, "\n"
|
|
78
|
+
#
|
|
79
|
+
attr_accessor :error
|
|
80
|
+
#Returns the length of the Other Data. Should be zero.
|
|
81
|
+
#
|
|
82
|
+
# print "other size = ", rr.other_size, "\n"
|
|
83
|
+
#
|
|
84
|
+
attr_reader :other_size
|
|
85
|
+
#Returns the Other Data. This field should be empty.
|
|
86
|
+
#
|
|
87
|
+
# print "other data = ", rr.other_data, "\n"
|
|
88
|
+
#
|
|
89
|
+
attr_accessor :other_data
|
|
90
|
+
|
|
91
|
+
def other_data=(od)
|
|
92
|
+
@other_data=od
|
|
93
|
+
@other_size=@other_data.length
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def initialize
|
|
97
|
+
@algorithm = "gss.microsoft.com"
|
|
98
|
+
@inception = Time.now
|
|
99
|
+
@expiration = Time.now + 24*60*60
|
|
100
|
+
@mode = Modes.GSSAPI
|
|
101
|
+
@error = 0
|
|
102
|
+
@other_size = 0
|
|
103
|
+
@other_data = ""
|
|
104
|
+
|
|
105
|
+
# RFC 2845 Section 2.3
|
|
106
|
+
@klass = Classes.ANY
|
|
107
|
+
# RFC 2845 Section 2.3
|
|
108
|
+
@ttl = 0
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def from_data(data) #:nodoc: all
|
|
112
|
+
@algorithm, @inception, @expiration, @mode, @error, @key_size, @key, @other_size, @other_data = data
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Create the RR from a standard string
|
|
116
|
+
def from_string(string) #:nodoc: all
|
|
117
|
+
TheLog.error("Dnsruby::RR::TKEY#from_string called, but no text format defined for TKEY")
|
|
118
|
+
# # There isn't a standard string for TKEY so the key can be loaded here
|
|
119
|
+
# if (string != nil && (string =~ /^(.*)$/))
|
|
120
|
+
# @key = $1;
|
|
121
|
+
# end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def rdata_to_string
|
|
125
|
+
#@TODO@ Provide more info?
|
|
126
|
+
rdatastr=""
|
|
127
|
+
|
|
128
|
+
if (@algorithm!=nil)
|
|
129
|
+
error = @error
|
|
130
|
+
error = "UNDEFINED" unless error!=nil
|
|
131
|
+
rdatastr = "#{@algorithm}. #{error}"
|
|
132
|
+
if (@other_size != nil && @other_size >0 && @other_data!=nil)
|
|
133
|
+
rdatastr += " #{@other_data}"
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
return rdatastr
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def encode_rdata(msg) #:nodoc: all
|
|
141
|
+
msg.put_name(@algorithm)
|
|
142
|
+
msg.put_pack("NNnn", @inception, @expiration, @mode, @error)
|
|
143
|
+
msg.put_pack("n", @key.length)
|
|
144
|
+
msg.put_bytes(@key)
|
|
145
|
+
msg.put_pack("n", @other_data.length)
|
|
146
|
+
msg.put_bytes(@other_data)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
150
|
+
alg=msg.get_name
|
|
151
|
+
inc, exp, mode, error = msg.get_unpack("NNnn")
|
|
152
|
+
key_size=msg.get_unpack("n")
|
|
153
|
+
key=msg.get_bytes(key_size)
|
|
154
|
+
other_size=msg.get_unpack("n")
|
|
155
|
+
other=msg.get_bytes(other_size)
|
|
156
|
+
return self.new(alg, inc, exp, mode, error, key_size, key, other_size, other)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
@@ -0,0 +1,328 @@
|
|
|
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 'base64'
|
|
17
|
+
require "digest/md5"
|
|
18
|
+
require "digest/sha1"
|
|
19
|
+
#require "digest/sha256"
|
|
20
|
+
module Dnsruby
|
|
21
|
+
class RR
|
|
22
|
+
class TSIG < RR
|
|
23
|
+
HMAC_MD5 = Name.create("HMAC-MD5.SIG-ALG.REG.INT")
|
|
24
|
+
HMAC_SHA1 = Name.create("hmac-sha1.")
|
|
25
|
+
HMAC_SHA256 = Name.create("hmac-sha256.")
|
|
26
|
+
|
|
27
|
+
DEFAULT_FUDGE = 300
|
|
28
|
+
|
|
29
|
+
DEFAULT_ALGORITHM = HMAC_MD5
|
|
30
|
+
|
|
31
|
+
# Generates a TSIG record and adds it to the message.
|
|
32
|
+
def apply(message)
|
|
33
|
+
if (!message.is_signed)
|
|
34
|
+
generate(message)
|
|
35
|
+
message.add_additional(self)
|
|
36
|
+
message.tsigstate = :Signed
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Generates a TSIG record
|
|
41
|
+
def generate(m)
|
|
42
|
+
if (!@time_signed)
|
|
43
|
+
time_signed=Time.now
|
|
44
|
+
end
|
|
45
|
+
hmac = nil
|
|
46
|
+
if (@algorithm == HMAC_MD5)
|
|
47
|
+
hmac = Digest::MD5.new
|
|
48
|
+
elsif (@algorithm == HMAC_SHA1)
|
|
49
|
+
hmac=Digest::SHA1.new
|
|
50
|
+
elsif (@algorithm == HMAC_SHA256)
|
|
51
|
+
hmac=Digest::SHA256.new
|
|
52
|
+
end
|
|
53
|
+
hmac.update(@key)
|
|
54
|
+
|
|
55
|
+
s=""
|
|
56
|
+
@key.length.times do |i|
|
|
57
|
+
s << @key[i].to_s + ","
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
print "key : #{s}\n"
|
|
61
|
+
|
|
62
|
+
b = m.encode
|
|
63
|
+
s=""
|
|
64
|
+
b.length.times do |i|
|
|
65
|
+
s << b[i].to_s + ","
|
|
66
|
+
end
|
|
67
|
+
print "encoded message : #{s}\n"
|
|
68
|
+
|
|
69
|
+
# Digest the message
|
|
70
|
+
if (hmac)
|
|
71
|
+
hmac.update(b) # @TODO@ b is RENDERED MESSAGE!! NOT m.encode!
|
|
72
|
+
# Dnsjava has render method for messages
|
|
73
|
+
# pnet-dns signs message during encoding process.
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
data = sig_data
|
|
77
|
+
s=""
|
|
78
|
+
|
|
79
|
+
data.length.times do |i|
|
|
80
|
+
s << data[i].to_s + ","
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
print "encoded TSIG : #{s}\n"
|
|
84
|
+
hmac.update(data)
|
|
85
|
+
|
|
86
|
+
@mac = hmac.digest
|
|
87
|
+
@mac_size = @mac.length
|
|
88
|
+
|
|
89
|
+
s=""
|
|
90
|
+
|
|
91
|
+
@mac.length.times do |i|
|
|
92
|
+
s << @mac[i].to_s + ","
|
|
93
|
+
end
|
|
94
|
+
print "hmac : #{s}\n"
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def sig_data
|
|
99
|
+
return MessageEncoder.new { |msg|
|
|
100
|
+
msg.put_name(name.downcase)
|
|
101
|
+
msg.put_pack('nN', @klass.code, @ttl)
|
|
102
|
+
print "Alg : #{@algorithm}\n"
|
|
103
|
+
#@TODO@ ALGORITHM IS GOING TO LOWER-CASE!!!
|
|
104
|
+
msg.put_name(@algorithm.downcase)
|
|
105
|
+
|
|
106
|
+
time_high = (@time_signed >> 32)
|
|
107
|
+
time_low = (@time_signed & 0xFFFFFFFF)
|
|
108
|
+
print "time_signed : #{@time_signed}, high : #{time_high}, low : #{time_low}\n"
|
|
109
|
+
msg.put_pack('nN', time_high, time_low)
|
|
110
|
+
msg.put_pack('n', @fudge)
|
|
111
|
+
print "Fudge : #{@fudge}\n"
|
|
112
|
+
msg.put_pack('n', @error)
|
|
113
|
+
print "Error : #{@error}\n"
|
|
114
|
+
msg.put_pack('n', 0) # no other data
|
|
115
|
+
}.to_s
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def self.verify()
|
|
119
|
+
# 3.2. TSIG processing on incoming messages
|
|
120
|
+
#
|
|
121
|
+
# If an incoming message contains a TSIG record, it MUST be the last
|
|
122
|
+
# record in the additional section. Multiple TSIG records are not
|
|
123
|
+
# allowed. If a TSIG record is present in any other position, the
|
|
124
|
+
# packet is dropped and a response with RCODE 1 (FORMERR) MUST be
|
|
125
|
+
# returned. Upon receipt of a message with a correctly placed TSIG RR,
|
|
126
|
+
# the TSIG RR is copied to a safe location, removed from the DNS
|
|
127
|
+
# Message, and decremented out of the DNS message header's ARCOUNT. At
|
|
128
|
+
# this point the keyed message digest operation is performed. If the
|
|
129
|
+
# algorithm name or key name is unknown to the recipient, or if the
|
|
130
|
+
# message digests do not match, the whole DNS message MUST be
|
|
131
|
+
# discarded. If the message is a query, a response with RCODE 9
|
|
132
|
+
# (NOTAUTH) MUST be sent back to the originator with TSIG ERROR 17
|
|
133
|
+
# (BADKEY) or TSIG ERROR 16 (BADSIG). If no key is available to sign
|
|
134
|
+
# this message it MUST be sent unsigned (MAC size == 0 and empty MAC).
|
|
135
|
+
# A message to the system operations log SHOULD be generated, to warn
|
|
136
|
+
# the operations staff of a possible security incident in progress.
|
|
137
|
+
# Care should be taken to ensure that logging of this type of event
|
|
138
|
+
# does not open the system to a denial of service attack.
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
ClassHash[[TypeValue = Types::TSIG, ClassValue = Classes.ANY]] = self #:nodoc: all
|
|
142
|
+
|
|
143
|
+
#Gets or sets the domain name that specifies the name of the algorithm.
|
|
144
|
+
#The only algorithm currently supported is HMAC-MD5.SIG-ALG.REG.INT.
|
|
145
|
+
#
|
|
146
|
+
# rr.algorithm=(algorithm_name)
|
|
147
|
+
# print "algorithm = ", rr.algorithm, "\n"
|
|
148
|
+
#
|
|
149
|
+
attr_accessor :algorithm
|
|
150
|
+
|
|
151
|
+
#Gets or sets the signing time as the number of seconds since 1 Jan 1970
|
|
152
|
+
#00:00:00 UTC.
|
|
153
|
+
#
|
|
154
|
+
#The default signing time is the current time.
|
|
155
|
+
#
|
|
156
|
+
# rr.time_signed=(time)
|
|
157
|
+
# print "time signed = ", rr.time_signed, "\n"
|
|
158
|
+
#
|
|
159
|
+
attr_accessor :time_signed
|
|
160
|
+
|
|
161
|
+
#Gets or sets the "fudge", i.e., the seconds of error permitted in the
|
|
162
|
+
#signing time.
|
|
163
|
+
#
|
|
164
|
+
#The default fudge is 300 seconds.
|
|
165
|
+
#
|
|
166
|
+
# rr.fudge=(60)
|
|
167
|
+
# print "fudge = ", rr.fudge, "\n"
|
|
168
|
+
#
|
|
169
|
+
attr_accessor :fudge
|
|
170
|
+
|
|
171
|
+
#Returns the number of octets in the message authentication code (MAC).
|
|
172
|
+
#The programmer must call a Net::DNS::Packet object's data method
|
|
173
|
+
#before this will return anything meaningful.
|
|
174
|
+
#
|
|
175
|
+
# print "MAC size = ", rr.mac_size, "\n"
|
|
176
|
+
#
|
|
177
|
+
attr_writer :mac_size
|
|
178
|
+
|
|
179
|
+
#Returns the message authentication code (MAC) as a string of hex
|
|
180
|
+
#characters. The programmer must call a Net::DNS::Packet object's
|
|
181
|
+
#data method before this will return anything meaningful.
|
|
182
|
+
#
|
|
183
|
+
# print "MAC = ", rr.mac, "\n"
|
|
184
|
+
#
|
|
185
|
+
attr_accessor :mac
|
|
186
|
+
|
|
187
|
+
#Gets or sets the original message ID.
|
|
188
|
+
#
|
|
189
|
+
# rr.original_id(12345)
|
|
190
|
+
# print "original ID = ", rr.original_id, "\n"
|
|
191
|
+
#
|
|
192
|
+
attr_accessor :original_id
|
|
193
|
+
|
|
194
|
+
#Returns the RCODE covering TSIG processing. Common values are
|
|
195
|
+
#NOERROR, BADSIG, BADKEY, and BADTIME. See RFC 2845 for details.
|
|
196
|
+
#
|
|
197
|
+
# print "error = ", rr.error, "\n"
|
|
198
|
+
#
|
|
199
|
+
attr_writer :error
|
|
200
|
+
|
|
201
|
+
#Returns the length of the Other Data. Should be zero unless the
|
|
202
|
+
#error is BADTIME.
|
|
203
|
+
#
|
|
204
|
+
# print "other len = ", rr.other_size, "\n"
|
|
205
|
+
#
|
|
206
|
+
attr_accessor :other_size
|
|
207
|
+
|
|
208
|
+
#Returns the Other Data. This field should be empty unless the
|
|
209
|
+
#error is BADTIME, in which case it will contain the server's
|
|
210
|
+
#time as the number of seconds since 1 Jan 1970 00:00:00 UTC.
|
|
211
|
+
#
|
|
212
|
+
# print "other data = ", rr.other_data, "\n"
|
|
213
|
+
#
|
|
214
|
+
attr_accessor :other_data
|
|
215
|
+
attr_accessor :key
|
|
216
|
+
|
|
217
|
+
def initialize
|
|
218
|
+
@algorithm = DEFAULT_ALGORITHM
|
|
219
|
+
@time_signed = Time.now.to_i
|
|
220
|
+
@fudge = DEFAULT_FUDGE
|
|
221
|
+
@mac_size = 0
|
|
222
|
+
@mac = ""
|
|
223
|
+
@original_id = 0
|
|
224
|
+
@error = 0
|
|
225
|
+
@other_size = 0
|
|
226
|
+
@other_data = nil
|
|
227
|
+
|
|
228
|
+
# RFC 2845 Section 2.3
|
|
229
|
+
@klass = "ANY"
|
|
230
|
+
|
|
231
|
+
@ttl = 0 # RFC 2845 Section 2.3
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def from_data(data) #:nodoc: all
|
|
235
|
+
@algorithm, @time_signed, @fudge, @mac_size, @mac, @original_id, @error, @other_size, @other_data = data
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# Create the RR from a standard string
|
|
239
|
+
def from_string(str) #:nodoc: all
|
|
240
|
+
parts = str.split("[:/]")
|
|
241
|
+
if (parts.length < 2 || parts.length > 3)
|
|
242
|
+
raise ArgumentException.new("Invalid TSIG key specification")
|
|
243
|
+
end
|
|
244
|
+
if (parts.length == 3)
|
|
245
|
+
return TSIG.new(parts[0], parts[1], parts[2]);
|
|
246
|
+
else
|
|
247
|
+
return TSIG.new(HMAC_MD5, parts[0], parts[1]);
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
def algorithm=(alg)
|
|
252
|
+
case alg.class
|
|
253
|
+
when String
|
|
254
|
+
if (alg.downcase=="hmac-md5")
|
|
255
|
+
@algorithm = HMAC_MD5;
|
|
256
|
+
elsif (algorithm.downcase=="hmac-sha1")
|
|
257
|
+
@algorithm = HMAC_SHA1;
|
|
258
|
+
elsif (algorithm.downcase=="hmac-sha256")
|
|
259
|
+
@algorithm = HMAC_SHA256;
|
|
260
|
+
else
|
|
261
|
+
raise ArgumentException.new("Invalid TSIG algorithm")
|
|
262
|
+
end
|
|
263
|
+
when Name
|
|
264
|
+
if (alg!=HMAC_MD5 && alg!=HMAC_SHA1 && alg!=HMAC_SHA256)
|
|
265
|
+
raise ArgumentException.new("Invalid TSIG algorithm")
|
|
266
|
+
end
|
|
267
|
+
@algorithm=alg
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def fudge=(f)
|
|
272
|
+
if (f < 0 || f > 0x7FFF)
|
|
273
|
+
@fudge = DEFAULT_FUDGE
|
|
274
|
+
else
|
|
275
|
+
@fudge = f
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def rdata_to_string
|
|
280
|
+
#@TODO@ Provide more info?
|
|
281
|
+
rdatastr=""
|
|
282
|
+
if (@algorithm!=nil)
|
|
283
|
+
error = @error
|
|
284
|
+
error = "UNDEFINED" unless error!=nil
|
|
285
|
+
rdatastr = "#{@algorithm}. #{error}";
|
|
286
|
+
if (@other_size > 0 && @other_data!=nil)
|
|
287
|
+
rdatastr += " #{@other_data}"
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
return rdatastr
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
def encode_rdata(msg) #:nodoc: all
|
|
295
|
+
msg.put_name(@algorithm)
|
|
296
|
+
time_high = (@time_signed >> 32)
|
|
297
|
+
time_low = (@time_signed & 0xFFFFFFFF)
|
|
298
|
+
msg.put_pack('nN', time_high, time_low)
|
|
299
|
+
msg.put_pack('n', @fudge)
|
|
300
|
+
msg.put_pack('n', @mac_size)
|
|
301
|
+
msg.put_bytes(@mac)
|
|
302
|
+
msg.put_pack('n', @original_id)
|
|
303
|
+
msg.put_pack('n', @error)
|
|
304
|
+
msg.put_pack('n', @other_size)
|
|
305
|
+
if (@other_size > 0)
|
|
306
|
+
msg.put_bytes(@other_data)
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def self.decode_rdata(msg) #:nodoc: all
|
|
311
|
+
alg=msg.get_name
|
|
312
|
+
time_high, time_low = msg.get_unpack("nN")
|
|
313
|
+
time_signed = (timeHigh << 32) + timeLow
|
|
314
|
+
fudge = msg.get_unpack("n")
|
|
315
|
+
mac_size = msg.get_unpack("n")
|
|
316
|
+
mac = msg.get_string
|
|
317
|
+
original_id = msg.get_unpack("n")
|
|
318
|
+
error = msg.get_unpack("n")
|
|
319
|
+
other_size = msg.get_unpack("n")
|
|
320
|
+
other_data=""
|
|
321
|
+
if (other_size > 0)
|
|
322
|
+
other_data = msg.get_bytes(other_size)
|
|
323
|
+
end
|
|
324
|
+
return self.new(alg, time_signed, fudge, mac_size, mac, original_id, error, other_size, other_data)
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
end
|
|
@@ -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) #: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
|