dnsruby 1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (520) hide show
  1. data/EVENTMACHINE +64 -0
  2. data/README +63 -0
  3. data/doc/classes/Dnsruby.html +463 -0
  4. data/doc/classes/Dnsruby/Algorithms.html +171 -0
  5. data/doc/classes/Dnsruby/Classes.html +197 -0
  6. data/doc/classes/Dnsruby/Classes.src/M000209.html +23 -0
  7. data/doc/classes/Dnsruby/Classes.src/M000210.html +19 -0
  8. data/doc/classes/Dnsruby/CodeMapper.html +375 -0
  9. data/doc/classes/Dnsruby/CodeMapper.src/M000186.html +18 -0
  10. data/doc/classes/Dnsruby/CodeMapper.src/M000187.html +33 -0
  11. data/doc/classes/Dnsruby/CodeMapper.src/M000188.html +21 -0
  12. data/doc/classes/Dnsruby/CodeMapper.src/M000189.html +19 -0
  13. data/doc/classes/Dnsruby/CodeMapper.src/M000190.html +19 -0
  14. data/doc/classes/Dnsruby/CodeMapper.src/M000191.html +18 -0
  15. data/doc/classes/Dnsruby/CodeMapper.src/M000192.html +22 -0
  16. data/doc/classes/Dnsruby/CodeMapper.src/M000193.html +22 -0
  17. data/doc/classes/Dnsruby/CodeMapper.src/M000194.html +22 -0
  18. data/doc/classes/Dnsruby/CodeMapper.src/M000195.html +31 -0
  19. data/doc/classes/Dnsruby/CodeMapper.src/M000196.html +19 -0
  20. data/doc/classes/Dnsruby/Config.html +413 -0
  21. data/doc/classes/Dnsruby/Config.src/M000148.html +18 -0
  22. data/doc/classes/Dnsruby/Config.src/M000149.html +19 -0
  23. data/doc/classes/Dnsruby/Config.src/M000150.html +19 -0
  24. data/doc/classes/Dnsruby/Config.src/M000151.html +25 -0
  25. data/doc/classes/Dnsruby/Config.src/M000152.html +21 -0
  26. data/doc/classes/Dnsruby/Config.src/M000153.html +38 -0
  27. data/doc/classes/Dnsruby/Config.src/M000154.html +26 -0
  28. data/doc/classes/Dnsruby/Config.src/M000155.html +22 -0
  29. data/doc/classes/Dnsruby/Config.src/M000156.html +27 -0
  30. data/doc/classes/Dnsruby/Config.src/M000157.html +22 -0
  31. data/doc/classes/Dnsruby/Config.src/M000158.html +21 -0
  32. data/doc/classes/Dnsruby/DNS.html +571 -0
  33. data/doc/classes/Dnsruby/DNS.src/M000258.html +24 -0
  34. data/doc/classes/Dnsruby/DNS.src/M000259.html +18 -0
  35. data/doc/classes/Dnsruby/DNS.src/M000260.html +18 -0
  36. data/doc/classes/Dnsruby/DNS.src/M000261.html +20 -0
  37. data/doc/classes/Dnsruby/DNS.src/M000262.html +19 -0
  38. data/doc/classes/Dnsruby/DNS.src/M000263.html +20 -0
  39. data/doc/classes/Dnsruby/DNS.src/M000264.html +18 -0
  40. data/doc/classes/Dnsruby/DNS.src/M000265.html +19 -0
  41. data/doc/classes/Dnsruby/DNS.src/M000266.html +20 -0
  42. data/doc/classes/Dnsruby/DNS.src/M000267.html +28 -0
  43. data/doc/classes/Dnsruby/DNS.src/M000268.html +19 -0
  44. data/doc/classes/Dnsruby/DNS.src/M000269.html +20 -0
  45. data/doc/classes/Dnsruby/DNS.src/M000270.html +31 -0
  46. data/doc/classes/Dnsruby/DecodeError.html +120 -0
  47. data/doc/classes/Dnsruby/Dnssec.html +287 -0
  48. data/doc/classes/Dnsruby/Dnssec.src/M000249.html +23 -0
  49. data/doc/classes/Dnsruby/Dnssec.src/M000250.html +19 -0
  50. data/doc/classes/Dnsruby/Dnssec.src/M000251.html +90 -0
  51. data/doc/classes/Dnsruby/Dnssec.src/M000252.html +76 -0
  52. data/doc/classes/Dnsruby/EncodeError.html +120 -0
  53. data/doc/classes/Dnsruby/FormErr.html +119 -0
  54. data/doc/classes/Dnsruby/Header.html +501 -0
  55. data/doc/classes/Dnsruby/Header.src/M000231.html +35 -0
  56. data/doc/classes/Dnsruby/Header.src/M000232.html +18 -0
  57. data/doc/classes/Dnsruby/Header.src/M000233.html +18 -0
  58. data/doc/classes/Dnsruby/Header.src/M000234.html +21 -0
  59. data/doc/classes/Dnsruby/Header.src/M000235.html +20 -0
  60. data/doc/classes/Dnsruby/Header.src/M000236.html +32 -0
  61. data/doc/classes/Dnsruby/Header.src/M000237.html +27 -0
  62. data/doc/classes/Dnsruby/Header.src/M000238.html +26 -0
  63. data/doc/classes/Dnsruby/Header.src/M000239.html +47 -0
  64. data/doc/classes/Dnsruby/Header.src/M000240.html +28 -0
  65. data/doc/classes/Dnsruby/Header.src/M000241.html +30 -0
  66. data/doc/classes/Dnsruby/Hosts.html +316 -0
  67. data/doc/classes/Dnsruby/Hosts.src/M000197.html +20 -0
  68. data/doc/classes/Dnsruby/Hosts.src/M000198.html +19 -0
  69. data/doc/classes/Dnsruby/Hosts.src/M000199.html +20 -0
  70. data/doc/classes/Dnsruby/Hosts.src/M000200.html +21 -0
  71. data/doc/classes/Dnsruby/Hosts.src/M000201.html +19 -0
  72. data/doc/classes/Dnsruby/Hosts.src/M000202.html +20 -0
  73. data/doc/classes/Dnsruby/Hosts.src/M000203.html +21 -0
  74. data/doc/classes/Dnsruby/IPv4.html +233 -0
  75. data/doc/classes/Dnsruby/IPv4.src/M000204.html +32 -0
  76. data/doc/classes/Dnsruby/IPv4.src/M000205.html +19 -0
  77. data/doc/classes/Dnsruby/IPv4.src/M000206.html +18 -0
  78. data/doc/classes/Dnsruby/IPv4.src/M000207.html +18 -0
  79. data/doc/classes/Dnsruby/IPv4.src/M000208.html +18 -0
  80. data/doc/classes/Dnsruby/IPv6.html +281 -0
  81. data/doc/classes/Dnsruby/IPv6.src/M000242.html +60 -0
  82. data/doc/classes/Dnsruby/IPv6.src/M000243.html +22 -0
  83. data/doc/classes/Dnsruby/IPv6.src/M000244.html +20 -0
  84. data/doc/classes/Dnsruby/IPv6.src/M000245.html +18 -0
  85. data/doc/classes/Dnsruby/Message.html +803 -0
  86. data/doc/classes/Dnsruby/Message.src/M000119.html +38 -0
  87. data/doc/classes/Dnsruby/Message.src/M000120.html +26 -0
  88. data/doc/classes/Dnsruby/Message.src/M000121.html +22 -0
  89. data/doc/classes/Dnsruby/Message.src/M000122.html +22 -0
  90. data/doc/classes/Dnsruby/Message.src/M000123.html +20 -0
  91. data/doc/classes/Dnsruby/Message.src/M000124.html +20 -0
  92. data/doc/classes/Dnsruby/Message.src/M000125.html +20 -0
  93. data/doc/classes/Dnsruby/Message.src/M000126.html +20 -0
  94. data/doc/classes/Dnsruby/Message.src/M000127.html +18 -0
  95. data/doc/classes/Dnsruby/Message.src/M000128.html +20 -0
  96. data/doc/classes/Dnsruby/Message.src/M000129.html +23 -0
  97. data/doc/classes/Dnsruby/Message.src/M000130.html +30 -0
  98. data/doc/classes/Dnsruby/Message.src/M000131.html +20 -0
  99. data/doc/classes/Dnsruby/Message.src/M000132.html +18 -0
  100. data/doc/classes/Dnsruby/Message.src/M000133.html +56 -0
  101. data/doc/classes/Dnsruby/Message.src/M000134.html +35 -0
  102. data/doc/classes/Dnsruby/Message.src/M000135.html +46 -0
  103. data/doc/classes/Dnsruby/Message/Section.html +160 -0
  104. data/doc/classes/Dnsruby/Message/Section.src/M000141.html +29 -0
  105. data/doc/classes/Dnsruby/Message/Section.src/M000142.html +30 -0
  106. data/doc/classes/Dnsruby/MetaTypes.html +136 -0
  107. data/doc/classes/Dnsruby/Modes.html +171 -0
  108. data/doc/classes/Dnsruby/NXDomain.html +119 -0
  109. data/doc/classes/Dnsruby/Name.html +330 -0
  110. data/doc/classes/Dnsruby/Name.src/M000104.html +28 -0
  111. data/doc/classes/Dnsruby/Name.src/M000105.html +20 -0
  112. data/doc/classes/Dnsruby/Name.src/M000106.html +18 -0
  113. data/doc/classes/Dnsruby/Name.src/M000107.html +21 -0
  114. data/doc/classes/Dnsruby/Name.src/M000108.html +22 -0
  115. data/doc/classes/Dnsruby/Name.src/M000109.html +18 -0
  116. data/doc/classes/Dnsruby/Name/Label.html +300 -0
  117. data/doc/classes/Dnsruby/Name/Label.src/M000110.html +21 -0
  118. data/doc/classes/Dnsruby/Name/Label.src/M000111.html +18 -0
  119. data/doc/classes/Dnsruby/Name/Label.src/M000112.html +22 -0
  120. data/doc/classes/Dnsruby/Name/Label.src/M000113.html +18 -0
  121. data/doc/classes/Dnsruby/Name/Label.src/M000114.html +18 -0
  122. data/doc/classes/Dnsruby/Name/Label.src/M000115.html +18 -0
  123. data/doc/classes/Dnsruby/Name/Label.src/M000116.html +18 -0
  124. data/doc/classes/Dnsruby/Name/Label.src/M000117.html +18 -0
  125. data/doc/classes/Dnsruby/Name/Label.src/M000118.html +18 -0
  126. data/doc/classes/Dnsruby/NotImp.html +119 -0
  127. data/doc/classes/Dnsruby/OpCode.html +146 -0
  128. data/doc/classes/Dnsruby/OtherResolvError.html +119 -0
  129. data/doc/classes/Dnsruby/QTypes.html +146 -0
  130. data/doc/classes/Dnsruby/Question.html +301 -0
  131. data/doc/classes/Dnsruby/Question.src/M000226.html +47 -0
  132. data/doc/classes/Dnsruby/Question.src/M000227.html +18 -0
  133. data/doc/classes/Dnsruby/Question.src/M000228.html +18 -0
  134. data/doc/classes/Dnsruby/Question.src/M000229.html +32 -0
  135. data/doc/classes/Dnsruby/Question.src/M000230.html +18 -0
  136. data/doc/classes/Dnsruby/RCode.html +211 -0
  137. data/doc/classes/Dnsruby/RR.html +648 -0
  138. data/doc/classes/Dnsruby/RR.src/M000001.html +18 -0
  139. data/doc/classes/Dnsruby/RR.src/M000002.html +22 -0
  140. data/doc/classes/Dnsruby/RR.src/M000003.html +18 -0
  141. data/doc/classes/Dnsruby/RR.src/M000004.html +18 -0
  142. data/doc/classes/Dnsruby/RR.src/M000005.html +26 -0
  143. data/doc/classes/Dnsruby/RR.src/M000006.html +18 -0
  144. data/doc/classes/Dnsruby/RR.src/M000007.html +36 -0
  145. data/doc/classes/Dnsruby/RR.src/M000008.html +100 -0
  146. data/doc/classes/Dnsruby/RR.src/M000009.html +18 -0
  147. data/doc/classes/Dnsruby/RR.src/M000010.html +18 -0
  148. data/doc/classes/Dnsruby/RR.src/M000011.html +22 -0
  149. data/doc/classes/Dnsruby/RR.src/M000012.html +29 -0
  150. data/doc/classes/Dnsruby/RR.src/M000013.html +24 -0
  151. data/doc/classes/Dnsruby/RR/ANY.html +133 -0
  152. data/doc/classes/Dnsruby/RR/CERT.html +180 -0
  153. data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +169 -0
  154. data/doc/classes/Dnsruby/RR/CNAME.html +151 -0
  155. data/doc/classes/Dnsruby/RR/DNAME.html +150 -0
  156. data/doc/classes/Dnsruby/RR/DNSKEY.html +422 -0
  157. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000044.html +20 -0
  158. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000045.html +21 -0
  159. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000046.html +28 -0
  160. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000047.html +22 -0
  161. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000048.html +18 -0
  162. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000049.html +22 -0
  163. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000050.html +18 -0
  164. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000051.html +26 -0
  165. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000052.html +38 -0
  166. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000053.html +45 -0
  167. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000054.html +21 -0
  168. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000055.html +24 -0
  169. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000056.html +32 -0
  170. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000057.html +24 -0
  171. data/doc/classes/Dnsruby/RR/DS.html +286 -0
  172. data/doc/classes/Dnsruby/RR/DS.src/M000039.html +22 -0
  173. data/doc/classes/Dnsruby/RR/DS.src/M000040.html +28 -0
  174. data/doc/classes/Dnsruby/RR/DS.src/M000041.html +24 -0
  175. data/doc/classes/Dnsruby/RR/DS.src/M000042.html +28 -0
  176. data/doc/classes/Dnsruby/RR/DS.src/M000043.html +36 -0
  177. data/doc/classes/Dnsruby/RR/DomainName.html +175 -0
  178. data/doc/classes/Dnsruby/RR/DomainName.src/M000083.html +18 -0
  179. data/doc/classes/Dnsruby/RR/Generic.html +133 -0
  180. data/doc/classes/Dnsruby/RR/HINFO.html +155 -0
  181. data/doc/classes/Dnsruby/RR/IN.html +155 -0
  182. data/doc/classes/Dnsruby/RR/IN/A.html +200 -0
  183. data/doc/classes/Dnsruby/RR/IN/A.src/M000017.html +18 -0
  184. data/doc/classes/Dnsruby/RR/IN/A.src/M000018.html +18 -0
  185. data/doc/classes/Dnsruby/RR/IN/A.src/M000019.html +18 -0
  186. data/doc/classes/Dnsruby/RR/IN/AAAA.html +139 -0
  187. data/doc/classes/Dnsruby/RR/IN/AFSDB.html +145 -0
  188. data/doc/classes/Dnsruby/RR/IN/PX.html +143 -0
  189. data/doc/classes/Dnsruby/RR/IN/SRV.html +238 -0
  190. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000014.html +29 -0
  191. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +26 -0
  192. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +22 -0
  193. data/doc/classes/Dnsruby/RR/IN/WKS.html +166 -0
  194. data/doc/classes/Dnsruby/RR/IN/WKS.src/M000020.html +20 -0
  195. data/doc/classes/Dnsruby/RR/ISDN.html +155 -0
  196. data/doc/classes/Dnsruby/RR/LOC.html +395 -0
  197. data/doc/classes/Dnsruby/RR/LOC.src/M000025.html +32 -0
  198. data/doc/classes/Dnsruby/RR/LOC.src/M000026.html +23 -0
  199. data/doc/classes/Dnsruby/RR/LOC.src/M000027.html +25 -0
  200. data/doc/classes/Dnsruby/RR/LOC.src/M000028.html +21 -0
  201. data/doc/classes/Dnsruby/RR/LOC.src/M000029.html +20 -0
  202. data/doc/classes/Dnsruby/RR/LOC.src/M000030.html +23 -0
  203. data/doc/classes/Dnsruby/RR/MB.html +150 -0
  204. data/doc/classes/Dnsruby/RR/MG.html +150 -0
  205. data/doc/classes/Dnsruby/RR/MINFO.html +156 -0
  206. data/doc/classes/Dnsruby/RR/MR.html +150 -0
  207. data/doc/classes/Dnsruby/RR/MX.html +155 -0
  208. data/doc/classes/Dnsruby/RR/NAPTR.html +190 -0
  209. data/doc/classes/Dnsruby/RR/NS.html +151 -0
  210. data/doc/classes/Dnsruby/RR/NSAP.html +293 -0
  211. data/doc/classes/Dnsruby/RR/NSAP.src/M000093.html +19 -0
  212. data/doc/classes/Dnsruby/RR/NSAP.src/M000094.html +19 -0
  213. data/doc/classes/Dnsruby/RR/NSAP.src/M000095.html +22 -0
  214. data/doc/classes/Dnsruby/RR/NSAP.src/M000096.html +31 -0
  215. data/doc/classes/Dnsruby/RR/NSEC.html +301 -0
  216. data/doc/classes/Dnsruby/RR/NSEC.src/M000031.html +19 -0
  217. data/doc/classes/Dnsruby/RR/NSEC.src/M000032.html +18 -0
  218. data/doc/classes/Dnsruby/RR/NSEC.src/M000033.html +34 -0
  219. data/doc/classes/Dnsruby/RR/NSEC.src/M000034.html +18 -0
  220. data/doc/classes/Dnsruby/RR/NSEC.src/M000035.html +71 -0
  221. data/doc/classes/Dnsruby/RR/NSEC.src/M000036.html +18 -0
  222. data/doc/classes/Dnsruby/RR/NSEC.src/M000037.html +80 -0
  223. data/doc/classes/Dnsruby/RR/NSEC.src/M000038.html +23 -0
  224. data/doc/classes/Dnsruby/RR/NSEC3.html +366 -0
  225. data/doc/classes/Dnsruby/RR/NSEC3.src/M000085.html +28 -0
  226. data/doc/classes/Dnsruby/RR/NSEC3.src/M000086.html +18 -0
  227. data/doc/classes/Dnsruby/RR/NSEC3.src/M000087.html +18 -0
  228. data/doc/classes/Dnsruby/RR/NSEC3.src/M000088.html +22 -0
  229. data/doc/classes/Dnsruby/RR/NSEC3.src/M000089.html +18 -0
  230. data/doc/classes/Dnsruby/RR/NSEC3.src/M000090.html +21 -0
  231. data/doc/classes/Dnsruby/RR/NSEC3.src/M000091.html +21 -0
  232. data/doc/classes/Dnsruby/RR/NSEC3.src/M000092.html +29 -0
  233. data/doc/classes/Dnsruby/RR/NSEC3PARAM.html +279 -0
  234. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000077.html +28 -0
  235. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000078.html +18 -0
  236. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000079.html +22 -0
  237. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000080.html +21 -0
  238. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000081.html +25 -0
  239. data/doc/classes/Dnsruby/RR/PTR.html +132 -0
  240. data/doc/classes/Dnsruby/RR/RP.html +183 -0
  241. data/doc/classes/Dnsruby/RR/RP.src/M000082.html +19 -0
  242. data/doc/classes/Dnsruby/RR/RRSIG.html +357 -0
  243. data/doc/classes/Dnsruby/RR/RRSIG.src/M000097.html +26 -0
  244. data/doc/classes/Dnsruby/RR/RRSIG.src/M000098.html +28 -0
  245. data/doc/classes/Dnsruby/RR/RRSIG.src/M000099.html +23 -0
  246. data/doc/classes/Dnsruby/RR/RRSIG.src/M000100.html +23 -0
  247. data/doc/classes/Dnsruby/RR/RRSIG.src/M000101.html +46 -0
  248. data/doc/classes/Dnsruby/RR/RRSIG.src/M000102.html +50 -0
  249. data/doc/classes/Dnsruby/RR/RRSIG.src/M000103.html +27 -0
  250. data/doc/classes/Dnsruby/RR/RT.html +155 -0
  251. data/doc/classes/Dnsruby/RR/SOA.html +233 -0
  252. data/doc/classes/Dnsruby/RR/SOA.src/M000066.html +24 -0
  253. data/doc/classes/Dnsruby/RR/SOA.src/M000067.html +27 -0
  254. data/doc/classes/Dnsruby/RR/SPF.html +138 -0
  255. data/doc/classes/Dnsruby/RR/TKEY.html +313 -0
  256. data/doc/classes/Dnsruby/RR/TKEY.src/M000021.html +19 -0
  257. data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +29 -0
  258. data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +21 -0
  259. data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +29 -0
  260. data/doc/classes/Dnsruby/RR/TSIG.html +524 -0
  261. data/doc/classes/Dnsruby/RR/TSIG.src/M000068.html +24 -0
  262. data/doc/classes/Dnsruby/RR/TSIG.src/M000069.html +32 -0
  263. data/doc/classes/Dnsruby/RR/TSIG.src/M000070.html +54 -0
  264. data/doc/classes/Dnsruby/RR/TSIG.src/M000071.html +121 -0
  265. data/doc/classes/Dnsruby/RR/TSIG.src/M000072.html +33 -0
  266. data/doc/classes/Dnsruby/RR/TSIG.src/M000073.html +25 -0
  267. data/doc/classes/Dnsruby/RR/TSIG.src/M000074.html +36 -0
  268. data/doc/classes/Dnsruby/RR/TSIG.src/M000075.html +22 -0
  269. data/doc/classes/Dnsruby/RR/TSIG.src/M000076.html +29 -0
  270. data/doc/classes/Dnsruby/RR/TXT.html +233 -0
  271. data/doc/classes/Dnsruby/RR/TXT.src/M000061.html +18 -0
  272. data/doc/classes/Dnsruby/RR/TXT.src/M000062.html +18 -0
  273. data/doc/classes/Dnsruby/RR/TXT.src/M000063.html +20 -0
  274. data/doc/classes/Dnsruby/RR/TXT.src/M000064.html +27 -0
  275. data/doc/classes/Dnsruby/RR/TXT.src/M000065.html +25 -0
  276. data/doc/classes/Dnsruby/RR/X25.html +203 -0
  277. data/doc/classes/Dnsruby/RR/X25.src/M000058.html +18 -0
  278. data/doc/classes/Dnsruby/RR/X25.src/M000059.html +18 -0
  279. data/doc/classes/Dnsruby/RR/X25.src/M000060.html +22 -0
  280. data/doc/classes/Dnsruby/RRSet.html +404 -0
  281. data/doc/classes/Dnsruby/RRSet.src/M000211.html +23 -0
  282. data/doc/classes/Dnsruby/RRSet.src/M000212.html +18 -0
  283. data/doc/classes/Dnsruby/RRSet.src/M000213.html +18 -0
  284. data/doc/classes/Dnsruby/RRSet.src/M000214.html +47 -0
  285. data/doc/classes/Dnsruby/RRSet.src/M000215.html +42 -0
  286. data/doc/classes/Dnsruby/RRSet.src/M000216.html +18 -0
  287. data/doc/classes/Dnsruby/RRSet.src/M000217.html +20 -0
  288. data/doc/classes/Dnsruby/RRSet.src/M000218.html +18 -0
  289. data/doc/classes/Dnsruby/RRSet.src/M000219.html +18 -0
  290. data/doc/classes/Dnsruby/RRSet.src/M000220.html +18 -0
  291. data/doc/classes/Dnsruby/RRSet.src/M000221.html +18 -0
  292. data/doc/classes/Dnsruby/RRSet.src/M000222.html +22 -0
  293. data/doc/classes/Dnsruby/RRSet.src/M000223.html +18 -0
  294. data/doc/classes/Dnsruby/RRSet.src/M000224.html +22 -0
  295. data/doc/classes/Dnsruby/RRSet.src/M000225.html +18 -0
  296. data/doc/classes/Dnsruby/Refused.html +119 -0
  297. data/doc/classes/Dnsruby/Resolv.html +401 -0
  298. data/doc/classes/Dnsruby/Resolv.src/M000159.html +18 -0
  299. data/doc/classes/Dnsruby/Resolv.src/M000160.html +18 -0
  300. data/doc/classes/Dnsruby/Resolv.src/M000161.html +18 -0
  301. data/doc/classes/Dnsruby/Resolv.src/M000162.html +18 -0
  302. data/doc/classes/Dnsruby/Resolv.src/M000163.html +18 -0
  303. data/doc/classes/Dnsruby/Resolv.src/M000164.html +18 -0
  304. data/doc/classes/Dnsruby/Resolv.src/M000165.html +18 -0
  305. data/doc/classes/Dnsruby/Resolv.src/M000166.html +19 -0
  306. data/doc/classes/Dnsruby/Resolv.src/M000167.html +20 -0
  307. data/doc/classes/Dnsruby/Resolv.src/M000168.html +29 -0
  308. data/doc/classes/Dnsruby/Resolv.src/M000169.html +19 -0
  309. data/doc/classes/Dnsruby/Resolv.src/M000170.html +20 -0
  310. data/doc/classes/Dnsruby/Resolv.src/M000171.html +25 -0
  311. data/doc/classes/Dnsruby/ResolvError.html +117 -0
  312. data/doc/classes/Dnsruby/ResolvTimeout.html +117 -0
  313. data/doc/classes/Dnsruby/Resolver.html +1055 -0
  314. data/doc/classes/Dnsruby/Resolver.src/M000271.html +21 -0
  315. data/doc/classes/Dnsruby/Resolver.src/M000272.html +27 -0
  316. data/doc/classes/Dnsruby/Resolver.src/M000273.html +28 -0
  317. data/doc/classes/Dnsruby/Resolver.src/M000274.html +18 -0
  318. data/doc/classes/Dnsruby/Resolver.src/M000275.html +51 -0
  319. data/doc/classes/Dnsruby/Resolver.src/M000276.html +21 -0
  320. data/doc/classes/Dnsruby/Resolver.src/M000277.html +22 -0
  321. data/doc/classes/Dnsruby/Resolver.src/M000278.html +18 -0
  322. data/doc/classes/Dnsruby/Resolver.src/M000279.html +20 -0
  323. data/doc/classes/Dnsruby/Resolver.src/M000280.html +19 -0
  324. data/doc/classes/Dnsruby/Resolver.src/M000281.html +19 -0
  325. data/doc/classes/Dnsruby/Resolver.src/M000282.html +19 -0
  326. data/doc/classes/Dnsruby/Resolver.src/M000283.html +19 -0
  327. data/doc/classes/Dnsruby/Resolver.src/M000284.html +19 -0
  328. data/doc/classes/Dnsruby/Resolver.src/M000285.html +19 -0
  329. data/doc/classes/Dnsruby/Resolver.src/M000286.html +19 -0
  330. data/doc/classes/Dnsruby/Resolver.src/M000287.html +19 -0
  331. data/doc/classes/Dnsruby/Resolver.src/M000288.html +19 -0
  332. data/doc/classes/Dnsruby/Resolver.src/M000289.html +19 -0
  333. data/doc/classes/Dnsruby/Resolver.src/M000290.html +19 -0
  334. data/doc/classes/Dnsruby/Resolver.src/M000291.html +19 -0
  335. data/doc/classes/Dnsruby/Resolver.src/M000292.html +26 -0
  336. data/doc/classes/Dnsruby/Resolver.src/M000293.html +18 -0
  337. data/doc/classes/Dnsruby/Resolver.src/M000294.html +23 -0
  338. data/doc/classes/Dnsruby/Resolver.src/M000295.html +18 -0
  339. data/doc/classes/Dnsruby/ServFail.html +119 -0
  340. data/doc/classes/Dnsruby/SingleResolver.html +674 -0
  341. data/doc/classes/Dnsruby/SingleResolver.src/M000172.html +18 -0
  342. data/doc/classes/Dnsruby/SingleResolver.src/M000173.html +24 -0
  343. data/doc/classes/Dnsruby/SingleResolver.src/M000174.html +36 -0
  344. data/doc/classes/Dnsruby/SingleResolver.src/M000175.html +18 -0
  345. data/doc/classes/Dnsruby/SingleResolver.src/M000176.html +19 -0
  346. data/doc/classes/Dnsruby/SingleResolver.src/M000177.html +50 -0
  347. data/doc/classes/Dnsruby/SingleResolver.src/M000178.html +19 -0
  348. data/doc/classes/Dnsruby/SingleResolver.src/M000179.html +21 -0
  349. data/doc/classes/Dnsruby/SingleResolver.src/M000180.html +25 -0
  350. data/doc/classes/Dnsruby/SingleResolver.src/M000181.html +54 -0
  351. data/doc/classes/Dnsruby/SingleResolver.src/M000182.html +27 -0
  352. data/doc/classes/Dnsruby/SingleResolver.src/M000183.html +27 -0
  353. data/doc/classes/Dnsruby/SingleResolver.src/M000184.html +35 -0
  354. data/doc/classes/Dnsruby/SingleResolver.src/M000185.html +21 -0
  355. data/doc/classes/Dnsruby/TheLog.html +196 -0
  356. data/doc/classes/Dnsruby/TheLog.src/M000246.html +20 -0
  357. data/doc/classes/Dnsruby/TheLog.src/M000247.html +20 -0
  358. data/doc/classes/Dnsruby/TheLog.src/M000248.html +20 -0
  359. data/doc/classes/Dnsruby/Types.html +436 -0
  360. data/doc/classes/Dnsruby/Update.html +368 -0
  361. data/doc/classes/Dnsruby/Update.src/M000253.html +32 -0
  362. data/doc/classes/Dnsruby/Update.src/M000254.html +36 -0
  363. data/doc/classes/Dnsruby/Update.src/M000255.html +32 -0
  364. data/doc/classes/Dnsruby/Update.src/M000256.html +41 -0
  365. data/doc/classes/Dnsruby/Update.src/M000257.html +34 -0
  366. data/doc/classes/Dnsruby/VerifyError.html +119 -0
  367. data/doc/classes/Dnsruby/ZoneTransfer.html +300 -0
  368. data/doc/classes/Dnsruby/ZoneTransfer.src/M000143.html +18 -0
  369. data/doc/classes/Dnsruby/ZoneTransfer.src/M000144.html +24 -0
  370. data/doc/classes/Dnsruby/ZoneTransfer.src/M000145.html +35 -0
  371. data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +200 -0
  372. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000146.html +19 -0
  373. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000147.html +19 -0
  374. data/doc/created.rid +1 -0
  375. data/doc/files/lib/Dnsruby/Config_rb.html +101 -0
  376. data/doc/files/lib/Dnsruby/DNS_rb.html +110 -0
  377. data/doc/files/lib/Dnsruby/Hosts_rb.html +108 -0
  378. data/doc/files/lib/Dnsruby/Resolver_rb.html +109 -0
  379. data/doc/files/lib/Dnsruby/SingleResolver_rb.html +108 -0
  380. data/doc/files/lib/Dnsruby/TheLog_rb.html +110 -0
  381. data/doc/files/lib/Dnsruby/code_mapper_rb.html +101 -0
  382. data/doc/files/lib/Dnsruby/dnssec_rb.html +107 -0
  383. data/doc/files/lib/Dnsruby/event_machine_interface_rb.html +108 -0
  384. data/doc/files/lib/Dnsruby/ipv4_rb.html +101 -0
  385. data/doc/files/lib/Dnsruby/ipv6_rb.html +101 -0
  386. data/doc/files/lib/Dnsruby/message_rb.html +109 -0
  387. data/doc/files/lib/Dnsruby/name_rb.html +101 -0
  388. data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +101 -0
  389. data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +101 -0
  390. data/doc/files/lib/Dnsruby/resource/A_rb.html +101 -0
  391. data/doc/files/lib/Dnsruby/resource/CERT_rb.html +101 -0
  392. data/doc/files/lib/Dnsruby/resource/DNSKEY_rb.html +101 -0
  393. data/doc/files/lib/Dnsruby/resource/DS_rb.html +101 -0
  394. data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +101 -0
  395. data/doc/files/lib/Dnsruby/resource/IN_rb.html +112 -0
  396. data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +101 -0
  397. data/doc/files/lib/Dnsruby/resource/LOC_rb.html +101 -0
  398. data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +101 -0
  399. data/doc/files/lib/Dnsruby/resource/MX_rb.html +101 -0
  400. data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +101 -0
  401. data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +101 -0
  402. data/doc/files/lib/Dnsruby/resource/NSEC3PARAM_rb.html +101 -0
  403. data/doc/files/lib/Dnsruby/resource/NSEC3_rb.html +101 -0
  404. data/doc/files/lib/Dnsruby/resource/NSEC_rb.html +101 -0
  405. data/doc/files/lib/Dnsruby/resource/OPT_rb.html +101 -0
  406. data/doc/files/lib/Dnsruby/resource/PX_rb.html +101 -0
  407. data/doc/files/lib/Dnsruby/resource/RP_rb.html +101 -0
  408. data/doc/files/lib/Dnsruby/resource/RRSIG_rb.html +101 -0
  409. data/doc/files/lib/Dnsruby/resource/RT_rb.html +101 -0
  410. data/doc/files/lib/Dnsruby/resource/SOA_rb.html +101 -0
  411. data/doc/files/lib/Dnsruby/resource/SPF_rb.html +101 -0
  412. data/doc/files/lib/Dnsruby/resource/SRV_rb.html +101 -0
  413. data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +101 -0
  414. data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +114 -0
  415. data/doc/files/lib/Dnsruby/resource/TXT_rb.html +108 -0
  416. data/doc/files/lib/Dnsruby/resource/X25_rb.html +101 -0
  417. data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +101 -0
  418. data/doc/files/lib/Dnsruby/resource/generic_rb.html +131 -0
  419. data/doc/files/lib/Dnsruby/resource/resource_rb.html +110 -0
  420. data/doc/files/lib/Dnsruby/select_thread_rb.html +111 -0
  421. data/doc/files/lib/Dnsruby/update_rb.html +101 -0
  422. data/doc/files/lib/Dnsruby/zone_transfer_rb.html +101 -0
  423. data/doc/files/lib/dnsruby_rb.html +118 -0
  424. data/doc/fr_class_index.html +108 -0
  425. data/doc/fr_file_index.html +75 -0
  426. data/doc/fr_method_index.html +321 -0
  427. data/doc/index.html +24 -0
  428. data/lib/Dnsruby/Config.rb +363 -0
  429. data/lib/Dnsruby/DNS.rb +293 -0
  430. data/lib/Dnsruby/Hosts.rb +126 -0
  431. data/lib/Dnsruby/Resolver.rb +999 -0
  432. data/lib/Dnsruby/SingleResolver.rb +493 -0
  433. data/lib/Dnsruby/TheLog.rb +60 -0
  434. data/lib/Dnsruby/code_mapper.rb +165 -0
  435. data/lib/Dnsruby/dnssec.rb +357 -0
  436. data/lib/Dnsruby/event_machine_interface.rb +264 -0
  437. data/lib/Dnsruby/ipv4.rb +74 -0
  438. data/lib/Dnsruby/ipv6.rb +144 -0
  439. data/lib/Dnsruby/message.rb +961 -0
  440. data/lib/Dnsruby/name.rb +332 -0
  441. data/lib/Dnsruby/resource/A.rb +56 -0
  442. data/lib/Dnsruby/resource/AAAA.rb +54 -0
  443. data/lib/Dnsruby/resource/AFSDB.rb +68 -0
  444. data/lib/Dnsruby/resource/CERT.rb +89 -0
  445. data/lib/Dnsruby/resource/DNSKEY.rb +242 -0
  446. data/lib/Dnsruby/resource/DS.rb +162 -0
  447. data/lib/Dnsruby/resource/HINFO.rb +52 -0
  448. data/lib/Dnsruby/resource/IN.rb +70 -0
  449. data/lib/Dnsruby/resource/ISDN.rb +54 -0
  450. data/lib/Dnsruby/resource/LOC.rb +255 -0
  451. data/lib/Dnsruby/resource/MINFO.rb +70 -0
  452. data/lib/Dnsruby/resource/MX.rb +66 -0
  453. data/lib/Dnsruby/resource/NAPTR.rb +90 -0
  454. data/lib/Dnsruby/resource/NSAP.rb +172 -0
  455. data/lib/Dnsruby/resource/NSEC.rb +243 -0
  456. data/lib/Dnsruby/resource/NSEC3.rb +173 -0
  457. data/lib/Dnsruby/resource/NSEC3PARAM.rb +120 -0
  458. data/lib/Dnsruby/resource/OPT.rb +210 -0
  459. data/lib/Dnsruby/resource/PX.rb +71 -0
  460. data/lib/Dnsruby/resource/RP.rb +67 -0
  461. data/lib/Dnsruby/resource/RRSIG.rb +256 -0
  462. data/lib/Dnsruby/resource/RT.rb +67 -0
  463. data/lib/Dnsruby/resource/SOA.rb +95 -0
  464. data/lib/Dnsruby/resource/SPF.rb +29 -0
  465. data/lib/Dnsruby/resource/SRV.rb +112 -0
  466. data/lib/Dnsruby/resource/TKEY.rb +163 -0
  467. data/lib/Dnsruby/resource/TSIG.rb +584 -0
  468. data/lib/Dnsruby/resource/TXT.rb +76 -0
  469. data/lib/Dnsruby/resource/X25.rb +53 -0
  470. data/lib/Dnsruby/resource/domain_name.rb +54 -0
  471. data/lib/Dnsruby/resource/generic.rb +151 -0
  472. data/lib/Dnsruby/resource/resource.rb +561 -0
  473. data/lib/Dnsruby/select_thread.rb +449 -0
  474. data/lib/Dnsruby/update.rb +262 -0
  475. data/lib/Dnsruby/zone_transfer.rb +332 -0
  476. data/lib/dnsruby.rb +512 -0
  477. data/test/custom.txt +4 -0
  478. data/test/resolv.conf +4 -0
  479. data/test/tc_axfr.rb +32 -0
  480. data/test/tc_dns.rb +230 -0
  481. data/test/tc_dnskey.rb +52 -0
  482. data/test/tc_dnsruby.rb +42 -0
  483. data/test/tc_dnssec.rb +88 -0
  484. data/test/tc_ds.rb +38 -0
  485. data/test/tc_escapedchars.rb +484 -0
  486. data/test/tc_event_machine_deferrable.rb +85 -0
  487. data/test/tc_event_machine_res.rb +174 -0
  488. data/test/tc_event_machine_single_res.rb +101 -0
  489. data/test/tc_event_machine_soak.rb +98 -0
  490. data/test/tc_header.rb +104 -0
  491. data/test/tc_misc.rb +139 -0
  492. data/test/tc_name.rb +53 -0
  493. data/test/tc_nsec.rb +36 -0
  494. data/test/tc_nsec3.rb +63 -0
  495. data/test/tc_nsec3param.rb +30 -0
  496. data/test/tc_packet.rb +179 -0
  497. data/test/tc_packet_unique_push.rb +102 -0
  498. data/test/tc_question.rb +51 -0
  499. data/test/tc_res_config.rb +92 -0
  500. data/test/tc_res_env.rb +51 -0
  501. data/test/tc_res_file.rb +42 -0
  502. data/test/tc_res_opt.rb +187 -0
  503. data/test/tc_resolver.rb +184 -0
  504. data/test/tc_rr-opt.rb +82 -0
  505. data/test/tc_rr-txt.rb +137 -0
  506. data/test/tc_rr-unknown.rb +99 -0
  507. data/test/tc_rr.rb +258 -0
  508. data/test/tc_rrset.rb +58 -0
  509. data/test/tc_rrsig.rb +32 -0
  510. data/test/tc_single_resolver.rb +169 -0
  511. data/test/tc_soak.rb +200 -0
  512. data/test/tc_soak_base.rb +136 -0
  513. data/test/tc_tcp.rb +35 -0
  514. data/test/tc_tkey.rb +75 -0
  515. data/test/tc_tsig.rb +237 -0
  516. data/test/tc_update.rb +215 -0
  517. data/test/ts_dnsruby.rb +17 -0
  518. data/test/ts_offline.rb +42 -0
  519. data/test/ts_online.rb +107 -0
  520. metadata +627 -0
@@ -0,0 +1,332 @@
1
+ module Dnsruby
2
+ # This class performs zone transfers as per RFC1034 (AXFR) and RFC1995 (IXFR).
3
+ class ZoneTransfer
4
+ # The nameserver to use for the zone transfer - defaults to system config
5
+ attr_accessor :server
6
+ # What type of transfer to do (IXFR or AXFR) - defaults to AXFR
7
+ attr_accessor :transfer_type
8
+ # The class - defaults to IN
9
+ attr_accessor :klass
10
+ # The port to connect to - defaults to 53
11
+ attr_accessor :port
12
+ # If using IXFR, this is the SOA serial number to start the incrementals from
13
+ attr_accessor :serial
14
+ # The TSIG record used to sign the transfer
15
+ attr_reader :tsig
16
+ # Returns the tsigstate of the last transfer (nil if no TSIG signed transfer has occurred)
17
+ attr_reader :last_tsigstate
18
+
19
+ #Sets the TSIG to sign the zone transfer with.
20
+ #Pass in either a Dnsruby::RR::TSIG, or a key_name and key (or just a key)
21
+ #Pass in nil to stop tsig signing.
22
+ #* res.tsig=(tsig_rr)
23
+ #* res.tsig=(key_name, key)
24
+ #* res.tsig=nil # Don't sign the transfer
25
+ def tsig=(*args)
26
+ @tsig = SingleResolver.get_tsig(args)
27
+ end
28
+
29
+
30
+ def initialize
31
+ @server=Config.new.nameserver[0]
32
+ @transfer_type = Types.AXFR
33
+ @klass=Classes.IN
34
+ @port=53
35
+ @serial=0
36
+ @tsig = nil
37
+ @axfr = nil
38
+ end
39
+
40
+ # Perform a zone transfer (RFC1995)
41
+ # If an IXFR query is unsuccessful, then AXFR is tried (and @transfer_type is set
42
+ # to AXFR)
43
+ # TCP is used as the only transport
44
+ #
45
+ # If AXFR is performed, then the zone will be returned as a set of records :
46
+ #
47
+ # zt = Dnsruby::ZoneTransfer.new
48
+ # zt.transfer_type = Dnsruby::Types.AXFR
49
+ # zt.server = "ns0.validation-test-servers.nominet.org.uk"
50
+ # zone = zt.transfer("validation-test-servers.nominet.org.uk")
51
+ # soa = zone[0]
52
+ # rec1 = zone[1]
53
+ # print zone.to_s
54
+ #
55
+ #
56
+ # If IXFR is performed, then the incrementals will be returned as a set of Deltas.
57
+ # Each Delta contains the start and end SOA serial number, as well as an array of
58
+ # adds and deletes that occurred between the start and end.
59
+ #
60
+ # zt = Dnsruby::ZoneTransfer.new
61
+ # zt.transfer_type = Dnsruby::Types.IXFR
62
+ # zt.server = "ns0.validation-test-servers.nominet.org.uk"
63
+ # zt.serial = 2007090401
64
+ # deltas = zt.transfer("validation-test-servers.nominet.org.uk")
65
+ # assert_equal("Should show up in transfer", deltas[0].adds[1].data)
66
+ def transfer(zone)
67
+ servers = @server
68
+ if (servers.class == String)
69
+ servers=[servers]
70
+ end
71
+ xfr = nil
72
+ exception = nil
73
+ servers.each do |server|
74
+ begin
75
+ server=Config.resolve_server(server)
76
+ xfr = do_transfer(zone, server)
77
+ break
78
+ rescue Exception => exception
79
+ end
80
+ end
81
+ if (xfr == nil && exception != nil)
82
+ raise exception
83
+ end
84
+ return xfr
85
+ end
86
+
87
+ def do_transfer(zone, server) #:nodoc: all
88
+ @transfer_type = Types.new(@transfer_type)
89
+ @state = :InitialSoa
90
+ socket = TCPSocket.new(server, @port)
91
+ begin
92
+ # Send an initial query
93
+ msg = Message.new(zone, @transfer_type, @klass)
94
+ if @transfer_type == Types.IXFR
95
+ rr = RR.create("#{zone} 0 IN SOA" + '0 0 %u 0 0 0 0' % @serial)
96
+ msg.add_authority(rr)
97
+ end
98
+ send_message(socket, msg)
99
+
100
+ while (@state != :End)
101
+ response = receive_message(socket)
102
+
103
+ if (@state == :InitialSoa)
104
+ rcode = response.header.rcode
105
+ if (rcode != RCode.NOERROR)
106
+ if (@transfer_type == Types.IXFR &&
107
+ rcode == RCode.NOTIMP)
108
+ # IXFR didn't work - let's try AXFR
109
+ TheLog.debug("IXFR DID NOT WORK (rcode = NOTIMP) - TRYING AXFR!!")
110
+ @state = :InitialSoa
111
+ @transfer_type=Types.AXFR
112
+ # Send an initial AXFR query
113
+ msg = Message.new(zone, @transfer_type, @klass)
114
+ send_message(socket, msg)
115
+ next
116
+ end
117
+ raise ResolvError.new(rcode.string);
118
+ end
119
+
120
+ if (response.question[0].qtype != @transfer_type)
121
+ raise ResolvError.new("invalid question section")
122
+ end
123
+
124
+ if (response.header.ancount == 0 && @transfer_type == Types.IXFR)
125
+ TheLog.debug("IXFR DID NOT WORK (ancount = 0) - TRYING AXFR!!")
126
+ # IXFR didn't work - let's try AXFR
127
+ @transfer_type=Types.AXFR
128
+ # Send an initial AXFR query
129
+ @state = :InitialSoa
130
+ msg = Message.new(zone, @transfer_type, @klass)
131
+ send_message(socket, msg)
132
+ next
133
+ end
134
+ end
135
+
136
+ response.each_answer { |rr|
137
+ parseRR(rr)
138
+ }
139
+ if (@state == :End &&
140
+ response.tsigstate == :Intermediate)
141
+ raise ResolvError.new("last message must be signed")
142
+ end
143
+ if (@state == :End && @tsig)
144
+ if (response.tsigstate != :Verified)
145
+ @last_tsigstate = :Failed
146
+ raise ResolvError.new("Zone transfer not correctly signed")
147
+ end
148
+ @last_tsigstate = :Verified
149
+ end
150
+ end
151
+ # This could return with an IXFR response, or an AXFR response.
152
+ # If it fails completely, then try to send an AXFR query.
153
+ # Once the query has been sent, then enter the main response loop.
154
+ # Unless we know we're definitely AXFR, we should be prepared for either IXFR or AXFR
155
+ # AXFR response : The first and the last RR of the response is the SOA record of the zone.
156
+ # The whole zone is returned inbetween.
157
+ # IXFR response : one or more difference sequences is returned. The list of difference
158
+ # sequences is preceded and followed by a copy of the server's current
159
+ # version of the SOA.
160
+ # Each difference sequence represents one update to the zone (one SOA
161
+ # serial change) consisting of deleted RRs and added RRs. The first RR
162
+ # of the deleted RRs is the older SOA RR and the first RR of the added
163
+ # RRs is the newer SOA RR.
164
+ socket.close
165
+ if (@axfr!=nil)
166
+ return @axfr
167
+ end
168
+ return @ixfr
169
+ rescue Exception => e
170
+ socket.close
171
+ raise e
172
+ end
173
+ end
174
+
175
+ # All changes between two versions of a zone in an IXFR response.
176
+ class Delta
177
+
178
+ # The starting serial number of this delta.
179
+ attr_accessor :start
180
+
181
+ # The ending serial number of this delta.
182
+ attr_accessor :end
183
+
184
+ # A list of records added between the start and end versions
185
+ attr_accessor :adds
186
+
187
+ # A list of records deleted between the start and end versions
188
+ attr_accessor :deletes
189
+
190
+ def initialize()
191
+ @adds = []
192
+ @deletes = []
193
+ end
194
+
195
+ def to_s
196
+ ret = "Adds : " + @adds.join(",")
197
+ ret +=", Deletes : " + @deletes.join(",")
198
+ end
199
+ end
200
+
201
+ def parseRR(rec) #:nodoc: all
202
+ name = rec.name
203
+ type = rec.type
204
+ delta = Delta.new
205
+
206
+ case @state
207
+ when :InitialSoa
208
+ if (type != Types.SOA)
209
+ raise ResolvError.new("missing initial SOA")
210
+ end
211
+ @initialsoa = rec
212
+ # Remember the serial number in the initial SOA; we need it
213
+ # to recognize the end of an IXFR.
214
+ @end_serial = rec.serial
215
+ if (@transfer_type == Types.IXFR && @end_serial <= @serial)
216
+ TheLog.debug("zone up to date")
217
+ @state = :End
218
+ else
219
+ @state = :FirstData
220
+ end
221
+ when :FirstData
222
+ # If the transfer begins with 1 SOA, it's an AXFR.
223
+ # If it begins with 2 SOAs, it's an IXFR.
224
+ if (@transfer_type == Types.IXFR && type == Types.SOA &&
225
+ rec.serial == @serial)
226
+ TheLog.debug("IXFR response - using IXFR")
227
+ @rtype = Types.IXFR
228
+ @ixfr = []
229
+ @state = :Ixfr_DelSoa
230
+ else
231
+ TheLog.debug("AXFR response - using AXFR")
232
+ @rtype = Types.AXFR
233
+ @axfr = []
234
+ @axfr << @initialsoa
235
+ @state = :Axfr
236
+ end
237
+ parseRR(rec) # Restart...
238
+ return
239
+
240
+ when :Ixfr_DelSoa
241
+ delta = Delta.new
242
+ @ixfr.push(delta)
243
+ delta.start = rec.serial
244
+ delta.deletes << rec
245
+ @state = :Ixfr_Del
246
+
247
+ when :Ixfr_Del
248
+ if (type == Types.SOA)
249
+ @current_serial = rec.serial
250
+ @state = :Ixfr_AddSoa
251
+ parseRR(rec); # Restart...
252
+ return;
253
+ end
254
+ delta = @ixfr[@ixfr.length - 1]
255
+ delta.deletes << rec
256
+
257
+ when :Ixfr_AddSoa
258
+ delta = @ixfr[@ixfr.length - 1]
259
+ delta.end = rec.serial
260
+ delta.adds << rec
261
+ @state = :Ixfr_Add
262
+
263
+ when :Ixfr_Add
264
+ if (type == Types.SOA)
265
+ soa_serial = rec.serial
266
+ if (soa_serial == @end_serial)
267
+ @state = :End
268
+ return
269
+ elsif (soa_serial != @current_serial)
270
+ raise ResolvError.new("IXFR out of sync: expected serial " +
271
+ @current_serial + " , got " + soa_serial);
272
+ else
273
+ @state = :Ixfr_DelSoa
274
+ parseRR(rec); # Restart...
275
+ return;
276
+ end
277
+ end
278
+ delta = @ixfr[@ixfr.length - 1]
279
+ delta.adds << rec
280
+
281
+ when :Axfr
282
+ # Old BINDs sent cross class A records for non IN classes.
283
+ if (type == Types.A && rec.klass() != @klass)
284
+ else
285
+ @axfr << rec
286
+ if (type == Types.SOA)
287
+ @state = :End
288
+ end
289
+ end
290
+ when :End
291
+ raise ResolvError.new("extra data in zone transfer")
292
+
293
+ else
294
+ raise ResolvError.new("invalid state for zone transfer")
295
+ end
296
+ end
297
+
298
+
299
+ def send_message(socket, msg) #:nodoc: all
300
+ if (@tsig)
301
+ @tsig.apply(msg)
302
+ @tsig = msg.tsig
303
+ end
304
+ query_packet = msg.encode
305
+ lenmsg = [query_packet.length].pack('n')
306
+ socket.send(lenmsg, 0)
307
+ socket.send(query_packet, 0)
308
+ end
309
+
310
+ def tcp_read(socket, len) #:nodoc: all
311
+ buf=""
312
+ while (buf.length < len) do
313
+ buf += socket.recv(len-buf.length)
314
+ end
315
+ return buf
316
+ end
317
+
318
+ def receive_message(socket) #:nodoc: all
319
+ buf = tcp_read(socket, 2)
320
+ answersize = buf.unpack('n')[0]
321
+ buf = tcp_read(socket, answersize)
322
+ msg = Message.decode(buf)
323
+ if (@tsig)
324
+ if !@tsig.verify_envelope(msg, buf)
325
+ TheLog.error("Bad signature on zone transfer - closing connection")
326
+ raise ResolvError.new("Bad signature on zone transfer")
327
+ end
328
+ end
329
+ return msg
330
+ end
331
+ end
332
+ end
@@ -0,0 +1,512 @@
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 'Dnsruby/TheLog'
17
+ require 'Dnsruby/code_mapper'
18
+ require 'Dnsruby/ipv4'
19
+ require 'Dnsruby/ipv6'
20
+ require 'timeout'
21
+ #= Dnsruby library
22
+ #Dnsruby is a thread-aware DNS stub resolver library written in Ruby.
23
+ #
24
+ #It is based on resolv.rb, the standard Ruby DNS implementation,
25
+ #but gives a complete DNS implementation, including DNSSEC.
26
+ #
27
+ #The Resolv class can be used to resolve addresses using /etc/hosts and /etc/resolv.conf,
28
+ #or the DNS class can be used to make DNS queries. These interfaces will attempt to apply
29
+ #the default domain and searchlist when resolving names.
30
+ #
31
+ #The Resolver and SingleResolver interfaces allow finer control of individual messages.
32
+ #The Resolver class sends queries to multiple resolvers using various retry mechanisms.
33
+ #The SingleResolver class is used by Resolver to send individual Messages to individual
34
+ #resolvers.
35
+ #
36
+ #Resolver queries return Dnsruby::Message objects. Message objects have five
37
+ #sections:
38
+ #
39
+ #* The header section, a Dnsruby::Header object.
40
+ #
41
+ #* The question section, a list of Dnsruby::Question objects.
42
+ #
43
+ #* The answer section, a list of Dnsruby::Resource objects.
44
+ #
45
+ #* The authority section, a list of Dnsruby::Resource objects.
46
+ #
47
+ #* The additional section, a list of Dnsruby::Resource objects.
48
+ #
49
+ #
50
+ #== example
51
+ # p Dnsruby::Resolv.getaddress("www.ruby-lang.org")
52
+ # p Dnsruby::Resolv.getname("210.251.121.214")
53
+ #
54
+ # Dnsruby::DNS.open {|dns|
55
+ # p dns.getresources("www.ruby-lang.org", Dnsruby::Types.A).collect {|r| r.address}
56
+ # p dns.getresources("ruby-lang.org", 'MX').collect {|r| [r.exchange.to_s, r.preference]}
57
+ # }
58
+ #
59
+ #== exceptions
60
+ #
61
+ #* ResolvError < StandardError
62
+ #
63
+ #* ResolvTimeout < TimeoutError
64
+ #
65
+ #* NXDomain < ResolvError
66
+ #
67
+ #* FormErr < ResolvError
68
+ #
69
+ #* ServFail < ResolvError
70
+ #
71
+ #* NotImp < ResolvError
72
+ #
73
+ #* Refused < ResolvError
74
+ #
75
+ #* OtherResolvError < ResolvError
76
+ #
77
+ #== I/O
78
+ #Dnsruby implements a pure Ruby event loop to perform I/O.
79
+ #Dnsruby can also use EventMachine to perform I/O, if it is available on the
80
+ #platform - but it must be enabled through the Dnsruby::Resolver class
81
+ #
82
+ #== DNSSEC
83
+ #Dnsruby supports DNSSEC and NSEC3.
84
+ #DNSSEC support is on by default, but applications which wish to verify
85
+ #responses locally will need to make explicit verification calls.
86
+ #See Dnsruby::Dnssec for more details.
87
+ #
88
+ #== Bugs
89
+ #* NIS is not supported.
90
+ #* /etc/nsswitch.conf is not supported.
91
+ #* IPv6 is not supported.
92
+ module Dnsruby
93
+ class OpCode < CodeMapper
94
+ Query = 0 # RFC 1035
95
+ IQuery = 1 # RFC 1035
96
+ Status = 2 # RFC 1035
97
+ Notify = 4 # RFC 1996
98
+ Update = 5 # RFC 2136
99
+
100
+ update()
101
+ end
102
+
103
+ class RCode < CodeMapper
104
+ NOERROR = 0 # RFC 1035
105
+ FORMERR = 1 # RFC 1035
106
+ SERVFAIL = 2 # RFC 1035
107
+ NXDOMAIN = 3 # RFC 1035
108
+ NOTIMP = 4 # RFC 1035
109
+ REFUSED = 5 # RFC 1035
110
+ YXDOMAIN = 6 # RFC 2136
111
+ YXRRSET = 7 # RFC 2136
112
+ NXRRSET = 8 # RFC 2136
113
+ NOTAUTH = 9 # RFC 2136
114
+ NOTZONE = 10 # RFC 2136
115
+
116
+ BADVERS = 16
117
+ BADSIG = 16
118
+ BADKEY = 17
119
+ BADTIME = 18
120
+ BADMODE = 19
121
+ BADNAME = 20
122
+ BADALG = 21
123
+
124
+ update()
125
+ end
126
+
127
+ class Classes < CodeMapper
128
+ IN = 1 # RFC 1035
129
+ CH = 3 # RFC 1035
130
+ # CHAOS = 3 # RFC 1035
131
+ HS = 4 # RFC 1035
132
+ # HESIOD = 4 # RFC 1035
133
+ NONE = 254 # RFC 2136
134
+ ANY = 255 # RFC 1035
135
+ update()
136
+
137
+ def unknown_string(arg)
138
+ if (arg=~/^CLASS/i)
139
+ Classes.add_pair(arg, arg.gsub('CLASS', '').to_i)
140
+ set_string(arg)
141
+ else
142
+ raise ArgumentError.new("String #{arg} not a member of #{self.class}")
143
+ end
144
+ end
145
+
146
+ def unknown_code(arg)
147
+ Classes.add_pair('CLASS' + arg.to_s, arg)
148
+ set_code(arg)
149
+ end
150
+
151
+ # classesbyval and classesbyname functions are wrappers around the
152
+ # similarly named hashes. They are used for 'unknown' DNS RR classess
153
+ # (RFC3597)
154
+ # See typesbyval and typesbyname, these beasts have the same functionality
155
+ def Classes.classesbyname(name) #:nodoc: all
156
+ name.upcase!;
157
+ if to_code(name)
158
+ return to_code(name)
159
+ end
160
+
161
+ if ((name =~/^\s*CLASS(\d+)\s*$/o) == nil)
162
+ raise ArgumentError, "classesbyval() argument is not CLASS### (#{name})"
163
+ end
164
+
165
+ val = $1.to_i
166
+ if val > 0xffff
167
+ raise ArgumentError, 'classesbyval() argument larger than ' + 0xffff
168
+ end
169
+
170
+ return val;
171
+ end
172
+
173
+
174
+
175
+ def Classes.classesbyval(val) #:nodoc: all
176
+ if (val.class == String)
177
+ if ((val =~ /^\s*0*([0-9]+)\s*$/) == nil)
178
+ raise ArgumentError, "classesbybal() argument is not numeric (#{val})" # unless val.gsub!("^\s*0*([0-9]+)\s*$", "$1")
179
+ # val =~ s/^\s*0*([0-9]+)\s*$/$1/o;#
180
+ end
181
+ val = $1.to_i
182
+ end
183
+
184
+ return to_string(val) if to_string(val)
185
+
186
+ raise ArgumentError, 'classesbyval() argument larger than ' + 0xffff if val > 0xffff;
187
+
188
+ return "CLASS#{val}";
189
+ end
190
+ end
191
+
192
+ # The RR types explicitly supported by Dnsruby.
193
+ #
194
+ # New RR types should be added to this set
195
+ class Types < CodeMapper
196
+ SIGZERO = 0 # RFC2931 consider this a pseudo type
197
+ A = 1 # RFC 1035, Section 3.4.1
198
+ NS = 2 # RFC 1035, Section 3.3.11
199
+ MD = 3 # RFC 1035, Section 3.3.4 (obsolete)
200
+ MF = 4 # RFC 1035, Section 3.3.5 (obsolete)
201
+ CNAME = 5 # RFC 1035, Section 3.3.1
202
+ SOA = 6 # RFC 1035, Section 3.3.13
203
+ MB = 7 # RFC 1035, Section 3.3.3
204
+ MG = 8 # RFC 1035, Section 3.3.6
205
+ MR = 9 # RFC 1035, Section 3.3.8
206
+ NULL = 10 # RFC 1035, Section 3.3.10
207
+ WKS = 11 # RFC 1035, Section 3.4.2 (deprecated)
208
+ PTR = 12 # RFC 1035, Section 3.3.12
209
+ HINFO = 13 # RFC 1035, Section 3.3.2
210
+ MINFO = 14 # RFC 1035, Section 3.3.7
211
+ MX = 15 # RFC 1035, Section 3.3.9
212
+ TXT = 16 # RFC 1035, Section 3.3.14
213
+ RP = 17 # RFC 1183, Section 2.2
214
+ AFSDB = 18 # RFC 1183, Section 1
215
+ X25 = 19 # RFC 1183, Section 3.1
216
+ ISDN = 20 # RFC 1183, Section 3.2
217
+ RT = 21 # RFC 1183, Section 3.3
218
+ NSAP = 22 # RFC 1706, Section 5
219
+ NSAP_PTR = 23 # RFC 1348 (obsolete)
220
+ SIG = 24 # RFC 2535, Section 4.1
221
+ KEY = 25 # RFC 2535, Section 3.1
222
+ PX = 26 # RFC 2163,
223
+ GPOS = 27 # RFC 1712 (obsolete)
224
+ AAAA = 28 # RFC 1886, Section 2.1
225
+ LOC = 29 # RFC 1876
226
+ NXT = 30 # RFC 2535, Section 5.2 obsoleted by RFC3755
227
+ EID = 31 # draft-ietf-nimrod-dns-xx.txt
228
+ NIMLOC = 32 # draft-ietf-nimrod-dns-xx.txt
229
+ SRV = 33 # RFC 2052
230
+ ATMA = 34 # ???
231
+ NAPTR = 35 # RFC 2168
232
+ KX = 36 # RFC 2230
233
+ CERT = 37 # RFC 2538
234
+ DNAME = 39 # RFC 2672
235
+ OPT = 41 # RFC 2671
236
+ DS = 43 # RFC 4034
237
+ SSHFP = 44 # RFC 4255
238
+ IPSECKEY = 45 # RFC 4025
239
+ RRSIG = 46 # RFC 4034
240
+ NSEC = 47 # RFC 4034
241
+ DNSKEY = 48 # RFC 4034
242
+ DHCID = 49 # RFC 4701
243
+ NSEC3 = 50 # RFC still pending at time of writing
244
+ NSEC3PARAM= 51 # RFC still pending at time of writing
245
+ SPF = 99 # RFC 4408
246
+ UINFO = 100 # non-standard
247
+ UID = 101 # non-standard
248
+ GID = 102 # non-standard
249
+ UNSPEC = 103 # non-standard
250
+ TKEY = 249 # RFC 2930
251
+ TSIG = 250 # RFC 2931
252
+ IXFR = 251 # RFC 1995
253
+ AXFR = 252 # RFC 1035
254
+ MAILB = 253 # RFC 1035 (MB, MG, MR)
255
+ MAILA = 254 # RFC 1035 (obsolete - see MX)
256
+ ANY = 255 # RFC 1035
257
+ update()
258
+
259
+ def unknown_string(arg) #:nodoc: all
260
+ if (arg=~/^TYPE/i)
261
+ Types.add_pair(arg, arg.gsub('TYPE', '').to_i)
262
+ set_string(arg)
263
+ else
264
+ raise ArgumentError.new("String #{arg} not a member of #{self.class}")
265
+ end
266
+ end
267
+
268
+ def unknown_code(arg) #:nodoc: all
269
+ Types.add_pair('TYPE' + arg.to_s, arg)
270
+ set_code(arg)
271
+ end
272
+
273
+ #--
274
+ # typesbyval and typesbyname functions are wrappers around the similarly named
275
+ # hashes. They are used for 'unknown' DNS RR types (RFC3597)
276
+ # typesbyname returns they TYPEcode as a function of the TYPE
277
+ # mnemonic. If the TYPE mapping is not specified the generic mnemonic
278
+ # TYPE### is returned.
279
+ def Types.typesbyname(name) #:nodoc: all
280
+ name.upcase!
281
+
282
+ if to_code(name)
283
+ return to_code(name)
284
+ end
285
+
286
+
287
+ if ((name =~/^\s*TYPE(\d+)\s*$/o)==nil)
288
+ raise ArgumentError, "Net::DNS::typesbyname() argument (#{name}) is not TYPE###"
289
+ end
290
+
291
+ val = $1.to_i
292
+ if val > 0xffff
293
+ raise ArgumentError, 'Net::DNS::typesbyname() argument larger than ' + 0xffff
294
+ end
295
+
296
+ return val;
297
+ end
298
+
299
+
300
+ # typesbyval returns they TYPE mnemonic as a function of the TYPE
301
+ # code. If the TYPE mapping is not specified the generic mnemonic
302
+ # TYPE### is returned.
303
+ def Types.typesbyval(val) #:nodoc: all
304
+ if (!defined?val)
305
+ raise ArgumentError, "Net::DNS::typesbyval() argument is not defined"
306
+ end
307
+
308
+ if val.class == String
309
+ # if val.gsub!("^\s*0*(\d+)\s*$", "$1")
310
+ if ((val =~ /^\s*0*(\d+)\s*$", "$1/o) == nil)
311
+ raise ArgumentError, "Net::DNS::typesbyval() argument (#{val}) is not numeric"
312
+ # val =~s/^\s*0*(\d+)\s*$/$1/o;
313
+ end
314
+
315
+ val = $1.to_i
316
+ end
317
+
318
+
319
+ if to_string(val)
320
+ return to_string(val)
321
+ end
322
+
323
+ raise ArgumentError, 'Net::DNS::typesbyval() argument larger than ' + 0xffff if
324
+ val > 0xffff;
325
+
326
+ return "TYPE#{val}";
327
+ end
328
+ end
329
+
330
+ class QTypes < CodeMapper
331
+ IXFR = 251 # incremental transfer [RFC1995]
332
+ AXFR = 252 # transfer of an entire zone [RFC1035]
333
+ MAILB = 253 # mailbox-related RRs (MB, MG or MR) [RFC1035]
334
+ MAILA = 254 # mail agent RRs (Obsolete - see MX) [RFC1035]
335
+ ANY = 255 # all records [RFC1035]
336
+ update()
337
+ end
338
+
339
+ class MetaTypes < CodeMapper
340
+ TKEY = 249 # Transaction Key [RFC2930]
341
+ TSIG = 250 # Transaction Signature [RFC2845]
342
+ OPT = 41 # RFC 2671
343
+ end
344
+
345
+ class Algorithms < CodeMapper
346
+ RSAMD5 = 1
347
+ DH = 2
348
+ DSA = 3
349
+ ECC = 4
350
+ RSASHA1 = 5
351
+ DSANSEC3SHA1 = 131
352
+ RSASHA1NSEC3SHA1 = 133
353
+ INDIRECT = 252
354
+ PRIVATEDNS = 253
355
+ PRIVATEOID = 254
356
+ update()
357
+ end
358
+
359
+ #An error raised while querying for a resource
360
+ class ResolvError < StandardError
361
+ end
362
+
363
+ #A timeout error raised while querying for a resource
364
+ class ResolvTimeout < TimeoutError
365
+ end
366
+
367
+ #The requested domain does not exist
368
+ class NXDomain < ResolvError
369
+ end
370
+
371
+ #A format error in a received DNS message
372
+ class FormErr < ResolvError
373
+ end
374
+
375
+ #Indicates a failure in the remote resolver
376
+ class ServFail < ResolvError
377
+ end
378
+
379
+ #The requested operation is not implemented in the remote resolver
380
+ class NotImp < ResolvError
381
+ end
382
+
383
+ #The requested operation was refused by the remote resolver
384
+ class Refused < ResolvError
385
+ end
386
+
387
+ #Another kind of resolver error has occurred
388
+ class OtherResolvError < ResolvError
389
+ end
390
+
391
+ #Indicates an error in decoding an incoming DNS message
392
+ class DecodeError < ResolvError
393
+ end
394
+
395
+ #Indicates an error encoding a DNS message for transmission
396
+ class EncodeError < ResolvError
397
+ end
398
+
399
+ #Indicates an error verifying
400
+ class VerifyError < ResolvError
401
+ end
402
+
403
+ #The Resolv class can be used to resolve addresses using /etc/hosts and /etc/resolv.conf,
404
+ #
405
+ #The DNS class may be used to perform more queries. If greater control over the sending
406
+ #of packets is required, then the Resolver or SingleResolver classes may be used.
407
+ class Resolv
408
+
409
+ #Looks up the first IP address for +name+
410
+ def self.getaddress(name)
411
+ DefaultResolver.getaddress(name)
412
+ end
413
+
414
+ #Looks up all IP addresses for +name+
415
+ def self.getaddresses(name)
416
+ DefaultResolver.getaddresses(name)
417
+ end
418
+
419
+ #Iterates over all IP addresses for +name+
420
+ def self.each_address(name, &block)
421
+ DefaultResolver.each_address(name, &block)
422
+ end
423
+
424
+ #Looks up the first hostname of +address+
425
+ def self.getname(address)
426
+ DefaultResolver.getname(address)
427
+ end
428
+
429
+ #Looks up all hostnames of +address+
430
+ def self.getnames(address)
431
+ DefaultResolver.getnames(address)
432
+ end
433
+
434
+ #Iterates over all hostnames of +address+
435
+ def self.each_name(address, &proc)
436
+ DefaultResolver.each_name(address, &proc)
437
+ end
438
+
439
+ #Creates a new Resolv using +resolvers+
440
+ def initialize(resolvers=[Hosts.new, DNS.new])
441
+ @resolvers = resolvers
442
+ end
443
+
444
+ #Looks up the first IP address for +name+
445
+ def getaddress(name)
446
+ each_address(name) {|address| return address}
447
+ raise ResolvError.new("no address for #{name}")
448
+ end
449
+
450
+ #Looks up all IP addresses for +name+
451
+ def getaddresses(name)
452
+ ret = []
453
+ each_address(name) {|address| ret << address}
454
+ return ret
455
+ end
456
+
457
+ #Iterates over all IP addresses for +name+
458
+ def each_address(name)
459
+ if AddressRegex =~ name
460
+ yield name
461
+ return
462
+ end
463
+ yielded = false
464
+ @resolvers.each {|r|
465
+ r.each_address(name) {|address|
466
+ yield address.to_s
467
+ yielded = true
468
+ }
469
+ return if yielded
470
+ }
471
+ end
472
+
473
+ #Looks up the first hostname of +address+
474
+ def getname(address)
475
+ each_name(address) {|name| return name}
476
+ raise ResolvError.new("no name for #{address}")
477
+ end
478
+
479
+ #Looks up all hostnames of +address+
480
+ def getnames(address)
481
+ ret = []
482
+ each_name(address) {|name| ret << name}
483
+ return ret
484
+ end
485
+
486
+ #Iterates over all hostnames of +address+
487
+ def each_name(address)
488
+ yielded = false
489
+ @resolvers.each {|r|
490
+ r.each_name(address) {|name|
491
+ yield name.to_s
492
+ yielded = true
493
+ }
494
+ return if yielded
495
+ }
496
+ end
497
+
498
+
499
+ require 'Dnsruby/DNS'
500
+ require 'Dnsruby/Hosts'
501
+ require 'Dnsruby/message'
502
+ require 'Dnsruby/update'
503
+ require 'Dnsruby/zone_transfer'
504
+ require 'Dnsruby/dnssec'
505
+
506
+ #Default Resolver to use for Dnsruby class methods
507
+ DefaultResolver = self.new
508
+
509
+ #Address RegExp to use for matching IP addresses
510
+ AddressRegex = /(?:#{IPv4::Regex})|(?:#{IPv6::Regex})/
511
+ end
512
+ end