net-ssh 3.0.2 → 3.1.0.beta2
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.travis.yml +1 -0
- data/CHANGES.txt +9 -0
- data/lib/net/ssh.rb +4 -1
- data/lib/net/ssh/authentication/pageant.rb +2 -2
- data/lib/net/ssh/config.rb +9 -0
- data/lib/net/ssh/connection/channel.rb +10 -7
- data/lib/net/ssh/known_hosts.rb +26 -1
- data/lib/net/ssh/transport/algorithms.rb +1 -1
- data/lib/net/ssh/transport/server_version.rb +4 -3
- data/lib/net/ssh/transport/session.rb +7 -0
- data/lib/net/ssh/verifiers/secure.rb +8 -10
- data/lib/net/ssh/version.rb +3 -3
- data/net-ssh.gemspec +4 -4
- data/test/common.rb +1 -0
- data/test/connection/test_channel.rb +19 -2
- data/test/test_config.rb +6 -1
- data/test/transport/test_packet_stream.rb +2 -2
- data/test/transport/test_server_version.rb +3 -7
- metadata +4 -4
- metadata.gz.sig +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8014163f04248cb8c0d06a2b0f9eb99650c4ca1f
         | 
| 4 | 
            +
              data.tar.gz: 4a3a4ffd2cc73052808781409b6be9bdf7a336a8
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e70e296ef1844a744fcbb69304203e8e758f5eaf2e5ab89ec3a4352c6fefd12a59395800aecf3efc4ba34b3dfed3ae6f0a729542da1c48173b88c5b0b4d15884
         | 
| 7 | 
            +
              data.tar.gz: 4c10b1d730425a42f606fc0119080894de291d6d7949854246b71bfe1a62d7056d59edce2e789ca7ef8355e4c6d2ff1c2a0158089f4213d8b8516e08f2dc4c23
         | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | Binary file | 
    
        data.tar.gz.sig
    CHANGED
    
    | Binary file | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/CHANGES.txt
    CHANGED
    
    | @@ -1,3 +1,12 @@ | |
| 1 | 
            +
            === 3.1.0.beta1
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * trying to execute something on a not yet opend channel throws nicer messag [Miklos Fazekas]
         | 
| 4 | 
            +
            * calling close on a not opened channel marks the channel for close [Miklos Fazekas]
         | 
| 5 | 
            +
            * read keepalive configuration from ssh config files [Miklos Fazekas]
         | 
| 6 | 
            +
            * send client version on hadshake before waiting for server to reduce handshake time [Miklos Fazekas]
         | 
| 7 | 
            +
            * allow custom Net::SSH::KnownHosts implementations [Jean Boussier]
         | 
| 8 | 
            +
            * memoize known host so we only search it once per session [Jean Boussier, Miklos Fazekas]
         | 
| 9 | 
            +
             | 
| 1 10 | 
             
            === 3.0.2
         | 
| 2 11 | 
             
            === 3.0.2.rc1
         | 
| 3 12 |  | 
    
        data/lib/net/ssh.rb
    CHANGED
    
    | @@ -66,7 +66,7 @@ module Net | |
| 66 66 | 
             
                  :keepalive, :keepalive_interval, :keepalive_maxcount, :kex, :keys, :key_data,
         | 
| 67 67 | 
             
                  :languages, :logger, :paranoid, :password, :port, :proxy,
         | 
| 68 68 | 
             
                  :rekey_blocks_limit,:rekey_limit, :rekey_packet_limit, :timeout, :verbose,
         | 
| 69 | 
            -
                  :global_known_hosts_file, :user_known_hosts_file, :host_key_alias,
         | 
| 69 | 
            +
                  :known_hosts, :global_known_hosts_file, :user_known_hosts_file, :host_key_alias,
         | 
| 70 70 | 
             
                  :host_name, :user, :properties, :passphrase, :keys_only, :max_pkt_size,
         | 
| 71 71 | 
             
                  :max_win_size, :send_env, :use_agent, :number_of_password_prompts,
         | 
| 72 72 | 
             
                  :append_supported_algorithms, :non_interactive
         | 
| @@ -114,6 +114,8 @@ module Net | |
| 114 114 | 
             
                # * :encryption => the encryption cipher (or ciphers) to use
         | 
| 115 115 | 
             
                # * :forward_agent => set to true if you want the SSH agent connection to
         | 
| 116 116 | 
             
                #   be forwarded
         | 
| 117 | 
            +
                # * :known_hosts => a custom object holding known hosts records.
         | 
| 118 | 
            +
                #   It must implement #search_for and add in a similiar manner as KnownHosts.
         | 
| 117 119 | 
             
                # * :global_known_hosts_file => the location of the global known hosts
         | 
| 118 120 | 
             
                #   file. Set to an array if you want to specify multiple global known
         | 
| 119 121 | 
             
                #   hosts files. Defaults to %w(/etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2).
         | 
| @@ -132,6 +134,7 @@ module Net | |
| 132 134 | 
             
                # * :keepalive_interval => the interval seconds for keepalive.
         | 
| 133 135 | 
             
                #   Defaults to +300+ seconds.
         | 
| 134 136 | 
             
                # * :keepalive_maxcount => the maximun number of keepalive packet miss allowed.
         | 
| 137 | 
            +
                #   Defaults to 3
         | 
| 135 138 | 
             
                # * :kex => the key exchange algorithm (or algorithms) to use
         | 
| 136 139 | 
             
                # * :keys => an array of file names of private keys to use for publickey
         | 
| 137 140 | 
             
                #   and hostbased authentication
         | 
    
        data/lib/net/ssh/config.rb
    CHANGED
    
    | @@ -178,6 +178,15 @@ module Net; module SSH | |
| 178 178 | 
             
                        hash[:keys] = value
         | 
| 179 179 | 
             
                      when 'macs' then
         | 
| 180 180 | 
             
                        hash[:hmac] = value.split(/,/)
         | 
| 181 | 
            +
                      when 'serveralivecountmax'
         | 
| 182 | 
            +
                        hash[:keepalive_maxcount] = value.to_i if value
         | 
| 183 | 
            +
                      when 'serveraliveinterval'
         | 
| 184 | 
            +
                        if value && value.to_i > 0
         | 
| 185 | 
            +
                          hash[:keepalive] = true
         | 
| 186 | 
            +
                          hash[:keepalive_interval] = value.to_i
         | 
| 187 | 
            +
                        else
         | 
| 188 | 
            +
                          hash[:keepalive] = false
         | 
| 189 | 
            +
                        end
         | 
| 181 190 | 
             
                      when 'passwordauthentication'
         | 
| 182 191 | 
             
                        if value
         | 
| 183 192 | 
             
                          (hash[:auth_methods] << 'password').uniq!
         | 
| @@ -291,15 +291,11 @@ module Net; module SSH; module Connection | |
| 291 291 | 
             
                  @remote_closed = true
         | 
| 292 292 | 
             
                end
         | 
| 293 293 |  | 
| 294 | 
            -
                # Requests that the channel be closed.  | 
| 295 | 
            -
                #  | 
| 296 | 
            -
                # been confirmed open (see #do_open_confirmation). Otherwise, it sends a
         | 
| 297 | 
            -
                # CHANNEL_CLOSE message and marks the channel as closing.
         | 
| 294 | 
            +
                # Requests that the channel be closed. It only marks the channel to be closed
         | 
| 295 | 
            +
                # the CHANNEL_CLOSE message will be sent from event loop
         | 
| 298 296 | 
             
                def close
         | 
| 299 297 | 
             
                  return if @closing
         | 
| 300 | 
            -
                   | 
| 301 | 
            -
                    @closing = true
         | 
| 302 | 
            -
                  end
         | 
| 298 | 
            +
                  @closing = true
         | 
| 303 299 | 
             
                end
         | 
| 304 300 |  | 
| 305 301 | 
             
                # Returns true if the local end of the channel has declared that no more
         | 
| @@ -486,6 +482,7 @@ module Net; module SSH; module Connection | |
| 486 482 | 
             
                # convenient helper methods (see #exec and #subsystem).
         | 
| 487 483 | 
             
                def send_channel_request(request_name, *data, &callback)
         | 
| 488 484 | 
             
                  info { "sending channel request #{request_name.inspect}" }
         | 
| 485 | 
            +
                  fail "Channel open not yet confirmed, please call send_channel_request(or exec) from block of open_channel" unless remote_id
         | 
| 489 486 | 
             
                  msg = Buffer.from(:byte, CHANNEL_REQUEST,
         | 
| 490 487 | 
             
                    :long, remote_id, :string, request_name,
         | 
| 491 488 | 
             
                    :bool, !callback.nil?, *data)
         | 
| @@ -632,6 +629,12 @@ module Net; module SSH; module Connection | |
| 632 629 |  | 
| 633 630 | 
             
                private
         | 
| 634 631 |  | 
| 632 | 
            +
                  # Runs the SSH event loop until the remote confirmed channel open
         | 
| 633 | 
            +
                  # experimental api
         | 
| 634 | 
            +
                  def wait_until_open_confirmed
         | 
| 635 | 
            +
                    connection.loop { !remote_id }
         | 
| 636 | 
            +
                  end
         | 
| 637 | 
            +
             | 
| 635 638 | 
             
                  # Updates the local window size by the given amount. If the window
         | 
| 636 639 | 
             
                  # size drops to less than half of the local maximum (an arbitrary
         | 
| 637 640 | 
             
                  # threshold), a CHANNEL_WINDOW_ADJUST message will be sent to the
         | 
    
        data/lib/net/ssh/known_hosts.rb
    CHANGED
    
    | @@ -5,6 +5,31 @@ require 'net/ssh/buffer' | |
| 5 5 |  | 
| 6 6 | 
             
            module Net; module SSH
         | 
| 7 7 |  | 
| 8 | 
            +
              class HostKeys
         | 
| 9 | 
            +
                include Enumerable
         | 
| 10 | 
            +
                attr_reader :host
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def initialize(host_keys, host, known_hosts, options = {})
         | 
| 13 | 
            +
                   @host_keys = host_keys
         | 
| 14 | 
            +
                   @host = host
         | 
| 15 | 
            +
                   @known_hosts = known_hosts
         | 
| 16 | 
            +
                   @options = options
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def add_host_key(key)
         | 
| 20 | 
            +
                   @known_hosts.add(@host, key, options)
         | 
| 21 | 
            +
                   push(key)
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def each(&block)
         | 
| 25 | 
            +
                   @host_keys.each(&block)
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def empty?
         | 
| 29 | 
            +
                  @host_keys.empty?
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 8 33 | 
             
              # Searches an OpenSSH-style known-host file for a given host, and returns all
         | 
| 9 34 | 
             
              # matching keys. This is used to implement host-key verification, as well as
         | 
| 10 35 | 
             
              # to determine what key a user prefers to use for a given host.
         | 
| @@ -28,7 +53,7 @@ module Net; module SSH | |
| 28 53 | 
             
                  # Searches all known host files (see KnownHosts.hostfiles) for all keys
         | 
| 29 54 | 
             
                  # of the given host. Returns an array of keys found.
         | 
| 30 55 | 
             
                  def search_for(host, options={})
         | 
| 31 | 
            -
                    search_in(hostfiles(options), host)
         | 
| 56 | 
            +
                    HostKeys.new(search_in(hostfiles(options), host), host, self, options)
         | 
| 32 57 | 
             
                  end
         | 
| 33 58 |  | 
| 34 59 | 
             
                  # Search for all known keys for the given host, in every file given in
         | 
| @@ -242,7 +242,7 @@ module Net; module SSH; module Transport | |
| 242 242 | 
             
                      # make sure the host keys are specified in preference order, where any
         | 
| 243 243 | 
             
                      # existing known key for the host has preference.
         | 
| 244 244 |  | 
| 245 | 
            -
                      existing_keys =  | 
| 245 | 
            +
                      existing_keys = session.host_keys
         | 
| 246 246 | 
             
                      host_keys = existing_keys.map { |key| key.ssh_type }.uniq
         | 
| 247 247 | 
             
                      algorithms[:host_key].each do |name|
         | 
| 248 248 | 
             
                        host_keys << name unless host_keys.include?(name)
         | 
| @@ -40,6 +40,10 @@ module Net; module SSH; module Transport | |
| 40 40 | 
             
                  def negotiate!(socket, timeout)
         | 
| 41 41 | 
             
                    info { "negotiating protocol version" }
         | 
| 42 42 |  | 
| 43 | 
            +
                    debug { "local is `#{PROTO_VERSION}'" }
         | 
| 44 | 
            +
                    socket.write "#{PROTO_VERSION}\r\n"
         | 
| 45 | 
            +
                    socket.flush
         | 
| 46 | 
            +
             | 
| 43 47 | 
             
                    if timeout && !IO.select([socket], nil, nil, timeout)
         | 
| 44 48 | 
             
                      raise Net::SSH::ConnectionTimeout, "timeout during server version negotiating"
         | 
| 45 49 | 
             
                    end
         | 
| @@ -69,9 +73,6 @@ module Net; module SSH; module Transport | |
| 69 73 | 
             
                    if timeout && !IO.select(nil, [socket], nil, timeout)
         | 
| 70 74 | 
             
                      raise Net::SSH::ConnectionTimeout, "timeout during client version negotiating"
         | 
| 71 75 | 
             
                    end
         | 
| 72 | 
            -
                    debug { "local is `#{PROTO_VERSION}'" }
         | 
| 73 | 
            -
                    socket.write "#{PROTO_VERSION}\r\n"
         | 
| 74 | 
            -
                    socket.flush
         | 
| 75 76 | 
             
                  end
         | 
| 76 77 | 
             
              end
         | 
| 77 78 | 
             
            end; end; end
         | 
| @@ -89,6 +89,13 @@ module Net; module SSH; module Transport | |
| 89 89 | 
             
                  raise Net::SSH::ConnectionTimeout
         | 
| 90 90 | 
             
                end
         | 
| 91 91 |  | 
| 92 | 
            +
                def host_keys
         | 
| 93 | 
            +
                  @host_keys ||= begin
         | 
| 94 | 
            +
                    known_hosts = options.fetch(:known_hosts, KnownHosts)
         | 
| 95 | 
            +
                    known_hosts.search_for(options[:host_key_alias] || host_as_string, options)
         | 
| 96 | 
            +
                  end
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
             | 
| 92 99 | 
             
                # Returns the host (and possibly IP address) in a format compatible with
         | 
| 93 100 | 
             
                # SSH known-host files.
         | 
| 94 101 | 
             
                def host_as_string
         | 
| @@ -13,18 +13,16 @@ module Net; module SSH; module Verifiers | |
| 13 13 | 
             
              # Otherwise, this returns true.
         | 
| 14 14 | 
             
              class Secure
         | 
| 15 15 | 
             
                def verify(arguments)
         | 
| 16 | 
            -
                   | 
| 17 | 
            -
                  host = options[:host_key_alias] || arguments[:session].host_as_string
         | 
| 18 | 
            -
                  matches = Net::SSH::KnownHosts.search_for(host, arguments[:session].options)
         | 
| 16 | 
            +
                  host_keys = arguments[:session].host_keys
         | 
| 19 17 |  | 
| 20 18 | 
             
                  # We've never seen this host before, so raise an exception.
         | 
| 21 | 
            -
                  if  | 
| 22 | 
            -
                    process_cache_miss( | 
| 19 | 
            +
                  if host_keys.empty?
         | 
| 20 | 
            +
                    process_cache_miss(host_keys, arguments, HostKeyUnknown, "is unknown")
         | 
| 23 21 | 
             
                  end
         | 
| 24 22 |  | 
| 25 23 | 
             
                  # If we found any matches, check to see that the key type and
         | 
| 26 24 | 
             
                  # blob also match.
         | 
| 27 | 
            -
                  found =  | 
| 25 | 
            +
                  found = host_keys.any? do |key|
         | 
| 28 26 | 
             
                    key.ssh_type == arguments[:key].ssh_type &&
         | 
| 29 27 | 
             
                    key.to_blob  == arguments[:key].to_blob
         | 
| 30 28 | 
             
                  end
         | 
| @@ -32,7 +30,7 @@ module Net; module SSH; module Verifiers | |
| 32 30 | 
             
                  # If a match was found, return true. Otherwise, raise an exception
         | 
| 33 31 | 
             
                  # indicating that the key was not recognized.
         | 
| 34 32 | 
             
                  unless found
         | 
| 35 | 
            -
                    process_cache_miss( | 
| 33 | 
            +
                    process_cache_miss(host_keys, HostKeyMismatch, "does not match")
         | 
| 36 34 | 
             
                  end
         | 
| 37 35 |  | 
| 38 36 | 
             
                  found
         | 
| @@ -40,12 +38,12 @@ module Net; module SSH; module Verifiers | |
| 40 38 |  | 
| 41 39 | 
             
                private
         | 
| 42 40 |  | 
| 43 | 
            -
                def process_cache_miss( | 
| 41 | 
            +
                def process_cache_miss(host_keys, args, exc_class, message)
         | 
| 44 42 | 
             
                  exception = exc_class.new("fingerprint #{args[:fingerprint]} " +
         | 
| 45 | 
            -
                                            "#{message} for #{host.inspect}")
         | 
| 43 | 
            +
                                            "#{message} for #{host_keys.host.inspect}")
         | 
| 46 44 | 
             
                  exception.data = args
         | 
| 47 45 | 
             
                  exception.callback = Proc.new do
         | 
| 48 | 
            -
                     | 
| 46 | 
            +
                    host_keys.add_host_key(args[:key])
         | 
| 49 47 | 
             
                  end
         | 
| 50 48 | 
             
                  raise exception
         | 
| 51 49 | 
             
                end
         | 
    
        data/lib/net/ssh/version.rb
    CHANGED
    
    | @@ -48,14 +48,14 @@ module Net; module SSH | |
| 48 48 | 
             
                MAJOR = 3
         | 
| 49 49 |  | 
| 50 50 | 
             
                # The minor component of this version of the Net::SSH library
         | 
| 51 | 
            -
                MINOR =  | 
| 51 | 
            +
                MINOR = 1
         | 
| 52 52 |  | 
| 53 53 | 
             
                # The tiny component of this version of the Net::SSH library
         | 
| 54 | 
            -
                TINY  =  | 
| 54 | 
            +
                TINY  = 0
         | 
| 55 55 |  | 
| 56 56 | 
             
                # The prerelease component of this version of the Net::SSH library 
         | 
| 57 57 | 
             
                # nil allowed
         | 
| 58 | 
            -
                PRE   =  | 
| 58 | 
            +
                PRE   = "beta2"
         | 
| 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)
         | 
    
        data/net-ssh.gemspec
    CHANGED
    
    | @@ -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 3.0. | 
| 5 | 
            +
            # stub: net-ssh 3.1.0.beta2 ruby lib
         | 
| 6 6 |  | 
| 7 7 | 
             
            Gem::Specification.new do |s|
         | 
| 8 8 | 
             
              s.name = "net-ssh"
         | 
| 9 | 
            -
              s.version = "3.0. | 
| 9 | 
            +
              s.version = "3.1.0.beta2"
         | 
| 10 10 |  | 
| 11 | 
            -
              s.required_rubygems_version = Gem::Requirement.new(" | 
| 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 = " | 
| 15 | 
            +
              s.date = "2016-03-05"
         | 
| 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 = [
         | 
    
        data/test/common.rb
    CHANGED
    
    | @@ -41,6 +41,7 @@ class MockTransport < Net::SSH::Transport::Session | |
| 41 41 | 
             
              attr_accessor :mock_enqueue
         | 
| 42 42 |  | 
| 43 43 | 
             
              def initialize(options={})
         | 
| 44 | 
            +
                @options = options
         | 
| 44 45 | 
             
                self.logger = options[:logger]
         | 
| 45 46 | 
             
                self.host_as_string = "net.ssh.test,127.0.0.1"
         | 
| 46 47 | 
             
                self.server_version = OpenStruct.new(:version => "SSH-2.0-Ruby/Net::SSH::Test")
         | 
| @@ -63,10 +63,10 @@ module Connection | |
| 63 63 | 
             
                  assert_equal "helloworld", channel.output.to_s
         | 
| 64 64 | 
             
                end
         | 
| 65 65 |  | 
| 66 | 
            -
                def  | 
| 66 | 
            +
                def test_close_before_channel_has_been_confirmed_should_set_closing
         | 
| 67 67 | 
             
                  assert !channel.closing?
         | 
| 68 68 | 
             
                  channel.close
         | 
| 69 | 
            -
                  assert  | 
| 69 | 
            +
                  assert channel.closing?
         | 
| 70 70 | 
             
                end
         | 
| 71 71 |  | 
| 72 72 | 
             
                def test_close_should_set_closing_and_send_message
         | 
| @@ -261,6 +261,18 @@ module Connection | |
| 261 261 | 
             
                  assert channel.pending_requests.empty?
         | 
| 262 262 | 
             
                end
         | 
| 263 263 |  | 
| 264 | 
            +
                def test_send_channel_request_should_wait_for_remote_id
         | 
| 265 | 
            +
                  channel.expects(:remote_id).times(1).returns(nil)
         | 
| 266 | 
            +
                  msg = nil
         | 
| 267 | 
            +
                  begin
         | 
| 268 | 
            +
                    channel.send_channel_request("exec", :string, "ls")
         | 
| 269 | 
            +
                  rescue RuntimeError => e
         | 
| 270 | 
            +
                    msg = e.message
         | 
| 271 | 
            +
                  end
         | 
| 272 | 
            +
                  assert_equal "Channel open not yet confirmed, please call send_channel_request(or exec) from block of open_channel", msg
         | 
| 273 | 
            +
                  assert channel.pending_requests.empty?
         | 
| 274 | 
            +
                end
         | 
| 275 | 
            +
             | 
| 264 276 | 
             
                def test_send_channel_request_with_callback_should_want_reply
         | 
| 265 277 | 
             
                  channel.do_open_confirmation(0, 100, 100)
         | 
| 266 278 | 
             
                  connection.expect do |t,p|
         | 
| @@ -377,6 +389,11 @@ module Connection | |
| 377 389 | 
             
                  channel.wait
         | 
| 378 390 | 
             
                end
         | 
| 379 391 |  | 
| 392 | 
            +
                def test_wait_until_open_confirmed_should_block_while_remote_id_nil
         | 
| 393 | 
            +
                  channel.expects(:remote_id).times(3).returns(nil,nil,3)
         | 
| 394 | 
            +
                  channel.send(:wait_until_open_confirmed)
         | 
| 395 | 
            +
                end
         | 
| 396 | 
            +
             | 
| 380 397 | 
             
                def test_eof_bang_should_send_eof_to_server
         | 
| 381 398 | 
             
                  channel.do_open_confirmation(0, 1000, 1000)
         | 
| 382 399 | 
             
                  connection.expect { |t,p| assert_equal CHANNEL_EOF, p.type }
         | 
    
        data/test/test_config.rb
    CHANGED
    
    | @@ -94,7 +94,9 @@ class TestConfig < Test::Unit::TestCase | |
| 94 94 | 
             
                  'pubkeyauthentication'    => true,
         | 
| 95 95 | 
             
                  'rekeylimit'              => 1024,
         | 
| 96 96 | 
             
                  'sendenv'                 => "LC_*",
         | 
| 97 | 
            -
                  'numberofpasswordprompts' => '123'
         | 
| 97 | 
            +
                  'numberofpasswordprompts' => '123',
         | 
| 98 | 
            +
                  'serveraliveinterval'     => '2',
         | 
| 99 | 
            +
                  'serveralivecountmax'     => '4'
         | 
| 98 100 | 
             
                }
         | 
| 99 101 |  | 
| 100 102 | 
             
                net_ssh = Net::SSH::Config.translate(open_ssh)
         | 
| @@ -113,6 +115,9 @@ class TestConfig < Test::Unit::TestCase | |
| 113 115 | 
             
                assert_equal "127.0.0.1", net_ssh[:bind_address]
         | 
| 114 116 | 
             
                assert_equal [/^LC_.*$/], net_ssh[:send_env]
         | 
| 115 117 | 
             
                assert_equal 123,       net_ssh[:number_of_password_prompts]
         | 
| 118 | 
            +
                assert_equal 4,         net_ssh[:keepalive_maxcount]
         | 
| 119 | 
            +
                assert_equal 2,         net_ssh[:keepalive_interval]
         | 
| 120 | 
            +
                assert_equal true,         net_ssh[:keepalive]
         | 
| 116 121 | 
             
              end
         | 
| 117 122 |  | 
| 118 123 | 
             
              def test_translate_should_turn_off_authentication_methods
         | 
| @@ -109,7 +109,7 @@ module Transport | |
| 109 109 | 
             
                def test_next_packet_should_not_block_by_default
         | 
| 110 110 | 
             
                  IO.expects(:select).returns(nil)
         | 
| 111 111 | 
             
                  assert_nothing_raised do
         | 
| 112 | 
            -
                    timeout(1) { stream.next_packet }
         | 
| 112 | 
            +
                    Timeout.timeout(1) { stream.next_packet }
         | 
| 113 113 | 
             
                  end
         | 
| 114 114 | 
             
                end
         | 
| 115 115 |  | 
| @@ -1701,7 +1701,7 @@ module Transport | |
| 1701 1701 | 
             
                    [false, :standard].each do |compress|
         | 
| 1702 1702 | 
             
                      cipher_method_name = cipher_name.gsub(/\W/, "_")
         | 
| 1703 1703 | 
             
                      hmac_method_name   = hmac_name.gsub(/\W/, "_")
         | 
| 1704 | 
            -
             | 
| 1704 | 
            +
             | 
| 1705 1705 | 
             
                      define_method("test_next_packet_with_#{cipher_method_name}_and_#{hmac_method_name}_and_#{compress}_compression") do
         | 
| 1706 1706 | 
             
                        opts = { :shared => "123", :hash => "^&*", :digester => OpenSSL::Digest::SHA1  }
         | 
| 1707 1707 | 
             
                        cipher = Net::SSH::Transport::CipherFactory.get(cipher_name, opts.merge(:key => "ABC", :decrypt => true, :iv => "abc"))
         | 
| @@ -47,6 +47,9 @@ module Transport | |
| 47 47 | 
             
                  def socket(good, version_header, raise_eot=false)
         | 
| 48 48 | 
             
                    socket = mock("socket")
         | 
| 49 49 |  | 
| 50 | 
            +
                    socket.expects(:write).with("#{Net::SSH::Transport::ServerVersion::PROTO_VERSION}\r\n")
         | 
| 51 | 
            +
                    socket.expects(:flush)
         | 
| 52 | 
            +
             | 
| 50 53 | 
             
                    data = version_header.split('')
         | 
| 51 54 | 
             
                    recv_times = data.length
         | 
| 52 55 | 
             
                    recv_times += 1 if data[-1] != "\n"
         | 
| @@ -60,13 +63,6 @@ module Transport | |
| 60 63 | 
             
                      socket.expects(:readpartial).with(1).times(recv_times+1).returns(*data).then.raises(EOFError, "end of file reached")
         | 
| 61 64 | 
             
                    end
         | 
| 62 65 |  | 
| 63 | 
            -
                    if good
         | 
| 64 | 
            -
                      socket.expects(:write).with("#{Net::SSH::Transport::ServerVersion::PROTO_VERSION}\r\n")
         | 
| 65 | 
            -
                      socket.expects(:flush)
         | 
| 66 | 
            -
                    else
         | 
| 67 | 
            -
                      socket.expects(:write).never
         | 
| 68 | 
            -
                    end
         | 
| 69 | 
            -
             | 
| 70 66 | 
             
                    socket
         | 
| 71 67 | 
             
                  end
         | 
| 72 68 |  | 
    
        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: 3.0. | 
| 4 | 
            +
              version: 3.1.0.beta2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jamis Buck
         | 
| @@ -31,7 +31,7 @@ cert_chain: | |
| 31 31 | 
             
              s/ZUKye79ELwFYKJOhjW5g725OL3hy+llhEleytwKRwgXFQBPTC4f5UkdxZVVWGH
         | 
| 32 32 | 
             
              e2C9M1m/2odPZo8h
         | 
| 33 33 | 
             
              -----END CERTIFICATE-----
         | 
| 34 | 
            -
            date:  | 
| 34 | 
            +
            date: 2016-03-05 00:00:00.000000000 Z
         | 
| 35 35 | 
             
            dependencies:
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: test-unit
         | 
| @@ -251,9 +251,9 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 251 251 | 
             
                  version: '2.0'
         | 
| 252 252 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 253 253 | 
             
              requirements:
         | 
| 254 | 
            -
              - - " | 
| 254 | 
            +
              - - ">"
         | 
| 255 255 | 
             
                - !ruby/object:Gem::Version
         | 
| 256 | 
            -
                  version:  | 
| 256 | 
            +
                  version: 1.3.1
         | 
| 257 257 | 
             
            requirements: []
         | 
| 258 258 | 
             
            rubyforge_project: net-ssh
         | 
| 259 259 | 
             
            rubygems_version: 2.4.6
         | 
    
        metadata.gz.sig
    CHANGED
    
    | Binary file |