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
data/demo/check_soa.rb CHANGED
@@ -1,62 +1,62 @@
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
-
18
- #= NAME
19
- #
20
- #check_soa - Check a domain's nameservers
21
- #
22
- #= SYNOPSIS
23
- #
24
- #check_soa domain
25
- #
26
- #= DESCRIPTION
27
- #
28
- #check_soa queries each of a domain's nameservers for the Start
29
- #of Authority (SOA) record and prints the serial number. Errors
30
- #are printed for nameservers that couldn't be reached or didn't
31
- #answer authoritatively.
32
- #
33
- #= AUTHOR
34
- #
35
- #The original Bourne Shell and C versions were printed in
36
- #"DNS and BIND" by Paul Albitz & Cricket Liu.
37
- #
38
- #This Perl version was written by Michael Fuhr <mike@fuhr.org>.
39
- #
40
- #= SEE ALSO
41
- #
42
- #axfr, check_zone, mresolv, mx, perldig, Net::DNS
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
+
18
+ # = NAME
19
+ #
20
+ # check_soa - Check a domain's nameservers
21
+ #
22
+ # = SYNOPSIS
23
+ #
24
+ # check_soa domain
25
+ #
26
+ # = DESCRIPTION
27
+ #
28
+ # check_soa queries each of a domain's nameservers for the Start
29
+ # of Authority (SOA) record and prints the serial number. Errors
30
+ # are printed for nameservers that couldn't be reached or didn't
31
+ # answer authoritatively.
32
+ #
33
+ # = AUTHOR
34
+ #
35
+ # The original Bourne Shell and C versions were printed in
36
+ # "DNS and BIND" by Paul Albitz & Cricket Liu.
37
+ #
38
+ # This Perl version was written by Michael Fuhr <mike@fuhr.org>.
39
+ #
40
+ # = SEE ALSO
41
+ #
42
+ # axfr, check_zone, mresolv, mx, perldig, Net::DNS
43
43
 
44
44
  require 'dnsruby'
45
45
 
46
- #------------------------------------------------------------------------------
46
+ # ------------------------------------------------------------------------------
47
47
  # Get the domain from the command line.
48
- #------------------------------------------------------------------------------
48
+ # ------------------------------------------------------------------------------
49
49
 
50
- if ARGV.length ==1
50
+ if ARGV.length ==1
51
51
  domain = ARGV[0]
52
-
53
- #------------------------------------------------------------------------------
54
- # Find all the nameservers for the domain.
55
- #------------------------------------------------------------------------------
56
-
52
+
53
+ # ------------------------------------------------------------------------------
54
+ # Find all the nameservers for the domain.
55
+ # ------------------------------------------------------------------------------
56
+
57
57
  res = Dnsruby::Resolver.new
58
-
59
- # res.defnames=(0)
58
+
59
+ # res.defnames=(0)
60
60
  res.retry_times=(2)
61
61
  ns_req = nil
62
62
  begin
@@ -68,27 +68,27 @@ if ARGV.length ==1
68
68
  if (ns_req.header.ancount == 0)
69
69
  print "No nameservers found for #{domain}\n"
70
70
  return
71
- end
72
-
73
- # Send out non-recursive queries
71
+ end
72
+
73
+ # Send out non-recursive queries
74
74
  res.recurse=(0)
75
-
76
-
77
- #------------------------------------------------------------------------------
78
- # Check the SOA record on each nameserver.
79
- #------------------------------------------------------------------------------
80
-
75
+
76
+
77
+ # ------------------------------------------------------------------------------
78
+ # Check the SOA record on each nameserver.
79
+ # ------------------------------------------------------------------------------
80
+
81
81
  (ns_req.answer.select {|r| r.type == "NS"}).each do |nsrr|
82
-
83
- #----------------------------------------------------------------------
84
- # Set the resolver to query this nameserver.
85
- #----------------------------------------------------------------------
82
+
83
+ # ----------------------------------------------------------------------
84
+ # Set the resolver to query this nameserver.
85
+ # ----------------------------------------------------------------------
86
86
  ns = nsrr.domainname
87
-
88
- # In order to lookup the IP(s) of the nameserver, we need a Resolver
89
- # object that is set to our local, recursive nameserver. So we create
90
- # a new object just to do that.
91
-
87
+
88
+ # In order to lookup the IP(s) of the nameserver, we need a Resolver
89
+ # object that is set to our local, recursive nameserver. So we create
90
+ # a new object just to do that.
91
+
92
92
  local_res = Dnsruby::Resolver.new
93
93
  a_req=nil
94
94
  begin
@@ -97,20 +97,20 @@ if ARGV.length ==1
97
97
  print "Can not find address for #{ns}: #{e}\n"
98
98
  next
99
99
  end
100
-
100
+
101
101
  (a_req.answer.select {|r| r.type == 'A'}).each do |r|
102
102
  ip = r.address
103
- #----------------------------------------------------------------------
104
- # Ask this IP.
105
- #----------------------------------------------------------------------
106
-
103
+ # ----------------------------------------------------------------------
104
+ # Ask this IP.
105
+ # ----------------------------------------------------------------------
106
+
107
107
  res.nameserver=(ip.to_s)
108
-
108
+
109
109
  print "#{ns} (#{ip}): "
110
-
111
- #----------------------------------------------------------------------
112
- # Get the SOA record.
113
- #----------------------------------------------------------------------
110
+
111
+ # ----------------------------------------------------------------------
112
+ # Get the SOA record.
113
+ # ----------------------------------------------------------------------
114
114
  soa_req=nil
115
115
  begin
116
116
  soa_req = res.query(domain, 'SOA', 'IN')
@@ -118,38 +118,38 @@ if ARGV.length ==1
118
118
  print "Error : #{e}\n"
119
119
  next
120
120
  end
121
-
122
- #----------------------------------------------------------------------
123
- # Is this nameserver authoritative for the domain?
124
- #----------------------------------------------------------------------
125
-
121
+
122
+ # ----------------------------------------------------------------------
123
+ # Is this nameserver authoritative for the domain?
124
+ # ----------------------------------------------------------------------
125
+
126
126
  unless (soa_req.header.aa)
127
127
  print "isn't authoritative for #{domain}\n"
128
128
  next
129
129
  end
130
-
131
- #----------------------------------------------------------------------
132
- # We should have received exactly one answer.
133
- #----------------------------------------------------------------------
134
-
130
+
131
+ # ----------------------------------------------------------------------
132
+ # We should have received exactly one answer.
133
+ # ----------------------------------------------------------------------
134
+
135
135
  unless (soa_req.header.ancount == 1)
136
136
  print "expected 1 answer, got ", soa_req.header.ancount, "\n"
137
137
  next
138
138
  end
139
-
140
- #----------------------------------------------------------------------
141
- # Did we receive an SOA record?
142
- #----------------------------------------------------------------------
143
-
139
+
140
+ # ----------------------------------------------------------------------
141
+ # Did we receive an SOA record?
142
+ # ----------------------------------------------------------------------
143
+
144
144
  unless ((soa_req.answer)[0].type == "SOA")
145
145
  print "expected SOA, got ", (soa_req.answer)[0].type, "\n"
146
146
  next
147
147
  end
148
-
149
- #----------------------------------------------------------------------
150
- # Print the serial number.
151
- #----------------------------------------------------------------------
152
-
148
+
149
+ # ----------------------------------------------------------------------
150
+ # Print the serial number.
151
+ # ----------------------------------------------------------------------
152
+
153
153
  print "has serial number ", (soa_req.answer)[0].serial, "\n"
154
154
  end
155
155
  end
data/demo/check_zone.rb CHANGED
@@ -1,45 +1,45 @@
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
- #check_zone - Check a DNS zone for errors
20
- #
21
- #= SYNOPSIS
22
- #
23
- #check_zone [ -r ] <domain>
24
- #
25
- #= DESCRIPTION
26
- #
27
- #Checks a DNS zone for errors. Current checks are:
28
- #
29
- #* Checks that all A records have corresponding PTR records.
30
- #
31
- #* Checks that hosts listed in NS, MX, and CNAME records have
32
- #A records.
33
- #
34
- #= OPTIONS
35
- #
36
- #* -r Perform a recursive check on subdomains.
37
- #
38
- #= AUTHOR
39
- #
40
- #Michael Fuhr <mike@fuhr.org>
41
- #(Ruby version AlexD, Nominet UK)
42
- #
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
+ # check_zone - Check a DNS zone for errors
20
+ #
21
+ # = SYNOPSIS
22
+ #
23
+ # check_zone [ -r ] <domain>
24
+ #
25
+ # = DESCRIPTION
26
+ #
27
+ # Checks a DNS zone for errors. Current checks are:
28
+ #
29
+ # * Checks that all A records have corresponding PTR records.
30
+ #
31
+ # * Checks that hosts listed in NS, MX, and CNAME records have
32
+ # A records.
33
+ #
34
+ # = OPTIONS
35
+ #
36
+ # * -r Perform a recursive check on subdomains.
37
+ #
38
+ # = AUTHOR
39
+ #
40
+ # Michael Fuhr <mike@fuhr.org>
41
+ # (Ruby version AlexD, Nominet UK)
42
+ #
43
43
 
44
44
 
45
45
  require 'dnsruby'
@@ -48,13 +48,13 @@ require 'getoptLong'
48
48
  def check_domain(args)
49
49
  domain = args[0]
50
50
  klass = "IN"
51
- if (args.length > 1)
51
+ if (args.length > 1)
52
52
  klass = args[1]
53
53
  end
54
54
  print "----------------------------------------------------------------------\n"
55
55
  print "#{domain} (class #{klass}\n"
56
56
  print "\n"
57
-
57
+
58
58
  res = Dnsruby::Resolver.new
59
59
  res.retry_times=(2)
60
60
  nspack = nil
@@ -64,16 +64,16 @@ def check_domain(args)
64
64
  print "Couldn't find nameservers for #{domain}: #{e}\n"
65
65
  return
66
66
  end
67
-
67
+
68
68
  print "nameservers (will request zone from first available):\n"
69
69
  ns=""
70
70
  (nspack.answer.select {|r| r.type == "NS"}).each do |ns|
71
71
  print "\t", ns.domainname, "\n"
72
72
  end
73
73
  print "\n"
74
-
74
+
75
75
  res.nameserver= (nspack.answer.select {|i| i.type == "NS"}).collect {|i| i.domainname.to_s}
76
-
76
+
77
77
  zt = Dnsruby::ZoneTransfer.new
78
78
  zt.server=(nspack.answer.select {|i| i.type == "NS"}).collect {|i| i.domainname.to_s}
79
79
  zone = zt.transfer(domain) # , klass)
@@ -81,31 +81,31 @@ def check_domain(args)
81
81
  print "Zone transfer failed: ", res.errorstring, "\n"
82
82
  return
83
83
  end
84
-
84
+
85
85
  print "checking PTR records\n"
86
86
  check_ptr(domain, klass, zone)
87
87
  print "\n"
88
-
88
+
89
89
  print "checking NS records\n"
90
90
  check_ns(domain, klass, zone)
91
91
  print "\n"
92
-
92
+
93
93
  print "checking MX records\n"
94
94
  check_mx(domain, klass, zone)
95
95
  print "\n"
96
-
96
+
97
97
  print "checking CNAME records\n"
98
98
  check_cname(domain, klass, zone)
99
99
  print "\n"
100
-
100
+
101
101
  if (@recurse)
102
102
  print "checking subdomains\n\n"
103
103
  subdomains = Hash.new
104
- # foreach (grep { $_->type eq "NS" and $_->name ne $domain } @zone) {
104
+ # foreach (grep { $_->type eq "NS" and $_->name ne $domain } @zone) {
105
105
  (zone.select {|i| i.type == "NS" && i.name != domain}).each do |z|
106
106
  subdomains[z.name] = 1
107
107
  end
108
- # foreach (sort keys %subdomains) {
108
+ # foreach (sort keys %subdomains) {
109
109
  subdomains.keys.sort.each do |k|
110
110
  check_domain(k, klass)
111
111
  end
@@ -114,7 +114,7 @@ end
114
114
 
115
115
  def check_ptr(domain, klass, zone)
116
116
  res = Dnsruby::Resolver.new
117
- # foreach $rr (grep { $_->type eq "A" } @zone) {
117
+ # foreach $rr (grep { $_->type eq "A" } @zone) {
118
118
  (zone.select {|z| z.type == "A"}).each do |rr|
119
119
  host = rr.name
120
120
  addr = rr.address
@@ -130,7 +130,7 @@ end
130
130
 
131
131
  def check_ns(domain, klass, zone)
132
132
  res = Dnsruby::Resolver.new
133
- # foreach $rr (grep { $_->type eq "NS" } @zone) {
133
+ # foreach $rr (grep { $_->type eq "NS" } @zone) {
134
134
  (zone.select { |z| z.type == "NS" }).each do |rr|
135
135
  ans = res.query(rr.nsdname, "A", klass)
136
136
  print "\t", rr.nsdname, " has no A record\n" if (ans.header.ancount < 1)
@@ -139,7 +139,7 @@ end
139
139
 
140
140
  def check_mx(domain, klass, zone)
141
141
  res = Dnsruby::Resolver.new
142
- # foreach $rr (grep { $_->type eq "MX" } @zone) {
142
+ # foreach $rr (grep { $_->type eq "MX" } @zone) {
143
143
  zone.select {|z| z.type == "MX"}.each do |rr|
144
144
  ans = res.query(rr.exchange, "A", klass)
145
145
  print "\t", rr.exchange, " has no A record\n" if (ans.header.ancount < 1)
@@ -148,7 +148,7 @@ end
148
148
 
149
149
  def check_cname(domain, klass, zone)
150
150
  res = Dnsruby::Resolver.new
151
- # foreach $rr (grep { $_->type eq "CNAME" } @zone)
151
+ # foreach $rr (grep { $_->type eq "CNAME" } @zone)
152
152
  zone.select {|z| z.type == "CNAME"}.each do |rr|
153
153
  ans = res.query(rr.cname, "A", klass)
154
154
  print "\t", rr.cname, " has no A record\n" if (ans.header.ancount < 1)
@@ -165,9 +165,9 @@ opts.each do |opt, arg|
165
165
  end
166
166
 
167
167
  if (ARGV.length >=1 && ARGV.length <=2)
168
-
168
+
169
169
  check_domain(ARGV)
170
170
  exit
171
- else
171
+ else
172
172
  print "Usage: #{$0} [ -r ] domain [ class ]\n"
173
173
  end