Dnsruby 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) hide show
  1. data/README +34 -0
  2. data/doc/classes/Dnsruby/Classes.html +197 -0
  3. data/doc/classes/Dnsruby/Classes.src/M000157.html +23 -0
  4. data/doc/classes/Dnsruby/Classes.src/M000158.html +19 -0
  5. data/doc/classes/Dnsruby/CodeMapper.html +370 -0
  6. data/doc/classes/Dnsruby/CodeMapper.src/M000130.html +18 -0
  7. data/doc/classes/Dnsruby/CodeMapper.src/M000131.html +33 -0
  8. data/doc/classes/Dnsruby/CodeMapper.src/M000132.html +21 -0
  9. data/doc/classes/Dnsruby/CodeMapper.src/M000133.html +19 -0
  10. data/doc/classes/Dnsruby/CodeMapper.src/M000134.html +19 -0
  11. data/doc/classes/Dnsruby/CodeMapper.src/M000135.html +18 -0
  12. data/doc/classes/Dnsruby/CodeMapper.src/M000136.html +22 -0
  13. data/doc/classes/Dnsruby/CodeMapper.src/M000137.html +22 -0
  14. data/doc/classes/Dnsruby/CodeMapper.src/M000138.html +22 -0
  15. data/doc/classes/Dnsruby/CodeMapper.src/M000139.html +31 -0
  16. data/doc/classes/Dnsruby/CodeMapper.src/M000140.html +19 -0
  17. data/doc/classes/Dnsruby/Config.html +410 -0
  18. data/doc/classes/Dnsruby/Config.src/M000098.html +18 -0
  19. data/doc/classes/Dnsruby/Config.src/M000099.html +19 -0
  20. data/doc/classes/Dnsruby/Config.src/M000100.html +19 -0
  21. data/doc/classes/Dnsruby/Config.src/M000101.html +21 -0
  22. data/doc/classes/Dnsruby/Config.src/M000102.html +21 -0
  23. data/doc/classes/Dnsruby/Config.src/M000103.html +38 -0
  24. data/doc/classes/Dnsruby/Config.src/M000104.html +26 -0
  25. data/doc/classes/Dnsruby/Config.src/M000105.html +22 -0
  26. data/doc/classes/Dnsruby/Config.src/M000106.html +23 -0
  27. data/doc/classes/Dnsruby/Config.src/M000107.html +22 -0
  28. data/doc/classes/Dnsruby/Config.src/M000108.html +18 -0
  29. data/doc/classes/Dnsruby/DNS/DecodeError.html +111 -0
  30. data/doc/classes/Dnsruby/DNS/EncodeError.html +111 -0
  31. data/doc/classes/Dnsruby/DNS.html +469 -0
  32. data/doc/classes/Dnsruby/DNS.src/M000196.html +24 -0
  33. data/doc/classes/Dnsruby/DNS.src/M000197.html +18 -0
  34. data/doc/classes/Dnsruby/DNS.src/M000198.html +18 -0
  35. data/doc/classes/Dnsruby/DNS.src/M000199.html +20 -0
  36. data/doc/classes/Dnsruby/DNS.src/M000200.html +19 -0
  37. data/doc/classes/Dnsruby/DNS.src/M000201.html +20 -0
  38. data/doc/classes/Dnsruby/DNS.src/M000202.html +18 -0
  39. data/doc/classes/Dnsruby/DNS.src/M000203.html +19 -0
  40. data/doc/classes/Dnsruby/DNS.src/M000204.html +20 -0
  41. data/doc/classes/Dnsruby/DNS.src/M000205.html +28 -0
  42. data/doc/classes/Dnsruby/DNS.src/M000206.html +19 -0
  43. data/doc/classes/Dnsruby/DNS.src/M000207.html +20 -0
  44. data/doc/classes/Dnsruby/DNS.src/M000208.html +41 -0
  45. data/doc/classes/Dnsruby/DNS.src/M000209.html +32 -0
  46. data/doc/classes/Dnsruby/DNS.src/M000210.html +50 -0
  47. data/doc/classes/Dnsruby/DNSSEC/Algorithms.html +154 -0
  48. data/doc/classes/Dnsruby/DNSSEC.html +111 -0
  49. data/doc/classes/Dnsruby/DecodeError.html +111 -0
  50. data/doc/classes/Dnsruby/EncodeError.html +111 -0
  51. data/doc/classes/Dnsruby/FormErr.html +113 -0
  52. data/doc/classes/Dnsruby/Header.html +516 -0
  53. data/doc/classes/Dnsruby/Header.src/M000168.html +35 -0
  54. data/doc/classes/Dnsruby/Header.src/M000169.html +18 -0
  55. data/doc/classes/Dnsruby/Header.src/M000170.html +18 -0
  56. data/doc/classes/Dnsruby/Header.src/M000171.html +21 -0
  57. data/doc/classes/Dnsruby/Header.src/M000172.html +20 -0
  58. data/doc/classes/Dnsruby/Header.src/M000173.html +32 -0
  59. data/doc/classes/Dnsruby/Header.src/M000174.html +26 -0
  60. data/doc/classes/Dnsruby/Header.src/M000175.html +47 -0
  61. data/doc/classes/Dnsruby/Header.src/M000176.html +28 -0
  62. data/doc/classes/Dnsruby/Header.src/M000177.html +18 -0
  63. data/doc/classes/Dnsruby/Header.src/M000178.html +18 -0
  64. data/doc/classes/Dnsruby/Header.src/M000179.html +30 -0
  65. data/doc/classes/Dnsruby/Hosts.html +305 -0
  66. data/doc/classes/Dnsruby/Hosts.src/M000141.html +20 -0
  67. data/doc/classes/Dnsruby/Hosts.src/M000142.html +49 -0
  68. data/doc/classes/Dnsruby/Hosts.src/M000143.html +19 -0
  69. data/doc/classes/Dnsruby/Hosts.src/M000144.html +20 -0
  70. data/doc/classes/Dnsruby/Hosts.src/M000145.html +21 -0
  71. data/doc/classes/Dnsruby/Hosts.src/M000146.html +19 -0
  72. data/doc/classes/Dnsruby/Hosts.src/M000147.html +20 -0
  73. data/doc/classes/Dnsruby/Hosts.src/M000148.html +21 -0
  74. data/doc/classes/Dnsruby/IPv4.html +298 -0
  75. data/doc/classes/Dnsruby/IPv4.src/M000149.html +32 -0
  76. data/doc/classes/Dnsruby/IPv4.src/M000150.html +21 -0
  77. data/doc/classes/Dnsruby/IPv4.src/M000151.html +18 -0
  78. data/doc/classes/Dnsruby/IPv4.src/M000152.html +18 -0
  79. data/doc/classes/Dnsruby/IPv4.src/M000153.html +19 -0
  80. data/doc/classes/Dnsruby/IPv4.src/M000154.html +18 -0
  81. data/doc/classes/Dnsruby/IPv4.src/M000155.html +18 -0
  82. data/doc/classes/Dnsruby/IPv4.src/M000156.html +18 -0
  83. data/doc/classes/Dnsruby/IPv6.html +318 -0
  84. data/doc/classes/Dnsruby/IPv6.src/M000180.html +60 -0
  85. data/doc/classes/Dnsruby/IPv6.src/M000181.html +21 -0
  86. data/doc/classes/Dnsruby/IPv6.src/M000182.html +22 -0
  87. data/doc/classes/Dnsruby/IPv6.src/M000183.html +18 -0
  88. data/doc/classes/Dnsruby/IPv6.src/M000184.html +21 -0
  89. data/doc/classes/Dnsruby/IPv6.src/M000185.html +18 -0
  90. data/doc/classes/Dnsruby/IPv6.src/M000186.html +18 -0
  91. data/doc/classes/Dnsruby/IPv6.src/M000187.html +18 -0
  92. data/doc/classes/Dnsruby/Message.html +689 -0
  93. data/doc/classes/Dnsruby/Message.src/M000076.html +34 -0
  94. data/doc/classes/Dnsruby/Message.src/M000077.html +26 -0
  95. data/doc/classes/Dnsruby/Message.src/M000078.html +22 -0
  96. data/doc/classes/Dnsruby/Message.src/M000079.html +20 -0
  97. data/doc/classes/Dnsruby/Message.src/M000080.html +20 -0
  98. data/doc/classes/Dnsruby/Message.src/M000081.html +20 -0
  99. data/doc/classes/Dnsruby/Message.src/M000082.html +20 -0
  100. data/doc/classes/Dnsruby/Message.src/M000083.html +20 -0
  101. data/doc/classes/Dnsruby/Message.src/M000084.html +21 -0
  102. data/doc/classes/Dnsruby/Message.src/M000085.html +20 -0
  103. data/doc/classes/Dnsruby/Message.src/M000086.html +18 -0
  104. data/doc/classes/Dnsruby/Message.src/M000087.html +54 -0
  105. data/doc/classes/Dnsruby/Message.src/M000088.html +42 -0
  106. data/doc/classes/Dnsruby/Message.src/M000089.html +45 -0
  107. data/doc/classes/Dnsruby/MetaTypes.html +136 -0
  108. data/doc/classes/Dnsruby/Modes.html +171 -0
  109. data/doc/classes/Dnsruby/NXDomain.html +113 -0
  110. data/doc/classes/Dnsruby/Name/Label.html +300 -0
  111. data/doc/classes/Dnsruby/Name/Label.src/M000067.html +21 -0
  112. data/doc/classes/Dnsruby/Name/Label.src/M000068.html +18 -0
  113. data/doc/classes/Dnsruby/Name/Label.src/M000069.html +22 -0
  114. data/doc/classes/Dnsruby/Name/Label.src/M000070.html +18 -0
  115. data/doc/classes/Dnsruby/Name/Label.src/M000071.html +18 -0
  116. data/doc/classes/Dnsruby/Name/Label.src/M000072.html +18 -0
  117. data/doc/classes/Dnsruby/Name/Label.src/M000073.html +18 -0
  118. data/doc/classes/Dnsruby/Name/Label.src/M000074.html +18 -0
  119. data/doc/classes/Dnsruby/Name/Label.src/M000075.html +18 -0
  120. data/doc/classes/Dnsruby/Name.html +357 -0
  121. data/doc/classes/Dnsruby/Name.src/M000057.html +28 -0
  122. data/doc/classes/Dnsruby/Name.src/M000058.html +20 -0
  123. data/doc/classes/Dnsruby/Name.src/M000059.html +18 -0
  124. data/doc/classes/Dnsruby/Name.src/M000060.html +18 -0
  125. data/doc/classes/Dnsruby/Name.src/M000061.html +21 -0
  126. data/doc/classes/Dnsruby/Name.src/M000062.html +19 -0
  127. data/doc/classes/Dnsruby/Name.src/M000064.html +22 -0
  128. data/doc/classes/Dnsruby/Name.src/M000065.html +18 -0
  129. data/doc/classes/Dnsruby/Name.src/M000066.html +20 -0
  130. data/doc/classes/Dnsruby/NotImp.html +113 -0
  131. data/doc/classes/Dnsruby/OpCode.html +146 -0
  132. data/doc/classes/Dnsruby/OtherResolvError.html +113 -0
  133. data/doc/classes/Dnsruby/QTypes.html +146 -0
  134. data/doc/classes/Dnsruby/Question.html +256 -0
  135. data/doc/classes/Dnsruby/Question.src/M000166.html +47 -0
  136. data/doc/classes/Dnsruby/Question.src/M000167.html +18 -0
  137. data/doc/classes/Dnsruby/RCode.html +211 -0
  138. data/doc/classes/Dnsruby/RR/ANY.html +133 -0
  139. data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +169 -0
  140. data/doc/classes/Dnsruby/RR/CERT.html +180 -0
  141. data/doc/classes/Dnsruby/RR/CNAME.html +150 -0
  142. data/doc/classes/Dnsruby/RR/DNAME.html +150 -0
  143. data/doc/classes/Dnsruby/RR/DomainName.html +175 -0
  144. data/doc/classes/Dnsruby/RR/DomainName.src/M000051.html +22 -0
  145. data/doc/classes/Dnsruby/RR/Generic.html +156 -0
  146. data/doc/classes/Dnsruby/RR/Generic.src/M000041.html +25 -0
  147. data/doc/classes/Dnsruby/RR/HINFO.html +155 -0
  148. data/doc/classes/Dnsruby/RR/IN/A.html +199 -0
  149. data/doc/classes/Dnsruby/RR/IN/A.src/M000018.html +18 -0
  150. data/doc/classes/Dnsruby/RR/IN/A.src/M000019.html +18 -0
  151. data/doc/classes/Dnsruby/RR/IN/A.src/M000020.html +18 -0
  152. data/doc/classes/Dnsruby/RR/IN/AAAA.html +138 -0
  153. data/doc/classes/Dnsruby/RR/IN/AFSDB.html +145 -0
  154. data/doc/classes/Dnsruby/RR/IN/PX.html +143 -0
  155. data/doc/classes/Dnsruby/RR/IN/SRV.html +243 -0
  156. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +29 -0
  157. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +26 -0
  158. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000017.html +22 -0
  159. data/doc/classes/Dnsruby/RR/IN/WKS.html +166 -0
  160. data/doc/classes/Dnsruby/RR/IN/WKS.src/M000021.html +20 -0
  161. data/doc/classes/Dnsruby/RR/IN.html +155 -0
  162. data/doc/classes/Dnsruby/RR/ISDN.html +155 -0
  163. data/doc/classes/Dnsruby/RR/LOC.html +395 -0
  164. data/doc/classes/Dnsruby/RR/LOC.src/M000025.html +32 -0
  165. data/doc/classes/Dnsruby/RR/LOC.src/M000026.html +23 -0
  166. data/doc/classes/Dnsruby/RR/LOC.src/M000027.html +25 -0
  167. data/doc/classes/Dnsruby/RR/LOC.src/M000028.html +21 -0
  168. data/doc/classes/Dnsruby/RR/LOC.src/M000029.html +20 -0
  169. data/doc/classes/Dnsruby/RR/LOC.src/M000030.html +23 -0
  170. data/doc/classes/Dnsruby/RR/MB.html +150 -0
  171. data/doc/classes/Dnsruby/RR/MG.html +150 -0
  172. data/doc/classes/Dnsruby/RR/MINFO.html +156 -0
  173. data/doc/classes/Dnsruby/RR/MR.html +150 -0
  174. data/doc/classes/Dnsruby/RR/MX.html +155 -0
  175. data/doc/classes/Dnsruby/RR/NAPTR.html +190 -0
  176. data/doc/classes/Dnsruby/RR/NS.html +150 -0
  177. data/doc/classes/Dnsruby/RR/NSAP.html +293 -0
  178. data/doc/classes/Dnsruby/RR/NSAP.src/M000053.html +19 -0
  179. data/doc/classes/Dnsruby/RR/NSAP.src/M000054.html +19 -0
  180. data/doc/classes/Dnsruby/RR/NSAP.src/M000055.html +22 -0
  181. data/doc/classes/Dnsruby/RR/NSAP.src/M000056.html +31 -0
  182. data/doc/classes/Dnsruby/RR/PTR.html +132 -0
  183. data/doc/classes/Dnsruby/RR/RP.html +183 -0
  184. data/doc/classes/Dnsruby/RR/RP.src/M000050.html +19 -0
  185. data/doc/classes/Dnsruby/RR/RT.html +155 -0
  186. data/doc/classes/Dnsruby/RR/SOA.html +230 -0
  187. data/doc/classes/Dnsruby/RR/SOA.src/M000039.html +24 -0
  188. data/doc/classes/Dnsruby/RR/SOA.src/M000040.html +27 -0
  189. data/doc/classes/Dnsruby/RR/SPF.html +138 -0
  190. data/doc/classes/Dnsruby/RR/TKEY.html +285 -0
  191. data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +19 -0
  192. data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +29 -0
  193. data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +30 -0
  194. data/doc/classes/Dnsruby/RR/TSIG.html +416 -0
  195. data/doc/classes/Dnsruby/RR/TSIG.src/M000042.html +22 -0
  196. data/doc/classes/Dnsruby/RR/TSIG.src/M000043.html +71 -0
  197. data/doc/classes/Dnsruby/RR/TSIG.src/M000044.html +34 -0
  198. data/doc/classes/Dnsruby/RR/TSIG.src/M000045.html +37 -0
  199. data/doc/classes/Dnsruby/RR/TSIG.src/M000046.html +31 -0
  200. data/doc/classes/Dnsruby/RR/TSIG.src/M000047.html +34 -0
  201. data/doc/classes/Dnsruby/RR/TSIG.src/M000048.html +22 -0
  202. data/doc/classes/Dnsruby/RR/TSIG.src/M000049.html +29 -0
  203. data/doc/classes/Dnsruby/RR/TXT.html +233 -0
  204. data/doc/classes/Dnsruby/RR/TXT.src/M000034.html +18 -0
  205. data/doc/classes/Dnsruby/RR/TXT.src/M000035.html +18 -0
  206. data/doc/classes/Dnsruby/RR/TXT.src/M000036.html +20 -0
  207. data/doc/classes/Dnsruby/RR/TXT.src/M000037.html +27 -0
  208. data/doc/classes/Dnsruby/RR/TXT.src/M000038.html +25 -0
  209. data/doc/classes/Dnsruby/RR/X25.html +203 -0
  210. data/doc/classes/Dnsruby/RR/X25.src/M000031.html +18 -0
  211. data/doc/classes/Dnsruby/RR/X25.src/M000032.html +18 -0
  212. data/doc/classes/Dnsruby/RR/X25.src/M000033.html +22 -0
  213. data/doc/classes/Dnsruby/RR.html +620 -0
  214. data/doc/classes/Dnsruby/RR.src/M000001.html +18 -0
  215. data/doc/classes/Dnsruby/RR.src/M000002.html +22 -0
  216. data/doc/classes/Dnsruby/RR.src/M000003.html +18 -0
  217. data/doc/classes/Dnsruby/RR.src/M000004.html +18 -0
  218. data/doc/classes/Dnsruby/RR.src/M000005.html +18 -0
  219. data/doc/classes/Dnsruby/RR.src/M000006.html +36 -0
  220. data/doc/classes/Dnsruby/RR.src/M000007.html +100 -0
  221. data/doc/classes/Dnsruby/RR.src/M000008.html +18 -0
  222. data/doc/classes/Dnsruby/RR.src/M000009.html +18 -0
  223. data/doc/classes/Dnsruby/RR.src/M000010.html +22 -0
  224. data/doc/classes/Dnsruby/RR.src/M000011.html +22 -0
  225. data/doc/classes/Dnsruby/RR.src/M000012.html +18 -0
  226. data/doc/classes/Dnsruby/RR.src/M000013.html +22 -0
  227. data/doc/classes/Dnsruby/RR.src/M000014.html +24 -0
  228. data/doc/classes/Dnsruby/RRSet.html +257 -0
  229. data/doc/classes/Dnsruby/RRSet.src/M000159.html +18 -0
  230. data/doc/classes/Dnsruby/RRSet.src/M000160.html +44 -0
  231. data/doc/classes/Dnsruby/RRSet.src/M000161.html +18 -0
  232. data/doc/classes/Dnsruby/RRSet.src/M000162.html +20 -0
  233. data/doc/classes/Dnsruby/RRSet.src/M000163.html +18 -0
  234. data/doc/classes/Dnsruby/RRSet.src/M000164.html +18 -0
  235. data/doc/classes/Dnsruby/RRSet.src/M000165.html +18 -0
  236. data/doc/classes/Dnsruby/Refused.html +113 -0
  237. data/doc/classes/Dnsruby/Resolv.html +400 -0
  238. data/doc/classes/Dnsruby/Resolv.src/M000109.html +18 -0
  239. data/doc/classes/Dnsruby/Resolv.src/M000110.html +18 -0
  240. data/doc/classes/Dnsruby/Resolv.src/M000111.html +18 -0
  241. data/doc/classes/Dnsruby/Resolv.src/M000112.html +18 -0
  242. data/doc/classes/Dnsruby/Resolv.src/M000113.html +18 -0
  243. data/doc/classes/Dnsruby/Resolv.src/M000114.html +18 -0
  244. data/doc/classes/Dnsruby/Resolv.src/M000115.html +18 -0
  245. data/doc/classes/Dnsruby/Resolv.src/M000116.html +19 -0
  246. data/doc/classes/Dnsruby/Resolv.src/M000117.html +20 -0
  247. data/doc/classes/Dnsruby/Resolv.src/M000118.html +29 -0
  248. data/doc/classes/Dnsruby/Resolv.src/M000119.html +19 -0
  249. data/doc/classes/Dnsruby/Resolv.src/M000120.html +20 -0
  250. data/doc/classes/Dnsruby/Resolv.src/M000121.html +25 -0
  251. data/doc/classes/Dnsruby/ResolvError.html +111 -0
  252. data/doc/classes/Dnsruby/ResolvTimeout.html +111 -0
  253. data/doc/classes/Dnsruby/Resolver.html +807 -0
  254. data/doc/classes/Dnsruby/Resolver.src/M000211.html +21 -0
  255. data/doc/classes/Dnsruby/Resolver.src/M000212.html +37 -0
  256. data/doc/classes/Dnsruby/Resolver.src/M000213.html +64 -0
  257. data/doc/classes/Dnsruby/Resolver.src/M000214.html +23 -0
  258. data/doc/classes/Dnsruby/Resolver.src/M000215.html +46 -0
  259. data/doc/classes/Dnsruby/Resolver.src/M000216.html +21 -0
  260. data/doc/classes/Dnsruby/Resolver.src/M000217.html +22 -0
  261. data/doc/classes/Dnsruby/Resolver.src/M000218.html +18 -0
  262. data/doc/classes/Dnsruby/Resolver.src/M000219.html +20 -0
  263. data/doc/classes/Dnsruby/Resolver.src/M000220.html +19 -0
  264. data/doc/classes/Dnsruby/Resolver.src/M000221.html +19 -0
  265. data/doc/classes/Dnsruby/Resolver.src/M000222.html +19 -0
  266. data/doc/classes/Dnsruby/Resolver.src/M000223.html +19 -0
  267. data/doc/classes/Dnsruby/Resolver.src/M000224.html +19 -0
  268. data/doc/classes/Dnsruby/Resolver.src/M000225.html +19 -0
  269. data/doc/classes/Dnsruby/Resolver.src/M000226.html +19 -0
  270. data/doc/classes/Dnsruby/Resolver.src/M000227.html +19 -0
  271. data/doc/classes/Dnsruby/Resolver.src/M000228.html +19 -0
  272. data/doc/classes/Dnsruby/Resolver.src/M000229.html +19 -0
  273. data/doc/classes/Dnsruby/Resolver.src/M000230.html +19 -0
  274. data/doc/classes/Dnsruby/ServFail.html +113 -0
  275. data/doc/classes/Dnsruby/SingleResolver.html +496 -0
  276. data/doc/classes/Dnsruby/SingleResolver.src/M000122.html +18 -0
  277. data/doc/classes/Dnsruby/SingleResolver.src/M000123.html +19 -0
  278. data/doc/classes/Dnsruby/SingleResolver.src/M000124.html +49 -0
  279. data/doc/classes/Dnsruby/SingleResolver.src/M000125.html +18 -0
  280. data/doc/classes/Dnsruby/SingleResolver.src/M000126.html +21 -0
  281. data/doc/classes/Dnsruby/SingleResolver.src/M000127.html +25 -0
  282. data/doc/classes/Dnsruby/SingleResolver.src/M000128.html +78 -0
  283. data/doc/classes/Dnsruby/SingleResolver.src/M000129.html +21 -0
  284. data/doc/classes/Dnsruby/TheLog.html +196 -0
  285. data/doc/classes/Dnsruby/TheLog.src/M000188.html +20 -0
  286. data/doc/classes/Dnsruby/TheLog.src/M000189.html +20 -0
  287. data/doc/classes/Dnsruby/TheLog.src/M000190.html +20 -0
  288. data/doc/classes/Dnsruby/Types.html +426 -0
  289. data/doc/classes/Dnsruby/Update.html +368 -0
  290. data/doc/classes/Dnsruby/Update.src/M000191.html +32 -0
  291. data/doc/classes/Dnsruby/Update.src/M000192.html +37 -0
  292. data/doc/classes/Dnsruby/Update.src/M000193.html +32 -0
  293. data/doc/classes/Dnsruby/Update.src/M000194.html +41 -0
  294. data/doc/classes/Dnsruby/Update.src/M000195.html +34 -0
  295. data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +183 -0
  296. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000097.html +19 -0
  297. data/doc/classes/Dnsruby/ZoneTransfer.html +248 -0
  298. data/doc/classes/Dnsruby/ZoneTransfer.src/M000095.html +22 -0
  299. data/doc/classes/Dnsruby/ZoneTransfer.src/M000096.html +35 -0
  300. data/doc/classes/Dnsruby.html +388 -0
  301. data/doc/created.rid +1 -0
  302. data/doc/files/lib/Dnsruby/Config_rb.html +101 -0
  303. data/doc/files/lib/Dnsruby/DNSSEC_rb.html +101 -0
  304. data/doc/files/lib/Dnsruby/DNS_rb.html +110 -0
  305. data/doc/files/lib/Dnsruby/Hosts_rb.html +108 -0
  306. data/doc/files/lib/Dnsruby/Resolver_rb.html +108 -0
  307. data/doc/files/lib/Dnsruby/SingleResolver_rb.html +108 -0
  308. data/doc/files/lib/Dnsruby/TheLog_rb.html +110 -0
  309. data/doc/files/lib/Dnsruby/code_mapper_rb.html +101 -0
  310. data/doc/files/lib/Dnsruby/ipv4_rb.html +101 -0
  311. data/doc/files/lib/Dnsruby/ipv6_rb.html +101 -0
  312. data/doc/files/lib/Dnsruby/message_rb.html +109 -0
  313. data/doc/files/lib/Dnsruby/name_rb.html +101 -0
  314. data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +101 -0
  315. data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +101 -0
  316. data/doc/files/lib/Dnsruby/resource/A_rb.html +101 -0
  317. data/doc/files/lib/Dnsruby/resource/CERT_rb.html +101 -0
  318. data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +101 -0
  319. data/doc/files/lib/Dnsruby/resource/IN_rb.html +112 -0
  320. data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +101 -0
  321. data/doc/files/lib/Dnsruby/resource/LOC_rb.html +101 -0
  322. data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +101 -0
  323. data/doc/files/lib/Dnsruby/resource/MX_rb.html +101 -0
  324. data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +101 -0
  325. data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +101 -0
  326. data/doc/files/lib/Dnsruby/resource/OPT_rb.html +101 -0
  327. data/doc/files/lib/Dnsruby/resource/PX_rb.html +101 -0
  328. data/doc/files/lib/Dnsruby/resource/RP_rb.html +101 -0
  329. data/doc/files/lib/Dnsruby/resource/RT_rb.html +101 -0
  330. data/doc/files/lib/Dnsruby/resource/SOA_rb.html +101 -0
  331. data/doc/files/lib/Dnsruby/resource/SPF_rb.html +101 -0
  332. data/doc/files/lib/Dnsruby/resource/SRV_rb.html +101 -0
  333. data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +101 -0
  334. data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +110 -0
  335. data/doc/files/lib/Dnsruby/resource/TXT_rb.html +108 -0
  336. data/doc/files/lib/Dnsruby/resource/X25_rb.html +101 -0
  337. data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +101 -0
  338. data/doc/files/lib/Dnsruby/resource/generic_rb.html +125 -0
  339. data/doc/files/lib/Dnsruby/resource/resource_rb.html +110 -0
  340. data/doc/files/lib/Dnsruby/select_thread_rb.html +111 -0
  341. data/doc/files/lib/Dnsruby/update_rb.html +101 -0
  342. data/doc/files/lib/Dnsruby/zone_transfer_rb.html +101 -0
  343. data/doc/files/lib/dnsruby_rb.html +118 -0
  344. data/doc/fr_class_index.html +102 -0
  345. data/doc/fr_file_index.html +68 -0
  346. data/doc/fr_method_index.html +256 -0
  347. data/doc/index.html +24 -0
  348. data/lib/Dnsruby/Config.rb +350 -0
  349. data/lib/Dnsruby/DNS.rb +253 -0
  350. data/lib/Dnsruby/DNSSEC.rb +29 -0
  351. data/lib/Dnsruby/Hosts.rb +119 -0
  352. data/lib/Dnsruby/Resolver.rb +618 -0
  353. data/lib/Dnsruby/SingleResolver.rb +312 -0
  354. data/lib/Dnsruby/TheLog.rb +61 -0
  355. data/lib/Dnsruby/code_mapper.rb +164 -0
  356. data/lib/Dnsruby/ipv4.rb +83 -0
  357. data/lib/Dnsruby/ipv6.rb +142 -0
  358. data/lib/Dnsruby/message.rb +819 -0
  359. data/lib/Dnsruby/name.rb +325 -0
  360. data/lib/Dnsruby/resource/A.rb +56 -0
  361. data/lib/Dnsruby/resource/AAAA.rb +54 -0
  362. data/lib/Dnsruby/resource/AFSDB.rb +68 -0
  363. data/lib/Dnsruby/resource/CERT.rb +89 -0
  364. data/lib/Dnsruby/resource/HINFO.rb +52 -0
  365. data/lib/Dnsruby/resource/IN.rb +69 -0
  366. data/lib/Dnsruby/resource/ISDN.rb +54 -0
  367. data/lib/Dnsruby/resource/LOC.rb +255 -0
  368. data/lib/Dnsruby/resource/MINFO.rb +66 -0
  369. data/lib/Dnsruby/resource/MX.rb +66 -0
  370. data/lib/Dnsruby/resource/NAPTR.rb +90 -0
  371. data/lib/Dnsruby/resource/NSAP.rb +172 -0
  372. data/lib/Dnsruby/resource/OPT.rb +153 -0
  373. data/lib/Dnsruby/resource/PX.rb +71 -0
  374. data/lib/Dnsruby/resource/RP.rb +67 -0
  375. data/lib/Dnsruby/resource/RT.rb +67 -0
  376. data/lib/Dnsruby/resource/SOA.rb +89 -0
  377. data/lib/Dnsruby/resource/SPF.rb +29 -0
  378. data/lib/Dnsruby/resource/SRV.rb +108 -0
  379. data/lib/Dnsruby/resource/TKEY.rb +160 -0
  380. data/lib/Dnsruby/resource/TSIG.rb +328 -0
  381. data/lib/Dnsruby/resource/TXT.rb +76 -0
  382. data/lib/Dnsruby/resource/X25.rb +53 -0
  383. data/lib/Dnsruby/resource/domain_name.rb +58 -0
  384. data/lib/Dnsruby/resource/generic.rb +142 -0
  385. data/lib/Dnsruby/resource/resource.rb +444 -0
  386. data/lib/Dnsruby/select_thread.rb +474 -0
  387. data/lib/Dnsruby/update.rb +263 -0
  388. data/lib/Dnsruby/zone_transfer.rb +296 -0
  389. data/lib/dnsruby.rb +468 -0
  390. data/test/custom.txt +4 -0
  391. data/test/resolv.conf +4 -0
  392. data/test/tc_axfr.rb +42 -0
  393. data/test/tc_dns.rb +231 -0
  394. data/test/tc_dnsruby.rb +42 -0
  395. data/test/tc_escapedchars.rb +510 -0
  396. data/test/tc_header.rb +104 -0
  397. data/test/tc_misc.rb +139 -0
  398. data/test/tc_name.rb +53 -0
  399. data/test/tc_packet.rb +158 -0
  400. data/test/tc_packet_unique_push.rb +102 -0
  401. data/test/tc_question.rb +52 -0
  402. data/test/tc_res_config.rb +92 -0
  403. data/test/tc_res_env.rb +62 -0
  404. data/test/tc_res_file.rb +42 -0
  405. data/test/tc_res_opt.rb +185 -0
  406. data/test/tc_resolver.rb +177 -0
  407. data/test/tc_rr-opt.rb +42 -0
  408. data/test/tc_rr-txt.rb +137 -0
  409. data/test/tc_rr-unknown.rb +99 -0
  410. data/test/tc_rr.rb +259 -0
  411. data/test/tc_single_resolver.rb +153 -0
  412. data/test/tc_soak.rb +310 -0
  413. data/test/tc_tcp.rb +35 -0
  414. data/test/tc_tkey.rb +106 -0
  415. data/test/tc_update.rb +215 -0
  416. data/test/ts_dnsruby.rb +17 -0
  417. data/test/ts_offline.rb +35 -0
  418. data/test/ts_online.rb +40 -0
  419. metadata +512 -0
@@ -0,0 +1,108 @@
1
+ #--
2
+ #Copyright 2007 Nominet UK
3
+ #
4
+ #Licensed under the Apache License, Version 2.0 (the "License");
5
+ #you may not use this file except in compliance with the License.
6
+ #You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ #Unless required by applicable law or agreed to in writing, software
11
+ #distributed under the License is distributed on an "AS IS" BASIS,
12
+ #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ #See the License for the specific language governing permissions and
14
+ #limitations under the License.
15
+ #++
16
+ module Dnsruby
17
+ class RR
18
+ module IN
19
+ # SRV resource record defined in RFC 2782
20
+ #
21
+ # These records identify the hostname and port that a service is
22
+ # available at.
23
+ #
24
+ # The format is:
25
+ # _Service._Proto.Name TTL Class SRV Priority Weight Port Target
26
+ #
27
+ # The fields specific to SRV are defined in RFC 2782 as meaning:
28
+ # - +priority+ The priority of this target host. A client MUST attempt
29
+ # to contact the target host with the lowest-numbered priority it can
30
+ # reach; target hosts with the same priority SHOULD be tried in an
31
+ # order defined by the weight field. The range is 0-65535. Note that
32
+ # it is not widely implemented and should be set to zero.
33
+ #
34
+ # - +weight+ A server selection mechanism. The weight field specifies
35
+ # a relative weight for entries with the same priority. Larger weights
36
+ # SHOULD be given a proportionately higher probability of being
37
+ # selected. The range of this number is 0-65535. Domain administrators
38
+ # SHOULD use Weight 0 when there isn't any server selection to do, to
39
+ # make the RR easier to read for humans (less noisy). Note that it is
40
+ # not widely implemented and should be set to zero.
41
+ #
42
+ # - +port+ The port on this target host of this service. The range is 0-
43
+ # 65535.
44
+ #
45
+ # - +target+ The domain name of the target host. A target of "." means
46
+ # that the service is decidedly not available at this domain.
47
+ class SRV < RR
48
+ ClassHash[[TypeValue = Types::SRV, ClassValue = ClassValue]] = self #:nodoc: all
49
+
50
+ attr_accessor :priority, :weight, :port, :target
51
+
52
+ def from_data(data) #:nodoc: all
53
+ @priority, @weight, @port, @target = data
54
+ end
55
+
56
+ def from_hash(hash)
57
+ if hash[:priority]
58
+ @priority = hash[:priority].to_int
59
+ end
60
+ if hash[:weight]
61
+ @weight = hash[:weight].to_int
62
+ end
63
+ if hash[:port]
64
+ @port = hash[:port].to_int
65
+ end
66
+ if hash[:target]
67
+ @target= Name.create(hash[:target])
68
+ end
69
+ end
70
+
71
+ def from_string(input)
72
+ if (input.length > 0)
73
+ names = input.split(" ")
74
+ @priority = names[0]
75
+ @weight = names[1]
76
+ @port = names[2]
77
+ if (names[3])
78
+ @target = Name.create(names[3])
79
+ end
80
+ end
81
+ end
82
+
83
+ def rdata_to_string
84
+ if (@target!=nil)
85
+ return "#{@priority} #{@weight} #{@port} #{@target}"
86
+ else
87
+ return ""
88
+ end
89
+ end
90
+
91
+ def encode_rdata(msg, canonical=false) #:nodoc: all
92
+ msg.put_pack("n", @priority)
93
+ msg.put_pack("n", @weight)
94
+ msg.put_pack("n", @port)
95
+ msg.put_name(@target,canonical)
96
+ end
97
+
98
+ def self.decode_rdata(msg) #:nodoc: all
99
+ priority, = msg.get_unpack("n")
100
+ weight, = msg.get_unpack("n")
101
+ port, = msg.get_unpack("n")
102
+ target = msg.get_name
103
+ return self.new([priority, weight, port, target])
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,160 @@
1
+ #--
2
+ #Copyright 2007 Nominet UK
3
+ #
4
+ #Licensed under the Apache License, Version 2.0 (the "License");
5
+ #you may not use this file except in compliance with the License.
6
+ #You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ #Unless required by applicable law or agreed to in writing, software
11
+ #distributed under the License is distributed on an "AS IS" BASIS,
12
+ #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ #See the License for the specific language governing permissions and
14
+ #limitations under the License.
15
+ #++
16
+ module Dnsruby
17
+
18
+ class Modes < CodeMapper
19
+ # The key is assigned by the server (unimplemented)
20
+ SERVERASSIGNED = 1
21
+
22
+ # The key is computed using a Diffie-Hellman key exchange
23
+ DIFFIEHELLMAN = 2
24
+
25
+ # The key is computed using GSS_API (unimplemented)
26
+ GSSAPI = 3
27
+
28
+ # The key is assigned by the resolver (unimplemented)
29
+ RESOLVERASSIGNED = 4
30
+
31
+ # The key should be deleted
32
+ DELETE = 5
33
+ update()
34
+ end
35
+
36
+ class RR
37
+ #@TODO@ Implement this RR!
38
+ #RFC2930
39
+ class TKEY < RR
40
+ ClassHash[[TypeValue = Types::TKEY, ClassValue = Classes.ANY]] = self #:nodoc: all
41
+
42
+ attr_reader :key_size
43
+ attr_accessor :key
44
+ #Gets or sets the domain name that specifies the name of the algorithm.
45
+ #The default algorithm is gss.microsoft.com
46
+ #
47
+ # rr.algorithm=(algorithm_name)
48
+ # print "algorithm = ", rr.algorithm, "\n"
49
+ #
50
+ attr_accessor :algorithm
51
+ #Gets or sets the inception time as the number of seconds since 1 Jan 1970
52
+ #00:00:00 UTC.
53
+ #
54
+ #The default inception time is the current time.
55
+ #
56
+ # rr.inception=(time)
57
+ # print "inception = ", rr.inception, "\n"
58
+ #
59
+ attr_accessor :inception
60
+ #Gets or sets the expiration time as the number of seconds since 1 Jan 1970
61
+ #00:00:00 UTC.
62
+ #
63
+ #The default expiration time is the current time plus 1 day.
64
+ #
65
+ # rr.expiration=(time)
66
+ # print "expiration = ", rr.expiration, "\n"
67
+ #
68
+ attr_accessor :expiration
69
+ #Sets the key mode (see rfc2930). The default is 3 which corresponds to GSSAPI
70
+ #
71
+ # rr.mode=(3)
72
+ # print "mode = ", rr.mode, "\n"
73
+ #
74
+ attr_accessor :mode
75
+ #Returns the RCODE covering TKEY processing. See RFC 2930 for details.
76
+ #
77
+ # print "error = ", rr.error, "\n"
78
+ #
79
+ attr_accessor :error
80
+ #Returns the length of the Other Data. Should be zero.
81
+ #
82
+ # print "other size = ", rr.other_size, "\n"
83
+ #
84
+ attr_reader :other_size
85
+ #Returns the Other Data. This field should be empty.
86
+ #
87
+ # print "other data = ", rr.other_data, "\n"
88
+ #
89
+ attr_accessor :other_data
90
+
91
+ def other_data=(od)
92
+ @other_data=od
93
+ @other_size=@other_data.length
94
+ end
95
+
96
+ def initialize
97
+ @algorithm = "gss.microsoft.com"
98
+ @inception = Time.now
99
+ @expiration = Time.now + 24*60*60
100
+ @mode = Modes.GSSAPI
101
+ @error = 0
102
+ @other_size = 0
103
+ @other_data = ""
104
+
105
+ # RFC 2845 Section 2.3
106
+ @klass = Classes.ANY
107
+ # RFC 2845 Section 2.3
108
+ @ttl = 0
109
+ end
110
+
111
+ def from_data(data) #:nodoc: all
112
+ @algorithm, @inception, @expiration, @mode, @error, @key_size, @key, @other_size, @other_data = data
113
+ end
114
+
115
+ # Create the RR from a standard string
116
+ def from_string(string) #:nodoc: all
117
+ TheLog.error("Dnsruby::RR::TKEY#from_string called, but no text format defined for TKEY")
118
+ # # There isn't a standard string for TKEY so the key can be loaded here
119
+ # if (string != nil && (string =~ /^(.*)$/))
120
+ # @key = $1;
121
+ # end
122
+ end
123
+
124
+ def rdata_to_string
125
+ #@TODO@ Provide more info?
126
+ rdatastr=""
127
+
128
+ if (@algorithm!=nil)
129
+ error = @error
130
+ error = "UNDEFINED" unless error!=nil
131
+ rdatastr = "#{@algorithm}. #{error}"
132
+ if (@other_size != nil && @other_size >0 && @other_data!=nil)
133
+ rdatastr += " #{@other_data}"
134
+ end
135
+ end
136
+
137
+ return rdatastr
138
+ end
139
+
140
+ def encode_rdata(msg) #:nodoc: all
141
+ msg.put_name(@algorithm)
142
+ msg.put_pack("NNnn", @inception, @expiration, @mode, @error)
143
+ msg.put_pack("n", @key.length)
144
+ msg.put_bytes(@key)
145
+ msg.put_pack("n", @other_data.length)
146
+ msg.put_bytes(@other_data)
147
+ end
148
+
149
+ def self.decode_rdata(msg) #:nodoc: all
150
+ alg=msg.get_name
151
+ inc, exp, mode, error = msg.get_unpack("NNnn")
152
+ key_size=msg.get_unpack("n")
153
+ key=msg.get_bytes(key_size)
154
+ other_size=msg.get_unpack("n")
155
+ other=msg.get_bytes(other_size)
156
+ return self.new(alg, inc, exp, mode, error, key_size, key, other_size, other)
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,328 @@
1
+ #--
2
+ #Copyright 2007 Nominet UK
3
+ #
4
+ #Licensed under the Apache License, Version 2.0 (the "License");
5
+ #you may not use this file except in compliance with the License.
6
+ #You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ #Unless required by applicable law or agreed to in writing, software
11
+ #distributed under the License is distributed on an "AS IS" BASIS,
12
+ #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ #See the License for the specific language governing permissions and
14
+ #limitations under the License.
15
+ #++
16
+ require 'base64'
17
+ require "digest/md5"
18
+ require "digest/sha1"
19
+ #require "digest/sha256"
20
+ module Dnsruby
21
+ class RR
22
+ class TSIG < RR
23
+ HMAC_MD5 = Name.create("HMAC-MD5.SIG-ALG.REG.INT")
24
+ HMAC_SHA1 = Name.create("hmac-sha1.")
25
+ HMAC_SHA256 = Name.create("hmac-sha256.")
26
+
27
+ DEFAULT_FUDGE = 300
28
+
29
+ DEFAULT_ALGORITHM = HMAC_MD5
30
+
31
+ # Generates a TSIG record and adds it to the message.
32
+ def apply(message)
33
+ if (!message.is_signed)
34
+ generate(message)
35
+ message.add_additional(self)
36
+ message.tsigstate = :Signed
37
+ end
38
+ end
39
+
40
+ # Generates a TSIG record
41
+ def generate(m)
42
+ if (!@time_signed)
43
+ time_signed=Time.now
44
+ end
45
+ hmac = nil
46
+ if (@algorithm == HMAC_MD5)
47
+ hmac = Digest::MD5.new
48
+ elsif (@algorithm == HMAC_SHA1)
49
+ hmac=Digest::SHA1.new
50
+ elsif (@algorithm == HMAC_SHA256)
51
+ hmac=Digest::SHA256.new
52
+ end
53
+ hmac.update(@key)
54
+
55
+ s=""
56
+ @key.length.times do |i|
57
+ s << @key[i].to_s + ","
58
+ end
59
+
60
+ print "key : #{s}\n"
61
+
62
+ b = m.encode
63
+ s=""
64
+ b.length.times do |i|
65
+ s << b[i].to_s + ","
66
+ end
67
+ print "encoded message : #{s}\n"
68
+
69
+ # Digest the message
70
+ if (hmac)
71
+ hmac.update(b) # @TODO@ b is RENDERED MESSAGE!! NOT m.encode!
72
+ # Dnsjava has render method for messages
73
+ # pnet-dns signs message during encoding process.
74
+ end
75
+
76
+ data = sig_data
77
+ s=""
78
+
79
+ data.length.times do |i|
80
+ s << data[i].to_s + ","
81
+ end
82
+
83
+ print "encoded TSIG : #{s}\n"
84
+ hmac.update(data)
85
+
86
+ @mac = hmac.digest
87
+ @mac_size = @mac.length
88
+
89
+ s=""
90
+
91
+ @mac.length.times do |i|
92
+ s << @mac[i].to_s + ","
93
+ end
94
+ print "hmac : #{s}\n"
95
+
96
+ end
97
+
98
+ def sig_data
99
+ return MessageEncoder.new { |msg|
100
+ msg.put_name(name.downcase)
101
+ msg.put_pack('nN', @klass.code, @ttl)
102
+ print "Alg : #{@algorithm}\n"
103
+ #@TODO@ ALGORITHM IS GOING TO LOWER-CASE!!!
104
+ msg.put_name(@algorithm.downcase)
105
+
106
+ time_high = (@time_signed >> 32)
107
+ time_low = (@time_signed & 0xFFFFFFFF)
108
+ print "time_signed : #{@time_signed}, high : #{time_high}, low : #{time_low}\n"
109
+ msg.put_pack('nN', time_high, time_low)
110
+ msg.put_pack('n', @fudge)
111
+ print "Fudge : #{@fudge}\n"
112
+ msg.put_pack('n', @error)
113
+ print "Error : #{@error}\n"
114
+ msg.put_pack('n', 0) # no other data
115
+ }.to_s
116
+ end
117
+
118
+ def self.verify()
119
+ # 3.2. TSIG processing on incoming messages
120
+ #
121
+ # If an incoming message contains a TSIG record, it MUST be the last
122
+ # record in the additional section. Multiple TSIG records are not
123
+ # allowed. If a TSIG record is present in any other position, the
124
+ # packet is dropped and a response with RCODE 1 (FORMERR) MUST be
125
+ # returned. Upon receipt of a message with a correctly placed TSIG RR,
126
+ # the TSIG RR is copied to a safe location, removed from the DNS
127
+ # Message, and decremented out of the DNS message header's ARCOUNT. At
128
+ # this point the keyed message digest operation is performed. If the
129
+ # algorithm name or key name is unknown to the recipient, or if the
130
+ # message digests do not match, the whole DNS message MUST be
131
+ # discarded. If the message is a query, a response with RCODE 9
132
+ # (NOTAUTH) MUST be sent back to the originator with TSIG ERROR 17
133
+ # (BADKEY) or TSIG ERROR 16 (BADSIG). If no key is available to sign
134
+ # this message it MUST be sent unsigned (MAC size == 0 and empty MAC).
135
+ # A message to the system operations log SHOULD be generated, to warn
136
+ # the operations staff of a possible security incident in progress.
137
+ # Care should be taken to ensure that logging of this type of event
138
+ # does not open the system to a denial of service attack.
139
+ end
140
+
141
+ ClassHash[[TypeValue = Types::TSIG, ClassValue = Classes.ANY]] = self #:nodoc: all
142
+
143
+ #Gets or sets the domain name that specifies the name of the algorithm.
144
+ #The only algorithm currently supported is HMAC-MD5.SIG-ALG.REG.INT.
145
+ #
146
+ # rr.algorithm=(algorithm_name)
147
+ # print "algorithm = ", rr.algorithm, "\n"
148
+ #
149
+ attr_accessor :algorithm
150
+
151
+ #Gets or sets the signing time as the number of seconds since 1 Jan 1970
152
+ #00:00:00 UTC.
153
+ #
154
+ #The default signing time is the current time.
155
+ #
156
+ # rr.time_signed=(time)
157
+ # print "time signed = ", rr.time_signed, "\n"
158
+ #
159
+ attr_accessor :time_signed
160
+
161
+ #Gets or sets the "fudge", i.e., the seconds of error permitted in the
162
+ #signing time.
163
+ #
164
+ #The default fudge is 300 seconds.
165
+ #
166
+ # rr.fudge=(60)
167
+ # print "fudge = ", rr.fudge, "\n"
168
+ #
169
+ attr_accessor :fudge
170
+
171
+ #Returns the number of octets in the message authentication code (MAC).
172
+ #The programmer must call a Net::DNS::Packet object's data method
173
+ #before this will return anything meaningful.
174
+ #
175
+ # print "MAC size = ", rr.mac_size, "\n"
176
+ #
177
+ attr_writer :mac_size
178
+
179
+ #Returns the message authentication code (MAC) as a string of hex
180
+ #characters. The programmer must call a Net::DNS::Packet object's
181
+ #data method before this will return anything meaningful.
182
+ #
183
+ # print "MAC = ", rr.mac, "\n"
184
+ #
185
+ attr_accessor :mac
186
+
187
+ #Gets or sets the original message ID.
188
+ #
189
+ # rr.original_id(12345)
190
+ # print "original ID = ", rr.original_id, "\n"
191
+ #
192
+ attr_accessor :original_id
193
+
194
+ #Returns the RCODE covering TSIG processing. Common values are
195
+ #NOERROR, BADSIG, BADKEY, and BADTIME. See RFC 2845 for details.
196
+ #
197
+ # print "error = ", rr.error, "\n"
198
+ #
199
+ attr_writer :error
200
+
201
+ #Returns the length of the Other Data. Should be zero unless the
202
+ #error is BADTIME.
203
+ #
204
+ # print "other len = ", rr.other_size, "\n"
205
+ #
206
+ attr_accessor :other_size
207
+
208
+ #Returns the Other Data. This field should be empty unless the
209
+ #error is BADTIME, in which case it will contain the server's
210
+ #time as the number of seconds since 1 Jan 1970 00:00:00 UTC.
211
+ #
212
+ # print "other data = ", rr.other_data, "\n"
213
+ #
214
+ attr_accessor :other_data
215
+ attr_accessor :key
216
+
217
+ def initialize
218
+ @algorithm = DEFAULT_ALGORITHM
219
+ @time_signed = Time.now.to_i
220
+ @fudge = DEFAULT_FUDGE
221
+ @mac_size = 0
222
+ @mac = ""
223
+ @original_id = 0
224
+ @error = 0
225
+ @other_size = 0
226
+ @other_data = nil
227
+
228
+ # RFC 2845 Section 2.3
229
+ @klass = "ANY"
230
+
231
+ @ttl = 0 # RFC 2845 Section 2.3
232
+ end
233
+
234
+ def from_data(data) #:nodoc: all
235
+ @algorithm, @time_signed, @fudge, @mac_size, @mac, @original_id, @error, @other_size, @other_data = data
236
+ end
237
+
238
+ # Create the RR from a standard string
239
+ def from_string(str) #:nodoc: all
240
+ parts = str.split("[:/]")
241
+ if (parts.length < 2 || parts.length > 3)
242
+ raise ArgumentException.new("Invalid TSIG key specification")
243
+ end
244
+ if (parts.length == 3)
245
+ return TSIG.new(parts[0], parts[1], parts[2]);
246
+ else
247
+ return TSIG.new(HMAC_MD5, parts[0], parts[1]);
248
+ end
249
+ end
250
+
251
+ def algorithm=(alg)
252
+ case alg.class
253
+ when String
254
+ if (alg.downcase=="hmac-md5")
255
+ @algorithm = HMAC_MD5;
256
+ elsif (algorithm.downcase=="hmac-sha1")
257
+ @algorithm = HMAC_SHA1;
258
+ elsif (algorithm.downcase=="hmac-sha256")
259
+ @algorithm = HMAC_SHA256;
260
+ else
261
+ raise ArgumentException.new("Invalid TSIG algorithm")
262
+ end
263
+ when Name
264
+ if (alg!=HMAC_MD5 && alg!=HMAC_SHA1 && alg!=HMAC_SHA256)
265
+ raise ArgumentException.new("Invalid TSIG algorithm")
266
+ end
267
+ @algorithm=alg
268
+ end
269
+ end
270
+
271
+ def fudge=(f)
272
+ if (f < 0 || f > 0x7FFF)
273
+ @fudge = DEFAULT_FUDGE
274
+ else
275
+ @fudge = f
276
+ end
277
+ end
278
+
279
+ def rdata_to_string
280
+ #@TODO@ Provide more info?
281
+ rdatastr=""
282
+ if (@algorithm!=nil)
283
+ error = @error
284
+ error = "UNDEFINED" unless error!=nil
285
+ rdatastr = "#{@algorithm}. #{error}";
286
+ if (@other_size > 0 && @other_data!=nil)
287
+ rdatastr += " #{@other_data}"
288
+ end
289
+ end
290
+
291
+ return rdatastr
292
+ end
293
+
294
+ def encode_rdata(msg) #:nodoc: all
295
+ msg.put_name(@algorithm)
296
+ time_high = (@time_signed >> 32)
297
+ time_low = (@time_signed & 0xFFFFFFFF)
298
+ msg.put_pack('nN', time_high, time_low)
299
+ msg.put_pack('n', @fudge)
300
+ msg.put_pack('n', @mac_size)
301
+ msg.put_bytes(@mac)
302
+ msg.put_pack('n', @original_id)
303
+ msg.put_pack('n', @error)
304
+ msg.put_pack('n', @other_size)
305
+ if (@other_size > 0)
306
+ msg.put_bytes(@other_data)
307
+ end
308
+ end
309
+
310
+ def self.decode_rdata(msg) #:nodoc: all
311
+ alg=msg.get_name
312
+ time_high, time_low = msg.get_unpack("nN")
313
+ time_signed = (timeHigh << 32) + timeLow
314
+ fudge = msg.get_unpack("n")
315
+ mac_size = msg.get_unpack("n")
316
+ mac = msg.get_string
317
+ original_id = msg.get_unpack("n")
318
+ error = msg.get_unpack("n")
319
+ other_size = msg.get_unpack("n")
320
+ other_data=""
321
+ if (other_size > 0)
322
+ other_data = msg.get_bytes(other_size)
323
+ end
324
+ return self.new(alg, time_signed, fudge, mac_size, mac, original_id, error, other_size, other_data)
325
+ end
326
+ end
327
+ end
328
+ end
@@ -0,0 +1,76 @@
1
+ #--
2
+ #Copyright 2007 Nominet UK
3
+ #
4
+ #Licensed under the Apache License, Version 2.0 (the "License");
5
+ #you may not use this file except in compliance with the License.
6
+ #You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ #Unless required by applicable law or agreed to in writing, software
11
+ #distributed under the License is distributed on an "AS IS" BASIS,
12
+ #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ #See the License for the specific language governing permissions and
14
+ #limitations under the License.
15
+ #++
16
+ require 'shellwords'
17
+ module Dnsruby
18
+ class RR
19
+ #Class for DNS Text (TXT) resource records.
20
+ #RFC 1035 Section 3.3.14
21
+ class TXT < RR
22
+ ClassValue = nil #:nodoc: all
23
+ TypeValue = Types::TXT #:nodoc: all
24
+
25
+ #List of the individual elements
26
+ attr_accessor :strings
27
+
28
+ def data
29
+ @strings[0]
30
+ end
31
+
32
+ def from_data(data)
33
+ @strings = data
34
+ end
35
+
36
+ def from_hash(hash)
37
+ if (hash.has_key?:strings)
38
+ from_string(hash[:strings])
39
+ end
40
+ end
41
+
42
+ def from_string(input)
43
+ words = Shellwords.shellwords(input)
44
+
45
+ @strings=[]
46
+
47
+ if (words != nil)
48
+ words.each { |string|
49
+ string .gsub!(/\\"/, '"')
50
+ @strings.push(string)
51
+ }
52
+ end
53
+ end
54
+
55
+ def rdata_to_string
56
+ if (defined?@strings)
57
+ temp = @strings.map {|str|
58
+ str.gsub(/"/, '\\"')
59
+ %<"#{str}">
60
+ }
61
+ return temp.join(' ')
62
+ end
63
+ return ''
64
+ end
65
+
66
+ def encode_rdata(msg) #:nodoc: all
67
+ msg.put_string_list(@strings)
68
+ end
69
+
70
+ def self.decode_rdata(msg) #:nodoc: all
71
+ strings = msg.get_string_list
72
+ return self.new(strings)
73
+ end
74
+ end
75
+ end
76
+ end