async-dns 1.3.0 → 1.4.1
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
- checksums.yaml.gz.sig +0 -0
- data/lib/async/dns/cache.rb +69 -0
- data/lib/async/dns/chunked.rb +4 -19
- data/lib/async/dns/endpoint.rb +23 -0
- data/lib/async/dns/extensions/resolv.rb +22 -82
- data/lib/async/dns/extensions/string.rb +6 -20
- data/lib/async/dns/handler.rb +72 -54
- data/lib/async/dns/resolver.rb +151 -137
- data/lib/async/dns/server.rb +62 -69
- data/lib/async/dns/system.rb +147 -80
- data/lib/async/dns/transaction.rb +30 -37
- data/lib/async/dns/transport.rb +27 -39
- data/lib/async/dns/version.rb +6 -20
- data/lib/async/dns.rb +11 -27
- data/license.md +29 -0
- data/readme.md +53 -0
- data/releases.md +21 -0
- data.tar.gz.sig +0 -0
- metadata +51 -125
- metadata.gz.sig +0 -0
- data/lib/async/dns/message.rb +0 -53
- data/lib/async/dns/replace.rb +0 -54
data/releases.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# Releases
|
2
|
+
|
3
|
+
## v1.4.0
|
4
|
+
|
5
|
+
- Minimum Ruby version is now v3.1.
|
6
|
+
- Drop dependency on `Async::IO` and refactor internal network code to use `IO::Endpoint` and `Socket` directly.
|
7
|
+
- Introduce `Async::DNS::Endpoint` for getting the default endpoint for a given name server.
|
8
|
+
- Remove old hacks for IPv6 on Ruby v2.3.
|
9
|
+
- Introduce `Async::DNS::Cache` for caching DNS lookups.
|
10
|
+
- Remove `logger` as an option and instance variable in favour of using `Console.logger` directly. This is a breaking change.
|
11
|
+
- Update error logging to include more details.
|
12
|
+
- Use keyword arguments `**options` where possible. This is a breaking change.
|
13
|
+
- `Async::DNS::StreamHandler` and `Async::DNS::DatagramHandler` have been refactored to use `IO::Endpoint` and have minor breaking interface changes.
|
14
|
+
- `Async::DNS::Resolver.default` should be used to get a default resolver instance.
|
15
|
+
- The resolver now supports `ndots:` when resolving names.
|
16
|
+
- `Async::DNS::Resolver#fully_qualified_name` is replaced by `Async::DNS::Resolver#fully_qualified_names` and can yield multiple names.
|
17
|
+
- If the host system supports IPv6, the resolver will also try to resolve IPv6 addresses.
|
18
|
+
- `Async::DNS::Server::DEFAULT_ENDPOINTS` is removed and replaced by `Async::DNS::Server.default_endpoint(port = 53)`.
|
19
|
+
- `Async::DNS::Server#fire` is removed with no replacement.
|
20
|
+
- The default `Async::DNS::Server#process` fails with `NXDomain` instead of `NotImplementedError`.
|
21
|
+
- `Async::DNS::System` implementation is updated to support IPv6 and `resolv.conf` options.
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,79 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: async-dns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
|
-
|
8
|
+
- Tony Arcieri
|
9
|
+
- Olle Jonsson
|
10
|
+
- Greg Thornton
|
11
|
+
- Hal Brodigan
|
12
|
+
- Hendrik Beskow
|
13
|
+
- Mike Perham
|
14
|
+
- Sean Dilda
|
15
|
+
- Stefan Wrobel
|
9
16
|
bindir: bin
|
10
17
|
cert_chain:
|
11
18
|
- |
|
12
19
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
20
|
+
MIIE2DCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQsFADBhMRgwFgYDVQQDDA9zYW11
|
21
|
+
ZWwud2lsbGlhbXMxHTAbBgoJkiaJk/IsZAEZFg1vcmlvbnRyYW5zZmVyMRIwEAYK
|
22
|
+
CZImiZPyLGQBGRYCY28xEjAQBgoJkiaJk/IsZAEZFgJuejAeFw0yMjA4MDYwNDUz
|
23
|
+
MjRaFw0zMjA4MDMwNDUzMjRaMGExGDAWBgNVBAMMD3NhbXVlbC53aWxsaWFtczEd
|
24
|
+
MBsGCgmSJomT8ixkARkWDW9yaW9udHJhbnNmZXIxEjAQBgoJkiaJk/IsZAEZFgJj
|
25
|
+
bzESMBAGCgmSJomT8ixkARkWAm56MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
|
26
|
+
igKCAYEAomvSopQXQ24+9DBB6I6jxRI2auu3VVb4nOjmmHq7XWM4u3HL+pni63X2
|
27
|
+
9qZdoq9xt7H+RPbwL28LDpDNflYQXoOhoVhQ37Pjn9YDjl8/4/9xa9+NUpl9XDIW
|
28
|
+
sGkaOY0eqsQm1pEWkHJr3zn/fxoKPZPfaJOglovdxf7dgsHz67Xgd/ka+Wo1YqoE
|
29
|
+
e5AUKRwUuvaUaumAKgPH+4E4oiLXI4T1Ff5Q7xxv6yXvHuYtlMHhYfgNn8iiW8WN
|
30
|
+
XibYXPNP7NtieSQqwR/xM6IRSoyXKuS+ZNGDPUUGk8RoiV/xvVN4LrVm9upSc0ss
|
31
|
+
RZ6qwOQmXCo/lLcDUxJAgG95cPw//sI00tZan75VgsGzSWAOdjQpFM0l4dxvKwHn
|
32
|
+
tUeT3ZsAgt0JnGqNm2Bkz81kG4A2hSyFZTFA8vZGhp+hz+8Q573tAR89y9YJBdYM
|
33
|
+
zp0FM4zwMNEUwgfRzv1tEVVUEXmoFCyhzonUUw4nE4CFu/sE3ffhjKcXcY//qiSW
|
34
|
+
xm4erY3XAgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
|
35
|
+
BBYEFO9t7XWuFf2SKLmuijgqR4sGDlRsMC4GA1UdEQQnMCWBI3NhbXVlbC53aWxs
|
36
|
+
aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWBI3NhbXVlbC53aWxs
|
37
|
+
aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEBCwUAA4IBgQB5sxkE
|
38
|
+
cBsSYwK6fYpM+hA5B5yZY2+L0Z+27jF1pWGgbhPH8/FjjBLVn+VFok3CDpRqwXCl
|
39
|
+
xCO40JEkKdznNy2avOMra6PFiQyOE74kCtv7P+Fdc+FhgqI5lMon6tt9rNeXmnW/
|
40
|
+
c1NaMRdxy999hmRGzUSFjozcCwxpy/LwabxtdXwXgSay4mQ32EDjqR1TixS1+smp
|
41
|
+
8C/NCWgpIfzpHGJsjvmH2wAfKtTTqB9CVKLCWEnCHyCaRVuKkrKjqhYCdmMBqCws
|
42
|
+
JkxfQWC+jBVeG9ZtPhQgZpfhvh+6hMhraUYRQ6XGyvBqEUe+yo6DKIT3MtGE2+CP
|
43
|
+
eX9i9ZWBydWb8/rvmwmX2kkcBbX0hZS1rcR593hGc61JR6lvkGYQ2MYskBveyaxt
|
44
|
+
Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
|
45
|
+
voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
|
38
46
|
-----END CERTIFICATE-----
|
39
|
-
date:
|
47
|
+
date: 2025-02-15 00:00:00.000000000 Z
|
40
48
|
dependencies:
|
41
49
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: async
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.15'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '1.15'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: async-rspec
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '1.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '1.0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: bundler
|
50
|
+
name: async
|
71
51
|
requirement: !ruby/object:Gem::Requirement
|
72
52
|
requirements:
|
73
53
|
- - ">="
|
74
54
|
- !ruby/object:Gem::Version
|
75
55
|
version: '0'
|
76
|
-
type: :
|
56
|
+
type: :runtime
|
77
57
|
prerelease: false
|
78
58
|
version_requirements: !ruby/object:Gem::Requirement
|
79
59
|
requirements:
|
@@ -81,99 +61,46 @@ dependencies:
|
|
81
61
|
- !ruby/object:Gem::Version
|
82
62
|
version: '0'
|
83
63
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
64
|
+
name: io-endpoint
|
85
65
|
requirement: !ruby/object:Gem::Requirement
|
86
66
|
requirements:
|
87
67
|
- - ">="
|
88
68
|
- !ruby/object:Gem::Version
|
89
69
|
version: '0'
|
90
|
-
type: :
|
70
|
+
type: :runtime
|
91
71
|
prerelease: false
|
92
72
|
version_requirements: !ruby/object:Gem::Requirement
|
93
73
|
requirements:
|
94
74
|
- - ">="
|
95
75
|
- !ruby/object:Gem::Version
|
96
76
|
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: process-daemon
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '1.0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '1.0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rspec
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '3.0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '3.0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rspec-files
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '1.0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '1.0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: rspec-memory
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '1.0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '1.0'
|
153
|
-
description:
|
154
|
-
email:
|
155
77
|
executables: []
|
156
78
|
extensions: []
|
157
79
|
extra_rdoc_files: []
|
158
80
|
files:
|
159
81
|
- lib/async/dns.rb
|
82
|
+
- lib/async/dns/cache.rb
|
160
83
|
- lib/async/dns/chunked.rb
|
84
|
+
- lib/async/dns/endpoint.rb
|
161
85
|
- lib/async/dns/extensions/resolv.rb
|
162
86
|
- lib/async/dns/extensions/string.rb
|
163
87
|
- lib/async/dns/handler.rb
|
164
|
-
- lib/async/dns/message.rb
|
165
|
-
- lib/async/dns/replace.rb
|
166
88
|
- lib/async/dns/resolver.rb
|
167
89
|
- lib/async/dns/server.rb
|
168
90
|
- lib/async/dns/system.rb
|
169
91
|
- lib/async/dns/transaction.rb
|
170
92
|
- lib/async/dns/transport.rb
|
171
93
|
- lib/async/dns/version.rb
|
94
|
+
- license.md
|
95
|
+
- readme.md
|
96
|
+
- releases.md
|
172
97
|
homepage: https://github.com/socketry/async-dns
|
173
98
|
licenses:
|
174
99
|
- MIT
|
175
|
-
metadata:
|
176
|
-
|
100
|
+
metadata:
|
101
|
+
documentation_uri: https://socketry.github.io/async-dns/
|
102
|
+
funding_uri: https://github.com/sponsors/ioquatix/
|
103
|
+
source_code_uri: https://github.com/socketry/async-dns.git
|
177
104
|
rdoc_options: []
|
178
105
|
require_paths:
|
179
106
|
- lib
|
@@ -181,15 +108,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
181
108
|
requirements:
|
182
109
|
- - ">="
|
183
110
|
- !ruby/object:Gem::Version
|
184
|
-
version: '
|
111
|
+
version: '3.1'
|
185
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
113
|
requirements:
|
187
114
|
- - ">="
|
188
115
|
- !ruby/object:Gem::Version
|
189
116
|
version: '0'
|
190
117
|
requirements: []
|
191
|
-
rubygems_version: 3.
|
192
|
-
signing_key:
|
118
|
+
rubygems_version: 3.6.2
|
193
119
|
specification_version: 4
|
194
120
|
summary: An easy to use DNS client resolver and server for Ruby.
|
195
121
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|
data/lib/async/dns/message.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
# Copyright, 2009, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
-
#
|
3
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
# of this software and associated documentation files (the "Software"), to deal
|
5
|
-
# in the Software without restriction, including without limitation the rights
|
6
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
# copies of the Software, and to permit persons to whom the Software is
|
8
|
-
# furnished to do so, subject to the following conditions:
|
9
|
-
#
|
10
|
-
# The above copyright notice and this permission notice shall be included in
|
11
|
-
# all copies or substantial portions of the Software.
|
12
|
-
#
|
13
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
# THE SOFTWARE.
|
20
|
-
|
21
|
-
require 'stringio'
|
22
|
-
require 'resolv'
|
23
|
-
|
24
|
-
require 'base64'
|
25
|
-
|
26
|
-
require_relative 'extensions/resolv'
|
27
|
-
|
28
|
-
module Async::DNS
|
29
|
-
UDP_TRUNCATION_SIZE = 512
|
30
|
-
|
31
|
-
# The DNS message container.
|
32
|
-
Message = ::Resolv::DNS::Message
|
33
|
-
DecodeError = ::Resolv::DNS::DecodeError
|
34
|
-
|
35
|
-
# Decodes binary data into a {Message}.
|
36
|
-
def self.decode_message(data)
|
37
|
-
# Otherwise the decode process might fail with non-binary data.
|
38
|
-
if data.respond_to? :force_encoding
|
39
|
-
data.force_encoding("BINARY")
|
40
|
-
end
|
41
|
-
|
42
|
-
begin
|
43
|
-
return Message.decode(data)
|
44
|
-
rescue DecodeError
|
45
|
-
raise
|
46
|
-
rescue StandardError => error
|
47
|
-
new_error = DecodeError.new(error.message)
|
48
|
-
new_error.set_backtrace(error.backtrace)
|
49
|
-
|
50
|
-
raise new_error
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
data/lib/async/dns/replace.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
# Copyright, 2015, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
-
#
|
3
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
# of this software and associated documentation files (the "Software"), to deal
|
5
|
-
# in the Software without restriction, including without limitation the rights
|
6
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
# copies of the Software, and to permit persons to whom the Software is
|
8
|
-
# furnished to do so, subject to the following conditions:
|
9
|
-
#
|
10
|
-
# The above copyright notice and this permission notice shall be included in
|
11
|
-
# all copies or substantial portions of the Software.
|
12
|
-
#
|
13
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
# THE SOFTWARE.
|
20
|
-
|
21
|
-
require 'resolv'
|
22
|
-
require 'resolv-replace'
|
23
|
-
|
24
|
-
module Async::DNS
|
25
|
-
module Replace
|
26
|
-
class << self
|
27
|
-
attr_accessor :resolver
|
28
|
-
|
29
|
-
def resolver?
|
30
|
-
resolver != nil
|
31
|
-
end
|
32
|
-
|
33
|
-
def get_address(host)
|
34
|
-
begin
|
35
|
-
resolver.addresses_for(host).sample.to_s
|
36
|
-
rescue ResolutionFailure
|
37
|
-
raise SocketError, "Hostname not known: #{host}"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class << IPSocket
|
44
|
-
@@resolver = nil
|
45
|
-
|
46
|
-
def getaddress(host)
|
47
|
-
if Replace.resolver?
|
48
|
-
Replace.get_address(host)
|
49
|
-
else
|
50
|
-
original_resolv_getaddress(host)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|