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,87 +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
|
-
if $run_integration_tests || __FILE__ == $0
|
20
|
-
|
21
|
-
require 'needle'
|
22
|
-
require 'net/ssh/null-host-key-verifier'
|
23
|
-
require 'net/ssh/connection/services'
|
24
|
-
require 'net/ssh/transport/services'
|
25
|
-
require 'net/ssh/userauth/services'
|
26
|
-
require 'test/unit'
|
27
|
-
|
28
|
-
class TC_Connection_Integration < Test::Unit::TestCase
|
29
|
-
|
30
|
-
HOST = "test.host"
|
31
|
-
USER = "test"
|
32
|
-
PASSWORD = "test/unit"
|
33
|
-
SERVICE = "ssh-connection"
|
34
|
-
|
35
|
-
def setup
|
36
|
-
@registry = Needle::Registry.new(
|
37
|
-
:logs => { :device=>STDOUT, :default_level => :WARN }
|
38
|
-
)
|
39
|
-
|
40
|
-
Net::SSH::Transport.register_services( @registry )
|
41
|
-
Net::SSH::UserAuth.register_services( @registry )
|
42
|
-
Net::SSH::Connection.register_services( @registry )
|
43
|
-
|
44
|
-
@registry.define do |b|
|
45
|
-
b.crypto_backend { :ossl }
|
46
|
-
b.transport_host { HOST }
|
47
|
-
b.host_key_verifier { Net::SSH::NullHostKeyVerifier.new }
|
48
|
-
end
|
49
|
-
|
50
|
-
@registry[:userauth][:driver].authenticate SERVICE, USER, PASSWORD
|
51
|
-
|
52
|
-
@connection = @registry[:connection][:driver]
|
53
|
-
end
|
54
|
-
|
55
|
-
def teardown
|
56
|
-
@registry[:transport][:session].close
|
57
|
-
@registry.logs.close
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_exec
|
61
|
-
exec_data = ""
|
62
|
-
@connection.open_channel "session" do |chan|
|
63
|
-
chan.on_data { |ch,data| exec_data << data }
|
64
|
-
chan.exec "echo hello"
|
65
|
-
end
|
66
|
-
@connection.loop
|
67
|
-
assert_equal "hello\n", exec_data
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_dialog
|
71
|
-
dialog = [ "2+2", "5*10+1", "quit" ]
|
72
|
-
results = []
|
73
|
-
@connection.open_channel "session" do |chan|
|
74
|
-
chan.on_data do |ch,data|
|
75
|
-
results << data
|
76
|
-
chan.send_data dialog.shift + "\n"
|
77
|
-
end
|
78
|
-
chan.exec "bc"
|
79
|
-
chan.send_data dialog.shift + "\n"
|
80
|
-
end
|
81
|
-
@connection.loop
|
82
|
-
assert_equal [ "4\n", "51\n" ], results
|
83
|
-
end
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
data/test/proxy/tc_http.rb
DELETED
@@ -1,209 +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/proxy/http'
|
21
|
-
require 'socket'
|
22
|
-
|
23
|
-
class TC_Proxy_HTTP < Test::Unit::TestCase
|
24
|
-
|
25
|
-
HOST = "test.host"
|
26
|
-
PORT = 22117
|
27
|
-
|
28
|
-
class ScriptableHTTPServer
|
29
|
-
attr_reader :script
|
30
|
-
attr_reader :events
|
31
|
-
|
32
|
-
def initialize
|
33
|
-
@script = []
|
34
|
-
@events = []
|
35
|
-
end
|
36
|
-
|
37
|
-
def run
|
38
|
-
@socket = TCPServer.new( HOST, PORT )
|
39
|
-
@thread = Thread.new { run_server until @script.empty? }
|
40
|
-
end
|
41
|
-
|
42
|
-
def run_server
|
43
|
-
client = @socket.accept
|
44
|
-
loop do
|
45
|
-
@events << client.readline
|
46
|
-
break if @events.last == "\n"
|
47
|
-
end
|
48
|
-
client.puts @script.shift
|
49
|
-
rescue Exception => e
|
50
|
-
puts "#{e.class}: #{e.message}"
|
51
|
-
puts e.backtrace.join("\n")
|
52
|
-
end
|
53
|
-
|
54
|
-
def wait
|
55
|
-
@thread.join
|
56
|
-
end
|
57
|
-
|
58
|
-
def shutdown
|
59
|
-
@socket.close
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def setup
|
64
|
-
ENV['HTTP_PROXY_USER'] = nil
|
65
|
-
ENV['HTTP_PROXY_PASSWORD'] = nil
|
66
|
-
ENV['CONNECT_USER'] = nil
|
67
|
-
ENV['CONNECT_PASSWORD'] = nil
|
68
|
-
|
69
|
-
@server = ScriptableHTTPServer.new
|
70
|
-
@options = Hash.new
|
71
|
-
@proxy = Net::SSH::Proxy::HTTP.new( HOST, PORT, @options )
|
72
|
-
end
|
73
|
-
|
74
|
-
def teardown
|
75
|
-
@server.shutdown
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_no_auth_ok
|
79
|
-
@server.script << "HTTP/1.0 200 OK\n\n"
|
80
|
-
@server.run
|
81
|
-
|
82
|
-
@proxy.open( "foo.com", 1234 )
|
83
|
-
@server.wait
|
84
|
-
|
85
|
-
assert_equal [ "CONNECT foo.com:1234 HTTP/1.0\n", "\n" ], @server.events
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_connect_error
|
89
|
-
@server.script << "HTTP/1.0 500 Error\n\n"
|
90
|
-
@server.run
|
91
|
-
|
92
|
-
assert_raise( Net::SSH::Proxy::ConnectError ) do
|
93
|
-
@proxy.open( "foo.com", 1234 )
|
94
|
-
end
|
95
|
-
|
96
|
-
@server.wait
|
97
|
-
|
98
|
-
assert_equal [ "CONNECT foo.com:1234 HTTP/1.0\n", "\n" ], @server.events
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_unauthorized_error_no_user
|
102
|
-
@server.script << "HTTP/1.0 407 Error\n\n"
|
103
|
-
@server.run
|
104
|
-
|
105
|
-
assert_raise( Net::SSH::Proxy::UnauthorizedError ) do
|
106
|
-
@proxy.open( "foo.com", 1234 )
|
107
|
-
end
|
108
|
-
|
109
|
-
@server.wait
|
110
|
-
|
111
|
-
assert_equal [ "CONNECT foo.com:1234 HTTP/1.0\n", "\n" ], @server.events
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_invalid_auth_scheme
|
115
|
-
@options[:user] = 'test'
|
116
|
-
|
117
|
-
@server.script << "HTTP/1.0 407 Error\nProxy-Authenticate: Foo 1 2 3\n\n"
|
118
|
-
@server.run
|
119
|
-
|
120
|
-
assert_raise( NotImplementedError ) do
|
121
|
-
@proxy.open( "foo.com", 1234 )
|
122
|
-
end
|
123
|
-
|
124
|
-
@server.wait
|
125
|
-
|
126
|
-
assert_equal [ "CONNECT foo.com:1234 HTTP/1.0\n", "\n" ], @server.events
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_connect_error_bad_auth
|
130
|
-
@options[:user] = 'test'
|
131
|
-
@options[:password] = 'password'
|
132
|
-
|
133
|
-
@server.script << "HTTP/1.0 407 Error\nProxy-Authenticate: Basic\n\n"
|
134
|
-
@server.script << "HTTP/1.0 500 Error\n\n"
|
135
|
-
@server.run
|
136
|
-
|
137
|
-
assert_raise( Net::SSH::Proxy::ConnectError ) do
|
138
|
-
@proxy.open( "foo.com", 1234 )
|
139
|
-
end
|
140
|
-
|
141
|
-
@server.wait
|
142
|
-
|
143
|
-
assert_equal [ "CONNECT foo.com:1234 HTTP/1.0\n", "\n",
|
144
|
-
"CONNECT foo.com:1234 HTTP/1.0\n",
|
145
|
-
"Proxy-Authorization: Basic dGVzdDpwYXNzd29yZA==\n", "\n" ],
|
146
|
-
@server.events
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_connect_auth_success
|
150
|
-
@options[:user] = 'test'
|
151
|
-
@options[:password] = 'password'
|
152
|
-
|
153
|
-
@server.script << "HTTP/1.0 407 Error\nProxy-Authenticate: Basic\n\n"
|
154
|
-
@server.script << "HTTP/1.0 200 OK\n\n"
|
155
|
-
@server.run
|
156
|
-
|
157
|
-
assert_nothing_raised do
|
158
|
-
@proxy.open( "foo.com", 1234 )
|
159
|
-
end
|
160
|
-
|
161
|
-
@server.wait
|
162
|
-
|
163
|
-
assert_equal [ "CONNECT foo.com:1234 HTTP/1.0\n", "\n",
|
164
|
-
"CONNECT foo.com:1234 HTTP/1.0\n",
|
165
|
-
"Proxy-Authorization: Basic dGVzdDpwYXNzd29yZA==\n", "\n" ],
|
166
|
-
@server.events
|
167
|
-
end
|
168
|
-
|
169
|
-
def test_connect_auth_success_with_HTTP_PROXY_vars
|
170
|
-
ENV['HTTP_PROXY_USER'] = 'test'
|
171
|
-
ENV['HTTP_PROXY_PASSWORD'] = 'password'
|
172
|
-
|
173
|
-
@server.script << "HTTP/1.0 407 Error\nProxy-Authenticate: Basic\n\n"
|
174
|
-
@server.script << "HTTP/1.0 200 OK\n\n"
|
175
|
-
@server.run
|
176
|
-
|
177
|
-
assert_nothing_raised do
|
178
|
-
@proxy.open( "foo.com", 1234 )
|
179
|
-
end
|
180
|
-
|
181
|
-
@server.wait
|
182
|
-
|
183
|
-
assert_equal [ "CONNECT foo.com:1234 HTTP/1.0\n", "\n",
|
184
|
-
"CONNECT foo.com:1234 HTTP/1.0\n",
|
185
|
-
"Proxy-Authorization: Basic dGVzdDpwYXNzd29yZA==\n", "\n" ],
|
186
|
-
@server.events
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_connect_auth_success_with_CONNECT_vars
|
190
|
-
ENV['CONNECT_USER'] = 'test'
|
191
|
-
ENV['CONNECT_PASSWORD'] = 'password'
|
192
|
-
|
193
|
-
@server.script << "HTTP/1.0 407 Error\nProxy-Authenticate: Basic\n\n"
|
194
|
-
@server.script << "HTTP/1.0 200 OK\n\n"
|
195
|
-
@server.run
|
196
|
-
|
197
|
-
assert_nothing_raised do
|
198
|
-
@proxy.open( "foo.com", 1234 )
|
199
|
-
end
|
200
|
-
|
201
|
-
@server.wait
|
202
|
-
|
203
|
-
assert_equal [ "CONNECT foo.com:1234 HTTP/1.0\n", "\n",
|
204
|
-
"CONNECT foo.com:1234 HTTP/1.0\n",
|
205
|
-
"Proxy-Authorization: Basic dGVzdDpwYXNzd29yZA==\n", "\n" ],
|
206
|
-
@server.events
|
207
|
-
end
|
208
|
-
|
209
|
-
end
|
data/test/proxy/tc_socks4.rb
DELETED
@@ -1,148 +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/proxy/socks4'
|
21
|
-
require 'socket'
|
22
|
-
|
23
|
-
class TC_Proxy_SOCKS4 < Test::Unit::TestCase
|
24
|
-
|
25
|
-
HOST = "test.host"
|
26
|
-
PORT = 22117
|
27
|
-
|
28
|
-
class ScriptableSOCKS4Server
|
29
|
-
attr_reader :script
|
30
|
-
attr_reader :events
|
31
|
-
|
32
|
-
def initialize
|
33
|
-
@script = []
|
34
|
-
@events = []
|
35
|
-
end
|
36
|
-
|
37
|
-
def run
|
38
|
-
@socket = TCPServer.new( HOST, PORT )
|
39
|
-
@thread = Thread.new { run_server until @script.empty? }
|
40
|
-
end
|
41
|
-
|
42
|
-
def run_server
|
43
|
-
client = @socket.accept
|
44
|
-
packet = client.read(8)
|
45
|
-
c = nil
|
46
|
-
packet << c while ( c = client.read(1) ) != "\0"
|
47
|
-
packet << "\0"
|
48
|
-
@events << packet
|
49
|
-
client.send @script.shift, 0
|
50
|
-
rescue Exception => e
|
51
|
-
puts "#{e.class}: #{e.message}"
|
52
|
-
puts e.backtrace.join("\n")
|
53
|
-
end
|
54
|
-
|
55
|
-
def wait
|
56
|
-
@thread.join
|
57
|
-
end
|
58
|
-
|
59
|
-
def shutdown
|
60
|
-
@socket.close
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def setup
|
65
|
-
ENV['SOCKS_USER'] = nil
|
66
|
-
ENV['CONNECT_USER'] = nil
|
67
|
-
|
68
|
-
@server = ScriptableSOCKS4Server.new
|
69
|
-
@options = Hash.new
|
70
|
-
@proxy = Net::SSH::Proxy::SOCKS4.new( HOST, PORT, @options )
|
71
|
-
end
|
72
|
-
|
73
|
-
def teardown
|
74
|
-
@server.shutdown
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_no_auth_ok
|
78
|
-
@server.script << "\4\132\0\0\0\0\0\0\0\0"
|
79
|
-
@server.run
|
80
|
-
|
81
|
-
assert_nothing_raised do
|
82
|
-
@proxy.open( "test.host", 1234 )
|
83
|
-
end
|
84
|
-
|
85
|
-
@server.wait
|
86
|
-
|
87
|
-
assert_equal [ "\4\1\4\xD2\x7F\0\0\1\0" ], @server.events
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_no_auth_fail
|
91
|
-
@server.script << "\4\133\0\0\0\0\0\0\0\0"
|
92
|
-
@server.run
|
93
|
-
|
94
|
-
assert_raise( Net::SSH::Proxy::ConnectError ) do
|
95
|
-
@proxy.open( "test.host", 1234 )
|
96
|
-
end
|
97
|
-
|
98
|
-
@server.wait
|
99
|
-
|
100
|
-
assert_equal [ "\4\1\4\xD2\x7F\0\0\1\0" ], @server.events
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_auth_options
|
104
|
-
@options[:user] = "test"
|
105
|
-
|
106
|
-
@server.script << "\4\132\0\0\0\0\0\0\0\0"
|
107
|
-
@server.run
|
108
|
-
|
109
|
-
assert_nothing_raised do
|
110
|
-
@proxy.open( "test.host", 1234 )
|
111
|
-
end
|
112
|
-
|
113
|
-
@server.wait
|
114
|
-
|
115
|
-
assert_equal [ "\4\1\4\xD2\x7F\0\0\1test\0" ], @server.events
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_auth_SOCKS_var
|
119
|
-
ENV["SOCKS_USER"] = "test"
|
120
|
-
|
121
|
-
@server.script << "\4\132\0\0\0\0\0\0\0\0"
|
122
|
-
@server.run
|
123
|
-
|
124
|
-
assert_nothing_raised do
|
125
|
-
@proxy.open( "test.host", 1234 )
|
126
|
-
end
|
127
|
-
|
128
|
-
@server.wait
|
129
|
-
|
130
|
-
assert_equal [ "\4\1\4\xD2\x7F\0\0\1test\0" ], @server.events
|
131
|
-
end
|
132
|
-
|
133
|
-
def test_auth_CONNECT_var
|
134
|
-
ENV["CONNECT_USER"] = "test"
|
135
|
-
|
136
|
-
@server.script << "\4\132\0\0\0\0\0\0\0\0"
|
137
|
-
@server.run
|
138
|
-
|
139
|
-
assert_nothing_raised do
|
140
|
-
@proxy.open( "test.host", 1234 )
|
141
|
-
end
|
142
|
-
|
143
|
-
@server.wait
|
144
|
-
|
145
|
-
assert_equal [ "\4\1\4\xD2\x7F\0\0\1test\0" ], @server.events
|
146
|
-
end
|
147
|
-
|
148
|
-
end
|
data/test/proxy/tc_socks5.rb
DELETED
@@ -1,214 +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/proxy/socks5'
|
21
|
-
require 'socket'
|
22
|
-
|
23
|
-
class TC_Proxy_SOCKS5 < Test::Unit::TestCase
|
24
|
-
|
25
|
-
HOST = "test.host"
|
26
|
-
PORT = 22117
|
27
|
-
|
28
|
-
class ScriptableSOCKS5Server
|
29
|
-
attr_reader :script
|
30
|
-
attr_reader :events
|
31
|
-
|
32
|
-
def initialize
|
33
|
-
@script = []
|
34
|
-
@events = []
|
35
|
-
end
|
36
|
-
|
37
|
-
def run
|
38
|
-
@socket = TCPServer.new( HOST, PORT )
|
39
|
-
@thread = Thread.new { run_server }
|
40
|
-
end
|
41
|
-
|
42
|
-
def run_server
|
43
|
-
client = @socket.accept
|
44
|
-
|
45
|
-
data = client.read(2)
|
46
|
-
count = data[1]
|
47
|
-
data << client.read(count)
|
48
|
-
@events << data
|
49
|
-
client.send @script.shift, 0
|
50
|
-
return if @script.empty?
|
51
|
-
|
52
|
-
if count > 1
|
53
|
-
data = client.read(2)
|
54
|
-
data << client.read(data[data.length-1]+1)
|
55
|
-
data << client.read(data[data.length-1])
|
56
|
-
@events << data
|
57
|
-
client.send @script.shift, 0
|
58
|
-
return if @script.empty?
|
59
|
-
end
|
60
|
-
|
61
|
-
data = client.read(4)
|
62
|
-
t = data[3]
|
63
|
-
if t == 1
|
64
|
-
data << client.read(4)
|
65
|
-
elsif t == 3
|
66
|
-
data << client.read(1)
|
67
|
-
length = data[4]
|
68
|
-
data << client.read(length)
|
69
|
-
end
|
70
|
-
data << client.read(2)
|
71
|
-
@events << data
|
72
|
-
client.send @script.shift, 0
|
73
|
-
|
74
|
-
rescue Exception => e
|
75
|
-
puts "#{e.class}: #{e.message}"
|
76
|
-
puts e.backtrace.join("\n")
|
77
|
-
end
|
78
|
-
|
79
|
-
def wait
|
80
|
-
@thread.join
|
81
|
-
end
|
82
|
-
|
83
|
-
def shutdown
|
84
|
-
@socket.close
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def setup
|
89
|
-
ENV['SOCKS_USER'] = nil
|
90
|
-
ENV['SOCKS_PASSWORD'] = nil
|
91
|
-
ENV['CONNECT_USER'] = nil
|
92
|
-
ENV['CONNECT_PASSWORD'] = nil
|
93
|
-
|
94
|
-
@server = ScriptableSOCKS5Server.new
|
95
|
-
@options = Hash.new
|
96
|
-
@proxy = Net::SSH::Proxy::SOCKS5.new( HOST, PORT, @options )
|
97
|
-
end
|
98
|
-
|
99
|
-
def teardown
|
100
|
-
@server.shutdown
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_bad_version
|
104
|
-
@server.script << "\4\0"
|
105
|
-
@server.run
|
106
|
-
|
107
|
-
assert_raise( Net::SSH::Proxy::Error ) do
|
108
|
-
@proxy.open( "test.host", 1234 )
|
109
|
-
end
|
110
|
-
|
111
|
-
@server.wait
|
112
|
-
|
113
|
-
assert_equal [ "\5\1\0" ], @server.events
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_no_supported_methods
|
117
|
-
@server.script << "\5\xff"
|
118
|
-
@server.run
|
119
|
-
|
120
|
-
assert_raise( Net::SSH::Proxy::Error ) do
|
121
|
-
@proxy.open( "test.host", 1234 )
|
122
|
-
end
|
123
|
-
|
124
|
-
@server.wait
|
125
|
-
|
126
|
-
assert_equal [ "\5\1\0" ], @server.events
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_no_auth_fail
|
130
|
-
@server.script << "\5\0"
|
131
|
-
@server.script << "\5\1\0\0\4\0\0\0\0\0\0"
|
132
|
-
@server.run
|
133
|
-
|
134
|
-
assert_raise( Net::SSH::Proxy::ConnectError ) do
|
135
|
-
@proxy.open( "test.host", 1234 )
|
136
|
-
end
|
137
|
-
|
138
|
-
@server.wait
|
139
|
-
|
140
|
-
assert_equal [ "\5\1\0", "\5\1\0\3\11test.host\4\322" ], @server.events
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_no_auth_succeed_atyp_ipv4
|
144
|
-
@server.script << "\5\0"
|
145
|
-
@server.script << "\5\0\0\0\4\0\0\0\0\0\0"
|
146
|
-
@server.run
|
147
|
-
|
148
|
-
assert_nothing_raised do
|
149
|
-
@proxy.open( "1.2.3.4", 1234 )
|
150
|
-
end
|
151
|
-
|
152
|
-
@server.wait
|
153
|
-
|
154
|
-
assert_equal [ "\5\1\0", "\5\1\0\1\1\2\3\4\4\322" ], @server.events
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_no_auth_succeed_atyp_domain
|
158
|
-
@server.script << "\5\0"
|
159
|
-
@server.script << "\5\0\0\0\4\0\0\0\0\0\0"
|
160
|
-
@server.run
|
161
|
-
|
162
|
-
assert_nothing_raised do
|
163
|
-
@proxy.open( "test.host", 1234 )
|
164
|
-
end
|
165
|
-
|
166
|
-
@server.wait
|
167
|
-
|
168
|
-
assert_equal [ "\5\1\0", "\5\1\0\3\11test.host\4\322" ], @server.events
|
169
|
-
end
|
170
|
-
|
171
|
-
def test_authorize_fail
|
172
|
-
@options[:user], @options[:password] = "foo", "bar"
|
173
|
-
|
174
|
-
@server.script << "\5\2"
|
175
|
-
@server.script << "\5\1"
|
176
|
-
@server.run
|
177
|
-
|
178
|
-
assert_raise( Net::SSH::Proxy::UnauthorizedError ) do
|
179
|
-
@proxy.open( "test.host", 1234 )
|
180
|
-
end
|
181
|
-
|
182
|
-
@server.wait
|
183
|
-
|
184
|
-
assert_equal [ "\5\2\0\2", "\1\3foo\3bar" ], @server.events
|
185
|
-
end
|
186
|
-
|
187
|
-
[
|
188
|
-
[:options,
|
189
|
-
lambda { |o| o[:user], o[:password] = "foo", "bar" } ],
|
190
|
-
[:socks,
|
191
|
-
lambda { ENV['SOCKS_USER'], ENV['SOCKS_PASSWORD'] = "foo", "bar" } ],
|
192
|
-
[:connect,
|
193
|
-
lambda { ENV['CONNECT_USER'], ENV['CONNECT_PASSWORD'] = "foo", "bar" } ]
|
194
|
-
].each do |name, cb|
|
195
|
-
define_method "test_authorize_via_#{name}".to_sym do
|
196
|
-
cb.call( @options )
|
197
|
-
|
198
|
-
@server.script << "\5\2"
|
199
|
-
@server.script << "\5\0"
|
200
|
-
@server.script << "\5\0\0\0\4\0\0\0\0\0\0"
|
201
|
-
@server.run
|
202
|
-
|
203
|
-
assert_nothing_raised do
|
204
|
-
@proxy.open( "test.host", 1234 )
|
205
|
-
end
|
206
|
-
|
207
|
-
@server.wait
|
208
|
-
|
209
|
-
assert_equal [ "\5\2\0\2", "\1\3foo\3bar",
|
210
|
-
"\5\1\0\3\11test.host\4\322" ], @server.events
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
end
|