net-dns2 0.8.2 → 0.8.3

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.
@@ -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
-