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.
Files changed (297) hide show
  1. data/CHANGELOG.rdoc +37 -0
  2. data/Manifest +101 -0
  3. data/README.rdoc +110 -0
  4. data/Rakefile +26 -0
  5. data/{THANKS → THANKS.rdoc} +2 -5
  6. data/lib/net/ssh.rb +189 -57
  7. data/lib/net/ssh/authentication/agent.rb +175 -0
  8. data/lib/net/ssh/authentication/constants.rb +18 -0
  9. data/lib/net/ssh/authentication/key_manager.rb +166 -0
  10. data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
  11. data/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
  12. data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
  13. data/lib/net/ssh/authentication/methods/password.rb +39 -0
  14. data/lib/net/ssh/authentication/methods/publickey.rb +92 -0
  15. data/lib/net/ssh/authentication/pageant.rb +176 -0
  16. data/lib/net/ssh/authentication/session.rb +116 -0
  17. data/lib/net/ssh/buffer.rb +339 -0
  18. data/lib/net/ssh/buffered_io.rb +149 -0
  19. data/lib/net/ssh/config.rb +173 -0
  20. data/lib/net/ssh/connection/channel.rb +575 -454
  21. data/lib/net/ssh/connection/constants.rb +31 -45
  22. data/lib/net/ssh/connection/session.rb +569 -0
  23. data/lib/net/ssh/connection/term.rb +176 -88
  24. data/lib/net/ssh/errors.rb +83 -61
  25. data/lib/net/ssh/key_factory.rb +85 -0
  26. data/lib/net/ssh/known_hosts.rb +129 -0
  27. data/lib/net/ssh/loggable.rb +61 -0
  28. data/lib/net/ssh/packet.rb +102 -0
  29. data/lib/net/ssh/prompt.rb +93 -0
  30. data/lib/net/ssh/proxy/errors.rb +8 -28
  31. data/lib/net/ssh/proxy/http.rb +75 -107
  32. data/lib/net/ssh/proxy/socks4.rb +35 -48
  33. data/lib/net/ssh/proxy/socks5.rb +76 -108
  34. data/lib/net/ssh/service/forward.rb +267 -0
  35. data/lib/net/ssh/test.rb +89 -0
  36. data/lib/net/ssh/test/channel.rb +129 -0
  37. data/lib/net/ssh/test/extensions.rb +152 -0
  38. data/lib/net/ssh/test/kex.rb +44 -0
  39. data/lib/net/ssh/test/local_packet.rb +51 -0
  40. data/lib/net/ssh/test/packet.rb +81 -0
  41. data/lib/net/ssh/test/remote_packet.rb +38 -0
  42. data/lib/net/ssh/test/script.rb +157 -0
  43. data/lib/net/ssh/test/socket.rb +59 -0
  44. data/lib/net/ssh/transport/algorithms.rb +384 -0
  45. data/lib/net/ssh/transport/cipher_factory.rb +72 -0
  46. data/lib/net/ssh/transport/constants.rb +22 -58
  47. data/lib/net/ssh/transport/hmac.rb +31 -0
  48. data/lib/net/ssh/transport/hmac/abstract.rb +48 -0
  49. data/lib/net/ssh/transport/hmac/md5.rb +12 -0
  50. data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
  51. data/lib/net/ssh/transport/hmac/none.rb +15 -0
  52. data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
  53. data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
  54. data/lib/net/ssh/transport/identity_cipher.rb +40 -0
  55. data/lib/net/ssh/transport/kex.rb +13 -0
  56. data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
  57. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
  58. data/lib/net/ssh/{util → transport}/openssl.rb +22 -40
  59. data/lib/net/ssh/transport/packet_stream.rb +230 -0
  60. data/lib/net/ssh/transport/server_version.rb +61 -0
  61. data/lib/net/ssh/transport/session.rb +225 -303
  62. data/lib/net/ssh/transport/state.rb +170 -0
  63. data/lib/net/ssh/verifiers/lenient.rb +30 -0
  64. data/lib/net/ssh/verifiers/null.rb +12 -0
  65. data/lib/net/ssh/verifiers/strict.rb +53 -0
  66. data/lib/net/ssh/version.rb +57 -26
  67. data/net-ssh.gemspec +54 -0
  68. data/setup.rb +1585 -0
  69. data/test/authentication/methods/common.rb +28 -0
  70. data/test/authentication/methods/test_abstract.rb +51 -0
  71. data/test/authentication/methods/test_hostbased.rb +108 -0
  72. data/test/authentication/methods/test_keyboard_interactive.rb +98 -0
  73. data/test/authentication/methods/test_password.rb +50 -0
  74. data/test/authentication/methods/test_publickey.rb +123 -0
  75. data/test/authentication/test_agent.rb +205 -0
  76. data/test/authentication/test_key_manager.rb +100 -0
  77. data/test/authentication/test_session.rb +93 -0
  78. data/test/common.rb +106 -0
  79. data/test/configs/exact_match +8 -0
  80. data/test/configs/wild_cards +14 -0
  81. data/test/connection/test_channel.rb +452 -0
  82. data/test/connection/test_session.rb +483 -0
  83. data/test/test_all.rb +6 -0
  84. data/test/test_buffer.rb +336 -0
  85. data/test/test_buffered_io.rb +63 -0
  86. data/test/test_config.rb +78 -0
  87. data/test/test_key_factory.rb +67 -0
  88. data/test/transport/hmac/test_md5.rb +34 -0
  89. data/test/transport/hmac/test_md5_96.rb +25 -0
  90. data/test/transport/hmac/test_none.rb +34 -0
  91. data/test/transport/hmac/test_sha1.rb +34 -0
  92. data/test/transport/hmac/test_sha1_96.rb +25 -0
  93. data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
  94. data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
  95. data/test/transport/test_algorithms.rb +302 -0
  96. data/test/transport/test_cipher_factory.rb +163 -0
  97. data/test/transport/test_hmac.rb +34 -0
  98. data/test/transport/test_identity_cipher.rb +40 -0
  99. data/test/transport/test_packet_stream.rb +433 -0
  100. data/test/transport/test_server_version.rb +55 -0
  101. data/test/transport/test_session.rb +312 -0
  102. data/test/transport/test_state.rb +173 -0
  103. metadata +102 -253
  104. data/ChangeLog +0 -560
  105. data/LICENSE +0 -7
  106. data/NEWS +0 -152
  107. data/README +0 -14
  108. data/bin/rb-keygen +0 -210
  109. data/doc/LICENSE-BSD +0 -27
  110. data/doc/LICENSE-GPL +0 -280
  111. data/doc/LICENSE-RUBY +0 -56
  112. data/doc/manual-html/chapter-1.html +0 -388
  113. data/doc/manual-html/chapter-2.html +0 -552
  114. data/doc/manual-html/chapter-3.html +0 -470
  115. data/doc/manual-html/chapter-4.html +0 -413
  116. data/doc/manual-html/chapter-5.html +0 -525
  117. data/doc/manual-html/chapter-6.html +0 -456
  118. data/doc/manual-html/chapter-7.html +0 -343
  119. data/doc/manual-html/index.html +0 -235
  120. data/doc/manual-html/stylesheets/manual.css +0 -270
  121. data/doc/manual-html/stylesheets/ruby.css +0 -17
  122. data/doc/manual/chapter.erb +0 -38
  123. data/doc/manual/example.erb +0 -18
  124. data/doc/manual/index.erb +0 -29
  125. data/doc/manual/manual.rb +0 -311
  126. data/doc/manual/manual.yml +0 -73
  127. data/doc/manual/page.erb +0 -87
  128. data/doc/manual/parts/0000.txt +0 -5
  129. data/doc/manual/parts/0001.txt +0 -3
  130. data/doc/manual/parts/0002.txt +0 -40
  131. data/doc/manual/parts/0003.txt +0 -6
  132. data/doc/manual/parts/0004.txt +0 -7
  133. data/doc/manual/parts/0005.txt +0 -1
  134. data/doc/manual/parts/0006.txt +0 -49
  135. data/doc/manual/parts/0007.txt +0 -67
  136. data/doc/manual/parts/0008.txt +0 -43
  137. data/doc/manual/parts/0009.txt +0 -14
  138. data/doc/manual/parts/0010.txt +0 -7
  139. data/doc/manual/parts/0011.txt +0 -14
  140. data/doc/manual/parts/0012.txt +0 -3
  141. data/doc/manual/parts/0013.txt +0 -20
  142. data/doc/manual/parts/0014.txt +0 -32
  143. data/doc/manual/parts/0015.txt +0 -14
  144. data/doc/manual/parts/0016.txt +0 -28
  145. data/doc/manual/parts/0017.txt +0 -50
  146. data/doc/manual/parts/0018.txt +0 -35
  147. data/doc/manual/parts/0019.txt +0 -7
  148. data/doc/manual/parts/0020.txt +0 -72
  149. data/doc/manual/parts/0021.txt +0 -50
  150. data/doc/manual/parts/0022.txt +0 -42
  151. data/doc/manual/parts/0023.txt +0 -51
  152. data/doc/manual/parts/0024.txt +0 -18
  153. data/doc/manual/parts/0025.txt +0 -18
  154. data/doc/manual/parts/0026.txt +0 -15
  155. data/doc/manual/parts/0027.txt +0 -37
  156. data/doc/manual/parts/0028.txt +0 -16
  157. data/doc/manual/parts/0029.txt +0 -1
  158. data/doc/manual/parts/0030.txt +0 -52
  159. data/doc/manual/parts/0031.txt +0 -25
  160. data/doc/manual/stylesheets/manual.css +0 -270
  161. data/doc/manual/stylesheets/ruby.css +0 -17
  162. data/doc/manual/tutorial.erb +0 -30
  163. data/examples/auth-forward.rb +0 -41
  164. data/examples/channel-demo.rb +0 -81
  165. data/examples/port-forward.rb +0 -51
  166. data/examples/process-demo.rb +0 -91
  167. data/examples/remote-net-port-forward.rb +0 -45
  168. data/examples/remote-port-forward.rb +0 -80
  169. data/examples/shell-demo.rb +0 -46
  170. data/examples/ssh-client.rb +0 -67
  171. data/examples/sync-shell-demo.rb +0 -69
  172. data/examples/tail-demo.rb +0 -49
  173. data/lib/net/ssh/connection/driver.rb +0 -446
  174. data/lib/net/ssh/connection/services.rb +0 -72
  175. data/lib/net/ssh/host-key-verifier.rb +0 -52
  176. data/lib/net/ssh/known-hosts.rb +0 -96
  177. data/lib/net/ssh/lenient-host-key-verifier.rb +0 -25
  178. data/lib/net/ssh/null-host-key-verifier.rb +0 -14
  179. data/lib/net/ssh/service/agentforward/driver.rb +0 -78
  180. data/lib/net/ssh/service/agentforward/services.rb +0 -41
  181. data/lib/net/ssh/service/forward/driver.rb +0 -319
  182. data/lib/net/ssh/service/forward/local-network-handler.rb +0 -71
  183. data/lib/net/ssh/service/forward/remote-network-handler.rb +0 -83
  184. data/lib/net/ssh/service/forward/services.rb +0 -76
  185. data/lib/net/ssh/service/process/driver.rb +0 -153
  186. data/lib/net/ssh/service/process/open.rb +0 -193
  187. data/lib/net/ssh/service/process/popen3.rb +0 -178
  188. data/lib/net/ssh/service/process/services.rb +0 -66
  189. data/lib/net/ssh/service/services.rb +0 -60
  190. data/lib/net/ssh/service/shell/driver.rb +0 -86
  191. data/lib/net/ssh/service/shell/services.rb +0 -54
  192. data/lib/net/ssh/service/shell/shell.rb +0 -222
  193. data/lib/net/ssh/service/shell/sync.rb +0 -114
  194. data/lib/net/ssh/session.rb +0 -305
  195. data/lib/net/ssh/transport/algorithm-negotiator.rb +0 -275
  196. data/lib/net/ssh/transport/compress/compressor.rb +0 -53
  197. data/lib/net/ssh/transport/compress/decompressor.rb +0 -53
  198. data/lib/net/ssh/transport/compress/none-compressor.rb +0 -39
  199. data/lib/net/ssh/transport/compress/none-decompressor.rb +0 -39
  200. data/lib/net/ssh/transport/compress/services.rb +0 -68
  201. data/lib/net/ssh/transport/compress/zlib-compressor.rb +0 -60
  202. data/lib/net/ssh/transport/compress/zlib-decompressor.rb +0 -52
  203. data/lib/net/ssh/transport/errors.rb +0 -47
  204. data/lib/net/ssh/transport/identity-cipher.rb +0 -61
  205. data/lib/net/ssh/transport/kex/dh-gex.rb +0 -106
  206. data/lib/net/ssh/transport/kex/dh.rb +0 -249
  207. data/lib/net/ssh/transport/kex/services.rb +0 -62
  208. data/lib/net/ssh/transport/ossl/buffer-factory.rb +0 -52
  209. data/lib/net/ssh/transport/ossl/buffer.rb +0 -87
  210. data/lib/net/ssh/transport/ossl/cipher-factory.rb +0 -98
  211. data/lib/net/ssh/transport/ossl/digest-factory.rb +0 -51
  212. data/lib/net/ssh/transport/ossl/hmac-factory.rb +0 -71
  213. data/lib/net/ssh/transport/ossl/hmac/hmac.rb +0 -62
  214. data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +0 -44
  215. data/lib/net/ssh/transport/ossl/hmac/md5.rb +0 -46
  216. data/lib/net/ssh/transport/ossl/hmac/none.rb +0 -46
  217. data/lib/net/ssh/transport/ossl/hmac/services.rb +0 -68
  218. data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +0 -44
  219. data/lib/net/ssh/transport/ossl/hmac/sha1.rb +0 -45
  220. data/lib/net/ssh/transport/ossl/key-factory.rb +0 -116
  221. data/lib/net/ssh/transport/ossl/services.rb +0 -149
  222. data/lib/net/ssh/transport/packet-stream.rb +0 -236
  223. data/lib/net/ssh/transport/services.rb +0 -146
  224. data/lib/net/ssh/transport/version-negotiator.rb +0 -73
  225. data/lib/net/ssh/userauth/agent.rb +0 -222
  226. data/lib/net/ssh/userauth/constants.rb +0 -35
  227. data/lib/net/ssh/userauth/driver.rb +0 -183
  228. data/lib/net/ssh/userauth/methods/hostbased.rb +0 -119
  229. data/lib/net/ssh/userauth/methods/keyboard-interactive.rb +0 -104
  230. data/lib/net/ssh/userauth/methods/password.rb +0 -70
  231. data/lib/net/ssh/userauth/methods/publickey.rb +0 -137
  232. data/lib/net/ssh/userauth/methods/services.rb +0 -90
  233. data/lib/net/ssh/userauth/pageant.rb +0 -197
  234. data/lib/net/ssh/userauth/services.rb +0 -141
  235. data/lib/net/ssh/userauth/userkeys.rb +0 -258
  236. data/lib/net/ssh/util/buffer.rb +0 -274
  237. data/lib/net/ssh/util/prompter.rb +0 -73
  238. data/test/ALL-TESTS.rb +0 -18
  239. data/test/connection/tc_channel.rb +0 -136
  240. data/test/connection/tc_driver.rb +0 -287
  241. data/test/connection/tc_integration.rb +0 -87
  242. data/test/proxy/tc_http.rb +0 -209
  243. data/test/proxy/tc_socks4.rb +0 -148
  244. data/test/proxy/tc_socks5.rb +0 -214
  245. data/test/service/agentforward/tc_driver.rb +0 -138
  246. data/test/service/forward/tc_driver.rb +0 -289
  247. data/test/service/forward/tc_local_network_handler.rb +0 -123
  248. data/test/service/forward/tc_remote_network_handler.rb +0 -111
  249. data/test/service/process/tc_driver.rb +0 -79
  250. data/test/service/process/tc_integration.rb +0 -119
  251. data/test/service/process/tc_open.rb +0 -179
  252. data/test/service/process/tc_popen3.rb +0 -164
  253. data/test/tc_integration.rb +0 -80
  254. data/test/transport/compress/tc_none_compress.rb +0 -41
  255. data/test/transport/compress/tc_none_decompress.rb +0 -45
  256. data/test/transport/compress/tc_zlib_compress.rb +0 -61
  257. data/test/transport/compress/tc_zlib_decompress.rb +0 -48
  258. data/test/transport/kex/tc_dh.rb +0 -312
  259. data/test/transport/kex/tc_dh_gex.rb +0 -71
  260. data/test/transport/ossl/fixtures/dsa-encrypted +0 -15
  261. data/test/transport/ossl/fixtures/dsa-encrypted-bad +0 -15
  262. data/test/transport/ossl/fixtures/dsa-unencrypted +0 -12
  263. data/test/transport/ossl/fixtures/dsa-unencrypted-bad +0 -12
  264. data/test/transport/ossl/fixtures/dsa-unencrypted.pub +0 -1
  265. data/test/transport/ossl/fixtures/not-a-private-key +0 -4
  266. data/test/transport/ossl/fixtures/not-supported +0 -2
  267. data/test/transport/ossl/fixtures/rsa-encrypted +0 -18
  268. data/test/transport/ossl/fixtures/rsa-encrypted-bad +0 -18
  269. data/test/transport/ossl/fixtures/rsa-unencrypted +0 -15
  270. data/test/transport/ossl/fixtures/rsa-unencrypted-bad +0 -15
  271. data/test/transport/ossl/fixtures/rsa-unencrypted.pub +0 -1
  272. data/test/transport/ossl/hmac/tc_hmac.rb +0 -58
  273. data/test/transport/ossl/hmac/tc_md5.rb +0 -50
  274. data/test/transport/ossl/hmac/tc_md5_96.rb +0 -50
  275. data/test/transport/ossl/hmac/tc_none.rb +0 -50
  276. data/test/transport/ossl/hmac/tc_sha1.rb +0 -50
  277. data/test/transport/ossl/hmac/tc_sha1_96.rb +0 -50
  278. data/test/transport/ossl/tc_buffer.rb +0 -97
  279. data/test/transport/ossl/tc_buffer_factory.rb +0 -67
  280. data/test/transport/ossl/tc_cipher_factory.rb +0 -84
  281. data/test/transport/ossl/tc_digest_factory.rb +0 -39
  282. data/test/transport/ossl/tc_hmac_factory.rb +0 -72
  283. data/test/transport/ossl/tc_key_factory.rb +0 -199
  284. data/test/transport/tc_algorithm_negotiator.rb +0 -170
  285. data/test/transport/tc_identity_cipher.rb +0 -52
  286. data/test/transport/tc_integration.rb +0 -115
  287. data/test/transport/tc_packet_stream.rb +0 -184
  288. data/test/transport/tc_session.rb +0 -296
  289. data/test/transport/tc_version_negotiator.rb +0 -86
  290. data/test/userauth/methods/tc_hostbased.rb +0 -136
  291. data/test/userauth/methods/tc_password.rb +0 -89
  292. data/test/userauth/methods/tc_publickey.rb +0 -167
  293. data/test/userauth/tc_agent.rb +0 -223
  294. data/test/userauth/tc_driver.rb +0 -190
  295. data/test/userauth/tc_integration.rb +0 -97
  296. data/test/userauth/tc_userkeys.rb +0 -265
  297. 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
@@ -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
@@ -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
@@ -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