dnsruby 1.55 → 1.56.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 (158) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -0
  3. data/Rakefile +30 -29
  4. data/demo/axfr.rb +93 -93
  5. data/demo/check_soa.rb +99 -99
  6. data/demo/check_zone.rb +59 -59
  7. data/demo/digdlv.rb +43 -43
  8. data/demo/digroot.rb +34 -34
  9. data/demo/example_recurse.rb +14 -14
  10. data/demo/mresolv.rb +30 -30
  11. data/demo/mx.rb +31 -31
  12. data/demo/rubydig.rb +37 -37
  13. data/demo/to_resolve.txt +3088 -3088
  14. data/demo/trace_dns.rb +46 -46
  15. data/lib/dnsruby.rb +161 -526
  16. data/lib/dnsruby/DNS.rb +305 -0
  17. data/lib/{Dnsruby/Cache.rb → dnsruby/cache.rb} +152 -152
  18. data/lib/{Dnsruby → dnsruby}/code_mapper.rb +48 -52
  19. data/lib/dnsruby/code_mappers.rb +295 -0
  20. data/lib/{Dnsruby/Config.rb → dnsruby/config.rb} +454 -454
  21. data/lib/{Dnsruby → dnsruby}/dnssec.rb +91 -91
  22. data/lib/{Dnsruby/Hosts.rb → dnsruby/hosts.rb} +125 -125
  23. data/lib/{Dnsruby → dnsruby}/ipv4.rb +26 -26
  24. data/lib/{Dnsruby → dnsruby}/ipv6.rb +42 -42
  25. data/lib/{Dnsruby → dnsruby}/key_cache.rb +29 -29
  26. data/lib/dnsruby/message/decoder.rb +164 -0
  27. data/lib/dnsruby/message/encoder.rb +75 -0
  28. data/lib/dnsruby/message/header.rb +249 -0
  29. data/lib/dnsruby/message/message.rb +629 -0
  30. data/lib/dnsruby/message/question.rb +86 -0
  31. data/lib/dnsruby/message/section.rb +96 -0
  32. data/lib/{Dnsruby → dnsruby}/name.rb +141 -141
  33. data/lib/dnsruby/packet_sender.rb +661 -0
  34. data/lib/{Dnsruby/Recursor.rb → dnsruby/recursor.rb} +235 -233
  35. data/lib/dnsruby/resolv.rb +113 -0
  36. data/lib/dnsruby/resolver.rb +1192 -0
  37. data/lib/dnsruby/resource/A.rb +56 -0
  38. data/lib/dnsruby/resource/AAAA.rb +54 -0
  39. data/lib/{Dnsruby → dnsruby}/resource/AFSDB.rb +68 -68
  40. data/lib/{Dnsruby → dnsruby}/resource/CERT.rb +105 -105
  41. data/lib/{Dnsruby → dnsruby}/resource/DHCID.rb +54 -54
  42. data/lib/dnsruby/resource/DLV.rb +27 -0
  43. data/lib/{Dnsruby → dnsruby}/resource/DNSKEY.rb +372 -372
  44. data/lib/{Dnsruby → dnsruby}/resource/DS.rb +255 -255
  45. data/lib/{Dnsruby → dnsruby}/resource/HINFO.rb +71 -71
  46. data/lib/{Dnsruby → dnsruby}/resource/HIP.rb +29 -29
  47. data/lib/{Dnsruby → dnsruby}/resource/IN.rb +30 -30
  48. data/lib/{Dnsruby → dnsruby}/resource/IPSECKEY.rb +31 -31
  49. data/lib/{Dnsruby → dnsruby}/resource/ISDN.rb +62 -62
  50. data/lib/{Dnsruby → dnsruby}/resource/KX.rb +65 -65
  51. data/lib/{Dnsruby → dnsruby}/resource/LOC.rb +263 -263
  52. data/lib/{Dnsruby → dnsruby}/resource/MINFO.rb +69 -69
  53. data/lib/{Dnsruby → dnsruby}/resource/MX.rb +65 -65
  54. data/lib/{Dnsruby → dnsruby}/resource/NAPTR.rb +98 -98
  55. data/lib/{Dnsruby → dnsruby}/resource/NSAP.rb +171 -171
  56. data/lib/dnsruby/resource/NSEC.rb +275 -0
  57. data/lib/dnsruby/resource/NSEC3.rb +332 -0
  58. data/lib/dnsruby/resource/NSEC3PARAM.rb +135 -0
  59. data/lib/dnsruby/resource/OPT.rb +272 -0
  60. data/lib/{Dnsruby → dnsruby}/resource/PX.rb +70 -70
  61. data/lib/{Dnsruby → dnsruby}/resource/RP.rb +75 -75
  62. data/lib/dnsruby/resource/RR.rb +421 -0
  63. data/lib/dnsruby/resource/RRSIG.rb +275 -0
  64. data/lib/dnsruby/resource/RRSet.rb +190 -0
  65. data/lib/{Dnsruby → dnsruby}/resource/RT.rb +67 -67
  66. data/lib/{Dnsruby → dnsruby}/resource/SOA.rb +94 -94
  67. data/lib/dnsruby/resource/SPF.rb +29 -0
  68. data/lib/dnsruby/resource/SRV.rb +112 -0
  69. data/lib/{Dnsruby → dnsruby}/resource/SSHFP.rb +14 -14
  70. data/lib/dnsruby/resource/TKEY.rb +163 -0
  71. data/lib/dnsruby/resource/TSIG.rb +593 -0
  72. data/lib/{Dnsruby → dnsruby}/resource/TXT.rb +191 -191
  73. data/lib/dnsruby/resource/X25.rb +55 -0
  74. data/lib/{Dnsruby → dnsruby}/resource/domain_name.rb +25 -25
  75. data/lib/{Dnsruby → dnsruby}/resource/generic.rb +80 -80
  76. data/lib/dnsruby/resource/resource.rb +25 -0
  77. data/lib/{Dnsruby → dnsruby}/select_thread.rb +148 -148
  78. data/lib/{Dnsruby/SingleResolver.rb → dnsruby/single_resolver.rb} +60 -60
  79. data/lib/{Dnsruby → dnsruby}/single_verifier.rb +344 -344
  80. data/lib/dnsruby/the_log.rb +44 -0
  81. data/lib/dnsruby/update.rb +278 -0
  82. data/lib/dnsruby/validator_thread.rb +124 -0
  83. data/lib/dnsruby/version.rb +3 -0
  84. data/lib/{Dnsruby → dnsruby}/zone_reader.rb +93 -93
  85. data/lib/{Dnsruby → dnsruby}/zone_transfer.rb +377 -377
  86. data/test/spec_helper.rb +16 -0
  87. data/test/tc_axfr.rb +31 -34
  88. data/test/tc_cache.rb +32 -32
  89. data/test/tc_dlv.rb +28 -28
  90. data/test/tc_dns.rb +73 -76
  91. data/test/tc_dnskey.rb +31 -32
  92. data/test/tc_dnsruby.rb +50 -44
  93. data/test/tc_ds.rb +36 -36
  94. data/test/tc_escapedchars.rb +252 -255
  95. data/test/tc_hash.rb +17 -21
  96. data/test/tc_header.rb +48 -57
  97. data/test/tc_hip.rb +19 -22
  98. data/test/tc_ipseckey.rb +18 -21
  99. data/test/tc_keith.rb +300 -0
  100. data/test/tc_message.rb +87 -0
  101. data/test/tc_misc.rb +83 -87
  102. data/test/tc_name.rb +81 -84
  103. data/test/tc_naptr.rb +18 -21
  104. data/test/tc_nsec.rb +55 -55
  105. data/test/tc_nsec3.rb +23 -24
  106. data/test/tc_nsec3param.rb +20 -21
  107. data/test/tc_packet.rb +90 -93
  108. data/test/tc_packet_unique_push.rb +48 -51
  109. data/test/tc_question.rb +30 -33
  110. data/test/tc_queue.rb +16 -17
  111. data/test/tc_recur.rb +16 -17
  112. data/test/tc_res_config.rb +38 -41
  113. data/test/tc_res_env.rb +29 -32
  114. data/test/tc_res_file.rb +26 -29
  115. data/test/tc_res_opt.rb +62 -65
  116. data/test/tc_resolver.rb +287 -242
  117. data/test/tc_rr-opt.rb +70 -63
  118. data/test/tc_rr-txt.rb +68 -71
  119. data/test/tc_rr-unknown.rb +45 -48
  120. data/test/tc_rr.rb +76 -70
  121. data/test/tc_rrset.rb +21 -22
  122. data/test/tc_rrsig.rb +19 -20
  123. data/test/tc_single_resolver.rb +294 -297
  124. data/test/tc_soak.rb +199 -202
  125. data/test/tc_soak_base.rb +29 -34
  126. data/test/tc_sshfp.rb +20 -23
  127. data/test/tc_tcp.rb +32 -35
  128. data/test/tc_tkey.rb +41 -44
  129. data/test/tc_tsig.rb +81 -84
  130. data/test/tc_update.rb +108 -111
  131. data/test/tc_validator.rb +29 -29
  132. data/test/tc_verifier.rb +81 -82
  133. data/test/ts_dnsruby.rb +16 -15
  134. data/test/ts_offline.rb +62 -63
  135. data/test/ts_online.rb +115 -115
  136. metadata +155 -90
  137. data/README +0 -59
  138. data/lib/Dnsruby/DNS.rb +0 -305
  139. data/lib/Dnsruby/PacketSender.rb +0 -656
  140. data/lib/Dnsruby/Resolver.rb +0 -1189
  141. data/lib/Dnsruby/TheLog.rb +0 -44
  142. data/lib/Dnsruby/message.rb +0 -1230
  143. data/lib/Dnsruby/resource/A.rb +0 -56
  144. data/lib/Dnsruby/resource/AAAA.rb +0 -54
  145. data/lib/Dnsruby/resource/DLV.rb +0 -27
  146. data/lib/Dnsruby/resource/NSEC.rb +0 -298
  147. data/lib/Dnsruby/resource/NSEC3.rb +0 -340
  148. data/lib/Dnsruby/resource/NSEC3PARAM.rb +0 -135
  149. data/lib/Dnsruby/resource/OPT.rb +0 -213
  150. data/lib/Dnsruby/resource/RRSIG.rb +0 -275
  151. data/lib/Dnsruby/resource/SPF.rb +0 -29
  152. data/lib/Dnsruby/resource/SRV.rb +0 -112
  153. data/lib/Dnsruby/resource/TKEY.rb +0 -163
  154. data/lib/Dnsruby/resource/TSIG.rb +0 -593
  155. data/lib/Dnsruby/resource/X25.rb +0 -55
  156. data/lib/Dnsruby/resource/resource.rb +0 -678
  157. data/lib/Dnsruby/update.rb +0 -278
  158. data/lib/Dnsruby/validator_thread.rb +0 -124
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3bf240da7425f65b0de26f548c79285a79f4e50b
4
- data.tar.gz: 4c14a8ede6896cbd22365ed0f8fddef5598ef49e
3
+ metadata.gz: 3d4002c20d43d7fa849e81970e596e8b191a9290
4
+ data.tar.gz: b1ebd40548471fd16a12616d3c834b9c30a8a26e
5
5
  SHA512:
6
- metadata.gz: c6b77e8e70661df99d525009677064d530fa8e4e7565bf89f9215b51d90be6dda40f1df47dcaee9ff8e26ebefe5da3d0ab2448c3a5a80a95e8229ef32df5f31b
7
- data.tar.gz: ed19bc67dbf0f470ad098758e19f61d927bb459692e40d6d5972353aa7ff544082f162423758abc0e2717f96892f41b08648ed43c78f3713e730c9b3fd4f1654
6
+ metadata.gz: 4f3f304b2f3ea1df07a0a24854e20a003f16964840800dae9ad574318369095ebec119ce7f074a3658564c530a84ec2f6a6a9a2b8fa2721aa4e6f329f982d6c3
7
+ data.tar.gz: ab251ceaffa37db6a13eb2b7064c8cf16babdf15d75ef79d91de1e2140a7552b1759cb34f6d051bc649242396bce9edeadc758f51231a02be69788e55b036b44
data/README.md ADDED
@@ -0,0 +1,96 @@
1
+ [![Build Status](https://travis-ci.org/alexdalitz/dnsruby.svg?branch=master)](https://travis-ci.org/alexdalitz/dnsruby)
2
+ [![Coverage Status](https://img.shields.io/coveralls/alexdalitz/dnsruby.svg)](https://coveralls.io/r/alexdalitz/dnsruby?branch=master)
3
+
4
+ Dnsruby
5
+ =======
6
+
7
+ Dnsruby is a pure Ruby DNS client library which implements a
8
+ stub resolver. It aims to comply with all DNS RFCs, including
9
+ DNSSEC NSEC3 support.
10
+
11
+ Dnsruby presents an enhanced API for DNS. It is based on Ruby's core
12
+ resolv.rb Resolv API, but has been much extended to provide a
13
+ complete DNS implementation.
14
+
15
+ Dnsruby runs a single I/O thread to handle all concurrent
16
+ queries. It is therefore suitable for high volume DNS applications.
17
+
18
+ The following is a (non-exhaustive) list of features :
19
+
20
+ - Implemented RRs : A, AAAA, AFSDB, ANY, CERT, CNAME, DNAME,
21
+ HINFO, ISDN, LOC, MB, MG, MINFO, MR, MX, NAPTR, NS, NSAP,
22
+ OPT, PTR, PX, RP, RT, SOA, SPF, SRV, TKEY, TSIG, TXT, WKS,
23
+ X25, DNSKEY, RRSIG, NSEC, NSEC3, NSEC3PARAM, DS, DLV
24
+
25
+ - Generic RR types supported (RFC3597)
26
+
27
+ - (Signed) Zone transfer (AXFR and IXFR) supported
28
+
29
+ - (Signed) Dynamic updates supported
30
+
31
+ - DNSSEC validation supported
32
+
33
+ Dependencies
34
+ ------------
35
+
36
+ Dnsruby can run with no dependencies. However, if you wish to
37
+ use TSIG or DNSSEC then the OpenSSL library must be available.
38
+ This is a part of the Ruby standard library, but appears not to
39
+ be present on all Ruby platforms. If it is not available, then
40
+ the test code will not run the tests which require it. Code which
41
+ attempts to use the library (if it is not present) will raise an
42
+ exception.
43
+
44
+ Demo Code
45
+ ---------
46
+
47
+ The demo folder contains some example programs using Dnsruby.
48
+ These examples include a basic dig tool (rubydig) and a tool to
49
+ concurrently resolve many names, amongst others.
50
+
51
+ Unit Tests
52
+ ----------
53
+
54
+ Tests require a current version of minitest (see the .gemspec file
55
+ for which version is required). In order for the tests to run
56
+ successfully you may need to have the bundler gem installed and
57
+ run `bundle` or `bundle install` from the project root to install
58
+ a suitable version of minitest.
59
+
60
+ There are "online" and "offline" tests. You can use rake to
61
+ conveniently run the tests. From the project root you can run:
62
+ ```
63
+ rake test # run all tests
64
+ rake test_offline # run only offline tests
65
+ rake test_online # run only online tests
66
+ ```
67
+ If you get the following error when running rake test tasks,
68
+ then you may need to preface the command with bundle exec to
69
+ ensure that the gem versions specified in Gemfile.lock are used
70
+ at runtime:
71
+
72
+ ```
73
+ bundle exec rake test
74
+ ```
75
+
76
+ Nominet operates a test server which the Dnsruby test code queries.
77
+ If this server is not available then some of the online tests will
78
+ not be run.
79
+
80
+
81
+ Usage Help
82
+ ----------
83
+
84
+ There are a couple of blog articles that might be helpful
85
+ in understanding how to use Dnsruby:
86
+
87
+ * http://blog.nominet.org.uk/tech/2009/05/19/some-examples-of-dnsruby-in-action/
88
+ * http://blog.nominet.org.uk/tech/2009/05/21/examples-of-using-dnsruby-with-dnssec/
89
+
90
+
91
+ Contact
92
+ -------
93
+
94
+ alex@caerkettontech.com
95
+ https://github.com/alexdalitz/dnsruby
96
+
data/Rakefile CHANGED
@@ -1,29 +1,30 @@
1
- require 'rake/testtask'
2
- require 'rdoc/task'
3
-
4
- Rake::RDocTask.new do |rd|
5
- rd.rdoc_files.include("lib/**/*.rb")
6
- rd.rdoc_files.exclude("lib/Dnsruby/iana_ports.rb")
7
- rd.main = "Dnsruby"
8
- # rd.options << "--ri"
9
- end
10
-
11
- task :test => :install do
12
- # require 'rake/runtest'
13
- # Rake.run_tests 'test/ts_dnsruby.rb'
14
- require 'rake/testtask'
15
-
16
- Rake::TestTask.new do |t|
17
- t.libs << "test"
18
- t.test_files = FileList['test/ts_dnsruby.rb']
19
- t.verbose = true
20
- end
21
- end
22
-
23
- task :default => :install do
24
- end
25
-
26
- task :install do
27
- sh "ruby setup.rb"
28
- end
29
-
1
+ require 'rake/testtask'
2
+
3
+ ENV['RUN_EXTRA_TASK'] = 'TRUE' if
4
+ RUBY_VERSION >= "1.9.3" && defined?(RUBY_ENGINE) && RUBY_ENGINE == 'ruby'
5
+
6
+ if ENV['RUN_EXTRA_TASK'] == 'TRUE'
7
+ require 'rdoc/task'
8
+
9
+ Rake::RDocTask.new do |rd|
10
+ rd.rdoc_files.include("lib/**/*.rb")
11
+ rd.rdoc_files.exclude("lib/Dnsruby/iana_ports.rb")
12
+ rd.main = "Dnsruby"
13
+ # rd.options << "--ri"
14
+ end
15
+
16
+ require 'coveralls/rake/task'
17
+ Coveralls::RakeTask.new
18
+ end
19
+
20
+ def create_task(task_name, test_suite_filespec)
21
+ Rake::TestTask.new do |t|
22
+ t.name = task_name
23
+ t.test_files = FileList[test_suite_filespec]
24
+ t.verbose = true
25
+ end
26
+ end
27
+
28
+ create_task(:test, 'test/ts_dnsruby.rb')
29
+ create_task(:test_offline, 'test/ts_offline.rb')
30
+ create_task(:test_online, 'test/ts_online.rb')
data/demo/axfr.rb CHANGED
@@ -1,80 +1,80 @@
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
- #
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
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
-
17
- #= NAME
18
- #
19
- #axfr - Perform a DNS zone transfer
20
- #
21
- #= SYNOPSIS
22
- #
23
- #axfr [ -fqs ] [ -D directory ] [ @nameserver ] zone
24
- #
25
- #= DESCRIPTION
26
- #
27
- #axfr performs a DNS zone transfer, prints each record to the standard
28
- #output, and stores the zone to a file. If the zone has already been
29
- #stored in a file, axfr will read the file instead of performing a
30
- #zone transfer.
31
- #
32
- #Zones will be stored in a directory hierarchy. For example, the
33
- #zone transfer for foo.bar.com will be stored in the file
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
+
17
+ # = NAME
18
+ #
19
+ # axfr - Perform a DNS zone transfer
20
+ #
21
+ # = SYNOPSIS
22
+ #
23
+ # axfr [ -fqs ] [ -D directory ] [ @nameserver ] zone
24
+ #
25
+ # = DESCRIPTION
26
+ #
27
+ # axfr performs a DNS zone transfer, prints each record to the standard
28
+ # output, and stores the zone to a file. If the zone has already been
29
+ # stored in a file, axfr will read the file instead of performing a
30
+ # zone transfer.
31
+ #
32
+ # Zones will be stored in a directory hierarchy. For example, the
33
+ # zone transfer for foo.bar.com will be stored in the file
34
34
  # HOME/.dns-zones/com/bar/foo/axfr. The directory can be changed
35
35
  # with the B<-D> option.
36
- #
36
+ #
37
37
  # This programs requires that the Storable module be installed.
38
- #
39
- #= OPTIONS
40
- #
38
+ #
39
+ # = OPTIONS
40
+ #
41
41
  # * -f Force a zone transfer, even if the zone has already been stored
42
42
  # in a file.
43
- #
43
+ #
44
44
  # * -q Be quiet -- don't print the records from the zone.
45
- #
45
+ #
46
46
  # * -s Perform a zone transfer if the SOA serial number on the nameserver
47
47
  # is different than the serial number in the zone file.
48
- #
48
+ #
49
49
  # * -D directory Store zone files under I<directory> instead of the default directory (see "FILES")
50
- #
50
+ #
51
51
  # * nameserver Query nameserver instead of the default nameserver.
52
- #
53
- #= FILES
54
- #
52
+ #
53
+ # = FILES
54
+ #
55
55
  # * ${HOME}/.dns-zones Default directory for storing zone files.
56
- #
57
- #= AUTHOR
58
- #
56
+ #
57
+ # = AUTHOR
58
+ #
59
59
  # Michael Fuhr <mike@fuhr.org>
60
- #
60
+ #
61
61
 
62
62
  require 'getoptLong'
63
63
  require 'dnsruby'
64
64
 
65
- #------------------------------------------------------------------------------
65
+ # ------------------------------------------------------------------------------
66
66
  # Read any command-line options and check syntax.
67
- #------------------------------------------------------------------------------
67
+ # ------------------------------------------------------------------------------
68
68
 
69
- #getopts("fqsD:");
69
+ # getopts("fqsD:");
70
70
  opts = GetoptLong.new(["-f", GetoptLong::NO_ARGUMENT],
71
71
  ["-q", GetoptLong::NO_ARGUMENT],
72
72
  ["-D", GetoptLong::REQUIRED_ARGUMENT],
73
73
  ["-s", GetoptLong::NO_ARGUMENT])
74
74
 
75
75
  opt_q = false
76
- opt_f = false
77
- opt_s = false
76
+ opt_f = false
77
+ opt_s = false
78
78
  opt_d = nil
79
79
  opts.each do |opt, arg|
80
80
  case opt
@@ -90,13 +90,13 @@ opts.each do |opt, arg|
90
90
  end
91
91
 
92
92
  if (ARGV.length < 1) || (ARGV.length > 2)
93
- print "Usage: #{$0} [ -fqs ] [ -D directory ] [ @nameserver ] zone\n"
93
+ print "Usage: #{$0} [ -fqs ] [ -D directory ] [ @nameserver ] zone\n"
94
94
  else
95
- #------------------------------------------------------------------------------
96
- # Get the nameserver (if specified) and set up the zone transfer directory
97
- # hierarchy.
98
- #------------------------------------------------------------------------------
99
-
95
+ # ------------------------------------------------------------------------------
96
+ # Get the nameserver (if specified) and set up the zone transfer directory
97
+ # hierarchy.
98
+ # ------------------------------------------------------------------------------
99
+
100
100
  nameserver = (ARGV[0] =~ /^@/) ? ARGV.shift : ""
101
101
  nameserver = nameserver.sub(/^@/, "")
102
102
  res = nil
@@ -105,18 +105,18 @@ else
105
105
  else
106
106
  res = Dnsruby::Resolver.new
107
107
  end
108
-
109
- zone = ARGV.shift
108
+
109
+ zone = ARGV.shift
110
110
  basedir = opt_d!=nil ? opt_d : (ENV["HOME"]!=nil ? ENV["HOME"] : "") + "/.dns-zones"
111
111
  zonedir = zone.split(/\./).reverse.join("/")
112
112
  zonefile = basedir + "/" + zonedir + "/axfr"
113
-
114
- # Don't worry about the 0777 permissions here - the current umask setting
115
- # will be applied.
116
- if !(FileTest.directory?basedir)
113
+
114
+ # Don't worry about the 0777 permissions here - the current umask setting
115
+ # will be applied.
116
+ if !(FileTest.directory?basedir)
117
117
  Dir.mkdir(basedir, 0777) or raise RuntimeError, "can't mkdir #{basedir}: #{$!}\n"
118
118
  end
119
-
119
+
120
120
  dir = basedir
121
121
  zonedir.split("/").each do |subdir|
122
122
  dir += "/" + subdir
@@ -124,26 +124,26 @@ else
124
124
  Dir.mkdir(dir, 0777) or raise RuntimeError, "can't mkdir #{dir}: #{$!}\n"
125
125
  end
126
126
  end
127
-
128
- #------------------------------------------------------------------------------
129
- # Get the zone.
130
- #------------------------------------------------------------------------------
131
-
127
+
128
+ # ------------------------------------------------------------------------------
129
+ # Get the zone.
130
+ # ------------------------------------------------------------------------------
131
+
132
132
  zonearray = nil
133
-
133
+
134
134
  if (FileTest.exist?(zonefile) && !opt_f)
135
135
  zoneref = Marshal.load(File.open(zonefile))
136
136
  if (zoneref==nil)
137
137
  raise RuntimeError, "couldn't retrieve zone from #{zonefile}: #{$!}\n"
138
138
  end
139
-
140
- #----------------------------------------------------------------------
141
- # Check the SOA serial number if desired.
142
- #----------------------------------------------------------------------
143
-
139
+
140
+ # ----------------------------------------------------------------------
141
+ # Check the SOA serial number if desired.
142
+ # ----------------------------------------------------------------------
143
+
144
144
  if (opt_s)
145
145
  serial_file, serial_zone = nil
146
-
146
+
147
147
  zoneref.each do |rr|
148
148
  if (rr.type == "SOA")
149
149
  serial_file = rr.serial
@@ -151,48 +151,48 @@ else
151
151
  end
152
152
  end
153
153
  if serial_file==nil
154
- raise RuntimeError, "no SOA in #{zonefile}\n"
154
+ raise RuntimeError, "no SOA in #{zonefile}\n"
155
155
  end
156
-
156
+
157
157
  soa = res.query(zone, "SOA")
158
158
  if soa==nil
159
- raise RuntimeError, "couldn't get SOA for #{zone}: " + res.errorstring + "\n"
159
+ raise RuntimeError, "couldn't get SOA for #{zone}: " + res.errorstring + "\n"
160
160
  end
161
-
161
+
162
162
  soa.answer.each do |rr|
163
163
  if (rr.type == "SOA")
164
164
  serial_zone = rr.serial
165
165
  break
166
166
  end
167
167
  end
168
-
168
+
169
169
  if (serial_zone != serial_file)
170
170
  opt_f = true
171
171
  end
172
- end
172
+ end
173
173
  else
174
174
  opt_f = true
175
175
  end
176
-
176
+
177
177
  if (opt_f)
178
178
  print "nameserver = #{nameserver}, zone=#{zone}"
179
179
  zt = Dnsruby::ZoneTransfer.new
180
180
  zt.server=(nameserver) if nameserver!=""
181
-
181
+
182
182
  zoneref = zt.transfer(zone)
183
183
  if zoneref==nil
184
184
  raise RuntimeError, "couldn't transfer zone\n"
185
185
  end
186
186
  Marshal.dump(zoneref, File.open(zonefile, File::CREAT|File::RDWR))
187
187
  end
188
-
189
- #------------------------------------------------------------------------------
190
- # Print the records in the zone.
191
- #------------------------------------------------------------------------------
192
-
193
- if (!opt_q)
188
+
189
+ # ------------------------------------------------------------------------------
190
+ # Print the records in the zone.
191
+ # ------------------------------------------------------------------------------
192
+
193
+ if (!opt_q)
194
194
  zoneref.each do |z|
195
195
  print z.to_s + "\n"
196
196
  end
197
- end
198
- end
197
+ end
198
+ end