rubysl-resolv 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 70fb96e5c839213a9643ffac29c5be3498aee4fa
4
- data.tar.gz: 6ecacc7fa6ebf9243c40c33b3e233905a711a366
3
+ metadata.gz: 5a3b2d810058ec30f40edc3b93454a731d36630f
4
+ data.tar.gz: 23abe88f768bd21b940edc25c6dd4c6172941309
5
5
  SHA512:
6
- metadata.gz: 9fcdec1fd50945fd720068ec027c820ba6644623c0bb94bc9917fd39fd0507fd81256c549ba77918cc40d45a540b1766d80b4fbb0eed54089e68b77f689a4406
7
- data.tar.gz: 9fff4616e686c1c6905b46b3c7d5ef4b5233c410b2b0a41cfc2408b0e997d37e7a24b4f23403b27c51c1df50b714e4e87c6fdaf1d77a239d52f168b5614d6a31
6
+ metadata.gz: 6a620c040ab64339559397406c5ddce07a380bac977e4a0cb07228067417be5ab068711f25eac57144bb9ba5f36c849ed69780a8bd926705da361ac7a55e7417
7
+ data.tar.gz: 19dccd59c66773232a5572c1553597e95b3e436fc59dc0d990c7f31bd19bc93af734da9e696b9f4a1529314a5f28e1ee12456327ca75f8d3e41517e32883c1c9
@@ -0,0 +1,56 @@
1
+ Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
2
+ You can redistribute it and/or modify it under either the terms of the
3
+ 2-clause BSDL (see the file BSDL), or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a) place your modifications in the Public Domain or otherwise
13
+ make them Freely Available, such as by posting said
14
+ modifications to Usenet or an equivalent medium, or by allowing
15
+ the author to include your modifications in the software.
16
+
17
+ b) use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c) give non-standard binaries non-standard names, with
21
+ instructions on where to get the original software distribution.
22
+
23
+ d) make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or binary form,
26
+ provided that you do at least ONE of the following:
27
+
28
+ a) distribute the binaries and library files of the software,
29
+ together with instructions (in the manual page or equivalent)
30
+ on where to get the original distribution.
31
+
32
+ b) accompany the distribution with the machine-readable source of
33
+ the software.
34
+
35
+ c) give non-standard binaries non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d) make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under these terms.
43
+
44
+ For the list of those files and their copying conditions, see the
45
+ file LEGAL.
46
+
47
+ 5. The scripts and library files supplied as input to or produced as
48
+ output from the software do not automatically fall under the
49
+ copyright of the software, but belong to whomever generated them,
50
+ and may be sold commercially, and may be aggregated with this
51
+ software.
52
+
53
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
54
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
55
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
56
+ PURPOSE.
@@ -0,0 +1 @@
1
+ require 'rubysl/resolv/resolv-replace'
@@ -0,0 +1,74 @@
1
+ require 'socket'
2
+ require 'resolv'
3
+
4
+ class << IPSocket
5
+ # :stopdoc:
6
+ alias original_resolv_getaddress getaddress
7
+ # :startdoc:
8
+ def getaddress(host)
9
+ begin
10
+ return Resolv.getaddress(host).to_s
11
+ rescue Resolv::ResolvError
12
+ raise SocketError, "Hostname not known: #{host}"
13
+ end
14
+ end
15
+ end
16
+
17
+ class TCPSocket < IPSocket
18
+ # :stopdoc:
19
+ alias original_resolv_initialize initialize
20
+ # :startdoc:
21
+ def initialize(host, serv, *rest)
22
+ rest[0] = IPSocket.getaddress(rest[0]) if rest[0]
23
+ original_resolv_initialize(IPSocket.getaddress(host), serv, *rest)
24
+ end
25
+ end
26
+
27
+ class UDPSocket < IPSocket
28
+ # :stopdoc:
29
+ alias original_resolv_bind bind
30
+ # :startdoc:
31
+ def bind(host, port)
32
+ host = IPSocket.getaddress(host) if host != ""
33
+ original_resolv_bind(host, port)
34
+ end
35
+
36
+ # :stopdoc:
37
+ alias original_resolv_connect connect
38
+ # :startdoc:
39
+ def connect(host, port)
40
+ original_resolv_connect(IPSocket.getaddress(host), port)
41
+ end
42
+
43
+ # :stopdoc:
44
+ alias original_resolv_send send
45
+ # :startdoc:
46
+ def send(mesg, flags, *rest)
47
+ if rest.length == 2
48
+ host, port = rest
49
+ begin
50
+ addrs = Resolv.getaddresses(host)
51
+ rescue Resolv::ResolvError
52
+ raise SocketError, "Hostname not known: #{host}"
53
+ end
54
+ addrs[0...-1].each {|addr|
55
+ begin
56
+ return original_resolv_send(mesg, flags, addr, port)
57
+ rescue SystemCallError
58
+ end
59
+ }
60
+ original_resolv_send(mesg, flags, addrs[-1], port)
61
+ else
62
+ original_resolv_send(mesg, flags, *rest)
63
+ end
64
+ end
65
+ end
66
+
67
+ class SOCKSSocket < TCPSocket
68
+ # :stopdoc:
69
+ alias original_resolv_initialize initialize
70
+ # :startdoc:
71
+ def initialize(host, serv)
72
+ original_resolv_initialize(IPSocket.getaddress(host), port)
73
+ end
74
+ end if defined? SOCKSSocket
@@ -1,5 +1,4 @@
1
1
  require 'socket'
2
- require 'fcntl'
3
2
  require 'timeout'
4
3
  require 'thread'
5
4
 
@@ -159,7 +158,7 @@ class Resolv
159
158
  ##
160
159
  # Indicates a timeout resolving a name or address.
161
160
 
162
- class ResolvTimeout < TimeoutError; end
161
+ class ResolvTimeout < Timeout::Error; end
163
162
 
164
163
  ##
165
164
  # Resolv::Hosts is a hostname resolver that uses the system hosts file.
@@ -671,8 +670,8 @@ class Resolv
671
670
  timelimit = start + tout
672
671
  begin
673
672
  sender.send
674
- rescue Errno::EHOSTUNREACH
675
- # multi-homed IPv6 may generate this
673
+ rescue Errno::EHOSTUNREACH, # multi-homed IPv6 may generate this
674
+ Errno::ENETUNREACH
676
675
  raise ResolvTimeout
677
676
  end
678
677
  while true
@@ -1067,6 +1066,10 @@ class Resolv
1067
1066
  candidates = []
1068
1067
  end
1069
1068
  candidates.concat(@search.map {|domain| Name.new(name.to_a + domain)})
1069
+ fname = Name.create("#{name}.")
1070
+ if !candidates.include?(fname)
1071
+ candidates << fname
1072
+ end
1070
1073
  end
1071
1074
  return candidates
1072
1075
  end
@@ -1167,7 +1170,9 @@ class Resolv
1167
1170
  class Str # :nodoc:
1168
1171
  def initialize(string)
1169
1172
  @string = string
1170
- @downcase = string.downcase
1173
+ # case insensivity of DNS labels doesn't apply non-ASCII characters. [RFC 4343]
1174
+ # This assumes @string is given in ASCII compatible encoding.
1175
+ @downcase = string.b.downcase
1171
1176
  end
1172
1177
  attr_reader :string, :downcase
1173
1178
 
@@ -1176,11 +1181,11 @@ class Resolv
1176
1181
  end
1177
1182
 
1178
1183
  def inspect
1179
- return "#<#{self.class} #{self.to_s}>"
1184
+ return "#<#{self.class} #{self}>"
1180
1185
  end
1181
1186
 
1182
1187
  def ==(other)
1183
- return @downcase == other.downcase
1188
+ return self.class == other.class && @downcase == other.downcase
1184
1189
  end
1185
1190
 
1186
1191
  def eql?(other)
@@ -1216,12 +1221,20 @@ class Resolv
1216
1221
  end
1217
1222
 
1218
1223
  def initialize(labels, absolute=true) # :nodoc:
1224
+ labels = labels.map {|label|
1225
+ case label
1226
+ when String then Label::Str.new(label)
1227
+ when Label::Str then label
1228
+ else
1229
+ raise ArgumentError, "unexpected label: #{label.inspect}"
1230
+ end
1231
+ }
1219
1232
  @labels = labels
1220
1233
  @absolute = absolute
1221
1234
  end
1222
1235
 
1223
1236
  def inspect # :nodoc:
1224
- "#<#{self.class}: #{self.to_s}#{@absolute ? '.' : ''}>"
1237
+ "#<#{self.class}: #{self}#{@absolute ? '.' : ''}>"
1225
1238
  end
1226
1239
 
1227
1240
  ##
@@ -1233,7 +1246,8 @@ class Resolv
1233
1246
 
1234
1247
  def ==(other) # :nodoc:
1235
1248
  return false unless Name === other
1236
- return @labels.join == other.to_a.join && @absolute == other.absolute?
1249
+ return false unless @absolute == other.absolute?
1250
+ return @labels == other.to_a
1237
1251
  end
1238
1252
 
1239
1253
  alias eql? == # :nodoc:
@@ -1662,10 +1676,10 @@ class Resolv
1662
1676
  return false unless self.class == other.class
1663
1677
  s_ivars = self.instance_variables
1664
1678
  s_ivars.sort!
1665
- s_ivars.delete "@ttl"
1679
+ s_ivars.delete :@ttl
1666
1680
  o_ivars = other.instance_variables
1667
1681
  o_ivars.sort!
1668
- o_ivars.delete "@ttl"
1682
+ o_ivars.delete :@ttl
1669
1683
  return s_ivars == o_ivars &&
1670
1684
  s_ivars.collect {|name| self.instance_variable_get name} ==
1671
1685
  o_ivars.collect {|name| other.instance_variable_get name}
@@ -1678,7 +1692,7 @@ class Resolv
1678
1692
  def hash # :nodoc:
1679
1693
  h = 0
1680
1694
  vars = self.instance_variables
1681
- vars.delete "@ttl"
1695
+ vars.delete :@ttl
1682
1696
  vars.each {|name|
1683
1697
  h ^= self.instance_variable_get(name).hash
1684
1698
  }
@@ -2347,7 +2361,7 @@ class Resolv
2347
2361
  end
2348
2362
 
2349
2363
  def inspect # :nodoc:
2350
- return "#<#{self.class} #{self.to_s}>"
2364
+ return "#<#{self.class} #{self}>"
2351
2365
  end
2352
2366
 
2353
2367
  ##
@@ -2490,7 +2504,7 @@ class Resolv
2490
2504
  end
2491
2505
 
2492
2506
  def inspect # :nodoc:
2493
- return "#<#{self.class} #{self.to_s}>"
2507
+ return "#<#{self.class} #{self}>"
2494
2508
  end
2495
2509
 
2496
2510
  ##
@@ -2640,7 +2654,7 @@ class Resolv
2640
2654
  end
2641
2655
 
2642
2656
  def inspect # :nodoc:
2643
- return "#<#{self.class} #{self.to_s}>"
2657
+ return "#<#{self.class} #{self}>"
2644
2658
  end
2645
2659
 
2646
2660
  def ==(other) # :nodoc:
@@ -2729,7 +2743,7 @@ class Resolv
2729
2743
  end
2730
2744
 
2731
2745
  def inspect # :nodoc:
2732
- return "#<#{self.class} #{self.to_s}>"
2746
+ return "#<#{self.class} #{self}>"
2733
2747
  end
2734
2748
 
2735
2749
  def ==(other) # :nodoc:
@@ -2791,7 +2805,7 @@ class Resolv
2791
2805
  end
2792
2806
 
2793
2807
  def inspect # :nodoc:
2794
- return "#<#{self.class} #{self.to_s}>"
2808
+ return "#<#{self.class} #{self}>"
2795
2809
  end
2796
2810
 
2797
2811
  def ==(other) # :nodoc:
@@ -1,5 +1,5 @@
1
1
  module RubySL
2
2
  module Resolv
3
- VERSION = "2.1.0"
3
+ VERSION = "2.1.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,67 +1,67 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysl-resolv
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Shirai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-24 00:00:00.000000000 Z
11
+ date: 2015-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
14
+ type: :development
15
+ version_requirements: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
- type: :development
20
+ name: bundler
21
21
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
22
+ requirement: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
28
+ type: :development
29
+ version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
- type: :development
34
+ name: rake
35
35
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
36
+ requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: mspec
43
- requirement: !ruby/object:Gem::Requirement
42
+ type: :development
43
+ version_requirements: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.5'
48
- type: :development
48
+ name: mspec
49
49
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
50
+ requirement: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.5'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rubysl-prettyprint
57
- requirement: !ruby/object:Gem::Requirement
56
+ type: :development
57
+ version_requirements: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '2.0'
62
- type: :development
62
+ name: rubysl-prettyprint
63
63
  prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
@@ -77,10 +77,13 @@ files:
77
77
  - ".travis.yml"
78
78
  - Gemfile
79
79
  - LICENSE
80
+ - MRI_LICENSE
80
81
  - README.md
81
82
  - Rakefile
82
83
  - lib/resolv.rb
84
+ - lib/rubysl/resolv-replace.rb
83
85
  - lib/rubysl/resolv.rb
86
+ - lib/rubysl/resolv/resolv-replace.rb
84
87
  - lib/rubysl/resolv/resolv.rb
85
88
  - lib/rubysl/resolv/version.rb
86
89
  - rubysl-resolv.gemspec
@@ -108,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
111
  version: '0'
109
112
  requirements: []
110
113
  rubyforge_project:
111
- rubygems_version: 2.2.1
114
+ rubygems_version: 2.4.5
112
115
  signing_key:
113
116
  specification_version: 4
114
117
  summary: Ruby standard library resolv.
@@ -117,3 +120,4 @@ test_files:
117
120
  - spec/get_addresses_spec.rb
118
121
  - spec/get_name_spec.rb
119
122
  - spec/get_names_spec.rb
123
+ has_rdoc: