dnsruby 1.55 → 1.56.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/README.md +96 -0
- data/Rakefile +30 -29
- data/demo/axfr.rb +93 -93
- data/demo/check_soa.rb +99 -99
- data/demo/check_zone.rb +59 -59
- data/demo/digdlv.rb +43 -43
- data/demo/digroot.rb +34 -34
- data/demo/example_recurse.rb +14 -14
- data/demo/mresolv.rb +30 -30
- data/demo/mx.rb +31 -31
- data/demo/rubydig.rb +37 -37
- data/demo/to_resolve.txt +3088 -3088
- data/demo/trace_dns.rb +46 -46
- data/lib/dnsruby.rb +161 -526
- data/lib/dnsruby/DNS.rb +305 -0
- data/lib/{Dnsruby/Cache.rb → dnsruby/cache.rb} +152 -152
- data/lib/{Dnsruby → dnsruby}/code_mapper.rb +48 -52
- data/lib/dnsruby/code_mappers.rb +295 -0
- data/lib/{Dnsruby/Config.rb → dnsruby/config.rb} +454 -454
- data/lib/{Dnsruby → dnsruby}/dnssec.rb +91 -91
- data/lib/{Dnsruby/Hosts.rb → dnsruby/hosts.rb} +125 -125
- data/lib/{Dnsruby → dnsruby}/ipv4.rb +26 -26
- data/lib/{Dnsruby → dnsruby}/ipv6.rb +42 -42
- data/lib/{Dnsruby → dnsruby}/key_cache.rb +29 -29
- data/lib/dnsruby/message/decoder.rb +164 -0
- data/lib/dnsruby/message/encoder.rb +75 -0
- data/lib/dnsruby/message/header.rb +249 -0
- data/lib/dnsruby/message/message.rb +629 -0
- data/lib/dnsruby/message/question.rb +86 -0
- data/lib/dnsruby/message/section.rb +96 -0
- data/lib/{Dnsruby → dnsruby}/name.rb +141 -141
- data/lib/dnsruby/packet_sender.rb +661 -0
- data/lib/{Dnsruby/Recursor.rb → dnsruby/recursor.rb} +235 -233
- data/lib/dnsruby/resolv.rb +113 -0
- data/lib/dnsruby/resolver.rb +1192 -0
- data/lib/dnsruby/resource/A.rb +56 -0
- data/lib/dnsruby/resource/AAAA.rb +54 -0
- data/lib/{Dnsruby → dnsruby}/resource/AFSDB.rb +68 -68
- data/lib/{Dnsruby → dnsruby}/resource/CERT.rb +105 -105
- data/lib/{Dnsruby → dnsruby}/resource/DHCID.rb +54 -54
- data/lib/dnsruby/resource/DLV.rb +27 -0
- data/lib/{Dnsruby → dnsruby}/resource/DNSKEY.rb +372 -372
- data/lib/{Dnsruby → dnsruby}/resource/DS.rb +255 -255
- data/lib/{Dnsruby → dnsruby}/resource/HINFO.rb +71 -71
- data/lib/{Dnsruby → dnsruby}/resource/HIP.rb +29 -29
- data/lib/{Dnsruby → dnsruby}/resource/IN.rb +30 -30
- data/lib/{Dnsruby → dnsruby}/resource/IPSECKEY.rb +31 -31
- data/lib/{Dnsruby → dnsruby}/resource/ISDN.rb +62 -62
- data/lib/{Dnsruby → dnsruby}/resource/KX.rb +65 -65
- data/lib/{Dnsruby → dnsruby}/resource/LOC.rb +263 -263
- data/lib/{Dnsruby → dnsruby}/resource/MINFO.rb +69 -69
- data/lib/{Dnsruby → dnsruby}/resource/MX.rb +65 -65
- data/lib/{Dnsruby → dnsruby}/resource/NAPTR.rb +98 -98
- data/lib/{Dnsruby → dnsruby}/resource/NSAP.rb +171 -171
- data/lib/dnsruby/resource/NSEC.rb +275 -0
- data/lib/dnsruby/resource/NSEC3.rb +332 -0
- data/lib/dnsruby/resource/NSEC3PARAM.rb +135 -0
- data/lib/dnsruby/resource/OPT.rb +272 -0
- data/lib/{Dnsruby → dnsruby}/resource/PX.rb +70 -70
- data/lib/{Dnsruby → dnsruby}/resource/RP.rb +75 -75
- data/lib/dnsruby/resource/RR.rb +421 -0
- data/lib/dnsruby/resource/RRSIG.rb +275 -0
- data/lib/dnsruby/resource/RRSet.rb +190 -0
- data/lib/{Dnsruby → dnsruby}/resource/RT.rb +67 -67
- data/lib/{Dnsruby → dnsruby}/resource/SOA.rb +94 -94
- data/lib/dnsruby/resource/SPF.rb +29 -0
- data/lib/dnsruby/resource/SRV.rb +112 -0
- data/lib/{Dnsruby → dnsruby}/resource/SSHFP.rb +14 -14
- data/lib/dnsruby/resource/TKEY.rb +163 -0
- data/lib/dnsruby/resource/TSIG.rb +593 -0
- data/lib/{Dnsruby → dnsruby}/resource/TXT.rb +191 -191
- data/lib/dnsruby/resource/X25.rb +55 -0
- data/lib/{Dnsruby → dnsruby}/resource/domain_name.rb +25 -25
- data/lib/{Dnsruby → dnsruby}/resource/generic.rb +80 -80
- data/lib/dnsruby/resource/resource.rb +25 -0
- data/lib/{Dnsruby → dnsruby}/select_thread.rb +148 -148
- data/lib/{Dnsruby/SingleResolver.rb → dnsruby/single_resolver.rb} +60 -60
- data/lib/{Dnsruby → dnsruby}/single_verifier.rb +344 -344
- data/lib/dnsruby/the_log.rb +44 -0
- data/lib/dnsruby/update.rb +278 -0
- data/lib/dnsruby/validator_thread.rb +124 -0
- data/lib/dnsruby/version.rb +3 -0
- data/lib/{Dnsruby → dnsruby}/zone_reader.rb +93 -93
- data/lib/{Dnsruby → dnsruby}/zone_transfer.rb +377 -377
- data/test/spec_helper.rb +16 -0
- data/test/tc_axfr.rb +31 -34
- data/test/tc_cache.rb +32 -32
- data/test/tc_dlv.rb +28 -28
- data/test/tc_dns.rb +73 -76
- data/test/tc_dnskey.rb +31 -32
- data/test/tc_dnsruby.rb +50 -44
- data/test/tc_ds.rb +36 -36
- data/test/tc_escapedchars.rb +252 -255
- data/test/tc_hash.rb +17 -21
- data/test/tc_header.rb +48 -57
- data/test/tc_hip.rb +19 -22
- data/test/tc_ipseckey.rb +18 -21
- data/test/tc_keith.rb +300 -0
- data/test/tc_message.rb +87 -0
- data/test/tc_misc.rb +83 -87
- data/test/tc_name.rb +81 -84
- data/test/tc_naptr.rb +18 -21
- data/test/tc_nsec.rb +55 -55
- data/test/tc_nsec3.rb +23 -24
- data/test/tc_nsec3param.rb +20 -21
- data/test/tc_packet.rb +90 -93
- data/test/tc_packet_unique_push.rb +48 -51
- data/test/tc_question.rb +30 -33
- data/test/tc_queue.rb +16 -17
- data/test/tc_recur.rb +16 -17
- data/test/tc_res_config.rb +38 -41
- data/test/tc_res_env.rb +29 -32
- data/test/tc_res_file.rb +26 -29
- data/test/tc_res_opt.rb +62 -65
- data/test/tc_resolver.rb +287 -242
- data/test/tc_rr-opt.rb +70 -63
- data/test/tc_rr-txt.rb +68 -71
- data/test/tc_rr-unknown.rb +45 -48
- data/test/tc_rr.rb +76 -70
- data/test/tc_rrset.rb +21 -22
- data/test/tc_rrsig.rb +19 -20
- data/test/tc_single_resolver.rb +294 -297
- data/test/tc_soak.rb +199 -202
- data/test/tc_soak_base.rb +29 -34
- data/test/tc_sshfp.rb +20 -23
- data/test/tc_tcp.rb +32 -35
- data/test/tc_tkey.rb +41 -44
- data/test/tc_tsig.rb +81 -84
- data/test/tc_update.rb +108 -111
- data/test/tc_validator.rb +29 -29
- data/test/tc_verifier.rb +81 -82
- data/test/ts_dnsruby.rb +16 -15
- data/test/ts_offline.rb +62 -63
- data/test/ts_online.rb +115 -115
- metadata +155 -90
- data/README +0 -59
- data/lib/Dnsruby/DNS.rb +0 -305
- data/lib/Dnsruby/PacketSender.rb +0 -656
- data/lib/Dnsruby/Resolver.rb +0 -1189
- data/lib/Dnsruby/TheLog.rb +0 -44
- data/lib/Dnsruby/message.rb +0 -1230
- data/lib/Dnsruby/resource/A.rb +0 -56
- data/lib/Dnsruby/resource/AAAA.rb +0 -54
- data/lib/Dnsruby/resource/DLV.rb +0 -27
- data/lib/Dnsruby/resource/NSEC.rb +0 -298
- data/lib/Dnsruby/resource/NSEC3.rb +0 -340
- data/lib/Dnsruby/resource/NSEC3PARAM.rb +0 -135
- data/lib/Dnsruby/resource/OPT.rb +0 -213
- data/lib/Dnsruby/resource/RRSIG.rb +0 -275
- data/lib/Dnsruby/resource/SPF.rb +0 -29
- data/lib/Dnsruby/resource/SRV.rb +0 -112
- data/lib/Dnsruby/resource/TKEY.rb +0 -163
- data/lib/Dnsruby/resource/TSIG.rb +0 -593
- data/lib/Dnsruby/resource/X25.rb +0 -55
- data/lib/Dnsruby/resource/resource.rb +0 -678
- data/lib/Dnsruby/update.rb +0 -278
- data/lib/Dnsruby/validator_thread.rb +0 -124
data/test/tc_naptr.rb
CHANGED
|
@@ -1,26 +1,23 @@
|
|
|
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
|
-
#
|
|
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
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
end
|
|
20
|
-
require 'test/unit'
|
|
21
|
-
require 'dnsruby'
|
|
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
|
+
|
|
17
|
+
require_relative 'spec_helper'
|
|
18
|
+
|
|
22
19
|
include Dnsruby
|
|
23
|
-
class TestNAPTR < Test
|
|
20
|
+
class TestNAPTR < Minitest::Test
|
|
24
21
|
def test_naptr
|
|
25
22
|
txt = "example.com. IN NAPTR 100 50 \"s\" \"z3950+I2L+I2C\" \"\" _z3950._tcp.gatech.edu."
|
|
26
23
|
naptr = RR.create(txt)
|
data/test/tc_nsec.rb
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
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
|
-
#
|
|
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
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
|
-
|
|
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
|
+
|
|
17
|
+
require_relative 'spec_helper'
|
|
16
18
|
|
|
17
|
-
require 'test/unit'
|
|
18
|
-
require 'dnsruby'
|
|
19
19
|
include Dnsruby
|
|
20
20
|
|
|
21
|
-
class NsecTest < Test
|
|
21
|
+
class NsecTest < Minitest::Test
|
|
22
22
|
INPUT = "alfa.example.com. 86400 IN NSEC host.example.com. ( " +
|
|
23
23
|
"A MX RRSIG NSEC TYPE1234 )"
|
|
24
24
|
include Dnsruby
|
|
@@ -26,7 +26,7 @@ class NsecTest < Test::Unit::TestCase
|
|
|
26
26
|
nsec = Dnsruby::RR.create(INPUT)
|
|
27
27
|
assert_equal("host.example.com", nsec.next_domain.to_s)
|
|
28
28
|
assert_equal([Types.A, Types.MX, Types.RRSIG, Types.NSEC, Types.TYPE1234], nsec.types)
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
nsec2 = Dnsruby::RR.create(nsec.to_s)
|
|
31
31
|
assert(nsec2.to_s == nsec.to_s)
|
|
32
32
|
|
|
@@ -45,10 +45,10 @@ class NsecTest < Test::Unit::TestCase
|
|
|
45
45
|
nsec3 = m2.additional()[0]
|
|
46
46
|
assert_equal(nsec.to_s, nsec3.to_s)
|
|
47
47
|
end
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
def test_nsec_types
|
|
50
|
-
#
|
|
51
|
-
#Test no zeros
|
|
50
|
+
# Test types in last section to 65536.
|
|
51
|
+
# Test no zeros
|
|
52
52
|
nsec = Dnsruby::RR.create(INPUT)
|
|
53
53
|
nsec.add_type(Types.TYPE65534)
|
|
54
54
|
assert(nsec.types.include?(Types.TYPE65534))
|
|
@@ -56,9 +56,9 @@ class NsecTest < Test::Unit::TestCase
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
def test_examples_from_rfc_4035_name_error
|
|
59
|
-
#
|
|
60
|
-
#
|
|
61
|
-
#
|
|
59
|
+
# Grab the example responses from RFC4035 and make sure that they pass.
|
|
60
|
+
# Then, try changing some of the NSEC values (ignoring the RRSIGs for now)
|
|
61
|
+
# and make sure that they fail verification for that reason
|
|
62
62
|
m = Message.new
|
|
63
63
|
m.header.rcode = 3
|
|
64
64
|
m.add_question(Question.new("m1.example."))
|
|
@@ -93,11 +93,11 @@ class NsecTest < Test::Unit::TestCase
|
|
|
93
93
|
rescue VerifyError
|
|
94
94
|
end
|
|
95
95
|
end
|
|
96
|
-
|
|
96
|
+
|
|
97
97
|
def test_examples_from_rfc_4035_no_data
|
|
98
|
-
#
|
|
99
|
-
#
|
|
100
|
-
#
|
|
98
|
+
# Grab the example responses from RFC4035 and make sure that they pass.
|
|
99
|
+
# Then, try changing some of the NSEC values (ignoring the RRSIGs for now)
|
|
100
|
+
# and make sure that they fail verification for that reason
|
|
101
101
|
m = Message.new
|
|
102
102
|
m.header.rcode = 0
|
|
103
103
|
m.add_question(Question.new("ns1.example.", Types.MX))
|
|
@@ -127,11 +127,11 @@ class NsecTest < Test::Unit::TestCase
|
|
|
127
127
|
end
|
|
128
128
|
|
|
129
129
|
def test_examples_from_rfc_4035_wildcard_expansion
|
|
130
|
-
#
|
|
131
|
-
#
|
|
132
|
-
#
|
|
130
|
+
# Grab the example responses from RFC4035 and make sure that they pass.
|
|
131
|
+
# Then, try changing some of the NSEC values (ignoring the RRSIGs for now)
|
|
132
|
+
# and make sure that they fail verification for that reason
|
|
133
133
|
m = Message.new
|
|
134
|
-
m.header.rcode =
|
|
134
|
+
m.header.rcode =
|
|
135
135
|
m.add_question(Question.new("a.z.w.example.", Types.MX))
|
|
136
136
|
m.add_answer(RR.create("a.z.w.example. 3600 IN MX 1 ai.example."))
|
|
137
137
|
m.add_answer(RR.create("a.z.w.example. 3600 RRSIG MX 5 4 3600 20040509183619 (
|
|
@@ -172,9 +172,9 @@ class NsecTest < Test::Unit::TestCase
|
|
|
172
172
|
end
|
|
173
173
|
|
|
174
174
|
def test_examples_from_rfc_4035_wildcard_no_data
|
|
175
|
-
#
|
|
176
|
-
#
|
|
177
|
-
#
|
|
175
|
+
# Grab the example responses from RFC4035 and make sure that they pass.
|
|
176
|
+
# Then, try changing some of the NSEC values (ignoring the RRSIGs for now)
|
|
177
|
+
# and make sure that they fail verification for that reason
|
|
178
178
|
m = Message.new
|
|
179
179
|
m.header.rcode = 0
|
|
180
180
|
m.add_question(Question.new("a.z.w.example.", Types.AAAA))
|
|
@@ -194,7 +194,7 @@ class NsecTest < Test::Unit::TestCase
|
|
|
194
194
|
end
|
|
195
195
|
m.authority.delete(RR.create("*.w.example. 3600 NSEC x.y.example. MX RRSIG NSEC"))
|
|
196
196
|
m.add_authority(RR.create("*.w.example. 3600 NSEC x.w.example. MX RRSIG NSEC"))
|
|
197
|
-
#
|
|
197
|
+
# Test bad versions of wildcard no data
|
|
198
198
|
Dnssec.anchor_verifier.verify_nsecs(m)
|
|
199
199
|
m.authority.delete(RR.create("x.y.w.example. 3600 NSEC xx.example. MX RRSIG NSEC"))
|
|
200
200
|
begin
|
|
@@ -204,23 +204,23 @@ class NsecTest < Test::Unit::TestCase
|
|
|
204
204
|
end
|
|
205
205
|
end
|
|
206
206
|
|
|
207
|
-
#
|
|
208
|
-
#
|
|
209
|
-
#
|
|
210
|
-
#
|
|
211
|
-
#
|
|
212
|
-
#
|
|
213
|
-
#
|
|
214
|
-
#
|
|
215
|
-
#
|
|
216
|
-
#
|
|
217
|
-
#
|
|
218
|
-
#
|
|
219
|
-
#
|
|
220
|
-
#
|
|
221
|
-
#
|
|
222
|
-
#
|
|
223
|
-
#
|
|
224
|
-
#
|
|
225
|
-
#
|
|
207
|
+
# @TODO@ Test referrals
|
|
208
|
+
# def test_examples_from_rfc_4035_referral_signed
|
|
209
|
+
# # Grab the example responses from RFC4035 and make sure that they pass.
|
|
210
|
+
# # Then, try changing some of the NSEC values (ignoring the RRSIGs for now)
|
|
211
|
+
# # and make sure that they fail verification for that reason
|
|
212
|
+
# m = Message.new
|
|
213
|
+
# m.header.rcode = 3
|
|
214
|
+
# fail
|
|
215
|
+
# end
|
|
216
|
+
#
|
|
217
|
+
# def test_examples_from_rfc_4035_referral_unsigned
|
|
218
|
+
# # Grab the example responses from RFC4035 and make sure that they pass.
|
|
219
|
+
# # Then, try changing some of the NSEC values (ignoring the RRSIGs for now)
|
|
220
|
+
# # and make sure that they fail verification for that reason
|
|
221
|
+
# m = Message.new
|
|
222
|
+
# m.header.rcode = 3
|
|
223
|
+
# fail
|
|
224
|
+
# end
|
|
225
|
+
#
|
|
226
226
|
end
|
data/test/tc_nsec3.rb
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
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
|
-
#
|
|
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
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
|
-
|
|
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
16
|
|
|
17
|
-
|
|
18
|
-
require 'dnsruby'
|
|
17
|
+
require_relative 'spec_helper'
|
|
19
18
|
|
|
20
|
-
class Nsec3Test < Test
|
|
21
|
-
INPUT = "2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. 3600 IN NSEC3 1 1 12 aabbccdd ( " +
|
|
19
|
+
class Nsec3Test < Minitest::Test
|
|
20
|
+
INPUT = "2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. 3600 IN NSEC3 1 1 12 aabbccdd ( " +
|
|
22
21
|
"2vptu5timamqttgl4luu9kg21e0aor3s A RRSIG )"
|
|
23
22
|
INPUT2 = "2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. 3600 IN NSEC3 1 1 12 aabbccdd " +
|
|
24
23
|
"2vptu5timamqttgl4luu9kg21e0aor3s"
|
|
@@ -31,7 +30,7 @@ class Nsec3Test < Test::Unit::TestCase
|
|
|
31
30
|
assert_equal(12, nsec.iterations)
|
|
32
31
|
assert_equal("aabbccdd", nsec.salt)
|
|
33
32
|
assert_equal(Dnsruby::Nsec3HashAlgorithms.SHA_1, nsec.hash_alg)
|
|
34
|
-
|
|
33
|
+
|
|
35
34
|
nsec2 = Dnsruby::RR.create(nsec.to_s)
|
|
36
35
|
assert(nsec2.to_s == nsec.to_s)
|
|
37
36
|
|
|
@@ -90,7 +89,7 @@ class Nsec3Test < Test::Unit::TestCase
|
|
|
90
89
|
c = Dnsruby::RR::NSEC3.calculate_hash(name, 12, Dnsruby::RR::NSEC3.decode_salt("aabbccdd"), 1)
|
|
91
90
|
assert_equal(c, hash, "Expected #{hash} but got #{c} for #{name}")
|
|
92
91
|
}
|
|
93
|
-
#
|
|
92
|
+
#
|
|
94
93
|
end
|
|
95
94
|
|
|
96
95
|
def test_nsec_other_stuff
|
|
@@ -105,7 +104,7 @@ class Nsec3Test < Test::Unit::TestCase
|
|
|
105
104
|
# fail
|
|
106
105
|
# rescue DecodeError
|
|
107
106
|
# end
|
|
108
|
-
#
|
|
107
|
+
# Be liberal in what you accept...
|
|
109
108
|
# begin
|
|
110
109
|
# nsec.hash_alg = 8
|
|
111
110
|
# fail
|
|
@@ -117,10 +116,10 @@ class Nsec3Test < Test::Unit::TestCase
|
|
|
117
116
|
rescue DecodeError
|
|
118
117
|
end
|
|
119
118
|
end
|
|
120
|
-
|
|
119
|
+
|
|
121
120
|
def test_nsec_types
|
|
122
|
-
#
|
|
123
|
-
#Test no zeros
|
|
121
|
+
# Test types in last section to 65536.
|
|
122
|
+
# Test no zeros
|
|
124
123
|
nsec = Dnsruby::RR.create(INPUT)
|
|
125
124
|
nsec.add_type(Types.TYPE65534)
|
|
126
125
|
assert(nsec.types.include?(Types.TYPE65534))
|
data/test/tc_nsec3param.rb
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
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
|
-
#
|
|
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
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class Nsec3ParamTest < Test::Unit::TestCase
|
|
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
|
+
|
|
17
|
+
require_relative 'spec_helper'
|
|
18
|
+
|
|
19
|
+
class Nsec3ParamTest < Minitest::Test
|
|
21
20
|
INPUT = "example. 3600 IN NSEC3PARAM 1 0 12 aabbccdd"
|
|
22
21
|
|
|
23
22
|
include Dnsruby
|
|
@@ -28,7 +27,7 @@ class Nsec3ParamTest < Test::Unit::TestCase
|
|
|
28
27
|
assert_equal(0, nsec.flags)
|
|
29
28
|
assert_equal(12, nsec.iterations)
|
|
30
29
|
assert_equal("aabbccdd", nsec.salt)
|
|
31
|
-
|
|
30
|
+
|
|
32
31
|
nsec2 = Dnsruby::RR.create(nsec.to_s)
|
|
33
32
|
assert(nsec2.to_s == nsec.to_s)
|
|
34
33
|
end
|
|
@@ -50,5 +49,5 @@ class Nsec3ParamTest < Test::Unit::TestCase
|
|
|
50
49
|
assert_equal("beef", r.salt)
|
|
51
50
|
assert_equal(Dnsruby::Nsec3HashAlgorithms.SHA_1, r.hash_alg)
|
|
52
51
|
end
|
|
53
|
-
|
|
52
|
+
|
|
54
53
|
end
|
data/test/tc_packet.rb
CHANGED
|
@@ -1,201 +1,198 @@
|
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
end
|
|
20
|
-
require 'test/unit'
|
|
21
|
-
require 'dnsruby'
|
|
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
|
+
|
|
17
|
+
require_relative 'spec_helper'
|
|
18
|
+
|
|
22
19
|
include Dnsruby
|
|
23
|
-
class TestPacket < Test
|
|
20
|
+
class TestPacket < Minitest::Test
|
|
24
21
|
def test_packet
|
|
25
22
|
domain = "example.com."
|
|
26
23
|
type = "MX"
|
|
27
24
|
klass = "IN"
|
|
28
|
-
|
|
25
|
+
|
|
29
26
|
packet = Message.new(domain, type, klass)
|
|
30
|
-
|
|
27
|
+
|
|
31
28
|
assert(packet, 'new() returned something'); #2
|
|
32
29
|
assert(packet.header, 'header() method works'); #3
|
|
33
30
|
assert_instance_of(Header,packet.header,'header() returns right thing'); #4
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
|
|
32
|
+
|
|
36
33
|
question = packet.question;
|
|
37
34
|
assert(question && question.length == 1, 'question() returned right number of items'); #5
|
|
38
|
-
#
|
|
39
|
-
|
|
35
|
+
# assert_instance_of(Net::DNS::Question,question[0], 'question() returned the right thing'); #6
|
|
36
|
+
|
|
40
37
|
answer = packet.answer;
|
|
41
38
|
assert(answer.length == 0, 'answer() works when empty'); #7
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
|
|
40
|
+
|
|
44
41
|
authority = packet.authority;
|
|
45
42
|
assert(authority.length == 0, 'authority() works when empty'); #8
|
|
46
|
-
|
|
43
|
+
|
|
47
44
|
additional = packet.additional;
|
|
48
45
|
assert(additional.length == 0, 'additional() works when empty'); #9
|
|
49
|
-
|
|
50
|
-
packet.add_answer(RR.create( {
|
|
46
|
+
|
|
47
|
+
packet.add_answer(RR.create( {
|
|
51
48
|
:name => "a1.example.com.",
|
|
52
|
-
:type => Types.A,
|
|
49
|
+
:type => Types.A,
|
|
53
50
|
:address => "10.0.0.1"}));
|
|
54
51
|
assert_equal(1, packet.header.ancount, 'First push into answer section worked'); #10
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
|
|
53
|
+
|
|
57
54
|
ret = packet.answer.rrset("example.com.", 'NSEC')
|
|
58
55
|
assert_equal(ret.rrs.length, 0, "#{ret.rrs.length}")
|
|
59
56
|
ret = packet.answer.rrset("a1.example.com", 'A')
|
|
60
57
|
assert_equal(ret.rrs.length, 1, "#{ret.rrs.length}")
|
|
61
58
|
ret = packet.answer.rrsets()
|
|
62
59
|
assert_equal(ret.length, 1, "#{ret.length}")
|
|
63
|
-
|
|
60
|
+
|
|
64
61
|
packet.add_answer(RR.create({:name => "a2.example.com.",
|
|
65
62
|
:type => "A", :address => "10.0.0.2"}));
|
|
66
63
|
assert_equal(packet.header.ancount, 2, 'Second push into answer section worked'); #11
|
|
67
|
-
|
|
64
|
+
|
|
68
65
|
packet.add_authority(RR.create({:name => "a3.example.com.",
|
|
69
66
|
:type => "A",
|
|
70
67
|
:address => "10.0.0.3"}));
|
|
71
68
|
assert_equal(1, packet.header.nscount, 'First push into authority section worked'); #12
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
|
|
70
|
+
|
|
74
71
|
packet.add_authority(RR.create( {
|
|
75
72
|
:name => "a4.example.com.",
|
|
76
73
|
:type => "A",
|
|
77
74
|
:address => "10.0.0.4"}));
|
|
78
75
|
assert_equal(2, packet.header.nscount, 'Second push into authority section worked'); #13
|
|
79
|
-
|
|
76
|
+
|
|
80
77
|
packet.add_additional(RR.create({
|
|
81
78
|
:name => "a5.example.com.",
|
|
82
79
|
:type => "A",
|
|
83
80
|
:address => "10.0.0.5"}));
|
|
84
81
|
assert_equal(1, packet.header.adcount, 'First push into additional section worked'); #14
|
|
85
|
-
|
|
82
|
+
|
|
86
83
|
packet.add_additional(RR.create( {
|
|
87
84
|
:name => "a6.example.com.",
|
|
88
85
|
:type => Types.A,
|
|
89
86
|
:address => "10.0.0.6"}));
|
|
90
87
|
assert_equal(2, packet.header.adcount, 'Second push into additional section worked'); #15
|
|
91
|
-
|
|
88
|
+
|
|
92
89
|
data = packet.encode;
|
|
93
|
-
|
|
90
|
+
|
|
94
91
|
packet2 = Message.decode(data);
|
|
95
|
-
|
|
92
|
+
|
|
96
93
|
assert(packet2, 'new() from data buffer works'); #16
|
|
97
94
|
|
|
98
95
|
assert_equal(packet.to_s, packet2.to_s, 'inspect() works correctly'); #17
|
|
99
|
-
|
|
100
|
-
|
|
96
|
+
|
|
97
|
+
|
|
101
98
|
string = packet2.to_s
|
|
102
99
|
6.times do |count|
|
|
103
100
|
ip = "10.0.0.#{count+1}";
|
|
104
101
|
assert(string =~ /#{ip}/, "Found #{ip} in packet"); # 18 though 23
|
|
105
102
|
end
|
|
106
|
-
|
|
103
|
+
|
|
107
104
|
assert_equal(1, packet2.header.qdcount, 'header question count correct'); #24
|
|
108
105
|
assert_equal(2, packet2.header.ancount, 'header answer count correct'); #25
|
|
109
|
-
assert_equal(2, packet2.header.nscount, 'header authority count correct'); #26
|
|
106
|
+
assert_equal(2, packet2.header.nscount, 'header authority count correct'); #26
|
|
110
107
|
assert_equal(2, packet2.header.adcount, 'header additional count correct'); #27
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
#
|
|
115
|
-
#
|
|
116
|
-
|
|
117
|
-
#
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
# Test using a predefined answer. This is an answer that was generated by a bind server.
|
|
112
|
+
#
|
|
113
|
+
|
|
114
|
+
# data=["22cc85000001000000010001056461636874036e657400001e0001c00c0006000100000e100025026e730472697065c012046f6c6166c02a7754e1ae0000a8c0000038400005460000001c2000002910000000800000050000000030"].pack("H*");
|
|
118
115
|
uuencodedPacket =%w{
|
|
119
|
-
22 cc 85 00 00 01 00 00 00 01 00 01 05 64 61 63
|
|
120
|
-
68 74 03 6e 65 74 00 00 1e 00 01 c0 0c 00 06 00
|
|
121
|
-
01 00 00 0e 10 00 25 02 6e 73 04 72 69 70 65 c0
|
|
122
|
-
12 04 6f 6c 61 66 c0 2a 77 54 e1 ae 00 00 a8 c0
|
|
123
|
-
00 00 38 40 00 05 46 00 00 00 1c 20 00 00 29 10
|
|
116
|
+
22 cc 85 00 00 01 00 00 00 01 00 01 05 64 61 63
|
|
117
|
+
68 74 03 6e 65 74 00 00 1e 00 01 c0 0c 00 06 00
|
|
118
|
+
01 00 00 0e 10 00 25 02 6e 73 04 72 69 70 65 c0
|
|
119
|
+
12 04 6f 6c 61 66 c0 2a 77 54 e1 ae 00 00 a8 c0
|
|
120
|
+
00 00 38 40 00 05 46 00 00 00 1c 20 00 00 29 10
|
|
124
121
|
00 00 00 80 00 00 05 00 00 00 00 30
|
|
125
122
|
}
|
|
126
|
-
|
|
123
|
+
|
|
127
124
|
uuencodedPacket = %w{
|
|
128
|
-
ba 91 81 80 00 01
|
|
129
|
-
00 04 00 00 00 01 07 65 78 61 6d 70 6c 65 03 63
|
|
130
|
-
6f 6d 00 00 ff 00 01 c0 0c 00 02 00 01 00 02 9f
|
|
131
|
-
f4 00 14 01 61 0c 69 61 6e 61 2d 73 65 72 76 65
|
|
132
|
-
72 73 03 6e 65 74 00 c0 0c 00 02 00 01 00 02 9f
|
|
133
|
-
f4 00 04 01 62 c0 2b c0 0c 00 01 00 01 00 02 9f
|
|
134
|
-
7e 00 04 d0 4d bc a6 c0 0c 00 06 00 01 00 02 9f
|
|
135
|
-
f4 00 31 04 64 6e 73 31 05 69 63 61 6e 6e 03 6f
|
|
136
|
-
72 67 00 0a 68 6f 73 74 6d 61 73 74 65 72 c0 6e
|
|
125
|
+
ba 91 81 80 00 01
|
|
126
|
+
00 04 00 00 00 01 07 65 78 61 6d 70 6c 65 03 63
|
|
127
|
+
6f 6d 00 00 ff 00 01 c0 0c 00 02 00 01 00 02 9f
|
|
128
|
+
f4 00 14 01 61 0c 69 61 6e 61 2d 73 65 72 76 65
|
|
129
|
+
72 73 03 6e 65 74 00 c0 0c 00 02 00 01 00 02 9f
|
|
130
|
+
f4 00 04 01 62 c0 2b c0 0c 00 01 00 01 00 02 9f
|
|
131
|
+
7e 00 04 d0 4d bc a6 c0 0c 00 06 00 01 00 02 9f
|
|
132
|
+
f4 00 31 04 64 6e 73 31 05 69 63 61 6e 6e 03 6f
|
|
133
|
+
72 67 00 0a 68 6f 73 74 6d 61 73 74 65 72 c0 6e
|
|
137
134
|
77 a1 2d b7 00 00 1c 20 00 00 0e 10 00 12 75 00
|
|
138
|
-
00 01 51 80 00 00 29 05 00 00 00 00 00 00 00
|
|
135
|
+
00 01 51 80 00 00 29 05 00 00 00 00 00 00 00
|
|
139
136
|
}
|
|
140
137
|
uuencodedPacket.map!{|e| e.hex}
|
|
141
138
|
packetdata = uuencodedPacket.pack('c*')
|
|
142
139
|
|
|
143
140
|
packet3 = Message.decode(packetdata)
|
|
144
141
|
assert(packet3, 'new data returned something'); #28
|
|
145
|
-
|
|
142
|
+
|
|
146
143
|
assert_equal(packet3.header.qdcount, 1, 'header question count in syntetic packet correct'); #29
|
|
147
144
|
assert_equal(packet3.header.ancount, 4, 'header answer count in syntetic packet correct'); #30
|
|
148
|
-
assert_equal(packet3.header.nscount, 0, 'header authority count in syntetic packet correct'); #31
|
|
145
|
+
assert_equal(packet3.header.nscount, 0, 'header authority count in syntetic packet correct'); #31
|
|
149
146
|
assert_equal(packet3.header.adcount, 1, 'header additional in sytnetic packet correct'); #32
|
|
150
|
-
|
|
147
|
+
|
|
151
148
|
rr=packet3.additional;
|
|
152
|
-
|
|
149
|
+
|
|
153
150
|
assert_equal(Types.OPT, rr[0].type, "Additional section packet is EDNS0 type"); #33
|
|
154
151
|
assert_equal(1280, rr[0].klass.code, "EDNS0 packet size correct"); #34
|
|
155
|
-
|
|
156
|
-
#
|
|
157
|
-
#
|
|
158
|
-
|
|
152
|
+
|
|
153
|
+
# In theory its valid to have multiple questions in the question section.
|
|
154
|
+
# Not many servers digest it though.
|
|
155
|
+
|
|
159
156
|
packet.add_question("bla.foo", Types::TXT, Classes.CH)
|
|
160
157
|
question = packet.question
|
|
161
|
-
assert_equal(2, question.length, 'question() returned right number of items poptest:2'); #36
|
|
162
|
-
end
|
|
163
|
-
|
|
158
|
+
assert_equal(2, question.length, 'question() returned right number of items poptest:2'); #36
|
|
159
|
+
end
|
|
160
|
+
|
|
164
161
|
def get_test_packet
|
|
165
162
|
packet=Message.new("254.9.11.10.in-addr.arpa.","PTR","IN")
|
|
166
|
-
|
|
163
|
+
|
|
167
164
|
packet.add_answer(RR.create(%q[254.9.11.10.in-addr.arpa. 86400 IN PTR host-84-11-9-254.customer.example.com.]));
|
|
168
|
-
|
|
165
|
+
|
|
169
166
|
packet.add_authority(RR.create("9.11.10.in-addr.arpa. 86400 IN NS autons1.example.com."));
|
|
170
167
|
packet.add_authority(RR.create("9.11.10.in-addr.arpa. 86400 IN NS autons2.example.com."));
|
|
171
168
|
packet.add_authority(RR.create("9.11.10.in-addr.arpa. 86400 IN NS autons3.example.com."));
|
|
172
169
|
return packet
|
|
173
170
|
end
|
|
174
|
-
|
|
175
|
-
|
|
171
|
+
|
|
172
|
+
|
|
176
173
|
def test_push
|
|
177
174
|
packet = get_test_packet
|
|
178
175
|
data=packet.encode
|
|
179
|
-
|
|
176
|
+
|
|
180
177
|
packet2=Message.decode(data)
|
|
181
|
-
|
|
178
|
+
|
|
182
179
|
assert_equal(packet.to_s,packet2.to_s,"Packet decode and encode"); #39
|
|
183
180
|
end
|
|
184
|
-
|
|
181
|
+
|
|
185
182
|
def test_rrset
|
|
186
183
|
packet = get_test_packet
|
|
187
184
|
packet.each_section do |section|
|
|
188
|
-
#
|
|
185
|
+
# print "#{section.rrsets}\n"
|
|
189
186
|
end
|
|
190
187
|
packet.section_rrsets.each do |section, rrsets|
|
|
191
|
-
#
|
|
188
|
+
# print "section = #{section}, rrsets = #{rrsets.length}\n"
|
|
192
189
|
end
|
|
193
190
|
assert(packet.authority.rrsets.length == 1)
|
|
194
191
|
assert(packet.question().length == 1)
|
|
195
192
|
assert(packet.answer.rrsets.length == 1)
|
|
196
193
|
assert(packet.additional.rrsets.length == 0)
|
|
197
194
|
assert(packet.authority.rrsets[0].length == 3)
|
|
198
|
-
#
|
|
195
|
+
# assert(packet.additional.rrsets[0].length == 0)
|
|
199
196
|
assert(packet.answer.rrsets[0].length == 1)
|
|
200
197
|
end
|
|
201
198
|
|