dnsruby 1.60.0 → 1.60.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
- data/RELEASE_NOTES.md +14 -0
- data/lib/dnsruby/bit_mapping.rb +1 -1
- data/lib/dnsruby/code_mapper.rb +3 -3
- data/lib/dnsruby/code_mappers.rb +4 -2
- data/lib/dnsruby/config.rb +1 -1
- data/lib/dnsruby/dnssec.rb +1 -1
- data/lib/dnsruby/packet_sender.rb +8 -5
- data/lib/dnsruby/resolver.rb +6 -6
- data/lib/dnsruby/resource/APL.rb +146 -0
- data/lib/dnsruby/resource/CAA.rb +70 -0
- data/lib/dnsruby/resource/IN.rb +4 -1
- data/lib/dnsruby/resource/MX.rb +3 -0
- data/lib/dnsruby/resource/OPT.rb +1 -1
- data/lib/dnsruby/resource/RRSIG.rb +1 -1
- data/lib/dnsruby/resource/TLSA.rb +149 -0
- data/lib/dnsruby/resource/domain_name.rb +1 -1
- data/lib/dnsruby/resource/generic.rb +1 -0
- data/lib/dnsruby/version.rb +1 -1
- data/lib/dnsruby/zone_transfer.rb +5 -2
- data/test/run-tests-individually +347 -0
- data/test/spec_helper.rb +3 -3
- data/test/tc_caa.rb +49 -0
- data/test/tc_cache.rb +6 -16
- data/test/tc_dlv.rb +3 -2
- data/test/tc_dns.rb +3 -1
- data/test/tc_ds.rb +4 -1
- data/test/tc_escapedchars.rb +3 -1
- data/test/tc_gpos.rb +2 -2
- data/test/tc_header.rb +3 -1
- data/test/tc_hip.rb +3 -1
- data/test/tc_hs.rb +0 -2
- data/test/tc_ipseckey.rb +3 -1
- data/test/tc_message.rb +0 -16
- data/test/tc_name.rb +3 -1
- data/test/tc_naptr.rb +3 -1
- data/test/tc_nsec.rb +3 -3
- data/test/tc_nsec3.rb +3 -1
- data/test/tc_nsec3param.rb +3 -1
- data/test/tc_nxt.rb +2 -2
- data/test/tc_packet.rb +3 -2
- data/test/tc_packet_unique_push.rb +3 -1
- data/test/tc_ptrin.rb +2 -1
- data/test/tc_question.rb +3 -1
- data/test/tc_res_env.rb +3 -1
- data/test/tc_res_opt.rb +3 -1
- data/test/tc_resolv.rb +1 -2
- data/test/tc_resolver.rb +18 -19
- data/test/tc_rr-opt.rb +3 -2
- data/test/tc_rr-txt.rb +3 -1
- data/test/tc_rr-unknown.rb +3 -1
- data/test/tc_rr.rb +15 -1
- data/test/tc_single_resolver.rb +4 -1
- data/test/tc_soak.rb +2 -1
- data/test/tc_soak_base.rb +2 -0
- data/test/tc_sshfp.rb +3 -1
- data/test/tc_tlsa.rb +191 -0
- data/test/tc_tsig.rb +3 -1
- data/test/tc_update.rb +6 -3
- data/test/tc_validator.rb +3 -2
- data/test/tc_zone_reader.rb +4 -2
- data/test/ts_offline.rb +1 -0
- data/test/ts_online.rb +6 -7
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfb5e0f9d0b657bba3a0ad8d8edde456e253d638
|
4
|
+
data.tar.gz: 4c80209c7c2e6823e1958e9c79c0665805c0f9a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f53ebb527626d922813c53b4c8cd8daa73ff22721a812ea55963c28201b44da43c7be779316fb9e3041a7183e0c7c3ef99faf73a69fb9fb9845b70ce428f31f
|
7
|
+
data.tar.gz: b93907dc484ddd07a0fcd2b8eaeebbc92d261c23bd2046ce7c6159c75a3fe350eae485977b6afcac44bcdf999501d2eb4255f92118f1e8f0e682193d74db9dfa
|
data/RELEASE_NOTES.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# Release Notes
|
2
2
|
|
3
|
+
## v1.60.1
|
4
|
+
|
5
|
+
* DNSSEC validation switched OFF by default (but can still be switched on)
|
6
|
+
* Add APL RR support (thanks Manabu Sonoda)
|
7
|
+
* Various test fixes (thanks Keith Bennett)
|
8
|
+
* 'include' issues fixed (thanks Keith Bennett!)
|
9
|
+
* Fixnum replacement (thanks Keith Bennett)
|
10
|
+
* Zone transfer fixes (thanks Manabu Sonoda)
|
11
|
+
* Name decoding fix
|
12
|
+
* MX record passing error now raised
|
13
|
+
* CAA RR support (thanks Richard Luther)
|
14
|
+
* TLSA RR support (thanks Manabu Sonoda)
|
15
|
+
|
16
|
+
|
3
17
|
## v1.60.0
|
4
18
|
|
5
19
|
* TCP multi-packet support fixed
|
data/lib/dnsruby/bit_mapping.rb
CHANGED
@@ -120,7 +120,7 @@ module Dnsruby
|
|
120
120
|
def assert_non_negative(number)
|
121
121
|
unless number.is_a?(Integer) && number >= 0
|
122
122
|
raise ArgumentError.new(
|
123
|
-
"Parameter must be a nonnegative Integer
|
123
|
+
"Parameter must be a nonnegative Integer " +
|
124
124
|
"but is #{number.inspect} (a #{number.class})")
|
125
125
|
end
|
126
126
|
end
|
data/lib/dnsruby/code_mapper.rb
CHANGED
@@ -103,7 +103,7 @@ module Dnsruby
|
|
103
103
|
else
|
104
104
|
unknown_string(arg)
|
105
105
|
end
|
106
|
-
elsif
|
106
|
+
elsif arg.kind_of?(Integer)
|
107
107
|
if (array.values[arg] != nil)
|
108
108
|
@code = arg
|
109
109
|
@string = array.values[@code]
|
@@ -146,7 +146,7 @@ module Dnsruby
|
|
146
146
|
end
|
147
147
|
|
148
148
|
def CodeMapper.to_code(arg)
|
149
|
-
if
|
149
|
+
if arg.kind_of?(Integer)
|
150
150
|
return arg
|
151
151
|
else
|
152
152
|
return @@arrays[self].stringsdown[arg.downcase]
|
@@ -154,7 +154,7 @@ module Dnsruby
|
|
154
154
|
end
|
155
155
|
|
156
156
|
def <=>(other)
|
157
|
-
if
|
157
|
+
if other.is_a?(Integer)
|
158
158
|
self.code <=> other
|
159
159
|
else
|
160
160
|
self.code <=> other.code
|
data/lib/dnsruby/code_mappers.rb
CHANGED
@@ -150,7 +150,7 @@ module Dnsruby
|
|
150
150
|
CERT = 37 # RFC 2538
|
151
151
|
DNAME = 39 # RFC 2672
|
152
152
|
OPT = 41 # RFC 2671
|
153
|
-
|
153
|
+
APL = 42 # RFC 3123
|
154
154
|
DS = 43 # RFC 4034
|
155
155
|
SSHFP = 44 # RFC 4255
|
156
156
|
IPSECKEY = 45 # RFC 4025
|
@@ -160,6 +160,7 @@ module Dnsruby
|
|
160
160
|
DHCID = 49 # RFC 4701
|
161
161
|
NSEC3 = 50 # RFC still pending at time of writing
|
162
162
|
NSEC3PARAM= 51 # RFC still pending at time of writing
|
163
|
+
TLSA = 52 # RFC 6698
|
163
164
|
HIP = 55 # RFC 5205
|
164
165
|
SPF = 99 # RFC 4408
|
165
166
|
UINFO = 100 # non-standard
|
@@ -173,6 +174,7 @@ module Dnsruby
|
|
173
174
|
MAILB = 253 # RFC 1035 (MB, MG, MR)
|
174
175
|
MAILA = 254 # RFC 1035 (obsolete - see MX)
|
175
176
|
ANY = 255 # RFC 1035
|
177
|
+
CAA = 257 # RFC 6844
|
176
178
|
DLV = 32769 # RFC 4431 (informational)
|
177
179
|
update()
|
178
180
|
|
@@ -292,4 +294,4 @@ module Dnsruby
|
|
292
294
|
add_pair("SHA-1", 1)
|
293
295
|
end
|
294
296
|
|
295
|
-
end
|
297
|
+
end
|
data/lib/dnsruby/config.rb
CHANGED
data/lib/dnsruby/dnssec.rb
CHANGED
@@ -261,7 +261,7 @@ module Dnsruby
|
|
261
261
|
def self.try_validation(last_level, last_error, last_error_level, proc, msg, query) # :nodoc:
|
262
262
|
begin
|
263
263
|
proc.call(msg, query)
|
264
|
-
last_level = Message::SecurityLevel.new([msg.security_level.code, last_level].max)
|
264
|
+
last_level = Message::SecurityLevel.new([msg.security_level.code, last_level.code].max)
|
265
265
|
rescue VerifyError => e
|
266
266
|
if (last_error_level < last_level)
|
267
267
|
last_error = e.to_s
|
@@ -16,9 +16,12 @@
|
|
16
16
|
require 'dnsruby/select_thread'
|
17
17
|
require 'ipaddr'
|
18
18
|
# require 'dnsruby/iana_ports'
|
19
|
-
include Socket::Constants
|
20
19
|
module Dnsruby
|
20
|
+
|
21
21
|
class PacketSender # :nodoc: all
|
22
|
+
|
23
|
+
include Socket::Constants
|
24
|
+
|
22
25
|
@@authoritative_cache = Cache.new
|
23
26
|
@@recursive_cache = Cache.new
|
24
27
|
|
@@ -402,7 +405,7 @@ module Dnsruby
|
|
402
405
|
@tcp_pipeline_local_port = src_port
|
403
406
|
src_address = @ipv6 ? @src_address6 : @src_address
|
404
407
|
begin
|
405
|
-
@pipeline_socket = Socket.new(AF_INET, SOCK_STREAM, 0)
|
408
|
+
@pipeline_socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
|
406
409
|
@pipeline_socket.bind(Addrinfo.tcp(src_address, src_port))
|
407
410
|
@pipeline_socket.connect(sockaddr)
|
408
411
|
Dnsruby.log.debug("Creating socket #{src_address}:#{src_port}")
|
@@ -541,7 +544,7 @@ module Dnsruby
|
|
541
544
|
end
|
542
545
|
|
543
546
|
# The source port to send queries from
|
544
|
-
# Returns either a single
|
547
|
+
# Returns either a single Integer or an Array
|
545
548
|
# e.g. "0", or "[60001, 60002, 60007]"
|
546
549
|
#
|
547
550
|
# Defaults to 0 - random port
|
@@ -552,7 +555,7 @@ module Dnsruby
|
|
552
555
|
return @src_port
|
553
556
|
end
|
554
557
|
|
555
|
-
# Can be a single
|
558
|
+
# Can be a single Integer or a Range or an Array
|
556
559
|
# If an invalid port is selected (one reserved by
|
557
560
|
# IANA), then an ArgumentError will be raised.
|
558
561
|
#
|
@@ -565,7 +568,7 @@ module Dnsruby
|
|
565
568
|
add_src_port(p)
|
566
569
|
end
|
567
570
|
|
568
|
-
# Can be a single
|
571
|
+
# Can be a single Integer or a Range or an Array
|
569
572
|
# If an invalid port is selected (one reserved by
|
570
573
|
# IANA), then an ArgumentError will be raised.
|
571
574
|
# "0" means "any valid port" - this is only a viable
|
data/lib/dnsruby/resolver.rb
CHANGED
@@ -77,7 +77,7 @@ module Dnsruby
|
|
77
77
|
DefaultRetryDelay = 5
|
78
78
|
DefaultPipeLiningMaxQueries = 5
|
79
79
|
DefaultPort = 53
|
80
|
-
DefaultDnssec =
|
80
|
+
DefaultDnssec = false
|
81
81
|
AbsoluteMinDnssecUdpSize = 1220
|
82
82
|
MinDnssecUdpSize = 4096
|
83
83
|
DefaultUDPSize = MinDnssecUdpSize
|
@@ -603,7 +603,7 @@ module Dnsruby
|
|
603
603
|
end
|
604
604
|
|
605
605
|
# The source port to send queries from
|
606
|
-
# Returns either a single
|
606
|
+
# Returns either a single Integer or an Array
|
607
607
|
# e.g. '0', or '[60001, 60002, 60007]'
|
608
608
|
#
|
609
609
|
# Defaults to 0 - random port
|
@@ -611,7 +611,7 @@ module Dnsruby
|
|
611
611
|
@src_port.length == 1 ? @src_port[0] : @src_port
|
612
612
|
end
|
613
613
|
|
614
|
-
# Can be a single
|
614
|
+
# Can be a single Integer or a Range or an Array
|
615
615
|
# If an invalid port is selected (one reserved by
|
616
616
|
# IANA), then an ArgumentError will be raised.
|
617
617
|
#
|
@@ -626,7 +626,7 @@ module Dnsruby
|
|
626
626
|
end
|
627
627
|
end
|
628
628
|
|
629
|
-
# Can be a single
|
629
|
+
# Can be a single Integer or a Range or an Array
|
630
630
|
# If an invalid port is selected (one reserved by
|
631
631
|
# IANA), then an ArgumentError will be raised.
|
632
632
|
# "0" means "any valid port" - this is only a viable
|
@@ -653,7 +653,7 @@ module Dnsruby
|
|
653
653
|
end
|
654
654
|
|
655
655
|
def Resolver.check_port(p, src_port=[])
|
656
|
-
|
656
|
+
unless p.is_a?(Integer)
|
657
657
|
tmp_src_ports = Array.new(src_port)
|
658
658
|
p.each do |x|
|
659
659
|
unless Resolver.check_port(x, tmp_src_ports)
|
@@ -677,7 +677,7 @@ module Dnsruby
|
|
677
677
|
|
678
678
|
def Resolver.get_ports_from(p)
|
679
679
|
a = []
|
680
|
-
if p.
|
680
|
+
if p.is_a?(Integer)
|
681
681
|
a = [p]
|
682
682
|
else
|
683
683
|
p.each do |x|
|
@@ -0,0 +1,146 @@
|
|
1
|
+
module Dnsruby
|
2
|
+
class Prefix
|
3
|
+
Regex = %r{\A([!])?([12]):(.*)/(\d+)\z}
|
4
|
+
attr_reader :af, :prefix_length, :negative, :address_lenght, :address
|
5
|
+
class << self
|
6
|
+
def create(prefix) #:nodoc:
|
7
|
+
unless md = Regex.match(prefix)
|
8
|
+
raise ArgumentError.new('APL format error')
|
9
|
+
end
|
10
|
+
negative=md[1]
|
11
|
+
af = md[2].to_i
|
12
|
+
prefix_length = md[4].to_i
|
13
|
+
case af
|
14
|
+
when 1
|
15
|
+
if prefix_length > 32 ||
|
16
|
+
prefix_length < 0
|
17
|
+
raise ArgumentError.new('APL IPv4 prefix format error')
|
18
|
+
end
|
19
|
+
address = IPv4.create(md[3])
|
20
|
+
when 2
|
21
|
+
if prefix_length > 128 ||
|
22
|
+
prefix_length < 0
|
23
|
+
raise ArgumentError.new('APL IPv6 prefix format error')
|
24
|
+
end
|
25
|
+
address = IPv6.create(md[3])
|
26
|
+
else
|
27
|
+
raise ArgumentError.new('APL address family error')
|
28
|
+
end
|
29
|
+
address_length = (prefix_length / 8.0).ceil
|
30
|
+
|
31
|
+
Prefix.new(af, prefix_length, negative, address_length, address)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
def initialize(af, prefix_length, negative, address_length, address)
|
35
|
+
@af = af
|
36
|
+
@prefix_length = prefix_length
|
37
|
+
@negative = negative
|
38
|
+
@address_length = address_length
|
39
|
+
@address = address
|
40
|
+
@flag = address_length
|
41
|
+
@flag |= 0x80 if @negative
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_s
|
45
|
+
"#{@negative}#{@af}:#{@address}/#{@prefix_length}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def put_msg(msg) #:nodoc: all
|
49
|
+
msg.put_pack('nCC',@af,@prefix_length,@flag)
|
50
|
+
msg.put_bytes(@address.address[0,@address_length])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
class Prefixes
|
54
|
+
attr_accessor :prefixes
|
55
|
+
class << self
|
56
|
+
def create(arg)
|
57
|
+
case arg
|
58
|
+
when Prefixes
|
59
|
+
return arg
|
60
|
+
when String
|
61
|
+
prefixes = arg.split(/\s/).map { |prefix| Prefix.create(prefix) }
|
62
|
+
when Array
|
63
|
+
prefixes = arg.map { |prefix| Prefix.create(prefix) }
|
64
|
+
else
|
65
|
+
raise ArgumentError.new("APL format erro #{arg}")
|
66
|
+
end
|
67
|
+
Prefixes.new(prefixes)
|
68
|
+
end
|
69
|
+
def create_from_message(msg)
|
70
|
+
prefixes = []
|
71
|
+
while(msg.has_remaining?) do
|
72
|
+
negative = nil
|
73
|
+
af,prefix_length,flag = msg.get_unpack('nCC')
|
74
|
+
negative = '!' if 0x80 & flag == 0x80
|
75
|
+
address_length = flag & 0x7f
|
76
|
+
|
77
|
+
case(af)
|
78
|
+
when 1
|
79
|
+
addr = msg.get_bytes(address_length) + "\0" * (4 - address_length)
|
80
|
+
address = IPv4.new(addr)
|
81
|
+
when 2
|
82
|
+
addr = msg.get_bytes(address_length) + "\0" * (16 - address_length)
|
83
|
+
address = IPv6.new(addr)
|
84
|
+
else
|
85
|
+
raise ArgumentError.new("APL format error")
|
86
|
+
end
|
87
|
+
prefixes.push(Prefix.new(af, prefix_length, negative, address_length, address))
|
88
|
+
end
|
89
|
+
|
90
|
+
Prefixes.new(prefixes)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
def initialize(prefixes)
|
94
|
+
@prefixes = prefixes
|
95
|
+
end
|
96
|
+
|
97
|
+
def to_s
|
98
|
+
@prefixes.map(&:to_s).join(' ')
|
99
|
+
end
|
100
|
+
|
101
|
+
def encode_rdata(msg, _canonical = false) #:nodoc: all
|
102
|
+
@prefixes.each do |prefix|
|
103
|
+
prefix.put_msg(msg)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
class RR
|
108
|
+
module IN
|
109
|
+
# Class for DNS Address (A) resource records.
|
110
|
+
#
|
111
|
+
# RFC 1035 Section 3.4.1
|
112
|
+
class APL < RR
|
113
|
+
ClassHash[[TypeValue = Types::APL, ClassValue = ClassValue]] = self #:nodoc: all
|
114
|
+
|
115
|
+
# The RR's (Resolv::IPv4) address field
|
116
|
+
attr_accessor :prefixes
|
117
|
+
|
118
|
+
def from_data(data) #:nodoc: all
|
119
|
+
@prefixes = Prefixes.create(data)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Create the RR from a hash
|
123
|
+
def from_hash(hash)
|
124
|
+
@prefixes = Prefixes.create(hash[:prefixes])
|
125
|
+
end
|
126
|
+
|
127
|
+
# Create the RR from a standard string
|
128
|
+
def from_string(input)
|
129
|
+
@prefixes = Prefixes.create(input)
|
130
|
+
end
|
131
|
+
|
132
|
+
def rdata_to_string
|
133
|
+
@prefixes.to_s
|
134
|
+
end
|
135
|
+
|
136
|
+
def encode_rdata(msg, canonical = false) #:nodoc: all
|
137
|
+
@prefixes.encode_rdata(msg,canonical)
|
138
|
+
end
|
139
|
+
|
140
|
+
def self.decode_rdata(msg) #:nodoc: all
|
141
|
+
new(Prefixes.create_from_message(msg))
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright 2007 Nominet UK
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
module Dnsruby
|
17
|
+
class RR
|
18
|
+
# Class for CAA resource records.
|
19
|
+
# RFC 6844
|
20
|
+
class CAA < RR
|
21
|
+
ClassValue = nil #:nodoc: all
|
22
|
+
TypeValue= Types::CAA #:nodoc: all
|
23
|
+
|
24
|
+
# The property tag for the record (issue|issuewild|iodef)
|
25
|
+
attr_accessor :property_tag
|
26
|
+
# The value for the property_tag
|
27
|
+
attr_accessor :property_value
|
28
|
+
# The value for the flag
|
29
|
+
attr_accessor :flag
|
30
|
+
|
31
|
+
def from_hash(hash) #:nodoc: all
|
32
|
+
@property_tag = hash[:property_tag]
|
33
|
+
@property_value = hash[:property_value]
|
34
|
+
@flag = hash[:flag]
|
35
|
+
end
|
36
|
+
|
37
|
+
def from_data(data) #:nodoc: all
|
38
|
+
@flag, @property_tag, @property_value = data
|
39
|
+
end
|
40
|
+
|
41
|
+
def flag
|
42
|
+
@flag.to_i
|
43
|
+
end
|
44
|
+
|
45
|
+
def from_string(input) #:nodoc: all
|
46
|
+
matches = (/(\d+) (issuewild|issue|iodef) "(.+)"$/).match(input)
|
47
|
+
@flag = matches[1]
|
48
|
+
@property_tag = matches[2]
|
49
|
+
@property_value = matches[3]
|
50
|
+
end
|
51
|
+
|
52
|
+
def rdata_to_string #:nodoc: all
|
53
|
+
"#{flag} #{@property_tag} \"#{@property_value}\""
|
54
|
+
end
|
55
|
+
|
56
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
57
|
+
msg.put_pack('n', flag)
|
58
|
+
msg.put_string(@property_tag)
|
59
|
+
msg.put_string(@property_value)
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.decode_rdata(msg) #:nodoc: all
|
63
|
+
flag, = msg.get_unpack('n')
|
64
|
+
property_tag = msg.get_string
|
65
|
+
property_value = msg.get_string
|
66
|
+
return self.new("#{flag} #{property_tag} \"#{property_value}\"")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/dnsruby/resource/IN.rb
CHANGED
@@ -54,7 +54,8 @@ module Dnsruby
|
|
54
54
|
Types::HIP => HIP,
|
55
55
|
Types::DHCID => DHCID,
|
56
56
|
Types::GPOS => GPOS,
|
57
|
-
Types::NXT => NXT
|
57
|
+
Types::NXT => NXT,
|
58
|
+
Types::CAA => CAA,
|
58
59
|
} #:nodoc: all
|
59
60
|
|
60
61
|
# module IN contains ARPA Internet specific RRs
|
@@ -103,3 +104,5 @@ require 'dnsruby/resource/AAAA'
|
|
103
104
|
require 'dnsruby/resource/AFSDB'
|
104
105
|
require 'dnsruby/resource/PX'
|
105
106
|
require 'dnsruby/resource/SRV'
|
107
|
+
require 'dnsruby/resource/APL'
|
108
|
+
require 'dnsruby/resource/TLSA'
|