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_update.rb
CHANGED
|
@@ -1,37 +1,34 @@
|
|
|
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 TestUpdate < Test
|
|
20
|
+
class TestUpdate < Minitest::Test
|
|
24
21
|
def is_empty(string)
|
|
25
22
|
return true if string == nil || string.length == 0
|
|
26
|
-
|
|
23
|
+
|
|
27
24
|
return (string == "; no data" || string == "; rdlength = 0");
|
|
28
25
|
end
|
|
29
|
-
|
|
26
|
+
|
|
30
27
|
def test_update
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
# ------------------------------------------------------------------------------
|
|
29
|
+
# Canned data.
|
|
30
|
+
# ------------------------------------------------------------------------------
|
|
31
|
+
|
|
35
32
|
zone = "example.com";
|
|
36
33
|
name = "foo.example.com";
|
|
37
34
|
klass = Classes.CLASS32;
|
|
@@ -40,155 +37,155 @@ class TestUpdate < Test::Unit::TestCase
|
|
|
40
37
|
ttl = 43200;
|
|
41
38
|
rdata = "10.1.2.3";
|
|
42
39
|
rr = nil;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
#
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
|
|
41
|
+
# ------------------------------------------------------------------------------
|
|
42
|
+
# Packet creation.
|
|
43
|
+
# ------------------------------------------------------------------------------
|
|
44
|
+
|
|
48
45
|
update = Dnsruby::Update.new(zone, klass);
|
|
49
46
|
z = (update.zone)[0];
|
|
50
|
-
|
|
47
|
+
|
|
51
48
|
assert(update, 'new() returned packet'); #2
|
|
52
|
-
assert_equal(update.header.opcode, OpCode.UPDATE, 'header opcode correct'); #3
|
|
49
|
+
assert_equal(update.header.opcode, OpCode.UPDATE, 'header opcode correct'); #3
|
|
53
50
|
assert_equal(z.zname.to_s, zone, 'zname correct'); #4
|
|
54
51
|
assert_equal(z.zclass.to_s, klass.to_s, 'zclass correct'); #5
|
|
55
|
-
assert_equal(z.ztype, Types.SOA, 'ztype correct'); #6
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
#
|
|
59
|
-
|
|
60
|
-
|
|
52
|
+
assert_equal(z.ztype, Types.SOA, 'ztype correct'); #6
|
|
53
|
+
|
|
54
|
+
# ------------------------------------------------------------------------------
|
|
55
|
+
# RRset exists (value-independent).
|
|
56
|
+
# ------------------------------------------------------------------------------
|
|
57
|
+
|
|
61
58
|
rr = update.present(name, type);
|
|
62
|
-
|
|
59
|
+
|
|
63
60
|
assert(rr, 'yxrrset() returned RR'); #7
|
|
64
61
|
assert_equal(name, rr.name.to_s, 'yxrrset - right name'); #8
|
|
65
62
|
assert_equal(0, rr.ttl, 'yxrrset - right TTL'); #9
|
|
66
63
|
assert_equal('ANY', rr.klass.string, 'yxrrset - right class'); #10
|
|
67
64
|
assert_equal(type, rr.type, 'yxrrset - right type'); #11
|
|
68
65
|
assert(is_empty(rr.rdata), "yxrrset - data empty (#{rr.rdata})"); #12
|
|
69
|
-
|
|
66
|
+
|
|
70
67
|
rr = nil
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
#
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
|
|
69
|
+
# ------------------------------------------------------------------------------
|
|
70
|
+
# RRset exists (value-dependent).
|
|
71
|
+
# ------------------------------------------------------------------------------
|
|
72
|
+
|
|
76
73
|
rr = update.present(name, type, rdata, klass);
|
|
77
|
-
|
|
74
|
+
|
|
78
75
|
assert(rr, 'yxrrset() returned RR'); #13
|
|
79
76
|
assert_equal(name, rr.name.to_s, 'yxrrset - right name'); #14
|
|
80
77
|
assert_equal(0, rr.ttl, 'yxrrset - right TTL'); #15
|
|
81
78
|
assert_equal(klass, rr.klass.string, 'yxrrset - right class'); #16
|
|
82
79
|
assert_equal(type, rr.type, 'yxrrset - right type'); #17
|
|
83
80
|
assert_equal(rdata, rr.rdata, 'yxrrset - right data'); #18
|
|
84
|
-
|
|
81
|
+
|
|
85
82
|
rr=nil
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
#
|
|
89
|
-
|
|
90
|
-
|
|
83
|
+
|
|
84
|
+
# ------------------------------------------------------------------------------
|
|
85
|
+
# RRset does not exist.
|
|
86
|
+
# ------------------------------------------------------------------------------
|
|
87
|
+
|
|
91
88
|
rr = update.absent(name, type);
|
|
92
|
-
|
|
89
|
+
|
|
93
90
|
assert(rr, 'nxrrset() returned RR'); #19
|
|
94
91
|
assert_equal(name, rr.name.to_s, 'nxrrset - right name'); #20
|
|
95
92
|
assert_equal(0, rr.ttl, 'nxrrset - right ttl'); #21
|
|
96
93
|
assert_equal('NONE', rr.klass.string, 'nxrrset - right class'); #22
|
|
97
94
|
assert_equal(type, rr.type, 'nxrrset - right type'); #23
|
|
98
95
|
assert(is_empty(rr.rdata), 'nxrrset - data empty'); #24
|
|
99
|
-
|
|
96
|
+
|
|
100
97
|
rr = nil
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
#
|
|
104
|
-
|
|
105
|
-
|
|
98
|
+
|
|
99
|
+
# ------------------------------------------------------------------------------
|
|
100
|
+
# Name is in use.
|
|
101
|
+
# ------------------------------------------------------------------------------
|
|
102
|
+
|
|
106
103
|
rr = update.present(name);
|
|
107
|
-
|
|
104
|
+
|
|
108
105
|
assert(rr, 'yxdomain() returned RR'); #25
|
|
109
106
|
assert_equal(rr.name.to_s, name, 'yxdomain - right name'); #26
|
|
110
107
|
assert_equal(rr.ttl, 0, 'yxdomain - right ttl'); #27
|
|
111
108
|
assert_equal(rr.klass.string, 'ANY', 'yxdomain - right class'); #28
|
|
112
109
|
assert_equal(rr.type.string, 'ANY', 'yxdomain - right type'); #29
|
|
113
110
|
assert(is_empty(rr.rdata), 'yxdomain - data empty'); #30
|
|
114
|
-
|
|
111
|
+
|
|
115
112
|
rr = nil
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
#
|
|
119
|
-
|
|
120
|
-
|
|
113
|
+
|
|
114
|
+
# ------------------------------------------------------------------------------
|
|
115
|
+
# Name is not in use. (No Class)
|
|
116
|
+
# ------------------------------------------------------------------------------
|
|
117
|
+
|
|
121
118
|
rr = update.absent(name);
|
|
122
|
-
|
|
119
|
+
|
|
123
120
|
assert(rr, 'nxdomain() returned RR'); #31
|
|
124
121
|
assert_equal(rr.name.to_s, name, 'nxdomain - right name'); #32
|
|
125
122
|
assert_equal(rr.ttl, 0, 'nxdomain - right ttl'); #33
|
|
126
123
|
assert_equal(rr.klass.string, 'NONE', 'nxdomain - right class'); #34
|
|
127
124
|
assert_equal(rr.type.string, 'ANY', 'nxdomain - right type'); #35
|
|
128
125
|
assert(is_empty(rr.rdata), 'nxdomain - data empty'); #36
|
|
129
|
-
|
|
126
|
+
|
|
130
127
|
rr = nil
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
#
|
|
136
|
-
|
|
137
|
-
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
# ------------------------------------------------------------------------------
|
|
132
|
+
# Add to an RRset.
|
|
133
|
+
# ------------------------------------------------------------------------------
|
|
134
|
+
|
|
138
135
|
rr = update.add(name, type, ttl, rdata);
|
|
139
|
-
|
|
136
|
+
|
|
140
137
|
assert(rr, 'rr_add() returned RR'); #37
|
|
141
138
|
assert_equal(rr.name.to_s, name, 'rr_add - right name'); #38
|
|
142
139
|
assert_equal(rr.ttl, ttl, 'rr_add - right ttl'); #39
|
|
143
140
|
assert_equal(rr.klass, klass, 'rr_add - right class'); #40
|
|
144
141
|
assert_equal(rr.type, type, 'rr_add - right type'); #41
|
|
145
142
|
assert_equal(rr.rdata, rdata, 'rr_add - right data'); #42
|
|
146
|
-
|
|
143
|
+
|
|
147
144
|
rr = nil
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
#
|
|
151
|
-
|
|
152
|
-
|
|
145
|
+
|
|
146
|
+
# ------------------------------------------------------------------------------
|
|
147
|
+
# Delete an RRset.
|
|
148
|
+
# ------------------------------------------------------------------------------
|
|
149
|
+
|
|
153
150
|
rr = update.delete(name, type);
|
|
154
|
-
|
|
151
|
+
|
|
155
152
|
assert(rr, 'rr_del() returned RR'); #43
|
|
156
153
|
assert_equal(name, rr.name.to_s, 'rr_del - right name'); #44
|
|
157
154
|
assert_equal(0, rr.ttl, 'rr_del - right ttl'); #45
|
|
158
155
|
assert_equal('ANY', rr.klass.string, 'rr_del - right class'); #46
|
|
159
156
|
assert_equal(type, rr.type, 'rr_del - right type'); #47
|
|
160
157
|
assert(is_empty(rr.rdata), 'rr_del - data empty'); #48
|
|
161
|
-
|
|
158
|
+
|
|
162
159
|
rr = nil
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
#
|
|
166
|
-
|
|
167
|
-
|
|
160
|
+
|
|
161
|
+
# ------------------------------------------------------------------------------
|
|
162
|
+
# Delete All RRsets From A Name.
|
|
163
|
+
# ------------------------------------------------------------------------------
|
|
164
|
+
|
|
168
165
|
rr = update.delete(name);
|
|
169
|
-
|
|
166
|
+
|
|
170
167
|
assert(rr, 'rr_del() returned RR'); #49
|
|
171
168
|
assert_equal(name, rr.name.to_s, 'rr_del - right name'); #50
|
|
172
169
|
assert_equal(0, rr.ttl, 'rr_del - right ttl'); #51
|
|
173
170
|
assert_equal(Classes.ANY, rr.klass, 'rr_del - right class'); #52
|
|
174
171
|
assert_equal(Classes.ANY, rr.type, 'rr_del - right type'); #53
|
|
175
172
|
assert(is_empty(rr.rdata), 'rr_del - data empty'); #54
|
|
176
|
-
|
|
173
|
+
|
|
177
174
|
rr = nil
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
#
|
|
181
|
-
|
|
182
|
-
|
|
175
|
+
|
|
176
|
+
# ------------------------------------------------------------------------------
|
|
177
|
+
# Delete An RR From An RRset.
|
|
178
|
+
# ------------------------------------------------------------------------------
|
|
179
|
+
|
|
183
180
|
rr = update.delete(name, type, rdata);
|
|
184
|
-
|
|
181
|
+
|
|
185
182
|
assert(rr, 'rr_del() returned RR'); #55
|
|
186
183
|
assert_equal(name, rr.name.to_s, 'rr_del - right name'); #56
|
|
187
184
|
assert_equal(0, rr.ttl, 'rr_del - right ttl'); #57
|
|
188
185
|
assert_equal('NONE', rr.klass.string, 'rr_del - right class'); #58
|
|
189
186
|
assert_equal(type, rr.type, 'rr_del - right type'); #59
|
|
190
187
|
assert_equal(rdata, rr.rdata, 'rr_del - right data'); #60
|
|
191
|
-
|
|
188
|
+
|
|
192
189
|
rr = nil
|
|
193
190
|
|
|
194
191
|
data = update.encode
|
|
@@ -196,18 +193,18 @@ class TestUpdate < Test::Unit::TestCase
|
|
|
196
193
|
assert(header.opcode == OpCode.Update)
|
|
197
194
|
new_update = Message.decode(data)
|
|
198
195
|
assert(new_update.header.opcode == OpCode.Update)
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
#
|
|
202
|
-
#
|
|
203
|
-
|
|
204
|
-
|
|
196
|
+
|
|
197
|
+
# ------------------------------------------------------------------------------
|
|
198
|
+
# Make sure RRs in an update packet have the same class as the zone, unless
|
|
199
|
+
# the class is NONE or ANY.
|
|
200
|
+
# ------------------------------------------------------------------------------
|
|
201
|
+
|
|
205
202
|
update = Dnsruby::Update.new(zone, klass);
|
|
206
203
|
assert(update, 'packet created'); #61
|
|
207
|
-
|
|
208
|
-
|
|
204
|
+
|
|
205
|
+
|
|
209
206
|
update.present(name, type, rdata);
|
|
210
|
-
|
|
207
|
+
|
|
211
208
|
update.present(name, type, rdata);
|
|
212
209
|
|
|
213
210
|
update.present(name, type);
|
|
@@ -215,7 +212,7 @@ class TestUpdate < Test::Unit::TestCase
|
|
|
215
212
|
update.absent(name, type);
|
|
216
213
|
|
|
217
214
|
pre = update.pre;
|
|
218
|
-
|
|
215
|
+
|
|
219
216
|
assert_equal(3, pre.size, 'pushed inserted correctly'); #62
|
|
220
217
|
assert_equal(klass, pre[0].klass.string, 'first class right'); #63
|
|
221
218
|
assert_equal(Classes.ANY, pre[1].klass, 'third class right'); #65
|
data/test/tc_validator.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 TestValidator < Test
|
|
21
|
+
class TestValidator < Minitest::Test
|
|
22
22
|
def test_validation
|
|
23
23
|
# Dnsruby::TheLog.level = Logger::DEBUG
|
|
24
24
|
Dnsruby::Dnssec.clear_trusted_keys
|
|
@@ -41,11 +41,11 @@ class TestValidator < Test::Unit::TestCase
|
|
|
41
41
|
ret = Dnsruby::Dnssec.validate(r)
|
|
42
42
|
assert(ret, "Dnssec validation failed")
|
|
43
43
|
|
|
44
|
-
#
|
|
44
|
+
# @TODO@ Test other validation policies!!
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def test_resolver_cd_validation_fails
|
|
48
|
-
#
|
|
48
|
+
# Should be able to check Nominet test-zone here - no keys point to it
|
|
49
49
|
res = Resolver.new
|
|
50
50
|
res.dnssec=true
|
|
51
51
|
r = res.query("uk-dnssec.nic.uk", Dnsruby::Types.A)
|
|
@@ -53,20 +53,20 @@ class TestValidator < Test::Unit::TestCase
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def test_eventtype_api
|
|
56
|
-
#
|
|
56
|
+
# @TODO@ TEST THE Resolver::EventType interface!
|
|
57
57
|
print "Test EventType API!\n"
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def test_config_api
|
|
61
|
-
#
|
|
62
|
-
#
|
|
63
|
-
#
|
|
64
|
-
#
|
|
65
|
-
#
|
|
66
|
-
#
|
|
67
|
-
#
|
|
68
|
-
#
|
|
69
|
-
#
|
|
61
|
+
# @TODO@ Test the different configuration options for the validator,
|
|
62
|
+
# and their defaults
|
|
63
|
+
#
|
|
64
|
+
# Should be able to set :
|
|
65
|
+
# o Whether or not validation happens
|
|
66
|
+
# o The async API queue tuples etc.
|
|
67
|
+
# o Whether to use authoritative nameservers for validation
|
|
68
|
+
# o Whether to use authoritative nameservers generally
|
|
69
|
+
#
|
|
70
70
|
print "Test validation configuration options!\n"
|
|
71
71
|
end
|
|
72
72
|
|
data/test/tc_verifier.rb
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
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 VerifierTest < Test
|
|
19
|
+
class VerifierTest < Minitest::Test
|
|
21
20
|
|
|
22
21
|
def test_sha2
|
|
23
|
-
#
|
|
22
|
+
# Check if OpenSSL supports SHA2
|
|
24
23
|
have_sha2 = false
|
|
25
24
|
begin
|
|
26
25
|
OpenSSL::Digest::SHA256.new
|
|
@@ -28,7 +27,7 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
28
27
|
rescue Exception
|
|
29
28
|
end
|
|
30
29
|
if (have_sha2)
|
|
31
|
-
#
|
|
30
|
+
# print "OpenSSL supports SHA2\n"
|
|
32
31
|
do_test_sha256
|
|
33
32
|
do_test_sha512
|
|
34
33
|
do_test_nsec
|
|
@@ -72,13 +71,13 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
72
71
|
end
|
|
73
72
|
|
|
74
73
|
def test_se_query
|
|
75
|
-
#
|
|
74
|
+
# Run some queries on the .se zone
|
|
76
75
|
Dnsruby::Dnssec.clear_trusted_keys
|
|
77
76
|
Dnsruby::Dnssec.clear_trust_anchors
|
|
78
77
|
res = Dnsruby::Resolver.new(Dnsruby::Resolv.getaddress("a.ns.se"))
|
|
79
78
|
res.dnssec = true
|
|
80
79
|
r = res.query("se", Dnsruby::Types.ANY)
|
|
81
|
-
#
|
|
80
|
+
# See comment below
|
|
82
81
|
Dnsruby::Dnssec.anchor_verifier.add_trusted_key(r.answer.rrset("se", 'DNSKEY'))
|
|
83
82
|
nss = r.answer.rrset("se", 'NS')
|
|
84
83
|
ret = Dnsruby::Dnssec.verify_rrset(nss)
|
|
@@ -91,10 +90,10 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
91
90
|
res = Dnsruby::Resolver.new(Dnsruby::Resolv.getaddress("a.ns.se"))
|
|
92
91
|
res.udp_size = 5000
|
|
93
92
|
r = res.query("se", Dnsruby::Types.DNSKEY)
|
|
94
|
-
#
|
|
95
|
-
#
|
|
96
|
-
#
|
|
97
|
-
#
|
|
93
|
+
# This shouldn't be in the code - but the key is rotated by the .se registry
|
|
94
|
+
# so we can't keep up with it in the test code.
|
|
95
|
+
# Oh, for a signed root...
|
|
96
|
+
# print "Adding keys : #{r.answer.rrset("se", 'DNSKEY')}\n"
|
|
98
97
|
Dnsruby::Dnssec.anchor_verifier.add_trusted_key(r.answer.rrset("se", 'DNSKEY'))
|
|
99
98
|
ret = Dnsruby::Dnssec.verify(r)
|
|
100
99
|
assert(ret, "Dnssec message verification failed : #{ret}")
|
|
@@ -105,13 +104,13 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
105
104
|
Dnsruby::Dnssec.clear_trust_anchors
|
|
106
105
|
res = Dnsruby::Resolver.new("a.ns.se")
|
|
107
106
|
r = res.query("se", Dnsruby::Types.ANY)
|
|
108
|
-
#
|
|
107
|
+
# Haven't configured key for this, so should fail
|
|
109
108
|
begin
|
|
110
109
|
ret = Dnsruby::Dnssec.verify(r)
|
|
111
110
|
fail("Message shouldn't have verified")
|
|
112
111
|
rescue (Dnsruby::VerifyError)
|
|
113
112
|
end
|
|
114
|
-
#
|
|
113
|
+
# assert(!ret, "Dnssec message verification failed")
|
|
115
114
|
end
|
|
116
115
|
|
|
117
116
|
def test_trusted_key
|
|
@@ -129,7 +128,7 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
129
128
|
ret = Dnsruby::Dnssec.verify(r)
|
|
130
129
|
fail("Dnssec trusted key message verification should have failed with bad key")
|
|
131
130
|
rescue (Dnsruby::VerifyError)
|
|
132
|
-
#
|
|
131
|
+
# assert(!ret, "Dnssec trusted key message verification should have failed with bad key")
|
|
133
132
|
end
|
|
134
133
|
trusted_key = Dnsruby::RR.create({:name => "uk-dnssec.nic.uk.",
|
|
135
134
|
:type => Dnsruby::Types.DNSKEY,
|
|
@@ -142,14 +141,14 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
142
141
|
ret = Dnsruby::Dnssec.verify(r)
|
|
143
142
|
assert(ret, "Dnssec trusted key message verification failed")
|
|
144
143
|
|
|
145
|
-
#
|
|
146
|
-
#
|
|
147
|
-
#
|
|
144
|
+
# # Check that keys have been added to trusted key cache
|
|
145
|
+
# ret = Dnsruby::Dnssec.verify(r)
|
|
146
|
+
# assert(ret, "Dnssec trusted key cache failed")
|
|
148
147
|
end
|
|
149
148
|
|
|
150
149
|
def test_expired_keys
|
|
151
|
-
#
|
|
152
|
-
#
|
|
150
|
+
# Add some keys with an expiration of 1 second.
|
|
151
|
+
# Then wait a second or two, and check they are not available any more.
|
|
153
152
|
Dnsruby::Dnssec.clear_trusted_keys
|
|
154
153
|
Dnsruby::Dnssec.clear_trust_anchors
|
|
155
154
|
assert(Dnsruby::Dnssec.anchor_verifier.trusted_keys.length==0)
|
|
@@ -164,30 +163,30 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
164
163
|
end
|
|
165
164
|
|
|
166
165
|
def test_tcp
|
|
167
|
-
#These queries work:
|
|
168
|
-
#
|
|
169
|
-
#
|
|
170
|
-
#
|
|
166
|
+
# These queries work:
|
|
167
|
+
# dig @194.0.1.13 isoc.lu dnskey
|
|
168
|
+
# dig @194.0.1.13 isoc.lu dnskey +dnssec
|
|
169
|
+
# dig @194.0.1.13 isoc.lu dnskey +tcp
|
|
171
170
|
|
|
172
|
-
#This one does not
|
|
173
|
-
#
|
|
174
|
-
#
|
|
171
|
+
# This one does not
|
|
172
|
+
#
|
|
173
|
+
# dig @194.0.1.13 isoc.lu dnskey +dnssec +tcp
|
|
175
174
|
r = Dnsruby::SingleResolver.new()# "194.0.1.13")
|
|
176
175
|
r.dnssec = true
|
|
177
176
|
r.use_tcp = true
|
|
178
177
|
ret = r.query("isoc.lu", Dnsruby::Types.DNSKEY)
|
|
179
|
-
#
|
|
178
|
+
# print ret.to_s+"\n"
|
|
180
179
|
|
|
181
180
|
r = Dnsruby::SingleResolver.new("194.0.1.13")
|
|
182
181
|
r.dnssec = true
|
|
183
|
-
#r.use_tcp = true
|
|
182
|
+
# r.use_tcp = true
|
|
184
183
|
ret = r.query("isoc.lu", Dnsruby::Types.DNSKEY)
|
|
185
|
-
#
|
|
184
|
+
# print ret.to_s+"\n"
|
|
186
185
|
|
|
187
186
|
r.use_tcp = true
|
|
188
187
|
r.dnssec = false
|
|
189
188
|
ret = r.query("isoc.lu", Dnsruby::Types.DNSKEY)
|
|
190
|
-
#
|
|
189
|
+
# print ret.to_s+"\n"
|
|
191
190
|
|
|
192
191
|
r.dnssec = true
|
|
193
192
|
begin
|
|
@@ -214,7 +213,7 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
214
213
|
end
|
|
215
214
|
|
|
216
215
|
def test_dsa
|
|
217
|
-
#
|
|
216
|
+
# Let's check sources.org for DSA keys
|
|
218
217
|
Dnsruby::Dnssec.clear_trusted_keys
|
|
219
218
|
Dnsruby::Dnssec.clear_trust_anchors
|
|
220
219
|
res = Dnsruby::Recursor.new()
|
|
@@ -228,11 +227,11 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
228
227
|
end
|
|
229
228
|
}
|
|
230
229
|
assert(dsa)
|
|
231
|
-
#
|
|
230
|
+
# Now do something with it
|
|
232
231
|
|
|
233
232
|
response = res.query("sources.org", Dnsruby::Types.ANY)
|
|
234
233
|
verified = 0
|
|
235
|
-
#
|
|
234
|
+
# response.each_section {|sec|
|
|
236
235
|
response.answer.rrsets.each {|rs|
|
|
237
236
|
if (rs.sigs()[0].algorithm == Dnsruby::Algorithms.DSA &&
|
|
238
237
|
rs.sigs()[0].key_tag == dsa.key_tag)
|
|
@@ -241,7 +240,7 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
241
240
|
verified+=1
|
|
242
241
|
end
|
|
243
242
|
}
|
|
244
|
-
#
|
|
243
|
+
# }
|
|
245
244
|
assert(verified > 0)
|
|
246
245
|
end
|
|
247
246
|
|
|
@@ -325,42 +324,42 @@ class VerifierTest < Test::Unit::TestCase
|
|
|
325
324
|
# zone2 = reader.process_file("cacert.signed.txt")
|
|
326
325
|
# assert(zone[1].to_s.index("DAQAB\""))
|
|
327
326
|
# assert(zone2[1].to_s.index("DAQAB\""))
|
|
328
|
-
#
|
|
327
|
+
#
|
|
329
328
|
# assert(zone[1].to_s == zone2[1].to_s)
|
|
330
329
|
# end
|
|
331
|
-
#
|
|
332
|
-
#
|
|
333
|
-
#
|
|
334
|
-
#
|
|
335
|
-
#
|
|
336
|
-
#
|
|
337
|
-
#
|
|
338
|
-
#
|
|
339
|
-
#
|
|
340
|
-
#
|
|
341
|
-
#
|
|
342
|
-
#
|
|
343
|
-
#
|
|
344
|
-
#
|
|
345
|
-
#
|
|
346
|
-
#
|
|
347
|
-
#
|
|
330
|
+
#
|
|
331
|
+
# def test_txt_from_zone
|
|
332
|
+
# reader = Dnsruby::ZoneReader.new("all.rr.org.")
|
|
333
|
+
# zone = reader.process_file("zone.txt")
|
|
334
|
+
# rrset = Dnsruby::RRSet.new
|
|
335
|
+
# key_rrset = Dnsruby::RRSet.new
|
|
336
|
+
# zone.each {|rr|
|
|
337
|
+
# if ( (rr.type == Dnsruby::Types.TXT) || ((rr.type == Dnsruby::Types.RRSIG) && (rr.type_covered == Dnsruby::Types.TXT)))
|
|
338
|
+
# rrset.add(rr)
|
|
339
|
+
# end
|
|
340
|
+
# if (rr.type == Dnsruby::Types.DNSKEY)
|
|
341
|
+
# key_rrset.add(rr)
|
|
342
|
+
# end
|
|
343
|
+
# }
|
|
344
|
+
# verifier = Dnsruby::SingleVerifier.new(Dnsruby::SingleVerifier::VerifierType::ANCHOR)
|
|
345
|
+
# verifier.verify_rrset(rrset, key_rrset)
|
|
346
|
+
# end
|
|
348
347
|
|
|
349
|
-
#
|
|
350
|
-
#
|
|
351
|
-
#
|
|
352
|
-
#
|
|
353
|
-
#
|
|
354
|
-
#
|
|
355
|
-
#
|
|
356
|
-
#
|
|
357
|
-
#
|
|
358
|
-
#
|
|
359
|
-
#
|
|
360
|
-
#
|
|
361
|
-
#
|
|
362
|
-
#
|
|
363
|
-
#
|
|
364
|
-
#
|
|
348
|
+
# def test_naptr_from_zone
|
|
349
|
+
# reader = Dnsruby::ZoneReader.new("all.rr.org.")
|
|
350
|
+
# zone = reader.process_file("zone.txt")
|
|
351
|
+
# rrset = Dnsruby::RRSet.new
|
|
352
|
+
# key_rrset = Dnsruby::RRSet.new
|
|
353
|
+
# zone.each {|rr|
|
|
354
|
+
# if ((rr.type == Dnsruby::Types.NAPTR) || ((rr.type == Dnsruby::Types.RRSIG) && (rr.type_covered == Dnsruby::Types.NAPTR)))
|
|
355
|
+
# rrset.add(rr)
|
|
356
|
+
# end
|
|
357
|
+
# if (rr.type == Dnsruby::Types.DNSKEY)
|
|
358
|
+
# key_rrset.add(rr)
|
|
359
|
+
# end
|
|
360
|
+
# }
|
|
361
|
+
# verifier = Dnsruby::SingleVerifier.new(Dnsruby::SingleVerifier::VerifierType::ANCHOR)
|
|
362
|
+
# verifier.verify_rrset(rrset, key_rrset)
|
|
363
|
+
# end
|
|
365
364
|
end
|
|
366
365
|
|