gitlab-net-dns 0.10.0 → 0.11.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/.gitlab-ci.yml +1 -1
- data/gitlab-net-dns.gemspec +2 -1
- data/lib/net/dns/rr/types.rb +10 -7
- data/lib/net/dns/rr.rb +8 -1
- data/lib/net/dns/version.rb +1 -1
- data/test/unit/rr_test.rb +33 -0
- metadata +18 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6894aeca8ca5a877a50f79dd5960888cf153cbf33ae1f367681185ab72eeed25
|
4
|
+
data.tar.gz: 6db68fc71b24701ebe82fb84e13f2a5a131a6aecba929af968b528d2e40650dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d3aae8c3e2868244e5cd5f4da8a89191901f440ca0a999280ee8b1f7b083f57aa10fc1aabe8fe38b13de99579bcfec4805a4ed4eb2c6c35c61d9003c5ea4076
|
7
|
+
data.tar.gz: e4d8e5f5dca3b4b9c704d0c4ff8c695b86f4620b48ccfa9ca505cbc0a5ac784517f045b6257ac2e76d15f3e4ad277385814e56905167ec044bed77f543cf645e
|
data/.gitlab-ci.yml
CHANGED
data/gitlab-net-dns.gemspec
CHANGED
@@ -11,12 +11,13 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.description = "Net::DNS is a pure Ruby DNS library, with a clean OO interface and an extensible API."
|
12
12
|
s.licenses = ["Ruby"]
|
13
13
|
|
14
|
-
s.required_ruby_version = ">=
|
14
|
+
s.required_ruby_version = ">= 3.0"
|
15
15
|
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.files = `git ls-files`.split("\n")
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.extra_rdoc_files = %w[LICENSE.txt]
|
20
|
+
s.add_dependency "logger"
|
20
21
|
|
21
22
|
s.add_development_dependency "mocha"
|
22
23
|
s.add_development_dependency "rake"
|
data/lib/net/dns/rr/types.rb
CHANGED
@@ -84,6 +84,9 @@ module Net # :nodoc:
|
|
84
84
|
'CAA' => 257, # RFC 6844
|
85
85
|
}.freeze
|
86
86
|
|
87
|
+
# Pre-initialize the inverted hash to avoid runtime inversion
|
88
|
+
TYPES_BY_NUMBER = TYPES.invert.freeze
|
89
|
+
|
87
90
|
# The default value when type is nil in Resource Records
|
88
91
|
@@default = TYPES["A"]
|
89
92
|
|
@@ -107,7 +110,7 @@ module Net # :nodoc:
|
|
107
110
|
when String
|
108
111
|
TYPES.key?(type)
|
109
112
|
when Integer
|
110
|
-
|
113
|
+
TYPES_BY_NUMBER.key?(type)
|
111
114
|
else
|
112
115
|
raise ArgumentError, "Wrong type class: #{type.class}"
|
113
116
|
end
|
@@ -118,8 +121,8 @@ module Net # :nodoc:
|
|
118
121
|
def self.to_str(type)
|
119
122
|
case type
|
120
123
|
when Integer
|
121
|
-
if
|
122
|
-
|
124
|
+
if TYPES_BY_NUMBER.key? type
|
125
|
+
TYPES_BY_NUMBER[type]
|
123
126
|
else
|
124
127
|
raise ArgumentError, "Unknown type number #{type}"
|
125
128
|
end
|
@@ -148,7 +151,7 @@ module Net # :nodoc:
|
|
148
151
|
new_from_num(type)
|
149
152
|
when nil
|
150
153
|
# default type, control with Types.default=
|
151
|
-
@str =
|
154
|
+
@str = TYPES_BY_NUMBER[@@default]
|
152
155
|
@num = @@default
|
153
156
|
else
|
154
157
|
raise ArgumentError, "Wrong type class: #{type.class}"
|
@@ -197,11 +200,11 @@ module Net # :nodoc:
|
|
197
200
|
|
198
201
|
# Contructor for numeric data type.
|
199
202
|
def new_from_num(type)
|
200
|
-
if
|
203
|
+
if TYPES_BY_NUMBER.key? type
|
201
204
|
@num = type
|
202
|
-
@str =
|
205
|
+
@str = TYPES_BY_NUMBER[type]
|
203
206
|
else
|
204
|
-
raise ArgumentError, "
|
207
|
+
raise ArgumentError, "Unknown type number #{type}"
|
205
208
|
end
|
206
209
|
end
|
207
210
|
end
|
data/lib/net/dns/rr.rb
CHANGED
@@ -298,7 +298,14 @@ module Net
|
|
298
298
|
if self.class == Net::DNS::RR
|
299
299
|
temp = dn_expand(data, offset)[1]
|
300
300
|
type = Net::DNS::RR::Types.new data.unpack("@#{temp} n")[0]
|
301
|
-
|
301
|
+
rr_class = Net::DNS::RR.const_get(type.to_s) rescue nil
|
302
|
+
|
303
|
+
if rr_class && rr_class.respond_to?(:parse_packet)
|
304
|
+
rr_class.parse_packet(data, offset)
|
305
|
+
else
|
306
|
+
# This shouldn't happen because Net::DNS::RR::Types.new already raises an error on invalid types
|
307
|
+
raise "Unknown or unsupported RR type: #{type}"
|
308
|
+
end
|
302
309
|
else
|
303
310
|
@name, offset = dn_expand(data, offset)
|
304
311
|
rrtype, cls, @ttl, @rdlength = data.unpack("@#{offset} n2 N n")
|
data/lib/net/dns/version.rb
CHANGED
data/test/unit/rr_test.rb
CHANGED
@@ -124,4 +124,37 @@ class RRTest < Minitest::Test
|
|
124
124
|
Net::DNS::RR.new("google.com. 10800 IM A")
|
125
125
|
end
|
126
126
|
end
|
127
|
+
|
128
|
+
def test_bad_type
|
129
|
+
assert_raises(ArgumentError) do
|
130
|
+
Net::DNS::RR.new(name: @rr_name,
|
131
|
+
ttl: @ttl,
|
132
|
+
cls: @cls,
|
133
|
+
type: "BOGUS",
|
134
|
+
address: @rdata)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_parse_packet_with_unsupported_type
|
139
|
+
# Create a mock binary packet with an unsupported RR type
|
140
|
+
|
141
|
+
# Start with a normal A record to get valid binary data
|
142
|
+
record = Net::DNS::RR.new("example.com. 3600 IN A 192.168.1.1")
|
143
|
+
binary_data = record.data
|
144
|
+
|
145
|
+
# Find where the name ends by looking for a null byte
|
146
|
+
name_end = binary_data.index("\x00") + 1
|
147
|
+
|
148
|
+
# Replace the type value (2 bytes) with 0xFACE (an undefined type)
|
149
|
+
modified_data = binary_data.dup
|
150
|
+
modified_data[name_end, 2] = [0xFACE].pack("n")
|
151
|
+
|
152
|
+
# The parse_packet should raise an error for unknown types
|
153
|
+
error = assert_raises(ArgumentError) do
|
154
|
+
Net::DNS::RR.parse(modified_data)
|
155
|
+
end
|
156
|
+
|
157
|
+
# Verify the error message mentions the unknown type
|
158
|
+
assert_match(/Unknown type number/, error.message)
|
159
|
+
end
|
127
160
|
end
|
metadata
CHANGED
@@ -1,16 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab-net-dns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marco Ceresa
|
8
8
|
- Simone Carletti
|
9
|
-
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2025-04-28 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: logger
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
14
27
|
- !ruby/object:Gem::Dependency
|
15
28
|
name: mocha
|
16
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,7 +142,6 @@ homepage: https://gitlab.com/gitlab-org/gitlab-net-dns
|
|
129
142
|
licenses:
|
130
143
|
- Ruby
|
131
144
|
metadata: {}
|
132
|
-
post_install_message:
|
133
145
|
rdoc_options: []
|
134
146
|
require_paths:
|
135
147
|
- lib
|
@@ -137,15 +149,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
149
|
requirements:
|
138
150
|
- - ">="
|
139
151
|
- !ruby/object:Gem::Version
|
140
|
-
version: '
|
152
|
+
version: '3.0'
|
141
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
154
|
requirements:
|
143
155
|
- - ">="
|
144
156
|
- !ruby/object:Gem::Version
|
145
157
|
version: '0'
|
146
158
|
requirements: []
|
147
|
-
rubygems_version: 3.
|
148
|
-
signing_key:
|
159
|
+
rubygems_version: 3.6.2
|
149
160
|
specification_version: 4
|
150
161
|
summary: Pure Ruby DNS library.
|
151
162
|
test_files:
|