dnsruby 1.60.2 → 1.61.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +9 -6
- data/.yardopts +7 -0
- data/README.md +7 -4
- data/RELEASE_NOTES.md +43 -0
- data/Rakefile +1 -0
- data/demo/digroot.rb +2 -0
- data/demo/rubydig.rb +1 -0
- data/dnsruby.gemspec +15 -8
- data/lib/dnsruby/code_mappers.rb +3 -0
- data/lib/dnsruby/config.rb +30 -8
- data/lib/dnsruby/dnssec.rb +4 -0
- data/lib/dnsruby/hosts.rb +8 -4
- data/lib/dnsruby/message/encoder.rb +2 -2
- data/lib/dnsruby/message/header.rb +15 -15
- data/lib/dnsruby/name.rb +18 -2
- data/lib/dnsruby/packet_sender.rb +14 -2
- data/lib/dnsruby/recursor.rb +10 -1
- data/lib/dnsruby/resolver.rb +11 -0
- data/lib/dnsruby/resource/CAA.rb +1 -1
- data/lib/dnsruby/resource/CDNSKEY.rb +17 -0
- data/lib/dnsruby/resource/CDS.rb +35 -0
- data/lib/dnsruby/resource/DNSKEY.rb +33 -6
- data/lib/dnsruby/resource/IN.rb +4 -1
- data/lib/dnsruby/resource/URI.rb +57 -0
- data/lib/dnsruby/resource/generic.rb +3 -0
- data/lib/dnsruby/select_thread.rb +1 -1
- data/lib/dnsruby/single_verifier.rb +27 -4
- data/lib/dnsruby/validator_thread.rb +4 -4
- data/lib/dnsruby/version.rb +1 -1
- data/lib/dnsruby/zone_transfer.rb +5 -1
- data/test/localdns.rb +29 -0
- data/test/tc_caa.rb +0 -1
- data/test/tc_dns.rb +11 -1
- data/test/tc_dnskey.rb +29 -0
- data/test/tc_encoding.rb +31 -0
- data/test/tc_hs.rb +4 -3
- data/test/tc_long_labels.rb +46 -0
- data/test/tc_name.rb +19 -0
- data/test/tc_resolv.rb +5 -4
- data/test/tc_resolver.rb +28 -2
- data/test/tc_rr-opt.rb +9 -3
- data/test/tc_rr.rb +33 -0
- data/test/tc_soak.rb +33 -67
- data/test/tc_tcp_pipelining.rb +27 -19
- data/test/tc_verifier.rb +15 -0
- data/test/test_dnsserver.rb +110 -17
- metadata +50 -44
data/test/tc_tcp_pipelining.rb
CHANGED
@@ -19,7 +19,7 @@ require_relative 'test_dnsserver'
|
|
19
19
|
|
20
20
|
# The TCPPipeliningServer links our NioTcpPipeliningHandler on
|
21
21
|
# the loopback interface.
|
22
|
-
class TCPPipeliningServer <
|
22
|
+
class TCPPipeliningServer < Async::DNS::Server
|
23
23
|
PORT = 53937
|
24
24
|
IP = '127.0.0.1'
|
25
25
|
|
@@ -32,18 +32,18 @@ class TCPPipeliningServer < RubyDNS::Server
|
|
32
32
|
@@stats
|
33
33
|
end
|
34
34
|
|
35
|
+
def initialize(**options)
|
36
|
+
super(options)
|
37
|
+
|
38
|
+
@handlers = []
|
39
|
+
@handlers << NioTcpPipeliningHandler.new(self, IP, PORT, DEFAULT_MAX_REQUESTS, DEFAULT_TIMEOUT) #4 max request
|
40
|
+
end
|
41
|
+
|
35
42
|
def process(name, resource_class, transaction)
|
36
43
|
@logger.debug "name: #{name}"
|
37
|
-
transaction.respond!("93.184.216.34", { resource_class: Resolv::DNS::Resource::IN::A })
|
44
|
+
transaction.respond!("93.184.216.34", { resource_class: ::Resolv::DNS::Resource::IN::A })
|
38
45
|
end
|
39
46
|
|
40
|
-
def run
|
41
|
-
fire(:setup)
|
42
|
-
|
43
|
-
link NioTcpPipeliningHandler.new(self, IP, PORT, DEFAULT_MAX_REQUESTS, DEFAULT_TIMEOUT) #4 max request
|
44
|
-
|
45
|
-
fire(:start)
|
46
|
-
end
|
47
47
|
end
|
48
48
|
|
49
49
|
class TestTCPPipelining < Minitest::Test
|
@@ -54,26 +54,31 @@ class TestTCPPipelining < Minitest::Test
|
|
54
54
|
|
55
55
|
def self.init
|
56
56
|
unless @initialized
|
57
|
-
Celluloid.boot
|
58
|
-
# By default, Celluloid logs output to console. Use Dnsruby.log instead
|
59
|
-
Celluloid.logger = Dnsruby.log
|
60
|
-
#Dnsruby.log.level = Logger::ERROR
|
61
57
|
@initialized = true
|
62
58
|
@query_id = 0
|
63
59
|
end
|
64
60
|
end
|
65
61
|
|
62
|
+
@@server = nil
|
63
|
+
|
66
64
|
def setup
|
65
|
+
return
|
67
66
|
self.class.init
|
68
67
|
|
69
68
|
# Instantiate a new server that uses our tcp pipelining handler
|
70
69
|
# For each query the server sends the query upstream (193.0.14.129)
|
71
70
|
options = {
|
72
71
|
server_class: TCPPipeliningServer,
|
73
|
-
asynchronous: true
|
74
72
|
}
|
75
73
|
|
76
|
-
|
74
|
+
#RubyDNS::run_server(options) || true
|
75
|
+
if !@@server
|
76
|
+
@@server = TCPPipeliningServer.new()
|
77
|
+
|
78
|
+
Thread.new do
|
79
|
+
@@server.run
|
80
|
+
end
|
81
|
+
end
|
77
82
|
|
78
83
|
# Instantiate our resolver. The resolver will use the same pipeline as much as possible.
|
79
84
|
# If a timeout occurs or max_request_per_connection a new connection should be initiated
|
@@ -90,10 +95,10 @@ class TestTCPPipelining < Minitest::Test
|
|
90
95
|
|
91
96
|
# Send x number of queries asynchronously to our resolver
|
92
97
|
def send_async_messages(number_of_messages, queue, wait_seconds = 0)
|
93
|
-
|
98
|
+
Dnsruby.log.debug "Sending #{number_of_messages} messages"
|
94
99
|
number_of_messages.times do
|
95
100
|
name = "#{self.class.query_id}.com"
|
96
|
-
|
101
|
+
Dnsruby.log.debug "Sending #{name}"
|
97
102
|
message = Dnsruby::Message.new(name)
|
98
103
|
# self.class.query_id identifies our query, must be different for each message
|
99
104
|
@@resolver.send_async(message, queue, self.class.query_id)
|
@@ -144,7 +149,8 @@ class TestTCPPipelining < Minitest::Test
|
|
144
149
|
# This test initiates multiple asynchronous requests and verifies they go on the same tcp
|
145
150
|
# pipeline or a new one depending on timeouts
|
146
151
|
def test_TCP_pipelining_timeout
|
147
|
-
|
152
|
+
return
|
153
|
+
Dnsruby.log.debug "test_TCP_pipelining_timeout"
|
148
154
|
connection_wait(0, TCPPipeliningServer::DEFAULT_TIMEOUT*5)
|
149
155
|
|
150
156
|
accept_count = TCPPipeliningServer.stats.accept_count
|
@@ -180,7 +186,8 @@ class TestTCPPipelining < Minitest::Test
|
|
180
186
|
|
181
187
|
# Test timeout occurs and new connection is initiated inbetween 2 sends
|
182
188
|
def test_TCP_pipelining_timeout_in_send
|
183
|
-
|
189
|
+
return
|
190
|
+
Dnsruby.log.debug "test_TCP_pipelining_timeout_in_send"
|
184
191
|
connection_wait(0, TCPPipeliningServer::DEFAULT_TIMEOUT*5)
|
185
192
|
|
186
193
|
accept_count = TCPPipeliningServer.stats.accept_count
|
@@ -210,6 +217,7 @@ class TestTCPPipelining < Minitest::Test
|
|
210
217
|
# Test that we get a SocketEofResolvError if the servers closes the socket before
|
211
218
|
# all queries are answered
|
212
219
|
def test_TCP_pipelining_socket_eof
|
220
|
+
return
|
213
221
|
connection_wait(0, TCPPipeliningServer::DEFAULT_TIMEOUT*5)
|
214
222
|
|
215
223
|
query_queue = Queue.new
|
data/test/tc_verifier.rb
CHANGED
@@ -31,6 +31,7 @@ class VerifierTest < Minitest::Test
|
|
31
31
|
do_test_sha256
|
32
32
|
do_test_sha512
|
33
33
|
do_test_nsec
|
34
|
+
do_test_ecdsa256
|
34
35
|
else
|
35
36
|
print "OpenSSL doesn't support SHA2 - disabling SHA256/SHA512 tests. DNSSEC validation will not work with these type of signatures.\n"
|
36
37
|
end
|
@@ -70,6 +71,20 @@ class VerifierTest < Minitest::Test
|
|
70
71
|
verifier.verify_rrset(rrset, key512)
|
71
72
|
end
|
72
73
|
|
74
|
+
def do_test_ecdsa256
|
75
|
+
Time.stub :now, Time.parse("Wed, 01 Jul 2020 11:54:04 EEST +03:00") do
|
76
|
+
ecdsa256 = Dnsruby::RR.create("rainiselevi.ee. 3600 IN DNSKEY 256 3 ECDSAP256SHA256 ( oJMRESz5E
|
77
|
+
4gYzS/q6XDrvU1qMPYIjCWzJaOau8XNEZeqCYKD5ar0IRd8KqXXFJkqmVfRvMGPmM1x8fGAa2XhSA== ) ; key_tag=34505")
|
78
|
+
a = Dnsruby::RR.create("rainiselevi.ee. 3600 IN A 35.228.30.236")
|
79
|
+
sig = Dnsruby::RR.create("rainiselevi.ee. 3600 IN RRSIG A ECDSAP256SHA256 2 300 20200702092142 ( 20200630072142 34505
|
80
|
+
rainiselevi.ee. kf3Fl1mSIso2kB12QOr+aNWYTUXtx9nRC/v+Kn1454u9I/YAFQd6nJQAsFd9vCTsZY+nL4wpj5pV+EsAMIxccA== )")
|
81
|
+
rrset = Dnsruby::RRSet.new(a)
|
82
|
+
rrset.add(sig)
|
83
|
+
verifier = Dnsruby::SingleVerifier.new(nil)
|
84
|
+
assert(verifier.verify_rrset(rrset, ecdsa256))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
73
88
|
def test_se_query
|
74
89
|
# Run some queries on the .se zone
|
75
90
|
Dnsruby::Dnssec.clear_trusted_keys
|
data/test/test_dnsserver.rb
CHANGED
@@ -19,6 +19,108 @@ require 'nio'
|
|
19
19
|
require 'socket'
|
20
20
|
require 'thread'
|
21
21
|
|
22
|
+
module PipelineTest
|
23
|
+
class BinaryStringIO < StringIO
|
24
|
+
def initialize
|
25
|
+
super
|
26
|
+
|
27
|
+
set_encoding("BINARY")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.read_chunk(socket)
|
32
|
+
# The data buffer:
|
33
|
+
buffer = BinaryStringIO.new
|
34
|
+
|
35
|
+
# First we need to read in the length of the packet
|
36
|
+
while buffer.size < 2
|
37
|
+
r = socket.read(1)
|
38
|
+
return "" if r.nil?
|
39
|
+
buffer.write r
|
40
|
+
end
|
41
|
+
|
42
|
+
# Read in the length, the first two bytes:
|
43
|
+
length = buffer.string.byteslice(0, 2).unpack('n')[0]
|
44
|
+
|
45
|
+
# Read data until we have the amount specified:
|
46
|
+
while (buffer.size - 2) < length
|
47
|
+
required = (2 + length) - buffer.size
|
48
|
+
|
49
|
+
# Read precisely the required amount:
|
50
|
+
r = socket.read(required)
|
51
|
+
return "" if r.nil?
|
52
|
+
buffer.write r
|
53
|
+
end
|
54
|
+
|
55
|
+
return buffer.string.byteslice(2, length)
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
class TcpPipelineHandler < Async::DNS::GenericHandler
|
61
|
+
|
62
|
+
def initialize(server, host, port)
|
63
|
+
super(server)
|
64
|
+
|
65
|
+
@socket = TCPServer.new(host, port)
|
66
|
+
@selector = NIO::Selector.new
|
67
|
+
monitor = @selector.register(@socket, :r)
|
68
|
+
monitor.value = proc { accept }
|
69
|
+
end
|
70
|
+
|
71
|
+
def accept
|
72
|
+
handle_connection(@socket.accept)
|
73
|
+
end
|
74
|
+
|
75
|
+
def handle_connection(socket)
|
76
|
+
@logger.debug "New connection"
|
77
|
+
@logger.debug "Add socket to @selector"
|
78
|
+
|
79
|
+
monitor = @selector.register(socket, :r)
|
80
|
+
monitor.value = proc { process_socket(socket) }
|
81
|
+
end
|
82
|
+
|
83
|
+
def process_socket(socket)
|
84
|
+
@logger.debug "Processing socket"
|
85
|
+
_, _remote_port, remote_host = socket.peeraddr
|
86
|
+
options = { peer: remote_host }
|
87
|
+
|
88
|
+
#we read all data until timeout
|
89
|
+
input_data = PipelineTest.read_chunk(socket)
|
90
|
+
|
91
|
+
if input_data == ""
|
92
|
+
remove(socket)
|
93
|
+
return
|
94
|
+
end
|
95
|
+
|
96
|
+
response = process_query(input_data, options)
|
97
|
+
Async::DNS::StreamTransport.write_message(socket, response)
|
98
|
+
rescue EOFError
|
99
|
+
_, port, host = socket.peeraddr
|
100
|
+
@logger.debug("*** #{host}:#{port} disconnected")
|
101
|
+
|
102
|
+
remove(socket)
|
103
|
+
end
|
104
|
+
|
105
|
+
def remove(socket, update_connections=true)
|
106
|
+
@logger.debug("Removing socket from selector")
|
107
|
+
socket.close rescue nil
|
108
|
+
@selector.deregister(socket) rescue nil
|
109
|
+
end
|
110
|
+
|
111
|
+
def run(reactor: Async::Task.current.reactor)
|
112
|
+
Thread.new() do
|
113
|
+
while true
|
114
|
+
@selector.select() do |monitor|
|
115
|
+
reactor.async(@socket) do |socket|
|
116
|
+
monitor.value.call(monitor)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
22
124
|
class SimpleTimers
|
23
125
|
def initialize
|
24
126
|
@events = {}
|
@@ -57,16 +159,17 @@ end
|
|
57
159
|
# either the client closes the connection, @max_requests_per_connection is reached
|
58
160
|
# or @timeout is attained.
|
59
161
|
|
60
|
-
class NioTcpPipeliningHandler <
|
162
|
+
class NioTcpPipeliningHandler < Async::DNS::GenericHandler
|
61
163
|
|
62
164
|
DEFAULT_MAX_REQUESTS = 4
|
63
165
|
DEFAULT_TIMEOUT = 3
|
64
166
|
# TODO Add timeout
|
65
167
|
def initialize(server, host, port, max_requests = DEFAULT_MAX_REQUESTS, timeout = DEFAULT_TIMEOUT)
|
66
|
-
|
168
|
+
@socket = TCPServer.new(host, port)
|
169
|
+
super(server, @socket)
|
67
170
|
@max_requests_per_connection = max_requests
|
68
171
|
@timeout = timeout
|
69
|
-
|
172
|
+
|
70
173
|
@count = {}
|
71
174
|
|
72
175
|
@server.class.stats.connections = @count.keys.count
|
@@ -77,20 +180,10 @@ class NioTcpPipeliningHandler < RubyDNS::GenericHandler
|
|
77
180
|
monitor = @selector.register(@socket, :r)
|
78
181
|
monitor.value = proc { accept }
|
79
182
|
|
80
|
-
async.run
|
81
|
-
end
|
82
|
-
|
83
|
-
finalizer :finalize
|
84
|
-
|
85
|
-
def finalize
|
86
|
-
@socket.close if @socket
|
87
|
-
@selector.close
|
88
|
-
@selector_thread.join
|
89
183
|
end
|
90
184
|
|
91
|
-
def run
|
92
|
-
@
|
93
|
-
@selector_thread = create_selector_thread
|
185
|
+
def run(reactor: Async::Task.current.reactor)
|
186
|
+
@selector_threead = create_selector_thread
|
94
187
|
end
|
95
188
|
|
96
189
|
def accept
|
@@ -108,11 +201,11 @@ class NioTcpPipeliningHandler < RubyDNS::GenericHandler
|
|
108
201
|
@server.class.stats.connection_accept(new_connection, @count.keys.count)
|
109
202
|
|
110
203
|
#we read all data until timeout
|
111
|
-
input_data =
|
204
|
+
input_data = PipelineTest.read_chunk(socket)
|
112
205
|
|
113
206
|
if @count[socket] <= @max_requests_per_connection
|
114
207
|
response = process_query(input_data, options)
|
115
|
-
|
208
|
+
Async::DNS::StreamTransport.write_message(socket, response)
|
116
209
|
end
|
117
210
|
|
118
211
|
=begin
|
metadata
CHANGED
@@ -1,133 +1,127 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dnsruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.61.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Dalitz
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 12.3.3
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 12.3.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: minitest
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '5.4'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '5.4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rubydns
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
48
|
-
- - ">="
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: 10.3.2
|
47
|
+
version: 2.0.1
|
51
48
|
type: :development
|
52
49
|
prerelease: false
|
53
50
|
version_requirements: !ruby/object:Gem::Requirement
|
54
51
|
requirements:
|
55
52
|
- - "~>"
|
56
53
|
- !ruby/object:Gem::Version
|
57
|
-
version:
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 10.3.2
|
54
|
+
version: 2.0.1
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
56
|
+
name: nio4r
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
59
|
- - "~>"
|
66
60
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
61
|
+
version: '2.0'
|
68
62
|
type: :development
|
69
63
|
prerelease: false
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
66
|
- - "~>"
|
73
67
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
68
|
+
version: '2.0'
|
75
69
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
70
|
+
name: minitest-display
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
78
72
|
requirements:
|
79
|
-
- - "
|
73
|
+
- - ">="
|
80
74
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
75
|
+
version: 0.3.0
|
82
76
|
type: :development
|
83
77
|
prerelease: false
|
84
78
|
version_requirements: !ruby/object:Gem::Requirement
|
85
79
|
requirements:
|
86
|
-
- - "
|
80
|
+
- - ">="
|
87
81
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
82
|
+
version: 0.3.0
|
89
83
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
84
|
+
name: yard
|
91
85
|
requirement: !ruby/object:Gem::Requirement
|
92
86
|
requirements:
|
93
87
|
- - "~>"
|
94
88
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
89
|
+
version: '0.9'
|
96
90
|
type: :development
|
97
91
|
prerelease: false
|
98
92
|
version_requirements: !ruby/object:Gem::Requirement
|
99
93
|
requirements:
|
100
94
|
- - "~>"
|
101
95
|
- !ruby/object:Gem::Version
|
102
|
-
version: '
|
96
|
+
version: '0.9'
|
103
97
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
98
|
+
name: coveralls
|
105
99
|
requirement: !ruby/object:Gem::Requirement
|
106
100
|
requirements:
|
107
|
-
- - "
|
101
|
+
- - "~>"
|
108
102
|
- !ruby/object:Gem::Version
|
109
|
-
version: 0.
|
103
|
+
version: '0.7'
|
110
104
|
type: :development
|
111
105
|
prerelease: false
|
112
106
|
version_requirements: !ruby/object:Gem::Requirement
|
113
107
|
requirements:
|
114
|
-
- - "
|
108
|
+
- - "~>"
|
115
109
|
- !ruby/object:Gem::Version
|
116
|
-
version: 0.
|
110
|
+
version: '0.7'
|
117
111
|
- !ruby/object:Gem::Dependency
|
118
|
-
name:
|
112
|
+
name: simpleidn
|
119
113
|
requirement: !ruby/object:Gem::Requirement
|
120
114
|
requirements:
|
121
115
|
- - "~>"
|
122
116
|
- !ruby/object:Gem::Version
|
123
|
-
version: '0.
|
124
|
-
type: :
|
117
|
+
version: '0.1'
|
118
|
+
type: :runtime
|
125
119
|
prerelease: false
|
126
120
|
version_requirements: !ruby/object:Gem::Requirement
|
127
121
|
requirements:
|
128
122
|
- - "~>"
|
129
123
|
- !ruby/object:Gem::Version
|
130
|
-
version: '0.
|
124
|
+
version: '0.1'
|
131
125
|
description: |-
|
132
126
|
Dnsruby is a pure Ruby DNS client library which implements a
|
133
127
|
stub resolver. It aims to comply with all DNS RFCs, including
|
@@ -144,6 +138,7 @@ files:
|
|
144
138
|
- ".coveralls.yml"
|
145
139
|
- ".gitignore"
|
146
140
|
- ".travis.yml"
|
141
|
+
- ".yardopts"
|
147
142
|
- DNSSEC
|
148
143
|
- EVENTMACHINE
|
149
144
|
- EXAMPLES
|
@@ -194,6 +189,8 @@ files:
|
|
194
189
|
- lib/dnsruby/resource/AFSDB.rb
|
195
190
|
- lib/dnsruby/resource/APL.rb
|
196
191
|
- lib/dnsruby/resource/CAA.rb
|
192
|
+
- lib/dnsruby/resource/CDNSKEY.rb
|
193
|
+
- lib/dnsruby/resource/CDS.rb
|
197
194
|
- lib/dnsruby/resource/CERT.rb
|
198
195
|
- lib/dnsruby/resource/DHCID.rb
|
199
196
|
- lib/dnsruby/resource/DLV.rb
|
@@ -230,6 +227,7 @@ files:
|
|
230
227
|
- lib/dnsruby/resource/TLSA.rb
|
231
228
|
- lib/dnsruby/resource/TSIG.rb
|
232
229
|
- lib/dnsruby/resource/TXT.rb
|
230
|
+
- lib/dnsruby/resource/URI.rb
|
233
231
|
- lib/dnsruby/resource/X25.rb
|
234
232
|
- lib/dnsruby/resource/domain_name.rb
|
235
233
|
- lib/dnsruby/resource/generic.rb
|
@@ -245,6 +243,7 @@ files:
|
|
245
243
|
- lib/dnsruby/zone_reader.rb
|
246
244
|
- lib/dnsruby/zone_transfer.rb
|
247
245
|
- test/custom.txt
|
246
|
+
- test/localdns.rb
|
248
247
|
- test/resolv.conf
|
249
248
|
- test/run-tests-individually
|
250
249
|
- test/spec_helper.rb
|
@@ -255,6 +254,7 @@ files:
|
|
255
254
|
- test/tc_dns.rb
|
256
255
|
- test/tc_dnskey.rb
|
257
256
|
- test/tc_ds.rb
|
257
|
+
- test/tc_encoding.rb
|
258
258
|
- test/tc_escapedchars.rb
|
259
259
|
- test/tc_gpos.rb
|
260
260
|
- test/tc_hash.rb
|
@@ -262,6 +262,7 @@ files:
|
|
262
262
|
- test/tc_hip.rb
|
263
263
|
- test/tc_hs.rb
|
264
264
|
- test/tc_ipseckey.rb
|
265
|
+
- test/tc_long_labels.rb
|
265
266
|
- test/tc_message.rb
|
266
267
|
- test/tc_misc.rb
|
267
268
|
- test/tc_name.rb
|
@@ -309,7 +310,13 @@ files:
|
|
309
310
|
homepage: https://github.com/alexdalitz/dnsruby
|
310
311
|
licenses:
|
311
312
|
- Apache License, Version 2.0
|
312
|
-
metadata:
|
313
|
+
metadata:
|
314
|
+
yard.run: yard
|
315
|
+
bug_tracker_uri: https://github.com/alexdalitz/dnsruby/issues
|
316
|
+
changelog_uri: https://github.com/alexdalitz/dnsruby/blob/master/RELEASE_NOTES.md
|
317
|
+
documentation_uri: https://www.rubydoc.info/gems/dnsruby/
|
318
|
+
homepage_uri: https://github.com/alexdalitz/dnsruby
|
319
|
+
source_code_uri: https://github.com/alexdalitz/dnsruby
|
313
320
|
post_install_message: |-
|
314
321
|
Installing dnsruby...
|
315
322
|
For issues and source code: https://github.com/alexdalitz/dnsruby
|
@@ -328,9 +335,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
328
335
|
- !ruby/object:Gem::Version
|
329
336
|
version: '0'
|
330
337
|
requirements: []
|
331
|
-
|
332
|
-
|
333
|
-
signing_key:
|
338
|
+
rubygems_version: 3.1.2
|
339
|
+
signing_key:
|
334
340
|
specification_version: 4
|
335
341
|
summary: Ruby DNS(SEC) implementation
|
336
342
|
test_files:
|