net-ssh 1.1.4 → 2.0.0
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.
- data/CHANGELOG.rdoc +37 -0
- data/Manifest +101 -0
- data/README.rdoc +110 -0
- data/Rakefile +26 -0
- data/{THANKS → THANKS.rdoc} +2 -5
- data/lib/net/ssh.rb +189 -57
- data/lib/net/ssh/authentication/agent.rb +175 -0
- data/lib/net/ssh/authentication/constants.rb +18 -0
- data/lib/net/ssh/authentication/key_manager.rb +166 -0
- data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
- data/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
- data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
- data/lib/net/ssh/authentication/methods/password.rb +39 -0
- data/lib/net/ssh/authentication/methods/publickey.rb +92 -0
- data/lib/net/ssh/authentication/pageant.rb +176 -0
- data/lib/net/ssh/authentication/session.rb +116 -0
- data/lib/net/ssh/buffer.rb +339 -0
- data/lib/net/ssh/buffered_io.rb +149 -0
- data/lib/net/ssh/config.rb +173 -0
- data/lib/net/ssh/connection/channel.rb +575 -454
- data/lib/net/ssh/connection/constants.rb +31 -45
- data/lib/net/ssh/connection/session.rb +569 -0
- data/lib/net/ssh/connection/term.rb +176 -88
- data/lib/net/ssh/errors.rb +83 -61
- data/lib/net/ssh/key_factory.rb +85 -0
- data/lib/net/ssh/known_hosts.rb +129 -0
- data/lib/net/ssh/loggable.rb +61 -0
- data/lib/net/ssh/packet.rb +102 -0
- data/lib/net/ssh/prompt.rb +93 -0
- data/lib/net/ssh/proxy/errors.rb +8 -28
- data/lib/net/ssh/proxy/http.rb +75 -107
- data/lib/net/ssh/proxy/socks4.rb +35 -48
- data/lib/net/ssh/proxy/socks5.rb +76 -108
- data/lib/net/ssh/service/forward.rb +267 -0
- data/lib/net/ssh/test.rb +89 -0
- data/lib/net/ssh/test/channel.rb +129 -0
- data/lib/net/ssh/test/extensions.rb +152 -0
- data/lib/net/ssh/test/kex.rb +44 -0
- data/lib/net/ssh/test/local_packet.rb +51 -0
- data/lib/net/ssh/test/packet.rb +81 -0
- data/lib/net/ssh/test/remote_packet.rb +38 -0
- data/lib/net/ssh/test/script.rb +157 -0
- data/lib/net/ssh/test/socket.rb +59 -0
- data/lib/net/ssh/transport/algorithms.rb +384 -0
- data/lib/net/ssh/transport/cipher_factory.rb +72 -0
- data/lib/net/ssh/transport/constants.rb +22 -58
- data/lib/net/ssh/transport/hmac.rb +31 -0
- data/lib/net/ssh/transport/hmac/abstract.rb +48 -0
- data/lib/net/ssh/transport/hmac/md5.rb +12 -0
- data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
- data/lib/net/ssh/transport/hmac/none.rb +15 -0
- data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
- data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
- data/lib/net/ssh/transport/identity_cipher.rb +40 -0
- data/lib/net/ssh/transport/kex.rb +13 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
- data/lib/net/ssh/{util → transport}/openssl.rb +22 -40
- data/lib/net/ssh/transport/packet_stream.rb +230 -0
- data/lib/net/ssh/transport/server_version.rb +61 -0
- data/lib/net/ssh/transport/session.rb +225 -303
- data/lib/net/ssh/transport/state.rb +170 -0
- data/lib/net/ssh/verifiers/lenient.rb +30 -0
- data/lib/net/ssh/verifiers/null.rb +12 -0
- data/lib/net/ssh/verifiers/strict.rb +53 -0
- data/lib/net/ssh/version.rb +57 -26
- data/net-ssh.gemspec +54 -0
- data/setup.rb +1585 -0
- data/test/authentication/methods/common.rb +28 -0
- data/test/authentication/methods/test_abstract.rb +51 -0
- data/test/authentication/methods/test_hostbased.rb +108 -0
- data/test/authentication/methods/test_keyboard_interactive.rb +98 -0
- data/test/authentication/methods/test_password.rb +50 -0
- data/test/authentication/methods/test_publickey.rb +123 -0
- data/test/authentication/test_agent.rb +205 -0
- data/test/authentication/test_key_manager.rb +100 -0
- data/test/authentication/test_session.rb +93 -0
- data/test/common.rb +106 -0
- data/test/configs/exact_match +8 -0
- data/test/configs/wild_cards +14 -0
- data/test/connection/test_channel.rb +452 -0
- data/test/connection/test_session.rb +483 -0
- data/test/test_all.rb +6 -0
- data/test/test_buffer.rb +336 -0
- data/test/test_buffered_io.rb +63 -0
- data/test/test_config.rb +78 -0
- data/test/test_key_factory.rb +67 -0
- data/test/transport/hmac/test_md5.rb +34 -0
- data/test/transport/hmac/test_md5_96.rb +25 -0
- data/test/transport/hmac/test_none.rb +34 -0
- data/test/transport/hmac/test_sha1.rb +34 -0
- data/test/transport/hmac/test_sha1_96.rb +25 -0
- data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
- data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
- data/test/transport/test_algorithms.rb +302 -0
- data/test/transport/test_cipher_factory.rb +163 -0
- data/test/transport/test_hmac.rb +34 -0
- data/test/transport/test_identity_cipher.rb +40 -0
- data/test/transport/test_packet_stream.rb +433 -0
- data/test/transport/test_server_version.rb +55 -0
- data/test/transport/test_session.rb +312 -0
- data/test/transport/test_state.rb +173 -0
- metadata +102 -253
- data/ChangeLog +0 -560
- data/LICENSE +0 -7
- data/NEWS +0 -152
- data/README +0 -14
- data/bin/rb-keygen +0 -210
- data/doc/LICENSE-BSD +0 -27
- data/doc/LICENSE-GPL +0 -280
- data/doc/LICENSE-RUBY +0 -56
- data/doc/manual-html/chapter-1.html +0 -388
- data/doc/manual-html/chapter-2.html +0 -552
- data/doc/manual-html/chapter-3.html +0 -470
- data/doc/manual-html/chapter-4.html +0 -413
- data/doc/manual-html/chapter-5.html +0 -525
- data/doc/manual-html/chapter-6.html +0 -456
- data/doc/manual-html/chapter-7.html +0 -343
- data/doc/manual-html/index.html +0 -235
- data/doc/manual-html/stylesheets/manual.css +0 -270
- data/doc/manual-html/stylesheets/ruby.css +0 -17
- data/doc/manual/chapter.erb +0 -38
- data/doc/manual/example.erb +0 -18
- data/doc/manual/index.erb +0 -29
- data/doc/manual/manual.rb +0 -311
- data/doc/manual/manual.yml +0 -73
- data/doc/manual/page.erb +0 -87
- data/doc/manual/parts/0000.txt +0 -5
- data/doc/manual/parts/0001.txt +0 -3
- data/doc/manual/parts/0002.txt +0 -40
- data/doc/manual/parts/0003.txt +0 -6
- data/doc/manual/parts/0004.txt +0 -7
- data/doc/manual/parts/0005.txt +0 -1
- data/doc/manual/parts/0006.txt +0 -49
- data/doc/manual/parts/0007.txt +0 -67
- data/doc/manual/parts/0008.txt +0 -43
- data/doc/manual/parts/0009.txt +0 -14
- data/doc/manual/parts/0010.txt +0 -7
- data/doc/manual/parts/0011.txt +0 -14
- data/doc/manual/parts/0012.txt +0 -3
- data/doc/manual/parts/0013.txt +0 -20
- data/doc/manual/parts/0014.txt +0 -32
- data/doc/manual/parts/0015.txt +0 -14
- data/doc/manual/parts/0016.txt +0 -28
- data/doc/manual/parts/0017.txt +0 -50
- data/doc/manual/parts/0018.txt +0 -35
- data/doc/manual/parts/0019.txt +0 -7
- data/doc/manual/parts/0020.txt +0 -72
- data/doc/manual/parts/0021.txt +0 -50
- data/doc/manual/parts/0022.txt +0 -42
- data/doc/manual/parts/0023.txt +0 -51
- data/doc/manual/parts/0024.txt +0 -18
- data/doc/manual/parts/0025.txt +0 -18
- data/doc/manual/parts/0026.txt +0 -15
- data/doc/manual/parts/0027.txt +0 -37
- data/doc/manual/parts/0028.txt +0 -16
- data/doc/manual/parts/0029.txt +0 -1
- data/doc/manual/parts/0030.txt +0 -52
- data/doc/manual/parts/0031.txt +0 -25
- data/doc/manual/stylesheets/manual.css +0 -270
- data/doc/manual/stylesheets/ruby.css +0 -17
- data/doc/manual/tutorial.erb +0 -30
- data/examples/auth-forward.rb +0 -41
- data/examples/channel-demo.rb +0 -81
- data/examples/port-forward.rb +0 -51
- data/examples/process-demo.rb +0 -91
- data/examples/remote-net-port-forward.rb +0 -45
- data/examples/remote-port-forward.rb +0 -80
- data/examples/shell-demo.rb +0 -46
- data/examples/ssh-client.rb +0 -67
- data/examples/sync-shell-demo.rb +0 -69
- data/examples/tail-demo.rb +0 -49
- data/lib/net/ssh/connection/driver.rb +0 -446
- data/lib/net/ssh/connection/services.rb +0 -72
- data/lib/net/ssh/host-key-verifier.rb +0 -52
- data/lib/net/ssh/known-hosts.rb +0 -96
- data/lib/net/ssh/lenient-host-key-verifier.rb +0 -25
- data/lib/net/ssh/null-host-key-verifier.rb +0 -14
- data/lib/net/ssh/service/agentforward/driver.rb +0 -78
- data/lib/net/ssh/service/agentforward/services.rb +0 -41
- data/lib/net/ssh/service/forward/driver.rb +0 -319
- data/lib/net/ssh/service/forward/local-network-handler.rb +0 -71
- data/lib/net/ssh/service/forward/remote-network-handler.rb +0 -83
- data/lib/net/ssh/service/forward/services.rb +0 -76
- data/lib/net/ssh/service/process/driver.rb +0 -153
- data/lib/net/ssh/service/process/open.rb +0 -193
- data/lib/net/ssh/service/process/popen3.rb +0 -178
- data/lib/net/ssh/service/process/services.rb +0 -66
- data/lib/net/ssh/service/services.rb +0 -60
- data/lib/net/ssh/service/shell/driver.rb +0 -86
- data/lib/net/ssh/service/shell/services.rb +0 -54
- data/lib/net/ssh/service/shell/shell.rb +0 -222
- data/lib/net/ssh/service/shell/sync.rb +0 -114
- data/lib/net/ssh/session.rb +0 -305
- data/lib/net/ssh/transport/algorithm-negotiator.rb +0 -275
- data/lib/net/ssh/transport/compress/compressor.rb +0 -53
- data/lib/net/ssh/transport/compress/decompressor.rb +0 -53
- data/lib/net/ssh/transport/compress/none-compressor.rb +0 -39
- data/lib/net/ssh/transport/compress/none-decompressor.rb +0 -39
- data/lib/net/ssh/transport/compress/services.rb +0 -68
- data/lib/net/ssh/transport/compress/zlib-compressor.rb +0 -60
- data/lib/net/ssh/transport/compress/zlib-decompressor.rb +0 -52
- data/lib/net/ssh/transport/errors.rb +0 -47
- data/lib/net/ssh/transport/identity-cipher.rb +0 -61
- data/lib/net/ssh/transport/kex/dh-gex.rb +0 -106
- data/lib/net/ssh/transport/kex/dh.rb +0 -249
- data/lib/net/ssh/transport/kex/services.rb +0 -62
- data/lib/net/ssh/transport/ossl/buffer-factory.rb +0 -52
- data/lib/net/ssh/transport/ossl/buffer.rb +0 -87
- data/lib/net/ssh/transport/ossl/cipher-factory.rb +0 -98
- data/lib/net/ssh/transport/ossl/digest-factory.rb +0 -51
- data/lib/net/ssh/transport/ossl/hmac-factory.rb +0 -71
- data/lib/net/ssh/transport/ossl/hmac/hmac.rb +0 -62
- data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/md5.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/none.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/services.rb +0 -68
- data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/sha1.rb +0 -45
- data/lib/net/ssh/transport/ossl/key-factory.rb +0 -116
- data/lib/net/ssh/transport/ossl/services.rb +0 -149
- data/lib/net/ssh/transport/packet-stream.rb +0 -236
- data/lib/net/ssh/transport/services.rb +0 -146
- data/lib/net/ssh/transport/version-negotiator.rb +0 -73
- data/lib/net/ssh/userauth/agent.rb +0 -222
- data/lib/net/ssh/userauth/constants.rb +0 -35
- data/lib/net/ssh/userauth/driver.rb +0 -183
- data/lib/net/ssh/userauth/methods/hostbased.rb +0 -119
- data/lib/net/ssh/userauth/methods/keyboard-interactive.rb +0 -104
- data/lib/net/ssh/userauth/methods/password.rb +0 -70
- data/lib/net/ssh/userauth/methods/publickey.rb +0 -137
- data/lib/net/ssh/userauth/methods/services.rb +0 -90
- data/lib/net/ssh/userauth/pageant.rb +0 -197
- data/lib/net/ssh/userauth/services.rb +0 -141
- data/lib/net/ssh/userauth/userkeys.rb +0 -258
- data/lib/net/ssh/util/buffer.rb +0 -274
- data/lib/net/ssh/util/prompter.rb +0 -73
- data/test/ALL-TESTS.rb +0 -18
- data/test/connection/tc_channel.rb +0 -136
- data/test/connection/tc_driver.rb +0 -287
- data/test/connection/tc_integration.rb +0 -87
- data/test/proxy/tc_http.rb +0 -209
- data/test/proxy/tc_socks4.rb +0 -148
- data/test/proxy/tc_socks5.rb +0 -214
- data/test/service/agentforward/tc_driver.rb +0 -138
- data/test/service/forward/tc_driver.rb +0 -289
- data/test/service/forward/tc_local_network_handler.rb +0 -123
- data/test/service/forward/tc_remote_network_handler.rb +0 -111
- data/test/service/process/tc_driver.rb +0 -79
- data/test/service/process/tc_integration.rb +0 -119
- data/test/service/process/tc_open.rb +0 -179
- data/test/service/process/tc_popen3.rb +0 -164
- data/test/tc_integration.rb +0 -80
- data/test/transport/compress/tc_none_compress.rb +0 -41
- data/test/transport/compress/tc_none_decompress.rb +0 -45
- data/test/transport/compress/tc_zlib_compress.rb +0 -61
- data/test/transport/compress/tc_zlib_decompress.rb +0 -48
- data/test/transport/kex/tc_dh.rb +0 -312
- data/test/transport/kex/tc_dh_gex.rb +0 -71
- data/test/transport/ossl/fixtures/dsa-encrypted +0 -15
- data/test/transport/ossl/fixtures/dsa-encrypted-bad +0 -15
- data/test/transport/ossl/fixtures/dsa-unencrypted +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted-bad +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted.pub +0 -1
- data/test/transport/ossl/fixtures/not-a-private-key +0 -4
- data/test/transport/ossl/fixtures/not-supported +0 -2
- data/test/transport/ossl/fixtures/rsa-encrypted +0 -18
- data/test/transport/ossl/fixtures/rsa-encrypted-bad +0 -18
- data/test/transport/ossl/fixtures/rsa-unencrypted +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted-bad +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted.pub +0 -1
- data/test/transport/ossl/hmac/tc_hmac.rb +0 -58
- data/test/transport/ossl/hmac/tc_md5.rb +0 -50
- data/test/transport/ossl/hmac/tc_md5_96.rb +0 -50
- data/test/transport/ossl/hmac/tc_none.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1_96.rb +0 -50
- data/test/transport/ossl/tc_buffer.rb +0 -97
- data/test/transport/ossl/tc_buffer_factory.rb +0 -67
- data/test/transport/ossl/tc_cipher_factory.rb +0 -84
- data/test/transport/ossl/tc_digest_factory.rb +0 -39
- data/test/transport/ossl/tc_hmac_factory.rb +0 -72
- data/test/transport/ossl/tc_key_factory.rb +0 -199
- data/test/transport/tc_algorithm_negotiator.rb +0 -170
- data/test/transport/tc_identity_cipher.rb +0 -52
- data/test/transport/tc_integration.rb +0 -115
- data/test/transport/tc_packet_stream.rb +0 -184
- data/test/transport/tc_session.rb +0 -296
- data/test/transport/tc_version_negotiator.rb +0 -86
- data/test/userauth/methods/tc_hostbased.rb +0 -136
- data/test/userauth/methods/tc_password.rb +0 -89
- data/test/userauth/methods/tc_publickey.rb +0 -167
- data/test/userauth/tc_agent.rb +0 -223
- data/test/userauth/tc_driver.rb +0 -190
- data/test/userauth/tc_integration.rb +0 -97
- data/test/userauth/tc_userkeys.rb +0 -265
- data/test/util/tc_buffer.rb +0 -217
@@ -1,73 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SSH Secure Shell Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-ssh website : http://net-ssh.rubyforge.org
|
13
|
-
# project website: http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
unless defined?( HAS_TERMIOS )
|
18
|
-
begin
|
19
|
-
require 'termios'
|
20
|
-
HAS_TERMIOS = true
|
21
|
-
rescue LoadError
|
22
|
-
HAS_TERMIOS = false
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
module Net
|
27
|
-
module SSH
|
28
|
-
module Util
|
29
|
-
|
30
|
-
# A simple class for prompting a user for input.
|
31
|
-
class Prompter
|
32
|
-
|
33
|
-
# Displays the prompt and then waits for the user to enter a response.
|
34
|
-
# If the 'termios' library is available, the user's input will not be
|
35
|
-
# echoed to the terminal. The user's response will be returned, with
|
36
|
-
# any trailing newline chomped.
|
37
|
-
def password( prompt=nil )
|
38
|
-
if $stdin.tty?
|
39
|
-
echo false
|
40
|
-
print prompt if prompt
|
41
|
-
end
|
42
|
-
|
43
|
-
$stdin.gets.chomp
|
44
|
-
ensure
|
45
|
-
if $stdin.tty?
|
46
|
-
echo true
|
47
|
-
puts
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
if HAS_TERMIOS
|
52
|
-
def echo( enable )
|
53
|
-
term = Termios::getattr( $stdin )
|
54
|
-
|
55
|
-
if enable
|
56
|
-
term.c_lflag |= ( Termios::ECHO | Termios::ICANON )
|
57
|
-
else
|
58
|
-
term.c_lflag &= ~Termios::ECHO
|
59
|
-
end
|
60
|
-
|
61
|
-
Termios::setattr( $stdin, Termios::TCSANOW, term )
|
62
|
-
end
|
63
|
-
else
|
64
|
-
def echo( enable )
|
65
|
-
end
|
66
|
-
end
|
67
|
-
private :echo
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
data/test/ALL-TESTS.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SSH Secure Shell Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-ssh website : http://net-ssh.rubyforge.org
|
13
|
-
# project website: http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$run_integration_tests = ARGV.include?( "-i" )
|
18
|
-
Dir["#{File.dirname(__FILE__)}/**/tc_*.rb"].each { |f| load f }
|
@@ -1,136 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SSH Secure Shell Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-ssh website : http://net-ssh.rubyforge.org
|
13
|
-
# project website: http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "#{File.dirname(__FILE__)}/../../lib"
|
18
|
-
|
19
|
-
require 'test/unit'
|
20
|
-
require 'net/ssh/connection/channel'
|
21
|
-
require 'net/ssh/util/buffer'
|
22
|
-
|
23
|
-
class TC_Channel < Test::Unit::TestCase
|
24
|
-
|
25
|
-
class Buffers
|
26
|
-
def writer
|
27
|
-
Net::SSH::Util::WriterBuffer.new
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
class Log
|
32
|
-
def debug?
|
33
|
-
false
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class Connection
|
38
|
-
attr_reader :buffers
|
39
|
-
attr_reader :events
|
40
|
-
|
41
|
-
def initialize( buffers )
|
42
|
-
@events = []
|
43
|
-
@buffers = buffers
|
44
|
-
end
|
45
|
-
|
46
|
-
def send_message( msg )
|
47
|
-
@events << msg.to_s
|
48
|
-
end
|
49
|
-
|
50
|
-
def allocate_channel_id
|
51
|
-
events << :allocate_channel_id
|
52
|
-
1234
|
53
|
-
end
|
54
|
-
|
55
|
-
def remove_channel( channel )
|
56
|
-
events << :remove_channel
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def setup
|
61
|
-
@connection = Connection.new( Buffers.new )
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_open_no_data
|
65
|
-
channel = Net::SSH::Connection::Channel.open( @connection, Log.new,
|
66
|
-
Buffers.new, "test" )
|
67
|
-
assert_equal [ :allocate_channel_id,
|
68
|
-
"\132\0\0\0\4test\0\0\4\xd2\x00\x02\x00\x00\x00\x01\x00\x00" ],
|
69
|
-
@connection.events
|
70
|
-
assert_equal "test", channel.type
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_open_with_data
|
74
|
-
channel = Net::SSH::Connection::Channel.open( @connection, Log.new,
|
75
|
-
Buffers.new, "test", "some data" )
|
76
|
-
assert_equal [ :allocate_channel_id,
|
77
|
-
"\132\0\0\0\4test\0\0\4\xd2\x00\x02\x00\x00\x00\x01\x00\x00some data" ],
|
78
|
-
@connection.events
|
79
|
-
assert_equal "test", channel.type
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_do_confirm_open
|
83
|
-
confirmed = nil
|
84
|
-
channel = Net::SSH::Connection::Channel.open( @connection, Log.new,
|
85
|
-
Buffers.new, "test" )
|
86
|
-
channel.on_confirm_open { |a| confirmed = a }
|
87
|
-
channel.do_confirm_open 1, 2, 3
|
88
|
-
assert_same channel, confirmed
|
89
|
-
assert_equal 1, channel.remote_id
|
90
|
-
assert_equal 2, channel.window_size
|
91
|
-
assert_equal 3, channel.maximum_packet_size
|
92
|
-
end
|
93
|
-
|
94
|
-
def create_channel
|
95
|
-
Net::SSH::Connection::Channel.create( @connection, Log.new, Buffers.new,
|
96
|
-
"test", 1, 2, 3 )
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_create
|
100
|
-
channel = create_channel
|
101
|
-
assert_equal "test", channel.type
|
102
|
-
assert_equal [ :allocate_channel_id ], @connection.events
|
103
|
-
assert_equal 1234, channel.local_id
|
104
|
-
assert_equal 1, channel.remote_id
|
105
|
-
assert_equal 2, channel.window_size
|
106
|
-
assert_equal 3, channel.maximum_packet_size
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_new
|
110
|
-
assert_raise( NoMethodError ) do
|
111
|
-
Net::SSH::Connection::Channel.new( @connection, "test" )
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def self.test_callback( name, do_args=[], expect=do_args )
|
116
|
-
define_method( "test_#{name}".to_sym ) do
|
117
|
-
channel = create_channel
|
118
|
-
|
119
|
-
result = nil
|
120
|
-
channel.send( "on_#{name}".to_sym ) { |*a| result = a }
|
121
|
-
channel.send( "do_#{name}".to_sym, *do_args )
|
122
|
-
|
123
|
-
assert_equal [ channel, *expect ], result
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
test_callback :confirm_open, [ 1, 2, 3 ], []
|
128
|
-
test_callback :confirm_failed, [ 100, "b", "c" ]
|
129
|
-
test_callback :window_adjust, [ 14 ]
|
130
|
-
test_callback :data, [ "blah" ]
|
131
|
-
test_callback :extended_data, [ 1, "blah" ]
|
132
|
-
test_callback :eof
|
133
|
-
test_callback :request, [ true, "blah" ]
|
134
|
-
test_callback :success
|
135
|
-
test_callback :failure
|
136
|
-
end
|
@@ -1,287 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SSH Secure Shell Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-ssh website : http://net-ssh.rubyforge.org
|
13
|
-
# project website: http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "#{File.dirname(__FILE__)}/../../lib"
|
18
|
-
|
19
|
-
require 'test/unit'
|
20
|
-
require 'net/ssh/connection/driver'
|
21
|
-
require 'net/ssh/errors'
|
22
|
-
require 'net/ssh/util/buffer'
|
23
|
-
|
24
|
-
class TC_Driver < Test::Unit::TestCase
|
25
|
-
|
26
|
-
class Buffers
|
27
|
-
def writer
|
28
|
-
Net::SSH::Util::WriterBuffer.new
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class Log
|
33
|
-
attr_reader :messages
|
34
|
-
|
35
|
-
def initialize
|
36
|
-
@messages = []
|
37
|
-
end
|
38
|
-
|
39
|
-
def debug?
|
40
|
-
true
|
41
|
-
end
|
42
|
-
|
43
|
-
def debug( msg )
|
44
|
-
@messages << msg
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class Session
|
49
|
-
attr_reader :events
|
50
|
-
attr_reader :script
|
51
|
-
|
52
|
-
def initialize
|
53
|
-
@events = []
|
54
|
-
@script = []
|
55
|
-
end
|
56
|
-
|
57
|
-
def send_message( msg )
|
58
|
-
@events << msg.to_s
|
59
|
-
end
|
60
|
-
|
61
|
-
def wait_for_message
|
62
|
-
@script.shift
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
class Channel
|
67
|
-
attr_reader :local_id
|
68
|
-
attr_reader :remote_id
|
69
|
-
attr_reader :data
|
70
|
-
attr_reader :window_size
|
71
|
-
attr_reader :packet_size
|
72
|
-
attr_reader :type
|
73
|
-
attr_reader :block
|
74
|
-
attr_reader :events
|
75
|
-
|
76
|
-
def self.open( type, data )
|
77
|
-
new( type, data, nil, nil, nil )
|
78
|
-
end
|
79
|
-
|
80
|
-
def self.create( type, remote_id, window_size, packet_size )
|
81
|
-
new( type, nil, remote_id, window_size, packet_size )
|
82
|
-
end
|
83
|
-
|
84
|
-
def initialize( type, data, remote_id, winsize, packsize )
|
85
|
-
@type = type
|
86
|
-
@data = data
|
87
|
-
@remote_id = remote_id
|
88
|
-
@window_size = winsize
|
89
|
-
@packet_size = packsize
|
90
|
-
@local_id = 1
|
91
|
-
@events = []
|
92
|
-
end
|
93
|
-
|
94
|
-
def close( value )
|
95
|
-
@events << [ :close, value ]
|
96
|
-
end
|
97
|
-
|
98
|
-
def on_confirm_open( &block )
|
99
|
-
@block = block
|
100
|
-
end
|
101
|
-
|
102
|
-
def self.event( name )
|
103
|
-
define_method( "do_#{name}".to_sym ) do |*args|
|
104
|
-
@events << [ name, *args ]
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
event :confirm_failed
|
109
|
-
event :confirm_open
|
110
|
-
event :window_adjust
|
111
|
-
event :data
|
112
|
-
event :extended_data
|
113
|
-
event :eof
|
114
|
-
event :request
|
115
|
-
event :success
|
116
|
-
event :failure
|
117
|
-
end
|
118
|
-
|
119
|
-
def reader( text )
|
120
|
-
Net::SSH::Util::ReaderBuffer.new( text )
|
121
|
-
end
|
122
|
-
|
123
|
-
def setup
|
124
|
-
@session = Session.new
|
125
|
-
@log = Log.new
|
126
|
-
@driver = Net::SSH::Connection::Driver.new( @session, @log,
|
127
|
-
Buffers.new,
|
128
|
-
:open => proc { |t,d| Channel.open(t,d) },
|
129
|
-
:create => proc { |t,r,w,p| Channel.create(t,r,w,p) } )
|
130
|
-
end
|
131
|
-
|
132
|
-
def test_open_channel
|
133
|
-
channel = @driver.open_channel( "test", "data" ) { |a| a }
|
134
|
-
assert_equal "hello", channel.block.call( "hello" )
|
135
|
-
assert_equal "test", channel.type
|
136
|
-
assert_equal "data", channel.data
|
137
|
-
assert_equal [ channel ], @driver.channels
|
138
|
-
end
|
139
|
-
|
140
|
-
def test_remove_channel
|
141
|
-
channel = @driver.open_channel( "test", "data" ) { |a| a }
|
142
|
-
assert_equal [channel], @driver.channels
|
143
|
-
@driver.remove_channel( channel )
|
144
|
-
assert_equal [], @driver.channels
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_allocate_channel_id
|
148
|
-
assert_equal 1, @driver.allocate_channel_id
|
149
|
-
10.times { @driver.allocate_channel_id }
|
150
|
-
assert_equal 12, @driver.allocate_channel_id
|
151
|
-
end
|
152
|
-
|
153
|
-
def test_global_request
|
154
|
-
@driver.global_request "test", "foobar"
|
155
|
-
assert_equal [ "\120\0\0\0\4test\1foobar" ], @session.events
|
156
|
-
end
|
157
|
-
|
158
|
-
def test_request_success
|
159
|
-
@driver.global_request( "test", "foobar" ) do |a,b|
|
160
|
-
assert a
|
161
|
-
assert_equal "response", b
|
162
|
-
end
|
163
|
-
|
164
|
-
@driver.do_request_success "response"
|
165
|
-
end
|
166
|
-
|
167
|
-
def test_request_failure
|
168
|
-
@driver.global_request( "test", "foobar" ) do |a,b|
|
169
|
-
assert !a
|
170
|
-
assert_equal "response", b
|
171
|
-
end
|
172
|
-
|
173
|
-
@driver.do_request_failure "response"
|
174
|
-
end
|
175
|
-
|
176
|
-
def test_channel_open_no_handler
|
177
|
-
assert_raise( Net::SSH::Exception ) do
|
178
|
-
@driver.do_channel_open(
|
179
|
-
reader( "\0\0\0\4test\0\0\0\4\0\0\0\0\0\0\0\1" ) )
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
def test_channel_open_with_handler
|
184
|
-
@driver.add_channel_open_handler( "test" ) do |conn,chan,resp|
|
185
|
-
assert_equal @driver, conn
|
186
|
-
assert_equal "test", chan.type
|
187
|
-
assert_equal 4, chan.remote_id
|
188
|
-
assert_equal 0, chan.window_size
|
189
|
-
assert_equal 1, chan.packet_size
|
190
|
-
assert_equal "hello world", resp.read
|
191
|
-
end
|
192
|
-
|
193
|
-
@driver.do_channel_open(
|
194
|
-
reader( "\0\0\0\4test\0\0\0\4\0\0\0\0\0\0\0\1hello world" ) )
|
195
|
-
|
196
|
-
assert_equal 1, @driver.channels.length
|
197
|
-
assert_equal [ "\133\0\0\0\4\0\0\0\1\x7f\xff\xff\xff\x7f\xff\xff\xff" ],
|
198
|
-
@session.events
|
199
|
-
end
|
200
|
-
|
201
|
-
def test_channel_open_failure
|
202
|
-
channel = @driver.open_channel( "test", "data" )
|
203
|
-
assert_equal 1, @driver.channels.length
|
204
|
-
@driver.do_channel_open_failure(
|
205
|
-
reader( "\0\0\0\1\0\0\0\2\0\0\0\4test\0\0\0\2en" ) )
|
206
|
-
assert_equal 0, @driver.channels.length
|
207
|
-
assert_equal [ [ :confirm_failed, 2, "test", "en" ] ], channel.events
|
208
|
-
end
|
209
|
-
|
210
|
-
def test_channel_open_confirmation
|
211
|
-
channel = @driver.open_channel( "test", "data" )
|
212
|
-
@driver.do_channel_open_confirmation(
|
213
|
-
reader( "\0\0\0\1\0\0\0\2\0\0\0\3\0\0\0\4" ) )
|
214
|
-
assert_equal 1, @driver.channels.length
|
215
|
-
assert_equal [ [ :confirm_open, 2, 3, 4 ] ], channel.events
|
216
|
-
end
|
217
|
-
|
218
|
-
def test_channel_window_adjust
|
219
|
-
channel = @driver.open_channel( "test", "data" )
|
220
|
-
@driver.do_channel_window_adjust( reader( "\0\0\0\1\0\0\0\12" ) )
|
221
|
-
assert_equal 1, @driver.channels.length
|
222
|
-
assert_equal [ [ :window_adjust, 10 ] ], channel.events
|
223
|
-
end
|
224
|
-
|
225
|
-
def test_channel_data
|
226
|
-
channel = @driver.open_channel( "test", "data" )
|
227
|
-
@driver.do_channel_data( reader( "\0\0\0\1\0\0\0\4test" ) )
|
228
|
-
assert_equal 1, @driver.channels.length
|
229
|
-
assert_equal [ [ :data, "test" ] ], channel.events
|
230
|
-
end
|
231
|
-
|
232
|
-
def test_channel_extended_data
|
233
|
-
channel = @driver.open_channel( "test", "data" )
|
234
|
-
@driver.do_channel_extended_data( reader( "\0\0\0\1\0\0\0\2\0\0\0\4test" ) )
|
235
|
-
assert_equal 1, @driver.channels.length
|
236
|
-
assert_equal [ [ :extended_data, 2, "test" ] ], channel.events
|
237
|
-
end
|
238
|
-
|
239
|
-
def test_channel_eof
|
240
|
-
channel = @driver.open_channel( "test", "data" )
|
241
|
-
@driver.do_channel_eof( reader( "\0\0\0\1" ) )
|
242
|
-
assert_equal 1, @driver.channels.length
|
243
|
-
assert_equal [ [ :eof ] ], channel.events
|
244
|
-
end
|
245
|
-
|
246
|
-
def test_channel_close
|
247
|
-
channel = @driver.open_channel( "test", "data" )
|
248
|
-
@driver.do_channel_close( reader( "\0\0\0\1" ) )
|
249
|
-
assert_equal 1, @driver.channels.length
|
250
|
-
assert_equal [ [ :close, false ] ], channel.events
|
251
|
-
end
|
252
|
-
|
253
|
-
def test_channel_request
|
254
|
-
channel = @driver.open_channel( "test", "data" )
|
255
|
-
@driver.do_channel_request( reader( "\0\0\0\1\0\0\0\4test\1foobarbaz" ) )
|
256
|
-
assert_equal 1, @driver.channels.length
|
257
|
-
assert_equal [ [ :request, "test", true, reader("foobarbaz") ] ],
|
258
|
-
channel.events
|
259
|
-
end
|
260
|
-
|
261
|
-
def test_channel_success
|
262
|
-
channel = @driver.open_channel( "test", "data" )
|
263
|
-
@driver.do_channel_success( reader( "\0\0\0\1" ) )
|
264
|
-
assert_equal 1, @driver.channels.length
|
265
|
-
assert_equal [ [ :success ] ], channel.events
|
266
|
-
end
|
267
|
-
|
268
|
-
def test_channel_failure
|
269
|
-
channel = @driver.open_channel( "test", "data" )
|
270
|
-
@driver.do_channel_failure( reader( "\0\0\0\1" ) )
|
271
|
-
assert_equal 1, @driver.channels.length
|
272
|
-
assert_equal [ [ :failure ] ], channel.events
|
273
|
-
end
|
274
|
-
|
275
|
-
ProcessItem = Struct.new( :name, :script, :events )
|
276
|
-
def self.i( name, script, events )
|
277
|
-
ProcessItem.new( name, script, events )
|
278
|
-
end
|
279
|
-
|
280
|
-
def test_process_bad
|
281
|
-
@session.script << [ 0, reader("") ]
|
282
|
-
assert_raise( Net::SSH::Exception ) do
|
283
|
-
@driver.process
|
284
|
-
end
|
285
|
-
end
|
286
|
-
|
287
|
-
end
|