record_store 8.0.10 → 8.0.11
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 +1 -1
- data/CHANGELOG.md +3 -0
- data/lib/record_store/version.rb +1 -1
- data/lib/record_store/zone.rb +31 -1
- data/record_store.gemspec +2 -1
- metadata +17 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 43d93495d6304ff99a4c2335be9452a7dd8a222580d702536e21d3cf836e0607
|
|
4
|
+
data.tar.gz: f1f948d4136c09ecca1a6199eda17aea70bb726a3a75e8aa224d0ee3b2df13a3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7e143587f1505ee799b3849d1fdcec2e58563fd5ffb9e75154e4277bef465bf8e76aec116aeb9e418eb81441a46132ab34c8806c39266cc4c7db4f92c6125907
|
|
7
|
+
data.tar.gz: c92a3b36d67f4cec13ba82aa3c7679803188c1e56e79917fadccc82cd0c856d6bdefd0beb4892ca050c7005579d4e0ec888fe35cc5e9850c464d3cde23a5c542
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -14,7 +14,7 @@ jobs:
|
|
|
14
14
|
ruby: [ 3.2, 3.3, 3.4 ]
|
|
15
15
|
name: Test Ruby ${{ matrix.ruby }}
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
17
|
+
- uses: actions/checkout@v6
|
|
18
18
|
- name: Install dependencies
|
|
19
19
|
run: |
|
|
20
20
|
sudo apt-get update && sudo apt-get install build-essential libcurl4-openssl-dev
|
data/CHANGELOG.md
CHANGED
data/lib/record_store/version.rb
CHANGED
data/lib/record_store/zone.rb
CHANGED
|
@@ -143,6 +143,12 @@ module RecordStore
|
|
|
143
143
|
|
|
144
144
|
def fetch_authority(nameserver = ROOT_SERVERS.sample)
|
|
145
145
|
authority = fetch_soa(nameserver) do |reply, _name|
|
|
146
|
+
# If we get a valid SOA answer, the nameserver is authoritative, so fetch NS records directly
|
|
147
|
+
if reply.answer.any? && reply.answer.first[0].to_s == unrooted_name
|
|
148
|
+
break fetch_ns_records(nameserver)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# For NXDOMAIN or referral responses, continue with authority section
|
|
146
152
|
break if reply.answer.any?
|
|
147
153
|
|
|
148
154
|
raise "No authority found (#{name})" if reply.authority.none?
|
|
@@ -151,7 +157,16 @@ module RecordStore
|
|
|
151
157
|
end
|
|
152
158
|
|
|
153
159
|
# candidate DNS name is returned instead when NXDomain or other error
|
|
154
|
-
|
|
160
|
+
# In this case, query the parent domain's NS records
|
|
161
|
+
if authority.is_a?(Array) && authority.first.is_a?(Resolv::DNS::Name) &&
|
|
162
|
+
unrooted_name.casecmp?(authority.first.to_s)
|
|
163
|
+
# Extract parent domain from unrooted_name (e.g., "sub.example.com" -> "example.com")
|
|
164
|
+
parts = unrooted_name.split('.')
|
|
165
|
+
return if parts.length <= 1 # No parent domain available (TLD)
|
|
166
|
+
|
|
167
|
+
parent_domain = parts[1..-1].join('.') + '.'
|
|
168
|
+
return fetch_ns_records_for_domain(parent_domain, nameserver)
|
|
169
|
+
end
|
|
155
170
|
|
|
156
171
|
authority
|
|
157
172
|
end
|
|
@@ -164,6 +179,21 @@ module RecordStore
|
|
|
164
179
|
end
|
|
165
180
|
end
|
|
166
181
|
|
|
182
|
+
def fetch_ns_records(nameserver)
|
|
183
|
+
fetch_ns_records_for_domain(name, nameserver)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def fetch_ns_records_for_domain(domain, nameserver)
|
|
187
|
+
Resolv::DNS.open(nameserver: nameserver) do |resolv|
|
|
188
|
+
resources = resolv.getresources(domain, Resolv::DNS::Resource::IN::NS)
|
|
189
|
+
return nil if resources.empty?
|
|
190
|
+
|
|
191
|
+
resources.map.with_index do |ns, index|
|
|
192
|
+
Record::NS.new(ttl: ns.ttl, fqdn: domain, nsdname: ns.name.to_s, record_id: index)
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
167
197
|
def resolve_authority(authority)
|
|
168
198
|
nameservers = authority.map { |a| a.last.name.to_s }
|
|
169
199
|
|
data/record_store.gemspec
CHANGED
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
|
|
|
28
28
|
|
|
29
29
|
spec.add_runtime_dependency 'activemodel', '>= 4.2'
|
|
30
30
|
spec.add_runtime_dependency 'activesupport', '>= 4.2'
|
|
31
|
+
spec.add_runtime_dependency 'csv'
|
|
31
32
|
spec.add_runtime_dependency 'ejson'
|
|
32
33
|
spec.add_runtime_dependency 'thor', '>= 1.4.0'
|
|
33
34
|
|
|
@@ -46,7 +47,7 @@ Gem::Specification.new do |spec|
|
|
|
46
47
|
spec.add_development_dependency 'mocha'
|
|
47
48
|
spec.add_development_dependency 'pry'
|
|
48
49
|
spec.add_development_dependency 'rake'
|
|
49
|
-
spec.add_development_dependency 'rubocop', '~> 1.
|
|
50
|
+
spec.add_development_dependency 'rubocop', '~> 1.82.1'
|
|
50
51
|
spec.add_development_dependency 'rubocop-shopify', '~> 2.15.1'
|
|
51
52
|
spec.add_development_dependency 'vcr'
|
|
52
53
|
spec.add_development_dependency 'webmock'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: record_store
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 8.0.
|
|
4
|
+
version: 8.0.11
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Willem van Bergen
|
|
@@ -38,6 +38,20 @@ dependencies:
|
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '4.2'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: csv
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
56
|
name: ejson
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -298,14 +312,14 @@ dependencies:
|
|
|
298
312
|
requirements:
|
|
299
313
|
- - "~>"
|
|
300
314
|
- !ruby/object:Gem::Version
|
|
301
|
-
version: 1.
|
|
315
|
+
version: 1.82.1
|
|
302
316
|
type: :development
|
|
303
317
|
prerelease: false
|
|
304
318
|
version_requirements: !ruby/object:Gem::Requirement
|
|
305
319
|
requirements:
|
|
306
320
|
- - "~>"
|
|
307
321
|
- !ruby/object:Gem::Version
|
|
308
|
-
version: 1.
|
|
322
|
+
version: 1.82.1
|
|
309
323
|
- !ruby/object:Gem::Dependency
|
|
310
324
|
name: rubocop-shopify
|
|
311
325
|
requirement: !ruby/object:Gem::Requirement
|