redns 0.1.15 → 0.1.16
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.
- data/README.rdoc +7 -0
- data/VERSION +1 -1
- data/bin/redig +49 -0
- data/lib/redns/buffer.rb +14 -10
- data/lib/redns/record/null.rb +6 -2
- data/lib/redns/record/spf.rb +2 -0
- data/lib/redns/record/txt.rb +2 -0
- data/lib/redns/record.rb +2 -0
- data/lib/redns/resolver.rb +11 -1
- data/lib/redns/resource.rb +7 -3
- data/redns.gemspec +14 -10
- data/test/test_redns_buffer.rb +19 -0
- metadata +8 -4
data/README.rdoc
CHANGED
@@ -5,6 +5,13 @@ Reactor-Ready DNS Library
|
|
5
5
|
This library includes native Ruby encoder/decoder classes for typical
|
6
6
|
DNS records that are specified in RFC1035.
|
7
7
|
|
8
|
+
In addition, RFC2671 extension mechanisms are also supported.
|
9
|
+
|
8
10
|
== References
|
9
11
|
|
10
12
|
[RFC1035](http://www.faqs.org/rfcs/rfc1035.html)
|
13
|
+
[RFC2671](http://www.faqs.org/rfcs/rfc2671.html)
|
14
|
+
|
15
|
+
== Copyright
|
16
|
+
|
17
|
+
(C) 2005-2012 Scott Tadman
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.16
|
data/bin/redig
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH << File.expand_path(File.join('..','lib'), File.dirname(__FILE__))
|
4
|
+
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
require 'redns'
|
8
|
+
|
9
|
+
# == Main ===================================================================
|
10
|
+
|
11
|
+
options = {
|
12
|
+
:query_type => :any,
|
13
|
+
}
|
14
|
+
|
15
|
+
op = OptionParser.new do |op|
|
16
|
+
op.on("-t", "--type=s") do |type|
|
17
|
+
options[:query_type] = type.to_sym
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Look for command-line arguments prefixed with '@' and push these into the
|
22
|
+
# options for nameservers.
|
23
|
+
queries = op.parse(*ARGV).select do |query|
|
24
|
+
case (query)
|
25
|
+
when /^@(.*)/
|
26
|
+
(options[:nameservers] ||= [ ]) << $1
|
27
|
+
false
|
28
|
+
else
|
29
|
+
true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
resolver = ReDNS::Resolver.new do |resolver|
|
34
|
+
if (options[:nameservers])
|
35
|
+
resolver.servers = options[:nameservers]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
queries.each do |query|
|
40
|
+
results = resolver.simple_query(options[:query_type], query)
|
41
|
+
|
42
|
+
if (results)
|
43
|
+
results.each do |result|
|
44
|
+
puts result.to_s
|
45
|
+
end
|
46
|
+
else
|
47
|
+
puts "No results"
|
48
|
+
end
|
49
|
+
end
|
data/lib/redns/buffer.rb
CHANGED
@@ -3,7 +3,7 @@ class ReDNS::Buffer < String
|
|
3
3
|
|
4
4
|
# == Properties ===========================================================
|
5
5
|
|
6
|
-
alias_method :
|
6
|
+
alias_method :string_length, :length
|
7
7
|
alias_method :total_size, :size
|
8
8
|
|
9
9
|
attr_reader :offset
|
@@ -24,23 +24,27 @@ class ReDNS::Buffer < String
|
|
24
24
|
super('')
|
25
25
|
|
26
26
|
@offset = 0
|
27
|
-
@size =
|
27
|
+
@size = string_length
|
28
28
|
|
29
29
|
contents.serialize(self)
|
30
30
|
else
|
31
31
|
super(contents || '')
|
32
32
|
|
33
33
|
@offset = offset ? offset.to_i : 0
|
34
|
-
@size = size ? size.to_i :
|
34
|
+
@size = size ? size.to_i : string_length
|
35
35
|
end
|
36
36
|
|
37
37
|
advance(0)
|
38
38
|
end
|
39
39
|
|
40
|
+
def empty?
|
41
|
+
@offset >= string_length
|
42
|
+
end
|
43
|
+
|
40
44
|
def unpack(format)
|
41
45
|
return [ ] if (@size <= 0)
|
42
46
|
|
43
|
-
return if (@offset >
|
47
|
+
return if (@offset > string_length)
|
44
48
|
|
45
49
|
data = to_s.unpack(format)
|
46
50
|
advance(data.pack(format).length)
|
@@ -55,7 +59,7 @@ class ReDNS::Buffer < String
|
|
55
59
|
end
|
56
60
|
|
57
61
|
def slice(chars = 1)
|
58
|
-
return if (@offset + chars >
|
62
|
+
return if (@offset + chars > string_length)
|
59
63
|
|
60
64
|
result = to_str[@offset, chars]
|
61
65
|
advance(chars)
|
@@ -64,7 +68,7 @@ class ReDNS::Buffer < String
|
|
64
68
|
end
|
65
69
|
|
66
70
|
def read(chars = 1)
|
67
|
-
return if (@offset + chars >
|
71
|
+
return if (@offset + chars > string_length)
|
68
72
|
|
69
73
|
result = to_str[@offset, chars]
|
70
74
|
advance(chars)
|
@@ -95,18 +99,18 @@ class ReDNS::Buffer < String
|
|
95
99
|
else
|
96
100
|
@offset += chars
|
97
101
|
|
98
|
-
if (@offset >
|
99
|
-
@offset =
|
102
|
+
if (@offset > string_length)
|
103
|
+
@offset = string_length
|
100
104
|
end
|
101
105
|
|
102
|
-
max_length = (
|
106
|
+
max_length = (string_length - @offset)
|
103
107
|
|
104
108
|
if (!@size or @size > max_length)
|
105
109
|
@size = max_length
|
106
110
|
end
|
107
111
|
end
|
108
112
|
|
109
|
-
@size ||=
|
113
|
+
@size ||= string_length - @offset
|
110
114
|
|
111
115
|
self
|
112
116
|
end
|
data/lib/redns/record/null.rb
CHANGED
@@ -24,8 +24,12 @@ class ReDNS::Record::Null < ReDNS::Fragment
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def deserialize(buffer)
|
27
|
-
|
28
|
-
|
27
|
+
self.contents = ''
|
28
|
+
|
29
|
+
while (!buffer.empty?)
|
30
|
+
if (content_length = buffer.unpack('C')[0])
|
31
|
+
self.contents << buffer.unpack("a#{content_length}")[0]
|
32
|
+
end
|
29
33
|
end
|
30
34
|
|
31
35
|
self
|
data/lib/redns/record.rb
CHANGED
data/lib/redns/resolver.rb
CHANGED
@@ -216,6 +216,7 @@ class ReDNS::Resolver
|
|
216
216
|
|
217
217
|
protected
|
218
218
|
def expand_answers(r)
|
219
|
+
|
219
220
|
unless (r and r.answers)
|
220
221
|
return nil
|
221
222
|
end
|
@@ -223,7 +224,16 @@ protected
|
|
223
224
|
result = r.answers
|
224
225
|
radd = (r.additional_records or [ ])
|
225
226
|
|
226
|
-
result.
|
227
|
+
result.select do |rr|
|
228
|
+
case (rr.rtype)
|
229
|
+
when :ns
|
230
|
+
# These record types require further investigation if they are to
|
231
|
+
# be included in the result-set.
|
232
|
+
true
|
233
|
+
else
|
234
|
+
false
|
235
|
+
end
|
236
|
+
end.each do |rr|
|
227
237
|
# Additional resource records may be related to the query, or they
|
228
238
|
# might just be convenience records that are not directly helpful.
|
229
239
|
|
data/lib/redns/resource.rb
CHANGED
@@ -68,12 +68,16 @@ class ReDNS::Resource < ReDNS::Fragment
|
|
68
68
|
self.rdata = ReDNS::Address.new(buffer)
|
69
69
|
when :cname, :ptr, :ns
|
70
70
|
self.rdata = ReDNS::Name.new(buffer)
|
71
|
+
when :mx
|
72
|
+
self.rdata = ReDNS::Record::MX.new(buffer)
|
71
73
|
when :soa
|
72
74
|
self.rdata = ReDNS::Record::SOA.new(buffer)
|
73
|
-
when :
|
75
|
+
when :null
|
74
76
|
self.rdata = (rdata_length and ReDNS::Record::Null.new(buffer.slice(rdata_length)))
|
75
|
-
|
76
|
-
|
77
|
+
when :spf
|
78
|
+
self.rdata = (rdata_length and ReDNS::Record::SPF.new(buffer.slice(rdata_length)))
|
79
|
+
when :txt
|
80
|
+
self.rdata = (rdata_length and ReDNS::Record::TXT.new(buffer.slice(rdata_length)))
|
77
81
|
else
|
78
82
|
# FUTURE: Throw exception here when trying to decode invalid type
|
79
83
|
nil
|
data/redns.gemspec
CHANGED
@@ -4,14 +4,15 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.1.
|
7
|
+
s.name = "redns"
|
8
|
+
s.version = "0.1.16"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = [
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
11
|
+
s.authors = ["tadman"]
|
12
|
+
s.date = "2012-02-13"
|
13
|
+
s.description = "ReDNS is a pure Ruby DNS library with drivers for reactor-model engines such as EventMachine"
|
14
|
+
s.email = "github@tadman.ca"
|
15
|
+
s.executables = ["redig"]
|
15
16
|
s.extra_rdoc_files = [
|
16
17
|
"README.rdoc"
|
17
18
|
]
|
@@ -20,6 +21,7 @@ Gem::Specification.new do |s|
|
|
20
21
|
"README.rdoc",
|
21
22
|
"Rakefile",
|
22
23
|
"VERSION",
|
24
|
+
"bin/redig",
|
23
25
|
"lib/redns.rb",
|
24
26
|
"lib/redns/address.rb",
|
25
27
|
"lib/redns/buffer.rb",
|
@@ -32,6 +34,8 @@ Gem::Specification.new do |s|
|
|
32
34
|
"lib/redns/record/mx.rb",
|
33
35
|
"lib/redns/record/null.rb",
|
34
36
|
"lib/redns/record/soa.rb",
|
37
|
+
"lib/redns/record/spf.rb",
|
38
|
+
"lib/redns/record/txt.rb",
|
35
39
|
"lib/redns/resolver.rb",
|
36
40
|
"lib/redns/resource.rb",
|
37
41
|
"lib/redns/support.rb",
|
@@ -49,10 +53,10 @@ Gem::Specification.new do |s|
|
|
49
53
|
"test/test_redns_resource.rb",
|
50
54
|
"test/test_redns_support.rb"
|
51
55
|
]
|
52
|
-
s.homepage =
|
53
|
-
s.require_paths = [
|
54
|
-
s.rubygems_version =
|
55
|
-
s.summary =
|
56
|
+
s.homepage = "http://github.com/tadman/redns"
|
57
|
+
s.require_paths = ["lib"]
|
58
|
+
s.rubygems_version = "1.8.11"
|
59
|
+
s.summary = "Ruby Reactor-Ready DNS Library"
|
56
60
|
|
57
61
|
if s.respond_to? :specification_version then
|
58
62
|
s.specification_version = 3
|
data/test/test_redns_buffer.rb
CHANGED
@@ -13,6 +13,25 @@ class TestReDNSBuffer < Test::Unit::TestCase
|
|
13
13
|
|
14
14
|
assert_equal nil, buffer.read
|
15
15
|
end
|
16
|
+
|
17
|
+
def test_empty_state
|
18
|
+
buffer = ReDNS::Buffer.new('test')
|
19
|
+
|
20
|
+
assert_equal false, buffer.empty?
|
21
|
+
|
22
|
+
buffer.unpack('C4')
|
23
|
+
|
24
|
+
assert_equal true, buffer.empty?
|
25
|
+
|
26
|
+
assert_equal 4, buffer.offset
|
27
|
+
|
28
|
+
buffer.append('test')
|
29
|
+
|
30
|
+
assert_equal 4, buffer.offset
|
31
|
+
assert_equal 4, buffer.length
|
32
|
+
|
33
|
+
assert_equal false, buffer.empty?
|
34
|
+
end
|
16
35
|
|
17
36
|
def test_simple_duplicate
|
18
37
|
buffer = ReDNS::Buffer.new('example'.freeze, 1, 3)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.16
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,13 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-02-13 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ReDNS is a pure Ruby DNS library with drivers for reactor-model engines
|
15
15
|
such as EventMachine
|
16
16
|
email: github@tadman.ca
|
17
|
-
executables:
|
17
|
+
executables:
|
18
|
+
- redig
|
18
19
|
extensions: []
|
19
20
|
extra_rdoc_files:
|
20
21
|
- README.rdoc
|
@@ -23,6 +24,7 @@ files:
|
|
23
24
|
- README.rdoc
|
24
25
|
- Rakefile
|
25
26
|
- VERSION
|
27
|
+
- bin/redig
|
26
28
|
- lib/redns.rb
|
27
29
|
- lib/redns/address.rb
|
28
30
|
- lib/redns/buffer.rb
|
@@ -35,6 +37,8 @@ files:
|
|
35
37
|
- lib/redns/record/mx.rb
|
36
38
|
- lib/redns/record/null.rb
|
37
39
|
- lib/redns/record/soa.rb
|
40
|
+
- lib/redns/record/spf.rb
|
41
|
+
- lib/redns/record/txt.rb
|
38
42
|
- lib/redns/resolver.rb
|
39
43
|
- lib/redns/resource.rb
|
40
44
|
- lib/redns/support.rb
|
@@ -71,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
75
|
version: '0'
|
72
76
|
requirements: []
|
73
77
|
rubyforge_project:
|
74
|
-
rubygems_version: 1.8.
|
78
|
+
rubygems_version: 1.8.11
|
75
79
|
signing_key:
|
76
80
|
specification_version: 3
|
77
81
|
summary: Ruby Reactor-Ready DNS Library
|