dnsruby 1.70.0 → 1.74.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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +3 -0
  3. data/.github/dependabot.yml +11 -0
  4. data/.github/workflows/ci.yml +10 -7
  5. data/RELEASE_NOTES.md +50 -0
  6. data/cache_delay.rb +20 -0
  7. data/demo/rubydig.rb +2 -0
  8. data/dnsruby.gemspec +10 -8
  9. data/fd.ruby +33 -0
  10. data/lib/dnsruby/bit_mapping.rb +2 -2
  11. data/lib/dnsruby/cache.rb +0 -2
  12. data/lib/dnsruby/code_mappers.rb +3 -2
  13. data/lib/dnsruby/config.rb +2 -5
  14. data/lib/dnsruby/hosts.rb +0 -7
  15. data/lib/dnsruby/ipv6.rb +5 -5
  16. data/lib/dnsruby/message/encoder.rb +1 -1
  17. data/lib/dnsruby/message/message.rb +2 -2
  18. data/lib/dnsruby/packet_sender.rb +19 -4
  19. data/lib/dnsruby/recursor.rb +7 -6
  20. data/lib/dnsruby/resolver.rb +40 -17
  21. data/lib/dnsruby/resource/CAA.rb +5 -2
  22. data/lib/dnsruby/resource/DNSKEY.rb +15 -8
  23. data/lib/dnsruby/resource/GPOS.rb +1 -1
  24. data/lib/dnsruby/resource/IN.rb +2 -2
  25. data/lib/dnsruby/resource/NSEC.rb +2 -2
  26. data/lib/dnsruby/resource/NXT.rb +1 -1
  27. data/lib/dnsruby/resource/OPT.rb +2 -3
  28. data/lib/dnsruby/resource/TXT.rb +1 -1
  29. data/lib/dnsruby/select_thread.rb +43 -27
  30. data/lib/dnsruby/single_verifier.rb +1 -1
  31. data/lib/dnsruby/version.rb +1 -1
  32. data/test/spec_helper.rb +22 -3
  33. data/test/tc_caa.rb +13 -0
  34. data/test/tc_dns.rb +13 -13
  35. data/test/tc_ecdsa.rb +27 -0
  36. data/test/tc_escapedchars.rb +8 -9
  37. data/test/tc_gpos.rb +1 -1
  38. data/test/tc_hs.rb +0 -5
  39. data/test/tc_message.rb +2 -2
  40. data/test/tc_name.rb +2 -2
  41. data/test/tc_nxt.rb +0 -1
  42. data/test/tc_recur.rb +4 -7
  43. data/test/tc_res_config.rb +29 -0
  44. data/test/tc_resolv.rb +11 -4
  45. data/test/tc_resolver.rb +93 -3
  46. data/test/tc_rr-unknown.rb +1 -1
  47. data/test/tc_rr.rb +4 -4
  48. data/test/tc_single_resolver.rb +9 -17
  49. data/test/tc_tcp_pipelining.rb +3 -3
  50. data/test/tc_tkey.rb +1 -7
  51. data/test/tc_update.rb +0 -1
  52. metadata +60 -9
data/test/tc_resolver.rb CHANGED
@@ -74,13 +74,25 @@ class TestResolver < Minitest::Test
74
74
 
75
75
  def test_send_plain_message
76
76
  resolver = Resolver.new('1.1.1.1')
77
- response, error = resolver.send_plain_message(Message.new("example.com", Types.A))
77
+
78
+ response, error = with_retries(success_check: ->((res, err)) { err.nil? || ! [Dnsruby::ServFail, Dnsruby::ResolvTimeout].include?(err.class) }) do
79
+ res, err = resolver.send_plain_message(Message.new("example.com", Types.A))
80
+ raise err if [Dnsruby::ServFail, Dnsruby::ResolvTimeout].include?(err.class)
81
+ [res, err]
82
+ end
83
+
78
84
  assert_nil_error(error)
79
85
  assert_valid_response(response)
80
86
 
81
87
  m = Message.new(BAD_DOMAIN_NAME)
82
88
  m.header.rd = true
83
- response, error = resolver.send_plain_message(m)
89
+
90
+ response, error = with_retries(success_check: ->((res, err)) { err.class == Dnsruby::NXDomain || ! [Dnsruby::ServFail, Dnsruby::ResolvTimeout].include?(err.class) }) do
91
+ res, err = resolver.send_plain_message(m)
92
+ raise err if [Dnsruby::ServFail, Dnsruby::ResolvTimeout].include?(err.class)
93
+ [res, err]
94
+ end
95
+
84
96
  assert_valid_response(response)
85
97
  assert_error_is_exception(error, NXDomain)
86
98
  end
@@ -284,8 +296,73 @@ class TestResolver < Minitest::Test
284
296
  def test_eventtype_api
285
297
  # @TODO@ TEST THE Resolver::EventType interface!
286
298
  end
287
- end
288
299
 
300
+ def capture_sent_message(res, domain, pre_opt=nil)
301
+ q = Queue.new
302
+ res.send_async(Dnsruby::Message.new("test.invalid"), q)
303
+ q.pop
304
+ resolver_ruby = res.instance_variable_get("@resolver_ruby")
305
+ class << resolver_ruby
306
+ attr_accessor :message
307
+ alias_method :original_send_async, :send_async
308
+ def send_async(msg, client_queue, client_query_id=nil)
309
+ @message = msg
310
+ original_send_async(msg, client_queue, client_query_id)
311
+ end
312
+ end
313
+ msg = Dnsruby::Message.new(domain)
314
+ msg.add_additional(pre_opt) if pre_opt
315
+ res.send_async(msg, q)
316
+ _id, _response, _error = q.pop
317
+ resolver_ruby.message
318
+ end
319
+
320
+ def test_custom_udp_size
321
+ [false, true].each do |dnssec_setting|
322
+ [512, 513].each do |udp_size_setting|
323
+ res = Dnsruby::Resolver.new(:udp_size => udp_size_setting, :dnssec => dnssec_setting)
324
+ sent_msg = capture_sent_message(res, "example.com")
325
+
326
+ # The OPT RR is only present if the udp_size is > 512
327
+ opt = sent_msg.get_opt
328
+ if dnssec_setting
329
+ # DNSSEC overrides udp_size to 4096
330
+ assert(opt)
331
+ assert_equal(4096, opt.klass.code)
332
+ else
333
+ if udp_size_setting <= 512
334
+ assert_nil(opt)
335
+ else
336
+ assert(opt)
337
+ assert_equal(udp_size_setting, opt.klass.code)
338
+ end
339
+ end
340
+ if opt
341
+ assert_equal(0, opt.version)
342
+ assert_equal(0, opt.flags)
343
+ end
344
+ end
345
+ end
346
+ end
347
+
348
+ def test_no_duplicate_opt_when_pre_existing
349
+ [false, true].each do |dnssec_setting|
350
+ [512, 513].each do |udp_size_setting|
351
+ res = Dnsruby::Resolver.new(:udp_size => udp_size_setting, :dnssec => dnssec_setting)
352
+ pre_size = dnssec_setting ? 4096 : 1024
353
+ pre_opt = Dnsruby::RR::OPT.new(pre_size)
354
+ sent_msg = capture_sent_message(res, "example.com", pre_opt)
355
+
356
+ opt = sent_msg.get_opt
357
+ assert(opt)
358
+ assert_equal(1, sent_msg.additional.length) # No duplicate added
359
+ assert_equal(pre_size, opt.klass.code) # Original payload size unchanged
360
+ assert_equal(0, opt.version)
361
+ assert_equal(0, opt.flags) # Flags unchanged (code doesn't modify existing OPT)
362
+ end
363
+ end
364
+ end
365
+ end
289
366
 
290
367
  # Tests to see that query_raw handles send_plain_message's return values correctly.
291
368
  class TestRawQuery < Minitest::Test
@@ -400,5 +477,18 @@ class TestRawQuery < Minitest::Test
400
477
  # Dnsruby::Cache.delete("googlöe.com", "MX")
401
478
 
402
479
  end
480
+
481
+ def test_config_info
482
+ res = Dnsruby::Resolver.new(
483
+ config_info: {
484
+ # contents here doesn't matter; even setting to {} is enough to cause ResolvTimeout
485
+ apply_domain: false,
486
+ apply_search_list: false,
487
+ },
488
+ query_timeout: 3, # make the timeout faster
489
+ )
490
+ res.do_caching = false
491
+ res.query("a.root-servers.net.", "A")
492
+ end
403
493
  end
404
494
 
@@ -58,7 +58,7 @@ class TestRrUnknown < Minitest::Test
58
58
  assert_equal('10.0.0.1', rr.address.to_s,'Unknown RR representation for A parsed OK')
59
59
 
60
60
  begin
61
- res=RR.new_from_string('e.example IN A \# 4 0A0000 01 11 ')
61
+ RR.new_from_string('e.example IN A \# 4 0A0000 01 11 ')
62
62
  flunk "Should fail on inconsistent length and hex presentation"
63
63
  rescue Exception
64
64
  # like($@, '/\\\# 4 0A0000 01 11 assert_equal inconsistent\ length does not match content/', 'Fails on inconsassert_equaltent length and hex presentation')
data/test/tc_rr.rb CHANGED
@@ -319,10 +319,10 @@ class TestRR < Minitest::Test
319
319
  end
320
320
 
321
321
  def test_cert
322
- rr = RR.create("test.kht.se. 60 IN CERT PGP 0 0 mQGiBDnY2vERBAD3cOxqoAYHYzS+xttvuyN9wZS8CrgwLIlT8Ewo/CCFI11PEO+gJyNPvWPRQsyt1SE60reaIsie2bQTg3DYIg0PmH+ZOlNkpKesPULzdlw4Rx3dD/M3Lkrm977h4Y70ZKC+tbvoYKCCOIkUVevny1PVZ+mB94rb0mMgawSTrct03QCg/w6aHNJFQV7O9ZQ1Fir85M3RS8cEAOo4/1ASVudz3qKZQEhU2Z9O2ydXqpEanHfGirjWYi5RelVsQ9IfBSPFaPAWzQ24nvQ18NU7TgdDQhP4meZXiVXcLBR5Mee2kByf2KAnBUF9aah5s8wZbSrC6u8xEZLuiauvWmCUIWe0Ylc1/L37XeDjrBI2pT+k183X119d6Fr1BACGfZVGsot5rxBUEFPPSrBqYXG/0hRYv9Eq8a4rJAHK2IUWYfivZgL4DtrJnHlha+H5EPQVYkIAN3nGjXoHmosY+J3Sk+GyR+dCBHEwCkoHMKph3igczCEfxAWgqKeYd5mf+QQq2JKrkn2jceiIO7s3CrepeEFAjDSGuxhZjPJVm7QoRGFuaWVsIFAuIE1haG9uZXkgPGRhbm1AcHJpbWUuZ3VzaGkub3JnPohOBBARAgAOBQI52NrxBAsDAQICGQEACgkQ+75aMGJLskn6LgCbBXUD7UmGla5e1zyhuY667hP3F+UAoJIeDZJyRFkQAmb+u8KekRyLD1MLtDJEYW5pZWwgTWFob25leSAoU2Vjb25kYXJ5IEVtYWlsKSA8Z3VzaGlAZ3VzaGkub3JnPohgBBMRAgAgBQJF1J/XAhsjBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQ+75aMGJLskkVhACggsivQ9qLhfdA1rGm6f8LRJBSC4wAoI930h+/hshClj6AkNwGRtHdf5XJuQINBDnY2vQQCAD2Qle3CH8IF3KiutapQvMF6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6q6Jew1XpMgs7AAICB/9eGjzF2gDh6U7I72x/6bSdlExx2LvIF92OZKc0S55IOS4Lgzs7Hbfm1aOL4oJt7wBg94xkF4cerxz7y8R9J+k3GNl14KOjbYaMAh1rdxdAzikYMH1p1hS78GMtwxky6jE5en87BGGMmnbC84JlxwN+MD7diu8D0Gkgjj/pxOp32D5jEe02wBPVjFTpFLJjpFniLUY6AohRDEdSuZwWPuoKVWhpeWkasNn5qgwGyDREbXpyPsU02BkwE4JiGs+JMMdOn9KMh5dxiuwsMM9gHiQZS3mSNBBKPWI5ZXsdStVFvapjf2FUFDXLUbTROPv1Xhqf0u7YYORFnWeVtvzKIxVaiEYEGBECAAYFAjnY2vQACgkQ+75aMGJLsklBWgCeN7z9xk52y/aoaCuF6hYb0d+3k98AoMRxvHuXI1Nc2FXY/x65PwHiUbaY")
323
- rr = RR.create("all.rr.org. IN CERT 6 0 0 FFsAyW1dVK7hIGuvhN56r26UwJx/")
324
- # rr = RR.create("all.rr.org. IN WKS 128.32.0.10 UDP who route timed domain")
325
- rr = RR.create('selector._domainkey.all.rr.org. IN TXT "v=DKIM1; n=Use=20DKIM; p=AwEAAZfbYw8SffZwsbrCLbC+JLErREIF6Yfe9aqsa1Pz6tpGWiLxm9rSL6/YoBvNP3UWX91YDF0JMo6lhu3UIZjITvIwDhx+RJYko9vLzaaJKXGf3ygy6z+deWoZJAV1lTY0Ltx9genboe88CSCHw9aSLkh0obN9Ck8R6zAMYR19ciM/; t=s"')
322
+ RR.create("test.kht.se. 60 IN CERT PGP 0 0 mQGiBDnY2vERBAD3cOxqoAYHYzS+xttvuyN9wZS8CrgwLIlT8Ewo/CCFI11PEO+gJyNPvWPRQsyt1SE60reaIsie2bQTg3DYIg0PmH+ZOlNkpKesPULzdlw4Rx3dD/M3Lkrm977h4Y70ZKC+tbvoYKCCOIkUVevny1PVZ+mB94rb0mMgawSTrct03QCg/w6aHNJFQV7O9ZQ1Fir85M3RS8cEAOo4/1ASVudz3qKZQEhU2Z9O2ydXqpEanHfGirjWYi5RelVsQ9IfBSPFaPAWzQ24nvQ18NU7TgdDQhP4meZXiVXcLBR5Mee2kByf2KAnBUF9aah5s8wZbSrC6u8xEZLuiauvWmCUIWe0Ylc1/L37XeDjrBI2pT+k183X119d6Fr1BACGfZVGsot5rxBUEFPPSrBqYXG/0hRYv9Eq8a4rJAHK2IUWYfivZgL4DtrJnHlha+H5EPQVYkIAN3nGjXoHmosY+J3Sk+GyR+dCBHEwCkoHMKph3igczCEfxAWgqKeYd5mf+QQq2JKrkn2jceiIO7s3CrepeEFAjDSGuxhZjPJVm7QoRGFuaWVsIFAuIE1haG9uZXkgPGRhbm1AcHJpbWUuZ3VzaGkub3JnPohOBBARAgAOBQI52NrxBAsDAQICGQEACgkQ+75aMGJLskn6LgCbBXUD7UmGla5e1zyhuY667hP3F+UAoJIeDZJyRFkQAmb+u8KekRyLD1MLtDJEYW5pZWwgTWFob25leSAoU2Vjb25kYXJ5IEVtYWlsKSA8Z3VzaGlAZ3VzaGkub3JnPohgBBMRAgAgBQJF1J/XAhsjBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQ+75aMGJLskkVhACggsivQ9qLhfdA1rGm6f8LRJBSC4wAoI930h+/hshClj6AkNwGRtHdf5XJuQINBDnY2vQQCAD2Qle3CH8IF3KiutapQvMF6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6q6Jew1XpMgs7AAICB/9eGjzF2gDh6U7I72x/6bSdlExx2LvIF92OZKc0S55IOS4Lgzs7Hbfm1aOL4oJt7wBg94xkF4cerxz7y8R9J+k3GNl14KOjbYaMAh1rdxdAzikYMH1p1hS78GMtwxky6jE5en87BGGMmnbC84JlxwN+MD7diu8D0Gkgjj/pxOp32D5jEe02wBPVjFTpFLJjpFniLUY6AohRDEdSuZwWPuoKVWhpeWkasNn5qgwGyDREbXpyPsU02BkwE4JiGs+JMMdOn9KMh5dxiuwsMM9gHiQZS3mSNBBKPWI5ZXsdStVFvapjf2FUFDXLUbTROPv1Xhqf0u7YYORFnWeVtvzKIxVaiEYEGBECAAYFAjnY2vQACgkQ+75aMGJLsklBWgCeN7z9xk52y/aoaCuF6hYb0d+3k98AoMRxvHuXI1Nc2FXY/x65PwHiUbaY")
323
+ RR.create("all.rr.org. IN CERT 6 0 0 FFsAyW1dVK7hIGuvhN56r26UwJx/")
324
+ # RR.create("all.rr.org. IN WKS 128.32.0.10 UDP who route timed domain")
325
+ RR.create('selector._domainkey.all.rr.org. IN TXT "v=DKIM1; n=Use=20DKIM; p=AwEAAZfbYw8SffZwsbrCLbC+JLErREIF6Yfe9aqsa1Pz6tpGWiLxm9rSL6/YoBvNP3UWX91YDF0JMo6lhu3UIZjITvIwDhx+RJYko9vLzaaJKXGf3ygy6z+deWoZJAV1lTY0Ltx9genboe88CSCHw9aSLkh0obN9Ck8R6zAMYR19ciM/; t=s"')
326
326
  end
327
327
 
328
328
  def test_dhcid
@@ -1,12 +1,12 @@
1
1
  # --
2
2
  # Copyright 2007 Nominet UK
3
- #
3
+ #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
6
6
  # You may obtain a copy of the License at
7
- #
7
+ #
8
8
  # http://www.apache.org/licenses/LICENSE-2.0
9
- #
9
+ #
10
10
  # Unless required by applicable law or agreed to in writing, software
11
11
  # distributed under the License is distributed on an "AS IS" BASIS,
12
12
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -53,7 +53,7 @@ class TestSingleResolver < Minitest::Test
53
53
 
54
54
  def test_simple
55
55
  res = SingleResolver.new()
56
- m = res.query("ns1.google.com.")
56
+ res.query("ns1.google.com.")
57
57
  end
58
58
 
59
59
  def test_timeout
@@ -71,7 +71,7 @@ class TestSingleResolver < Minitest::Test
71
71
  res.port = port
72
72
  res.packet_timeout=1
73
73
  start_time = Time.now.to_i
74
- m = res.query("a.t.net-dns.org")
74
+ res.query("a.t.net-dns.org")
75
75
  fail "Got response when should have got none"
76
76
  rescue ResolvTimeout
77
77
  stop_time = Time.now.to_i
@@ -87,7 +87,7 @@ class TestSingleResolver < Minitest::Test
87
87
  res.packet_timeout=1
88
88
  start_time = Time.now.to_i
89
89
  # TheLog.level = Logger::DEBUG
90
- m = res.query("a.t.net-dns.org")
90
+ res.query("a.t.net-dns.org")
91
91
  fail "TCP timeouts"
92
92
  rescue ResolvTimeout
93
93
  # print "Got Timeout for TCP\n"
@@ -131,15 +131,7 @@ class TestSingleResolver < Minitest::Test
131
131
  res = SingleResolver.new
132
132
 
133
133
  Rrs.each do |data|
134
- packet=nil
135
- 2.times do
136
- begin
137
- packet = res.query(data[:name], data[:type])
138
- rescue ResolvTimeout
139
- end
140
- break if packet
141
- end
142
- assert(packet)
134
+ packet = with_retries { res.query(data[:name], data[:type]) }
143
135
  assert_equal(packet.question[0].qclass, 'IN', 'Class correct')
144
136
 
145
137
  assert(packet, "Got an answer for #{data[:name]} IN #{data[:type]}")
@@ -189,11 +181,11 @@ class TestSingleResolver < Minitest::Test
189
181
  def test_res_config
190
182
  res = Dnsruby::SingleResolver.new
191
183
 
192
- res.server=('a.t.net-dns.org')
184
+ with_retries(exceptions: [ArgumentError], success_check: ->(_) { true }) { res.server=('a.t.net-dns.org') }
193
185
  ip = res.server
194
186
  assert_equal('10.0.1.128', ip.to_s, 'nameserver() looks up IP.')
195
187
 
196
- res.server=('cname.t.net-dns.org')
188
+ with_retries(exceptions: [ArgumentError], success_check: ->(_) { true }) { res.server=('cname.t.net-dns.org') }
197
189
  ip = res.server
198
190
  assert_equal('10.0.1.128', ip.to_s, 'nameserver() looks up cname.')
199
191
  end
@@ -67,9 +67,9 @@ class TestTCPPipelining < Minitest::Test
67
67
 
68
68
  # Instantiate a new server that uses our tcp pipelining handler
69
69
  # For each query the server sends the query upstream (193.0.14.129)
70
- options = {
71
- server_class: TCPPipeliningServer,
72
- }
70
+ # options = {
71
+ # server_class: TCPPipeliningServer,
72
+ # }
73
73
 
74
74
  #RubyDNS::run_server(options) || true
75
75
  if !@@server
data/test/tc_tkey.rb CHANGED
@@ -29,12 +29,7 @@ class TestTKey < Minitest::Test
29
29
  # Canned data.
30
30
  # ------------------------------------------------------------------------------
31
31
 
32
- zone = "example.com"
33
- name = "123456789-test"
34
- klass = "IN"
35
- type = Dnsruby::Types.TKEY
36
32
  algorithm = "fake.algorithm.example.com"
37
- key = "fake key"
38
33
  inception = 100000 # use a strange fixed inception time to give a fixed
39
34
  # checksum
40
35
  expiration = inception + 24*60*60
@@ -72,5 +67,4 @@ class TestTKey < Minitest::Test
72
67
  # @TODO@ Test TKEY against server!
73
68
 
74
69
  end
75
-
76
- end
70
+ end
data/test/tc_update.rb CHANGED
@@ -34,7 +34,6 @@ class TestUpdate < Minitest::Test
34
34
  zone = "example.com";
35
35
  name = "foo.example.com";
36
36
  klass = Classes.CLASS32;
37
- klass2 = Classes.CH;
38
37
  type = Types.A;
39
38
  ttl = 43200;
40
39
  rdata = "10.1.2.3";
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dnsruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.70.0
4
+ version: 1.74.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Dalitz
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-04-11 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rake
@@ -30,14 +29,14 @@ dependencies:
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: 5.18.0
32
+ version: '5.25'
34
33
  type: :development
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: 5.18.0
39
+ version: '5.25'
41
40
  - !ruby/object:Gem::Dependency
42
41
  name: rubydns
43
42
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +79,26 @@ dependencies:
80
79
  - - ">="
81
80
  - !ruby/object:Gem::Version
82
81
  version: 0.3.1
82
+ - !ruby/object:Gem::Dependency
83
+ name: rdoc
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '6.5'
89
+ - - "<"
90
+ - !ruby/object:Gem::Version
91
+ version: '8.0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '6.5'
99
+ - - "<"
100
+ - !ruby/object:Gem::Version
101
+ version: '8.0'
83
102
  - !ruby/object:Gem::Dependency
84
103
  name: yard
85
104
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +127,34 @@ dependencies:
108
127
  - - "~>"
109
128
  - !ruby/object:Gem::Version
110
129
  version: 0.8.23
130
+ - !ruby/object:Gem::Dependency
131
+ name: base64
132
+ requirement: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0.2'
137
+ type: :runtime
138
+ prerelease: false
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0.2'
144
+ - !ruby/object:Gem::Dependency
145
+ name: logger
146
+ requirement: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '1.6'
151
+ type: :runtime
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '1.6'
111
158
  - !ruby/object:Gem::Dependency
112
159
  name: simpleidn
113
160
  requirement: !ruby/object:Gem::Requirement
@@ -131,11 +178,13 @@ executables: []
131
178
  extensions: []
132
179
  extra_rdoc_files:
133
180
  - DNSSEC
181
+ - EVENTMACHINE
134
182
  - EXAMPLES
135
183
  - README.md
136
- - EVENTMACHINE
137
184
  files:
138
185
  - ".coveralls.yml"
186
+ - ".github/FUNDING.yml"
187
+ - ".github/dependabot.yml"
139
188
  - ".github/workflows/ci.yml"
140
189
  - ".gitignore"
141
190
  - ".yardopts"
@@ -148,6 +197,7 @@ files:
148
197
  - RELEASE_NOTES.md
149
198
  - Rakefile
150
199
  - SIGNED_UPDATES
200
+ - cache_delay.rb
151
201
  - demo/axfr.rb
152
202
  - demo/check_soa.rb
153
203
  - demo/check_zone.rb
@@ -160,6 +210,7 @@ files:
160
210
  - demo/to_resolve.txt
161
211
  - demo/trace_dns.rb
162
212
  - dnsruby.gemspec
213
+ - fd.ruby
163
214
  - lib/dnsruby.rb
164
215
  - lib/dnsruby/DNS.rb
165
216
  - lib/dnsruby/bit_mapping.rb
@@ -254,6 +305,7 @@ files:
254
305
  - test/tc_dns.rb
255
306
  - test/tc_dnskey.rb
256
307
  - test/tc_ds.rb
308
+ - test/tc_ecdsa.rb
257
309
  - test/tc_encoding.rb
258
310
  - test/tc_escapedchars.rb
259
311
  - test/tc_gpos.rb
@@ -328,15 +380,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
328
380
  requirements:
329
381
  - - ">="
330
382
  - !ruby/object:Gem::Version
331
- version: '0'
383
+ version: 2.8.0
332
384
  required_rubygems_version: !ruby/object:Gem::Requirement
333
385
  requirements:
334
386
  - - ">="
335
387
  - !ruby/object:Gem::Version
336
388
  version: '0'
337
389
  requirements: []
338
- rubygems_version: 3.3.7
339
- signing_key:
390
+ rubygems_version: 3.7.2
340
391
  specification_version: 4
341
392
  summary: Ruby DNS(SEC) implementation
342
393
  test_files: