net-ssh 2.9.3.beta1 → 2.9.4.rc1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec0f0d0b39f574411bd29862e5a2daa9a1b3dc91
4
- data.tar.gz: a168942e250f47b0667d7d565f140feb9583b9dd
3
+ metadata.gz: c78d95e1a6a176a5758703ee6bae1641841b7ece
4
+ data.tar.gz: b26c48f7574e6f456e7e96fd745989b3435aa253
5
5
  SHA512:
6
- metadata.gz: c1232cbcb52c0f9fbc4d3d2d8e340f9d3a64bde61cf4f579faaa189e815280cc986ee28d55ecb1d019623a6597310eda24fb88e74382e85b986a6a6390bdb645
7
- data.tar.gz: d88ec6f463ada1697a50f1f71e1de20f537d17edf873f76d06034031a5b72ef8520a714ce18af7127e0c89596f81becb8662e0624399a10d7cde0cce87cdae6b
6
+ metadata.gz: 43193bcd4fd4af80ab1e92cd42a94afb062fa46d098bc5ec5231adb2df27e26ac64972ec9ad39c76cee3ca5a0940bebe2307571bbdd64afb523f59daaa5876b5
7
+ data.tar.gz: 91d433f19a523bdaf7389567f1892c73606873e3c0694d7b34b6f58729716068aa8567f7779ca90f036b3cece67a74d08ca4aff4aabc0f65705e0e8d576d3e85
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,18 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.0
6
- - 2.2.0
7
- - jruby-head
8
- - jruby-19mode
9
- - 1.8.7
3
+ - "1.9.3"
4
+ - "2.0.0"
10
5
 
11
- install: gem install test-unit mocha
6
+
7
+ install: gem install jeweler test-unit mocha
12
8
 
13
9
  script: rake test
14
10
 
15
- matrix:
16
- allow_failures:
17
- - rvm: jruby-head
18
- - rvm: 1.8.7
@@ -1,10 +1,10 @@
1
- === 2.9.4-beta1
1
+ === 2.9.4-rc1
2
2
 
3
- * Use sysread and syswrite on Windows instead of read_nonblock and write [marc-etienne]
4
- * Windows/peagant: use fiddle on ruby 2.2+/windows [Charlie Savage]
5
- * Check if ssh key is a file [kiela]
3
+ * Bugfix: CHANNEL_CLOSE was sent before draining ouput buffer #280 [Christopher F. Auston]
6
4
 
7
- === 2.9.3
5
+ [Note: 2.9.3 release changes went to 3.0, 2.9.4 is backport of fix form 3.0]
6
+
7
+ === 2.9.2
8
8
  === 2.9.2-rc3
9
9
 
10
10
  * Remove advertised algorithms that were not working (curve25519-sha256@libssh.org) [mfazekas]
data/Rakefile CHANGED
@@ -8,7 +8,6 @@
8
8
  require "rubygems"
9
9
  require "rake"
10
10
  require "rake/clean"
11
- if RUBY_VERSION >= '1.9.0'
12
11
  require "rdoc/task"
13
12
 
14
13
  task :default => ["build"]
@@ -56,6 +55,11 @@ rescue LoadError
56
55
  puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
57
56
  end
58
57
 
58
+ require 'rake/testtask'
59
+ Rake::TestTask.new do |t|
60
+ t.libs = ["lib", "test"]
61
+ end
62
+
59
63
  extra_files = %w[LICENSE.txt THANKS.txt CHANGES.txt ]
60
64
  RDoc::Task.new do |rdoc|
61
65
  rdoc.rdoc_dir = "rdoc"
@@ -69,12 +73,3 @@ RDoc::Task.new do |rdoc|
69
73
  rdoc.rdoc_files.include(file) if File.exists?(file)
70
74
  }
71
75
  end
72
- end
73
-
74
- require 'rake/testtask'
75
- Rake::TestTask.new do |t|
76
- t.libs = ["lib", "test"]
77
- if RUBY_VERSION < '1.9.0'
78
- t.ruby_opts << '-rubygems'
79
- end
80
- end
@@ -188,18 +188,14 @@ module Net
188
188
  def prepare_identities_from_files
189
189
  key_files.map do |file|
190
190
  public_key_file = file + ".pub"
191
- if readable_file?(public_key_file)
192
- { :load_from => :pubkey_file, :file => public_key_file }
193
- elsif readable_file?(file)
191
+ if File.readable?(public_key_file)
192
+ { :load_from => :pubkey_file, :file => file }
193
+ elsif File.readable?(file)
194
194
  { :load_from => :privkey_file, :file => file }
195
195
  end
196
196
  end.compact
197
197
  end
198
198
 
199
- def readable_file?(path)
200
- File.file?(path) && File.readable?(path)
201
- end
202
-
203
199
  # Prepared identities from user key_data, preserving their order and sources.
204
200
  def prepare_identities_from_data
205
201
  key_data.map do |data|
@@ -213,7 +209,7 @@ module Net
213
209
  begin
214
210
  case identity[:load_from]
215
211
  when :pubkey_file
216
- key = KeyFactory.load_public_key(identity[:file])
212
+ key = KeyFactory.load_public_key(identity[:file] + ".pub")
217
213
  { :public_key => key, :from => :file, :file => identity[:file] }
218
214
  when :privkey_file
219
215
  private_key = KeyFactory.load_private_key(identity[:file], options[:passphrase], ask_passphrase)
@@ -1,20 +1,10 @@
1
+ require 'dl/import'
2
+
1
3
  if RUBY_VERSION < "1.9"
2
- require 'dl/import'
3
4
  require 'dl/struct'
4
- elsif RUBY_VERSION < "2.2"
5
- require 'dl/import'
5
+ else
6
6
  require 'dl/types'
7
7
  require 'dl'
8
- else
9
- require 'fiddle'
10
- require 'fiddle/types'
11
- require 'fiddle/import'
12
-
13
- # For now map DL to Fiddler versus updating all the code below
14
- module DL
15
- CPtr = Fiddle::Pointer
16
- RUBY_FREE = Fiddle::RUBY_FREE
17
- end
18
8
  end
19
9
 
20
10
  require 'net/ssh/errors'
@@ -46,17 +36,12 @@ module Net; module SSH; module Authentication
46
36
  dlload 'advapi32'
47
37
 
48
38
  SIZEOF_DWORD = DL.sizeof('L')
49
- elsif RUBY_VERSION < "2.2"
39
+ else
50
40
  extend DL::Importer
51
41
  dlload 'user32','kernel32', 'advapi32'
52
42
  include DL::Win32Types
53
43
 
54
44
  SIZEOF_DWORD = DL::SIZEOF_LONG
55
- else
56
- extend Fiddle::Importer
57
- dlload 'user32','kernel32', 'advapi32'
58
- include Fiddle::Win32Types
59
- SIZEOF_DWORD = Fiddle::SIZEOF_LONG
60
45
  end
61
46
 
62
47
  typealias("LPCTSTR", "char *") # From winnt.h
@@ -126,7 +126,7 @@ module Net; module SSH; module Connection
126
126
  @pending_requests = []
127
127
  @on_open_failed = @on_data = @on_extended_data = @on_process = @on_close = @on_eof = nil
128
128
  @on_request = {}
129
- @closing = @eof = @sent_eof = false
129
+ @closing = @eof = @sent_eof = @local_closed = @remote_closed = false
130
130
  end
131
131
 
132
132
  # A shortcut for accessing properties of the channel (see #properties).
@@ -269,14 +269,28 @@ module Net; module SSH; module Connection
269
269
  connection.loop { active? }
270
270
  end
271
271
 
272
- # Returns true if the channel is currently closing, but not actually
273
- # closed. A channel is closing when, for instance, #close has been
274
- # invoked, but the server has not yet responded with a CHANNEL_CLOSE
275
- # packet of its own.
272
+ # True if close() has been called; NOTE: if the channel has data waiting to
273
+ # be sent then the channel will close after all the data is sent. See
274
+ # closed?() to determine if we have actually sent CHANNEL_CLOSE to server.
275
+ # This may be true for awhile before closed? returns true if we are still
276
+ # sending buffered output to server.
276
277
  def closing?
277
278
  @closing
278
279
  end
279
280
 
281
+ # True if we have sent CHANNEL_CLOSE to the remote server.
282
+ def local_closed?
283
+ @local_closed
284
+ end
285
+
286
+ def remote_closed?
287
+ @remote_closed
288
+ end
289
+
290
+ def remote_closed!
291
+ @remote_closed = true
292
+ end
293
+
280
294
  # Requests that the channel be closed. If the channel is already closing,
281
295
  # this does nothing, nor does it do anything if the channel has not yet
282
296
  # been confirmed open (see #do_open_confirmation). Otherwise, it sends a
@@ -285,7 +299,6 @@ module Net; module SSH; module Connection
285
299
  return if @closing
286
300
  if remote_id
287
301
  @closing = true
288
- connection.send_message(Buffer.from(:byte, CHANNEL_CLOSE, :long, remote_id))
289
302
  end
290
303
  end
291
304
 
@@ -311,10 +324,16 @@ module Net; module SSH; module Connection
311
324
  @on_process.call(self) if @on_process
312
325
  enqueue_pending_output
313
326
 
314
- if @eof and not @sent_eof and output.empty? and remote_id
327
+ if @eof and not @sent_eof and output.empty? and remote_id and not @local_closed
315
328
  connection.send_message(Buffer.from(:byte, CHANNEL_EOF, :long, remote_id))
316
329
  @sent_eof = true
317
330
  end
331
+
332
+ if @closing and not @local_closed and output.empty? and remote_id
333
+ connection.send_message(Buffer.from(:byte, CHANNEL_CLOSE, :long, remote_id))
334
+ @local_closed = true
335
+ connection.cleanup_channel(self)
336
+ end
318
337
  end
319
338
 
320
339
  # Registers a callback to be invoked when data packets are received by the
@@ -220,7 +220,7 @@ module Net; module SSH; module Connection
220
220
  def preprocess
221
221
  return false if block_given? && !yield(self)
222
222
  dispatch_incoming_packets
223
- channels.each { |id, channel| channel.process unless channel.closing? }
223
+ channels.each { |id, channel| channel.process unless channel.local_closed? }
224
224
  return false if block_given? && !yield(self)
225
225
  return true
226
226
  end
@@ -453,6 +453,14 @@ module Net; module SSH; module Connection
453
453
  old
454
454
  end
455
455
 
456
+ def cleanup_channel(channel)
457
+ if channel.local_closed? and channel.remote_closed?
458
+ info { "#{host} delete channel #{channel.local_id} which closed locally and remotely" }
459
+ channels.delete(channel.local_id)
460
+ end
461
+ end
462
+
463
+
456
464
  private
457
465
 
458
466
  # Read all pending packets from the connection and dispatch them as
@@ -581,9 +589,10 @@ module Net; module SSH; module Connection
581
589
  info { "channel_close: #{packet[:local_id]}" }
582
590
 
583
591
  channel = channels[packet[:local_id]]
592
+ channel.remote_closed!
584
593
  channel.close
585
594
 
586
- channels.delete(packet[:local_id])
595
+ cleanup_channel(channel)
587
596
  channel.do_close
588
597
  end
589
598
 
@@ -1,5 +1,4 @@
1
1
  require 'socket'
2
- require 'rubygems'
3
2
  require 'net/ssh/proxy/errors'
4
3
  require 'net/ssh/ruby_compat'
5
4
 
@@ -68,24 +67,12 @@ module Net; module SSH; module Proxy
68
67
  end
69
68
  @command_line = command_line
70
69
  class << io
71
- if Gem.win_platform?
72
- # read_nonblock and write_nonblock are not available on Windows
73
- # pipe. Use sysread and syswrite as a replacement works.
74
- def send(data, flag)
75
- syswrite(data)
76
- end
77
-
78
- def recv(size)
79
- sysread(size)
80
- end
81
- else
82
- def send(data, flag)
83
- write_nonblock(data)
84
- end
70
+ def send(data, flag)
71
+ write_nonblock(data)
72
+ end
85
73
 
86
- def recv(size)
87
- read_nonblock(size)
88
- end
74
+ def recv(size)
75
+ read_nonblock(size)
89
76
  end
90
77
  end
91
78
  io
@@ -76,6 +76,7 @@ module Net; module SSH; module Transport
76
76
  cipher.padding = 0
77
77
 
78
78
  cipher.extend(Net::SSH::Transport::CTR) if (name =~ /-ctr(@openssh.org)?$/)
79
+
79
80
  cipher.iv = Net::SSH::Transport::KeyExpander.expand_key(cipher.iv_len, options[:iv], options) if ossl_name != "rc4"
80
81
 
81
82
  key_len = KEY_LEN_OVERRIDE[name] || cipher.key_len
@@ -63,15 +63,14 @@ module Net; module SSH; module Transport
63
63
  @options = options
64
64
 
65
65
  debug { "establishing connection to #{@host}:#{@port}" }
66
-
67
- @socket = timeout(options[:timeout] || 0) do
68
- if (factory = options[:proxy])
69
- factory.open(@host, @port, options)
70
- else
71
- TCPSocket.open(@host, @port, @bind_address)
66
+ factory = options[:proxy] || TCPSocket
67
+ @socket = timeout(options[:timeout] || 0) {
68
+ case
69
+ when options[:proxy] then factory.open(@host, @port, options)
70
+ when @bind_address.nil? then factory.open(@host, @port)
71
+ else factory.open(@host, @port, @bind_address)
72
72
  end
73
- end
74
-
73
+ }
75
74
  @socket.extend(PacketStream)
76
75
  @socket.logger = @logger
77
76
 
@@ -51,11 +51,11 @@ module Net; module SSH
51
51
  MINOR = 9
52
52
 
53
53
  # The tiny component of this version of the Net::SSH library
54
- TINY = 3
54
+ TINY = 4
55
55
 
56
56
  # The prerelease component of this version of the Net::SSH library
57
57
  # nil allowed
58
- PRE = 'beta1'
58
+ PRE = "rc1"
59
59
 
60
60
  # The current version of the Net::SSH library as a Version instance
61
61
  CURRENT = new(*[MAJOR, MINOR, TINY, PRE].compact)
@@ -1,20 +1,20 @@
1
1
  -----BEGIN CERTIFICATE-----
2
2
  MIIDODCCAiCgAwIBAgIBADANBgkqhkiG9w0BAQUFADBCMRAwDgYDVQQDDAduZXQt
3
3
  c3NoMRkwFwYKCZImiZPyLGQBGRYJc29sdXRpb3VzMRMwEQYKCZImiZPyLGQBGRYD
4
- Y29tMB4XDTE0MTIwMjE3MzkyMFoXDTE1MTIwMjE3MzkyMFowQjEQMA4GA1UEAwwH
4
+ Y29tMB4XDTE1MTIwNjIxMDYyNFoXDTE2MTIwNTIxMDYyNFowQjEQMA4GA1UEAwwH
5
5
  bmV0LXNzaDEZMBcGCgmSJomT8ixkARkWCXNvbHV0aW91czETMBEGCgmSJomT8ixk
6
- ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ0qnw4JV5JN
7
- MWelqu7pnW2z6GZJ7+zLFYJQNETJyF0U5zo7aCRK08OeUxnpu/TCCXK8iQVkNLfz
8
- 9pVIhF+X8pMEIruAkYGwBt1aWfuSNeyodyMk0vpZdxBHbOTJ4qBRUc6qOtNOeOzv
9
- 8ObYUX52P/EMMaeXTRU+e7MGkB9pb6FvPPNx5akxwIaoRvtcMsc/hJnQuP5r96w6
10
- t06MgKbXhWAX6gev0RVlrQqzxXst6iuvsrgZGjFqzob5wbTiX9M0+bFAB0EI7tJC
11
- sv5keEbtNRaU7p3ZbMm4wTHHJLOtD+BpUCSzwv4ToNj9mZtJBMYw2Eeo7z1DklEG
12
- mr95zbe+zNMCAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQU1bTfpzmitXwv
13
- LmTXi0IO5vd8NGYwCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQA0Aps8
14
- UPINGa8XUUtrZtzrgX0/iyXNkKY1ld85g1N3WKEAVLfQI7TlGr0Qv2Ekx6RqlxbR
15
- Vyq08pytSnghW2otR3bIGMGQzqxAeRLb25cjEwH7YIJ32n7ZC1fpMnBZOBDmueWA
16
- B9EonmoO3ne7AJSgIvBbZzBPhzM4HrQGRW8LsPFsuj+dcJI43HOQwkmv2TRz0+t6
17
- mGZldmqLcK0abv4JepLfB9XTue3kuyA29NGBibqyvRwlKckLpvKfHZX6Jxad8xxm
18
- MbvRpzgROzyfw1qYi4dnIyMwTtXFFcZ0a2jpxHPkcTYFK6TzvFgDLAP0Y/u9jqUQ
19
- eZ7/3CdSi/isZHEw
6
+ ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMYnhNtn0f6p
7
+ nTylB8mE8lMdoMLJC8KwpMWsvk73Pe2WVDsH/OSwwwz6oUGk1i70cJyDjIEBNpwT
8
+ 88GpVXJSumvqVsf9fCg3mWNeb5t0J+aeNm9MIvYVMTqj5tydoXQiwnILRDYHV9tZ
9
+ 1c3o59/VlahSTpZ7YEgzVufpAkvEGkbJiG849exiipK7MN/ZIkMOxYVnyRXk43Xc
10
+ 6GYlsHOfSgPwcXwW5g57DCwLQLWrjDsTka28dxDmO7B5Lv5EqzINxVxWsu43OgZG
11
+ 21Io/jIyf5PNpeKPKNGDuAQJ8mvdMYBJoDhtCwgsUYbl0BZzA7g4ytl51HtIeP+j
12
+ Qp/eAvs/RrECAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQUBfKiwO2eM4NE
13
+ iRrVG793qEPLYyMwCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQCfZFdb
14
+ p4jzkfIzGDbiOxd0R8sdqJoC4nMLEgnQ7dLulawwA3IXe3sHAKgA5kmH3prsKc5H
15
+ zVmM5NlH2P1nRbegIkQTYiIod1hZQCNxdmVG/fprMqPq0ybpUOjjrP5pj0OtszE1
16
+ F2dQia1hOEstMR+n0nAtWII9HJAEyeZjVV0s2Cl7Pt85XJ3hxFcCKwzqsK5xRI7a
17
+ B3vwh3/JJYrFonIohQ//Lg9qTZASEkoKLlq1/hFeICoCGGIGLq45ZB7CzXLooCKi
18
+ s/ZUKye79ELwFYKJOhjW5g725OL3hy+llhEleytwKRwgXFQBPTC4f5UkdxZVVWGH
19
+ e2C9M1m/2odPZo8h
20
20
  -----END CERTIFICATE-----
@@ -2,17 +2,17 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: net-ssh 2.9.3.beta1 ruby lib
5
+ # stub: net-ssh 2.9.4.rc1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "net-ssh"
9
- s.version = "2.9.3.beta1"
9
+ s.version = "2.9.4.rc1"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Jamis Buck", "Delano Mandelbaum", "Mikl\u{f3}s Fazekas"]
14
14
  s.cert_chain = ["net-ssh-public_cert.pem"]
15
- s.date = "2015-01-27"
15
+ s.date = "2015-12-10"
16
16
  s.description = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2."
17
17
  s.email = "net-ssh@solutious.com"
18
18
  s.extra_rdoc_files = [
@@ -181,7 +181,7 @@ Gem::Specification.new do |s|
181
181
  s.homepage = "https://github.com/net-ssh/net-ssh"
182
182
  s.licenses = ["MIT"]
183
183
  s.rubyforge_project = "net-ssh"
184
- s.rubygems_version = "2.2.2"
184
+ s.rubygems_version = "2.4.6"
185
185
  s.signing_key = "/mnt/gem/net-ssh-private_key.pem"
186
186
  s.summary = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
187
187
 
@@ -156,9 +156,7 @@ module Authentication
156
156
 
157
157
  def stub_file_private_key(name, key, options = {})
158
158
  manager.add(name)
159
- File.stubs(:file?).with(name).returns(true)
160
159
  File.stubs(:readable?).with(name).returns(true)
161
- File.stubs(:file?).with(name + ".pub").returns(true)
162
160
  File.stubs(:readable?).with(name + ".pub").returns(false)
163
161
 
164
162
  case options.fetch(:passphrase, :indifferently)
@@ -181,9 +179,7 @@ module Authentication
181
179
 
182
180
  def stub_file_public_key(name, key)
183
181
  manager.add(name)
184
- File.stubs(:file?).with(name).returns(true)
185
182
  File.stubs(:readable?).with(name).returns(false)
186
- File.stubs(:file?).with(name + ".pub").returns(true)
187
183
  File.stubs(:readable?).with(name + ".pub").returns(true)
188
184
 
189
185
  Net::SSH::KeyFactory.expects(:load_public_key).with(name + ".pub").returns(key).at_least_once
@@ -74,8 +74,11 @@ module Connection
74
74
  assert !channel.closing?
75
75
 
76
76
  connection.expect { |t,packet| assert_equal CHANNEL_CLOSE, packet.type }
77
+ connection.expects(:cleanup_channel).with(channel)
77
78
  channel.close
78
79
 
80
+ channel.process
81
+
79
82
  assert channel.closing?
80
83
  end
81
84
 
@@ -117,14 +117,14 @@ module Connection
117
117
  end
118
118
 
119
119
  def test_process_should_exit_after_processing_if_block_is_true_then_false
120
- session.channels[0] = stub("channel", :closing? => false)
120
+ session.channels[0] = stub("channel", :local_closed? => false)
121
121
  session.channels[0].expects(:process)
122
122
  IO.expects(:select).never
123
123
  process_times(2)
124
124
  end
125
125
 
126
126
  def test_process_should_not_process_channels_that_are_closing
127
- session.channels[0] = stub("channel", :closing? => true)
127
+ session.channels[0] = stub("channel", :local_closed? => true)
128
128
  session.channels[0].expects(:process).never
129
129
  IO.expects(:select).never
130
130
  process_times(2)
@@ -299,8 +299,17 @@ module Connection
299
299
  end
300
300
 
301
301
  def test_channel_close_packet_should_be_routed_to_corresponding_channel_and_channel_should_be_closed_and_removed
302
- channel_at(14).expects(:do_close).with()
303
- session.channels[14].expects(:close).with()
302
+ session.channels[14] = stub("channel") do
303
+ # this simulates the case where we closed the channel first, sent
304
+ # CHANNEL_CLOSE to server and are waiting for server's response.
305
+ expects(:local_closed?).returns(true)
306
+ expects(:do_close)
307
+ expects(:close).with()
308
+ expects(:remote_closed!).with()
309
+ expects(:remote_closed?).with().returns(true)
310
+ expects(:local_id).returns(14)
311
+ end
312
+
304
313
  transport.return(CHANNEL_CLOSE, :long, 14)
305
314
  process_times(2)
306
315
  assert session.channels.empty?
@@ -523,7 +532,7 @@ module Connection
523
532
  end
524
533
 
525
534
  def channel_at(local_id)
526
- session.channels[local_id] = stub("channel", :process => true, :closing? => false)
535
+ session.channels[local_id] = stub("channel", :process => true, :local_closed? => false)
527
536
  end
528
537
 
529
538
  def transport(options={})
@@ -315,7 +315,7 @@ module Transport
315
315
  def session(options={})
316
316
  @session ||= begin
317
317
  host = options.delete(:host) || "net.ssh.test"
318
- TCPSocket.stubs(:open).with(host, options[:port] || 22, nil).returns(socket)
318
+ TCPSocket.stubs(:open).with(host, options[:port] || 22).returns(socket)
319
319
  Net::SSH::Transport::ServerVersion.stubs(:new).returns(server_version)
320
320
  Net::SSH::Transport::Algorithms.stubs(:new).returns(algorithms)
321
321
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-ssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.3.beta1
4
+ version: 2.9.4.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamis Buck
@@ -14,51 +14,51 @@ cert_chain:
14
14
  -----BEGIN CERTIFICATE-----
15
15
  MIIDODCCAiCgAwIBAgIBADANBgkqhkiG9w0BAQUFADBCMRAwDgYDVQQDDAduZXQt
16
16
  c3NoMRkwFwYKCZImiZPyLGQBGRYJc29sdXRpb3VzMRMwEQYKCZImiZPyLGQBGRYD
17
- Y29tMB4XDTE0MTIwMjE3MzkyMFoXDTE1MTIwMjE3MzkyMFowQjEQMA4GA1UEAwwH
17
+ Y29tMB4XDTE1MTIwNjIxMDYyNFoXDTE2MTIwNTIxMDYyNFowQjEQMA4GA1UEAwwH
18
18
  bmV0LXNzaDEZMBcGCgmSJomT8ixkARkWCXNvbHV0aW91czETMBEGCgmSJomT8ixk
19
- ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ0qnw4JV5JN
20
- MWelqu7pnW2z6GZJ7+zLFYJQNETJyF0U5zo7aCRK08OeUxnpu/TCCXK8iQVkNLfz
21
- 9pVIhF+X8pMEIruAkYGwBt1aWfuSNeyodyMk0vpZdxBHbOTJ4qBRUc6qOtNOeOzv
22
- 8ObYUX52P/EMMaeXTRU+e7MGkB9pb6FvPPNx5akxwIaoRvtcMsc/hJnQuP5r96w6
23
- t06MgKbXhWAX6gev0RVlrQqzxXst6iuvsrgZGjFqzob5wbTiX9M0+bFAB0EI7tJC
24
- sv5keEbtNRaU7p3ZbMm4wTHHJLOtD+BpUCSzwv4ToNj9mZtJBMYw2Eeo7z1DklEG
25
- mr95zbe+zNMCAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQU1bTfpzmitXwv
26
- LmTXi0IO5vd8NGYwCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQA0Aps8
27
- UPINGa8XUUtrZtzrgX0/iyXNkKY1ld85g1N3WKEAVLfQI7TlGr0Qv2Ekx6RqlxbR
28
- Vyq08pytSnghW2otR3bIGMGQzqxAeRLb25cjEwH7YIJ32n7ZC1fpMnBZOBDmueWA
29
- B9EonmoO3ne7AJSgIvBbZzBPhzM4HrQGRW8LsPFsuj+dcJI43HOQwkmv2TRz0+t6
30
- mGZldmqLcK0abv4JepLfB9XTue3kuyA29NGBibqyvRwlKckLpvKfHZX6Jxad8xxm
31
- MbvRpzgROzyfw1qYi4dnIyMwTtXFFcZ0a2jpxHPkcTYFK6TzvFgDLAP0Y/u9jqUQ
32
- eZ7/3CdSi/isZHEw
19
+ ARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMYnhNtn0f6p
20
+ nTylB8mE8lMdoMLJC8KwpMWsvk73Pe2WVDsH/OSwwwz6oUGk1i70cJyDjIEBNpwT
21
+ 88GpVXJSumvqVsf9fCg3mWNeb5t0J+aeNm9MIvYVMTqj5tydoXQiwnILRDYHV9tZ
22
+ 1c3o59/VlahSTpZ7YEgzVufpAkvEGkbJiG849exiipK7MN/ZIkMOxYVnyRXk43Xc
23
+ 6GYlsHOfSgPwcXwW5g57DCwLQLWrjDsTka28dxDmO7B5Lv5EqzINxVxWsu43OgZG
24
+ 21Io/jIyf5PNpeKPKNGDuAQJ8mvdMYBJoDhtCwgsUYbl0BZzA7g4ytl51HtIeP+j
25
+ Qp/eAvs/RrECAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQUBfKiwO2eM4NE
26
+ iRrVG793qEPLYyMwCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQCfZFdb
27
+ p4jzkfIzGDbiOxd0R8sdqJoC4nMLEgnQ7dLulawwA3IXe3sHAKgA5kmH3prsKc5H
28
+ zVmM5NlH2P1nRbegIkQTYiIod1hZQCNxdmVG/fprMqPq0ybpUOjjrP5pj0OtszE1
29
+ F2dQia1hOEstMR+n0nAtWII9HJAEyeZjVV0s2Cl7Pt85XJ3hxFcCKwzqsK5xRI7a
30
+ B3vwh3/JJYrFonIohQ//Lg9qTZASEkoKLlq1/hFeICoCGGIGLq45ZB7CzXLooCKi
31
+ s/ZUKye79ELwFYKJOhjW5g725OL3hy+llhEleytwKRwgXFQBPTC4f5UkdxZVVWGH
32
+ e2C9M1m/2odPZo8h
33
33
  -----END CERTIFICATE-----
34
- date: 2015-01-27 00:00:00.000000000 Z
34
+ date: 2015-12-10 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: test-unit
38
38
  requirement: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - '>='
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0'
43
43
  type: :development
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: mocha
52
52
  requirement: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - '>='
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  type: :development
58
58
  prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - '>='
61
+ - - ">="
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  description: 'Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It
@@ -71,7 +71,7 @@ extra_rdoc_files:
71
71
  - LICENSE.txt
72
72
  - README.rdoc
73
73
  files:
74
- - .travis.yml
74
+ - ".travis.yml"
75
75
  - CHANGES.txt
76
76
  - LICENSE.txt
77
77
  - Manifest
@@ -238,17 +238,17 @@ require_paths:
238
238
  - lib
239
239
  required_ruby_version: !ruby/object:Gem::Requirement
240
240
  requirements:
241
- - - '>='
241
+ - - ">="
242
242
  - !ruby/object:Gem::Version
243
243
  version: '0'
244
244
  required_rubygems_version: !ruby/object:Gem::Requirement
245
245
  requirements:
246
- - - '>'
246
+ - - ">"
247
247
  - !ruby/object:Gem::Version
248
248
  version: 1.3.1
249
249
  requirements: []
250
250
  rubyforge_project: net-ssh
251
- rubygems_version: 2.2.2
251
+ rubygems_version: 2.4.6
252
252
  signing_key:
253
253
  specification_version: 4
254
254
  summary: 'Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.'
metadata.gz.sig CHANGED
@@ -1 +1,4 @@
1
- �����"e�k�<�wж�.)ì-0oeb�;S�k~'}M��mR��Q�|��*��,ލC�A�D�ߪ�~��k@�t��Y�O����9qa�}� �6-!�y�8���)2�g���]��D���\ ��-(��F���!^���:�=���Q����A�;g�J�f00��co��l/Pi��<�DQ��u�ѡ�ze���?��zb���j�U�ъ�i虃6�݇R��,��g����cҔ�n�ζ/n���u���{���Ʒ
1
+ �`|���t�#"r��'j��5�+��A
2
+ �Ǒ��v1��-5�[��t
3
+ ��K��]0�k��-��B�u 3���Э[7�_�pο�l�8���_�������;Z��u�XhuKe�?{�w�j>HqGK��[ ᡴ�~Y�TU����K���^�s�Ų�������˿´{�z����Z��L<��w�"Z��6����-kZ�+� ���o�5$s5L9
4
+ @4���$��6?�
2
- >� �#tn=Ѹ�:�M��f4