dnsruby 1.55 → 1.56.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,74 +1,74 @@
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 f181or the specific language governing permissions and
14
- #limitations under the License.
15
- #++
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 f181or the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ++
16
16
  require 'digest/sha2'
17
17
  require 'net/ftp'
18
- require 'Dnsruby/key_cache'
19
- require 'Dnsruby/single_verifier'
18
+ require 'dnsruby/key_cache'
19
+ require 'dnsruby/single_verifier'
20
20
  module Dnsruby
21
21
 
22
- # RFC4033, section 7
23
- # "There is one more step that a security-aware stub resolver can take
24
- # if, for whatever reason, it is not able to establish a useful trust
25
- # relationship with the recursive name servers that it uses: it can
26
- # perform its own signature validation by setting the Checking Disabled
27
- # (CD) bit in its query messages. A validating stub resolver is thus
28
- # able to treat the DNSSEC signatures as trust relationships between
29
- # the zone administrators and the stub resolver itself. "
30
- #
31
- # Dnsruby is configured to validate responses by default. However, it is not
32
- # configured with any trusted keys by default. Applications may use the
33
- # verify() method to perform verification with of RRSets of Messages with
34
- # given keys. Alternatively, trusted keys may be added to this class (either
35
- # directly, or by loading the IANA TAR or the DLV ISC ZSK). Validation will then
36
- # be performed from these keys (or the DLV registry, if configured). Negative
37
- # and positive responses are validation.
38
- #
39
- # Messages are tagged with the current security_level (Message::SecurityLevel).
40
- # UNCHECKED means Dnsruby has not attempted to validate the response.
41
- # BOGUS means the response has been checked, and is bogus.
42
- # INSECURE means the response has been validated to be insecure (e.g. in an unsigned zone)
43
- # SECURE means that the response has been verfied to be correct.
44
- #
45
- # Several validators are provided, with each maintaining its own cache of trusted keys.
46
- # If validators are added or removed, the caches of the other validators are not affected.
22
+ # RFC4033, section 7
23
+ # "There is one more step that a security-aware stub resolver can take
24
+ # if, for whatever reason, it is not able to establish a useful trust
25
+ # relationship with the recursive name servers that it uses: it can
26
+ # perform its own signature validation by setting the Checking Disabled
27
+ # (CD) bit in its query messages. A validating stub resolver is thus
28
+ # able to treat the DNSSEC signatures as trust relationships between
29
+ # the zone administrators and the stub resolver itself. "
30
+ #
31
+ # Dnsruby is configured to validate responses by default. However, it is not
32
+ # configured with any trusted keys by default. Applications may use the
33
+ # verify() method to perform verification with of RRSets of Messages with
34
+ # given keys. Alternatively, trusted keys may be added to this class (either
35
+ # directly, or by loading the IANA TAR or the DLV ISC ZSK). Validation will then
36
+ # be performed from these keys (or the DLV registry, if configured). Negative
37
+ # and positive responses are validation.
38
+ #
39
+ # Messages are tagged with the current security_level (Message::SecurityLevel).
40
+ # UNCHECKED means Dnsruby has not attempted to validate the response.
41
+ # BOGUS means the response has been checked, and is bogus.
42
+ # INSECURE means the response has been validated to be insecure (e.g. in an unsigned zone)
43
+ # SECURE means that the response has been verfied to be correct.
44
+ #
45
+ # Several validators are provided, with each maintaining its own cache of trusted keys.
46
+ # If validators are added or removed, the caches of the other validators are not affected.
47
47
  class Dnssec
48
- # A class to cache trusted keys
48
+ # A class to cache trusted keys
49
49
 
50
50
 
51
51
  class ValidationPolicy
52
- # @TODO@ Could do this by getting client to add verifiers in the order they
53
- # want them to be used. Could then dispense with all this logic
54
- # Note that any DLV registries which have been configured will only be tried
55
- # after both the root and any local trust anchors (RFC 5074 section 5)
56
-
57
- #* Always use the root and ignore local trust anchors.
52
+ # @TODO@ Could do this by getting client to add verifiers in the order they
53
+ # want them to be used. Could then dispense with all this logic
54
+ # Note that any DLV registries which have been configured will only be tried
55
+ # after both the root and any local trust anchors (RFC 5074 section 5)
56
+
57
+ # * Always use the root and ignore local trust anchors.
58
58
  ALWAYS_ROOT_ONLY = 1
59
- #* Use the root if successful, otherwise try local anchors.
59
+ # * Use the root if successful, otherwise try local anchors.
60
60
  ROOT_THEN_LOCAL_ANCHORS = 2
61
- #* Use local trust anchors if available, otherwise use root.
61
+ # * Use local trust anchors if available, otherwise use root.
62
62
  LOCAL_ANCHORS_THEN_ROOT = 3
63
- #* Always use local trust anchors and ignore the root.
63
+ # * Always use local trust anchors and ignore the root.
64
64
  ALWAYS_LOCAL_ANCHORS_ONLY = 4
65
65
  end
66
66
  @@validation_policy = ValidationPolicy::LOCAL_ANCHORS_THEN_ROOT
67
-
67
+
68
68
  def Dnssec.validation_policy=(p)
69
69
  if ((p >= ALWAYS_ROOT_ONY) && (p <= ALWAYS_LOCAL_ANCHORS))
70
70
  @@validation_policy = p
71
- # @TODO@ Should we be clearing the trusted keys now?
71
+ # @TODO@ Should we be clearing the trusted keys now?
72
72
  end
73
73
  end
74
74
  def Dnssec.validation_policy
@@ -77,40 +77,40 @@ module Dnsruby
77
77
 
78
78
  @@root_verifier = SingleVerifier.new(SingleVerifier::VerifierType::ROOT)
79
79
 
80
- # #NOTE# You may wish to import these via a secure channel yourself, if
81
- # using Dnsruby for validation.
80
+ # #NOTE# You may wish to import these via a secure channel yourself, if
81
+ # using Dnsruby for validation.
82
82
  @@root_key = RR.create(". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5")
83
83
  @@root_verifier.add_root_ds(@@root_key)
84
84
 
85
85
  @@dlv_verifier = SingleVerifier.new(SingleVerifier::VerifierType::DLV)
86
86
 
87
- # @TODO@ Could add a new one of these for each anchor.
87
+ # @TODO@ Could add a new one of these for each anchor.
88
88
  @@anchor_verifier = SingleVerifier.new(SingleVerifier::VerifierType::ANCHOR)
89
89
 
90
90
 
91
- # Add a trusted Key Signing Key for the ISC DLV registry.
91
+ # Add a trusted Key Signing Key for the ISC DLV registry.
92
92
  def Dnssec.add_dlv_key(dlv_key)
93
93
  @@dlv_verifier.add_dlv_key(dlv_key)
94
94
  end
95
- # Add a new trust anchor
95
+ # Add a new trust anchor
96
96
  def Dnssec.add_trust_anchor(t)
97
- # @TODO@ Create a new verifier?
97
+ # @TODO@ Create a new verifier?
98
98
  @@anchor_verifier.add_trust_anchor(t)
99
99
  end
100
- # Add the trusted key with the given expiration time
100
+ # Add the trusted key with the given expiration time
101
101
  def self.add_trust_anchor_with_expiration(k, expiration)
102
- # Create a new verifier?
102
+ # Create a new verifier?
103
103
  @@anchor_verifier.add_trust_anchor_with_expiration(k, expiration)
104
104
  end
105
- # Remove the trusted key
105
+ # Remove the trusted key
106
106
  def Dnssec.remove_trust_anchor(t)
107
107
  @@anchor_verifier.remove_trust_anchor(t)
108
108
  end
109
- # Wipes the cache of trusted keys
109
+ # Wipes the cache of trusted keys
110
110
  def self.clear_trust_anchors
111
111
  @@anchor_verifier.clear_trust_anchors
112
112
  end
113
-
113
+
114
114
  def self.trust_anchors
115
115
  return @@anchor_verifier.trust_anchors
116
116
  end
@@ -128,7 +128,7 @@ module Dnsruby
128
128
 
129
129
  @@dlv_verifier = SingleVerifier.new(SingleVerifier::VerifierType::DLV)
130
130
 
131
- # @TODO@ Could add a new one of these for each anchor.
131
+ # @TODO@ Could add a new one of these for each anchor.
132
132
  @@anchor_verifier = SingleVerifier.new(SingleVerifier::VerifierType::ANCHOR)
133
133
  @@do_validation_with_recursor = true # Many nameservers don't handle DNSSEC correctly yet
134
134
  @@default_resolver = Resolver.new
@@ -152,20 +152,20 @@ module Dnsruby
152
152
 
153
153
  @@do_validation_with_recursor = true # Many nameservers don't handle DNSSEC correctly yet
154
154
  @@default_resolver = Resolver.new
155
- # This method defines the choice of Resolver or Recursor, when the validator
156
- # is checking responses.
157
- # If set to true, then a Recursor will be used to query for the DNSSEC records.
158
- # Otherwise, the default system resolver will be used.
155
+ # This method defines the choice of Resolver or Recursor, when the validator
156
+ # is checking responses.
157
+ # If set to true, then a Recursor will be used to query for the DNSSEC records.
158
+ # Otherwise, the default system resolver will be used.
159
159
  def self.do_validation_with_recursor(on)
160
160
  @@do_validation_with_recursor = on
161
161
  end
162
162
  def self.do_validation_with_recursor?
163
163
  return @@do_validation_with_recursor
164
164
  end
165
- # This method overrides the system default resolver configuration for validation
166
- # If default_resolver is set, then it will be used to follow the chain of trust.
167
- # If it is not, then the default system resolver will be used (unless do_validation_with_recursor
168
- # is set.
165
+ # This method overrides the system default resolver configuration for validation
166
+ # If default_resolver is set, then it will be used to follow the chain of trust.
167
+ # If it is not, then the default system resolver will be used (unless do_validation_with_recursor
168
+ # is set.
169
169
  def self.default_resolver=(res)
170
170
  @@default_resolver = res
171
171
  end
@@ -173,22 +173,22 @@ module Dnsruby
173
173
  return @@default_resolver
174
174
  end
175
175
 
176
- # Returns true for secure/insecure, false otherwise
177
- # This method will set the security_level on msg to the appropriate value.
178
- # Could be : secure, insecure, bogus or indeterminate
179
- # If an error is encountered during verification, then the thrown exception
180
- # will define the error.
176
+ # Returns true for secure/insecure, false otherwise
177
+ # This method will set the security_level on msg to the appropriate value.
178
+ # Could be : secure, insecure, bogus or indeterminate
179
+ # If an error is encountered during verification, then the thrown exception
180
+ # will define the error.
181
181
  def self.validate(msg)
182
182
  query = Message.new()
183
183
  query.header.cd=true
184
184
  return self.validate_with_query(query, msg)
185
185
  end
186
-
186
+
187
187
  def self.validate_with_query(query, msg)
188
188
  if (!msg)
189
189
  return false
190
190
  end
191
- # First, just check there is something to validate!
191
+ # First, just check there is something to validate!
192
192
  found_sigs = false
193
193
  msg.each_resource {|rr|
194
194
  if (rr.type == Types::RRSIG)
@@ -206,16 +206,16 @@ module Dnsruby
206
206
  end
207
207
  end
208
208
 
209
- # SHOULD ALWAYS VERIFY DNSSEC-SIGNED RESPONSES?
210
- # Yes - if a trust anchor is configured. Otherwise, act on CD bit (in query)
209
+ # SHOULD ALWAYS VERIFY DNSSEC-SIGNED RESPONSES?
210
+ # Yes - if a trust anchor is configured. Otherwise, act on CD bit (in query)
211
211
  TheLog.debug("Checking whether to validate, query.cd = #{query.header.cd}")
212
212
  if (((@@validation_policy > ValidationPolicy::ALWAYS_ROOT_ONLY) && (self.trust_anchors().length > 0)) ||
213
- # Check query here, and validate if CD is true
213
+ # Check query here, and validate if CD is true
214
214
  ((query.header.cd == true))) # && (query.do_validation)))
215
215
  TheLog.debug("Starting validation")
216
216
 
217
- # Validate!
218
- # Need to think about trapping/storing exceptions and security_levels here
217
+ # Validate!
218
+ # Need to think about trapping/storing exceptions and security_levels here
219
219
  last_error = ""
220
220
  last_level = Message::SecurityLevel.BOGUS
221
221
  last_error_level = Message::SecurityLevel.BOGUS
@@ -226,7 +226,7 @@ module Dnsruby
226
226
  last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
227
227
  Proc.new{|m, q| validate_with_root(m, q)}, msg, query)
228
228
  elsif (@@validation_policy == ValidationPolicy::LOCAL_ANCHORS_THEN_ROOT)
229
- last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
229
+ last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
230
230
  Proc.new{|m, q| validate_with_anchors(m, q)}, msg, query)
231
231
  if (last_level != Message::SecurityLevel.SECURE)
232
232
  last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
@@ -241,10 +241,10 @@ module Dnsruby
241
241
  end
242
242
  end
243
243
  if (last_level != Message::SecurityLevel.SECURE)
244
- last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
244
+ last_level, last_error, last_error_level = try_validation(last_level, last_error, last_error_level,
245
245
  Proc.new{|m, q| validate_with_dlv(m, q)}, msg, query)
246
246
  end
247
- # Set the message security level!
247
+ # Set the message security level!
248
248
  msg.security_level = last_level
249
249
  msg.security_error = last_error
250
250
  raise VerifyError.new(last_error) if (last_level < 0)
@@ -266,7 +266,7 @@ module Dnsruby
266
266
  end
267
267
  return last_level, last_error, last_error_level
268
268
  end
269
-
269
+
270
270
  def self.validate_with_anchors(msg, query)
271
271
  return @@anchor_verifier.validate(msg, query)
272
272
  end
@@ -310,4 +310,4 @@ module Dnsruby
310
310
  @@dlv_verifier.verify_rrset(rrset, keys)))
311
311
  end
312
312
  end
313
- end
313
+ end
@@ -1,126 +1,126 @@
1
- #--
2
- #Copyright 2007 Nominet UK
3
- #
4
- #Licensed under the Apache License, Version 2.0 (the "License");
5
- #you may not use this file except in compliance with the License.
6
- #You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- #Unless required by applicable law or agreed to in writing, software
11
- #distributed under the License is distributed on an "AS IS" BASIS,
12
- #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- #See the License for the specific language governing permissions and
14
- #limitations under the License.
15
- #++
16
- module Dnsruby
17
- #== Dnsruby::Hosts class
18
- #Dnsruby::Hosts is a hostname resolver that uses the system hosts file
19
- #
20
- #=== class methods
21
- #* Dnsruby::Hosts.new(hosts='/etc/hosts')
22
- #
23
- #=== methods
24
- #* Dnsruby::Hosts#getaddress(name)
25
- #* Dnsruby::Hosts#getaddresses(name)
26
- #* Dnsruby::Hosts#each_address(name) {|address| ...}
27
- # address lookup methods.
28
- #
29
- #* Dnsruby::Hosts#getname(address)
30
- #* Dnsruby::Hosts#getnames(address)
31
- #* Dnsruby::Hosts#each_name(address) {|name| ...}
32
- # hostnames lookup methods.
33
- #
34
- class Hosts
35
- if /mswin32|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM
36
- require 'win32/resolv'
37
- DefaultFileName = Win32::Resolv.get_hosts_path
38
- else
39
- DefaultFileName = '/etc/hosts'
40
- end
41
-
42
- #Creates a new Dnsruby::Hosts using +filename+ for its data source
43
- def initialize(filename = DefaultFileName)
44
- @filename = filename
45
- @mutex = Mutex.new
46
- @initialized = nil
47
- end
48
-
49
- def lazy_initialize# :nodoc:
50
- @mutex.synchronize {
51
- unless @initialized
52
- @name2addr = {}
53
- @addr2name = {}
54
- begin
55
- open(@filename) {|f|
56
- f.each {|line|
57
- line.sub!(/#.*/, '')
58
- addr, hostname, *aliases = line.split(/\s+/)
59
- next unless addr
60
- addr.untaint
61
- hostname.untaint
62
- @addr2name[addr] = [] unless @addr2name.include? addr
63
- @addr2name[addr] << hostname
64
- @addr2name[addr] += aliases
65
- @name2addr[hostname] = [] unless @name2addr.include? hostname
66
- @name2addr[hostname] << addr
67
- aliases.each {|n|
68
- n.untaint
69
- @name2addr[n] = [] unless @name2addr.include? n
70
- @name2addr[n] << addr
71
- }
72
- }
73
- }
74
- rescue Exception
75
- # Java won't find this file if running on Windows
76
- end
77
- @name2addr.each {|name, arr| arr.reverse!}
78
- @initialized = true
79
- end
80
- }
81
- self
82
- end
83
-
84
- #Gets the first IP address for +name+ from the hosts file
85
- def getaddress(name)
86
- each_address(name) {|address| return address}
87
- raise ResolvError.new("#{@filename} has no name: #{name}")
88
- end
89
-
90
- #Gets all IP addresses for +name+ from the hosts file
91
- def getaddresses(name)
92
- ret = []
93
- each_address(name) {|address| ret << address}
94
- return ret
95
- end
96
-
97
- #Iterates over all IP addresses for +name+ retrieved from the hosts file
98
- def each_address(name, &proc)
99
- lazy_initialize
100
- if @name2addr.include?(name)
101
- @name2addr[name].each(&proc)
102
- end
103
- end
104
-
105
- #Gets the first hostname of +address+ from the hosts file
106
- def getname(address)
107
- each_name(address) {|name| return name}
108
- raise ResolvError.new("#{@filename} has no address: #{address}")
109
- end
110
-
111
- #Gets all hostnames for +address+ from the hosts file
112
- def getnames(address)
113
- ret = []
114
- each_name(address) {|name| ret << name}
115
- return ret
116
- end
117
-
118
- #Iterates over all hostnames for +address+ retrieved from the hosts file
119
- def each_name(address, &proc)
120
- lazy_initialize
121
- if @addr2name.include?(address)
122
- @addr2name[address].each(&proc)
123
- end
124
- end
125
- end
1
+ # --
2
+ # Copyright 2007 Nominet UK
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ++
16
+ module Dnsruby
17
+ # == Dnsruby::Hosts class
18
+ # Dnsruby::Hosts is a hostname resolver that uses the system hosts file
19
+ #
20
+ # === class methods
21
+ # * Dnsruby::Hosts.new(hosts='/etc/hosts')
22
+ #
23
+ # === methods
24
+ # * Dnsruby::Hosts#getaddress(name)
25
+ # * Dnsruby::Hosts#getaddresses(name)
26
+ # * Dnsruby::Hosts#each_address(name) {|address| ...}
27
+ # address lookup methods.
28
+ #
29
+ # * Dnsruby::Hosts#getname(address)
30
+ # * Dnsruby::Hosts#getnames(address)
31
+ # * Dnsruby::Hosts#each_name(address) {|name| ...}
32
+ # hostnames lookup methods.
33
+ #
34
+ class Hosts
35
+ if /mswin32|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM
36
+ require 'win32/resolv'
37
+ DefaultFileName = Win32::Resolv.get_hosts_path
38
+ else
39
+ DefaultFileName = '/etc/hosts'
40
+ end
41
+
42
+ # Creates a new Dnsruby::Hosts using +filename+ for its data source
43
+ def initialize(filename = DefaultFileName)
44
+ @filename = filename
45
+ @mutex = Mutex.new
46
+ @initialized = nil
47
+ end
48
+
49
+ def lazy_initialize# :nodoc:
50
+ @mutex.synchronize {
51
+ unless @initialized
52
+ @name2addr = {}
53
+ @addr2name = {}
54
+ begin
55
+ open(@filename) {|f|
56
+ f.each {|line|
57
+ line.sub!(/#.*/, '')
58
+ addr, hostname, *aliases = line.split(/\s+/)
59
+ next unless addr
60
+ addr.untaint
61
+ hostname.untaint
62
+ @addr2name[addr] = [] unless @addr2name.include? addr
63
+ @addr2name[addr] << hostname
64
+ @addr2name[addr] += aliases
65
+ @name2addr[hostname] = [] unless @name2addr.include? hostname
66
+ @name2addr[hostname] << addr
67
+ aliases.each {|n|
68
+ n.untaint
69
+ @name2addr[n] = [] unless @name2addr.include? n
70
+ @name2addr[n] << addr
71
+ }
72
+ }
73
+ }
74
+ rescue Exception
75
+ # Java won't find this file if running on Windows
76
+ end
77
+ @name2addr.each {|name, arr| arr.reverse!}
78
+ @initialized = true
79
+ end
80
+ }
81
+ self
82
+ end
83
+
84
+ # Gets the first IP address for +name+ from the hosts file
85
+ def getaddress(name)
86
+ each_address(name) {|address| return address}
87
+ raise ResolvError.new("#{@filename} has no name: #{name}")
88
+ end
89
+
90
+ # Gets all IP addresses for +name+ from the hosts file
91
+ def getaddresses(name)
92
+ ret = []
93
+ each_address(name) {|address| ret << address}
94
+ return ret
95
+ end
96
+
97
+ # Iterates over all IP addresses for +name+ retrieved from the hosts file
98
+ def each_address(name, &proc)
99
+ lazy_initialize
100
+ if @name2addr.include?(name)
101
+ @name2addr[name].each(&proc)
102
+ end
103
+ end
104
+
105
+ # Gets the first hostname of +address+ from the hosts file
106
+ def getname(address)
107
+ each_name(address) {|name| return name}
108
+ raise ResolvError.new("#{@filename} has no address: #{address}")
109
+ end
110
+
111
+ # Gets all hostnames for +address+ from the hosts file
112
+ def getnames(address)
113
+ ret = []
114
+ each_name(address) {|name| ret << name}
115
+ return ret
116
+ end
117
+
118
+ # Iterates over all hostnames for +address+ retrieved from the hosts file
119
+ def each_name(address, &proc)
120
+ lazy_initialize
121
+ if @addr2name.include?(address)
122
+ @addr2name[address].each(&proc)
123
+ end
124
+ end
125
+ end
126
126
  end