rubydns 0.6.7 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,5 +19,5 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  module RubyDNS
22
- VERSION = "0.6.7"
22
+ VERSION = "0.7.0"
23
23
  end
data/rubydns.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.required_ruby_version = '>= 1.9.3'
31
31
 
32
- spec.add_dependency("rexec", "~> 1.5.1")
32
+ spec.add_dependency("rexec", "~> 1.6.2")
33
33
  spec.add_dependency("eventmachine", "~> 1.0.0")
34
34
 
35
35
  spec.has_rdoc = "yard"
@@ -50,7 +50,7 @@ class DroppingDaemon < RExec::Daemon::Base
50
50
  match(/(m?i?c?r?o?s?o?f?t)/) do |transaction, match_data|
51
51
  if match_data[1].size > 7
52
52
  logger.info "Dropping domain MICROSOFT..."
53
- transaction.failure!(:NXDomain)
53
+ transaction.fail!(:NXDomain)
54
54
  else
55
55
  # Pass the request to the otherwise handler
56
56
  false
@@ -60,7 +60,7 @@ class DroppingDaemon < RExec::Daemon::Base
60
60
  # Hmm....
61
61
  match(/^(.+\.)?sco\./) do |transaction|
62
62
  logger.info "Dropping domain SCO..."
63
- transaction.failure!(:NXDomain)
63
+ transaction.fail!(:NXDomain)
64
64
  end
65
65
 
66
66
  # Default DNS handler
@@ -79,7 +79,7 @@ class FortuneDNS < RExec::Daemon::Base
79
79
  if fortune
80
80
  transaction.respond!(*fortune.chunked)
81
81
  else
82
- transaction.failure!(:NXDomain)
82
+ transaction.fail!(:NXDomain)
83
83
  end
84
84
  end
85
85
 
@@ -100,7 +100,7 @@ class FortuneDNS < RExec::Daemon::Base
100
100
 
101
101
  # Default DNS handler
102
102
  otherwise do |transaction|
103
- transaction.failure!(:NXDomain)
103
+ transaction.fail!(:NXDomain)
104
104
  end
105
105
  end
106
106
  end
@@ -77,6 +77,6 @@ RubyDNS::run_server(:listen => [[:udp, "0.0.0.0", 5400]]) do
77
77
  # Default DNS handler
78
78
  otherwise do |transaction|
79
79
  # Non-Existant Domain
80
- transaction.failure!(:NXDomain)
80
+ transaction.fail!(:NXDomain)
81
81
  end
82
82
  end
@@ -103,13 +103,13 @@ class WikipediaDNS < RExec::Daemon::Base
103
103
  end
104
104
 
105
105
  http.errback do
106
- transaction.failure!(:ServFail)
106
+ transaction.fail!(:ServFail)
107
107
  end
108
108
  end
109
109
 
110
110
  # Default DNS handler
111
111
  otherwise do |transaction|
112
- transaction.failure!(:NXDomain)
112
+ transaction.fail!(:NXDomain)
113
113
  end
114
114
  end
115
115
  end
data/test/test_daemon.rb CHANGED
@@ -47,7 +47,7 @@ class BasicTestServer < RExec::Daemon::Base
47
47
 
48
48
  # Default DNS handler
49
49
  otherwise do |transaction|
50
- transaction.failure!(:NXDomain)
50
+ transaction.fail!(:NXDomain)
51
51
  end
52
52
  end
53
53
  end
@@ -68,7 +68,7 @@ class DaemonTest < Test::Unit::TestCase
68
68
  assert_equal :running, RExec::Daemon::ProcessFile.status(BasicTestServer)
69
69
 
70
70
  EventMachine.run do
71
- resolver = resolver = RubyDNS::Resolver.new(BasicTestServer::SERVER_PORTS)
71
+ resolver = RubyDNS::Resolver.new(BasicTestServer::SERVER_PORTS)
72
72
 
73
73
  resolver.query("test.local") do |response|
74
74
  answer = response.answer.first
@@ -85,7 +85,7 @@ class DaemonTest < Test::Unit::TestCase
85
85
  assert_equal :running, RExec::Daemon::ProcessFile.status(BasicTestServer)
86
86
 
87
87
  EventMachine.run do
88
- resolver = resolver = RubyDNS::Resolver.new(BasicTestServer::SERVER_PORTS)
88
+ resolver = RubyDNS::Resolver.new(BasicTestServer::SERVER_PORTS)
89
89
 
90
90
  resolver.query("foobar") do |response|
91
91
  answer = response.answer.first
@@ -0,0 +1,41 @@
1
+ require 'rubydns'
2
+
3
+ class MessageTest < Test::Unit::TestCase
4
+ def setup
5
+ end
6
+
7
+ def teardown
8
+ end
9
+
10
+ def hex2bin(hexstring)
11
+ ret = "\x00" * (hexstring.length / 2)
12
+ ret.force_encoding("BINARY")
13
+ offset = 0
14
+ while offset < hexstring.length
15
+ hex_byte = hexstring[offset..(offset+1)]
16
+ ret.setbyte(offset/2, hex_byte.to_i(16))
17
+ offset += 2
18
+ end
19
+ ret
20
+ end
21
+
22
+ def test_good_decode
23
+ data = hex2bin("1d008180000100080000000103777777057961686f6f03636f6d0000010001c00c000500010000012c000f0666642d667033037767310162c010c02b000500010000012c00090664732d667033c032c046000500010000003c00150e64732d616e792d6670332d6c666203776131c036c05b000500010000012c00120f64732d616e792d6670332d7265616cc06ac07c000100010000003c0004628afc1ec07c000100010000003c0004628bb495c07c000100010000003c0004628bb718c07c000100010000003c0004628afd6d0000291000000000000000")
24
+
25
+ decoded = RubyDNS.decode_message(data)
26
+ assert_equal(RubyDNS::Message, decoded.class)
27
+ assert_equal(0x1d00, decoded.id)
28
+ assert_equal(1, decoded.question.count)
29
+ assert_equal(8, decoded.answer.count)
30
+ assert_equal(0, decoded.authority.count)
31
+ assert_equal(1, decoded.additional.count)
32
+ end
33
+
34
+ def test_bad_AAAA_length
35
+ data = hex2bin("ea9e8180000100010000000108626169636169636e03636f6d00001c0001c00c001c00010000011e000432177b770000291000000000000000")
36
+
37
+ assert_raise(Resolv::DNS::DecodeError) do
38
+ RubyDNS.decode_message(data)
39
+ end
40
+ end
41
+ end
@@ -49,19 +49,23 @@ class TestPassthroughServer < RExec::Daemon::Base
49
49
 
50
50
  # Default DNS handler
51
51
  otherwise do |transaction|
52
- transaction.failure!(:NXDomain)
52
+ transaction.fail!(:NXDomain)
53
53
  end
54
54
  end
55
55
  end
56
56
  end
57
57
 
58
58
  class PassthroughTest < Test::Unit::TestCase
59
+ # LOG_PATH = File.join(__dir__, "log/TestPassthroughServer.log")
60
+
59
61
  def setup
62
+ # system("rm", LOG_PATH)
60
63
  TestPassthroughServer.start
61
64
  end
62
65
 
63
66
  def teardown
64
67
  TestPassthroughServer.stop
68
+ # system("cat", LOG_PATH)
65
69
  end
66
70
 
67
71
  def test_basic_dns
data/test/test_rules.rb CHANGED
@@ -39,7 +39,7 @@ class RulesTest < Test::Unit::TestCase
39
39
  end
40
40
 
41
41
  def test_string_pattern
42
- rule = RubyDNS::Server::Rule.new(["foobar", IN::A], @true_callback)
42
+ rule = RubyDNS::RuleBasedServer::Rule.new(["foobar", IN::A], @true_callback)
43
43
 
44
44
  assert rule.call(@server, "foobar", IN::A)
45
45
  assert !rule.call(@server, "barfoo", IN::A)
@@ -47,7 +47,7 @@ class RulesTest < Test::Unit::TestCase
47
47
  end
48
48
 
49
49
  def test_regexp_pattern
50
- rule = RubyDNS::Server::Rule.new([/foo/, IN::A], @true_callback)
50
+ rule = RubyDNS::RuleBasedServer::Rule.new([/foo/, IN::A], @true_callback)
51
51
 
52
52
  assert rule.call(@server, "foobar", IN::A)
53
53
  assert !rule.call(@server, "barbaz", IN::A)
@@ -64,7 +64,7 @@ class RulesTest < Test::Unit::TestCase
64
64
  name.size == 6
65
65
  end
66
66
 
67
- rule = RubyDNS::Server::Rule.new([callback], @true_callback)
67
+ rule = RubyDNS::RuleBasedServer::Rule.new([callback], @true_callback)
68
68
 
69
69
  assert rule.call(@server, "foobar", IN::A)
70
70
  assert !rule.call(@server, "foobarbaz", IN::A)
@@ -38,16 +38,18 @@ class SlowServer < RExec::Daemon::Base
38
38
  def self.run
39
39
  RubyDNS::run_server(:listen => SERVER_PORTS) do
40
40
  match(/\.*.com/, IN::A) do |transaction|
41
- transaction.defer!
42
-
43
- # No domain exists, after 5 seconds:
44
- EventMachine::Timer.new(5) do
45
- transaction.failure!(:NXDomain)
41
+ defer do |fiber|
42
+ # No domain exists, after 2 seconds:
43
+ EventMachine::Timer.new(2) do
44
+ transaction.fail!(:NXDomain)
45
+
46
+ fiber.resume
47
+ end
46
48
  end
47
49
  end
48
50
 
49
51
  otherwise do |transaction|
50
- transaction.failure!(:NXDomain)
52
+ transaction.fail!(:NXDomain)
51
53
  end
52
54
  end
53
55
  end
@@ -36,6 +36,8 @@ class TruncatedServer < RExec::Daemon::Base
36
36
  IN = Resolv::DNS::Resource::IN
37
37
 
38
38
  def self.run
39
+ # RubyDNS::log_bad_messages!("bad.log")
40
+
39
41
  # Start the RubyDNS server
40
42
  RubyDNS::run_server(:listen => SERVER_PORTS) do
41
43
  match("truncation", IN::TXT) do |transaction|
@@ -45,7 +47,7 @@ class TruncatedServer < RExec::Daemon::Base
45
47
 
46
48
  # Default DNS handler
47
49
  otherwise do |transaction|
48
- transaction.failure!(:NXDomain)
50
+ transaction.fail!(:NXDomain)
49
51
  end
50
52
  end
51
53
  end
@@ -65,8 +67,6 @@ class TruncationTest < Test::Unit::TestCase
65
67
 
66
68
  EventMachine::run do
67
69
  resolver.query("truncation", IN::TXT) do |response|
68
-
69
-
70
70
  text = response.answer.first
71
71
 
72
72
  assert_equal "Hello World! " * 100, text[2].strings.join
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubydns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.7
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-19 00:00:00.000000000 Z
11
+ date: 2014-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rexec
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 1.5.1
19
+ version: 1.6.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 1.5.1
26
+ version: 1.6.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: eventmachine
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -55,19 +55,17 @@ extra_rdoc_files: []
55
55
  files:
56
56
  - .gitignore
57
57
  - .travis.yml
58
+ - .yardopts
58
59
  - Gemfile
59
60
  - README.md
60
61
  - Rakefile
61
62
  - bin/rd-dns-check
62
63
  - bin/rd-resolve-test
63
64
  - lib/rubydns.rb
65
+ - lib/rubydns/binary_string.rb
64
66
  - lib/rubydns/chunked.rb
65
- - lib/rubydns/extensions/hexdump.rb
66
67
  - lib/rubydns/extensions/logger.rb
67
68
  - lib/rubydns/extensions/resolv.rb
68
- - lib/rubydns/extensions/string-1.8.rb
69
- - lib/rubydns/extensions/string-1.9.2.rb
70
- - lib/rubydns/extensions/string-1.9.3.rb
71
69
  - lib/rubydns/extensions/string.rb
72
70
  - lib/rubydns/handler.rb
73
71
  - lib/rubydns/message.rb
@@ -88,6 +86,7 @@ files:
88
86
  - test/hosts.txt
89
87
  - test/test_daemon.rb
90
88
  - test/test_domains.txt
89
+ - test/test_message.rb
91
90
  - test/test_passthrough.rb
92
91
  - test/test_resolver.rb
93
92
  - test/test_rules.rb
@@ -114,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
113
  version: '0'
115
114
  requirements: []
116
115
  rubyforge_project:
117
- rubygems_version: 2.0.6
116
+ rubygems_version: 2.0.3
118
117
  signing_key:
119
118
  specification_version: 4
120
119
  summary: An easy to use DNS server and resolver for Ruby.
@@ -130,9 +129,11 @@ test_files:
130
129
  - test/hosts.txt
131
130
  - test/test_daemon.rb
132
131
  - test/test_domains.txt
132
+ - test/test_message.rb
133
133
  - test/test_passthrough.rb
134
134
  - test/test_resolver.rb
135
135
  - test/test_rules.rb
136
136
  - test/test_slow_server.rb
137
137
  - test/test_system.rb
138
138
  - test/test_truncation.rb
139
+ has_rdoc: yard
@@ -1,38 +0,0 @@
1
- # Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
20
-
21
- require 'stringio'
22
-
23
- class String
24
- def hexdump
25
- i = 1
26
- out = StringIO.new
27
-
28
- out.puts "Size: #{self.bytesize}"
29
- while (self.length > 16*(i-1))
30
- a = self.slice(16*(i-1)..(16*i)-1)
31
- out.printf("%06x: %4.4x %4.4x %4.4x %4.4x %4.4x %4.4x %4.4x %4.4x ", (i-1)*16, *a.unpack("n16"))
32
- out.printf("|%s|\n", a.tr("^\040-\176","."))
33
- i += 1
34
- end
35
-
36
- return out.string
37
- end
38
- end
@@ -1,35 +0,0 @@
1
- # Copyright, 2009, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
20
-
21
- require 'stringio'
22
-
23
- class String
24
- def bytesize
25
- size
26
- end
27
-
28
- def byteslice(*args)
29
- self[*args]
30
- end
31
- end
32
-
33
- module RubyDNS
34
- BinaryStringIO = StringIO
35
- end
@@ -1,29 +0,0 @@
1
- # Copyright, 2009, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
20
-
21
- require 'stringio'
22
- require 'rubydns/extensions/string-1.9.3'
23
-
24
- class String
25
- def byteslice(*args)
26
- self.dup.force_encoding("BINARY").slice(*args)
27
- end
28
- end
29
-