dnsruby 1.74.0 → 2.0.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +16 -4
- data/DNSSEC +3 -2
- data/EXAMPLES +1 -1
- data/README.md +370 -64
- data/RELEASE_NOTES.md +302 -1
- data/Rakefile +0 -3
- data/demo/axfr.rb +24 -6
- data/demo/rubydig.rb +0 -2
- data/dnsruby.gemspec +5 -4
- data/lib/dnsruby/cache.rb +279 -47
- data/lib/dnsruby/code_mapper.rb +35 -8
- data/lib/dnsruby/code_mappers.rb +63 -49
- data/lib/dnsruby/config.rb +75 -4
- data/lib/dnsruby/deadline_queue.rb +75 -0
- data/lib/dnsruby/dnssec.rb +148 -45
- data/lib/dnsruby/ipv6.rb +45 -5
- data/lib/dnsruby/key_cache.rb +202 -35
- data/lib/dnsruby/message/decoder.rb +85 -19
- data/lib/dnsruby/message/encoder.rb +27 -16
- data/lib/dnsruby/message/header.rb +8 -12
- data/lib/dnsruby/message/message.rb +53 -22
- data/lib/dnsruby/message/section.rb +12 -34
- data/lib/dnsruby/name.rb +5 -2
- data/lib/dnsruby/packet_sender.rb +645 -203
- data/lib/dnsruby/presentation.rb +147 -0
- data/lib/dnsruby/query_control.rb +132 -0
- data/lib/dnsruby/recursor.rb +795 -339
- data/lib/dnsruby/resolver.rb +468 -186
- data/lib/dnsruby/resource/CAA.rb +67 -16
- data/lib/dnsruby/resource/DLV.rb +6 -0
- data/lib/dnsruby/resource/DNSKEY.rb +108 -16
- data/lib/dnsruby/resource/DS.rb +27 -28
- data/lib/dnsruby/resource/HTTPS.rb +16 -0
- data/lib/dnsruby/resource/IN.rb +19 -0
- data/lib/dnsruby/resource/MX.rb +2 -2
- data/lib/dnsruby/resource/NSEC.rb +6 -10
- data/lib/dnsruby/resource/NSEC3.rb +55 -19
- data/lib/dnsruby/resource/NSEC3PARAM.rb +4 -6
- data/lib/dnsruby/resource/RR.rb +108 -65
- data/lib/dnsruby/resource/RRSIG.rb +5 -5
- data/lib/dnsruby/resource/RRSet.rb +38 -22
- data/lib/dnsruby/resource/SRV.rb +2 -2
- data/lib/dnsruby/resource/SVCB.rb +775 -0
- data/lib/dnsruby/resource/TSIG.rb +266 -231
- data/lib/dnsruby/resource/TXT.rb +34 -42
- data/lib/dnsruby/resource/domain_name.rb +1 -1
- data/lib/dnsruby/resource/generic.rb +31 -0
- data/lib/dnsruby/resource/generic_cache.rb +384 -0
- data/lib/dnsruby/resource/generic_constants.rb +79 -0
- data/lib/dnsruby/select_thread.rb +979 -291
- data/lib/dnsruby/serial_time.rb +25 -0
- data/lib/dnsruby/single_resolver.rb +25 -6
- data/lib/dnsruby/single_verifier.rb +1620 -530
- data/lib/dnsruby/transport_clock.rb +9 -0
- data/lib/dnsruby/update.rb +8 -6
- data/lib/dnsruby/validation_budget.rb +143 -0
- data/lib/dnsruby/validator_thread.rb +139 -58
- data/lib/dnsruby/version.rb +1 -1
- data/lib/dnsruby/zone_reader.rb +196 -129
- data/lib/dnsruby/zone_transfer.rb +157 -25
- data/lib/dnsruby.rb +7 -2
- data/test/ci_watchdog.rb +33 -0
- data/test/fixtures/org-ds-2026-11-05.zone +5 -0
- data/test/fixtures/root-dnskey-2026-11-05.zone +7 -0
- data/test/fork_test_helper.rb +37 -0
- data/test/local_dns_server.rb +57 -0
- data/test/soak_server.rb +152 -0
- data/test/socket_helpers.rb +26 -0
- data/test/spec_helper.rb +8 -13
- data/test/tc_attempt_configuration.rb +137 -0
- data/test/tc_caa.rb +2 -2
- data/test/tc_cache_keys.rb +36 -0
- data/test/tc_cancelled_send_capacity.rb +158 -0
- data/test/tc_dnssec_alias_validation.rb +289 -0
- data/test/tc_dnssec_budget.rb +489 -0
- data/test/tc_dnssec_cache_bounds.rb +197 -0
- data/test/tc_dnssec_cache_lifetime.rb +615 -0
- data/test/tc_dnssec_denial_proofs.rb +285 -0
- data/test/tc_dnssec_recursion_limits.rb +186 -0
- data/test/tc_dnssec_recursor_review_fixes.rb +351 -0
- data/test/tc_dnssec_trust_anchors.rb +286 -0
- data/test/tc_dnssec_trust_races.rb +147 -0
- data/test/tc_dnssec_wildcard_proofs.rb +249 -0
- data/test/tc_ds.rb +5 -5
- data/test/tc_edns_retry_regressions.rb +255 -0
- data/test/tc_escapedchars.rb +8 -0
- data/test/tc_final_review_fixes.rb +167 -0
- data/test/tc_final_transport_contracts.rb +104 -0
- data/test/tc_generic_cache.rb +852 -0
- data/test/tc_header.rb +26 -0
- data/test/tc_ipv6.rb +120 -0
- data/test/tc_key_cache_identity.rb +382 -0
- data/test/tc_malformed_tcp.rb +712 -0
- data/test/tc_name.rb +99 -5
- data/test/tc_nameserver_bootstrap.rb +322 -0
- data/test/tc_nsec.rb +4 -45
- data/test/tc_nsec3.rb +17 -1
- data/test/tc_pipeline_retirement.rb +358 -0
- data/test/tc_pipeline_retry.rb +462 -0
- data/test/tc_pipeline_send.rb +663 -0
- data/test/tc_protocol_review_fixes.rb +95 -0
- data/test/tc_query_control.rb +90 -0
- data/test/tc_record_codec_contracts.rb +107 -0
- data/test/tc_record_regressions.rb +225 -0
- data/test/tc_recur.rb +1 -0
- data/test/tc_recursor_address_fallback.rb +169 -0
- data/test/tc_recursor_limits.rb +139 -0
- data/test/tc_release_auxiliary_fixes.rb +288 -0
- data/test/tc_release_configuration_fixes.rb +612 -0
- data/test/tc_release_dnssec_completion.rb +405 -0
- data/test/tc_release_dnssec_fixes.rb +305 -0
- data/test/tc_release_negative_cache.rb +327 -0
- data/test/tc_release_recursor_cache.rb +212 -0
- data/test/tc_release_review_transport.rb +372 -0
- data/test/tc_release_review_transport_native.rb +56 -0
- data/test/tc_release_transport.rb +906 -0
- data/test/tc_release_transport_fixes.rb +196 -0
- data/test/tc_release_zone_defaults.rb +157 -0
- data/test/tc_release_zone_ttls.rb +39 -0
- data/test/tc_res_config.rb +42 -20
- data/test/tc_res_opt.rb +21 -1
- data/test/tc_resolver.rb +21 -19
- data/test/tc_resolver_concurrency.rb +383 -0
- data/test/tc_resolver_configuration_contracts.rb +31 -0
- data/test/tc_resolver_validation.rb +211 -0
- data/test/tc_review_cache.rb +163 -0
- data/test/tc_review_code_mapper.rb +279 -0
- data/test/tc_review_control_deadlines.rb +169 -0
- data/test/tc_review_followup_transport.rb +583 -0
- data/test/tc_review_packet_contracts.rb +369 -0
- data/test/tc_review_presentation.rb +213 -0
- data/test/tc_review_record_compatibility.rb +101 -0
- data/test/tc_review_transport_fixes.rb +195 -0
- data/test/tc_review_transport_native.rb +415 -0
- data/test/tc_review_validation_priming.rb +178 -0
- data/test/tc_rr-opt.rb +5 -2
- data/test/tc_rr-unknown.rb +19 -0
- data/test/tc_rr.rb +14 -0
- data/test/tc_rrset_grouping.rb +50 -0
- data/test/tc_rrset_review_fixes.rb +58 -0
- data/test/tc_rrsig.rb +21 -1
- data/test/tc_scoped_ipv6.rb +153 -0
- data/test/tc_scoped_ipv6_select.rb +157 -0
- data/test/tc_scoped_ipv6_transport.rb +329 -0
- data/test/tc_selector_wakeup.rb +42 -0
- data/test/tc_soak.rb +118 -196
- data/test/tc_socket_helpers.rb +90 -0
- data/test/tc_supporting_lookup_limits.rb +252 -0
- data/test/tc_svcb.rb +1043 -0
- data/test/tc_svcb_signed_target.rb +145 -0
- data/test/tc_svcb_transport.rb +120 -0
- data/test/tc_tcp.rb +69 -43
- data/test/tc_tcp_pipelining.rb +95 -204
- data/test/tc_transport_fork.rb +179 -0
- data/test/tc_tsig.rb +2 -2
- data/test/tc_tsig_api.rb +251 -0
- data/test/tc_tsig_rfc8945.rb +357 -0
- data/test/tc_v2_release_dnssec.rb +442 -0
- data/test/tc_v2_release_transport.rb +304 -0
- data/test/tc_v2_zone_transfer_native.rb +58 -0
- data/test/tc_zone_reader.rb +217 -1
- data/test/tcp_pipelining_server.rb +150 -0
- data/test/ts_offline.rb +77 -6
- data/test/ts_online.rb +2 -1
- metadata +105 -10
- data/.coveralls.yml +0 -2
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'socket'
|
|
4
|
+
require 'resolv'
|
|
5
|
+
require 'thread'
|
|
6
|
+
|
|
7
|
+
module PipelineTest
|
|
8
|
+
# A deliberately small DNS-over-TCP peer. Using the stdlib codec keeps these
|
|
9
|
+
# transport tests independent of both Dnsruby's codec and RubyDNS's server API.
|
|
10
|
+
class Server
|
|
11
|
+
IP = '127.0.0.1'
|
|
12
|
+
ANSWER = '192.0.2.155'
|
|
13
|
+
MAX_REQUESTS = 4
|
|
14
|
+
IDLE_TIMEOUT = 1
|
|
15
|
+
|
|
16
|
+
attr_reader :port
|
|
17
|
+
|
|
18
|
+
def initialize
|
|
19
|
+
@listener = TCPServer.new(IP, 0)
|
|
20
|
+
@port = @listener.addr[1]
|
|
21
|
+
@wake_read, @wake_write = IO.pipe
|
|
22
|
+
@clients = {}
|
|
23
|
+
@mutex = Mutex.new
|
|
24
|
+
@stats = { accepts: 0, connections: 0, timeouts: 0, limits: 0 }
|
|
25
|
+
@worker = Thread.new do
|
|
26
|
+
Thread.current.abort_on_exception = false
|
|
27
|
+
Thread.current.report_on_exception = false
|
|
28
|
+
begin
|
|
29
|
+
run
|
|
30
|
+
rescue StandardError => error
|
|
31
|
+
# Other suites enable Thread.abort_on_exception globally. Capture
|
|
32
|
+
# errors here so those settings cannot abort the test process.
|
|
33
|
+
@error = error
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def stats
|
|
39
|
+
# Surface fixture failures in the test thread instead of hiding them
|
|
40
|
+
# behind a resolver timeout or aborting the entire suite.
|
|
41
|
+
@worker.value unless @worker.alive?
|
|
42
|
+
raise @error if @error
|
|
43
|
+
@mutex.synchronize { @stats.dup }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def stop
|
|
47
|
+
@wake_write.close unless @wake_write.closed?
|
|
48
|
+
unless @worker.join(5)
|
|
49
|
+
@worker.kill
|
|
50
|
+
@worker.join
|
|
51
|
+
raise 'TCP pipelining server did not stop'
|
|
52
|
+
end
|
|
53
|
+
@worker.value
|
|
54
|
+
raise @error if @error
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
def now
|
|
60
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def run
|
|
64
|
+
loop do
|
|
65
|
+
deadline = @clients.values.map { |client| client[:deadline] }.min
|
|
66
|
+
wait = deadline ? [deadline - now, 0].max : nil
|
|
67
|
+
readable = IO.select([@wake_read, @listener] + @clients.keys, nil, nil, wait)
|
|
68
|
+
if readable
|
|
69
|
+
break if readable.first.include?(@wake_read)
|
|
70
|
+
readable.first.each do |socket|
|
|
71
|
+
socket == @listener ? accept : receive(socket)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
@clients.keys.each do |socket|
|
|
75
|
+
disconnect(socket, :timeouts) if @clients.fetch(socket)[:deadline] <= now
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
ensure
|
|
79
|
+
@clients.keys.each { |socket| disconnect(socket) }
|
|
80
|
+
@listener.close
|
|
81
|
+
@wake_read.close
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def accept
|
|
85
|
+
socket = @listener.accept_nonblock(exception: false)
|
|
86
|
+
return if socket == :wait_readable
|
|
87
|
+
|
|
88
|
+
@clients[socket] = { buffer: ''.b, requests: 0, deadline: now + IDLE_TIMEOUT }
|
|
89
|
+
@mutex.synchronize do
|
|
90
|
+
@stats[:accepts] += 1
|
|
91
|
+
@stats[:connections] += 1
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def receive(socket)
|
|
96
|
+
data = socket.read_nonblock(65_535, exception: false)
|
|
97
|
+
return if data == :wait_readable
|
|
98
|
+
return disconnect(socket) if data.nil?
|
|
99
|
+
|
|
100
|
+
client = @clients.fetch(socket)
|
|
101
|
+
client[:deadline] = now + IDLE_TIMEOUT
|
|
102
|
+
client[:buffer] << data
|
|
103
|
+
|
|
104
|
+
# TCP can split a length prefix or combine several DNS messages in a read.
|
|
105
|
+
while client[:buffer].bytesize >= 2
|
|
106
|
+
length = client[:buffer].unpack1('n')
|
|
107
|
+
break if client[:buffer].bytesize < length + 2
|
|
108
|
+
|
|
109
|
+
client[:buffer].slice!(0, 2)
|
|
110
|
+
query = client[:buffer].slice!(0, length)
|
|
111
|
+
client[:requests] += 1
|
|
112
|
+
if client[:requests] <= MAX_REQUESTS
|
|
113
|
+
response = answer(query)
|
|
114
|
+
socket.write([response.bytesize].pack('n') + response)
|
|
115
|
+
if client[:requests] == MAX_REQUESTS
|
|
116
|
+
@mutex.synchronize { @stats[:limits] += 1 }
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
# Drain excess requests before closing on timeout. Closing with unread
|
|
120
|
+
# input can cause a TCP reset instead of the EOF being tested.
|
|
121
|
+
end
|
|
122
|
+
rescue Errno::ECONNRESET, Errno::EPIPE
|
|
123
|
+
disconnect(socket)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def answer(bytes)
|
|
127
|
+
query = ::Resolv::DNS::Message.decode(bytes)
|
|
128
|
+
response = ::Resolv::DNS::Message.new(query.id)
|
|
129
|
+
response.qr = 1
|
|
130
|
+
response.aa = 1
|
|
131
|
+
response.rd = query.rd
|
|
132
|
+
response.ra = 1
|
|
133
|
+
query.each_question do |name, type|
|
|
134
|
+
response.add_question(name, type)
|
|
135
|
+
response.add_answer(name, 60, ::Resolv::DNS::Resource::IN::A.new(ANSWER))
|
|
136
|
+
end
|
|
137
|
+
response.encode
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def disconnect(socket, reason = nil)
|
|
141
|
+
return unless @clients.delete(socket)
|
|
142
|
+
|
|
143
|
+
socket.close
|
|
144
|
+
@mutex.synchronize do
|
|
145
|
+
@stats[:connections] -= 1
|
|
146
|
+
@stats[reason] += 1 if reason
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
data/test/ts_offline.rb
CHANGED
|
@@ -21,14 +21,61 @@ Dnsruby.log.level = Logger::FATAL
|
|
|
21
21
|
# We'll prepend 'tc_' and append '.rb' to these:
|
|
22
22
|
TESTS = %w(
|
|
23
23
|
dnskey
|
|
24
|
+
cache_keys
|
|
25
|
+
attempt_configuration
|
|
26
|
+
caa
|
|
27
|
+
review_record_compatibility
|
|
28
|
+
review_validation_priming
|
|
29
|
+
review_cache
|
|
24
30
|
escapedchars
|
|
31
|
+
edns_retry_regressions
|
|
25
32
|
gpos
|
|
33
|
+
generic_cache
|
|
26
34
|
hash
|
|
27
35
|
header
|
|
28
36
|
ipseckey
|
|
37
|
+
ipv6
|
|
38
|
+
malformed_tcp
|
|
39
|
+
pipeline_send
|
|
40
|
+
pipeline_retirement
|
|
41
|
+
pipeline_retry
|
|
42
|
+
resolver_concurrency
|
|
43
|
+
resolver_validation
|
|
44
|
+
release_transport
|
|
45
|
+
release_transport_fixes
|
|
46
|
+
v2_release_transport
|
|
47
|
+
v2_zone_transfer_native
|
|
48
|
+
release_negative_cache
|
|
49
|
+
release_recursor_cache
|
|
50
|
+
release_zone_ttls
|
|
51
|
+
release_zone_defaults
|
|
52
|
+
release_configuration_fixes
|
|
53
|
+
release_auxiliary_fixes
|
|
54
|
+
recursor_address_fallback
|
|
55
|
+
recursor_limits
|
|
56
|
+
resolver_configuration_contracts
|
|
57
|
+
release_review_transport
|
|
58
|
+
release_review_transport_native
|
|
59
|
+
review_transport_fixes
|
|
60
|
+
review_control_deadlines
|
|
61
|
+
review_followup_transport
|
|
62
|
+
review_transport_native
|
|
63
|
+
review_packet_contracts
|
|
64
|
+
final_review_fixes
|
|
65
|
+
final_transport_contracts
|
|
66
|
+
protocol_review_fixes
|
|
67
|
+
rrset_review_fixes
|
|
68
|
+
dnssec_recursor_review_fixes
|
|
69
|
+
cancelled_send_capacity
|
|
70
|
+
review_code_mapper
|
|
71
|
+
review_presentation
|
|
72
|
+
record_regressions
|
|
73
|
+
record_codec_contracts
|
|
74
|
+
selector_wakeup
|
|
29
75
|
message
|
|
30
76
|
misc
|
|
31
77
|
name
|
|
78
|
+
nameserver_bootstrap
|
|
32
79
|
naptr
|
|
33
80
|
nsec
|
|
34
81
|
nsec3
|
|
@@ -39,15 +86,27 @@ TESTS = %w(
|
|
|
39
86
|
packet_unique_push
|
|
40
87
|
ptrin
|
|
41
88
|
question
|
|
89
|
+
query_control
|
|
42
90
|
res_config
|
|
43
91
|
res_file
|
|
44
92
|
res_opt
|
|
93
|
+
scoped_ipv6
|
|
94
|
+
scoped_ipv6_select
|
|
95
|
+
scoped_ipv6_transport
|
|
45
96
|
rr
|
|
46
97
|
rr-txt
|
|
47
98
|
rr-unknown
|
|
48
99
|
rrset
|
|
100
|
+
rrset_grouping
|
|
49
101
|
rrsig
|
|
102
|
+
svcb
|
|
103
|
+
svcb_transport
|
|
104
|
+
socket_helpers
|
|
105
|
+
tcp_pipelining
|
|
106
|
+
transport_fork
|
|
50
107
|
tkey
|
|
108
|
+
tsig_api
|
|
109
|
+
tsig_rfc8945
|
|
51
110
|
update
|
|
52
111
|
zone_reader
|
|
53
112
|
)
|
|
@@ -64,10 +123,8 @@ def have_open_ssl?
|
|
|
64
123
|
have_open_ssl = true
|
|
65
124
|
begin
|
|
66
125
|
require "openssl"
|
|
67
|
-
OpenSSL::
|
|
68
|
-
|
|
69
|
-
key.e = 111
|
|
70
|
-
rescue
|
|
126
|
+
OpenSSL::Digest::SHA256.digest("data")
|
|
127
|
+
rescue LoadError, StandardError
|
|
71
128
|
have_open_ssl = false
|
|
72
129
|
end
|
|
73
130
|
have_open_ssl
|
|
@@ -75,9 +132,23 @@ end
|
|
|
75
132
|
|
|
76
133
|
if have_open_ssl?
|
|
77
134
|
require_relative 'tc_ds.rb'
|
|
135
|
+
require_relative 'tc_svcb_signed_target.rb'
|
|
136
|
+
require_relative 'tc_dnssec_trust_anchors.rb'
|
|
137
|
+
require_relative 'tc_release_dnssec_fixes.rb'
|
|
138
|
+
require_relative 'tc_release_dnssec_completion.rb'
|
|
139
|
+
require_relative 'tc_v2_release_dnssec.rb'
|
|
140
|
+
require_relative 'tc_dnssec_trust_races.rb'
|
|
141
|
+
require_relative 'tc_key_cache_identity.rb'
|
|
142
|
+
require_relative 'tc_dnssec_budget.rb'
|
|
143
|
+
require_relative 'tc_dnssec_recursion_limits.rb'
|
|
144
|
+
require_relative 'tc_supporting_lookup_limits.rb'
|
|
145
|
+
require_relative 'tc_dnssec_cache_lifetime.rb'
|
|
146
|
+
require_relative 'tc_dnssec_cache_bounds.rb'
|
|
147
|
+
require_relative 'tc_dnssec_wildcard_proofs.rb'
|
|
148
|
+
require_relative 'tc_dnssec_alias_validation.rb'
|
|
149
|
+
require_relative 'tc_dnssec_denial_proofs.rb'
|
|
78
150
|
else
|
|
79
151
|
puts "-----------------------------------------------------------------------"
|
|
80
|
-
puts "OpenSSL
|
|
152
|
+
puts "OpenSSL SHA256 unavailable - skipping DS and DNSSEC trust-anchor tests"
|
|
81
153
|
puts "-----------------------------------------------------------------------"
|
|
82
154
|
end
|
|
83
|
-
|
data/test/ts_online.rb
CHANGED
|
@@ -52,6 +52,7 @@ if online?
|
|
|
52
52
|
resolver
|
|
53
53
|
tcp
|
|
54
54
|
tcp_pipelining
|
|
55
|
+
scoped_ipv6_transport
|
|
55
56
|
single_resolver
|
|
56
57
|
cache
|
|
57
58
|
dns
|
|
@@ -114,7 +115,7 @@ if (server_up)
|
|
|
114
115
|
have_openssl = false
|
|
115
116
|
begin
|
|
116
117
|
require "openssl"
|
|
117
|
-
OpenSSL::HMAC.digest(
|
|
118
|
+
OpenSSL::HMAC.digest('SHA256', "key", "data")
|
|
118
119
|
key = OpenSSL::PKey::RSA.new
|
|
119
120
|
key.e = 111
|
|
120
121
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dnsruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alex Dalitz
|
|
@@ -114,19 +114,19 @@ dependencies:
|
|
|
114
114
|
- !ruby/object:Gem::Version
|
|
115
115
|
version: '0.9'
|
|
116
116
|
- !ruby/object:Gem::Dependency
|
|
117
|
-
name:
|
|
117
|
+
name: simplecov
|
|
118
118
|
requirement: !ruby/object:Gem::Requirement
|
|
119
119
|
requirements:
|
|
120
120
|
- - "~>"
|
|
121
121
|
- !ruby/object:Gem::Version
|
|
122
|
-
version: 0.
|
|
122
|
+
version: 0.22.0
|
|
123
123
|
type: :development
|
|
124
124
|
prerelease: false
|
|
125
125
|
version_requirements: !ruby/object:Gem::Requirement
|
|
126
126
|
requirements:
|
|
127
127
|
- - "~>"
|
|
128
128
|
- !ruby/object:Gem::Version
|
|
129
|
-
version: 0.
|
|
129
|
+
version: 0.22.0
|
|
130
130
|
- !ruby/object:Gem::Dependency
|
|
131
131
|
name: base64
|
|
132
132
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -159,16 +159,22 @@ dependencies:
|
|
|
159
159
|
name: simpleidn
|
|
160
160
|
requirement: !ruby/object:Gem::Requirement
|
|
161
161
|
requirements:
|
|
162
|
-
- - "
|
|
162
|
+
- - ">="
|
|
163
163
|
- !ruby/object:Gem::Version
|
|
164
164
|
version: 0.2.1
|
|
165
|
+
- - "<"
|
|
166
|
+
- !ruby/object:Gem::Version
|
|
167
|
+
version: 0.4.0
|
|
165
168
|
type: :runtime
|
|
166
169
|
prerelease: false
|
|
167
170
|
version_requirements: !ruby/object:Gem::Requirement
|
|
168
171
|
requirements:
|
|
169
|
-
- - "
|
|
172
|
+
- - ">="
|
|
170
173
|
- !ruby/object:Gem::Version
|
|
171
174
|
version: 0.2.1
|
|
175
|
+
- - "<"
|
|
176
|
+
- !ruby/object:Gem::Version
|
|
177
|
+
version: 0.4.0
|
|
172
178
|
description: |-
|
|
173
179
|
Dnsruby is a pure Ruby DNS client library which implements a
|
|
174
180
|
stub resolver. It aims to comply with all DNS RFCs, including
|
|
@@ -182,7 +188,6 @@ extra_rdoc_files:
|
|
|
182
188
|
- EXAMPLES
|
|
183
189
|
- README.md
|
|
184
190
|
files:
|
|
185
|
-
- ".coveralls.yml"
|
|
186
191
|
- ".github/FUNDING.yml"
|
|
187
192
|
- ".github/dependabot.yml"
|
|
188
193
|
- ".github/workflows/ci.yml"
|
|
@@ -219,6 +224,7 @@ files:
|
|
|
219
224
|
- lib/dnsruby/code_mapper.rb
|
|
220
225
|
- lib/dnsruby/code_mappers.rb
|
|
221
226
|
- lib/dnsruby/config.rb
|
|
227
|
+
- lib/dnsruby/deadline_queue.rb
|
|
222
228
|
- lib/dnsruby/dnssec.rb
|
|
223
229
|
- lib/dnsruby/hosts.rb
|
|
224
230
|
- lib/dnsruby/ipv4.rb
|
|
@@ -232,6 +238,8 @@ files:
|
|
|
232
238
|
- lib/dnsruby/message/section.rb
|
|
233
239
|
- lib/dnsruby/name.rb
|
|
234
240
|
- lib/dnsruby/packet_sender.rb
|
|
241
|
+
- lib/dnsruby/presentation.rb
|
|
242
|
+
- lib/dnsruby/query_control.rb
|
|
235
243
|
- lib/dnsruby/recursor.rb
|
|
236
244
|
- lib/dnsruby/resolv.rb
|
|
237
245
|
- lib/dnsruby/resolver.rb
|
|
@@ -250,6 +258,7 @@ files:
|
|
|
250
258
|
- lib/dnsruby/resource/GPOS.rb
|
|
251
259
|
- lib/dnsruby/resource/HINFO.rb
|
|
252
260
|
- lib/dnsruby/resource/HIP.rb
|
|
261
|
+
- lib/dnsruby/resource/HTTPS.rb
|
|
253
262
|
- lib/dnsruby/resource/IN.rb
|
|
254
263
|
- lib/dnsruby/resource/IPSECKEY.rb
|
|
255
264
|
- lib/dnsruby/resource/ISDN.rb
|
|
@@ -274,6 +283,7 @@ files:
|
|
|
274
283
|
- lib/dnsruby/resource/SPF.rb
|
|
275
284
|
- lib/dnsruby/resource/SRV.rb
|
|
276
285
|
- lib/dnsruby/resource/SSHFP.rb
|
|
286
|
+
- lib/dnsruby/resource/SVCB.rb
|
|
277
287
|
- lib/dnsruby/resource/TKEY.rb
|
|
278
288
|
- lib/dnsruby/resource/TLSA.rb
|
|
279
289
|
- lib/dnsruby/resource/TSIG.rb
|
|
@@ -282,42 +292,75 @@ files:
|
|
|
282
292
|
- lib/dnsruby/resource/X25.rb
|
|
283
293
|
- lib/dnsruby/resource/domain_name.rb
|
|
284
294
|
- lib/dnsruby/resource/generic.rb
|
|
295
|
+
- lib/dnsruby/resource/generic_cache.rb
|
|
296
|
+
- lib/dnsruby/resource/generic_constants.rb
|
|
285
297
|
- lib/dnsruby/resource/resource.rb
|
|
286
298
|
- lib/dnsruby/resource/type_bitmap.rb
|
|
287
299
|
- lib/dnsruby/select_thread.rb
|
|
300
|
+
- lib/dnsruby/serial_time.rb
|
|
288
301
|
- lib/dnsruby/single_resolver.rb
|
|
289
302
|
- lib/dnsruby/single_verifier.rb
|
|
290
303
|
- lib/dnsruby/the_log.rb
|
|
304
|
+
- lib/dnsruby/transport_clock.rb
|
|
291
305
|
- lib/dnsruby/update.rb
|
|
306
|
+
- lib/dnsruby/validation_budget.rb
|
|
292
307
|
- lib/dnsruby/validator_thread.rb
|
|
293
308
|
- lib/dnsruby/version.rb
|
|
294
309
|
- lib/dnsruby/zone_reader.rb
|
|
295
310
|
- lib/dnsruby/zone_transfer.rb
|
|
311
|
+
- test/ci_watchdog.rb
|
|
296
312
|
- test/custom.txt
|
|
313
|
+
- test/fixtures/org-ds-2026-11-05.zone
|
|
314
|
+
- test/fixtures/root-dnskey-2026-11-05.zone
|
|
315
|
+
- test/fork_test_helper.rb
|
|
316
|
+
- test/local_dns_server.rb
|
|
297
317
|
- test/localdns.rb
|
|
298
318
|
- test/resolv.conf
|
|
299
319
|
- test/run-tests-individually
|
|
320
|
+
- test/soak_server.rb
|
|
321
|
+
- test/socket_helpers.rb
|
|
300
322
|
- test/spec_helper.rb
|
|
323
|
+
- test/tc_attempt_configuration.rb
|
|
301
324
|
- test/tc_axfr.rb
|
|
302
325
|
- test/tc_caa.rb
|
|
303
326
|
- test/tc_cache.rb
|
|
327
|
+
- test/tc_cache_keys.rb
|
|
328
|
+
- test/tc_cancelled_send_capacity.rb
|
|
304
329
|
- test/tc_dlv.rb
|
|
305
330
|
- test/tc_dns.rb
|
|
306
331
|
- test/tc_dnskey.rb
|
|
332
|
+
- test/tc_dnssec_alias_validation.rb
|
|
333
|
+
- test/tc_dnssec_budget.rb
|
|
334
|
+
- test/tc_dnssec_cache_bounds.rb
|
|
335
|
+
- test/tc_dnssec_cache_lifetime.rb
|
|
336
|
+
- test/tc_dnssec_denial_proofs.rb
|
|
337
|
+
- test/tc_dnssec_recursion_limits.rb
|
|
338
|
+
- test/tc_dnssec_recursor_review_fixes.rb
|
|
339
|
+
- test/tc_dnssec_trust_anchors.rb
|
|
340
|
+
- test/tc_dnssec_trust_races.rb
|
|
341
|
+
- test/tc_dnssec_wildcard_proofs.rb
|
|
307
342
|
- test/tc_ds.rb
|
|
308
343
|
- test/tc_ecdsa.rb
|
|
344
|
+
- test/tc_edns_retry_regressions.rb
|
|
309
345
|
- test/tc_encoding.rb
|
|
310
346
|
- test/tc_escapedchars.rb
|
|
347
|
+
- test/tc_final_review_fixes.rb
|
|
348
|
+
- test/tc_final_transport_contracts.rb
|
|
349
|
+
- test/tc_generic_cache.rb
|
|
311
350
|
- test/tc_gpos.rb
|
|
312
351
|
- test/tc_hash.rb
|
|
313
352
|
- test/tc_header.rb
|
|
314
353
|
- test/tc_hip.rb
|
|
315
354
|
- test/tc_hs.rb
|
|
316
355
|
- test/tc_ipseckey.rb
|
|
356
|
+
- test/tc_ipv6.rb
|
|
357
|
+
- test/tc_key_cache_identity.rb
|
|
317
358
|
- test/tc_long_labels.rb
|
|
359
|
+
- test/tc_malformed_tcp.rb
|
|
318
360
|
- test/tc_message.rb
|
|
319
361
|
- test/tc_misc.rb
|
|
320
362
|
- test/tc_name.rb
|
|
363
|
+
- test/tc_nameserver_bootstrap.rb
|
|
321
364
|
- test/tc_naptr.rb
|
|
322
365
|
- test/tc_nsec.rb
|
|
323
366
|
- test/tc_nsec3.rb
|
|
@@ -325,35 +368,87 @@ files:
|
|
|
325
368
|
- test/tc_nxt.rb
|
|
326
369
|
- test/tc_packet.rb
|
|
327
370
|
- test/tc_packet_unique_push.rb
|
|
371
|
+
- test/tc_pipeline_retirement.rb
|
|
372
|
+
- test/tc_pipeline_retry.rb
|
|
373
|
+
- test/tc_pipeline_send.rb
|
|
374
|
+
- test/tc_protocol_review_fixes.rb
|
|
328
375
|
- test/tc_ptrin.rb
|
|
376
|
+
- test/tc_query_control.rb
|
|
329
377
|
- test/tc_question.rb
|
|
330
378
|
- test/tc_queue.rb
|
|
379
|
+
- test/tc_record_codec_contracts.rb
|
|
380
|
+
- test/tc_record_regressions.rb
|
|
331
381
|
- test/tc_recur.rb
|
|
382
|
+
- test/tc_recursor_address_fallback.rb
|
|
383
|
+
- test/tc_recursor_limits.rb
|
|
384
|
+
- test/tc_release_auxiliary_fixes.rb
|
|
385
|
+
- test/tc_release_configuration_fixes.rb
|
|
386
|
+
- test/tc_release_dnssec_completion.rb
|
|
387
|
+
- test/tc_release_dnssec_fixes.rb
|
|
388
|
+
- test/tc_release_negative_cache.rb
|
|
389
|
+
- test/tc_release_recursor_cache.rb
|
|
390
|
+
- test/tc_release_review_transport.rb
|
|
391
|
+
- test/tc_release_review_transport_native.rb
|
|
392
|
+
- test/tc_release_transport.rb
|
|
393
|
+
- test/tc_release_transport_fixes.rb
|
|
394
|
+
- test/tc_release_zone_defaults.rb
|
|
395
|
+
- test/tc_release_zone_ttls.rb
|
|
332
396
|
- test/tc_res_config.rb
|
|
333
397
|
- test/tc_res_env.rb
|
|
334
398
|
- test/tc_res_file.rb
|
|
335
399
|
- test/tc_res_opt.rb
|
|
336
400
|
- test/tc_resolv.rb
|
|
337
401
|
- test/tc_resolver.rb
|
|
402
|
+
- test/tc_resolver_concurrency.rb
|
|
403
|
+
- test/tc_resolver_configuration_contracts.rb
|
|
404
|
+
- test/tc_resolver_validation.rb
|
|
405
|
+
- test/tc_review_cache.rb
|
|
406
|
+
- test/tc_review_code_mapper.rb
|
|
407
|
+
- test/tc_review_control_deadlines.rb
|
|
408
|
+
- test/tc_review_followup_transport.rb
|
|
409
|
+
- test/tc_review_packet_contracts.rb
|
|
410
|
+
- test/tc_review_presentation.rb
|
|
411
|
+
- test/tc_review_record_compatibility.rb
|
|
412
|
+
- test/tc_review_transport_fixes.rb
|
|
413
|
+
- test/tc_review_transport_native.rb
|
|
414
|
+
- test/tc_review_validation_priming.rb
|
|
338
415
|
- test/tc_rr-opt.rb
|
|
339
416
|
- test/tc_rr-txt.rb
|
|
340
417
|
- test/tc_rr-unknown.rb
|
|
341
418
|
- test/tc_rr.rb
|
|
342
419
|
- test/tc_rrset.rb
|
|
420
|
+
- test/tc_rrset_grouping.rb
|
|
421
|
+
- test/tc_rrset_review_fixes.rb
|
|
343
422
|
- test/tc_rrsig.rb
|
|
423
|
+
- test/tc_scoped_ipv6.rb
|
|
424
|
+
- test/tc_scoped_ipv6_select.rb
|
|
425
|
+
- test/tc_scoped_ipv6_transport.rb
|
|
426
|
+
- test/tc_selector_wakeup.rb
|
|
344
427
|
- test/tc_single_resolver.rb
|
|
345
428
|
- test/tc_soak.rb
|
|
346
429
|
- test/tc_soak_base.rb
|
|
430
|
+
- test/tc_socket_helpers.rb
|
|
347
431
|
- test/tc_sshfp.rb
|
|
432
|
+
- test/tc_supporting_lookup_limits.rb
|
|
433
|
+
- test/tc_svcb.rb
|
|
434
|
+
- test/tc_svcb_signed_target.rb
|
|
435
|
+
- test/tc_svcb_transport.rb
|
|
348
436
|
- test/tc_tcp.rb
|
|
349
437
|
- test/tc_tcp_pipelining.rb
|
|
350
438
|
- test/tc_tkey.rb
|
|
351
439
|
- test/tc_tlsa.rb
|
|
440
|
+
- test/tc_transport_fork.rb
|
|
352
441
|
- test/tc_tsig.rb
|
|
442
|
+
- test/tc_tsig_api.rb
|
|
443
|
+
- test/tc_tsig_rfc8945.rb
|
|
353
444
|
- test/tc_update.rb
|
|
445
|
+
- test/tc_v2_release_dnssec.rb
|
|
446
|
+
- test/tc_v2_release_transport.rb
|
|
447
|
+
- test/tc_v2_zone_transfer_native.rb
|
|
354
448
|
- test/tc_validator.rb
|
|
355
449
|
- test/tc_verifier.rb
|
|
356
450
|
- test/tc_zone_reader.rb
|
|
451
|
+
- test/tcp_pipelining_server.rb
|
|
357
452
|
- test/test_dnsserver.rb
|
|
358
453
|
- test/test_utils.rb
|
|
359
454
|
- test/ts_dnsruby.rb
|
|
@@ -361,7 +456,7 @@ files:
|
|
|
361
456
|
- test/ts_online.rb
|
|
362
457
|
homepage: https://github.com/alexdalitz/dnsruby
|
|
363
458
|
licenses:
|
|
364
|
-
- Apache
|
|
459
|
+
- Apache-2.0
|
|
365
460
|
metadata:
|
|
366
461
|
yard.run: yard
|
|
367
462
|
bug_tracker_uri: https://github.com/alexdalitz/dnsruby/issues
|
|
@@ -380,14 +475,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
380
475
|
requirements:
|
|
381
476
|
- - ">="
|
|
382
477
|
- !ruby/object:Gem::Version
|
|
383
|
-
version:
|
|
478
|
+
version: 3.0.0
|
|
384
479
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
385
480
|
requirements:
|
|
386
481
|
- - ">="
|
|
387
482
|
- !ruby/object:Gem::Version
|
|
388
483
|
version: '0'
|
|
389
484
|
requirements: []
|
|
390
|
-
rubygems_version:
|
|
485
|
+
rubygems_version: 4.0.19
|
|
391
486
|
specification_version: 4
|
|
392
487
|
summary: Ruby DNS(SEC) implementation
|
|
393
488
|
test_files:
|
data/.coveralls.yml
DELETED