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,278 +0,0 @@
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::Update is a subclass of Dnsruby::Packet,
18
- #to be used for making DNS dynamic updates. Programmers
19
- #should refer to RFC 2136 for the semantics of dynamic updates.
20
-
21
- #The first example below shows a complete program; subsequent examples
22
- #show only the creation of the update packet.
23
- #
24
- #== Add a new host
25
- #
26
- # require 'Dnsruby'
27
- #
28
- # # Create the update packet.
29
- # update = Dnsruby::Update.new('example.com')
30
- #
31
- # # Prerequisite is that no A records exist for the name.
32
- # update.absent('foo.example.com.', 'A')
33
- #
34
- # # Add two A records for the name.
35
- # update.add('foo.example.com.', 'A', 86400, '192.168.1.2')
36
- # update.add('foo.example.com.', 'A', 86400, '172.16.3.4')
37
- #
38
- # # Send the update to the zone's primary master.
39
- # res = Dnsruby::Resolver.new({:nameserver => 'primary-master.example.com'})
40
- #
41
- # begin
42
- # reply = res.send_message(update)
43
- # print "Update succeeded\n"
44
- # rescue Exception => e
45
- # print 'Update failed: #{e}\n'
46
- # end
47
- #
48
- #== Add an MX record for a name that already exists
49
- #
50
- # update = Dnsruby::Update.new('example.com')
51
- # update.present('example.com')
52
- # update.add('example.com', Dnsruby::Types.MX, 10, 'mailhost.example.com')
53
- #
54
- #== Add a TXT record for a name that doesn't exist
55
- #
56
- # update = Dnsruby::Update.new('example.com')
57
- # update.absent('info.example.com')
58
- # update.add('info.example.com', Types.TXT, 86400, "yabba dabba doo"')
59
- #
60
- #== Delete all A records for a name
61
- #
62
- # update = Dnsruby::Update.new('example.com')
63
- # update.present('foo.example.com', 'A')
64
- # update.delete('foo.example.com', 'A')
65
- #
66
- #== Delete all RRs for a name
67
- #
68
- # update = Dnsruby::Update.new('example.com')
69
- # update.present('byebye.example.com')
70
- # update.delete('byebye.example.com')
71
- #
72
- #== Perform a signed update
73
- #
74
- # key_name = 'tsig-key'
75
- # key = 'awwLOtRfpGE+rRKF2+DEiw=='
76
- #
77
- # update = Dnsruby::Update.new('example.com')
78
- # update.add('foo.example.com', 'A', 86400, 10.1.2.3'))
79
- # update.add('bar.example.com', 'A', 86400, 10.4.5.6'))
80
- # res.tsig=(key_name,key)
81
- #
82
- class Update < Message
83
- #Returns a Dnsruby::Update object suitable for performing a DNS
84
- #dynamic update. Specifically, it creates a message with the header
85
- #opcode set to UPDATE and the zone record type to SOA (per RFC 2136,
86
- #Section 2.3).
87
- #
88
- #Programs must use the push method to add RRs to the prerequisite,
89
- #update, and additional sections before performing the update.
90
- #
91
- #Arguments are the zone name and the class. If the zone is omitted,
92
- #the default domain will be taken from the resolver configuration.
93
- #If the class is omitted, it defaults to IN.
94
- # packet = Dnsruby::Update.new
95
- # packet = Dnsruby::Update.new('example.com')
96
- # packet = Dnsruby::Update.new('example.com', 'HS')
97
- #
98
- def initialize(zone=nil, klass=nil)
99
-
100
- # sort out the zone section (RFC2136, section 2.3)
101
- if (zone==nil)
102
- config = Config.new
103
- zone = (config.search)[0]
104
- return unless zone
105
- end
106
-
107
- type = 'SOA'
108
- klass ||= 'IN'
109
-
110
- super(zone, type, klass) || return
111
-
112
- @header.opcode=('UPDATE')
113
- @header.rd=(0)
114
- @do_validation = false
115
- end
116
-
117
- #Ways to create the prerequisite records (exists, notexists, inuse, etc. - RFC2136, section 2.4)
118
- #
119
- # (1) RRset exists (value independent). At least one RR with a
120
- # specified NAME and TYPE (in the zone and class specified by
121
- # the Zone Section) must exist.
122
- #
123
- # update.present(name, type)
124
- #
125
- # (2) RRset exists (value dependent). A set of RRs with a
126
- # specified NAME and TYPE exists and has the same members
127
- # with the same RDATAs as the RRset specified here in this
128
- # Section.
129
- #
130
- # update.present(name, type, rdata)
131
- #
132
- # (4) Name is in use. At least one RR with a specified NAME (in
133
- # the zone and class specified by the Zone Section) must exist.
134
- # Note that this prerequisite is NOT satisfied by empty
135
- # nonterminals.
136
- #
137
- # update.present(name)
138
- def present(*args)
139
- ttl = 0
140
- rdata = ""
141
- klass = Classes.ANY
142
- if (args.length>=1) # domain (RFC2136, Section 2.4.4)
143
- name = args[0]
144
- type = Types.ANY
145
- if (args.length>=2) # RRSET (RFC2136, Section 2.4.1)
146
- type = args[1]
147
- end
148
- if (args.length > 2) # RRSET (RFC2136, Section 2.4.2)
149
- klass = zone()[0].zclass
150
- rdata=args[2]
151
- end
152
- rec = RR.create("#{name} #{ttl} #{klass} #{type} #{rdata}")
153
- add_pre(rec)
154
- return rec
155
- else
156
- raise ArgumentError.new("Wrong number of arguments (#{args.length} for 1 or 2) for Update#absent")
157
- end
158
- end
159
-
160
- #Ways to create the prerequisite records (exists, notexists, inuse, etc. - RFC2136, section 2.4)
161
- #Can be called with one arg :
162
- #
163
- # update.absent(name)
164
- # (5) Name is not in use. No RR of any type is owned by a
165
- # specified NAME. Note that this prerequisite IS satisfied by
166
- # empty nonterminals.
167
- #
168
- #Or with two :
169
- #
170
- # update.absent(name, type)
171
- # (3) RRset does not exist. No RRs with a specified NAME and TYPE
172
- # (in the zone and class denoted by the Zone Section) can exist.
173
- #
174
- def absent(*args)
175
- ttl = 0
176
- rdata = ""
177
- klass = Classes.NONE
178
- if (args.length>=1) # domain (RFC2136, Section 2.4.5)
179
- name = args[0]
180
- type = Types.ANY
181
- if (args.length==2) # RRSET (RFC2136, Section 2.4.3)
182
- type = args[1]
183
- end
184
- rec = RR.create("#{name} #{ttl} #{klass} #{type} #{rdata}")
185
- add_pre(rec)
186
- return rec
187
- else
188
- raise ArgumentError.new("Wrong number of arguments (#{args.length} for 1 or 2) for Update#absent")
189
- end
190
- end
191
-
192
- #Ways to create the update records (add, delete, RFC2136, section 2.5)
193
- # " 2.5.1 - Add To An RRset
194
- #
195
- # RRs are added to the Update Section whose NAME, TYPE, TTL, RDLENGTH
196
- # and RDATA are those being added, and CLASS is the same as the zone
197
- # class. Any duplicate RRs will be silently ignored by the primary
198
- # master."
199
- #
200
- # update.add(rr)
201
- # update.add([rr1, rr2])
202
- # update.add(name, type, ttl, rdata)
203
- #
204
- def add(*args)
205
- zoneclass=zone()[0].zclass
206
- case args[0]
207
- when Array
208
- args[0].each do |resource|
209
- add(resource)
210
- end
211
- when RR
212
- # Make sure that the Class is the same as the zone
213
- resource = args[0]
214
- if (resource.klass != zoneclass)
215
- raise ArgumentError.new("Wrong class #{resource.klass} for update (should be #{zoneclass})!")
216
- end
217
- add_update(resource)
218
- return resource
219
- else
220
- name=args[0]
221
- type=args[1]
222
- ttl=args[2]
223
- rdata=args[3]
224
- resource = nil
225
- if (Types.new(type) == Types.TXT)
226
- instring = "#{name} #{ttl} #{zoneclass} #{type} ";
227
- if (String === rdata)
228
- instring += " '#{rdata}'"
229
- elsif (Array === rdata)
230
- rdata.length.times {|rcounter|
231
- instring += " '#{rdata[rcounter]}' "
232
- }
233
- else
234
- instring += rdata
235
- end
236
- resource = RR.create(instring)
237
- else
238
- resource = RR.create("#{name} #{ttl} #{zoneclass} #{type} #{rdata}")
239
- end
240
- add_update(resource)
241
- return resource
242
- end
243
- # @TODO@ Should be able to take RRSet!
244
- end
245
-
246
- #Ways to create the update records (add, delete, RFC2136, section 2.5)
247
- #
248
- #2.5.2 - Delete An RRset
249
- # update.delete(name, type)
250
- #
251
- #
252
- #2.5.3 - Delete All RRsets From A Name
253
- # update.delete(name)
254
- #
255
- #2.5.4 - Delete An RR From An RRset
256
- # update.delete(name, type, rdata)
257
- #
258
- def delete(*args)
259
- ttl = 0
260
- klass = Classes.ANY
261
- rdata=""
262
- resource = nil
263
- case args.length
264
- when 1 # name
265
- resource = RR.create("#{args[0]} #{ttl} #{klass} #{Types.ANY} #{rdata}")
266
- add_update(resource)
267
- when 2 # name, type
268
- resource = RR.create("#{args[0]} #{ttl} #{klass} #{args[1]} #{rdata}")
269
- add_update(resource)
270
- when 3 # name, type, rdata
271
- resource = RR.create("#{args[0]} #{ttl} IN #{args[1]} #{args[2]}")
272
- resource.klass = Classes.NONE
273
- add_update(resource)
274
- end
275
- return resource
276
- end
277
- end
278
- end
@@ -1,124 +0,0 @@
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
-
17
- module Dnsruby
18
- # Takes care of the validation for the SelectThread. If queries need to be
19
- # made in order to validate the response, then a separate thread is fired up
20
- # to do this.
21
- class ValidatorThread # :nodoc: all
22
- # include Singleton
23
- def initialize(*args)
24
- @client_id, @client_queue, @response, @error, @query, @st, @res = args
25
- # Create the validation thread, and a queue to receive validation requests
26
- # Actually, need to have a thread per validator, as they make recursive calls.
27
- # @@mutex = Mutex.new
28
- # @@validation_queue = Queue.new
29
- # @@validator_thread = Thread.new{
30
- # do_validate
31
- # }
32
- end
33
- def run
34
- # ONLY START THE NEW THREAD IF VALIDATION NEED OCCUR!!
35
- if (should_validate)
36
- Thread.new{
37
- do_validate
38
- }
39
- else
40
- do_validate
41
- end
42
- end
43
-
44
-
45
- # def add_to_queue(item)
46
- # print "ADding to validator queue\n"
47
- ## @@mutex.synchronize{
48
- # @@validation_queue.push(item)
49
- ## }
50
- # end
51
- def do_validate
52
- # while (true)
53
- # item = nil
54
- # print "Waiting to pop validation item\n"
55
- ## @@mutex.synchronize{
56
- # item = @@validation_queue.pop
57
- ## }
58
- # print "Popped validation request\n"
59
- # client_id, client_queue, response, err, query, st, res = item
60
- validated_ok = validate(@query, @response, @res)
61
-
62
- validated_ok = false if (@error && !(NXDomain === @error))
63
-
64
- cache_if_valid(@query, @response)
65
-
66
- # Now send the response back to the client...
67
- # print "#{Time.now} : Got result for #{@query.question()[0].qname}, #{@query.question()[0].qtype}\n"
68
- if (validated_ok)
69
- @st.push_validation_response_to_select(@client_id, @client_queue, @response, nil, @query, @res)
70
- else
71
- @st.push_validation_response_to_select(@client_id, @client_queue, @response,
72
- @response.security_error, @query, @res)
73
- end
74
-
75
-
76
- # end
77
- end
78
-
79
-
80
- def should_validate
81
- return ValidatorThread.requires_validation?(@query, @response, @error, @res)
82
- end
83
-
84
- def ValidatorThread.requires_validation?(query, response, error, res)
85
- # @error will be nil for DNS RCODE errors - it will be true for TsigError. really?!
86
- if ((!error || (error.instance_of?NXDomain)) && query.do_validation)
87
- if (res.dnssec)
88
- if (response.security_level != Message::SecurityLevel::SECURE)
89
- return true
90
- end
91
- end
92
- end
93
- return false
94
-
95
- end
96
-
97
- def validate(query, response, res)
98
- if (should_validate)
99
- begin
100
- # So, we really need to be able to take the response out of the select thread, along
101
- # with the responsibility for sending the answer to the client.
102
- # Should we have a validator thread? Or a thread per validation?
103
- # Then, select thread gets response. It performs basic checks here.
104
- # After basic checks, the select-thread punts the response (along with queues, etc.)
105
- # to the validator thread.
106
- # The validator validates it (or just releases it with no validation), and then
107
- # sends the request to the client via the client queue.
108
- Dnssec.validate_with_query(query,response)
109
- return true
110
- rescue VerifyError => e
111
- response.security_error = e
112
- # Response security_level should already be set
113
- return false
114
- end
115
- end
116
- return true
117
- end
118
-
119
- def cache_if_valid(query, response)
120
- return if @error
121
- PacketSender.cache(query, response)
122
- end
123
- end
124
- end