Dnsruby 0.6.0 → 1.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/EVENTMACHINE +1 -1
- data/README +36 -7
- data/doc/classes/Dnsruby.html +49 -18
- data/doc/classes/Dnsruby/Classes.html +10 -10
- data/doc/classes/Dnsruby/Classes.src/{M000158.html → M000156.html} +1 -1
- data/doc/classes/Dnsruby/Classes.src/M000157.html +5 -9
- data/doc/classes/Dnsruby/CodeMapper.html +55 -55
- data/doc/classes/Dnsruby/CodeMapper.src/M000133.html +4 -7
- data/doc/classes/Dnsruby/CodeMapper.src/M000134.html +19 -5
- data/doc/classes/Dnsruby/CodeMapper.src/M000135.html +7 -5
- data/doc/classes/Dnsruby/CodeMapper.src/M000136.html +5 -4
- data/doc/classes/Dnsruby/CodeMapper.src/M000137.html +5 -8
- data/doc/classes/Dnsruby/CodeMapper.src/M000138.html +4 -8
- data/doc/classes/Dnsruby/CodeMapper.src/M000139.html +6 -6
- data/doc/classes/Dnsruby/CodeMapper.src/M000140.html +7 -16
- data/doc/classes/Dnsruby/CodeMapper.src/M000141.html +8 -5
- data/doc/classes/Dnsruby/CodeMapper.src/{M000167.html → M000142.html} +0 -0
- data/doc/classes/Dnsruby/CodeMapper.src/{M000168.html → M000143.html} +0 -0
- data/doc/classes/Dnsruby/Config.html +66 -63
- data/doc/classes/Dnsruby/Config.src/{M000125.html → M000097.html} +1 -1
- data/doc/classes/Dnsruby/Config.src/M000098.html +5 -4
- data/doc/classes/Dnsruby/Config.src/M000099.html +5 -5
- data/doc/classes/Dnsruby/Config.src/M000100.html +11 -5
- data/doc/classes/Dnsruby/Config.src/M000101.html +6 -6
- data/doc/classes/Dnsruby/Config.src/M000102.html +23 -6
- data/doc/classes/Dnsruby/Config.src/M000103.html +10 -22
- data/doc/classes/Dnsruby/Config.src/M000104.html +7 -11
- data/doc/classes/Dnsruby/Config.src/M000105.html +13 -8
- data/doc/classes/Dnsruby/Config.src/M000106.html +7 -12
- data/doc/classes/Dnsruby/Config.src/M000107.html +6 -7
- data/doc/classes/Dnsruby/DNS.html +220 -118
- data/doc/classes/Dnsruby/DNS.src/{M000224.html → M000190.html} +1 -1
- data/doc/classes/Dnsruby/DNS.src/{M000225.html → M000191.html} +1 -1
- data/doc/classes/Dnsruby/DNS.src/{M000226.html → M000192.html} +1 -1
- data/doc/classes/Dnsruby/DNS.src/M000193.html +24 -0
- data/doc/classes/Dnsruby/{SingleResolver.src/M000152.html → DNS.src/M000194.html} +3 -3
- data/doc/classes/Dnsruby/{IPv4.src/M000156.html → DNS.src/M000195.html} +4 -4
- data/doc/classes/Dnsruby/DNS.src/M000196.html +6 -10
- data/doc/classes/Dnsruby/DNS.src/M000197.html +5 -10
- data/doc/classes/Dnsruby/DNS.src/M000198.html +6 -4
- data/doc/classes/Dnsruby/DNS.src/M000199.html +4 -4
- data/doc/classes/Dnsruby/DNS.src/M000200.html +5 -6
- data/doc/classes/Dnsruby/DNS.src/M000201.html +6 -5
- data/doc/classes/Dnsruby/DNS.src/M000202.html +14 -6
- data/doc/classes/Dnsruby/DNS.src/M000203.html +5 -4
- data/doc/classes/Dnsruby/DNS.src/M000204.html +6 -5
- data/doc/classes/Dnsruby/DNS.src/M000205.html +17 -6
- data/doc/classes/Dnsruby/DecodeError.html +11 -0
- data/doc/classes/Dnsruby/EncodeError.html +11 -0
- data/doc/classes/Dnsruby/FormErr.html +6 -0
- data/doc/classes/Dnsruby/Header.html +51 -66
- data/doc/classes/Dnsruby/Header.src/{M000196.html → M000167.html} +1 -1
- data/doc/classes/Dnsruby/Header.src/M000168.html +4 -21
- data/doc/classes/Dnsruby/Header.src/M000169.html +4 -21
- data/doc/classes/Dnsruby/Header.src/M000170.html +21 -4
- data/doc/classes/Dnsruby/Header.src/M000171.html +4 -4
- data/doc/classes/Dnsruby/Header.src/M000172.html +4 -7
- data/doc/classes/Dnsruby/Header.src/M000173.html +7 -6
- data/doc/classes/Dnsruby/Header.src/M000174.html +6 -18
- data/doc/classes/Dnsruby/Header.src/M000175.html +18 -12
- data/doc/classes/Dnsruby/Header.src/M000176.html +13 -33
- data/doc/classes/Dnsruby/Header.src/M000177.html +12 -14
- data/doc/classes/Dnsruby/Header.src/M000178.html +33 -4
- data/doc/classes/Dnsruby/Header.src/M000179.html +14 -4
- data/doc/classes/Dnsruby/Header.src/M000180.html +1 -1
- data/doc/classes/Dnsruby/Hosts.html +65 -54
- data/doc/classes/Dnsruby/Hosts.src/M000144.html +6 -5
- data/doc/classes/Dnsruby/Hosts.src/M000145.html +5 -6
- data/doc/classes/Dnsruby/Hosts.src/M000146.html +6 -7
- data/doc/classes/Dnsruby/Hosts.src/M000147.html +7 -5
- data/doc/classes/Dnsruby/Hosts.src/M000148.html +4 -5
- data/doc/classes/Dnsruby/Hosts.src/M000149.html +5 -6
- data/doc/classes/Dnsruby/Hosts.src/{M000176.html → M000150.html} +1 -1
- data/doc/classes/Dnsruby/IPv4.html +28 -93
- data/doc/classes/Dnsruby/IPv4.src/M000151.html +17 -6
- data/doc/classes/Dnsruby/IPv4.src/M000152.html +5 -4
- data/doc/classes/Dnsruby/IPv4.src/M000153.html +3 -3
- data/doc/classes/Dnsruby/IPv4.src/M000154.html +3 -4
- data/doc/classes/Dnsruby/IPv4.src/M000155.html +4 -4
- data/doc/classes/Dnsruby/IPv6.html +59 -96
- data/doc/classes/Dnsruby/IPv6.src/{M000208.html → M000178.html} +2 -2
- data/doc/classes/Dnsruby/IPv6.src/{M000210.html → M000179.html} +0 -0
- data/doc/classes/Dnsruby/IPv6.src/M000180.html +6 -46
- data/doc/classes/Dnsruby/IPv6.src/M000181.html +2 -2
- data/doc/classes/Dnsruby/IPv6.src/M000182.html +7 -6
- data/doc/classes/Dnsruby/IPv6.src/M000183.html +6 -8
- data/doc/classes/Dnsruby/IPv6.src/M000184.html +4 -4
- data/doc/classes/Dnsruby/Message.html +216 -123
- data/doc/classes/Dnsruby/Message.src/M000071.html +38 -0
- data/doc/classes/Dnsruby/Message.src/M000072.html +26 -0
- data/doc/classes/Dnsruby/Message.src/M000073.html +22 -0
- data/doc/classes/Dnsruby/{Header.src/M000198.html → Message.src/M000074.html} +6 -4
- data/doc/classes/Dnsruby/{Header.src/M000197.html → Message.src/M000075.html} +6 -4
- data/doc/classes/Dnsruby/Message.src/M000076.html +6 -20
- data/doc/classes/Dnsruby/Message.src/M000077.html +6 -12
- data/doc/classes/Dnsruby/Message.src/M000078.html +6 -8
- data/doc/classes/Dnsruby/Message.src/M000079.html +9 -6
- data/doc/classes/Dnsruby/Message.src/M000080.html +16 -6
- data/doc/classes/Dnsruby/Message.src/M000081.html +6 -6
- data/doc/classes/Dnsruby/Message.src/M000082.html +4 -6
- data/doc/classes/Dnsruby/Message.src/M000083.html +40 -6
- data/doc/classes/Dnsruby/Message.src/M000084.html +10 -6
- data/doc/classes/Dnsruby/Message.src/M000085.html +29 -6
- data/doc/classes/Dnsruby/Message.src/M000086.html +32 -4
- data/doc/classes/Dnsruby/NXDomain.html +6 -0
- data/doc/classes/Dnsruby/Name.html +60 -87
- data/doc/classes/Dnsruby/Name.src/M000056.html +28 -0
- data/doc/classes/Dnsruby/Name.src/M000057.html +6 -14
- data/doc/classes/Dnsruby/Name.src/M000058.html +4 -6
- data/doc/classes/Dnsruby/Name.src/M000059.html +7 -4
- data/doc/classes/Dnsruby/Name.src/M000060.html +8 -4
- data/doc/classes/Dnsruby/Name.src/M000061.html +5 -7
- data/doc/classes/Dnsruby/Name/Label.html +45 -45
- data/doc/classes/Dnsruby/Name/Label.src/M000062.html +21 -0
- data/doc/classes/Dnsruby/Name/Label.src/{M000075.html → M000063.html} +4 -4
- data/doc/classes/Dnsruby/Name/Label.src/{M000076.html → M000064.html} +1 -1
- data/doc/classes/Dnsruby/Name/Label.src/{M000077.html → M000065.html} +1 -1
- data/doc/classes/Dnsruby/Name/Label.src/{M000078.html → M000066.html} +1 -1
- data/doc/classes/Dnsruby/Name/Label.src/M000067.html +4 -7
- data/doc/classes/Dnsruby/Name/Label.src/M000068.html +4 -4
- data/doc/classes/Dnsruby/Name/Label.src/M000069.html +4 -8
- data/doc/classes/Dnsruby/Name/Label.src/M000070.html +4 -4
- data/doc/classes/Dnsruby/NotImp.html +6 -0
- data/doc/classes/Dnsruby/OtherResolvError.html +6 -0
- data/doc/classes/Dnsruby/Question.html +53 -8
- data/doc/classes/Dnsruby/Question.src/{M000194.html → M000165.html} +1 -1
- data/doc/classes/Dnsruby/Question.src/M000166.html +4 -33
- data/doc/classes/Dnsruby/Question.src/M000167.html +4 -33
- data/doc/classes/Dnsruby/Question.src/M000168.html +18 -4
- data/doc/classes/Dnsruby/Question.src/{M000195.html → M000169.html} +1 -1
- data/doc/classes/Dnsruby/RR.html +62 -64
- data/doc/classes/Dnsruby/RR.src/M000004.html +1 -1
- data/doc/classes/Dnsruby/RR.src/M000005.html +1 -1
- data/doc/classes/Dnsruby/RR.src/M000006.html +4 -22
- data/doc/classes/Dnsruby/RR.src/M000007.html +22 -86
- data/doc/classes/Dnsruby/RR.src/M000008.html +86 -4
- data/doc/classes/Dnsruby/RR.src/M000009.html +4 -4
- data/doc/classes/Dnsruby/RR.src/M000010.html +4 -8
- data/doc/classes/Dnsruby/RR.src/M000011.html +8 -8
- data/doc/classes/Dnsruby/RR.src/M000012.html +15 -4
- data/doc/classes/Dnsruby/RR.src/M000013.html +10 -8
- data/doc/classes/Dnsruby/RR/ANY.html +1 -1
- data/doc/classes/Dnsruby/RR/CNAME.html +2 -1
- data/doc/classes/Dnsruby/RR/DomainName.html +10 -10
- data/doc/classes/Dnsruby/RR/DomainName.src/{M000051.html → M000050.html} +0 -4
- data/doc/classes/Dnsruby/RR/Generic.html +4 -27
- data/doc/classes/Dnsruby/RR/IN.html +1 -1
- data/doc/classes/Dnsruby/RR/IN/A.html +17 -16
- data/doc/classes/Dnsruby/RR/IN/A.src/{M000025.html → M000017.html} +0 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000018.html +4 -4
- data/doc/classes/Dnsruby/RR/IN/A.src/M000019.html +4 -4
- data/doc/classes/Dnsruby/RR/IN/AAAA.html +2 -1
- data/doc/classes/Dnsruby/RR/IN/SRV.html +43 -48
- data/doc/classes/Dnsruby/RR/IN/SRV.src/{M000022.html → M000014.html} +1 -1
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +11 -14
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +7 -11
- data/doc/classes/Dnsruby/RR/IN/WKS.html +5 -5
- data/doc/classes/Dnsruby/RR/IN/WKS.src/{M000021.html → M000020.html} +0 -0
- data/doc/classes/Dnsruby/RR/NS.html +2 -1
- data/doc/classes/Dnsruby/RR/NSAP.html +20 -20
- data/doc/classes/Dnsruby/RR/NSAP.src/{M000060.html → M000052.html} +0 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000053.html +4 -4
- data/doc/classes/Dnsruby/RR/NSAP.src/M000054.html +8 -5
- data/doc/classes/Dnsruby/RR/NSAP.src/M000055.html +16 -7
- data/doc/classes/Dnsruby/RR/RP.html +5 -5
- data/doc/classes/Dnsruby/RR/RP.src/{M000050.html → M000049.html} +0 -0
- data/doc/classes/Dnsruby/RR/SOA.html +6 -3
- data/doc/classes/Dnsruby/RR/SOA.src/M000039.html +1 -1
- data/doc/classes/Dnsruby/RR/SOA.src/M000040.html +1 -1
- data/doc/classes/Dnsruby/RR/TKEY.html +39 -11
- data/doc/classes/Dnsruby/RR/TKEY.src/{M000029.html → M000021.html} +1 -1
- data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +15 -5
- data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +7 -15
- data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +1 -1
- data/doc/classes/Dnsruby/RR/TSIG.html +128 -56
- data/doc/classes/Dnsruby/RR/TSIG.src/M000041.html +24 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000042.html +39 -7
- data/doc/classes/Dnsruby/RR/TSIG.src/M000043.html +110 -48
- data/doc/classes/Dnsruby/RR/TSIG.src/M000044.html +19 -20
- data/doc/classes/Dnsruby/RR/TSIG.src/M000045.html +11 -23
- data/doc/classes/Dnsruby/RR/TSIG.src/M000046.html +22 -17
- data/doc/classes/Dnsruby/RR/TSIG.src/M000047.html +7 -19
- data/doc/classes/Dnsruby/RR/TSIG.src/M000048.html +14 -7
- data/doc/classes/Dnsruby/RRSet.html +39 -39
- data/doc/classes/Dnsruby/RRSet.src/{M000187.html → M000158.html} +0 -0
- data/doc/classes/Dnsruby/RRSet.src/M000159.html +30 -4
- data/doc/classes/Dnsruby/RRSet.src/M000160.html +4 -4
- data/doc/classes/Dnsruby/RRSet.src/M000161.html +5 -29
- data/doc/classes/Dnsruby/RRSet.src/M000162.html +4 -4
- data/doc/classes/Dnsruby/RRSet.src/M000163.html +4 -6
- data/doc/classes/Dnsruby/RRSet.src/M000164.html +4 -4
- data/doc/classes/Dnsruby/Refused.html +6 -0
- data/doc/classes/Dnsruby/Resolv.html +120 -119
- data/doc/classes/Dnsruby/Resolv.src/{M000136.html → M000108.html} +1 -1
- data/doc/classes/Dnsruby/Resolv.src/M000109.html +4 -4
- data/doc/classes/Dnsruby/Resolv.src/M000110.html +4 -4
- data/doc/classes/Dnsruby/Resolv.src/M000111.html +4 -4
- data/doc/classes/Dnsruby/Resolv.src/M000112.html +4 -4
- data/doc/classes/Dnsruby/Resolv.src/M000113.html +4 -4
- data/doc/classes/Dnsruby/Resolv.src/M000114.html +4 -4
- data/doc/classes/Dnsruby/Resolv.src/M000115.html +5 -4
- data/doc/classes/Dnsruby/Resolv.src/M000116.html +6 -5
- data/doc/classes/Dnsruby/Resolv.src/M000117.html +15 -6
- data/doc/classes/Dnsruby/Resolv.src/M000118.html +5 -15
- data/doc/classes/Dnsruby/Resolv.src/M000119.html +6 -5
- data/doc/classes/Dnsruby/Resolv.src/M000120.html +11 -6
- data/doc/classes/Dnsruby/ResolvError.html +6 -0
- data/doc/classes/Dnsruby/ResolvTimeout.html +6 -0
- data/doc/classes/Dnsruby/Resolver.html +292 -179
- data/doc/classes/Dnsruby/Resolver.src/{M000239.html → M000203.html} +1 -1
- data/doc/classes/Dnsruby/Resolver.src/{M000240.html → M000204.html} +2 -2
- data/doc/classes/Dnsruby/Resolver.src/{M000241.html → M000205.html} +1 -1
- data/doc/classes/Dnsruby/{SingleResolver.src/M000153.html → Resolver.src/M000206.html} +2 -2
- data/doc/classes/Dnsruby/{SingleResolver.src/M000154.html → Resolver.src/M000207.html} +8 -6
- data/doc/classes/Dnsruby/Resolver.src/M000208.html +28 -0
- data/doc/classes/Dnsruby/Resolver.src/{M000242.html → M000209.html} +1 -1
- data/doc/classes/Dnsruby/Resolver.src/{M000243.html → M000210.html} +5 -2
- data/doc/classes/Dnsruby/Resolver.src/M000211.html +7 -7
- data/doc/classes/Dnsruby/Resolver.src/M000212.html +8 -7
- data/doc/classes/Dnsruby/Resolver.src/M000213.html +4 -13
- data/doc/classes/Dnsruby/Resolver.src/M000214.html +6 -14
- data/doc/classes/Dnsruby/Resolver.src/M000215.html +5 -4
- data/doc/classes/Dnsruby/Resolver.src/M000216.html +4 -33
- data/doc/classes/Dnsruby/Resolver.src/M000217.html +5 -7
- data/doc/classes/Dnsruby/Resolver.src/M000218.html +5 -8
- data/doc/classes/Dnsruby/Resolver.src/M000219.html +5 -4
- data/doc/classes/Dnsruby/Resolver.src/M000220.html +5 -6
- data/doc/classes/Dnsruby/Resolver.src/M000221.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000222.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000223.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000224.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000225.html +4 -4
- data/doc/classes/Dnsruby/Resolver.src/M000226.html +12 -5
- data/doc/classes/Dnsruby/Resolver.src/M000227.html +4 -5
- data/doc/classes/Dnsruby/Resolver.src/M000228.html +9 -5
- data/doc/classes/Dnsruby/Resolver.src/M000229.html +4 -5
- data/doc/classes/Dnsruby/ServFail.html +6 -0
- data/doc/classes/Dnsruby/SingleResolver.html +182 -77
- data/doc/classes/Dnsruby/SingleResolver.src/{M000149.html → M000121.html} +4 -4
- data/doc/classes/Dnsruby/SingleResolver.src/M000122.html +22 -4
- data/doc/classes/Dnsruby/SingleResolver.src/M000123.html +4 -5
- data/doc/classes/Dnsruby/SingleResolver.src/M000124.html +5 -35
- data/doc/classes/Dnsruby/SingleResolver.src/M000125.html +36 -4
- data/doc/classes/Dnsruby/SingleResolver.src/M000126.html +4 -7
- data/doc/classes/Dnsruby/SingleResolver.src/M000127.html +7 -11
- data/doc/classes/Dnsruby/SingleResolver.src/M000128.html +9 -35
- data/doc/classes/Dnsruby/SingleResolver.src/M000129.html +39 -11
- data/doc/classes/Dnsruby/SingleResolver.src/M000130.html +13 -7
- data/doc/classes/Dnsruby/SingleResolver.src/M000131.html +35 -0
- data/doc/classes/Dnsruby/SingleResolver.src/{M000157.html → M000132.html} +1 -1
- data/doc/classes/Dnsruby/TheLog.html +17 -17
- data/doc/classes/Dnsruby/TheLog.src/{M000188.html → M000182.html} +0 -0
- data/doc/classes/Dnsruby/TheLog.src/{M000190.html → M000183.html} +0 -0
- data/doc/classes/Dnsruby/TheLog.src/{M000191.html → M000184.html} +0 -0
- data/doc/classes/Dnsruby/TheLog.src/{M000189.html → M000185.html} +0 -0
- data/doc/classes/Dnsruby/TheLog.src/{M000217.html → M000186.html} +0 -0
- data/doc/classes/Dnsruby/TheLog.src/{M000218.html → M000187.html} +0 -0
- data/doc/classes/Dnsruby/Update.html +34 -34
- data/doc/classes/Dnsruby/Update.src/{M000219.html → M000185.html} +0 -0
- data/doc/classes/Dnsruby/Update.src/{M000193.html → M000186.html} +0 -1
- data/doc/classes/Dnsruby/Update.src/{M000194.html → M000187.html} +1 -1
- data/doc/classes/Dnsruby/Update.src/M000188.html +32 -0
- data/doc/classes/Dnsruby/Update.src/{M000220.html → M000189.html} +0 -1
- data/doc/classes/Dnsruby/Update.src/{M000221.html → M000190.html} +1 -1
- data/doc/classes/Dnsruby/Update.src/M000191.html +26 -17
- data/doc/classes/Dnsruby/Update.src/M000192.html +19 -17
- data/doc/classes/Dnsruby/ZoneTransfer.html +65 -13
- data/doc/classes/Dnsruby/{CodeMapper.src/M000163.html → ZoneTransfer.src/M000092.html} +4 -4
- data/doc/classes/Dnsruby/ZoneTransfer.src/{M000095.html → M000093.html} +3 -1
- data/doc/classes/Dnsruby/ZoneTransfer.src/{M000103.html → M000094.html} +1 -1
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +22 -5
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/{M000104.html → M000095.html} +1 -1
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000096.html +19 -0
- data/doc/created.rid +1 -1
- data/doc/files/lib/Dnsruby/Config_rb.html +1 -1
- data/doc/files/lib/Dnsruby/DNSSEC_rb.html +1 -1
- data/doc/files/lib/Dnsruby/DNS_rb.html +1 -1
- data/doc/files/lib/Dnsruby/Hosts_rb.html +1 -1
- data/doc/files/lib/Dnsruby/Resolver_rb.html +1 -1
- data/doc/files/lib/Dnsruby/SingleResolver_rb.html +1 -1
- data/doc/files/lib/Dnsruby/TheLog_rb.html +1 -1
- data/doc/files/lib/Dnsruby/code_mapper_rb.html +1 -1
- data/doc/files/lib/Dnsruby/event_machine_interface_rb.html +1 -1
- data/doc/files/lib/Dnsruby/ipv4_rb.html +1 -1
- data/doc/files/lib/Dnsruby/ipv6_rb.html +1 -1
- data/doc/files/lib/Dnsruby/message_rb.html +1 -1
- data/doc/files/lib/Dnsruby/name_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/A_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/CERT_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/IN_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/LOC_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/MX_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/OPT_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/PX_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/RP_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/RT_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/SOA_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/SPF_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/SRV_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/TXT_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/X25_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/generic_rb.html +1 -1
- data/doc/files/lib/Dnsruby/resource/resource_rb.html +1 -1
- data/doc/files/lib/Dnsruby/select_thread_rb.html +1 -1
- data/doc/files/lib/Dnsruby/update_rb.html +1 -1
- data/doc/files/lib/Dnsruby/zone_transfer_rb.html +1 -1
- data/doc/files/lib/dnsruby_rb.html +1 -1
- data/doc/fr_class_index.html +0 -2
- data/doc/fr_method_index.html +207 -213
- data/doc/index.html +1 -1
- data/lib/Dnsruby/Config.rb +11 -5
- data/lib/Dnsruby/DNS.rb +97 -50
- data/lib/Dnsruby/Hosts.rb +9 -2
- data/lib/Dnsruby/Resolver.rb +116 -31
- data/lib/Dnsruby/SingleResolver.rb +131 -75
- data/lib/Dnsruby/TheLog.rb +1 -2
- data/lib/Dnsruby/event_machine_interface.rb +9 -9
- data/lib/Dnsruby/ipv4.rb +6 -15
- data/lib/Dnsruby/ipv6.rb +23 -21
- data/lib/Dnsruby/message.rb +141 -56
- data/lib/Dnsruby/name.rb +15 -7
- data/lib/Dnsruby/resource/A.rb +1 -1
- data/lib/Dnsruby/resource/AAAA.rb +1 -1
- data/lib/Dnsruby/resource/IN.rb +5 -5
- data/lib/Dnsruby/resource/MINFO.rb +6 -2
- data/lib/Dnsruby/resource/OPT.rb +76 -19
- data/lib/Dnsruby/resource/SOA.rb +6 -0
- data/lib/Dnsruby/resource/SRV.rb +25 -21
- data/lib/Dnsruby/resource/TKEY.rb +14 -6
- data/lib/Dnsruby/resource/TSIG.rb +367 -120
- data/lib/Dnsruby/resource/domain_name.rb +1 -5
- data/lib/Dnsruby/resource/generic.rb +5 -2
- data/lib/Dnsruby/resource/resource.rb +35 -17
- data/lib/Dnsruby/select_thread.rb +33 -26
- data/lib/Dnsruby/update.rb +3 -4
- data/lib/Dnsruby/zone_transfer.rb +46 -12
- data/lib/dnsruby.rb +56 -44
- data/test/tc_axfr.rb +45 -7
- data/test/tc_dns.rb +1 -2
- data/test/tc_em_deferrable.rb +7 -16
- data/test/tc_escapedchars.rb +5 -21
- data/test/tc_event_machine_deferrable.rb +1 -1
- data/test/tc_event_machine_res.rb +1 -1
- data/test/tc_event_machine_single_res.rb +4 -4
- data/test/tc_event_machine_soak.rb +1 -1
- data/test/tc_packet_unique_push.rb +1 -1
- data/test/tc_question.rb +16 -17
- data/test/tc_res_config.rb +1 -1
- data/test/tc_res_opt.rb +4 -0
- data/test/tc_resolver.rb +0 -1
- data/test/tc_rr-opt.rb +45 -6
- data/test/tc_single_resolver.rb +1 -3
- data/test/tc_soak.rb +1 -5
- data/test/tc_soak_base.rb +1 -1
- data/test/tc_tcp.rb +1 -1
- data/test/tc_tkey.rb +1 -32
- data/test/tc_tsig.rb +196 -0
- data/test/ts_offline.rb +3 -2
- data/test/ts_online.rb +59 -14
- metadata +69 -318
- data/doc/classes/Dnsruby/Classes.src/M000159.html +0 -19
- data/doc/classes/Dnsruby/Classes.src/M000185.html +0 -23
- data/doc/classes/Dnsruby/Classes.src/M000186.html +0 -19
- data/doc/classes/Dnsruby/CodeMapper.src/M000130.html +0 -18
- data/doc/classes/Dnsruby/CodeMapper.src/M000131.html +0 -18
- data/doc/classes/Dnsruby/CodeMapper.src/M000132.html +0 -33
- data/doc/classes/Dnsruby/CodeMapper.src/M000158.html +0 -18
- data/doc/classes/Dnsruby/CodeMapper.src/M000159.html +0 -33
- data/doc/classes/Dnsruby/CodeMapper.src/M000160.html +0 -21
- data/doc/classes/Dnsruby/CodeMapper.src/M000161.html +0 -19
- data/doc/classes/Dnsruby/CodeMapper.src/M000162.html +0 -19
- data/doc/classes/Dnsruby/CodeMapper.src/M000164.html +0 -22
- data/doc/classes/Dnsruby/CodeMapper.src/M000165.html +0 -22
- data/doc/classes/Dnsruby/CodeMapper.src/M000166.html +0 -22
- data/doc/classes/Dnsruby/Config.src/M000108.html +0 -21
- data/doc/classes/Dnsruby/Config.src/M000126.html +0 -19
- data/doc/classes/Dnsruby/Config.src/M000127.html +0 -19
- data/doc/classes/Dnsruby/Config.src/M000128.html +0 -21
- data/doc/classes/Dnsruby/Config.src/M000129.html +0 -21
- data/doc/classes/Dnsruby/Config.src/M000130.html +0 -38
- data/doc/classes/Dnsruby/Config.src/M000131.html +0 -26
- data/doc/classes/Dnsruby/Config.src/M000132.html +0 -22
- data/doc/classes/Dnsruby/Config.src/M000133.html +0 -27
- data/doc/classes/Dnsruby/Config.src/M000134.html +0 -22
- data/doc/classes/Dnsruby/Config.src/M000135.html +0 -21
- data/doc/classes/Dnsruby/DNS.src/M000206.html +0 -28
- data/doc/classes/Dnsruby/DNS.src/M000207.html +0 -19
- data/doc/classes/Dnsruby/DNS.src/M000208.html +0 -20
- data/doc/classes/Dnsruby/DNS.src/M000209.html +0 -41
- data/doc/classes/Dnsruby/DNS.src/M000210.html +0 -32
- data/doc/classes/Dnsruby/DNS.src/M000211.html +0 -50
- data/doc/classes/Dnsruby/DNS.src/M000227.html +0 -20
- data/doc/classes/Dnsruby/DNS.src/M000228.html +0 -19
- data/doc/classes/Dnsruby/DNS.src/M000229.html +0 -20
- data/doc/classes/Dnsruby/DNS.src/M000230.html +0 -18
- data/doc/classes/Dnsruby/DNS.src/M000231.html +0 -19
- data/doc/classes/Dnsruby/DNS.src/M000232.html +0 -20
- data/doc/classes/Dnsruby/DNS.src/M000233.html +0 -28
- data/doc/classes/Dnsruby/DNS.src/M000234.html +0 -19
- data/doc/classes/Dnsruby/DNS.src/M000235.html +0 -20
- data/doc/classes/Dnsruby/DNS.src/M000236.html +0 -41
- data/doc/classes/Dnsruby/DNS.src/M000237.html +0 -32
- data/doc/classes/Dnsruby/DNS.src/M000238.html +0 -50
- data/doc/classes/Dnsruby/DNS/DecodeError.html +0 -111
- data/doc/classes/Dnsruby/DNS/EncodeError.html +0 -111
- data/doc/classes/Dnsruby/EventMachineInterface.html +0 -327
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000105.html +0 -32
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000106.html +0 -25
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000107.html +0 -29
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000108.html +0 -21
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000109.html +0 -35
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000110.html +0 -19
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000111.html +0 -23
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000112.html +0 -18
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000113.html +0 -28
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000114.html +0 -41
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000115.html +0 -28
- data/doc/classes/Dnsruby/EventMachineInterface.src/M000116.html +0 -24
- data/doc/classes/Dnsruby/EventMachineInterface/EmTcpHandler.html +0 -154
- data/doc/classes/Dnsruby/EventMachineInterface/EmTcpHandler.src/M000123.html +0 -20
- data/doc/classes/Dnsruby/EventMachineInterface/EmTcpHandler.src/M000124.html +0 -32
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.html +0 -237
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000117.html +0 -18
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000118.html +0 -19
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000119.html +0 -35
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000120.html +0 -30
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000121.html +0 -19
- data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000122.html +0 -23
- data/doc/classes/Dnsruby/Header.src/M000199.html +0 -21
- data/doc/classes/Dnsruby/Header.src/M000200.html +0 -20
- data/doc/classes/Dnsruby/Header.src/M000201.html +0 -32
- data/doc/classes/Dnsruby/Header.src/M000202.html +0 -26
- data/doc/classes/Dnsruby/Header.src/M000203.html +0 -47
- data/doc/classes/Dnsruby/Header.src/M000204.html +0 -28
- data/doc/classes/Dnsruby/Header.src/M000205.html +0 -18
- data/doc/classes/Dnsruby/Header.src/M000206.html +0 -18
- data/doc/classes/Dnsruby/Header.src/M000207.html +0 -30
- data/doc/classes/Dnsruby/Hosts.src/M000141.html +0 -20
- data/doc/classes/Dnsruby/Hosts.src/M000142.html +0 -20
- data/doc/classes/Dnsruby/Hosts.src/M000143.html +0 -49
- data/doc/classes/Dnsruby/Hosts.src/M000169.html +0 -20
- data/doc/classes/Dnsruby/Hosts.src/M000170.html +0 -49
- data/doc/classes/Dnsruby/Hosts.src/M000171.html +0 -19
- data/doc/classes/Dnsruby/Hosts.src/M000172.html +0 -20
- data/doc/classes/Dnsruby/Hosts.src/M000173.html +0 -21
- data/doc/classes/Dnsruby/Hosts.src/M000174.html +0 -19
- data/doc/classes/Dnsruby/Hosts.src/M000175.html +0 -20
- data/doc/classes/Dnsruby/IPv4.src/M000149.html +0 -32
- data/doc/classes/Dnsruby/IPv4.src/M000150.html +0 -32
- data/doc/classes/Dnsruby/IPv4.src/M000157.html +0 -18
- data/doc/classes/Dnsruby/IPv4.src/M000177.html +0 -32
- data/doc/classes/Dnsruby/IPv4.src/M000178.html +0 -21
- data/doc/classes/Dnsruby/IPv4.src/M000179.html +0 -18
- data/doc/classes/Dnsruby/IPv4.src/M000180.html +0 -18
- data/doc/classes/Dnsruby/IPv4.src/M000181.html +0 -19
- data/doc/classes/Dnsruby/IPv4.src/M000182.html +0 -18
- data/doc/classes/Dnsruby/IPv4.src/M000183.html +0 -18
- data/doc/classes/Dnsruby/IPv4.src/M000184.html +0 -18
- data/doc/classes/Dnsruby/IPv6.src/M000185.html +0 -21
- data/doc/classes/Dnsruby/IPv6.src/M000186.html +0 -18
- data/doc/classes/Dnsruby/IPv6.src/M000187.html +0 -18
- data/doc/classes/Dnsruby/IPv6.src/M000188.html +0 -18
- data/doc/classes/Dnsruby/IPv6.src/M000209.html +0 -21
- data/doc/classes/Dnsruby/IPv6.src/M000211.html +0 -18
- data/doc/classes/Dnsruby/IPv6.src/M000212.html +0 -21
- data/doc/classes/Dnsruby/IPv6.src/M000213.html +0 -18
- data/doc/classes/Dnsruby/IPv6.src/M000214.html +0 -18
- data/doc/classes/Dnsruby/IPv6.src/M000215.html +0 -18
- data/doc/classes/Dnsruby/Message.src/M000087.html +0 -54
- data/doc/classes/Dnsruby/Message.src/M000088.html +0 -42
- data/doc/classes/Dnsruby/Message.src/M000089.html +0 -45
- data/doc/classes/Dnsruby/Message.src/M000090.html +0 -20
- data/doc/classes/Dnsruby/Message.src/M000091.html +0 -21
- data/doc/classes/Dnsruby/Message.src/M000092.html +0 -20
- data/doc/classes/Dnsruby/Message.src/M000093.html +0 -18
- data/doc/classes/Dnsruby/Message.src/M000094.html +0 -54
- data/doc/classes/Dnsruby/Message.src/M000095.html +0 -42
- data/doc/classes/Dnsruby/Message.src/M000096.html +0 -45
- data/doc/classes/Dnsruby/Name.src/M000062.html +0 -19
- data/doc/classes/Dnsruby/Name.src/M000064.html +0 -22
- data/doc/classes/Dnsruby/Name.src/M000065.html +0 -18
- data/doc/classes/Dnsruby/Name.src/M000066.html +0 -20
- data/doc/classes/Dnsruby/Name.src/M000067.html +0 -18
- data/doc/classes/Dnsruby/Name.src/M000068.html +0 -21
- data/doc/classes/Dnsruby/Name.src/M000069.html +0 -19
- data/doc/classes/Dnsruby/Name.src/M000071.html +0 -22
- data/doc/classes/Dnsruby/Name.src/M000072.html +0 -18
- data/doc/classes/Dnsruby/Name.src/M000073.html +0 -20
- data/doc/classes/Dnsruby/Name/Label.src/M000071.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000072.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000073.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000074.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000079.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000080.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000081.html +0 -18
- data/doc/classes/Dnsruby/Name/Label.src/M000082.html +0 -18
- data/doc/classes/Dnsruby/RR.src/M000014.html +0 -24
- data/doc/classes/Dnsruby/RR.src/M000015.html +0 -18
- data/doc/classes/Dnsruby/RR.src/M000016.html +0 -18
- data/doc/classes/Dnsruby/RR.src/M000017.html +0 -22
- data/doc/classes/Dnsruby/RR.src/M000018.html +0 -22
- data/doc/classes/Dnsruby/RR.src/M000019.html +0 -18
- data/doc/classes/Dnsruby/RR.src/M000020.html +0 -22
- data/doc/classes/Dnsruby/RR.src/M000021.html +0 -24
- data/doc/classes/Dnsruby/RR/DomainName.src/M000058.html +0 -22
- data/doc/classes/Dnsruby/RR/Generic.src/M000041.html +0 -25
- data/doc/classes/Dnsruby/RR/Generic.src/M000048.html +0 -25
- data/doc/classes/Dnsruby/RR/IN/A.src/M000020.html +0 -18
- data/doc/classes/Dnsruby/RR/IN/A.src/M000026.html +0 -18
- data/doc/classes/Dnsruby/RR/IN/A.src/M000027.html +0 -18
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000017.html +0 -22
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000023.html +0 -26
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000024.html +0 -22
- data/doc/classes/Dnsruby/RR/IN/WKS.src/M000028.html +0 -20
- data/doc/classes/Dnsruby/RR/LOC.src/M000032.html +0 -32
- data/doc/classes/Dnsruby/RR/LOC.src/M000033.html +0 -23
- data/doc/classes/Dnsruby/RR/LOC.src/M000034.html +0 -25
- data/doc/classes/Dnsruby/RR/LOC.src/M000035.html +0 -21
- data/doc/classes/Dnsruby/RR/LOC.src/M000036.html +0 -20
- data/doc/classes/Dnsruby/RR/LOC.src/M000037.html +0 -23
- data/doc/classes/Dnsruby/RR/NSAP.src/M000056.html +0 -31
- data/doc/classes/Dnsruby/RR/NSAP.src/M000061.html +0 -19
- data/doc/classes/Dnsruby/RR/NSAP.src/M000062.html +0 -22
- data/doc/classes/Dnsruby/RR/NSAP.src/M000063.html +0 -31
- data/doc/classes/Dnsruby/RR/RP.src/M000057.html +0 -19
- data/doc/classes/Dnsruby/RR/SOA.src/M000046.html +0 -24
- data/doc/classes/Dnsruby/RR/SOA.src/M000047.html +0 -27
- data/doc/classes/Dnsruby/RR/TKEY.src/M000030.html +0 -29
- data/doc/classes/Dnsruby/RR/TKEY.src/M000031.html +0 -30
- data/doc/classes/Dnsruby/RR/TSIG.src/M000049.html +0 -29
- data/doc/classes/Dnsruby/RR/TSIG.src/M000050.html +0 -71
- data/doc/classes/Dnsruby/RR/TSIG.src/M000051.html +0 -34
- data/doc/classes/Dnsruby/RR/TSIG.src/M000052.html +0 -37
- data/doc/classes/Dnsruby/RR/TSIG.src/M000053.html +0 -31
- data/doc/classes/Dnsruby/RR/TSIG.src/M000054.html +0 -34
- data/doc/classes/Dnsruby/RR/TSIG.src/M000055.html +0 -22
- data/doc/classes/Dnsruby/RR/TSIG.src/M000056.html +0 -29
- data/doc/classes/Dnsruby/RR/TXT.src/M000041.html +0 -18
- data/doc/classes/Dnsruby/RR/TXT.src/M000042.html +0 -18
- data/doc/classes/Dnsruby/RR/TXT.src/M000043.html +0 -20
- data/doc/classes/Dnsruby/RR/TXT.src/M000044.html +0 -27
- data/doc/classes/Dnsruby/RR/TXT.src/M000045.html +0 -25
- data/doc/classes/Dnsruby/RR/X25.src/M000038.html +0 -18
- data/doc/classes/Dnsruby/RR/X25.src/M000039.html +0 -18
- data/doc/classes/Dnsruby/RR/X25.src/M000040.html +0 -22
- data/doc/classes/Dnsruby/RRSet.src/M000165.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000166.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000188.html +0 -44
- data/doc/classes/Dnsruby/RRSet.src/M000189.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000190.html +0 -20
- data/doc/classes/Dnsruby/RRSet.src/M000191.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000192.html +0 -18
- data/doc/classes/Dnsruby/RRSet.src/M000193.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000121.html +0 -25
- data/doc/classes/Dnsruby/Resolv.src/M000137.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000138.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000139.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000140.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000141.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000142.html +0 -18
- data/doc/classes/Dnsruby/Resolv.src/M000143.html +0 -19
- data/doc/classes/Dnsruby/Resolv.src/M000144.html +0 -20
- data/doc/classes/Dnsruby/Resolv.src/M000145.html +0 -29
- data/doc/classes/Dnsruby/Resolv.src/M000146.html +0 -19
- data/doc/classes/Dnsruby/Resolv.src/M000147.html +0 -20
- data/doc/classes/Dnsruby/Resolv.src/M000148.html +0 -25
- data/doc/classes/Dnsruby/Resolver.src/M000230.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000231.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000232.html +0 -26
- data/doc/classes/Dnsruby/Resolver.src/M000233.html +0 -18
- data/doc/classes/Dnsruby/Resolver.src/M000234.html +0 -23
- data/doc/classes/Dnsruby/Resolver.src/M000235.html +0 -18
- data/doc/classes/Dnsruby/Resolver.src/M000236.html +0 -42
- data/doc/classes/Dnsruby/Resolver.src/M000244.html +0 -21
- data/doc/classes/Dnsruby/Resolver.src/M000245.html +0 -22
- data/doc/classes/Dnsruby/Resolver.src/M000246.html +0 -18
- data/doc/classes/Dnsruby/Resolver.src/M000247.html +0 -20
- data/doc/classes/Dnsruby/Resolver.src/M000248.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000249.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000250.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000251.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000252.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000253.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000254.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000255.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000256.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000257.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000258.html +0 -19
- data/doc/classes/Dnsruby/Resolver.src/M000259.html +0 -26
- data/doc/classes/Dnsruby/Resolver.src/M000260.html +0 -18
- data/doc/classes/Dnsruby/Resolver.src/M000261.html +0 -23
- data/doc/classes/Dnsruby/Resolver.src/M000262.html +0 -18
- data/doc/classes/Dnsruby/Resolver.src/M000263.html +0 -42
- data/doc/classes/Dnsruby/SelectInterface.html +0 -236
- data/doc/classes/Dnsruby/SelectInterface.src/M000001.html +0 -19
- data/doc/classes/Dnsruby/SelectInterface.src/M000002.html +0 -18
- data/doc/classes/Dnsruby/SelectInterface.src/M000003.html +0 -18
- data/doc/classes/Dnsruby/SelectInterface.src/M000004.html +0 -18
- data/doc/classes/Dnsruby/SelectInterface.src/M000005.html +0 -21
- data/doc/classes/Dnsruby/SelectInterface.src/M000006.html +0 -19
- data/doc/classes/Dnsruby/SelectInterface.src/M000007.html +0 -18
- data/doc/classes/Dnsruby/SingleResolver.src/M000150.html +0 -19
- data/doc/classes/Dnsruby/SingleResolver.src/M000151.html +0 -49
- data/doc/classes/Dnsruby/SingleResolver.src/M000155.html +0 -51
- data/doc/classes/Dnsruby/SingleResolver.src/M000156.html +0 -26
- data/doc/classes/Dnsruby/TheLog.src/M000216.html +0 -20
- data/doc/classes/Dnsruby/Update.src/M000195.html +0 -41
- data/doc/classes/Dnsruby/Update.src/M000196.html +0 -34
- data/doc/classes/Dnsruby/Update.src/M000222.html +0 -41
- data/doc/classes/Dnsruby/Update.src/M000223.html +0 -34
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000096.html +0 -35
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000102.html +0 -22
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000097.html +0 -19
- data/doc/files/lib/Dnsruby/SelectInterface_rb.html +0 -108
data/lib/Dnsruby/name.rb
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
module Dnsruby
|
|
17
17
|
#== Dnsruby::Name class
|
|
18
18
|
#
|
|
19
|
+
#A representation of a DNS name
|
|
19
20
|
#(RFC1035, section 3.1)
|
|
20
21
|
#
|
|
21
22
|
#== methods
|
|
@@ -34,6 +35,10 @@ module Dnsruby
|
|
|
34
35
|
# When a Name is unencoded, each label is unencoded, and added to the Name collection of labels.
|
|
35
36
|
# When a Name is made from a string, the Name is split into Labels.
|
|
36
37
|
#++
|
|
38
|
+
#Creates a new Dnsruby::Name from +arg+. +arg+ can be :
|
|
39
|
+
#
|
|
40
|
+
#* Name:: returns +arg+
|
|
41
|
+
#* String:: returns a new Name
|
|
37
42
|
def self.create(arg)
|
|
38
43
|
case arg
|
|
39
44
|
when Name
|
|
@@ -78,10 +83,11 @@ module Dnsruby
|
|
|
78
83
|
return Name.create(labels)
|
|
79
84
|
end
|
|
80
85
|
|
|
81
|
-
def inspect
|
|
86
|
+
def inspect # :nodoc:
|
|
82
87
|
"#<#{self.class}: #{self.to_s}#{@absolute ? '.' : ''}>"
|
|
83
88
|
end
|
|
84
89
|
|
|
90
|
+
#Returns true if this Name is absolute
|
|
85
91
|
def absolute?
|
|
86
92
|
return @absolute
|
|
87
93
|
end
|
|
@@ -93,14 +99,15 @@ module Dnsruby
|
|
|
93
99
|
end
|
|
94
100
|
return (labels[0].string == '*')
|
|
95
101
|
end
|
|
96
|
-
|
|
97
|
-
def ==(other)
|
|
102
|
+
|
|
103
|
+
def ==(other) # :nodoc:
|
|
98
104
|
return false unless Name === other
|
|
99
105
|
return @labels == other.labels && @absolute == other.absolute?
|
|
100
106
|
end
|
|
101
|
-
alias eql? ==
|
|
107
|
+
alias eql? == # :nodoc:
|
|
102
108
|
|
|
103
|
-
#
|
|
109
|
+
# Tests subdomain-of relation : returns true if this name
|
|
110
|
+
# is a subdomain of +other+.
|
|
104
111
|
#
|
|
105
112
|
# domain = Resolv::Name.create("y.z")
|
|
106
113
|
# p Resolv::Name.create("w.x.y.z").subdomain_of?(domain) #=> true
|
|
@@ -118,7 +125,7 @@ module Dnsruby
|
|
|
118
125
|
return @labels[-other_len, other_len] == other.to_a
|
|
119
126
|
end
|
|
120
127
|
|
|
121
|
-
def hash
|
|
128
|
+
def hash # :nodoc:
|
|
122
129
|
return @labels.hash ^ @absolute.hash
|
|
123
130
|
end
|
|
124
131
|
|
|
@@ -138,12 +145,13 @@ module Dnsruby
|
|
|
138
145
|
#
|
|
139
146
|
# The domain name doesn't have a trailing dot even if the name object is
|
|
140
147
|
# absolute.
|
|
148
|
+
#
|
|
149
|
+
# Example :
|
|
141
150
|
#
|
|
142
151
|
# p Resolv::Name.create("x.y.z.").to_s #=> "x.y.z"
|
|
143
152
|
# p Resolv::Name.create("x.y.z").to_s #=> "x.y.z"
|
|
144
153
|
#
|
|
145
154
|
def to_s
|
|
146
|
-
# @todo@ Need to think about escaped characters here?
|
|
147
155
|
return @labels.collect{|l| (l.kind_of?String) ? l : l.string}.join('.')
|
|
148
156
|
|
|
149
157
|
end
|
data/lib/Dnsruby/resource/A.rb
CHANGED
data/lib/Dnsruby/resource/IN.rb
CHANGED
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
module Dnsruby
|
|
17
17
|
class RR
|
|
18
18
|
ClassInsensitiveTypes = [
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
NS, CNAME, DNAME, SOA, PTR, HINFO, MINFO, MX, TXT,
|
|
20
|
+
ISDN, MB, MG, MR, NAPTR, NSAP, OPT, RP, RT, X25,
|
|
21
|
+
SPF, CERT, LOC, TSIG, TKEY, ANY
|
|
22
22
|
] #:nodoc: all
|
|
23
23
|
|
|
24
|
-
# ARPA Internet specific RRs
|
|
24
|
+
# module IN contains ARPA Internet specific RRs
|
|
25
25
|
module IN
|
|
26
26
|
ClassValue = Classes.IN.code
|
|
27
27
|
|
|
@@ -34,7 +34,7 @@ module Dnsruby
|
|
|
34
34
|
self.const_set(s.name.sub(/.*::/, ''), c)
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
# RFC 1035, Section 3.4.2 (deprecated)
|
|
37
|
+
# RFC 1035, Section 3.4.2 (deprecated)
|
|
38
38
|
class WKS < RR
|
|
39
39
|
ClassHash[[TypeValue = Types::WKS, ClassValue = ClassValue]] = self #:nodoc: all
|
|
40
40
|
|
|
@@ -27,8 +27,12 @@ module Dnsruby
|
|
|
27
27
|
attr_accessor :emailbx
|
|
28
28
|
|
|
29
29
|
def from_hash(hash) #:nodoc: all
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
if (hash[:rmailbx])
|
|
31
|
+
@rmailbx = Name.create(hash[:rmailbx])
|
|
32
|
+
end
|
|
33
|
+
if (hash[:emailbx])
|
|
34
|
+
@emailbx = Name.create(hash[:emailbx])
|
|
35
|
+
end
|
|
32
36
|
end
|
|
33
37
|
|
|
34
38
|
def from_data(data) #:nodoc: all
|
data/lib/Dnsruby/resource/OPT.rb
CHANGED
|
@@ -18,11 +18,38 @@ module Dnsruby
|
|
|
18
18
|
#Class for EDNS pseudo resource record OPT.
|
|
19
19
|
#This class is effectively internal to Dnsruby
|
|
20
20
|
#See RFC 2671, RFC 2435 Section 3
|
|
21
|
+
# @TODO@ Extended labels RFC2671 section 3
|
|
21
22
|
class OPT < RR #:nodoc: all
|
|
22
23
|
ClassValue = nil #:nodoc: all
|
|
23
24
|
TypeValue = Types::OPT #:nodoc: all
|
|
24
25
|
DO_BIT = 0x8000
|
|
25
|
-
|
|
26
|
+
|
|
27
|
+
#Can be called with up to 3 arguments, none of which must be present
|
|
28
|
+
#* OPT.new()
|
|
29
|
+
#* OPT.new(size)
|
|
30
|
+
#* OPT.new(size,flags)
|
|
31
|
+
#* OPT.new(size,flags,options)
|
|
32
|
+
def initialize(*args)
|
|
33
|
+
@type = Types.new('OPT')
|
|
34
|
+
@ttl = nil
|
|
35
|
+
|
|
36
|
+
@options=nil
|
|
37
|
+
if (args.length > 0)
|
|
38
|
+
self.payloadsize=(args[0])
|
|
39
|
+
if (args.length > 1)
|
|
40
|
+
self.flags=(args[1])
|
|
41
|
+
if (args.length > 2)
|
|
42
|
+
self.options=(args[2])
|
|
43
|
+
else
|
|
44
|
+
self.options=nil
|
|
45
|
+
end
|
|
46
|
+
else
|
|
47
|
+
self.flags=0
|
|
48
|
+
end
|
|
49
|
+
else
|
|
50
|
+
self.payloadsize=0
|
|
51
|
+
end
|
|
52
|
+
end
|
|
26
53
|
|
|
27
54
|
# From RFC 2671 :
|
|
28
55
|
# 4.3. The fixed part of an OPT RR is structured as follows:
|
|
@@ -36,6 +63,24 @@ module Dnsruby
|
|
|
36
63
|
# RDLEN u_int16_t describes RDATA
|
|
37
64
|
# RDATA octet stream {attribute,value} pairs
|
|
38
65
|
|
|
66
|
+
#4.6. The extended RCODE and flags (which OPT stores in the RR TTL field)
|
|
67
|
+
#are structured as follows:
|
|
68
|
+
#
|
|
69
|
+
# +0 (MSB) +1 (LSB)
|
|
70
|
+
# +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
|
71
|
+
# 0: | EXTENDED-RCODE | VERSION |
|
|
72
|
+
# +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
|
73
|
+
# 2: | Z |
|
|
74
|
+
# +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
|
75
|
+
#
|
|
76
|
+
# EXTENDED-RCODE Forms upper 8 bits of extended 12-bit RCODE. Note
|
|
77
|
+
# that EXTENDED-RCODE value "0" indicates that an
|
|
78
|
+
# unextended RCODE is in use (values "0" through "15").
|
|
79
|
+
#
|
|
80
|
+
# VERSION Indicates the implementation level of whoever sets
|
|
81
|
+
# it. Full conformance with this specification is
|
|
82
|
+
# indicated by version "0."
|
|
83
|
+
|
|
39
84
|
def flags_from_ttl
|
|
40
85
|
if (@ttl)
|
|
41
86
|
return [@ttl].pack("N")
|
|
@@ -68,7 +113,7 @@ module Dnsruby
|
|
|
68
113
|
set_flags(code)
|
|
69
114
|
end
|
|
70
115
|
|
|
71
|
-
def set_flags(code)
|
|
116
|
+
def set_flags(code) # Should always be zero
|
|
72
117
|
@ttl = (xrcode() << 24) + (version() << 16) + code
|
|
73
118
|
end
|
|
74
119
|
|
|
@@ -84,24 +129,33 @@ module Dnsruby
|
|
|
84
129
|
end
|
|
85
130
|
end
|
|
86
131
|
|
|
87
|
-
attr_accessor :class
|
|
88
|
-
|
|
89
132
|
def payloadsize
|
|
90
|
-
return @
|
|
133
|
+
return @klass
|
|
91
134
|
end
|
|
92
135
|
|
|
93
136
|
def payloadsize=(size)
|
|
94
|
-
|
|
137
|
+
self.klass=size
|
|
95
138
|
end
|
|
96
139
|
|
|
97
140
|
def options(args)
|
|
98
141
|
if (args==nil)
|
|
99
142
|
return @options
|
|
100
143
|
elsif args.kind_of?Fixnum
|
|
101
|
-
|
|
144
|
+
# return list of options with that code
|
|
145
|
+
ret = []
|
|
146
|
+
@options.each do |option|
|
|
147
|
+
if (option.code == args)
|
|
148
|
+
ret.push(option)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
return ret
|
|
102
152
|
end
|
|
103
153
|
end
|
|
104
154
|
|
|
155
|
+
def options=(options)
|
|
156
|
+
@options = options
|
|
157
|
+
end
|
|
158
|
+
|
|
105
159
|
def from_data(data)
|
|
106
160
|
@options = data
|
|
107
161
|
end
|
|
@@ -112,7 +166,8 @@ module Dnsruby
|
|
|
112
166
|
end
|
|
113
167
|
end
|
|
114
168
|
|
|
115
|
-
def
|
|
169
|
+
def to_s
|
|
170
|
+
ret = "OPT pseudo-record : #{klass.code} max UDP packet size, "
|
|
116
171
|
ret = ""
|
|
117
172
|
if @options
|
|
118
173
|
@options.each do |opt|
|
|
@@ -124,22 +179,24 @@ module Dnsruby
|
|
|
124
179
|
end
|
|
125
180
|
|
|
126
181
|
def encode_rdata(msg)
|
|
127
|
-
options
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
182
|
+
if (@options)
|
|
183
|
+
@options.each do |opt|
|
|
184
|
+
msg.pack('n', opt.code)
|
|
185
|
+
msg.pack('n', opt.data.length)
|
|
186
|
+
msg.put_bytes(opt.data)
|
|
187
|
+
end
|
|
188
|
+
msg.put_array(@options)
|
|
131
189
|
end
|
|
132
|
-
msg.put_array(@options)
|
|
133
190
|
end
|
|
134
191
|
|
|
135
|
-
def self.decode_rdata(msg)
|
|
192
|
+
def self.decode_rdata(msg)#:nodoc: all
|
|
136
193
|
if (msg.has_remaining)
|
|
137
|
-
options =
|
|
194
|
+
options = []
|
|
138
195
|
while (msg.has_remaining) do
|
|
139
|
-
code = msg.unpack('n')
|
|
140
|
-
len = msg.unpack('n')
|
|
141
|
-
data = msg.get_bytes(len)
|
|
142
|
-
options.add(Option.new(code, data))
|
|
196
|
+
code = msg.unpack('n')
|
|
197
|
+
len = msg.unpack('n')
|
|
198
|
+
data = msg.get_bytes(len)
|
|
199
|
+
options.add(Option.new(code, data))
|
|
143
200
|
end
|
|
144
201
|
end
|
|
145
202
|
return self.new([options])
|
data/lib/Dnsruby/resource/SOA.rb
CHANGED
|
@@ -28,10 +28,16 @@ module Dnsruby
|
|
|
28
28
|
#The zone's serial number.
|
|
29
29
|
attr_accessor :serial
|
|
30
30
|
#The zone's refresh interval.
|
|
31
|
+
#How often, in seconds, a secondary nameserver is to check for
|
|
32
|
+
#updates from the primary nameserver.
|
|
31
33
|
attr_accessor :refresh
|
|
32
34
|
#The zone's retry interval.
|
|
35
|
+
#How often, in seconds, a secondary nameserver is to retry, after a
|
|
36
|
+
#failure to check for a refresh
|
|
33
37
|
attr_accessor :retry
|
|
34
38
|
#The zone's expire interval.
|
|
39
|
+
#How often, in seconds, a secondary nameserver is to use the data
|
|
40
|
+
#before refreshing from the primary nameserver
|
|
35
41
|
attr_accessor :expire
|
|
36
42
|
#The minimum (default) TTL for records in this zone.
|
|
37
43
|
attr_accessor :minimum
|
data/lib/Dnsruby/resource/SRV.rb
CHANGED
|
@@ -24,30 +24,34 @@ module Dnsruby
|
|
|
24
24
|
# The format is:
|
|
25
25
|
# _Service._Proto.Name TTL Class SRV Priority Weight Port Target
|
|
26
26
|
#
|
|
27
|
-
# The fields specific to SRV are defined in RFC 2782
|
|
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.
|
|
27
|
+
# The fields specific to SRV are defined in RFC 2782
|
|
47
28
|
class SRV < RR
|
|
48
29
|
ClassHash[[TypeValue = Types::SRV, ClassValue = ClassValue]] = self #:nodoc: all
|
|
49
30
|
|
|
50
|
-
|
|
31
|
+
# The priority of this target host.
|
|
32
|
+
# A client MUST attempt
|
|
33
|
+
# to contact the target host with the lowest-numbered priority it can
|
|
34
|
+
# reach; target hosts with the same priority SHOULD be tried in an
|
|
35
|
+
# order defined by the weight field. The range is 0-65535. Note that
|
|
36
|
+
# it is not widely implemented and should be set to zero.
|
|
37
|
+
attr_accessor :priority
|
|
38
|
+
|
|
39
|
+
# A server selection mechanism.
|
|
40
|
+
# The weight field specifies
|
|
41
|
+
# a relative weight for entries with the same priority. Larger weights
|
|
42
|
+
# SHOULD be given a proportionately higher probability of being
|
|
43
|
+
# selected. The range of this number is 0-65535. Domain administrators
|
|
44
|
+
# SHOULD use Weight 0 when there isn't any server selection to do, to
|
|
45
|
+
# make the RR easier to read for humans (less noisy). Note that it is
|
|
46
|
+
# not widely implemented and should be set to zero.
|
|
47
|
+
attr_accessor :weight
|
|
48
|
+
|
|
49
|
+
# The port on this target host of this service. The range is 0-65535.
|
|
50
|
+
attr_accessor :port
|
|
51
|
+
|
|
52
|
+
# The domain name of the target host. A target of "." means
|
|
53
|
+
# that the service is decidedly not available at this domain.
|
|
54
|
+
attr_accessor :target
|
|
51
55
|
|
|
52
56
|
def from_data(data) #:nodoc: all
|
|
53
57
|
@priority, @weight, @port, @target = data
|
|
@@ -34,10 +34,11 @@ module Dnsruby
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
class RR
|
|
37
|
-
#@TODO@ Implement this RR!
|
|
38
37
|
#RFC2930
|
|
39
38
|
class TKEY < RR
|
|
40
|
-
|
|
39
|
+
TypeValue = Types::TKEY #:nodoc: all
|
|
40
|
+
ClassValue = nil #:nodoc: all
|
|
41
|
+
ClassHash[[TypeValue, Classes.ANY.code]] = self #:nodoc: all
|
|
41
42
|
|
|
42
43
|
attr_reader :key_size
|
|
43
44
|
attr_accessor :key
|
|
@@ -86,7 +87,7 @@ module Dnsruby
|
|
|
86
87
|
#
|
|
87
88
|
# print "other data = ", rr.other_data, "\n"
|
|
88
89
|
#
|
|
89
|
-
|
|
90
|
+
attr_reader :other_data
|
|
90
91
|
|
|
91
92
|
def other_data=(od)
|
|
92
93
|
@other_data=od
|
|
@@ -108,6 +109,13 @@ module Dnsruby
|
|
|
108
109
|
@ttl = 0
|
|
109
110
|
end
|
|
110
111
|
|
|
112
|
+
def from_hash(hash)
|
|
113
|
+
super(hash)
|
|
114
|
+
if (algorithm)
|
|
115
|
+
@algorithm = Name.create(hash[:algorithm])
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
111
119
|
def from_data(data) #:nodoc: all
|
|
112
120
|
@algorithm, @inception, @expiration, @mode, @error, @key_size, @key, @other_size, @other_data = data
|
|
113
121
|
end
|
|
@@ -149,11 +157,11 @@ module Dnsruby
|
|
|
149
157
|
def self.decode_rdata(msg) #:nodoc: all
|
|
150
158
|
alg=msg.get_name
|
|
151
159
|
inc, exp, mode, error = msg.get_unpack("NNnn")
|
|
152
|
-
key_size=msg.get_unpack("n")
|
|
160
|
+
key_size, =msg.get_unpack("n")
|
|
153
161
|
key=msg.get_bytes(key_size)
|
|
154
|
-
other_size=msg.get_unpack("n")
|
|
162
|
+
other_size, =msg.get_unpack("n")
|
|
155
163
|
other=msg.get_bytes(other_size)
|
|
156
|
-
return self.new(alg, inc, exp, mode, error, key_size, key, other_size, other)
|
|
164
|
+
return self.new([alg, inc, exp, mode, error, key_size, key, other_size, other])
|
|
157
165
|
end
|
|
158
166
|
end
|
|
159
167
|
end
|
|
@@ -19,8 +19,18 @@ require "digest/sha1"
|
|
|
19
19
|
#require "digest/sha256"
|
|
20
20
|
module Dnsruby
|
|
21
21
|
class RR
|
|
22
|
+
#TSIG implements RFC2845.
|
|
23
|
+
#
|
|
24
|
+
#"This protocol allows for transaction level authentication using
|
|
25
|
+
#shared secrets and one way hashing. It can be used to authenticate
|
|
26
|
+
#dynamic updates as coming from an approved client, or to authenticate
|
|
27
|
+
#responses as coming from an approved recursive name server."
|
|
28
|
+
#
|
|
29
|
+
#A Dnsruby::RR::TSIG can represent the data present in a TSIG RR.
|
|
30
|
+
#However, it can also represent the data (specified in RFC2845) used
|
|
31
|
+
#to sign or verify a DNS message.
|
|
22
32
|
class TSIG < RR
|
|
23
|
-
HMAC_MD5 = Name.create("HMAC-MD5.SIG-ALG.REG.INT")
|
|
33
|
+
HMAC_MD5 = Name.create("HMAC-MD5.SIG-ALG.REG.INT.")
|
|
24
34
|
HMAC_SHA1 = Name.create("hmac-sha1.")
|
|
25
35
|
HMAC_SHA256 = Name.create("hmac-sha256.")
|
|
26
36
|
|
|
@@ -28,125 +38,344 @@ module Dnsruby
|
|
|
28
38
|
|
|
29
39
|
DEFAULT_ALGORITHM = HMAC_MD5
|
|
30
40
|
|
|
31
|
-
#
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
41
|
+
#Generates a TSIG record and adds it to the message.
|
|
42
|
+
#Takes an optional original_request argument for the case where this is
|
|
43
|
+
#a response to a query (RFC2845 3.4.1)
|
|
44
|
+
#
|
|
45
|
+
#Message#tsigstate will be set to :Signed.
|
|
46
|
+
def apply(message, original_request=nil)
|
|
47
|
+
if (!message.signed?)
|
|
48
|
+
tsig_rr = generate(message, original_request)
|
|
49
|
+
message.add_additional(tsig_rr)
|
|
36
50
|
message.tsigstate = :Signed
|
|
51
|
+
@query = message
|
|
52
|
+
tsig_rr.query = message
|
|
37
53
|
end
|
|
38
54
|
end
|
|
39
55
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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 + ","
|
|
56
|
+
def query=q#:nodoc: all
|
|
57
|
+
@query = q
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
#Generates a TSIG record
|
|
62
|
+
def generate(msg, original_request = nil, data="", msg_bytes=nil, tsig_rr=self)#:nodoc: all
|
|
63
|
+
time_signed=@time_signed
|
|
64
|
+
if (!time_signed)
|
|
65
|
+
time_signed=Time.now.to_i
|
|
58
66
|
end
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
b = m.encode
|
|
63
|
-
s=""
|
|
64
|
-
b.length.times do |i|
|
|
65
|
-
s << b[i].to_s + ","
|
|
67
|
+
if (tsig_rr.time_signed)
|
|
68
|
+
time_signed = tsig_rr.time_signed
|
|
66
69
|
end
|
|
67
|
-
print "encoded message : #{s}\n"
|
|
68
70
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
#
|
|
71
|
+
key = @key.gsub(" ", "")
|
|
72
|
+
key = Base64::decode64(key)
|
|
73
|
+
|
|
74
|
+
if (original_request)
|
|
75
|
+
# # Add the request MAC if present (used to validate responses).
|
|
76
|
+
# hmac.update(pack("H*", request_mac))
|
|
77
|
+
mac_bytes = MessageEncoder.new {|m|
|
|
78
|
+
m.put_pack('n', original_request.tsig.mac_size)
|
|
79
|
+
m.put_bytes(original_request.tsig.mac)
|
|
80
|
+
}.to_s
|
|
81
|
+
data += mac_bytes
|
|
82
|
+
# Original ID - should we set message ID to original ID?
|
|
83
|
+
if (tsig_rr != self)
|
|
84
|
+
msg.header.id = tsig_rr.original_id
|
|
85
|
+
else
|
|
86
|
+
msg.header.id = original_request.header.id
|
|
87
|
+
end
|
|
74
88
|
end
|
|
75
89
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
90
|
+
if (!msg_bytes)
|
|
91
|
+
msg_bytes = msg.encode
|
|
92
|
+
data += msg_bytes
|
|
93
|
+
else
|
|
94
|
+
# If msg_bytes came in, we need somehow to remove the TSIG RR
|
|
95
|
+
# It is the last record, so we can strip it if we know where it starts
|
|
96
|
+
# We must also poke the header ARcount to decrement it
|
|
97
|
+
msg_bytes = Header.decrement_arcount_encoded(msg_bytes)
|
|
98
|
+
data += msg_bytes[0, msg.tsigstart]
|
|
81
99
|
end
|
|
82
100
|
|
|
83
|
-
|
|
84
|
-
hmac.update(data)
|
|
85
|
-
|
|
86
|
-
@mac = hmac.digest
|
|
87
|
-
@mac_size = @mac.length
|
|
88
|
-
|
|
89
|
-
s=""
|
|
101
|
+
data += sig_data(tsig_rr, time_signed)
|
|
90
102
|
|
|
91
|
-
|
|
92
|
-
|
|
103
|
+
mac=nil
|
|
104
|
+
|
|
105
|
+
if (tsig_rr.algorithm == HMAC_MD5)
|
|
106
|
+
mac = OpenSSL::HMAC.digest(OpenSSL::Digest::MD5.new, key, data)
|
|
107
|
+
elsif (tsig_rr.algorithm == HMAC_SHA1)
|
|
108
|
+
mac = OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, key, data)
|
|
109
|
+
elsif (tsig_rr.algorithm == HMAC_SHA256)
|
|
110
|
+
mac = OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, key, data)
|
|
111
|
+
else
|
|
112
|
+
# Should we allow client to pass in their own signing function?
|
|
113
|
+
raise RuntimeError.new("Algorithm #{tsig_rr.algorithm} unsupported by TSIG")
|
|
93
114
|
end
|
|
94
|
-
|
|
115
|
+
|
|
116
|
+
mac_size = mac.length
|
|
117
|
+
|
|
118
|
+
new_tsig_rr = Dnsruby::RR.create({
|
|
119
|
+
:name => tsig_rr.name,
|
|
120
|
+
:type => Types.TSIG,
|
|
121
|
+
:ttl => tsig_rr.ttl,
|
|
122
|
+
:klass => tsig_rr.klass,
|
|
123
|
+
:algorithm => tsig_rr.algorithm,
|
|
124
|
+
:fudge => tsig_rr.fudge,
|
|
125
|
+
:key => @key,
|
|
126
|
+
:mac => mac,
|
|
127
|
+
:mac_size => mac_size,
|
|
128
|
+
:error => tsig_rr.error,
|
|
129
|
+
:time_signed => time_signed,
|
|
130
|
+
:original_id => msg.header.id
|
|
131
|
+
})
|
|
132
|
+
return new_tsig_rr
|
|
95
133
|
|
|
96
134
|
end
|
|
97
135
|
|
|
98
|
-
|
|
136
|
+
# Private method to return the TSIG RR data to be signed
|
|
137
|
+
def sig_data(tsig_rr, time_signed=@time_signed) #:nodoc: all
|
|
99
138
|
return MessageEncoder.new { |msg|
|
|
100
|
-
msg.put_name(name.downcase)
|
|
101
|
-
msg.put_pack('nN',
|
|
102
|
-
|
|
103
|
-
#@TODO@ ALGORITHM IS GOING TO LOWER-CASE!!!
|
|
104
|
-
msg.put_name(@algorithm.downcase)
|
|
139
|
+
msg.put_name(tsig_rr.name.downcase, true)
|
|
140
|
+
msg.put_pack('nN', tsig_rr.klass.code, tsig_rr.ttl)
|
|
141
|
+
msg.put_name(tsig_rr.algorithm.downcase, true)
|
|
105
142
|
|
|
106
|
-
time_high = (
|
|
107
|
-
time_low = (
|
|
108
|
-
print "time_signed : #{@time_signed}, high : #{time_high}, low : #{time_low}\n"
|
|
143
|
+
time_high = (time_signed >> 32)
|
|
144
|
+
time_low = (time_signed & 0xFFFFFFFF)
|
|
109
145
|
msg.put_pack('nN', time_high, time_low)
|
|
110
|
-
msg.put_pack('n',
|
|
111
|
-
|
|
112
|
-
msg.put_pack('n',
|
|
113
|
-
|
|
114
|
-
msg.put_pack('n', 0) # no other data
|
|
146
|
+
msg.put_pack('n', tsig_rr.fudge)
|
|
147
|
+
msg.put_pack('n', tsig_rr.error)
|
|
148
|
+
msg.put_pack('n', tsig_rr.other_size)
|
|
149
|
+
msg.put_bytes(tsig_rr.other_data)
|
|
115
150
|
}.to_s
|
|
116
151
|
end
|
|
117
152
|
|
|
118
|
-
|
|
119
|
-
|
|
153
|
+
#Verify a response. This method will be called by Dnsruby::SingleResolver
|
|
154
|
+
#before passing a response to the client code.
|
|
155
|
+
#The TSIG record will be removed from packet before passing to client, and
|
|
156
|
+
#the Message#tsigstate and Message#tsigerror will be set accordingly.
|
|
157
|
+
#Message#tsigstate will be set to one of :
|
|
158
|
+
#* :Failed
|
|
159
|
+
#* :Verified
|
|
160
|
+
def verify(query, response, response_bytes, buf="")
|
|
161
|
+
# 4.6. Client processing of answer
|
|
120
162
|
#
|
|
121
|
-
#
|
|
122
|
-
#
|
|
123
|
-
#
|
|
124
|
-
#
|
|
125
|
-
#
|
|
126
|
-
# the TSIG
|
|
127
|
-
#
|
|
128
|
-
#
|
|
129
|
-
#
|
|
130
|
-
#
|
|
131
|
-
#
|
|
132
|
-
#
|
|
133
|
-
|
|
134
|
-
#
|
|
135
|
-
#
|
|
136
|
-
#
|
|
137
|
-
#
|
|
138
|
-
#
|
|
163
|
+
# When a client receives a response from a server and expects to see a
|
|
164
|
+
# TSIG, it first checks if the TSIG RR is present in the response.
|
|
165
|
+
# Otherwise, the response is treated as having a format error and
|
|
166
|
+
# discarded. The client then extracts the TSIG, adjusts the ARCOUNT,
|
|
167
|
+
# and calculates the keyed digest in the same way as the server. If
|
|
168
|
+
# the TSIG does not validate, that response MUST be discarded, unless
|
|
169
|
+
# the RCODE is 9 (NOTAUTH), in which case the client SHOULD attempt to
|
|
170
|
+
# verify the response as if it were a TSIG Error response, as specified
|
|
171
|
+
# in [4.3]. A message containing an unsigned TSIG record or a TSIG
|
|
172
|
+
# record which fails verification SHOULD not be considered an
|
|
173
|
+
# acceptable response; the client SHOULD log an error and continue to
|
|
174
|
+
# wait for a signed response until the request times out.
|
|
175
|
+
|
|
176
|
+
# So, this verify method should simply remove the TSIG RR and calculate
|
|
177
|
+
# the MAC (using original request MAC if required).
|
|
178
|
+
# Should set tsigstate on packet appropriately, and return error.
|
|
179
|
+
# Side effect is packet is stripped of TSIG.
|
|
180
|
+
# Resolver (or client) can then decide what to do...
|
|
181
|
+
|
|
182
|
+
msg_tsig_rr = response.tsig
|
|
183
|
+
if (!verify_common(response))
|
|
184
|
+
return false
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
new_msg_tsig_rr = generate(response, query, buf, response_bytes, msg_tsig_rr)
|
|
188
|
+
|
|
189
|
+
if (msg_tsig_rr.mac == new_msg_tsig_rr.mac)
|
|
190
|
+
response.tsigstate = :Verified
|
|
191
|
+
response.tsigerror = RCode.NOERROR
|
|
192
|
+
return true
|
|
193
|
+
else
|
|
194
|
+
response.tsigstate = :Failed
|
|
195
|
+
response.tsigerror = RCode.BADSIG
|
|
196
|
+
return false
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def verify_common(response)#:nodoc: all
|
|
201
|
+
tsig_rr = response.tsig
|
|
202
|
+
|
|
203
|
+
if (!tsig_rr)
|
|
204
|
+
response.tsigerror = RCode.FORMERR
|
|
205
|
+
response.tsigstate = :Failed
|
|
206
|
+
return false
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
response.additional.delete(tsig_rr)
|
|
210
|
+
response.header.arcount-=1
|
|
211
|
+
|
|
212
|
+
# First, check the TSIG error in the RR
|
|
213
|
+
if (tsig_rr.error != RCode.NOERROR)
|
|
214
|
+
response.tsigstate = :Failed
|
|
215
|
+
response.tsigerror = tsig_rr.error
|
|
216
|
+
return false
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
if ((tsig_rr.name != @name) || (tsig_rr.algorithm.downcase != @algorithm.downcase))
|
|
220
|
+
TheLog.error("BADKEY failure")
|
|
221
|
+
response.tsigstate = :Failed
|
|
222
|
+
response.tsigerror = RCode.BADKEY
|
|
223
|
+
return false
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Check time_signed (RFC2845, 4.5.2) - only really necessary for server
|
|
227
|
+
if (Time.now.to_i > tsig_rr.time_signed + tsig_rr.fudge ||
|
|
228
|
+
Time.now.to_i < tsig_rr.time_signed - tsig_rr.fudge)
|
|
229
|
+
TheLog.error("TSIG failed with BADTIME")
|
|
230
|
+
response.tsigstate = :Failed
|
|
231
|
+
response.tsigerror = RCode.BADTIME
|
|
232
|
+
return false
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
return true
|
|
139
236
|
end
|
|
140
237
|
|
|
141
|
-
|
|
238
|
+
#Checks TSIG signatures across sessions of multiple DNS envelopes.
|
|
239
|
+
#This method is called each time a new envelope comes in. The envelope
|
|
240
|
+
#is checked - if a TSIG is present, them the stream so far is verified,
|
|
241
|
+
#and the response#tsigstate set to :Verified. If a TSIG is not present,
|
|
242
|
+
#and does not need to be present, then the message is added to the digest
|
|
243
|
+
#stream and the response#tsigstate is set to :Intermediate.
|
|
244
|
+
#If there is an error with the TSIG verification, then the response#tsigstate
|
|
245
|
+
#is set to :Failed.
|
|
246
|
+
#Like verify, this method will only be called by the Dnsruby::SingleResolver
|
|
247
|
+
#class. Client code need not call this method directly.
|
|
248
|
+
def verify_envelope(response, response_bytes)
|
|
249
|
+
#RFC2845 Section 4.4
|
|
250
|
+
#-----
|
|
251
|
+
#A DNS TCP session can include multiple DNS envelopes. This is, for
|
|
252
|
+
#example, commonly used by zone transfer. Using TSIG on such a
|
|
253
|
+
#connection can protect the connection from hijacking and provide data
|
|
254
|
+
#integrity. The TSIG MUST be included on the first and last DNS
|
|
255
|
+
#envelopes. It can be optionally placed on any intermediary
|
|
256
|
+
#envelopes. It is expensive to include it on every envelopes, but it
|
|
257
|
+
#MUST be placed on at least every 100'th envelope. The first envelope
|
|
258
|
+
#is processed as a standard answer, and subsequent messages have the
|
|
259
|
+
#following digest components:
|
|
260
|
+
#
|
|
261
|
+
#* Prior Digest (running)
|
|
262
|
+
#* DNS Messages (any unsigned messages since the last TSIG)
|
|
263
|
+
#* TSIG Timers (current message)
|
|
264
|
+
#
|
|
265
|
+
#This allows the client to rapidly detect when the session has been
|
|
266
|
+
#altered; at which point it can close the connection and retry. If a
|
|
267
|
+
#client TSIG verification fails, the client MUST close the connection.
|
|
268
|
+
#If the client does not receive TSIG records frequently enough (as
|
|
269
|
+
#specified above) it SHOULD assume the connection has been hijacked
|
|
270
|
+
#and it SHOULD close the connection. The client SHOULD treat this the
|
|
271
|
+
#same way as they would any other interrupted transfer (although the
|
|
272
|
+
#exact behavior is not specified).
|
|
273
|
+
#-----
|
|
274
|
+
#
|
|
275
|
+
# Each time a new envelope comes in, this method is called on the QUERY TSIG RR.
|
|
276
|
+
# It will set the response tsigstate to :Verified :Intermediate or :Failed
|
|
277
|
+
# as appropriate.
|
|
278
|
+
|
|
279
|
+
# Keep digest going of messages as they come in (and mark them intermediate)
|
|
280
|
+
# When TSIG comes in, work out what key should be and check. If OK, mark
|
|
281
|
+
# verified. Can reset digest then.
|
|
282
|
+
if (!@buf)
|
|
283
|
+
@num_envelopes = 0
|
|
284
|
+
@last_signed = 0
|
|
285
|
+
end
|
|
286
|
+
@num_envelopes += 1
|
|
287
|
+
if (!response.tsig)
|
|
288
|
+
if ((@num_envelopes > 1) && (@num_envelopes - @last_signed < 100))
|
|
289
|
+
TheLog.debug("Receiving intermediate envelope in TSIG TCP session")
|
|
290
|
+
response.tsigstate = :Intermediate
|
|
291
|
+
response.tsigerror = RCode.NOERROR
|
|
292
|
+
@buf = @buf + response_bytes
|
|
293
|
+
return
|
|
294
|
+
else
|
|
295
|
+
response.tsigstate = :Failed
|
|
296
|
+
TheLog.error("Expecting signed packet")
|
|
297
|
+
return false
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
@last_signed = @num_envelopes
|
|
301
|
+
|
|
302
|
+
# We have a TSIG - process it!
|
|
303
|
+
tsig = response.tsig
|
|
304
|
+
if (@num_envelopes == 1)
|
|
305
|
+
TheLog.debug("First response in TSIG TCP session - verifying normally")
|
|
306
|
+
# Process it as a standard answer
|
|
307
|
+
ok = verify(@query, response, response_bytes)
|
|
308
|
+
if (ok)
|
|
309
|
+
mac_bytes = MessageEncoder.new {|m|
|
|
310
|
+
m.put_pack('n', tsig.mac_size)
|
|
311
|
+
m.put_bytes(tsig.mac)
|
|
312
|
+
}.to_s
|
|
313
|
+
@buf = mac_bytes
|
|
314
|
+
else
|
|
315
|
+
end
|
|
316
|
+
return ok
|
|
317
|
+
end
|
|
318
|
+
TheLog.debug("Processing TSIG on TSIG TCP session")
|
|
319
|
+
|
|
320
|
+
if (!verify_common(response))
|
|
321
|
+
return false
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
# Now add the current message data - remember to frig the arcount
|
|
325
|
+
response_bytes = Header.decrement_arcount_encoded(response_bytes)
|
|
326
|
+
@buf += response_bytes[0, response.tsigstart]
|
|
327
|
+
|
|
328
|
+
# Let's add the timers
|
|
329
|
+
timers_data = MessageEncoder.new { |msg|
|
|
330
|
+
time_high = (tsig.time_signed >> 32)
|
|
331
|
+
time_low = (tsig.time_signed & 0xFFFFFFFF)
|
|
332
|
+
msg.put_pack('nN', time_high, time_low)
|
|
333
|
+
msg.put_pack('n', tsig.fudge)
|
|
334
|
+
}.to_s
|
|
335
|
+
@buf += timers_data
|
|
336
|
+
|
|
337
|
+
mac = nil
|
|
338
|
+
key = @key.gsub(" ", "")
|
|
339
|
+
key = Base64::decode64(key)
|
|
340
|
+
if (tsig.algorithm == HMAC_MD5)
|
|
341
|
+
mac = OpenSSL::HMAC.digest(OpenSSL::Digest::MD5.new, key, @buf)
|
|
342
|
+
elsif (tsig.algorithm == HMAC_SHA1)
|
|
343
|
+
mac = OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, key, @buf)
|
|
344
|
+
elsif (tsig.algorithm == HMAC_SHA256)
|
|
345
|
+
mac = OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, key, @buf)
|
|
346
|
+
else
|
|
347
|
+
# Should we allow client to pass in their own signing function?
|
|
348
|
+
raise RuntimeError.new("Algorithm #{tsig.algorithm} unsupported by TSIG")
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
if (mac != tsig.mac)
|
|
352
|
+
TheLog.error("TSIG Verify error on TSIG TCP session")
|
|
353
|
+
response.tsigstate = :Failed
|
|
354
|
+
return false
|
|
355
|
+
end
|
|
356
|
+
mac_bytes = MessageEncoder.new {|m|
|
|
357
|
+
m.put_pack('n', mac.length)
|
|
358
|
+
m.put_bytes(mac)
|
|
359
|
+
}.to_s
|
|
360
|
+
@buf=mac_bytes
|
|
361
|
+
|
|
362
|
+
response.tsigstate = :Verified
|
|
363
|
+
response.tsigerror = RCode.NOERROR
|
|
364
|
+
return true
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
TypeValue = Types::TSIG #:nodoc: all
|
|
369
|
+
ClassValue = nil #:nodoc: all
|
|
370
|
+
ClassHash[[TypeValue, Classes.ANY.code]] = self #:nodoc: all
|
|
142
371
|
|
|
143
372
|
#Gets or sets the domain name that specifies the name of the algorithm.
|
|
144
|
-
#The only
|
|
373
|
+
#The only algorithms currently supported are hmac-md5 and hmac-sha1.
|
|
145
374
|
#
|
|
146
375
|
# rr.algorithm=(algorithm_name)
|
|
147
376
|
# print "algorithm = ", rr.algorithm, "\n"
|
|
148
377
|
#
|
|
149
|
-
|
|
378
|
+
attr_reader :algorithm
|
|
150
379
|
|
|
151
380
|
#Gets or sets the signing time as the number of seconds since 1 Jan 1970
|
|
152
381
|
#00:00:00 UTC.
|
|
@@ -166,7 +395,7 @@ module Dnsruby
|
|
|
166
395
|
# rr.fudge=(60)
|
|
167
396
|
# print "fudge = ", rr.fudge, "\n"
|
|
168
397
|
#
|
|
169
|
-
|
|
398
|
+
attr_reader :fudge
|
|
170
399
|
|
|
171
400
|
#Returns the number of octets in the message authentication code (MAC).
|
|
172
401
|
#The programmer must call a Net::DNS::Packet object's data method
|
|
@@ -174,7 +403,7 @@ module Dnsruby
|
|
|
174
403
|
#
|
|
175
404
|
# print "MAC size = ", rr.mac_size, "\n"
|
|
176
405
|
#
|
|
177
|
-
|
|
406
|
+
attr_accessor :mac_size
|
|
178
407
|
|
|
179
408
|
#Returns the message authentication code (MAC) as a string of hex
|
|
180
409
|
#characters. The programmer must call a Net::DNS::Packet object's
|
|
@@ -196,7 +425,7 @@ module Dnsruby
|
|
|
196
425
|
#
|
|
197
426
|
# print "error = ", rr.error, "\n"
|
|
198
427
|
#
|
|
199
|
-
|
|
428
|
+
attr_accessor :error
|
|
200
429
|
|
|
201
430
|
#Returns the length of the Other Data. Should be zero unless the
|
|
202
431
|
#error is BADTIME.
|
|
@@ -212,18 +441,22 @@ module Dnsruby
|
|
|
212
441
|
# print "other data = ", rr.other_data, "\n"
|
|
213
442
|
#
|
|
214
443
|
attr_accessor :other_data
|
|
444
|
+
|
|
445
|
+
#Stores the secret key used for signing/verifying messages.
|
|
215
446
|
attr_accessor :key
|
|
216
447
|
|
|
217
|
-
def
|
|
448
|
+
def init_defaults
|
|
449
|
+
# @TODO@ Have new() method which takes key_name and key?
|
|
218
450
|
@algorithm = DEFAULT_ALGORITHM
|
|
219
|
-
@time_signed = Time.now.to_i
|
|
220
451
|
@fudge = DEFAULT_FUDGE
|
|
221
452
|
@mac_size = 0
|
|
222
453
|
@mac = ""
|
|
223
|
-
@original_id =
|
|
454
|
+
@original_id = rand(65536)
|
|
224
455
|
@error = 0
|
|
225
456
|
@other_size = 0
|
|
226
|
-
@other_data =
|
|
457
|
+
@other_data = ""
|
|
458
|
+
@time_signed = nil
|
|
459
|
+
@buf = nil
|
|
227
460
|
|
|
228
461
|
# RFC 2845 Section 2.3
|
|
229
462
|
@klass = "ANY"
|
|
@@ -235,6 +468,17 @@ module Dnsruby
|
|
|
235
468
|
@algorithm, @time_signed, @fudge, @mac_size, @mac, @original_id, @error, @other_size, @other_data = data
|
|
236
469
|
end
|
|
237
470
|
|
|
471
|
+
def name=(n)
|
|
472
|
+
if (n.instance_of?String)
|
|
473
|
+
n = Name.create(n)
|
|
474
|
+
end
|
|
475
|
+
if (!n.absolute?)
|
|
476
|
+
@name = Name.create(n.to_s + ".")
|
|
477
|
+
else
|
|
478
|
+
@name = n
|
|
479
|
+
end
|
|
480
|
+
end
|
|
481
|
+
|
|
238
482
|
# Create the RR from a standard string
|
|
239
483
|
def from_string(str) #:nodoc: all
|
|
240
484
|
parts = str.split("[:/]")
|
|
@@ -248,24 +492,31 @@ module Dnsruby
|
|
|
248
492
|
end
|
|
249
493
|
end
|
|
250
494
|
|
|
495
|
+
#Set the algorithm to use to generate the HMAC
|
|
496
|
+
#Supported values are :
|
|
497
|
+
#* hmac-md5
|
|
498
|
+
#* hmac-sha1
|
|
499
|
+
#* hmac-sha256
|
|
251
500
|
def algorithm=(alg)
|
|
252
|
-
|
|
253
|
-
when String
|
|
501
|
+
if (alg.class == String)
|
|
254
502
|
if (alg.downcase=="hmac-md5")
|
|
255
503
|
@algorithm = HMAC_MD5;
|
|
256
|
-
elsif (
|
|
504
|
+
elsif (alg.downcase=="hmac-sha1")
|
|
257
505
|
@algorithm = HMAC_SHA1;
|
|
258
|
-
elsif (
|
|
506
|
+
elsif (alg.downcase=="hmac-sha256")
|
|
259
507
|
@algorithm = HMAC_SHA256;
|
|
260
508
|
else
|
|
261
|
-
raise
|
|
509
|
+
raise ArgumentError.new("Invalid TSIG algorithm")
|
|
262
510
|
end
|
|
263
|
-
|
|
511
|
+
elsif (alg.class == Name)
|
|
264
512
|
if (alg!=HMAC_MD5 && alg!=HMAC_SHA1 && alg!=HMAC_SHA256)
|
|
265
513
|
raise ArgumentException.new("Invalid TSIG algorithm")
|
|
266
514
|
end
|
|
267
515
|
@algorithm=alg
|
|
516
|
+
else
|
|
517
|
+
raise ArgumentError.new("#{alg.class} not valid type for Dnsruby::RR::TSIG#algorithm= - use String or Name")
|
|
268
518
|
end
|
|
519
|
+
TheLog.debug("Using #{@algorithm.to_s} algorithm")
|
|
269
520
|
end
|
|
270
521
|
|
|
271
522
|
def fudge=(f)
|
|
@@ -277,22 +528,23 @@ module Dnsruby
|
|
|
277
528
|
end
|
|
278
529
|
|
|
279
530
|
def rdata_to_string
|
|
280
|
-
#@TODO@ Provide more info?
|
|
281
531
|
rdatastr=""
|
|
282
532
|
if (@algorithm!=nil)
|
|
283
533
|
error = @error
|
|
284
534
|
error = "UNDEFINED" unless error!=nil
|
|
285
|
-
rdatastr = "#{@algorithm}. #{error}";
|
|
535
|
+
rdatastr = "#{@original_id} #{@time_signed} #{@algorithm}. #{error}";
|
|
286
536
|
if (@other_size > 0 && @other_data!=nil)
|
|
287
537
|
rdatastr += " #{@other_data}"
|
|
288
538
|
end
|
|
539
|
+
rdatastr += " " + mac.unpack("H*").to_s
|
|
289
540
|
end
|
|
290
541
|
|
|
291
542
|
return rdatastr
|
|
292
543
|
end
|
|
293
544
|
|
|
294
545
|
def encode_rdata(msg) #:nodoc: all
|
|
295
|
-
|
|
546
|
+
# Name needs to be added with no compression - done in Dnsruby::Message#encode
|
|
547
|
+
msg.put_name(@algorithm.downcase, true)
|
|
296
548
|
time_high = (@time_signed >> 32)
|
|
297
549
|
time_low = (@time_signed & 0xFFFFFFFF)
|
|
298
550
|
msg.put_pack('nN', time_high, time_low)
|
|
@@ -302,26 +554,21 @@ module Dnsruby
|
|
|
302
554
|
msg.put_pack('n', @original_id)
|
|
303
555
|
msg.put_pack('n', @error)
|
|
304
556
|
msg.put_pack('n', @other_size)
|
|
305
|
-
|
|
306
|
-
msg.put_bytes(@other_data)
|
|
307
|
-
end
|
|
557
|
+
msg.put_bytes(@other_data)
|
|
308
558
|
end
|
|
309
559
|
|
|
310
560
|
def self.decode_rdata(msg) #:nodoc: all
|
|
311
561
|
alg=msg.get_name
|
|
312
562
|
time_high, time_low = msg.get_unpack("nN")
|
|
313
|
-
time_signed = (
|
|
314
|
-
fudge = msg.get_unpack("n")
|
|
315
|
-
mac_size = msg.get_unpack("n")
|
|
316
|
-
mac = msg.
|
|
317
|
-
original_id = msg.get_unpack("n")
|
|
318
|
-
error = msg.get_unpack("n")
|
|
319
|
-
other_size = msg.get_unpack("n")
|
|
320
|
-
other_data=
|
|
321
|
-
|
|
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)
|
|
563
|
+
time_signed = (time_high << 32) + time_low
|
|
564
|
+
fudge, = msg.get_unpack("n")
|
|
565
|
+
mac_size, = msg.get_unpack("n")
|
|
566
|
+
mac = msg.get_bytes(mac_size)
|
|
567
|
+
original_id, = msg.get_unpack("n")
|
|
568
|
+
error, = msg.get_unpack("n")
|
|
569
|
+
other_size, = msg.get_unpack("n")
|
|
570
|
+
other_data = msg.get_bytes(other_size)
|
|
571
|
+
return self.new([alg, time_signed, fudge, mac_size, mac, original_id, error, other_size, other_data])
|
|
325
572
|
end
|
|
326
573
|
end
|
|
327
574
|
end
|