dnsruby 1.55 → 1.56.0

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