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_dnskey.rb
CHANGED
|
@@ -1,51 +1,50 @@
|
|
|
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 DnskeyTest < Test
|
|
21
|
-
INPUT = "example.com. 86400 IN DNSKEY 256 3 5 ( AQPSKmynfzW4kyBv015MUG2DeIQ3" +
|
|
22
|
-
"Cbl+BBZH4b/0PY1kxkmvHjcZc8no" +
|
|
19
|
+
class DnskeyTest < Minitest::Test
|
|
20
|
+
INPUT = "example.com. 86400 IN DNSKEY 256 3 5 ( AQPSKmynfzW4kyBv015MUG2DeIQ3" +
|
|
21
|
+
"Cbl+BBZH4b/0PY1kxkmvHjcZc8no" +
|
|
23
22
|
"kfzj31GajIQKY+5CptLr3buXA10h" +
|
|
24
23
|
"WqTkF7H6RfoRqXQeogmMHfpftf6z" +
|
|
25
|
-
"Mv1LyBUgia7za6ZEzOJBOztyvhjL" +
|
|
24
|
+
"Mv1LyBUgia7za6ZEzOJBOztyvhjL" +
|
|
26
25
|
"742iU/TpPSEDhm2SNKLijfUppn1U" +
|
|
27
26
|
"aNvv4w== )"
|
|
28
|
-
BADINPUT = "example.com. 86400 IN DNSKEY 384 3 5 ( AQPSKmynfzW4kyBv015MUG2DeIQ3" +
|
|
29
|
-
"Cbl+BBZH4b/0PY1kxkmvHjcZc8no" +
|
|
27
|
+
BADINPUT = "example.com. 86400 IN DNSKEY 384 3 5 ( AQPSKmynfzW4kyBv015MUG2DeIQ3" +
|
|
28
|
+
"Cbl+BBZH4b/0PY1kxkmvHjcZc8no" +
|
|
30
29
|
"kfzj31GajIQKY+5CptLr3buXA10h" +
|
|
31
30
|
"WqTkF7H6RfoRqXQeogmMHfpftf6z" +
|
|
32
|
-
"Mv1LyBUgia7za6ZEzOJBOztyvhjL" +
|
|
31
|
+
"Mv1LyBUgia7za6ZEzOJBOztyvhjL" +
|
|
33
32
|
"742iU/TpPSEDhm2SNKLijfUppn1U" +
|
|
34
33
|
"aNvv4w== )"
|
|
35
|
-
#
|
|
36
|
-
#
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
34
|
+
# def test_bad_flag
|
|
35
|
+
# dnskey = Dnsruby::RR.create(BADINPUT)
|
|
36
|
+
# assert_equal(384, dnskey.flags)
|
|
37
|
+
# assert(dnskey.bad_flags?)
|
|
38
|
+
# end
|
|
40
39
|
def test_dnskey_from_string
|
|
41
40
|
dnskey = Dnsruby::RR.create(INPUT)
|
|
42
|
-
#
|
|
41
|
+
# assert(!dnskey.bad_flags?)
|
|
43
42
|
assert_equal(3, dnskey.protocol)
|
|
44
43
|
assert_equal(256, dnskey.flags)
|
|
45
44
|
assert_equal(Dnsruby::Algorithms::RSASHA1, dnskey.algorithm)
|
|
46
45
|
assert_equal(Dnsruby::RR::DNSKEY::ZONE_KEY, dnskey.flags & Dnsruby::RR::DNSKEY::ZONE_KEY)
|
|
47
46
|
assert_equal(0, dnskey.flags & Dnsruby::RR::DNSKEY::SEP_KEY)
|
|
48
|
-
|
|
47
|
+
|
|
49
48
|
dnskey2 = Dnsruby::RR.create(dnskey.to_s)
|
|
50
49
|
assert(dnskey2.to_s == dnskey.to_s, "#{dnskey.to_s} not equal to \n#{dnskey2.to_s}")
|
|
51
50
|
end
|
|
@@ -64,7 +63,7 @@ class DnskeyTest < Test::Unit::TestCase
|
|
|
64
63
|
dnskey3 = m2.additional()[0]
|
|
65
64
|
assert_equal(dnskey.to_s, dnskey3.to_s)
|
|
66
65
|
end
|
|
67
|
-
|
|
66
|
+
|
|
68
67
|
def test_bad_values
|
|
69
68
|
dnskey = Dnsruby::RR.create(INPUT)
|
|
70
69
|
begin
|
|
@@ -84,6 +83,6 @@ class DnskeyTest < Test::Unit::TestCase
|
|
|
84
83
|
dnskey.flags=1
|
|
85
84
|
assert_equal(1, dnskey.flags)
|
|
86
85
|
dnskey.protocol=3
|
|
87
|
-
|
|
86
|
+
|
|
88
87
|
end
|
|
89
88
|
end
|
data/test/tc_dnsruby.rb
CHANGED
|
@@ -1,45 +1,51 @@
|
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
+
|
|
19
|
+
include Dnsruby
|
|
20
|
+
class TestDnsruby < Minitest::Test
|
|
21
|
+
def test_dnsruby
|
|
22
|
+
a = Resolv.getaddress("google-public-dns-a.google.com.")
|
|
23
|
+
assert_equal(a.to_s, "8.8.8.8")
|
|
24
|
+
a = Resolv.getaddresses("google-public-dns-a.google.com.")
|
|
25
|
+
if (a.length == 1)
|
|
26
|
+
assert(a.length==1, a.to_s + " should only have one response. Had " + a.length.to_s)
|
|
27
|
+
assert(a.any? {|s| s.to_s == ("8.8.8.8")})
|
|
28
|
+
Resolv.each_address("google-public-dns-a.google.com.") {|address| assert_equal(address, "8.8.8.8")}
|
|
29
|
+
else
|
|
30
|
+
assert(a.length==2, a.to_s + " should have had two responses. Had " + a.length.to_s)
|
|
31
|
+
assert(a.any? {|s| s.to_s == ("8.8.8.8")})
|
|
32
|
+
assert(a.any? {|s| s.to_s == ("2001:4860:4860::8888")})
|
|
33
|
+
Resolv.each_address("google-public-dns-a.google.com.") {|address|
|
|
34
|
+
assert((address == "8.8.8.8") || (address = "2001:4860:4860::8888")) }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
n = Resolv.getname("8.8.8.8")
|
|
38
|
+
assert_equal(n, "google-public-dns-a.google.com")
|
|
39
|
+
begin
|
|
40
|
+
ret = Resolv.getname("google-public-dns-a.google.com.")
|
|
41
|
+
assert(false, ret)
|
|
42
|
+
rescue Exception => e
|
|
43
|
+
# assert(e.kind_of?(ResolvError))
|
|
44
|
+
assert(e.kind_of?(Resolv::ResolvError), "Error was a #{e.class}: #{e}")
|
|
45
|
+
end
|
|
46
|
+
n = Resolv.getnames("8.8.8.8")
|
|
47
|
+
assert(n.length==1)
|
|
48
|
+
assert_equal(n[0], "google-public-dns-a.google.com")
|
|
49
|
+
Resolv.each_name("8.8.8.8") {|name| assert_equal(name, "google-public-dns-a.google.com")}
|
|
50
|
+
end
|
|
45
51
|
end
|
data/test/tc_ds.rb
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
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
19
|
require 'openssl'
|
|
19
20
|
require 'digest/sha2'
|
|
20
|
-
require 'dnsruby'
|
|
21
21
|
|
|
22
|
-
class DsTest < Test
|
|
23
|
-
DLVINPUT = "dskey.example.com. 86400 IN DLV 60485 5 1 ( 2BB183AF5F22588179A53B0A" +
|
|
22
|
+
class DsTest < Minitest::Test
|
|
23
|
+
DLVINPUT = "dskey.example.com. 86400 IN DLV 60485 5 1 ( 2BB183AF5F22588179A53B0A" +
|
|
24
24
|
"98631FAD1A292118 )"
|
|
25
|
-
INPUT = "dskey.example.com. 86400 IN DS 60485 5 1 ( 2BB183AF5F22588179A53B0A" +
|
|
25
|
+
INPUT = "dskey.example.com. 86400 IN DS 60485 5 1 ( 2BB183AF5F22588179A53B0A" +
|
|
26
26
|
"98631FAD1A292118 )"
|
|
27
27
|
DNSKEY = "dskey.example.com. 86400 IN DNSKEY 256 3 5 ( AQOeiiR0GOMYkDshWoSKz9Xz" +
|
|
28
|
-
"fwJr1AYtsmx3TGkJaNXVbfi/" +
|
|
28
|
+
"fwJr1AYtsmx3TGkJaNXVbfi/" +
|
|
29
29
|
"2pHm822aJ5iI9BMzNXxeYCmZ"+
|
|
30
30
|
"DRD99WYwYqUSdjMmmAphXdvx"+
|
|
31
31
|
"egXd/M5+X7OrzKBaMbCVdFLU"+
|
|
@@ -44,7 +44,7 @@ class DsTest < Test::Unit::TestCase
|
|
|
44
44
|
assert_equal(Algorithms.RSASHA1, ds.algorithm)
|
|
45
45
|
assert_equal(1, ds.digest_type)
|
|
46
46
|
assert_equal("2BB183AF5F22588179A53B0A98631FAD1A292118", ds.digest)
|
|
47
|
-
|
|
47
|
+
|
|
48
48
|
ds2 = Dnsruby::RR.create(ds.to_s)
|
|
49
49
|
assert(ds2.to_s == ds.to_s)
|
|
50
50
|
end
|
|
@@ -58,47 +58,47 @@ class DsTest < Test::Unit::TestCase
|
|
|
58
58
|
ds3 = m2.additional()[0]
|
|
59
59
|
assert_equal(ds.to_s, ds3.to_s)
|
|
60
60
|
end
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
def test_ds_values
|
|
63
63
|
ds = Dnsruby::RR.create(INPUT)
|
|
64
64
|
ds.digest_type = 2
|
|
65
|
-
#
|
|
65
|
+
# Be liberal in what you accept...
|
|
66
66
|
# begin
|
|
67
67
|
# ds.digest_type = 3
|
|
68
68
|
# fail
|
|
69
|
-
#
|
|
69
|
+
#
|
|
70
70
|
# rescue DecodeError
|
|
71
71
|
# end
|
|
72
72
|
end
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
def test_ds_digest
|
|
75
75
|
key = Dnsruby::RR.create(DNSKEY)
|
|
76
|
-
|
|
77
|
-
#
|
|
76
|
+
|
|
77
|
+
# and check it is the same as DS
|
|
78
78
|
right_ds = Dnsruby::RR.create(DS1)
|
|
79
79
|
ds = Dnsruby::RR::DS.from_key(key, 1);
|
|
80
|
-
assert_equal(ds.to_s, right_ds.to_s)
|
|
80
|
+
assert_equal(ds.to_s, right_ds.to_s)
|
|
81
81
|
end
|
|
82
|
-
|
|
82
|
+
|
|
83
83
|
def test_sha2
|
|
84
|
-
#
|
|
84
|
+
# Create a new DS from the DNSKEY,
|
|
85
85
|
key = Dnsruby::RR.create(DNSKEY)
|
|
86
|
-
|
|
87
|
-
#
|
|
86
|
+
|
|
87
|
+
# and check it is the same as DS
|
|
88
88
|
right_ds = Dnsruby::RR.create(DS2)
|
|
89
89
|
ds = Dnsruby::RR::DS.from_key(key, 2);
|
|
90
90
|
assert_equal(ds.to_s, right_ds.to_s)
|
|
91
91
|
end
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
def test_dlv_from_string
|
|
94
94
|
dlv = Dnsruby::RR.create(DLVINPUT)
|
|
95
95
|
assert_equal(60485, dlv.key_tag)
|
|
96
96
|
assert_equal(Algorithms.RSASHA1, dlv.algorithm)
|
|
97
97
|
assert_equal(1, dlv.digest_type)
|
|
98
98
|
assert_equal("2BB183AF5F22588179A53B0A98631FAD1A292118", dlv.digest)
|
|
99
|
-
|
|
99
|
+
|
|
100
100
|
dlv2 = Dnsruby::RR.create(dlv.to_s)
|
|
101
|
-
assert(dlv2.to_s == dlv.to_s)
|
|
101
|
+
assert(dlv2.to_s == dlv.to_s)
|
|
102
102
|
end
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
end
|
data/test/tc_escapedchars.rb
CHANGED
|
@@ -1,163 +1,160 @@
|
|
|
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 TestEscapedChars < Test
|
|
20
|
+
class TestEscapedChars < Minitest::Test
|
|
24
21
|
def test_one
|
|
25
22
|
Name::Label.set_max_length(150)
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
|
|
30
|
-
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
#
|
|
35
|
-
#
|
|
36
|
-
#
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
#
|
|
40
|
-
#
|
|
41
|
-
|
|
42
|
-
#
|
|
43
|
-
#
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
-
#
|
|
51
|
-
#
|
|
52
|
-
#
|
|
53
|
-
|
|
23
|
+
#
|
|
24
|
+
# We test al sorts of escaped non-ascii characters.
|
|
25
|
+
# This is all to be protocol conform... so to speak.
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# The collection of tests is somewhat of a hodgepodge that tried to
|
|
29
|
+
# assess sensitivity to combinations of characters that the regular
|
|
30
|
+
# expressions and perl itself are sensitive to. (like \\\\\.\..)
|
|
31
|
+
# Development versions of the code tried to split a domain name in
|
|
32
|
+
# invidual labels by a regular expression. It made no sense to remove
|
|
33
|
+
# the more ackward tests as they have to pass anyway ...
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# Note that in perl the \\ in a presentation format can only be achieved
|
|
37
|
+
# through \\\\ .
|
|
38
|
+
|
|
39
|
+
# The hex codes are the names in wireformat:
|
|
40
|
+
# length octet. content octets, length octet, content , NULL octet
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# Below are test combos, 1st and 2nd array elements are
|
|
44
|
+
# representations of the name. The output of the perl functions should
|
|
45
|
+
# yield the 2nd presentation (eg \037 gets presented as % )
|
|
46
|
+
|
|
47
|
+
# The 3rd element is a label count.
|
|
48
|
+
# The 4th element represents the number of octets per label
|
|
49
|
+
# The 5th element is a hexdump of the domain name in wireformat
|
|
50
|
+
|
|
54
51
|
testcombos=[
|
|
55
52
|
['bla.fo\.o.org',
|
|
56
53
|
'bla.fo\.o.org',
|
|
57
54
|
3,
|
|
58
55
|
[3,4,3],
|
|
59
|
-
#Wire: 3 b l a 4 f o . o 3 o r g 0
|
|
56
|
+
# Wire: 3 b l a 4 f o . o 3 o r g 0
|
|
60
57
|
"03626c6104666f2e6f036f726700"
|
|
61
58
|
],
|
|
62
|
-
|
|
59
|
+
|
|
63
60
|
[
|
|
64
|
-
'bla\255.foo.org',
|
|
61
|
+
'bla\255.foo.org',
|
|
65
62
|
'bla\255.foo.org',
|
|
66
63
|
3,
|
|
67
64
|
[4,3,3],
|
|
68
|
-
#Wire: 4 b l a 0xff 3 f o o 3 o r g 0
|
|
69
|
-
"04626c61ff03666f6f036f726700"
|
|
65
|
+
# Wire: 4 b l a 0xff 3 f o o 3 o r g 0
|
|
66
|
+
"04626c61ff03666f6f036f726700"
|
|
70
67
|
],
|
|
71
|
-
|
|
68
|
+
|
|
72
69
|
[
|
|
73
|
-
'bla.f\xa9oo.org',
|
|
70
|
+
'bla.f\xa9oo.org',
|
|
74
71
|
'bla.f\169oo.org',
|
|
75
72
|
3,
|
|
76
73
|
[3,4,3] ,
|
|
77
|
-
#Wire: 3 b l a 4 f 0xa9 o o 3 o r g 0
|
|
78
|
-
"03626c610466a96f6f036f726700"
|
|
74
|
+
# Wire: 3 b l a 4 f 0xa9 o o 3 o r g 0
|
|
75
|
+
"03626c610466a96f6f036f726700"
|
|
79
76
|
], # Note hex to decimal
|
|
80
77
|
['bla.fo\.o.org',
|
|
81
78
|
'bla.fo\.o.org',
|
|
82
79
|
3,
|
|
83
80
|
[3,4,3],
|
|
84
|
-
#Wire: 3 b l a 4 f o . o 3 o r g 0
|
|
81
|
+
# Wire: 3 b l a 4 f o . o 3 o r g 0
|
|
85
82
|
"03626c6104666f2e6f036f726700"
|
|
86
83
|
],
|
|
87
|
-
|
|
84
|
+
|
|
88
85
|
['bla\0000.foo.org',
|
|
89
86
|
'bla\0000.foo.org',
|
|
90
87
|
3,
|
|
91
88
|
[5,3,3],
|
|
92
|
-
#Wire: 5 b l a 0x00 0 3 f o o 3 o r g 0
|
|
89
|
+
# Wire: 5 b l a 0x00 0 3 f o o 3 o r g 0
|
|
93
90
|
"05626c61003003666f6f036f726700" ,
|
|
94
91
|
],
|
|
95
|
-
|
|
92
|
+
|
|
96
93
|
["bla.fo\o.org",
|
|
97
94
|
"bla.foo.org",
|
|
98
95
|
3,
|
|
99
96
|
[3,3,3],
|
|
100
|
-
#Wire: 3 b l a 3 f o o 3 o r g 0 ignoring backslash on input
|
|
97
|
+
# Wire: 3 b l a 3 f o o 3 o r g 0 ignoring backslash on input
|
|
101
98
|
"03626c6103666f6f036f726700",
|
|
102
99
|
],
|
|
103
|
-
#drops the \
|
|
100
|
+
# drops the \
|
|
104
101
|
['bla(*.foo.org',
|
|
105
102
|
'bla\(*.foo.org',
|
|
106
103
|
3,
|
|
107
104
|
[5,3,3],
|
|
108
|
-
|
|
109
|
-
#Wire: 5 b l a ( * 3 f o o 3 o r g 0
|
|
110
|
-
"05626c61282a03666f6f036f726700"
|
|
105
|
+
|
|
106
|
+
# Wire: 5 b l a ( * 3 f o o 3 o r g 0
|
|
107
|
+
"05626c61282a03666f6f036f726700"
|
|
111
108
|
],
|
|
112
|
-
|
|
109
|
+
|
|
113
110
|
[' .bla.foo.org',
|
|
114
111
|
'\032.bla.foo.org',
|
|
115
112
|
4,
|
|
116
113
|
[1,3,3,3],
|
|
117
114
|
"012003626c6103666f6f036f726700",
|
|
118
115
|
],
|
|
119
|
-
|
|
116
|
+
|
|
120
117
|
["\\\\a.foo",
|
|
121
118
|
"\\\\a.foo",
|
|
122
119
|
2,
|
|
123
120
|
[2,3],
|
|
124
|
-
#Wire: 2 \ a 3 f o o 0
|
|
121
|
+
# Wire: 2 \ a 3 f o o 0
|
|
125
122
|
"025c6103666f6f00"
|
|
126
123
|
],
|
|
127
|
-
|
|
128
|
-
|
|
124
|
+
|
|
125
|
+
|
|
129
126
|
['\\\\.foo',
|
|
130
127
|
'\\\\.foo',
|
|
131
128
|
2,
|
|
132
129
|
[1,3],
|
|
133
|
-
#Wire: 1 \ 3 f o o 0
|
|
130
|
+
# Wire: 1 \ 3 f o o 0
|
|
134
131
|
"015c03666f6f00",
|
|
135
132
|
],
|
|
136
|
-
|
|
133
|
+
|
|
137
134
|
['a\\..foo',
|
|
138
135
|
'a\\..foo',
|
|
139
|
-
2,
|
|
136
|
+
2,
|
|
140
137
|
[2,3],
|
|
141
|
-
#Wire: 2 a . 3 f o o 0
|
|
138
|
+
# Wire: 2 a . 3 f o o 0
|
|
142
139
|
"02612e03666f6f00"
|
|
143
140
|
],
|
|
144
|
-
|
|
141
|
+
|
|
145
142
|
['a\\.foo.org',
|
|
146
143
|
'a\\.foo.org',
|
|
147
144
|
2, [5,3],
|
|
148
|
-
#Wire: 5 a . f o o 3 o r g 0
|
|
145
|
+
# Wire: 5 a . f o o 3 o r g 0
|
|
149
146
|
"05612e666f6f036f726700" ,
|
|
150
147
|
],
|
|
151
|
-
|
|
148
|
+
|
|
152
149
|
['\..foo.org',
|
|
153
150
|
'\..foo.org',
|
|
154
151
|
3,
|
|
155
|
-
[1,3,3],
|
|
156
|
-
|
|
157
|
-
#Wire: 1 . 3 f o o 3 o r g 0
|
|
152
|
+
[1,3,3],
|
|
153
|
+
|
|
154
|
+
# Wire: 1 . 3 f o o 3 o r g 0
|
|
158
155
|
"012e03666f6f036f726700" ,
|
|
159
156
|
],
|
|
160
|
-
|
|
157
|
+
|
|
161
158
|
[
|
|
162
159
|
'\046.\046',
|
|
163
160
|
'\..\.',
|
|
@@ -165,192 +162,192 @@ class TestEscapedChars < Test::Unit::TestCase
|
|
|
165
162
|
[1,1],
|
|
166
163
|
'012e012e00',
|
|
167
164
|
],
|
|
168
|
-
|
|
169
|
-
[ # all non \w characters :-)
|
|
165
|
+
|
|
166
|
+
[ # all non \w characters :-)
|
|
170
167
|
'\000\001\002\003\004\005\006\007\008\009\010\011\012\013\014\015\016\017\018\019\020\021\022\023\024\025\026\027\028\029\030\031\032.\033\034\035\036\037\038\039\040\041\042\043\044\045\046\047\048.\058\059\060\061\062\063\064\065.\091\092\093\094\095\096.\123\124\125\126\127\128\129',
|
|
171
168
|
'\000\001\002\003\004\005\006\007\008\009\010\011\012\013\014\015\016\017\018\019\020\021\022\023\024\025\026\027\028\029\030\031\032.!\"#\$%&\'\(\)*+,-\./0.:\;<=>?\@a.[\\\\]^_`.{|}~\127\128\129',
|
|
172
169
|
5,
|
|
173
170
|
[33,16,8,6,7],
|
|
174
171
|
"21000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20102122232425262728292a2b2c2d2e2f30083a3b3c3d3e3f4061065b5c5d5e5f60077b7c7d7e7f808100",
|
|
175
172
|
],
|
|
176
|
-
|
|
173
|
+
|
|
177
174
|
]
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
#foreach my $testinput (@testcombos){
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
# foreach my $testinput (@testcombos){
|
|
181
178
|
testcombos.each do |testinput|
|
|
182
|
-
#
|
|
183
|
-
|
|
184
|
-
name = Name.create(testinput[0])
|
|
179
|
+
# test back and forth
|
|
180
|
+
|
|
181
|
+
name = Name.create(testinput[0])
|
|
185
182
|
labels = Name.name2encodedlabels(testinput[0])
|
|
186
|
-
|
|
187
|
-
#
|
|
183
|
+
|
|
184
|
+
# assert_equal(testinput[1], Net::labels2name(labels), "consistent name2labels labels2name for " + testinput[0])
|
|
188
185
|
# name_from_labels = Name.encodedlabels2name(labels)
|
|
189
186
|
name_from_labels = Name.new(labels)
|
|
190
|
-
assert_equal(name.to_s, name_from_labels.to_s, "Name->Labels->Name for " + testinput[0])
|
|
191
|
-
|
|
192
|
-
#
|
|
187
|
+
assert_equal(name.to_s, name_from_labels.to_s, "Name->Labels->Name for " + testinput[0])
|
|
188
|
+
|
|
189
|
+
# test number of labels
|
|
193
190
|
assert_equal(testinput[2],labels.length(),"consistent labelcount (#{testinput[2]})")
|
|
194
|
-
#
|
|
191
|
+
# test number of elements within label.
|
|
195
192
|
i=0
|
|
196
|
-
#
|
|
193
|
+
# Test length of each individual label
|
|
197
194
|
while i<testinput[2]
|
|
198
|
-
assert_equal(testinput[3][i], labels[i].length,
|
|
195
|
+
assert_equal(testinput[3][i], labels[i].length,
|
|
199
196
|
"labellength for label #{labels[i]} equals " + testinput[3][i].to_s)
|
|
200
197
|
i = i + 1
|
|
201
198
|
end
|
|
202
|
-
|
|
203
|
-
#
|
|
199
|
+
|
|
200
|
+
# wire=Name._name2wire(testinput[0])
|
|
204
201
|
wire=MessageEncoder.new {|msg|
|
|
205
202
|
msg.put_name(name, true)}.to_s
|
|
206
|
-
|
|
203
|
+
|
|
207
204
|
wireinhex=wire.unpack("H*")[0]
|
|
208
205
|
assert_equal( testinput[4].to_s, wireinhex.to_s,"Wireinhex for " + testinput[0] )
|
|
209
|
-
#
|
|
210
|
-
#
|
|
211
|
-
|
|
212
|
-
|
|
206
|
+
# And now call DN_EXPAND
|
|
207
|
+
# name,offset=Name.dn_expand(wire,0)
|
|
208
|
+
|
|
209
|
+
|
|
213
210
|
MessageDecoder.new(wire) {|msg|
|
|
214
211
|
name = msg.get_name}
|
|
215
|
-
|
|
212
|
+
|
|
216
213
|
assert_equal(name.to_s,testinput[1],"DN_EXPAND (pp) consistent")
|
|
217
214
|
end
|
|
218
|
-
|
|
219
|
-
#
|
|
220
|
-
|
|
221
|
-
#
|
|
222
|
-
#
|
|
223
|
-
|
|
224
|
-
#
|
|
225
|
-
#
|
|
226
|
-
#eg.secret-wg.org. 600 IN NS ns.eg.secret-wg.org.
|
|
227
|
-
#
|
|
228
|
-
#
|
|
229
|
-
#ns.eg.secret-wg.org. 600 IN A 10.0.53.208
|
|
230
|
-
#
|
|
231
|
-
|
|
215
|
+
|
|
216
|
+
# QUESTION SECTION
|
|
217
|
+
# \\.eg.secret-wg.org. IN TXT
|
|
218
|
+
#
|
|
219
|
+
# ANSWER SECTION:
|
|
220
|
+
# \\.eg.secret-wg.org. 10 IN TXT "WildCard Match"
|
|
221
|
+
#
|
|
222
|
+
# AUTHORITY SECTION:
|
|
223
|
+
# eg.secret-wg.org. 600 IN NS ns.eg.secret-wg.org.
|
|
224
|
+
#
|
|
225
|
+
# ADDITIONAL SECTION:
|
|
226
|
+
# ns.eg.secret-wg.org. 600 IN A 10.0.53.208
|
|
227
|
+
#
|
|
228
|
+
|
|
232
229
|
uuencodedPacket=%w{
|
|
233
|
-
c8 d5 85 00 00 01 00 01 00 01 00 01 02 5c 5c 02
|
|
234
|
-
65 67 09 73 65 63 72 65 74 2d 77 67 03 6f 72 67
|
|
235
|
-
00 00 10 00 01 c0 0c 00 10 00 01 00 00 00 0a 00
|
|
236
|
-
0f 0e 57 69 6c 64 43 61 72 64 20 4d 61 74 63 68
|
|
237
|
-
c0 0f 00 02 00 01 00 00 02 58 00 05 02 6e 73 c0
|
|
238
|
-
0f c0 4c 00 01 00 01 00 00 02 58 00 04 0a 00 35
|
|
239
|
-
d0
|
|
230
|
+
c8 d5 85 00 00 01 00 01 00 01 00 01 02 5c 5c 02
|
|
231
|
+
65 67 09 73 65 63 72 65 74 2d 77 67 03 6f 72 67
|
|
232
|
+
00 00 10 00 01 c0 0c 00 10 00 01 00 00 00 0a 00
|
|
233
|
+
0f 0e 57 69 6c 64 43 61 72 64 20 4d 61 74 63 68
|
|
234
|
+
c0 0f 00 02 00 01 00 00 02 58 00 05 02 6e 73 c0
|
|
235
|
+
0f c0 4c 00 01 00 01 00 00 02 58 00 04 0a 00 35
|
|
236
|
+
d0
|
|
240
237
|
}
|
|
241
|
-
|
|
242
|
-
#
|
|
243
|
-
#
|
|
244
|
-
#
|
|
245
|
-
|
|
238
|
+
|
|
239
|
+
# uuEncodedPacket =~ s/\s*//g
|
|
240
|
+
# uuEncodedPacket =uuEncodedPacket.gsub("\s*", "")
|
|
241
|
+
# packetdata = [uuEncodedPacket].pack('H*')
|
|
242
|
+
|
|
246
243
|
uuencodedPacket.map!{|e| e.hex}
|
|
247
244
|
packetdata = uuencodedPacket.pack('c*')
|
|
248
245
|
packetdata = packetdata.gsub("\s*", "")
|
|
249
|
-
|
|
246
|
+
|
|
250
247
|
packet = Message.decode(packetdata)
|
|
251
248
|
assert(packet, "nil packet returned from binary data")
|
|
252
249
|
assert_equal( (packet.answer)[0].name.to_s,'\\\\\\\\.eg.secret-wg.org',"Correctly dealt escaped backslash from wireformat \\\\.eg.secret-wg.org")
|
|
253
250
|
end
|
|
254
|
-
|
|
251
|
+
|
|
255
252
|
def test_esoteric_stuff
|
|
256
|
-
#
|
|
257
|
-
#
|
|
258
|
-
#
|
|
259
|
-
|
|
260
|
-
#
|
|
261
|
-
|
|
262
|
-
#
|
|
263
|
-
|
|
264
|
-
#
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
#
|
|
268
|
-
|
|
269
|
-
#
|
|
270
|
-
#
|
|
271
|
-
#eg.secret-wg.org. 600 IN NS ns.eg.secret-wg.org.
|
|
272
|
-
|
|
273
|
-
#
|
|
274
|
-
#ns.eg.secret-wg.org. 600 IN A 10.0.53.208
|
|
275
|
-
|
|
253
|
+
# Now testing for the real esotheric stuff.
|
|
254
|
+
# domain names can contain NULL and space characters (on the wire)
|
|
255
|
+
# these should be properly expanded
|
|
256
|
+
|
|
257
|
+
# This only works if the dn_expand_XS() is NOT used.
|
|
258
|
+
|
|
259
|
+
# The UUencoded packet contains a captured packet with this content:
|
|
260
|
+
|
|
261
|
+
# QUESTION SECTION:
|
|
262
|
+
# \000.n\032ll.eg.secret-wg.org. IN TXT
|
|
263
|
+
|
|
264
|
+
# ANSWER SECTION:
|
|
265
|
+
# \000.n ll.eg.secret-wg.org. 0 IN TXT "NULL byte ownername"
|
|
266
|
+
# ^ SPACE !!!
|
|
267
|
+
# AUTHORITY SECTION:
|
|
268
|
+
# eg.secret-wg.org. 600 IN NS ns.eg.secret-wg.org.
|
|
269
|
+
|
|
270
|
+
# ADDITIONAL SECTION:
|
|
271
|
+
# ns.eg.secret-wg.org. 600 IN A 10.0.53.208
|
|
272
|
+
|
|
276
273
|
uuencodedPacket =%w{
|
|
277
|
-
a6 58 85 00 00 01 00 01 00 01 00 01 01 00 04 6e
|
|
278
|
-
20 6c 6c 02 65 67 09 73 65 63 72 65 74 2d 77 67
|
|
279
|
-
03 6f 72 67 00 00 10 00 01 c0 0c 00 10 00 01 00
|
|
280
|
-
00 00 00 00 14 13 4e 55 4c 4c 20 62 79 74 65 20
|
|
281
|
-
6f 77 6e 65 72 6e 61 6d 65 c0 13 00 02 00 01 00
|
|
282
|
-
00 02 58 00 05 02 6e 73 c0 13 c0 55 00 01 00 01
|
|
283
|
-
00 00 02 58 00 04 0a 00 35 d0
|
|
274
|
+
a6 58 85 00 00 01 00 01 00 01 00 01 01 00 04 6e
|
|
275
|
+
20 6c 6c 02 65 67 09 73 65 63 72 65 74 2d 77 67
|
|
276
|
+
03 6f 72 67 00 00 10 00 01 c0 0c 00 10 00 01 00
|
|
277
|
+
00 00 00 00 14 13 4e 55 4c 4c 20 62 79 74 65 20
|
|
278
|
+
6f 77 6e 65 72 6e 61 6d 65 c0 13 00 02 00 01 00
|
|
279
|
+
00 02 58 00 05 02 6e 73 c0 13 c0 55 00 01 00 01
|
|
280
|
+
00 00 02 58 00 04 0a 00 35 d0
|
|
284
281
|
}
|
|
285
|
-
|
|
282
|
+
|
|
286
283
|
uuencodedPacket.map!{|e| e.hex}
|
|
287
284
|
packetdata = uuencodedPacket.pack('c*')
|
|
288
285
|
packetdata = packetdata.gsub("\s*", "")
|
|
289
286
|
packet = Message.decode(packetdata)
|
|
290
287
|
assert_equal( '\000.n\\032ll.eg.secret-wg.org',(packet.answer)[0].name.to_s,"Correctly dealt with NULL bytes in domain names")
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
#slightly modified \\ .eg.secret-wg.org instead of \\\\.eg.secret-wg.org
|
|
294
|
-
#
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
# slightly modified \\ .eg.secret-wg.org instead of \\\\.eg.secret-wg.org
|
|
291
|
+
# That is escaped backslash space
|
|
295
292
|
uuencodedPacket=%w{
|
|
296
|
-
c8 d5 85 00 00 01 00 01 00 01 00 01 02 5c 20 02
|
|
297
|
-
65 67 09 73 65 63 72 65 74 2d 77 67 03 6f 72 67
|
|
298
|
-
00 00 10 00 01 c0 0c 00 10 00 01 00 00 00 0a 00
|
|
299
|
-
0f 0e 57 69 6c 64 43 61 72 64 20 4d 61 74 63 68
|
|
300
|
-
c0 0f 00 02 00 01 00 00 02 58 00 05 02 6e 73 c0
|
|
301
|
-
0f c0 4c 00 01 00 01 00 00 02 58 00 04 0a 00 35
|
|
302
|
-
d0
|
|
293
|
+
c8 d5 85 00 00 01 00 01 00 01 00 01 02 5c 20 02
|
|
294
|
+
65 67 09 73 65 63 72 65 74 2d 77 67 03 6f 72 67
|
|
295
|
+
00 00 10 00 01 c0 0c 00 10 00 01 00 00 00 0a 00
|
|
296
|
+
0f 0e 57 69 6c 64 43 61 72 64 20 4d 61 74 63 68
|
|
297
|
+
c0 0f 00 02 00 01 00 00 02 58 00 05 02 6e 73 c0
|
|
298
|
+
0f c0 4c 00 01 00 01 00 00 02 58 00 04 0a 00 35
|
|
299
|
+
d0
|
|
303
300
|
}
|
|
304
|
-
|
|
301
|
+
|
|
305
302
|
uuencodedPacket.map!{|e| e.hex}
|
|
306
303
|
packetdata = uuencodedPacket.pack('c*')
|
|
307
304
|
packetdata.gsub!("\s*", "")
|
|
308
305
|
packet = Message.decode(packetdata)
|
|
309
|
-
|
|
310
|
-
|
|
306
|
+
|
|
307
|
+
|
|
311
308
|
assert_equal( '\\\\\\032.eg.secret-wg.org',(packet.answer)[0].name.to_s,"Correctly dealt escaped backslash from wireformat \\e.eg.secret-wg.org")
|
|
312
|
-
|
|
313
|
-
#slightly modified \\e.eg.secret-wg.org instead of \\\\.eg.secret-wg.org
|
|
309
|
+
|
|
310
|
+
# slightly modified \\e.eg.secret-wg.org instead of \\\\.eg.secret-wg.org
|
|
314
311
|
uuencodedPacket=%w{
|
|
315
|
-
c8 d5 85 00 00 01 00 01 00 01 00 01 02 5c 65 02
|
|
316
|
-
65 67 09 73 65 63 72 65 74 2d 77 67 03 6f 72 67
|
|
317
|
-
00 00 10 00 01 c0 0c 00 10 00 01 00 00 00 0a 00
|
|
318
|
-
0f 0e 57 69 6c 64 43 61 72 64 20 4d 61 74 63 68
|
|
319
|
-
c0 0f 00 02 00 01 00 00 02 58 00 05 02 6e 73 c0
|
|
320
|
-
0f c0 4c 00 01 00 01 00 00 02 58 00 04 0a 00 35
|
|
321
|
-
d0
|
|
312
|
+
c8 d5 85 00 00 01 00 01 00 01 00 01 02 5c 65 02
|
|
313
|
+
65 67 09 73 65 63 72 65 74 2d 77 67 03 6f 72 67
|
|
314
|
+
00 00 10 00 01 c0 0c 00 10 00 01 00 00 00 0a 00
|
|
315
|
+
0f 0e 57 69 6c 64 43 61 72 64 20 4d 61 74 63 68
|
|
316
|
+
c0 0f 00 02 00 01 00 00 02 58 00 05 02 6e 73 c0
|
|
317
|
+
0f c0 4c 00 01 00 01 00 00 02 58 00 04 0a 00 35
|
|
318
|
+
d0
|
|
322
319
|
}
|
|
323
|
-
|
|
324
|
-
#
|
|
325
|
-
#
|
|
326
|
-
#
|
|
320
|
+
|
|
321
|
+
# uuEncodedPacket =~ s/\s*//g
|
|
322
|
+
# packetdata = uuEncodedPacket.pack('H*')
|
|
323
|
+
# packetdata = packetdata.gsub("\s*", "")
|
|
327
324
|
uuencodedPacket.map!{|e| e.hex}
|
|
328
325
|
packetdata = uuencodedPacket.pack('c*')
|
|
329
326
|
packet = Message.decode(packetdata)
|
|
330
|
-
|
|
331
|
-
|
|
327
|
+
|
|
328
|
+
|
|
332
329
|
assert_equal( '\\\\e.eg.secret-wg.org',(packet.answer)[0].name.to_s,"Correctly dealt escaped backslash from wireformat \\e.eg.secret-wg.org")
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
#slightly modified \\\..eg.secret-wg.org instead of \\e.eg.secret-wg.org
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
# slightly modified \\\..eg.secret-wg.org instead of \\e.eg.secret-wg.org
|
|
336
333
|
uuencodedPacket=%w{
|
|
337
|
-
c8 d5 85 00 00 01 00 01 00 01 00 01 02 5c 65 02
|
|
338
|
-
65 67 09 73 65 63 72 65 74 2d 77 67 03 6f 72 67
|
|
339
|
-
00 00 10 00 01 c0 0c 00 10 00 01 00 00 00 0a 00
|
|
340
|
-
0f 0e 57 69 6c 64 43 61 72 64 20 4d 61 74 63 68
|
|
341
|
-
c0 0f 00 02 00 01 00 00 02 58 00 05 02 6e 73 c0
|
|
342
|
-
0f c0 4c 00 01 00 01 00 00 02 58 00 04 0a 00 35
|
|
343
|
-
d0
|
|
334
|
+
c8 d5 85 00 00 01 00 01 00 01 00 01 02 5c 65 02
|
|
335
|
+
65 67 09 73 65 63 72 65 74 2d 77 67 03 6f 72 67
|
|
336
|
+
00 00 10 00 01 c0 0c 00 10 00 01 00 00 00 0a 00
|
|
337
|
+
0f 0e 57 69 6c 64 43 61 72 64 20 4d 61 74 63 68
|
|
338
|
+
c0 0f 00 02 00 01 00 00 02 58 00 05 02 6e 73 c0
|
|
339
|
+
0f c0 4c 00 01 00 01 00 00 02 58 00 04 0a 00 35
|
|
340
|
+
d0
|
|
344
341
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
#
|
|
348
|
-
#
|
|
342
|
+
|
|
343
|
+
# # uuEncodedPacket =~ s/\s*//g
|
|
344
|
+
# packetdata = uuEncodedPacket.pack('H*')
|
|
345
|
+
# packetdata = packetdata.gsub("\s*", "")
|
|
349
346
|
uuencodedPacket.map!{|e| e.hex}
|
|
350
347
|
packetdata = uuencodedPacket.pack('c*')
|
|
351
348
|
packet = Message.decode(packetdata)
|
|
352
349
|
assert_equal( '\\\\e.eg.secret-wg.org',(packet.answer)[0].name.to_s,"Correctly dealt escaped backslash from wireformat \\\..eg.secret-wg.org")
|
|
353
|
-
|
|
350
|
+
|
|
354
351
|
testrr=RR.create(
|
|
355
352
|
:name => '\\e.eg.secret-wg.org',
|
|
356
353
|
:type => 'TXT',
|
|
@@ -358,27 +355,27 @@ d0
|
|
|
358
355
|
:ttl => 10,
|
|
359
356
|
:class => "IN"
|
|
360
357
|
)
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
klass = "IN"
|
|
365
|
-
ttl = 43200
|
|
366
|
-
name = 'def0au<.example.com'
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
klass = "IN"
|
|
362
|
+
ttl = 43200
|
|
363
|
+
name = 'def0au<.example.com'
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
|
|
370
367
|
rrs = [
|
|
371
|
-
{ #[0]
|
|
372
|
-
:name => '\..bla\..example.com',
|
|
373
|
-
:type => Types.A,
|
|
374
|
-
:address => '10.0.0.1',
|
|
368
|
+
{ #[0]
|
|
369
|
+
:name => '\..bla\..example.com',
|
|
370
|
+
:type => Types.A,
|
|
371
|
+
:address => '10.0.0.1',
|
|
375
372
|
},
|
|
376
373
|
{ #[2]
|
|
377
374
|
:name => name,
|
|
378
|
-
:type => 'AFSDB',
|
|
379
|
-
:subtype => 1,
|
|
380
|
-
:hostname =>'afsdb-hostname.example.com',
|
|
381
|
-
},
|
|
375
|
+
:type => 'AFSDB',
|
|
376
|
+
:subtype => 1,
|
|
377
|
+
:hostname =>'afsdb-hostname.example.com',
|
|
378
|
+
},
|
|
382
379
|
{ #[3]
|
|
383
380
|
:name => '\\.funny.example.com',
|
|
384
381
|
:type => Types::CNAME,
|
|
@@ -394,14 +391,14 @@ d0
|
|
|
394
391
|
:type => Types.MINFO,
|
|
395
392
|
:rmailbx => 'minfo\.rmailbx.example.com',
|
|
396
393
|
:emailbx => 'minfo\007emailbx.example.com',
|
|
397
|
-
},
|
|
398
|
-
|
|
394
|
+
},
|
|
395
|
+
|
|
399
396
|
{ #[13]
|
|
400
397
|
:name => name,
|
|
401
398
|
:type => Types.NS,
|
|
402
399
|
:domainname => '\001ns-nsdname.example.com',
|
|
403
400
|
},
|
|
404
|
-
|
|
401
|
+
|
|
405
402
|
{ #[19]
|
|
406
403
|
:name => name,
|
|
407
404
|
:type => Types.SOA,
|
|
@@ -413,40 +410,40 @@ d0
|
|
|
413
410
|
:expire => 2592000,
|
|
414
411
|
:minimum => 86400,
|
|
415
412
|
},
|
|
416
|
-
|
|
413
|
+
|
|
417
414
|
]
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
#
|
|
421
|
-
|
|
415
|
+
|
|
416
|
+
# ------------------------------------------------------------------------------
|
|
417
|
+
# Create the packet.
|
|
418
|
+
# ------------------------------------------------------------------------------
|
|
422
419
|
packet = nil
|
|
423
420
|
packet = Message.new(name)
|
|
424
421
|
assert(packet, 'Packet created')
|
|
425
|
-
|
|
422
|
+
|
|
426
423
|
rrs.each do |data|
|
|
427
424
|
data.update({:ttl => ttl,})
|
|
428
|
-
|
|
425
|
+
|
|
429
426
|
rec = RR.create(data)
|
|
430
427
|
packet.add_answer(rec)
|
|
431
428
|
end
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
#
|
|
436
|
-
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
# ------------------------------------------------------------------------------
|
|
432
|
+
# Re-create the packet from data.
|
|
433
|
+
# ------------------------------------------------------------------------------
|
|
437
434
|
data = packet.encode
|
|
438
|
-
|
|
435
|
+
|
|
439
436
|
assert(data, 'Packet has data after pushes')
|
|
440
|
-
|
|
437
|
+
|
|
441
438
|
packet = nil
|
|
442
|
-
|
|
439
|
+
|
|
443
440
|
packet = Message.decode(data)
|
|
444
|
-
|
|
441
|
+
|
|
445
442
|
assert(packet, 'Packet reconstructed from data')
|
|
446
|
-
|
|
443
|
+
|
|
447
444
|
answer = packet.answer
|
|
448
|
-
|
|
449
|
-
#
|
|
445
|
+
|
|
446
|
+
# assert(answer && answer == rrs, 'Packet returned correct answer section')
|
|
450
447
|
rrs.each do |rr|
|
|
451
448
|
record = nil
|
|
452
449
|
answer.each do |ansrec|
|
|
@@ -459,30 +456,30 @@ d0
|
|
|
459
456
|
rr.keys.each do |key|
|
|
460
457
|
if (key == :type)
|
|
461
458
|
assert_equal(Types.new(rr[key]).string, record.send(key).to_s, "value not right for key #{key} for rr #{rr}")
|
|
462
|
-
else
|
|
459
|
+
else
|
|
463
460
|
assert_equal(rr[key].to_s, record.send(key).to_s, "value not right for key #{key} for rr #{rr}")
|
|
464
461
|
end
|
|
465
462
|
end
|
|
466
463
|
end
|
|
467
|
-
|
|
468
|
-
|
|
464
|
+
|
|
465
|
+
|
|
469
466
|
while (answer.size>0 and rrs.size>0)
|
|
470
467
|
data = rrs.shift
|
|
471
468
|
rr = answer.shift
|
|
472
469
|
type = data[:type]
|
|
473
|
-
#
|
|
470
|
+
# foreach my $meth (keys %{$data}) {
|
|
474
471
|
(data.keys.each do |meth|
|
|
475
|
-
if (meth == :type)
|
|
472
|
+
if (meth == :type)
|
|
476
473
|
assert_equal(Types.new(data[meth]).to_s, rr.send(meth).to_s, "#{type} - #meth() correct")
|
|
477
474
|
else
|
|
478
475
|
assert_equal(data[meth].to_s, rr.send(meth).to_s, "#{type} - #meth() correct")
|
|
479
476
|
end
|
|
480
477
|
end)
|
|
481
|
-
|
|
478
|
+
|
|
482
479
|
rr2 = RR.new_from_string(rr.to_s)
|
|
483
480
|
assert_equal(rr.to_s, rr2.to_s, "#{type} - Parsing from string works")
|
|
484
481
|
end
|
|
485
|
-
|
|
482
|
+
|
|
486
483
|
Name::Label.set_max_length(Name::Label::MaxLabelLength)
|
|
487
484
|
end
|
|
488
485
|
end
|