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.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -0
  3. data/Rakefile +30 -29
  4. data/demo/axfr.rb +93 -93
  5. data/demo/check_soa.rb +99 -99
  6. data/demo/check_zone.rb +59 -59
  7. data/demo/digdlv.rb +43 -43
  8. data/demo/digroot.rb +34 -34
  9. data/demo/example_recurse.rb +14 -14
  10. data/demo/mresolv.rb +30 -30
  11. data/demo/mx.rb +31 -31
  12. data/demo/rubydig.rb +37 -37
  13. data/demo/to_resolve.txt +3088 -3088
  14. data/demo/trace_dns.rb +46 -46
  15. data/lib/dnsruby.rb +161 -526
  16. data/lib/dnsruby/DNS.rb +305 -0
  17. data/lib/{Dnsruby/Cache.rb → dnsruby/cache.rb} +152 -152
  18. data/lib/{Dnsruby → dnsruby}/code_mapper.rb +48 -52
  19. data/lib/dnsruby/code_mappers.rb +295 -0
  20. data/lib/{Dnsruby/Config.rb → dnsruby/config.rb} +454 -454
  21. data/lib/{Dnsruby → dnsruby}/dnssec.rb +91 -91
  22. data/lib/{Dnsruby/Hosts.rb → dnsruby/hosts.rb} +125 -125
  23. data/lib/{Dnsruby → dnsruby}/ipv4.rb +26 -26
  24. data/lib/{Dnsruby → dnsruby}/ipv6.rb +42 -42
  25. data/lib/{Dnsruby → dnsruby}/key_cache.rb +29 -29
  26. data/lib/dnsruby/message/decoder.rb +164 -0
  27. data/lib/dnsruby/message/encoder.rb +75 -0
  28. data/lib/dnsruby/message/header.rb +249 -0
  29. data/lib/dnsruby/message/message.rb +629 -0
  30. data/lib/dnsruby/message/question.rb +86 -0
  31. data/lib/dnsruby/message/section.rb +96 -0
  32. data/lib/{Dnsruby → dnsruby}/name.rb +141 -141
  33. data/lib/dnsruby/packet_sender.rb +661 -0
  34. data/lib/{Dnsruby/Recursor.rb → dnsruby/recursor.rb} +235 -233
  35. data/lib/dnsruby/resolv.rb +113 -0
  36. data/lib/dnsruby/resolver.rb +1192 -0
  37. data/lib/dnsruby/resource/A.rb +56 -0
  38. data/lib/dnsruby/resource/AAAA.rb +54 -0
  39. data/lib/{Dnsruby → dnsruby}/resource/AFSDB.rb +68 -68
  40. data/lib/{Dnsruby → dnsruby}/resource/CERT.rb +105 -105
  41. data/lib/{Dnsruby → dnsruby}/resource/DHCID.rb +54 -54
  42. data/lib/dnsruby/resource/DLV.rb +27 -0
  43. data/lib/{Dnsruby → dnsruby}/resource/DNSKEY.rb +372 -372
  44. data/lib/{Dnsruby → dnsruby}/resource/DS.rb +255 -255
  45. data/lib/{Dnsruby → dnsruby}/resource/HINFO.rb +71 -71
  46. data/lib/{Dnsruby → dnsruby}/resource/HIP.rb +29 -29
  47. data/lib/{Dnsruby → dnsruby}/resource/IN.rb +30 -30
  48. data/lib/{Dnsruby → dnsruby}/resource/IPSECKEY.rb +31 -31
  49. data/lib/{Dnsruby → dnsruby}/resource/ISDN.rb +62 -62
  50. data/lib/{Dnsruby → dnsruby}/resource/KX.rb +65 -65
  51. data/lib/{Dnsruby → dnsruby}/resource/LOC.rb +263 -263
  52. data/lib/{Dnsruby → dnsruby}/resource/MINFO.rb +69 -69
  53. data/lib/{Dnsruby → dnsruby}/resource/MX.rb +65 -65
  54. data/lib/{Dnsruby → dnsruby}/resource/NAPTR.rb +98 -98
  55. data/lib/{Dnsruby → dnsruby}/resource/NSAP.rb +171 -171
  56. data/lib/dnsruby/resource/NSEC.rb +275 -0
  57. data/lib/dnsruby/resource/NSEC3.rb +332 -0
  58. data/lib/dnsruby/resource/NSEC3PARAM.rb +135 -0
  59. data/lib/dnsruby/resource/OPT.rb +272 -0
  60. data/lib/{Dnsruby → dnsruby}/resource/PX.rb +70 -70
  61. data/lib/{Dnsruby → dnsruby}/resource/RP.rb +75 -75
  62. data/lib/dnsruby/resource/RR.rb +421 -0
  63. data/lib/dnsruby/resource/RRSIG.rb +275 -0
  64. data/lib/dnsruby/resource/RRSet.rb +190 -0
  65. data/lib/{Dnsruby → dnsruby}/resource/RT.rb +67 -67
  66. data/lib/{Dnsruby → dnsruby}/resource/SOA.rb +94 -94
  67. data/lib/dnsruby/resource/SPF.rb +29 -0
  68. data/lib/dnsruby/resource/SRV.rb +112 -0
  69. data/lib/{Dnsruby → dnsruby}/resource/SSHFP.rb +14 -14
  70. data/lib/dnsruby/resource/TKEY.rb +163 -0
  71. data/lib/dnsruby/resource/TSIG.rb +593 -0
  72. data/lib/{Dnsruby → dnsruby}/resource/TXT.rb +191 -191
  73. data/lib/dnsruby/resource/X25.rb +55 -0
  74. data/lib/{Dnsruby → dnsruby}/resource/domain_name.rb +25 -25
  75. data/lib/{Dnsruby → dnsruby}/resource/generic.rb +80 -80
  76. data/lib/dnsruby/resource/resource.rb +25 -0
  77. data/lib/{Dnsruby → dnsruby}/select_thread.rb +148 -148
  78. data/lib/{Dnsruby/SingleResolver.rb → dnsruby/single_resolver.rb} +60 -60
  79. data/lib/{Dnsruby → dnsruby}/single_verifier.rb +344 -344
  80. data/lib/dnsruby/the_log.rb +44 -0
  81. data/lib/dnsruby/update.rb +278 -0
  82. data/lib/dnsruby/validator_thread.rb +124 -0
  83. data/lib/dnsruby/version.rb +3 -0
  84. data/lib/{Dnsruby → dnsruby}/zone_reader.rb +93 -93
  85. data/lib/{Dnsruby → dnsruby}/zone_transfer.rb +377 -377
  86. data/test/spec_helper.rb +16 -0
  87. data/test/tc_axfr.rb +31 -34
  88. data/test/tc_cache.rb +32 -32
  89. data/test/tc_dlv.rb +28 -28
  90. data/test/tc_dns.rb +73 -76
  91. data/test/tc_dnskey.rb +31 -32
  92. data/test/tc_dnsruby.rb +50 -44
  93. data/test/tc_ds.rb +36 -36
  94. data/test/tc_escapedchars.rb +252 -255
  95. data/test/tc_hash.rb +17 -21
  96. data/test/tc_header.rb +48 -57
  97. data/test/tc_hip.rb +19 -22
  98. data/test/tc_ipseckey.rb +18 -21
  99. data/test/tc_keith.rb +300 -0
  100. data/test/tc_message.rb +87 -0
  101. data/test/tc_misc.rb +83 -87
  102. data/test/tc_name.rb +81 -84
  103. data/test/tc_naptr.rb +18 -21
  104. data/test/tc_nsec.rb +55 -55
  105. data/test/tc_nsec3.rb +23 -24
  106. data/test/tc_nsec3param.rb +20 -21
  107. data/test/tc_packet.rb +90 -93
  108. data/test/tc_packet_unique_push.rb +48 -51
  109. data/test/tc_question.rb +30 -33
  110. data/test/tc_queue.rb +16 -17
  111. data/test/tc_recur.rb +16 -17
  112. data/test/tc_res_config.rb +38 -41
  113. data/test/tc_res_env.rb +29 -32
  114. data/test/tc_res_file.rb +26 -29
  115. data/test/tc_res_opt.rb +62 -65
  116. data/test/tc_resolver.rb +287 -242
  117. data/test/tc_rr-opt.rb +70 -63
  118. data/test/tc_rr-txt.rb +68 -71
  119. data/test/tc_rr-unknown.rb +45 -48
  120. data/test/tc_rr.rb +76 -70
  121. data/test/tc_rrset.rb +21 -22
  122. data/test/tc_rrsig.rb +19 -20
  123. data/test/tc_single_resolver.rb +294 -297
  124. data/test/tc_soak.rb +199 -202
  125. data/test/tc_soak_base.rb +29 -34
  126. data/test/tc_sshfp.rb +20 -23
  127. data/test/tc_tcp.rb +32 -35
  128. data/test/tc_tkey.rb +41 -44
  129. data/test/tc_tsig.rb +81 -84
  130. data/test/tc_update.rb +108 -111
  131. data/test/tc_validator.rb +29 -29
  132. data/test/tc_verifier.rb +81 -82
  133. data/test/ts_dnsruby.rb +16 -15
  134. data/test/ts_offline.rb +62 -63
  135. data/test/ts_online.rb +115 -115
  136. metadata +155 -90
  137. data/README +0 -59
  138. data/lib/Dnsruby/DNS.rb +0 -305
  139. data/lib/Dnsruby/PacketSender.rb +0 -656
  140. data/lib/Dnsruby/Resolver.rb +0 -1189
  141. data/lib/Dnsruby/TheLog.rb +0 -44
  142. data/lib/Dnsruby/message.rb +0 -1230
  143. data/lib/Dnsruby/resource/A.rb +0 -56
  144. data/lib/Dnsruby/resource/AAAA.rb +0 -54
  145. data/lib/Dnsruby/resource/DLV.rb +0 -27
  146. data/lib/Dnsruby/resource/NSEC.rb +0 -298
  147. data/lib/Dnsruby/resource/NSEC3.rb +0 -340
  148. data/lib/Dnsruby/resource/NSEC3PARAM.rb +0 -135
  149. data/lib/Dnsruby/resource/OPT.rb +0 -213
  150. data/lib/Dnsruby/resource/RRSIG.rb +0 -275
  151. data/lib/Dnsruby/resource/SPF.rb +0 -29
  152. data/lib/Dnsruby/resource/SRV.rb +0 -112
  153. data/lib/Dnsruby/resource/TKEY.rb +0 -163
  154. data/lib/Dnsruby/resource/TSIG.rb +0 -593
  155. data/lib/Dnsruby/resource/X25.rb +0 -55
  156. data/lib/Dnsruby/resource/resource.rb +0 -678
  157. data/lib/Dnsruby/update.rb +0 -278
  158. data/lib/Dnsruby/validator_thread.rb +0 -124
data/test/tc_sshfp.rb CHANGED
@@ -1,27 +1,24 @@
1
-
2
- #--
3
- #Copyright 2007 Nominet UK
4
- #
5
- #Licensed under the Apache License, Version 2.0 (the "License");
6
- #you may not use this file except in compliance with the License.
7
- #You may obtain a copy of the License at
8
- #
1
+
2
+ # --
3
+ # Copyright 2007 Nominet UK
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
9
  # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- #Unless required by applicable law or agreed to in writing, software
12
- #distributed under the License is distributed on an "AS IS" BASIS,
13
- #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- #See the License for the specific language governing permissions and
15
- #limitations under the License.
16
- #++
17
- begin
18
- require 'rubygems'
19
- rescue LoadError
20
- end
21
- require 'test/unit'
22
- require 'dnsruby'
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ # ++
17
+
18
+ require_relative 'spec_helper'
19
+
23
20
  include Dnsruby
24
- class TestSSHFP < Test::Unit::TestCase
21
+ class TestSSHFP < Minitest::Test
25
22
  def test_sshfp
26
23
  txt = "apt-blade6.nominet.org.uk. 85826 IN SSHFP 1 1 6D4CF7C68E3A959990855099E15D6E0D4DEA4FFF"
27
24
  sshfp = RR.create(txt)
@@ -29,7 +26,7 @@ class TestSSHFP < Test::Unit::TestCase
29
26
  assert(sshfp.alg == RR::SSHFP::Algorithms.RSA)
30
27
  assert(sshfp.fptype == RR::SSHFP::FpTypes.SHA1)
31
28
  assert(sshfp.fp.unpack("H*")[0].upcase == "6D4CF7C68E3A959990855099E15D6E0D4DEA4FFF")
32
-
29
+
33
30
  m = Dnsruby::Message.new
34
31
  m.add_additional(sshfp)
35
32
  data = m.encode
data/test/tc_tcp.rb CHANGED
@@ -1,26 +1,23 @@
1
- #--
2
- #Copyright 2007 Nominet UK
3
- #
4
- #Licensed under the Apache License, Version 2.0 (the "License");
5
- #you may not use this file except in compliance with the License.
6
- #You may obtain a copy of the License at
7
- #
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
- begin
17
- require 'rubygems'
18
- rescue LoadError
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
  require 'socket'
23
- class TestTcp < Test::Unit::TestCase
20
+ class TestTcp < Minitest::Test
24
21
  def test_TCP
25
22
  res = Dnsruby::Resolver.new()
26
23
  res.use_tcp = true
@@ -28,7 +25,7 @@ class TestTcp < Test::Unit::TestCase
28
25
  assert(ret.is_a?(Dnsruby::Message))
29
26
  end
30
27
  def test_TCP_port
31
- # Need a test server so we can tell what port this message was actually sent on!
28
+ # Need a test server so we can tell what port this message was actually sent on!
32
29
  port = nil
33
30
  src_port = 57923
34
31
  Dnsruby::PacketSender.clear_caches
@@ -37,7 +34,7 @@ class TestTcp < Test::Unit::TestCase
37
34
  ts = TCPServer.new(0)
38
35
  port = ts.addr[1]
39
36
  t = ts.accept
40
- # Check that the source port was src_port
37
+ # Check that the source port was src_port
41
38
  received_port = t.peeraddr()[1]
42
39
  packet = t.recvfrom(2)[0]
43
40
 
@@ -69,7 +66,7 @@ class TestTcp < Test::Unit::TestCase
69
66
  assert(received_port == src_port)
70
67
  assert(ret.is_a?(Dnsruby::Message))
71
68
  end
72
-
69
+
73
70
  # def test_no_tcp
74
71
  # # Try to get a long response (which is truncated) and check that we have
75
72
  # @TODO@ FIX THIS TEST!!!
@@ -86,7 +83,7 @@ class TestTcp < Test::Unit::TestCase
86
83
  @additional = Dnsruby::Message::Section.new(self)
87
84
  end
88
85
 
89
- #Decode the encoded message
86
+ # Decode the encoded message
90
87
  def HackMessage.decode(m)
91
88
  o = HackMessage.new()
92
89
  begin
@@ -118,9 +115,9 @@ class TestTcp < Test::Unit::TestCase
118
115
  }
119
116
  }
120
117
  rescue Dnsruby::DecodeError => e
121
- # So we got a decode error
122
- # However, we might have been able to fill in many parts of the message
123
- # So let's raise the DecodeError, but add the partially completed message
118
+ # So we got a decode error
119
+ # However, we might have been able to fill in many parts of the message
120
+ # So let's raise the DecodeError, but add the partially completed message
124
121
  e.partial_message = o
125
122
  raise e
126
123
  end
@@ -130,10 +127,10 @@ class TestTcp < Test::Unit::TestCase
130
127
  end
131
128
 
132
129
  def test_bad_truncation
133
- # Some servers don't do truncation properly.
134
- # Make a UDP server which returns large badly formatted packets (arcount > num_additional), with TC bit set
135
- # And make a TCP server which returns large well formatted packets
136
- # Then make sure that Dnsruby recieves response correctly.
130
+ # Some servers don't do truncation properly.
131
+ # Make a UDP server which returns large badly formatted packets (arcount > num_additional), with TC bit set
132
+ #  And make a TCP server which returns large well formatted packets
133
+ # Then make sure that Dnsruby recieves response correctly.
137
134
  Dnsruby::PacketSender.clear_caches
138
135
  socket = UDPSocket.new
139
136
  socket.bind("127.0.0.1", 0)
@@ -176,7 +173,7 @@ class TestTcp < Test::Unit::TestCase
176
173
 
177
174
 
178
175
 
179
- # Now send query
176
+ # Now send query
180
177
  res = Dnsruby::Resolver.new("127.0.0.1")
181
178
  res.port = port
182
179
  res.udp_size = 4096
@@ -190,5 +187,5 @@ class TestTcp < Test::Unit::TestCase
190
187
 
191
188
  end
192
189
 
193
- #@TODO@ Check stuff like persistent sockets
190
+ # @TODO@ Check stuff like persistent sockets
194
191
  end
data/test/tc_tkey.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
- begin
17
- require 'rubygems'
18
- rescue LoadError
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
  require "digest/md5"
23
- class TestTKey < Test::Unit::TestCase
20
+ class TestTKey < Minitest::Test
24
21
  def is_empty(string)
25
22
  return (string == "; no data" || string == "; rdlength = 0")
26
23
  end
27
-
24
+
28
25
  def test_tkey
29
-
30
-
31
- #------------------------------------------------------------------------------
32
- # Canned data.
33
- #------------------------------------------------------------------------------
34
-
26
+
27
+
28
+ # ------------------------------------------------------------------------------
29
+ # Canned data.
30
+ # ------------------------------------------------------------------------------
31
+
35
32
  zone = "example.com"
36
33
  name = "123456789-test"
37
34
  klass = "IN"
@@ -39,15 +36,15 @@ class TestTKey < Test::Unit::TestCase
39
36
  algorithm = "fake.algorithm.example.com"
40
37
  key = "fake key"
41
38
  inception = 100000 # use a strange fixed inception time to give a fixed
42
- # checksum
39
+ # checksum
43
40
  expiration = inception + 24*60*60
44
-
41
+
45
42
  rr = nil
46
-
47
- #------------------------------------------------------------------------------
48
- # Packet creation.
49
- #------------------------------------------------------------------------------
50
-
43
+
44
+ # ------------------------------------------------------------------------------
45
+ # Packet creation.
46
+ # ------------------------------------------------------------------------------
47
+
51
48
  rr = Dnsruby::RR.create(
52
49
  :name => name,
53
50
  :type => "TKEY",
@@ -60,20 +57,20 @@ class TestTKey < Test::Unit::TestCase
60
57
  :key => "fake key",
61
58
  :other_data => ""
62
59
  )
63
-
60
+
64
61
  packet = Dnsruby::Message.new(name, Dnsruby::Types.TKEY, "IN")
65
62
  packet.add_answer(rr)
66
-
63
+
67
64
  z = (packet.zone)[0]
68
-
65
+
69
66
  assert(packet, 'new() returned packet') #2
70
- assert_equal(Dnsruby::OpCode.QUERY, packet.header.opcode, 'header opcode correct') #3
67
+ assert_equal(Dnsruby::OpCode.QUERY, packet.header.opcode, 'header opcode correct') #3
71
68
  assert_equal(name, z.zname.to_s, 'zname correct') #4
72
69
  assert_equal(Dnsruby::Classes.IN, z.zclass, 'zclass correct') #5
73
- assert_equal(Dnsruby::Types.TKEY, z.ztype, 'ztype correct') #6
74
-
75
- #@TODO@ Test TKEY against server!
76
-
70
+ assert_equal(Dnsruby::Types.TKEY, z.ztype, 'ztype correct') #6
71
+
72
+ # @TODO@ Test TKEY against server!
73
+
77
74
  end
78
75
 
79
76
  end
data/test/tc_tsig.rb CHANGED
@@ -1,53 +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
- #
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
- begin
17
- require 'rubygems'
18
- rescue LoadError
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
  require "digest/md5"
23
20
  include Dnsruby
24
- class TestTSig < Test::Unit::TestCase
21
+ class TestTSig < Minitest::Test
25
22
  KEY_NAME="rubytsig"
26
23
  KEY = "8n6gugn4aJ7MazyNlMccGKH1WxD2B3UvN/O/RA6iBupO2/03u9CTa3Ewz3gBWTSBCH3crY4Kk+tigNdeJBAvrw=="
27
24
  def is_empty(string)
28
25
  return (string == "; no data" || string == "; rdlength = 0")
29
26
  end
30
27
  def test_signed_update
31
- # Dnsruby::Resolver::use_eventmachine(false)
28
+ # Dnsruby::Resolver::use_eventmachine(false)
32
29
  run_test_client_signs
33
30
  run_test_resolver_signs
34
31
  end
35
- # def test_signed_update_em
36
- # begin
37
- # Dnsruby::Resolver::use_eventmachine(true)
38
- # rescue RuntimeError
39
- # Dnsruby.log.error("EventMachine not installed - not running tsig EM tests")
40
- # return
41
- # end
42
- # run_test_client_signs
43
- # run_test_resolver_signs
44
- # Dnsruby::Resolver::use_eventmachine(false)
45
- # end
46
-
32
+ # def test_signed_update_em
33
+ # begin
34
+ # Dnsruby::Resolver::use_eventmachine(true)
35
+ # rescue RuntimeError
36
+ # Dnsruby.log.error("EventMachine not installed - not running tsig EM tests")
37
+ # return
38
+ # end
39
+ # run_test_client_signs
40
+ # run_test_resolver_signs
41
+ # Dnsruby::Resolver::use_eventmachine(false)
42
+ # end
43
+
47
44
  def run_test_client_signs
48
- # NOTE - client signing is only appropriate if DNSSEC and EDNS are switched
49
- # off. Otherwise, the resolver will attempt to alter the flags and add an
50
- # EDNS OPT psuedo-record to the query message, invalidating the signing.
45
+ # NOTE - client signing is only appropriate if DNSSEC and EDNS are switched
46
+ # off. Otherwise, the resolver will attempt to alter the flags and add an
47
+ # EDNS OPT psuedo-record to the query message, invalidating the signing.
51
48
  tsig = Dnsruby::RR.create({
52
49
  :name => KEY_NAME,
53
50
  :type => "TSIG",
@@ -58,30 +55,30 @@ class TestTSig < Test::Unit::TestCase
58
55
  :key => KEY,
59
56
  :error => 0
60
57
  })
61
-
58
+
62
59
  update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
63
- # Generate update record name, and test it has been made. Then delete it and check it has been deleted
60
+ # Generate update record name, and test it has been made. Then delete it and check it has been deleted
64
61
  update_name = generate_update_name
65
62
  update.absent(update_name)
66
63
  update.add(update_name, 'TXT', 100, "test signed update")
67
64
  tsig.apply(update)
68
65
  assert(update.signed?, "Update has not been signed")
69
-
66
+
70
67
  res = Dnsruby::Resolver.new("ns0.validation-test-servers.nominet.org.uk")
71
68
  res.udp_size=512 # Or else we needed to add OPT record already
72
69
  res.dnssec=false
73
70
  res.recurse=false
74
71
  res.query_timeout = 20
75
72
  response = res.send_message(update)
76
-
73
+
77
74
  assert_equal( Dnsruby::RCode.NOERROR, response.rcode)
78
75
  assert(response.verified?, "Response has not been verified")
79
-
80
- # Now check the record exists
76
+
77
+ # Now check the record exists
81
78
  rr = res.query(update_name, 'TXT')
82
79
  assert_equal("test signed update", rr.answer()[0].strings.join(" "), "TXT record has not been created in zone")
83
-
84
- # Now delete the record
80
+
81
+ # Now delete the record
85
82
  update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
86
83
  update.present(update_name, 'TXT')
87
84
  update.delete(update_name)
@@ -90,17 +87,17 @@ class TestTSig < Test::Unit::TestCase
90
87
  response = res.send_message(update)
91
88
  assert_equal( Dnsruby::RCode.NOERROR, response.rcode)
92
89
  assert(response.verified?, "Response has not been verified")
93
-
94
- # Now check the record does not exist
90
+
91
+ # Now check the record does not exist
95
92
  Dnsruby::PacketSender.clear_caches
96
- # Or else the cache will tell us it still deos!
93
+ # Or else the cache will tell us it still deos!
97
94
  begin
98
95
  rr = res.query(update_name, 'TXT')
99
96
  assert(false)
100
97
  rescue Dnsruby::NXDomain
101
98
  end
102
99
  end
103
-
100
+
104
101
  @@fudge = 0
105
102
  def generate_update_name
106
103
  update_name = Time.now.to_i.to_s + @@fudge.to_s
@@ -108,29 +105,29 @@ class TestTSig < Test::Unit::TestCase
108
105
  update_name += ".update.validation-test-servers.nominet.org.uk"
109
106
  return update_name
110
107
  end
111
-
108
+
112
109
  def run_test_resolver_signs
113
110
  res = Dnsruby::Resolver.new("ns0.validation-test-servers.nominet.org.uk")
114
111
  res.query_timeout=20
115
112
  res.tsig=KEY_NAME, KEY
116
-
113
+
117
114
  update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
118
- # Generate update record name, and test it has been made. Then delete it and check it has been deleted
115
+ # Generate update record name, and test it has been made. Then delete it and check it has been deleted
119
116
  update_name = generate_update_name
120
117
  update.absent(update_name)
121
118
  update.add(update_name, 'TXT', 100, "test signed update")
122
119
  assert(!update.signed?, "Update has been signed")
123
-
120
+
124
121
  response = res.send_message(update)
125
-
122
+
126
123
  assert_equal( Dnsruby::RCode.NOERROR, response.rcode)
127
124
  assert(response.verified?, "Response has not been verified")
128
-
129
- # Now check the record exists
125
+
126
+ # Now check the record exists
130
127
  rr = res.query(update_name, 'TXT')
131
128
  assert_equal("test signed update", rr.answer()[0].strings.join(" "), "TXT record has not been created in zone")
132
-
133
- # Now delete the record
129
+
130
+ # Now delete the record
134
131
  update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
135
132
  update.present(update_name, 'TXT')
136
133
  update.delete(update_name)
@@ -146,42 +143,42 @@ class TestTSig < Test::Unit::TestCase
146
143
  response = res.send_message(update)
147
144
  assert_equal( Dnsruby::RCode.NOERROR, response.rcode)
148
145
  assert(response.verified?, "Response has not been verified")
149
-
150
- # Now check the record does not exist
146
+
147
+ # Now check the record does not exist
151
148
  Dnsruby::PacketSender.clear_caches
152
- # Make sure the cache doesn't have an old copy!
149
+ # Make sure the cache doesn't have an old copy!
153
150
  begin
154
151
  rr = res.query(update_name, 'TXT')
155
152
  assert(false)
156
153
  rescue Dnsruby::NXDomain
157
154
  end
158
155
  end
159
-
156
+
160
157
  def test_message_signing
161
158
  m = Dnsruby::Message.new("example.com")
162
159
  m.set_tsig("name", "key")
163
160
  assert(!m.signed?)
164
161
  m.encode
165
162
  assert(m.signed?)
166
-
163
+
167
164
  m = Dnsruby::Message.new("example.com")
168
165
  m.set_tsig("name", "key")
169
166
  assert(!m.signed?)
170
- m.sign!
167
+ m.sign!
171
168
  assert(m.signed?)
172
-
169
+
173
170
  m = Dnsruby::Message.new("example.com")
174
171
  assert(!m.signed?)
175
172
  m.sign!("name", "key")
176
173
  assert(m.signed?)
177
174
  end
178
-
175
+
179
176
  def test_signed_zone_transfer
180
- # test TSIG over TCP session
177
+ # test TSIG over TCP session
181
178
  axfr
182
179
  ixfr
183
180
  end
184
-
181
+
185
182
  def axfr
186
183
  zt = Dnsruby::ZoneTransfer.new
187
184
  zt.transfer_type = Dnsruby::Types.AXFR
@@ -191,31 +188,31 @@ class TestTSig < Test::Unit::TestCase
191
188
  assert(zone.length > 0)
192
189
  assert(zt.last_tsigstate==:Verified)
193
190
  end
194
-
195
- # We also test IXFR here - this is because we need to update a record (using
196
- # TSIG) before we can test ixfr...
191
+
192
+ # We also test IXFR here - this is because we need to update a record (using
193
+ # TSIG) before we can test ixfr...
197
194
  def ixfr
198
- # Check the SOA serial, do an update, check that the IXFR for that soa serial gives us the update we did,
199
- # then delete the updated record
195
+ # Check the SOA serial, do an update, check that the IXFR for that soa serial gives us the update we did,
196
+ # then delete the updated record
200
197
  start_soa_serial = get_soa_serial("validation-test-servers.nominet.org.uk")
201
-
202
- # Now do an update
198
+
199
+ # Now do an update
203
200
  res = Dnsruby::Resolver.new("ns0.validation-test-servers.nominet.org.uk")
204
201
  res.query_timeout=10
205
202
  res.tsig=KEY_NAME, KEY
206
-
203
+
207
204
  update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
208
- # Generate update record name, and test it has been made. Then delete it and check it has been deleted
205
+ # Generate update record name, and test it has been made. Then delete it and check it has been deleted
209
206
  update_name = Time.now.to_i.to_s + rand(100).to_s + ".update.validation-test-servers.nominet.org.uk"
210
207
  update.absent(update_name)
211
208
  update.add(update_name, 'TXT', 100, "test zone transfer")
212
209
  assert(!update.signed?, "Update has been signed")
213
-
210
+
214
211
  response = res.send_message(update)
215
212
  assert(response.rcode == Dnsruby::RCode.NOERROR)
216
-
213
+
217
214
  end_soa_serial = get_soa_serial("validation-test-servers.nominet.org.uk")
218
-
215
+
219
216
  zt = Dnsruby::ZoneTransfer.new
220
217
  zt.transfer_type = Dnsruby::Types.IXFR
221
218
  zt.server = "ns0.validation-test-servers.nominet.org.uk"
@@ -225,15 +222,15 @@ class TestTSig < Test::Unit::TestCase
225
222
  assert(deltas.last.class == Dnsruby::ZoneTransfer::Delta)
226
223
  assert_equal("test zone transfer", deltas.last.adds.last.strings.join(" "))
227
224
  assert(zt.last_tsigstate==nil)
228
-
229
- # Now delete the updated record
225
+
226
+ # Now delete the updated record
230
227
  update = Dnsruby::Update.new("validation-test-servers.nominet.org.uk")
231
228
  update.present(update_name, 'TXT')
232
229
  update.delete(update_name)
233
230
  response = res.send_message(update)
234
231
  assert_equal( Dnsruby::RCode.NOERROR, response.rcode)
235
232
  end
236
-
233
+
237
234
  def get_soa_serial(name)
238
235
  soa_serial = nil
239
236
  Dnsruby::DNS.open {|dns|