net-dns2 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@ require 'net/dns/names'
3
3
  require 'net/dns/rr/types'
4
4
  require 'net/dns/rr/classes'
5
5
 
6
- %w(a aaaa cname hinfo mr mx ns ptr soa srv txt).each do |file|
6
+ %w(a aaaa cname hinfo mr mx ns ptr soa srv txt spf).each do |file|
7
7
  require "net/dns/rr/#{file}"
8
8
  end
9
9
 
@@ -92,9 +92,7 @@ module Net
92
92
  when IPAddr
93
93
  input
94
94
  when Integer # Address in numeric form
95
- tmp = [(input >> 24), (input >> 16) & 0xFF, (input >> 8) & 0xFF, input & 0xFF]
96
- tmp = tmp.collect { |x| x.to_s }.join(".")
97
- IPAddr.new(tmp)
95
+ IPAddr.new(input, Socket::AF_INET) # We know we are IPv4
98
96
  when String
99
97
  IPAddr.new(input)
100
98
  else
@@ -7,13 +7,14 @@ module Net # :nodoc:
7
7
  #------------------------------------------------------------
8
8
  class SOA < RR
9
9
  attr_reader :mname, :rname, :serial, :refresh, :retry, :expire, :minimum
10
-
10
+
11
11
  private
12
-
12
+
13
13
  def build_pack
14
14
  @soa_pack = pack_name(@mname)
15
15
  @soa_pack += pack_name(@rname)
16
16
  @soa_pack += [@serial,@refresh,@retry,@expire,@minimum].pack("N5")
17
+ @rdlength = @soa_pack.size
17
18
  end
18
19
 
19
20
  def get_data
@@ -31,30 +32,36 @@ module Net # :nodoc:
31
32
  [:mname,:rname,:serial,:refresh,:retry,:expire,:minimum].each do |key|
32
33
  raise ArgumentError, "Missing field :#{key}" unless args.has_key? key
33
34
  end
34
- @mname = args[:mname] if valid? args[:mname]
35
- @rname = args[:rname] if valid? args[:rname]
36
- @serial = args[:serial] if number? args[:serial]
37
- @refresh = args[:refresh] if number? args[:refresh]
38
- @retry = args[:retry] if number? args[:retry]
39
- @expire = args[:expire] if number? args[:expire]
40
- @minimum = args[:minimum] if number? args[:minimum]
35
+ @mname = args[:mname] if valid? args[:mname]
36
+ @rname = args[:rname] if rname? args[:rname]
37
+ @serial = args[:serial] if number? args[:serial]
38
+ @refresh = args[:refresh] if number? args[:refresh]
39
+ @retry = args[:retry] if number? args[:retry]
40
+ @expire = args[:expire] if number? args[:expire]
41
+ @minimum = args[:minimum] if number? args[:minimum]
41
42
  end
42
43
  end
43
-
44
+
44
45
  def number?(num)
45
46
  if num.kind_of? Integer and num > 0
46
47
  true
47
48
  else
48
- raise ArgumentError, "Wrong format field: #{num} not a number or less than zero"
49
+ false
49
50
  end
50
51
  end
51
52
 
53
+ def rname?(name)
54
+ mailbox, domain = name.split(/(?<!\\)\./, 2)
55
+ return true if valid? domain
56
+ return false
57
+ end
58
+
52
59
  def subclass_new_from_string(str)
53
60
  mname,rname,serial,refresh,ret,expire,minimum = str.strip.split(" ")
54
61
  @mname = mname if valid? mname
55
- @rname = rname if valid? rname
56
- @serial,@refresh,@retry,@expire,@minimum = [serial,refresh,ret,expire,minimum].collect do |i|
57
- i.to_i if valid? i.to_i
62
+ @rname = rname if rname? rname
63
+ @serial,@refresh,@retry,@expire,@minimum = [serial,refresh,ret,expire,minimum].collect do |i|
64
+ i.to_i if number? i.to_i
58
65
  end
59
66
  end
60
67
 
@@ -64,15 +71,15 @@ module Net # :nodoc:
64
71
  @serial,@refresh,@retry,@expire,@minimum = data.unpack("@#{offset} N5")
65
72
  return offset + 5*Net::DNS::INT32SZ
66
73
  end
67
-
74
+
68
75
  private
69
-
76
+
70
77
  def set_type
71
78
  @type = Net::DNS::RR::Types.new("SOA")
72
79
  end
73
-
80
+
74
81
  end
75
-
82
+
76
83
  end
77
84
  end
78
85
  end
@@ -19,6 +19,10 @@ module Net # :nodoc:
19
19
  @rdlength = @txt_pack.size
20
20
  end
21
21
 
22
+ def get_inspect
23
+ "\"#{@txt}\""
24
+ end
25
+
22
26
  def get_data
23
27
  @txt_pack
24
28
  end
@@ -33,18 +37,24 @@ module Net # :nodoc:
33
37
 
34
38
  def subclass_new_from_string(str)
35
39
  @txt = str.strip
40
+ if @txt[0] == '"' and @txt[-1] == '"'
41
+ @txt = @txt[1, @txt.length-2]
42
+ else
43
+ raise ArgumentError, "TXT RR data must be enclosed in \"quotes\""
44
+ end
36
45
  end
37
46
 
38
47
  def subclass_new_from_binary(data,offset)
39
48
  off_end = offset + @rdlength
40
- @txt = ""
49
+ rs = []
41
50
  while offset < off_end
42
51
  len = data.unpack("@#{offset} C")[0]
43
52
  offset += 1
44
53
  str = data[offset..offset+len-1]
45
54
  offset += len
46
- @txt << str << " "
55
+ rs << str
47
56
  end
57
+ @txt = rs.join(" ")
48
58
  return offset
49
59
  end
50
60
 
@@ -55,6 +55,7 @@ module Net # :nodoc:
55
55
  'RRSIG' => 46, # draft-ietf-dnsext-dnssec-2535typecode-change
56
56
  'NSEC' => 47, # draft-ietf-dnsext-dnssec-2535typecode-change
57
57
  'DNSKEY' => 48, # draft-ietf-dnsext-dnssec-2535typecode-change
58
+ 'SPF' => 99, # RFC 4408
58
59
  'UINFO' => 100, # non-standard
59
60
  'UID' => 101, # non-standard
60
61
  'GID' => 102, # non-standard
@@ -2,20 +2,36 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "net-dns2"
5
- s.version = "0.8.2"
5
+ s.version = "0.8.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Marco Ceresa", "Simone Carletti", "Christopher Carpenter"]
9
9
  s.date = "2014-05-12"
10
- s.description = "Net::DNS is a pure Ruby DNS library, with a clean OO interface and an extensible API."
10
+ s.description = "Net::DNS is a pure Ruby DNS library, with a clean OO interface and an extensible API. The net-dns2 ruby gem is an actively maintained fork of the original net-dns."
11
11
  s.email = "mordocai@mordocai.net"
12
- s.files = [".gitignore", ".travis.yml", "CHANGELOG.md", "Gemfile", "README.md", "Rakefile", "THANKS.rdoc", "demo/check_soa.rb", "demo/threads.rb", "lib/net/dns.rb", "lib/net/dns/core_ext.rb", "lib/net/dns/header.rb", "lib/net/dns/names.rb", "lib/net/dns/packet.rb", "lib/net/dns/question.rb", "lib/net/dns/resolver.rb", "lib/net/dns/resolver/socks.rb", "lib/net/dns/resolver/timeouts.rb", "lib/net/dns/rr.rb", "lib/net/dns/rr/a.rb", "lib/net/dns/rr/aaaa.rb", "lib/net/dns/rr/classes.rb", "lib/net/dns/rr/cname.rb", "lib/net/dns/rr/hinfo.rb", "lib/net/dns/rr/mr.rb", "lib/net/dns/rr/mx.rb", "lib/net/dns/rr/ns.rb", "lib/net/dns/rr/null.rb", "lib/net/dns/rr/ptr.rb", "lib/net/dns/rr/soa.rb", "lib/net/dns/rr/srv.rb", "lib/net/dns/rr/txt.rb", "lib/net/dns/rr/types.rb", "lib/net/dns/version.rb", "net-dns.gemspec", "test/header_test.rb", "test/names_test.rb", "test/packet_test.rb", "test/question_test.rb", "test/resolver_test.rb", "test/rr/a_test.rb", "test/rr/aaaa_test.rb", "test/rr/classes_test.rb", "test/rr/cname_test.rb", "test/rr/hinfo_test.rb", "test/rr/mr_test.rb", "test/rr/mx_test.rb", "test/rr/ns_test.rb", "test/rr/types_test.rb", "test/rr_test.rb", "test/test_helper.rb"]
12
+ s.files = [
13
+ ".gitignore", ".travis.yml", "CHANGELOG.md", "Gemfile", "README.md",
14
+ "Rakefile", "THANKS.rdoc", "demo/check_soa.rb", "demo/threads.rb",
15
+ "lib/net/dns.rb", "lib/net/dns/core_ext.rb", "lib/net/dns/header.rb",
16
+ "lib/net/dns/names.rb", "lib/net/dns/packet.rb", "lib/net/dns/question.rb",
17
+ "lib/net/dns/resolver.rb", "lib/net/dns/resolver/socks.rb",
18
+ "lib/net/dns/resolver/timeouts.rb", "lib/net/dns/rr.rb",
19
+ "lib/net/dns/rr/a.rb", "lib/net/dns/rr/aaaa.rb", "lib/net/dns/rr/classes.rb",
20
+ "lib/net/dns/rr/cname.rb", "lib/net/dns/rr/hinfo.rb", "lib/net/dns/rr/mr.rb",
21
+ "lib/net/dns/rr/mx.rb", "lib/net/dns/rr/ns.rb", "lib/net/dns/rr/null.rb",
22
+ "lib/net/dns/rr/ptr.rb", "lib/net/dns/rr/soa.rb", "lib/net/dns/rr/srv.rb",
23
+ "lib/net/dns/rr/txt.rb", "lib/net/dns/rr/types.rb", "lib/net/dns/version.rb",
24
+ "net-dns.gemspec"
25
+ ]
13
26
  s.homepage = "http://github.com/mordocai/net-dns"
14
27
  s.require_paths = ["lib"]
15
- s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
16
- s.rubygems_version = "1.0.0"
17
28
  s.summary = "Pure Ruby DNS library, fork with fixes."
18
- s.test_files = ["test/header_test.rb", "test/names_test.rb", "test/packet_test.rb", "test/question_test.rb", "test/resolver_test.rb", "test/rr/a_test.rb", "test/rr/aaaa_test.rb", "test/rr/classes_test.rb", "test/rr/cname_test.rb", "test/rr/hinfo_test.rb", "test/rr/mr_test.rb", "test/rr/mx_test.rb", "test/rr/ns_test.rb", "test/rr/types_test.rb", "test/rr_test.rb", "test/test_helper.rb"]
29
+ # s.test_files = [
30
+ # "spec/fixtures/resolv.conf", "spec/resolver_spec.rb", "spec/spec_helper.rb",
31
+ # "spec/unit/resolver/dns_timeout_spec.rb", "spec/unit/tcp_timeout_spec.rb",
32
+ # "spec/unit/udp_timeout_spec.rb"
33
+ # ]
34
+ s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")
19
35
  s.license = 'Ruby'
20
36
 
21
37
  if s.respond_to? :specification_version then
@@ -24,13 +40,16 @@ Gem::Specification.new do |s|
24
40
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
25
41
  s.add_development_dependency(%q<rake>, ["~> 10.0"])
26
42
  s.add_development_dependency(%q<yard>, [">= 0"])
43
+ s.add_development_dependency(%q<rspec>, [">= 0"])
27
44
  else
28
45
  s.add_dependency(%q<rake>, ["~> 10.0"])
29
46
  s.add_dependency(%q<yard>, [">= 0"])
47
+ s.add_dependency(%q<rspec>, [">= 0"])
30
48
  end
31
49
  else
32
50
  s.add_dependency(%q<rake>, ["~> 10.0"])
33
51
  s.add_dependency(%q<yard>, [">= 0"])
52
+ s.add_dependency(%q<rspec>, [">= 0"])
34
53
  end
35
54
 
36
55
  s.add_runtime_dependency "packetfu"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-dns2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Ceresa
@@ -30,32 +30,47 @@ dependencies:
30
30
  name: yard
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - '>='
33
+ - - ! '>='
34
34
  - !ruby/object:Gem::Version
35
35
  version: '0'
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - '>='
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: rspec
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ! '>='
41
55
  - !ruby/object:Gem::Version
42
56
  version: '0'
43
57
  - !ruby/object:Gem::Dependency
44
58
  name: packetfu
45
59
  requirement: !ruby/object:Gem::Requirement
46
60
  requirements:
47
- - - '>='
61
+ - - ! '>='
48
62
  - !ruby/object:Gem::Version
49
63
  version: '0'
50
64
  type: :runtime
51
65
  prerelease: false
52
66
  version_requirements: !ruby/object:Gem::Requirement
53
67
  requirements:
54
- - - '>='
68
+ - - ! '>='
55
69
  - !ruby/object:Gem::Version
56
70
  version: '0'
57
71
  description: Net::DNS is a pure Ruby DNS library, with a clean OO interface and an
58
- extensible API.
72
+ extensible API. The net-dns2 ruby gem is an actively maintained fork of the original
73
+ net-dns.
59
74
  email: mordocai@mordocai.net
60
75
  executables: []
61
76
  extensions: []
@@ -96,22 +111,6 @@ files:
96
111
  - lib/net/dns/rr/types.rb
97
112
  - lib/net/dns/version.rb
98
113
  - net-dns.gemspec
99
- - test/header_test.rb
100
- - test/names_test.rb
101
- - test/packet_test.rb
102
- - test/question_test.rb
103
- - test/resolver_test.rb
104
- - test/rr/a_test.rb
105
- - test/rr/aaaa_test.rb
106
- - test/rr/classes_test.rb
107
- - test/rr/cname_test.rb
108
- - test/rr/hinfo_test.rb
109
- - test/rr/mr_test.rb
110
- - test/rr/mx_test.rb
111
- - test/rr/ns_test.rb
112
- - test/rr/types_test.rb
113
- - test/rr_test.rb
114
- - test/test_helper.rb
115
114
  homepage: http://github.com/mordocai/net-dns
116
115
  licenses:
117
116
  - Ruby
@@ -122,35 +121,18 @@ require_paths:
122
121
  - lib
123
122
  required_ruby_version: !ruby/object:Gem::Requirement
124
123
  requirements:
125
- - - '>='
124
+ - - ! '>='
126
125
  - !ruby/object:Gem::Version
127
- version: 1.8.7
126
+ version: 1.9.2
128
127
  required_rubygems_version: !ruby/object:Gem::Requirement
129
128
  requirements:
130
- - - '>='
129
+ - - ! '>='
131
130
  - !ruby/object:Gem::Version
132
131
  version: '0'
133
132
  requirements: []
134
133
  rubyforge_project:
135
- rubygems_version: 2.0.14
134
+ rubygems_version: 2.2.2
136
135
  signing_key:
137
136
  specification_version: 4
138
137
  summary: Pure Ruby DNS library, fork with fixes.
139
- test_files:
140
- - test/header_test.rb
141
- - test/names_test.rb
142
- - test/packet_test.rb
143
- - test/question_test.rb
144
- - test/resolver_test.rb
145
- - test/rr/a_test.rb
146
- - test/rr/aaaa_test.rb
147
- - test/rr/classes_test.rb
148
- - test/rr/cname_test.rb
149
- - test/rr/hinfo_test.rb
150
- - test/rr/mr_test.rb
151
- - test/rr/mx_test.rb
152
- - test/rr/ns_test.rb
153
- - test/rr/types_test.rb
154
- - test/rr_test.rb
155
- - test/test_helper.rb
156
- has_rdoc:
138
+ test_files: []
@@ -1,167 +0,0 @@
1
- require 'test_helper'
2
- require 'net/dns/header'
3
-
4
- class HeaderTest < Test::Unit::TestCase
5
- include Net::DNS
6
-
7
- def setup
8
-
9
- @default = Header.new
10
- @hash = Header.new(:id => 441,
11
- :qr => 1,
12
- :opCode => Header::IQUERY,
13
- :aa => 1,
14
- :tc => 1,
15
- :rd => 0,
16
- :cd => 0,
17
- :ad => 0,
18
- :ra => 1,
19
- :rCode => Header::RCode::FORMAT,
20
- :qdCount => 1,
21
- :anCount => 2,
22
- :nsCount => 3,
23
- :arCount => 3)
24
-
25
- @modified = Header.new
26
- @modified.id = 442
27
- @modified.qr = true
28
- @modified.opCode = Header::IQUERY
29
- @modified.aa = true
30
- @modified.tc = true
31
- @modified.rd = false
32
- @modified.cd = false
33
- @modified.ra = true
34
- @modified.rCode = Header::RCode::FORMAT
35
- @modified.qdCount = 1
36
- @modified.anCount = 2
37
- @modified.nsCount = 3
38
- @modified.arCount = 3
39
-
40
- @data = @modified.data
41
- num = [(@data.unpack("n")[0]+1)].pack("n")
42
- @data[0],@data[1] = num[0], num[1]
43
- @binary = Header.parse(@data)
44
-
45
- end
46
-
47
- def test_simple
48
- assert_equal(@default.query?, true)
49
- assert_equal(@default.response?, false)
50
- assert_equal(@default.opCode, Header::QUERY)
51
- assert_equal(@default.auth?, false)
52
- assert_equal(@default.truncated?, false)
53
- assert_equal(@default.recursive?, true)
54
- assert_equal(@default.checking?, true)
55
- assert_equal(@default.verified?, false)
56
- assert_equal(@default.r_available?, false)
57
- assert_equal(@default.rCode.code, Header::RCode::NOERROR)
58
- assert_equal(@default.qdCount, 1)
59
- assert_equal(@default.anCount, 0)
60
- assert_equal(@default.nsCount, 0)
61
- assert_equal(@default.arCount, 0)
62
-
63
- assert_equal(@hash.id, 441)
64
- assert_equal(@hash.query?, false)
65
- assert_equal(@hash.response?, true)
66
- assert_equal(@hash.opCode, Header::IQUERY)
67
- assert_equal(@hash.auth?, true)
68
- assert_equal(@hash.truncated?, true)
69
- assert_equal(@hash.recursive?, false)
70
- assert_equal(@hash.checking?, true)
71
- assert_equal(@hash.verified?, false)
72
- assert_equal(@hash.r_available?, true)
73
- assert_equal(@hash.rCode.code, Header::RCode::FORMAT)
74
- assert_equal(@hash.qdCount, 1)
75
- assert_equal(@hash.anCount, 2)
76
- assert_equal(@hash.nsCount, 3)
77
- assert_equal(@hash.arCount, 3)
78
-
79
- assert_equal(@modified.id, 442)
80
- assert_equal(@modified.query?, false)
81
- assert_equal(@modified.response?, true)
82
- assert_equal(@modified.opCode, Header::IQUERY)
83
- assert_equal(@modified.auth?, true)
84
- assert_equal(@modified.truncated?, true)
85
- assert_equal(@modified.recursive?, false)
86
- assert_equal(@modified.checking?, true)
87
- assert_equal(@modified.verified?, false)
88
- assert_equal(@modified.r_available?, true)
89
- assert_equal(@modified.rCode.code, Header::RCode::FORMAT)
90
- assert_equal(@modified.qdCount, 1)
91
- assert_equal(@modified.anCount, 2)
92
- assert_equal(@modified.nsCount, 3)
93
- assert_equal(@modified.arCount, 3)
94
-
95
- assert_equal(@binary.data, @data)
96
-
97
- assert_equal(@binary.id, 443)
98
- assert_equal(@binary.query?, false)
99
- assert_equal(@binary.response?, true)
100
- assert_equal(@binary.opCode, Header::IQUERY)
101
- assert_equal(@binary.auth?, true)
102
- assert_equal(@binary.truncated?, true)
103
- assert_equal(@binary.recursive?, false)
104
- assert_equal(@binary.checking?, true)
105
- assert_equal(@binary.verified?, false)
106
- assert_equal(@binary.r_available?, true)
107
- assert_equal(@binary.rCode.code, Header::RCode::FORMAT)
108
- assert_equal(@binary.qdCount, 1)
109
- assert_equal(@binary.anCount, 2)
110
- assert_equal(@binary.nsCount, 3)
111
- assert_equal(@binary.arCount, 3)
112
-
113
- assert_raises(ArgumentError) do
114
- Header.new(Array.new)
115
- end
116
- assert_raises(ArgumentError) do
117
- Header.parse(Array.new)
118
- end
119
- assert_raises(ArgumentError) do
120
- Header.parse("aa")
121
- end
122
- assert_raises(ArgumentError) do
123
- @default.id = 1000000
124
- end
125
- assert_raises(ArgumentError) do
126
- @default.qr=2
127
- end
128
- assert_raises(Header::WrongOpcodeError) do
129
- @default.opCode=4
130
- end
131
- assert_raises(ArgumentError) do
132
- @default.aa=2
133
- end
134
- assert_raises(ArgumentError) do
135
- @default.tc=2
136
- end
137
- assert_raises(Header::WrongRecursiveError) do
138
- @default.recursive=2
139
- end
140
- assert_raises(ArgumentError) do
141
- @default.ra=2
142
- end
143
- assert_raises(ArgumentError) do
144
- @default.cd=2
145
- end
146
- assert_raises(ArgumentError) do
147
- @default.ad=2
148
- end
149
- assert_raises(ArgumentError) do
150
- @default.rCode=46
151
- end
152
- assert_raises(Header::WrongCountError) do
153
- @default.qdCount=100000
154
- end
155
- assert_raises(Header::WrongCountError) do
156
- @default.anCount=100000
157
- end
158
- assert_raises(Header::WrongCountError) do
159
- @default.nsCount=100000
160
- end
161
- assert_raises(Header::WrongCountError) do
162
- @default.arCount=100000
163
- end
164
- end
165
-
166
- end
167
-