dnsruby 1.55 → 1.56.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|