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.
Files changed (624) hide show
  1. data/EVENTMACHINE +1 -1
  2. data/README +36 -7
  3. data/doc/classes/Dnsruby.html +49 -18
  4. data/doc/classes/Dnsruby/Classes.html +10 -10
  5. data/doc/classes/Dnsruby/Classes.src/{M000158.html → M000156.html} +1 -1
  6. data/doc/classes/Dnsruby/Classes.src/M000157.html +5 -9
  7. data/doc/classes/Dnsruby/CodeMapper.html +55 -55
  8. data/doc/classes/Dnsruby/CodeMapper.src/M000133.html +4 -7
  9. data/doc/classes/Dnsruby/CodeMapper.src/M000134.html +19 -5
  10. data/doc/classes/Dnsruby/CodeMapper.src/M000135.html +7 -5
  11. data/doc/classes/Dnsruby/CodeMapper.src/M000136.html +5 -4
  12. data/doc/classes/Dnsruby/CodeMapper.src/M000137.html +5 -8
  13. data/doc/classes/Dnsruby/CodeMapper.src/M000138.html +4 -8
  14. data/doc/classes/Dnsruby/CodeMapper.src/M000139.html +6 -6
  15. data/doc/classes/Dnsruby/CodeMapper.src/M000140.html +7 -16
  16. data/doc/classes/Dnsruby/CodeMapper.src/M000141.html +8 -5
  17. data/doc/classes/Dnsruby/CodeMapper.src/{M000167.html → M000142.html} +0 -0
  18. data/doc/classes/Dnsruby/CodeMapper.src/{M000168.html → M000143.html} +0 -0
  19. data/doc/classes/Dnsruby/Config.html +66 -63
  20. data/doc/classes/Dnsruby/Config.src/{M000125.html → M000097.html} +1 -1
  21. data/doc/classes/Dnsruby/Config.src/M000098.html +5 -4
  22. data/doc/classes/Dnsruby/Config.src/M000099.html +5 -5
  23. data/doc/classes/Dnsruby/Config.src/M000100.html +11 -5
  24. data/doc/classes/Dnsruby/Config.src/M000101.html +6 -6
  25. data/doc/classes/Dnsruby/Config.src/M000102.html +23 -6
  26. data/doc/classes/Dnsruby/Config.src/M000103.html +10 -22
  27. data/doc/classes/Dnsruby/Config.src/M000104.html +7 -11
  28. data/doc/classes/Dnsruby/Config.src/M000105.html +13 -8
  29. data/doc/classes/Dnsruby/Config.src/M000106.html +7 -12
  30. data/doc/classes/Dnsruby/Config.src/M000107.html +6 -7
  31. data/doc/classes/Dnsruby/DNS.html +220 -118
  32. data/doc/classes/Dnsruby/DNS.src/{M000224.html → M000190.html} +1 -1
  33. data/doc/classes/Dnsruby/DNS.src/{M000225.html → M000191.html} +1 -1
  34. data/doc/classes/Dnsruby/DNS.src/{M000226.html → M000192.html} +1 -1
  35. data/doc/classes/Dnsruby/DNS.src/M000193.html +24 -0
  36. data/doc/classes/Dnsruby/{SingleResolver.src/M000152.html → DNS.src/M000194.html} +3 -3
  37. data/doc/classes/Dnsruby/{IPv4.src/M000156.html → DNS.src/M000195.html} +4 -4
  38. data/doc/classes/Dnsruby/DNS.src/M000196.html +6 -10
  39. data/doc/classes/Dnsruby/DNS.src/M000197.html +5 -10
  40. data/doc/classes/Dnsruby/DNS.src/M000198.html +6 -4
  41. data/doc/classes/Dnsruby/DNS.src/M000199.html +4 -4
  42. data/doc/classes/Dnsruby/DNS.src/M000200.html +5 -6
  43. data/doc/classes/Dnsruby/DNS.src/M000201.html +6 -5
  44. data/doc/classes/Dnsruby/DNS.src/M000202.html +14 -6
  45. data/doc/classes/Dnsruby/DNS.src/M000203.html +5 -4
  46. data/doc/classes/Dnsruby/DNS.src/M000204.html +6 -5
  47. data/doc/classes/Dnsruby/DNS.src/M000205.html +17 -6
  48. data/doc/classes/Dnsruby/DecodeError.html +11 -0
  49. data/doc/classes/Dnsruby/EncodeError.html +11 -0
  50. data/doc/classes/Dnsruby/FormErr.html +6 -0
  51. data/doc/classes/Dnsruby/Header.html +51 -66
  52. data/doc/classes/Dnsruby/Header.src/{M000196.html → M000167.html} +1 -1
  53. data/doc/classes/Dnsruby/Header.src/M000168.html +4 -21
  54. data/doc/classes/Dnsruby/Header.src/M000169.html +4 -21
  55. data/doc/classes/Dnsruby/Header.src/M000170.html +21 -4
  56. data/doc/classes/Dnsruby/Header.src/M000171.html +4 -4
  57. data/doc/classes/Dnsruby/Header.src/M000172.html +4 -7
  58. data/doc/classes/Dnsruby/Header.src/M000173.html +7 -6
  59. data/doc/classes/Dnsruby/Header.src/M000174.html +6 -18
  60. data/doc/classes/Dnsruby/Header.src/M000175.html +18 -12
  61. data/doc/classes/Dnsruby/Header.src/M000176.html +13 -33
  62. data/doc/classes/Dnsruby/Header.src/M000177.html +12 -14
  63. data/doc/classes/Dnsruby/Header.src/M000178.html +33 -4
  64. data/doc/classes/Dnsruby/Header.src/M000179.html +14 -4
  65. data/doc/classes/Dnsruby/Header.src/M000180.html +1 -1
  66. data/doc/classes/Dnsruby/Hosts.html +65 -54
  67. data/doc/classes/Dnsruby/Hosts.src/M000144.html +6 -5
  68. data/doc/classes/Dnsruby/Hosts.src/M000145.html +5 -6
  69. data/doc/classes/Dnsruby/Hosts.src/M000146.html +6 -7
  70. data/doc/classes/Dnsruby/Hosts.src/M000147.html +7 -5
  71. data/doc/classes/Dnsruby/Hosts.src/M000148.html +4 -5
  72. data/doc/classes/Dnsruby/Hosts.src/M000149.html +5 -6
  73. data/doc/classes/Dnsruby/Hosts.src/{M000176.html → M000150.html} +1 -1
  74. data/doc/classes/Dnsruby/IPv4.html +28 -93
  75. data/doc/classes/Dnsruby/IPv4.src/M000151.html +17 -6
  76. data/doc/classes/Dnsruby/IPv4.src/M000152.html +5 -4
  77. data/doc/classes/Dnsruby/IPv4.src/M000153.html +3 -3
  78. data/doc/classes/Dnsruby/IPv4.src/M000154.html +3 -4
  79. data/doc/classes/Dnsruby/IPv4.src/M000155.html +4 -4
  80. data/doc/classes/Dnsruby/IPv6.html +59 -96
  81. data/doc/classes/Dnsruby/IPv6.src/{M000208.html → M000178.html} +2 -2
  82. data/doc/classes/Dnsruby/IPv6.src/{M000210.html → M000179.html} +0 -0
  83. data/doc/classes/Dnsruby/IPv6.src/M000180.html +6 -46
  84. data/doc/classes/Dnsruby/IPv6.src/M000181.html +2 -2
  85. data/doc/classes/Dnsruby/IPv6.src/M000182.html +7 -6
  86. data/doc/classes/Dnsruby/IPv6.src/M000183.html +6 -8
  87. data/doc/classes/Dnsruby/IPv6.src/M000184.html +4 -4
  88. data/doc/classes/Dnsruby/Message.html +216 -123
  89. data/doc/classes/Dnsruby/Message.src/M000071.html +38 -0
  90. data/doc/classes/Dnsruby/Message.src/M000072.html +26 -0
  91. data/doc/classes/Dnsruby/Message.src/M000073.html +22 -0
  92. data/doc/classes/Dnsruby/{Header.src/M000198.html → Message.src/M000074.html} +6 -4
  93. data/doc/classes/Dnsruby/{Header.src/M000197.html → Message.src/M000075.html} +6 -4
  94. data/doc/classes/Dnsruby/Message.src/M000076.html +6 -20
  95. data/doc/classes/Dnsruby/Message.src/M000077.html +6 -12
  96. data/doc/classes/Dnsruby/Message.src/M000078.html +6 -8
  97. data/doc/classes/Dnsruby/Message.src/M000079.html +9 -6
  98. data/doc/classes/Dnsruby/Message.src/M000080.html +16 -6
  99. data/doc/classes/Dnsruby/Message.src/M000081.html +6 -6
  100. data/doc/classes/Dnsruby/Message.src/M000082.html +4 -6
  101. data/doc/classes/Dnsruby/Message.src/M000083.html +40 -6
  102. data/doc/classes/Dnsruby/Message.src/M000084.html +10 -6
  103. data/doc/classes/Dnsruby/Message.src/M000085.html +29 -6
  104. data/doc/classes/Dnsruby/Message.src/M000086.html +32 -4
  105. data/doc/classes/Dnsruby/NXDomain.html +6 -0
  106. data/doc/classes/Dnsruby/Name.html +60 -87
  107. data/doc/classes/Dnsruby/Name.src/M000056.html +28 -0
  108. data/doc/classes/Dnsruby/Name.src/M000057.html +6 -14
  109. data/doc/classes/Dnsruby/Name.src/M000058.html +4 -6
  110. data/doc/classes/Dnsruby/Name.src/M000059.html +7 -4
  111. data/doc/classes/Dnsruby/Name.src/M000060.html +8 -4
  112. data/doc/classes/Dnsruby/Name.src/M000061.html +5 -7
  113. data/doc/classes/Dnsruby/Name/Label.html +45 -45
  114. data/doc/classes/Dnsruby/Name/Label.src/M000062.html +21 -0
  115. data/doc/classes/Dnsruby/Name/Label.src/{M000075.html → M000063.html} +4 -4
  116. data/doc/classes/Dnsruby/Name/Label.src/{M000076.html → M000064.html} +1 -1
  117. data/doc/classes/Dnsruby/Name/Label.src/{M000077.html → M000065.html} +1 -1
  118. data/doc/classes/Dnsruby/Name/Label.src/{M000078.html → M000066.html} +1 -1
  119. data/doc/classes/Dnsruby/Name/Label.src/M000067.html +4 -7
  120. data/doc/classes/Dnsruby/Name/Label.src/M000068.html +4 -4
  121. data/doc/classes/Dnsruby/Name/Label.src/M000069.html +4 -8
  122. data/doc/classes/Dnsruby/Name/Label.src/M000070.html +4 -4
  123. data/doc/classes/Dnsruby/NotImp.html +6 -0
  124. data/doc/classes/Dnsruby/OtherResolvError.html +6 -0
  125. data/doc/classes/Dnsruby/Question.html +53 -8
  126. data/doc/classes/Dnsruby/Question.src/{M000194.html → M000165.html} +1 -1
  127. data/doc/classes/Dnsruby/Question.src/M000166.html +4 -33
  128. data/doc/classes/Dnsruby/Question.src/M000167.html +4 -33
  129. data/doc/classes/Dnsruby/Question.src/M000168.html +18 -4
  130. data/doc/classes/Dnsruby/Question.src/{M000195.html → M000169.html} +1 -1
  131. data/doc/classes/Dnsruby/RR.html +62 -64
  132. data/doc/classes/Dnsruby/RR.src/M000004.html +1 -1
  133. data/doc/classes/Dnsruby/RR.src/M000005.html +1 -1
  134. data/doc/classes/Dnsruby/RR.src/M000006.html +4 -22
  135. data/doc/classes/Dnsruby/RR.src/M000007.html +22 -86
  136. data/doc/classes/Dnsruby/RR.src/M000008.html +86 -4
  137. data/doc/classes/Dnsruby/RR.src/M000009.html +4 -4
  138. data/doc/classes/Dnsruby/RR.src/M000010.html +4 -8
  139. data/doc/classes/Dnsruby/RR.src/M000011.html +8 -8
  140. data/doc/classes/Dnsruby/RR.src/M000012.html +15 -4
  141. data/doc/classes/Dnsruby/RR.src/M000013.html +10 -8
  142. data/doc/classes/Dnsruby/RR/ANY.html +1 -1
  143. data/doc/classes/Dnsruby/RR/CNAME.html +2 -1
  144. data/doc/classes/Dnsruby/RR/DomainName.html +10 -10
  145. data/doc/classes/Dnsruby/RR/DomainName.src/{M000051.html → M000050.html} +0 -4
  146. data/doc/classes/Dnsruby/RR/Generic.html +4 -27
  147. data/doc/classes/Dnsruby/RR/IN.html +1 -1
  148. data/doc/classes/Dnsruby/RR/IN/A.html +17 -16
  149. data/doc/classes/Dnsruby/RR/IN/A.src/{M000025.html → M000017.html} +0 -0
  150. data/doc/classes/Dnsruby/RR/IN/A.src/M000018.html +4 -4
  151. data/doc/classes/Dnsruby/RR/IN/A.src/M000019.html +4 -4
  152. data/doc/classes/Dnsruby/RR/IN/AAAA.html +2 -1
  153. data/doc/classes/Dnsruby/RR/IN/SRV.html +43 -48
  154. data/doc/classes/Dnsruby/RR/IN/SRV.src/{M000022.html → M000014.html} +1 -1
  155. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +11 -14
  156. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +7 -11
  157. data/doc/classes/Dnsruby/RR/IN/WKS.html +5 -5
  158. data/doc/classes/Dnsruby/RR/IN/WKS.src/{M000021.html → M000020.html} +0 -0
  159. data/doc/classes/Dnsruby/RR/NS.html +2 -1
  160. data/doc/classes/Dnsruby/RR/NSAP.html +20 -20
  161. data/doc/classes/Dnsruby/RR/NSAP.src/{M000060.html → M000052.html} +0 -0
  162. data/doc/classes/Dnsruby/RR/NSAP.src/M000053.html +4 -4
  163. data/doc/classes/Dnsruby/RR/NSAP.src/M000054.html +8 -5
  164. data/doc/classes/Dnsruby/RR/NSAP.src/M000055.html +16 -7
  165. data/doc/classes/Dnsruby/RR/RP.html +5 -5
  166. data/doc/classes/Dnsruby/RR/RP.src/{M000050.html → M000049.html} +0 -0
  167. data/doc/classes/Dnsruby/RR/SOA.html +6 -3
  168. data/doc/classes/Dnsruby/RR/SOA.src/M000039.html +1 -1
  169. data/doc/classes/Dnsruby/RR/SOA.src/M000040.html +1 -1
  170. data/doc/classes/Dnsruby/RR/TKEY.html +39 -11
  171. data/doc/classes/Dnsruby/RR/TKEY.src/{M000029.html → M000021.html} +1 -1
  172. data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +15 -5
  173. data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +7 -15
  174. data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +1 -1
  175. data/doc/classes/Dnsruby/RR/TSIG.html +128 -56
  176. data/doc/classes/Dnsruby/RR/TSIG.src/M000041.html +24 -0
  177. data/doc/classes/Dnsruby/RR/TSIG.src/M000042.html +39 -7
  178. data/doc/classes/Dnsruby/RR/TSIG.src/M000043.html +110 -48
  179. data/doc/classes/Dnsruby/RR/TSIG.src/M000044.html +19 -20
  180. data/doc/classes/Dnsruby/RR/TSIG.src/M000045.html +11 -23
  181. data/doc/classes/Dnsruby/RR/TSIG.src/M000046.html +22 -17
  182. data/doc/classes/Dnsruby/RR/TSIG.src/M000047.html +7 -19
  183. data/doc/classes/Dnsruby/RR/TSIG.src/M000048.html +14 -7
  184. data/doc/classes/Dnsruby/RRSet.html +39 -39
  185. data/doc/classes/Dnsruby/RRSet.src/{M000187.html → M000158.html} +0 -0
  186. data/doc/classes/Dnsruby/RRSet.src/M000159.html +30 -4
  187. data/doc/classes/Dnsruby/RRSet.src/M000160.html +4 -4
  188. data/doc/classes/Dnsruby/RRSet.src/M000161.html +5 -29
  189. data/doc/classes/Dnsruby/RRSet.src/M000162.html +4 -4
  190. data/doc/classes/Dnsruby/RRSet.src/M000163.html +4 -6
  191. data/doc/classes/Dnsruby/RRSet.src/M000164.html +4 -4
  192. data/doc/classes/Dnsruby/Refused.html +6 -0
  193. data/doc/classes/Dnsruby/Resolv.html +120 -119
  194. data/doc/classes/Dnsruby/Resolv.src/{M000136.html → M000108.html} +1 -1
  195. data/doc/classes/Dnsruby/Resolv.src/M000109.html +4 -4
  196. data/doc/classes/Dnsruby/Resolv.src/M000110.html +4 -4
  197. data/doc/classes/Dnsruby/Resolv.src/M000111.html +4 -4
  198. data/doc/classes/Dnsruby/Resolv.src/M000112.html +4 -4
  199. data/doc/classes/Dnsruby/Resolv.src/M000113.html +4 -4
  200. data/doc/classes/Dnsruby/Resolv.src/M000114.html +4 -4
  201. data/doc/classes/Dnsruby/Resolv.src/M000115.html +5 -4
  202. data/doc/classes/Dnsruby/Resolv.src/M000116.html +6 -5
  203. data/doc/classes/Dnsruby/Resolv.src/M000117.html +15 -6
  204. data/doc/classes/Dnsruby/Resolv.src/M000118.html +5 -15
  205. data/doc/classes/Dnsruby/Resolv.src/M000119.html +6 -5
  206. data/doc/classes/Dnsruby/Resolv.src/M000120.html +11 -6
  207. data/doc/classes/Dnsruby/ResolvError.html +6 -0
  208. data/doc/classes/Dnsruby/ResolvTimeout.html +6 -0
  209. data/doc/classes/Dnsruby/Resolver.html +292 -179
  210. data/doc/classes/Dnsruby/Resolver.src/{M000239.html → M000203.html} +1 -1
  211. data/doc/classes/Dnsruby/Resolver.src/{M000240.html → M000204.html} +2 -2
  212. data/doc/classes/Dnsruby/Resolver.src/{M000241.html → M000205.html} +1 -1
  213. data/doc/classes/Dnsruby/{SingleResolver.src/M000153.html → Resolver.src/M000206.html} +2 -2
  214. data/doc/classes/Dnsruby/{SingleResolver.src/M000154.html → Resolver.src/M000207.html} +8 -6
  215. data/doc/classes/Dnsruby/Resolver.src/M000208.html +28 -0
  216. data/doc/classes/Dnsruby/Resolver.src/{M000242.html → M000209.html} +1 -1
  217. data/doc/classes/Dnsruby/Resolver.src/{M000243.html → M000210.html} +5 -2
  218. data/doc/classes/Dnsruby/Resolver.src/M000211.html +7 -7
  219. data/doc/classes/Dnsruby/Resolver.src/M000212.html +8 -7
  220. data/doc/classes/Dnsruby/Resolver.src/M000213.html +4 -13
  221. data/doc/classes/Dnsruby/Resolver.src/M000214.html +6 -14
  222. data/doc/classes/Dnsruby/Resolver.src/M000215.html +5 -4
  223. data/doc/classes/Dnsruby/Resolver.src/M000216.html +4 -33
  224. data/doc/classes/Dnsruby/Resolver.src/M000217.html +5 -7
  225. data/doc/classes/Dnsruby/Resolver.src/M000218.html +5 -8
  226. data/doc/classes/Dnsruby/Resolver.src/M000219.html +5 -4
  227. data/doc/classes/Dnsruby/Resolver.src/M000220.html +5 -6
  228. data/doc/classes/Dnsruby/Resolver.src/M000221.html +4 -4
  229. data/doc/classes/Dnsruby/Resolver.src/M000222.html +4 -4
  230. data/doc/classes/Dnsruby/Resolver.src/M000223.html +4 -4
  231. data/doc/classes/Dnsruby/Resolver.src/M000224.html +4 -4
  232. data/doc/classes/Dnsruby/Resolver.src/M000225.html +4 -4
  233. data/doc/classes/Dnsruby/Resolver.src/M000226.html +12 -5
  234. data/doc/classes/Dnsruby/Resolver.src/M000227.html +4 -5
  235. data/doc/classes/Dnsruby/Resolver.src/M000228.html +9 -5
  236. data/doc/classes/Dnsruby/Resolver.src/M000229.html +4 -5
  237. data/doc/classes/Dnsruby/ServFail.html +6 -0
  238. data/doc/classes/Dnsruby/SingleResolver.html +182 -77
  239. data/doc/classes/Dnsruby/SingleResolver.src/{M000149.html → M000121.html} +4 -4
  240. data/doc/classes/Dnsruby/SingleResolver.src/M000122.html +22 -4
  241. data/doc/classes/Dnsruby/SingleResolver.src/M000123.html +4 -5
  242. data/doc/classes/Dnsruby/SingleResolver.src/M000124.html +5 -35
  243. data/doc/classes/Dnsruby/SingleResolver.src/M000125.html +36 -4
  244. data/doc/classes/Dnsruby/SingleResolver.src/M000126.html +4 -7
  245. data/doc/classes/Dnsruby/SingleResolver.src/M000127.html +7 -11
  246. data/doc/classes/Dnsruby/SingleResolver.src/M000128.html +9 -35
  247. data/doc/classes/Dnsruby/SingleResolver.src/M000129.html +39 -11
  248. data/doc/classes/Dnsruby/SingleResolver.src/M000130.html +13 -7
  249. data/doc/classes/Dnsruby/SingleResolver.src/M000131.html +35 -0
  250. data/doc/classes/Dnsruby/SingleResolver.src/{M000157.html → M000132.html} +1 -1
  251. data/doc/classes/Dnsruby/TheLog.html +17 -17
  252. data/doc/classes/Dnsruby/TheLog.src/{M000188.html → M000182.html} +0 -0
  253. data/doc/classes/Dnsruby/TheLog.src/{M000190.html → M000183.html} +0 -0
  254. data/doc/classes/Dnsruby/TheLog.src/{M000191.html → M000184.html} +0 -0
  255. data/doc/classes/Dnsruby/TheLog.src/{M000189.html → M000185.html} +0 -0
  256. data/doc/classes/Dnsruby/TheLog.src/{M000217.html → M000186.html} +0 -0
  257. data/doc/classes/Dnsruby/TheLog.src/{M000218.html → M000187.html} +0 -0
  258. data/doc/classes/Dnsruby/Update.html +34 -34
  259. data/doc/classes/Dnsruby/Update.src/{M000219.html → M000185.html} +0 -0
  260. data/doc/classes/Dnsruby/Update.src/{M000193.html → M000186.html} +0 -1
  261. data/doc/classes/Dnsruby/Update.src/{M000194.html → M000187.html} +1 -1
  262. data/doc/classes/Dnsruby/Update.src/M000188.html +32 -0
  263. data/doc/classes/Dnsruby/Update.src/{M000220.html → M000189.html} +0 -1
  264. data/doc/classes/Dnsruby/Update.src/{M000221.html → M000190.html} +1 -1
  265. data/doc/classes/Dnsruby/Update.src/M000191.html +26 -17
  266. data/doc/classes/Dnsruby/Update.src/M000192.html +19 -17
  267. data/doc/classes/Dnsruby/ZoneTransfer.html +65 -13
  268. data/doc/classes/Dnsruby/{CodeMapper.src/M000163.html → ZoneTransfer.src/M000092.html} +4 -4
  269. data/doc/classes/Dnsruby/ZoneTransfer.src/{M000095.html → M000093.html} +3 -1
  270. data/doc/classes/Dnsruby/ZoneTransfer.src/{M000103.html → M000094.html} +1 -1
  271. data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +22 -5
  272. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/{M000104.html → M000095.html} +1 -1
  273. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000096.html +19 -0
  274. data/doc/created.rid +1 -1
  275. data/doc/files/lib/Dnsruby/Config_rb.html +1 -1
  276. data/doc/files/lib/Dnsruby/DNSSEC_rb.html +1 -1
  277. data/doc/files/lib/Dnsruby/DNS_rb.html +1 -1
  278. data/doc/files/lib/Dnsruby/Hosts_rb.html +1 -1
  279. data/doc/files/lib/Dnsruby/Resolver_rb.html +1 -1
  280. data/doc/files/lib/Dnsruby/SingleResolver_rb.html +1 -1
  281. data/doc/files/lib/Dnsruby/TheLog_rb.html +1 -1
  282. data/doc/files/lib/Dnsruby/code_mapper_rb.html +1 -1
  283. data/doc/files/lib/Dnsruby/event_machine_interface_rb.html +1 -1
  284. data/doc/files/lib/Dnsruby/ipv4_rb.html +1 -1
  285. data/doc/files/lib/Dnsruby/ipv6_rb.html +1 -1
  286. data/doc/files/lib/Dnsruby/message_rb.html +1 -1
  287. data/doc/files/lib/Dnsruby/name_rb.html +1 -1
  288. data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +1 -1
  289. data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +1 -1
  290. data/doc/files/lib/Dnsruby/resource/A_rb.html +1 -1
  291. data/doc/files/lib/Dnsruby/resource/CERT_rb.html +1 -1
  292. data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +1 -1
  293. data/doc/files/lib/Dnsruby/resource/IN_rb.html +1 -1
  294. data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +1 -1
  295. data/doc/files/lib/Dnsruby/resource/LOC_rb.html +1 -1
  296. data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +1 -1
  297. data/doc/files/lib/Dnsruby/resource/MX_rb.html +1 -1
  298. data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +1 -1
  299. data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +1 -1
  300. data/doc/files/lib/Dnsruby/resource/OPT_rb.html +1 -1
  301. data/doc/files/lib/Dnsruby/resource/PX_rb.html +1 -1
  302. data/doc/files/lib/Dnsruby/resource/RP_rb.html +1 -1
  303. data/doc/files/lib/Dnsruby/resource/RT_rb.html +1 -1
  304. data/doc/files/lib/Dnsruby/resource/SOA_rb.html +1 -1
  305. data/doc/files/lib/Dnsruby/resource/SPF_rb.html +1 -1
  306. data/doc/files/lib/Dnsruby/resource/SRV_rb.html +1 -1
  307. data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +1 -1
  308. data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +1 -1
  309. data/doc/files/lib/Dnsruby/resource/TXT_rb.html +1 -1
  310. data/doc/files/lib/Dnsruby/resource/X25_rb.html +1 -1
  311. data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +1 -1
  312. data/doc/files/lib/Dnsruby/resource/generic_rb.html +1 -1
  313. data/doc/files/lib/Dnsruby/resource/resource_rb.html +1 -1
  314. data/doc/files/lib/Dnsruby/select_thread_rb.html +1 -1
  315. data/doc/files/lib/Dnsruby/update_rb.html +1 -1
  316. data/doc/files/lib/Dnsruby/zone_transfer_rb.html +1 -1
  317. data/doc/files/lib/dnsruby_rb.html +1 -1
  318. data/doc/fr_class_index.html +0 -2
  319. data/doc/fr_method_index.html +207 -213
  320. data/doc/index.html +1 -1
  321. data/lib/Dnsruby/Config.rb +11 -5
  322. data/lib/Dnsruby/DNS.rb +97 -50
  323. data/lib/Dnsruby/Hosts.rb +9 -2
  324. data/lib/Dnsruby/Resolver.rb +116 -31
  325. data/lib/Dnsruby/SingleResolver.rb +131 -75
  326. data/lib/Dnsruby/TheLog.rb +1 -2
  327. data/lib/Dnsruby/event_machine_interface.rb +9 -9
  328. data/lib/Dnsruby/ipv4.rb +6 -15
  329. data/lib/Dnsruby/ipv6.rb +23 -21
  330. data/lib/Dnsruby/message.rb +141 -56
  331. data/lib/Dnsruby/name.rb +15 -7
  332. data/lib/Dnsruby/resource/A.rb +1 -1
  333. data/lib/Dnsruby/resource/AAAA.rb +1 -1
  334. data/lib/Dnsruby/resource/IN.rb +5 -5
  335. data/lib/Dnsruby/resource/MINFO.rb +6 -2
  336. data/lib/Dnsruby/resource/OPT.rb +76 -19
  337. data/lib/Dnsruby/resource/SOA.rb +6 -0
  338. data/lib/Dnsruby/resource/SRV.rb +25 -21
  339. data/lib/Dnsruby/resource/TKEY.rb +14 -6
  340. data/lib/Dnsruby/resource/TSIG.rb +367 -120
  341. data/lib/Dnsruby/resource/domain_name.rb +1 -5
  342. data/lib/Dnsruby/resource/generic.rb +5 -2
  343. data/lib/Dnsruby/resource/resource.rb +35 -17
  344. data/lib/Dnsruby/select_thread.rb +33 -26
  345. data/lib/Dnsruby/update.rb +3 -4
  346. data/lib/Dnsruby/zone_transfer.rb +46 -12
  347. data/lib/dnsruby.rb +56 -44
  348. data/test/tc_axfr.rb +45 -7
  349. data/test/tc_dns.rb +1 -2
  350. data/test/tc_em_deferrable.rb +7 -16
  351. data/test/tc_escapedchars.rb +5 -21
  352. data/test/tc_event_machine_deferrable.rb +1 -1
  353. data/test/tc_event_machine_res.rb +1 -1
  354. data/test/tc_event_machine_single_res.rb +4 -4
  355. data/test/tc_event_machine_soak.rb +1 -1
  356. data/test/tc_packet_unique_push.rb +1 -1
  357. data/test/tc_question.rb +16 -17
  358. data/test/tc_res_config.rb +1 -1
  359. data/test/tc_res_opt.rb +4 -0
  360. data/test/tc_resolver.rb +0 -1
  361. data/test/tc_rr-opt.rb +45 -6
  362. data/test/tc_single_resolver.rb +1 -3
  363. data/test/tc_soak.rb +1 -5
  364. data/test/tc_soak_base.rb +1 -1
  365. data/test/tc_tcp.rb +1 -1
  366. data/test/tc_tkey.rb +1 -32
  367. data/test/tc_tsig.rb +196 -0
  368. data/test/ts_offline.rb +3 -2
  369. data/test/ts_online.rb +59 -14
  370. metadata +69 -318
  371. data/doc/classes/Dnsruby/Classes.src/M000159.html +0 -19
  372. data/doc/classes/Dnsruby/Classes.src/M000185.html +0 -23
  373. data/doc/classes/Dnsruby/Classes.src/M000186.html +0 -19
  374. data/doc/classes/Dnsruby/CodeMapper.src/M000130.html +0 -18
  375. data/doc/classes/Dnsruby/CodeMapper.src/M000131.html +0 -18
  376. data/doc/classes/Dnsruby/CodeMapper.src/M000132.html +0 -33
  377. data/doc/classes/Dnsruby/CodeMapper.src/M000158.html +0 -18
  378. data/doc/classes/Dnsruby/CodeMapper.src/M000159.html +0 -33
  379. data/doc/classes/Dnsruby/CodeMapper.src/M000160.html +0 -21
  380. data/doc/classes/Dnsruby/CodeMapper.src/M000161.html +0 -19
  381. data/doc/classes/Dnsruby/CodeMapper.src/M000162.html +0 -19
  382. data/doc/classes/Dnsruby/CodeMapper.src/M000164.html +0 -22
  383. data/doc/classes/Dnsruby/CodeMapper.src/M000165.html +0 -22
  384. data/doc/classes/Dnsruby/CodeMapper.src/M000166.html +0 -22
  385. data/doc/classes/Dnsruby/Config.src/M000108.html +0 -21
  386. data/doc/classes/Dnsruby/Config.src/M000126.html +0 -19
  387. data/doc/classes/Dnsruby/Config.src/M000127.html +0 -19
  388. data/doc/classes/Dnsruby/Config.src/M000128.html +0 -21
  389. data/doc/classes/Dnsruby/Config.src/M000129.html +0 -21
  390. data/doc/classes/Dnsruby/Config.src/M000130.html +0 -38
  391. data/doc/classes/Dnsruby/Config.src/M000131.html +0 -26
  392. data/doc/classes/Dnsruby/Config.src/M000132.html +0 -22
  393. data/doc/classes/Dnsruby/Config.src/M000133.html +0 -27
  394. data/doc/classes/Dnsruby/Config.src/M000134.html +0 -22
  395. data/doc/classes/Dnsruby/Config.src/M000135.html +0 -21
  396. data/doc/classes/Dnsruby/DNS.src/M000206.html +0 -28
  397. data/doc/classes/Dnsruby/DNS.src/M000207.html +0 -19
  398. data/doc/classes/Dnsruby/DNS.src/M000208.html +0 -20
  399. data/doc/classes/Dnsruby/DNS.src/M000209.html +0 -41
  400. data/doc/classes/Dnsruby/DNS.src/M000210.html +0 -32
  401. data/doc/classes/Dnsruby/DNS.src/M000211.html +0 -50
  402. data/doc/classes/Dnsruby/DNS.src/M000227.html +0 -20
  403. data/doc/classes/Dnsruby/DNS.src/M000228.html +0 -19
  404. data/doc/classes/Dnsruby/DNS.src/M000229.html +0 -20
  405. data/doc/classes/Dnsruby/DNS.src/M000230.html +0 -18
  406. data/doc/classes/Dnsruby/DNS.src/M000231.html +0 -19
  407. data/doc/classes/Dnsruby/DNS.src/M000232.html +0 -20
  408. data/doc/classes/Dnsruby/DNS.src/M000233.html +0 -28
  409. data/doc/classes/Dnsruby/DNS.src/M000234.html +0 -19
  410. data/doc/classes/Dnsruby/DNS.src/M000235.html +0 -20
  411. data/doc/classes/Dnsruby/DNS.src/M000236.html +0 -41
  412. data/doc/classes/Dnsruby/DNS.src/M000237.html +0 -32
  413. data/doc/classes/Dnsruby/DNS.src/M000238.html +0 -50
  414. data/doc/classes/Dnsruby/DNS/DecodeError.html +0 -111
  415. data/doc/classes/Dnsruby/DNS/EncodeError.html +0 -111
  416. data/doc/classes/Dnsruby/EventMachineInterface.html +0 -327
  417. data/doc/classes/Dnsruby/EventMachineInterface.src/M000105.html +0 -32
  418. data/doc/classes/Dnsruby/EventMachineInterface.src/M000106.html +0 -25
  419. data/doc/classes/Dnsruby/EventMachineInterface.src/M000107.html +0 -29
  420. data/doc/classes/Dnsruby/EventMachineInterface.src/M000108.html +0 -21
  421. data/doc/classes/Dnsruby/EventMachineInterface.src/M000109.html +0 -35
  422. data/doc/classes/Dnsruby/EventMachineInterface.src/M000110.html +0 -19
  423. data/doc/classes/Dnsruby/EventMachineInterface.src/M000111.html +0 -23
  424. data/doc/classes/Dnsruby/EventMachineInterface.src/M000112.html +0 -18
  425. data/doc/classes/Dnsruby/EventMachineInterface.src/M000113.html +0 -28
  426. data/doc/classes/Dnsruby/EventMachineInterface.src/M000114.html +0 -41
  427. data/doc/classes/Dnsruby/EventMachineInterface.src/M000115.html +0 -28
  428. data/doc/classes/Dnsruby/EventMachineInterface.src/M000116.html +0 -24
  429. data/doc/classes/Dnsruby/EventMachineInterface/EmTcpHandler.html +0 -154
  430. data/doc/classes/Dnsruby/EventMachineInterface/EmTcpHandler.src/M000123.html +0 -20
  431. data/doc/classes/Dnsruby/EventMachineInterface/EmTcpHandler.src/M000124.html +0 -32
  432. data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.html +0 -237
  433. data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000117.html +0 -18
  434. data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000118.html +0 -19
  435. data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000119.html +0 -35
  436. data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000120.html +0 -30
  437. data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000121.html +0 -19
  438. data/doc/classes/Dnsruby/EventMachineInterface/EmUdpHandler.src/M000122.html +0 -23
  439. data/doc/classes/Dnsruby/Header.src/M000199.html +0 -21
  440. data/doc/classes/Dnsruby/Header.src/M000200.html +0 -20
  441. data/doc/classes/Dnsruby/Header.src/M000201.html +0 -32
  442. data/doc/classes/Dnsruby/Header.src/M000202.html +0 -26
  443. data/doc/classes/Dnsruby/Header.src/M000203.html +0 -47
  444. data/doc/classes/Dnsruby/Header.src/M000204.html +0 -28
  445. data/doc/classes/Dnsruby/Header.src/M000205.html +0 -18
  446. data/doc/classes/Dnsruby/Header.src/M000206.html +0 -18
  447. data/doc/classes/Dnsruby/Header.src/M000207.html +0 -30
  448. data/doc/classes/Dnsruby/Hosts.src/M000141.html +0 -20
  449. data/doc/classes/Dnsruby/Hosts.src/M000142.html +0 -20
  450. data/doc/classes/Dnsruby/Hosts.src/M000143.html +0 -49
  451. data/doc/classes/Dnsruby/Hosts.src/M000169.html +0 -20
  452. data/doc/classes/Dnsruby/Hosts.src/M000170.html +0 -49
  453. data/doc/classes/Dnsruby/Hosts.src/M000171.html +0 -19
  454. data/doc/classes/Dnsruby/Hosts.src/M000172.html +0 -20
  455. data/doc/classes/Dnsruby/Hosts.src/M000173.html +0 -21
  456. data/doc/classes/Dnsruby/Hosts.src/M000174.html +0 -19
  457. data/doc/classes/Dnsruby/Hosts.src/M000175.html +0 -20
  458. data/doc/classes/Dnsruby/IPv4.src/M000149.html +0 -32
  459. data/doc/classes/Dnsruby/IPv4.src/M000150.html +0 -32
  460. data/doc/classes/Dnsruby/IPv4.src/M000157.html +0 -18
  461. data/doc/classes/Dnsruby/IPv4.src/M000177.html +0 -32
  462. data/doc/classes/Dnsruby/IPv4.src/M000178.html +0 -21
  463. data/doc/classes/Dnsruby/IPv4.src/M000179.html +0 -18
  464. data/doc/classes/Dnsruby/IPv4.src/M000180.html +0 -18
  465. data/doc/classes/Dnsruby/IPv4.src/M000181.html +0 -19
  466. data/doc/classes/Dnsruby/IPv4.src/M000182.html +0 -18
  467. data/doc/classes/Dnsruby/IPv4.src/M000183.html +0 -18
  468. data/doc/classes/Dnsruby/IPv4.src/M000184.html +0 -18
  469. data/doc/classes/Dnsruby/IPv6.src/M000185.html +0 -21
  470. data/doc/classes/Dnsruby/IPv6.src/M000186.html +0 -18
  471. data/doc/classes/Dnsruby/IPv6.src/M000187.html +0 -18
  472. data/doc/classes/Dnsruby/IPv6.src/M000188.html +0 -18
  473. data/doc/classes/Dnsruby/IPv6.src/M000209.html +0 -21
  474. data/doc/classes/Dnsruby/IPv6.src/M000211.html +0 -18
  475. data/doc/classes/Dnsruby/IPv6.src/M000212.html +0 -21
  476. data/doc/classes/Dnsruby/IPv6.src/M000213.html +0 -18
  477. data/doc/classes/Dnsruby/IPv6.src/M000214.html +0 -18
  478. data/doc/classes/Dnsruby/IPv6.src/M000215.html +0 -18
  479. data/doc/classes/Dnsruby/Message.src/M000087.html +0 -54
  480. data/doc/classes/Dnsruby/Message.src/M000088.html +0 -42
  481. data/doc/classes/Dnsruby/Message.src/M000089.html +0 -45
  482. data/doc/classes/Dnsruby/Message.src/M000090.html +0 -20
  483. data/doc/classes/Dnsruby/Message.src/M000091.html +0 -21
  484. data/doc/classes/Dnsruby/Message.src/M000092.html +0 -20
  485. data/doc/classes/Dnsruby/Message.src/M000093.html +0 -18
  486. data/doc/classes/Dnsruby/Message.src/M000094.html +0 -54
  487. data/doc/classes/Dnsruby/Message.src/M000095.html +0 -42
  488. data/doc/classes/Dnsruby/Message.src/M000096.html +0 -45
  489. data/doc/classes/Dnsruby/Name.src/M000062.html +0 -19
  490. data/doc/classes/Dnsruby/Name.src/M000064.html +0 -22
  491. data/doc/classes/Dnsruby/Name.src/M000065.html +0 -18
  492. data/doc/classes/Dnsruby/Name.src/M000066.html +0 -20
  493. data/doc/classes/Dnsruby/Name.src/M000067.html +0 -18
  494. data/doc/classes/Dnsruby/Name.src/M000068.html +0 -21
  495. data/doc/classes/Dnsruby/Name.src/M000069.html +0 -19
  496. data/doc/classes/Dnsruby/Name.src/M000071.html +0 -22
  497. data/doc/classes/Dnsruby/Name.src/M000072.html +0 -18
  498. data/doc/classes/Dnsruby/Name.src/M000073.html +0 -20
  499. data/doc/classes/Dnsruby/Name/Label.src/M000071.html +0 -18
  500. data/doc/classes/Dnsruby/Name/Label.src/M000072.html +0 -18
  501. data/doc/classes/Dnsruby/Name/Label.src/M000073.html +0 -18
  502. data/doc/classes/Dnsruby/Name/Label.src/M000074.html +0 -18
  503. data/doc/classes/Dnsruby/Name/Label.src/M000079.html +0 -18
  504. data/doc/classes/Dnsruby/Name/Label.src/M000080.html +0 -18
  505. data/doc/classes/Dnsruby/Name/Label.src/M000081.html +0 -18
  506. data/doc/classes/Dnsruby/Name/Label.src/M000082.html +0 -18
  507. data/doc/classes/Dnsruby/RR.src/M000014.html +0 -24
  508. data/doc/classes/Dnsruby/RR.src/M000015.html +0 -18
  509. data/doc/classes/Dnsruby/RR.src/M000016.html +0 -18
  510. data/doc/classes/Dnsruby/RR.src/M000017.html +0 -22
  511. data/doc/classes/Dnsruby/RR.src/M000018.html +0 -22
  512. data/doc/classes/Dnsruby/RR.src/M000019.html +0 -18
  513. data/doc/classes/Dnsruby/RR.src/M000020.html +0 -22
  514. data/doc/classes/Dnsruby/RR.src/M000021.html +0 -24
  515. data/doc/classes/Dnsruby/RR/DomainName.src/M000058.html +0 -22
  516. data/doc/classes/Dnsruby/RR/Generic.src/M000041.html +0 -25
  517. data/doc/classes/Dnsruby/RR/Generic.src/M000048.html +0 -25
  518. data/doc/classes/Dnsruby/RR/IN/A.src/M000020.html +0 -18
  519. data/doc/classes/Dnsruby/RR/IN/A.src/M000026.html +0 -18
  520. data/doc/classes/Dnsruby/RR/IN/A.src/M000027.html +0 -18
  521. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000017.html +0 -22
  522. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000023.html +0 -26
  523. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000024.html +0 -22
  524. data/doc/classes/Dnsruby/RR/IN/WKS.src/M000028.html +0 -20
  525. data/doc/classes/Dnsruby/RR/LOC.src/M000032.html +0 -32
  526. data/doc/classes/Dnsruby/RR/LOC.src/M000033.html +0 -23
  527. data/doc/classes/Dnsruby/RR/LOC.src/M000034.html +0 -25
  528. data/doc/classes/Dnsruby/RR/LOC.src/M000035.html +0 -21
  529. data/doc/classes/Dnsruby/RR/LOC.src/M000036.html +0 -20
  530. data/doc/classes/Dnsruby/RR/LOC.src/M000037.html +0 -23
  531. data/doc/classes/Dnsruby/RR/NSAP.src/M000056.html +0 -31
  532. data/doc/classes/Dnsruby/RR/NSAP.src/M000061.html +0 -19
  533. data/doc/classes/Dnsruby/RR/NSAP.src/M000062.html +0 -22
  534. data/doc/classes/Dnsruby/RR/NSAP.src/M000063.html +0 -31
  535. data/doc/classes/Dnsruby/RR/RP.src/M000057.html +0 -19
  536. data/doc/classes/Dnsruby/RR/SOA.src/M000046.html +0 -24
  537. data/doc/classes/Dnsruby/RR/SOA.src/M000047.html +0 -27
  538. data/doc/classes/Dnsruby/RR/TKEY.src/M000030.html +0 -29
  539. data/doc/classes/Dnsruby/RR/TKEY.src/M000031.html +0 -30
  540. data/doc/classes/Dnsruby/RR/TSIG.src/M000049.html +0 -29
  541. data/doc/classes/Dnsruby/RR/TSIG.src/M000050.html +0 -71
  542. data/doc/classes/Dnsruby/RR/TSIG.src/M000051.html +0 -34
  543. data/doc/classes/Dnsruby/RR/TSIG.src/M000052.html +0 -37
  544. data/doc/classes/Dnsruby/RR/TSIG.src/M000053.html +0 -31
  545. data/doc/classes/Dnsruby/RR/TSIG.src/M000054.html +0 -34
  546. data/doc/classes/Dnsruby/RR/TSIG.src/M000055.html +0 -22
  547. data/doc/classes/Dnsruby/RR/TSIG.src/M000056.html +0 -29
  548. data/doc/classes/Dnsruby/RR/TXT.src/M000041.html +0 -18
  549. data/doc/classes/Dnsruby/RR/TXT.src/M000042.html +0 -18
  550. data/doc/classes/Dnsruby/RR/TXT.src/M000043.html +0 -20
  551. data/doc/classes/Dnsruby/RR/TXT.src/M000044.html +0 -27
  552. data/doc/classes/Dnsruby/RR/TXT.src/M000045.html +0 -25
  553. data/doc/classes/Dnsruby/RR/X25.src/M000038.html +0 -18
  554. data/doc/classes/Dnsruby/RR/X25.src/M000039.html +0 -18
  555. data/doc/classes/Dnsruby/RR/X25.src/M000040.html +0 -22
  556. data/doc/classes/Dnsruby/RRSet.src/M000165.html +0 -18
  557. data/doc/classes/Dnsruby/RRSet.src/M000166.html +0 -18
  558. data/doc/classes/Dnsruby/RRSet.src/M000188.html +0 -44
  559. data/doc/classes/Dnsruby/RRSet.src/M000189.html +0 -18
  560. data/doc/classes/Dnsruby/RRSet.src/M000190.html +0 -20
  561. data/doc/classes/Dnsruby/RRSet.src/M000191.html +0 -18
  562. data/doc/classes/Dnsruby/RRSet.src/M000192.html +0 -18
  563. data/doc/classes/Dnsruby/RRSet.src/M000193.html +0 -18
  564. data/doc/classes/Dnsruby/Resolv.src/M000121.html +0 -25
  565. data/doc/classes/Dnsruby/Resolv.src/M000137.html +0 -18
  566. data/doc/classes/Dnsruby/Resolv.src/M000138.html +0 -18
  567. data/doc/classes/Dnsruby/Resolv.src/M000139.html +0 -18
  568. data/doc/classes/Dnsruby/Resolv.src/M000140.html +0 -18
  569. data/doc/classes/Dnsruby/Resolv.src/M000141.html +0 -18
  570. data/doc/classes/Dnsruby/Resolv.src/M000142.html +0 -18
  571. data/doc/classes/Dnsruby/Resolv.src/M000143.html +0 -19
  572. data/doc/classes/Dnsruby/Resolv.src/M000144.html +0 -20
  573. data/doc/classes/Dnsruby/Resolv.src/M000145.html +0 -29
  574. data/doc/classes/Dnsruby/Resolv.src/M000146.html +0 -19
  575. data/doc/classes/Dnsruby/Resolv.src/M000147.html +0 -20
  576. data/doc/classes/Dnsruby/Resolv.src/M000148.html +0 -25
  577. data/doc/classes/Dnsruby/Resolver.src/M000230.html +0 -19
  578. data/doc/classes/Dnsruby/Resolver.src/M000231.html +0 -19
  579. data/doc/classes/Dnsruby/Resolver.src/M000232.html +0 -26
  580. data/doc/classes/Dnsruby/Resolver.src/M000233.html +0 -18
  581. data/doc/classes/Dnsruby/Resolver.src/M000234.html +0 -23
  582. data/doc/classes/Dnsruby/Resolver.src/M000235.html +0 -18
  583. data/doc/classes/Dnsruby/Resolver.src/M000236.html +0 -42
  584. data/doc/classes/Dnsruby/Resolver.src/M000244.html +0 -21
  585. data/doc/classes/Dnsruby/Resolver.src/M000245.html +0 -22
  586. data/doc/classes/Dnsruby/Resolver.src/M000246.html +0 -18
  587. data/doc/classes/Dnsruby/Resolver.src/M000247.html +0 -20
  588. data/doc/classes/Dnsruby/Resolver.src/M000248.html +0 -19
  589. data/doc/classes/Dnsruby/Resolver.src/M000249.html +0 -19
  590. data/doc/classes/Dnsruby/Resolver.src/M000250.html +0 -19
  591. data/doc/classes/Dnsruby/Resolver.src/M000251.html +0 -19
  592. data/doc/classes/Dnsruby/Resolver.src/M000252.html +0 -19
  593. data/doc/classes/Dnsruby/Resolver.src/M000253.html +0 -19
  594. data/doc/classes/Dnsruby/Resolver.src/M000254.html +0 -19
  595. data/doc/classes/Dnsruby/Resolver.src/M000255.html +0 -19
  596. data/doc/classes/Dnsruby/Resolver.src/M000256.html +0 -19
  597. data/doc/classes/Dnsruby/Resolver.src/M000257.html +0 -19
  598. data/doc/classes/Dnsruby/Resolver.src/M000258.html +0 -19
  599. data/doc/classes/Dnsruby/Resolver.src/M000259.html +0 -26
  600. data/doc/classes/Dnsruby/Resolver.src/M000260.html +0 -18
  601. data/doc/classes/Dnsruby/Resolver.src/M000261.html +0 -23
  602. data/doc/classes/Dnsruby/Resolver.src/M000262.html +0 -18
  603. data/doc/classes/Dnsruby/Resolver.src/M000263.html +0 -42
  604. data/doc/classes/Dnsruby/SelectInterface.html +0 -236
  605. data/doc/classes/Dnsruby/SelectInterface.src/M000001.html +0 -19
  606. data/doc/classes/Dnsruby/SelectInterface.src/M000002.html +0 -18
  607. data/doc/classes/Dnsruby/SelectInterface.src/M000003.html +0 -18
  608. data/doc/classes/Dnsruby/SelectInterface.src/M000004.html +0 -18
  609. data/doc/classes/Dnsruby/SelectInterface.src/M000005.html +0 -21
  610. data/doc/classes/Dnsruby/SelectInterface.src/M000006.html +0 -19
  611. data/doc/classes/Dnsruby/SelectInterface.src/M000007.html +0 -18
  612. data/doc/classes/Dnsruby/SingleResolver.src/M000150.html +0 -19
  613. data/doc/classes/Dnsruby/SingleResolver.src/M000151.html +0 -49
  614. data/doc/classes/Dnsruby/SingleResolver.src/M000155.html +0 -51
  615. data/doc/classes/Dnsruby/SingleResolver.src/M000156.html +0 -26
  616. data/doc/classes/Dnsruby/TheLog.src/M000216.html +0 -20
  617. data/doc/classes/Dnsruby/Update.src/M000195.html +0 -41
  618. data/doc/classes/Dnsruby/Update.src/M000196.html +0 -34
  619. data/doc/classes/Dnsruby/Update.src/M000222.html +0 -41
  620. data/doc/classes/Dnsruby/Update.src/M000223.html +0 -34
  621. data/doc/classes/Dnsruby/ZoneTransfer.src/M000096.html +0 -35
  622. data/doc/classes/Dnsruby/ZoneTransfer.src/M000102.html +0 -22
  623. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000097.html +0 -19
  624. 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
- # tests subdomain-of relation.
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
@@ -22,7 +22,7 @@ module Dnsruby
22
22
  class A < RR
23
23
  ClassHash[[TypeValue = Types::A, ClassValue = ClassValue]] = self #:nodoc: all
24
24
 
25
- #The RR's address field.
25
+ #The RR's (Resolv::IPv4) address field
26
26
  attr_accessor :address
27
27
 
28
28
  def from_data(data) #:nodoc: all
@@ -22,7 +22,7 @@ module Dnsruby
22
22
  class AAAA < RR
23
23
  ClassHash[[TypeValue = Types::AAAA, ClassValue = ClassValue]] = self #:nodoc: all
24
24
 
25
- # The RR's address field
25
+ # The RR's (Resolv::IPv6) address field
26
26
  attr_accessor :address
27
27
 
28
28
  def from_data(data) #:nodoc: all
@@ -16,12 +16,12 @@
16
16
  module Dnsruby
17
17
  class RR
18
18
  ClassInsensitiveTypes = [
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
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
- @rmailbx = Name.create(hash[:rmailbx])
31
- @emailbx = Name.create(hash[:emailbx])
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
@@ -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
- attr_accessor :options
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 @class
133
+ return @klass
91
134
  end
92
135
 
93
136
  def payloadsize=(size)
94
- @class=size
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
- #@todo@ return list of options with that code
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 rdata_to_string
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.each do |opt|
128
- msg.pack('n', opt.code)
129
- msg.pack('n', opt.data.length)
130
- msg.put_bytes(opt.data)
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 = new ArrayList();
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])
@@ -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
@@ -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 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.
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
- attr_accessor :priority, :weight, :port, :target
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
- ClassHash[[TypeValue = Types::TKEY, ClassValue = Classes.ANY]] = self #:nodoc: all
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
- attr_accessor :other_data
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
- # 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)
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
- # 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 + ","
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
- print "key : #{s}\n"
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
- # 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.
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
- data = sig_data
77
- s=""
78
-
79
- data.length.times do |i|
80
- s << data[i].to_s + ","
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
- print "encoded TSIG : #{s}\n"
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
- @mac.length.times do |i|
92
- s << @mac[i].to_s + ","
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
- print "hmac : #{s}\n"
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
- def sig_data
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', @klass.code, @ttl)
102
- print "Alg : #{@algorithm}\n"
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 = (@time_signed >> 32)
107
- time_low = (@time_signed & 0xFFFFFFFF)
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', @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
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
- def self.verify()
119
- # 3.2. TSIG processing on incoming messages
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
- # 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.
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
- ClassHash[[TypeValue = Types::TSIG, ClassValue = Classes.ANY]] = self #:nodoc: all
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 algorithm currently supported is HMAC-MD5.SIG-ALG.REG.INT.
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
- attr_accessor :algorithm
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
- attr_accessor :fudge
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
- attr_writer :mac_size
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
- attr_writer :error
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 initialize
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 = 0
454
+ @original_id = rand(65536)
224
455
  @error = 0
225
456
  @other_size = 0
226
- @other_data = nil
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
- case alg.class
253
- when String
501
+ if (alg.class == String)
254
502
  if (alg.downcase=="hmac-md5")
255
503
  @algorithm = HMAC_MD5;
256
- elsif (algorithm.downcase=="hmac-sha1")
504
+ elsif (alg.downcase=="hmac-sha1")
257
505
  @algorithm = HMAC_SHA1;
258
- elsif (algorithm.downcase=="hmac-sha256")
506
+ elsif (alg.downcase=="hmac-sha256")
259
507
  @algorithm = HMAC_SHA256;
260
508
  else
261
- raise ArgumentException.new("Invalid TSIG algorithm")
509
+ raise ArgumentError.new("Invalid TSIG algorithm")
262
510
  end
263
- when Name
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
- msg.put_name(@algorithm)
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
- if (@other_size > 0)
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 = (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)
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