Dnsruby 0.6.0 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
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