net-ssh 1.1.4 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,164 +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/service/process/popen3'
21
-
22
- class TC_Process_POpen3 < Test::Unit::TestCase
23
-
24
- class MockObject
25
- attr_reader :events
26
-
27
- def initialize
28
- @events = []
29
- end
30
-
31
- def method_missing( sym, *args, &block )
32
- token = [ sym, *args ]
33
- token << :with_block if block
34
- @events << token
35
- end
36
-
37
- undef_method :loop
38
- end
39
-
40
- class Channel < MockObject
41
- attr_reader :connection
42
-
43
- def connection
44
- @connection ||= MockObject.new
45
- end
46
- end
47
-
48
- class TC_SSHStdinPipe < Test::Unit::TestCase
49
- def setup
50
- @channel = Channel.new
51
- @pipe = Net::SSH::Service::Process::POpen3Manager::SSHStdinPipe.new(
52
- @channel )
53
- end
54
-
55
- def test_write
56
- @pipe.write "foo"
57
- assert_equal [ [ :send_data, "foo" ] ], @channel.events
58
- end
59
-
60
- def test_puts_nonl
61
- @pipe.puts "foo"
62
- assert_equal [ [ :send_data, "foo\n" ] ], @channel.events
63
- end
64
-
65
- def test_puts_nl
66
- @pipe.puts "foo\n"
67
- assert_equal [ [ :send_data, "foo\n" ] ], @channel.events
68
- end
69
- end
70
-
71
- class TC_SSHStdoutPipe < Test::Unit::TestCase
72
- def setup
73
- @channel = Channel.new
74
- @pipe = Net::SSH::Service::Process::POpen3Manager::SSHStdoutPipe.new(
75
- @channel )
76
- end
77
-
78
- def test_read_empty
79
- klass = class << @channel.connection; self; end
80
- pipe = @pipe
81
- klass.send(:define_method,:process) { pipe.instance_variable_set( :@data, "foo" ) }
82
- s = @pipe.read
83
- assert_equal "foo", s
84
- end
85
-
86
- def test_read_full
87
- @pipe.do_data @channel, "foo"
88
- s = @pipe.read
89
- assert_equal "foo", s
90
- assert_equal [], @channel.connection.events
91
- end
92
- end
93
-
94
- class TC_SSHStderrPipe < Test::Unit::TestCase
95
- def setup
96
- @channel = Channel.new
97
- @pipe = Net::SSH::Service::Process::POpen3Manager::SSHStderrPipe.new(
98
- @channel )
99
- end
100
-
101
- def test_read_empty
102
- klass = class << @channel.connection; self; end
103
- pipe = @pipe
104
- klass.send(:define_method,:process) do
105
- data = pipe.instance_variable_get( :@data )
106
- pipe.instance_variable_set( :@data, (data||"") + "foo" )
107
- end
108
- s = @pipe.read
109
- assert_equal "foo", s
110
- end
111
-
112
- def test_read_stderr
113
- @pipe.do_data @channel, 1, "foo"
114
- s = @pipe.read
115
- assert_equal "foo", s
116
- assert_equal [], @channel.connection.events
117
- end
118
- end
119
-
120
- class Connection < MockObject
121
- class Channel < MockObject
122
- attr_reader :success
123
- attr_reader :failure
124
-
125
- def on_success( &block )
126
- super
127
- @success = block
128
- end
129
-
130
- def on_failure( &block )
131
- super
132
- @failure = block
133
- end
134
- end
135
-
136
- attr_reader :channel
137
- def open_channel( type )
138
- super
139
- yield @channel = Channel.new
140
- end
141
- end
142
-
143
- def test_popen3
144
- conn = Connection.new
145
- mgr = Net::SSH::Service::Process::POpen3Manager.new( conn, nil )
146
- mgr.popen3( "foo" ) do |a,b,c|
147
- assert_instance_of(
148
- Net::SSH::Service::Process::POpen3Manager::SSHStdinPipe, a )
149
- assert_instance_of(
150
- Net::SSH::Service::Process::POpen3Manager::SSHStdoutPipe, b )
151
- assert_instance_of(
152
- Net::SSH::Service::Process::POpen3Manager::SSHStderrPipe, c )
153
- end
154
-
155
- assert_equal [ [ :open_channel, "session", :with_block ],
156
- [ :loop ] ], conn.events
157
- chan = conn.channel
158
- assert_equal [ [ :on_success, :with_block ],
159
- [ :on_failure, :with_block ], [ :exec, "foo", true ] ], chan.events
160
-
161
- chan.success.call( chan )
162
- end
163
-
164
- end
@@ -1,80 +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 'net/ssh/session'
22
- require 'test/unit'
23
-
24
- class TC_Integration < Test::Unit::TestCase
25
-
26
- HOST = "test.host"
27
- USER = "test"
28
- PASSWORD = "test/unit"
29
- SESS_OPTS = {
30
- :registry_options => {
31
- :logs => {
32
- :device => STDOUT,
33
- :default_level => :warn
34
- }
35
- },
36
- :paranoid => false
37
- }
38
-
39
- def setup
40
- @session = Net::SSH::Session.new( HOST, USER, PASSWORD, SESS_OPTS )
41
- end
42
-
43
- def teardown
44
- @session.close
45
- end
46
-
47
- def test_no_auth
48
- assert_raise( Net::SSH::AuthenticationFailed ) do
49
- Net::SSH::Session.new( HOST, USER, PASSWORD+"K", SESS_OPTS )
50
- end
51
- end
52
-
53
- def test_exec
54
- exec_data = ""
55
- @session.open_channel do |chan|
56
- chan.on_data { |ch,data| exec_data << data }
57
- chan.exec "echo hello"
58
- end
59
- @session.loop
60
- assert_equal "hello\n", exec_data
61
- end
62
-
63
- def test_dialog
64
- dialog = [ "2+2", "5*10+1", "quit" ]
65
- results = []
66
- @session.open_channel "session" do |chan|
67
- chan.on_data do |ch,data|
68
- results << data
69
- chan.send_data dialog.shift + "\n"
70
- end
71
- chan.exec "bc"
72
- chan.send_data dialog.shift + "\n"
73
- end
74
- @session.loop
75
- assert_equal [ "4\n", "51\n" ], results
76
- end
77
-
78
- end
79
-
80
- end
@@ -1,41 +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 'net/ssh/transport/compress/none-compressor'
20
- require 'test/unit'
21
-
22
- class TC_NoneCompressor < Test::Unit::TestCase
23
-
24
- def setup
25
- @compressor = Net::SSH::Transport::Compress::NoneCompressor.new
26
- end
27
-
28
- def test_new
29
- assert_instance_of Net::SSH::Transport::Compress::NoneCompressor,
30
- @compressor.new
31
- end
32
-
33
- def test_compress
34
- expect = "To be, or not to be, that is the question"
35
- assert_equal expect, @compressor.compress( "To be, or not to be, that is the question" )
36
-
37
- expect = "But soft! What light through yonder window breaks?"
38
- assert_equal expect, @compressor.compress( "But soft! What light through yonder window breaks?" )
39
- end
40
-
41
- end
@@ -1,45 +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 'net/ssh/transport/compress/none-decompressor'
20
- require 'test/unit'
21
-
22
- class TC_NoneDecompressor < Test::Unit::TestCase
23
-
24
- def setup
25
- @decompressor = Net::SSH::Transport::Compress::NoneDecompressor.new
26
- end
27
-
28
- def test_new
29
- assert_instance_of Net::SSH::Transport::Compress::NoneDecompressor,
30
- @decompressor.new
31
- end
32
-
33
- def test_decompress
34
- expect = "To be, or not to be, that is the question"
35
-
36
- assert_equal expect, @decompressor.decompress(
37
- "To be, or not to be, that is the question" )
38
-
39
- expect = "But soft! What light through yonder window breaks?"
40
-
41
- assert_equal expect, @decompressor.decompress(
42
- "But soft! What light through yonder window breaks?" )
43
- end
44
-
45
- end
@@ -1,61 +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 'net/ssh/transport/compress/zlib-compressor'
20
- require 'test/unit'
21
-
22
- class TC_ZLibCompressor < Test::Unit::TestCase
23
-
24
- def setup
25
- @compressor = Net::SSH::Transport::Compress::ZLibCompressor.new
26
- end
27
-
28
- def test_new
29
- assert_instance_of Net::SSH::Transport::Compress::ZLibCompressor,
30
- @compressor.new
31
- end
32
-
33
- def test_compress
34
- expect = "x\234\n\311WHJ\325Q\310/R\310\313/Q(\201\360J2\022K" +
35
- "\0242\213\201t\252BaijqIf~\036\000\000\000\377\377"
36
-
37
- assert_equal expect, @compressor.compress( "To be, or not to be, that is the question" )
38
-
39
- expect = "r*-Q(\316O+QT\010\a\311\346d\246g\000\325g\024\345\227\246g(T" +
40
- "\346\347\245\244\026)\224g\346\245\344\227+$\025\245&f\027\333" +
41
- "\003\000\000\000\377\377"
42
-
43
- assert_equal expect, @compressor.compress( "But soft! What light through yonder window breaks?" )
44
- end
45
-
46
- def test_compress_options
47
- @compressor.configure :level => 1
48
-
49
- expect = "x\001\n\311WHJ\325Q\310/R\310\313/Q(\201\360J2\022K\0242\213" +
50
- "\025J2R\025\nKS\213K2\363\363\000\000\000\000\377\377"
51
-
52
- assert_equal expect, @compressor.compress( "To be, or not to be, that is the question" )
53
-
54
- expect = "r*-Q(\316O+QT\010\a\311\346d\246g\000\325g\024\345\227\246g(T" +
55
- "\346\347\245\244\026)\224g\346\245\344\227+$\025\245&f\027\333" +
56
- "\003\000\000\000\377\377"
57
-
58
- assert_equal expect, @compressor.compress( "But soft! What light through yonder window breaks?" )
59
- end
60
-
61
- end
@@ -1,48 +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 'net/ssh/transport/compress/zlib-decompressor'
20
- require 'test/unit'
21
-
22
- class TC_ZLibDecompressor < Test::Unit::TestCase
23
-
24
- def setup
25
- @decompressor = Net::SSH::Transport::Compress::ZLibDecompressor.new
26
- end
27
-
28
- def test_new
29
- assert_instance_of Net::SSH::Transport::Compress::ZLibDecompressor,
30
- @decompressor.new
31
- end
32
-
33
- def test_decompress
34
- expect = "To be, or not to be, that is the question"
35
-
36
- assert_equal expect, @decompressor.decompress(
37
- "x\234\n\311WHJ\325Q\310/R\310\313/Q(\201\360J2\022K" +
38
- "\0242\213\201t\252BaijqIf~\036\000\000\000\377\377" )
39
-
40
- expect = "But soft! What light through yonder window breaks?"
41
-
42
- assert_equal expect, @decompressor.decompress(
43
- "r*-Q(\316O+QT\010\a\311\346d\246g\000\325g\024\345\227\246g(T" +
44
- "\346\347\245\244\026)\224g\346\245\344\227+$\025\245&f\027\333" +
45
- "\003\000\000\000\377\377" )
46
- end
47
-
48
- end
@@ -1,312 +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 'net/ssh/errors'
20
- require 'net/ssh/null-host-key-verifier'
21
- require 'net/ssh/transport/kex/dh'
22
- require 'net/ssh/util/buffer'
23
- require 'test/unit'
24
- require 'ostruct'
25
-
26
- class TC_KEX_DH < Test::Unit::TestCase
27
-
28
- class MockDH < Struct.new( :valid, :p, :g, :priv_key, :pub_key )
29
- def valid?
30
- valid
31
- end
32
-
33
- def compute_key( num )
34
- num
35
- end
36
-
37
- def generate_key!
38
- self.pub_key = MockBN.new( priv_key )
39
- end
40
- end
41
-
42
- class MockServerKey
43
- attr_reader :result
44
-
45
- def initialize( result )
46
- @result = result
47
- end
48
-
49
- def ssh_do_verify( sig, hash )
50
- @result
51
- end
52
-
53
- def ssh_type
54
- "ssh-test"
55
- end
56
- end
57
-
58
- class MockKeys
59
- def get( type )
60
- raise "not DH" unless type == "dh"
61
- return MockDH.new( true )
62
- end
63
- end
64
-
65
- class MockBN
66
- attr_reader :value
67
-
68
- def initialize( value )
69
- @value = value
70
- end
71
-
72
- def to_i( *args )
73
- @value.to_i( *args )
74
- end
75
-
76
- def to_ssh
77
- "[#{@value}]"
78
- end
79
- end
80
-
81
- class MockBNs
82
- def new( value, base )
83
- return value if value.is_a?( Numeric )
84
- MockBN.new( value.to_i( base ) )
85
- end
86
-
87
- def rand( bits )
88
- bits
89
- end
90
- end
91
-
92
- class MockDigest
93
- def self.digest( text )
94
- text
95
- end
96
- end
97
-
98
- class MockReaderBuffer < Net::SSH::Util::ReaderBuffer
99
- def read_key
100
- MockServerKey.new( read )
101
- end
102
-
103
- def read_bignum
104
- MockBN.new( read_string )
105
- end
106
- end
107
-
108
- class MockBuffers
109
- def writer( text="" ); Net::SSH::Util::WriterBuffer.new( text ); end
110
- def reader( text ); MockReaderBuffer.new( text ); end
111
- end
112
-
113
- class MockDigests
114
- def get( type )
115
- raise "not SHA1" unless type == "sha1"
116
- return MockDigest
117
- end
118
- end
119
-
120
- class MockSession
121
- attr_reader :sent_buffer
122
-
123
- def initialize( *script )
124
- @script = script
125
- end
126
-
127
- def send_message( buffer )
128
- @sent_buffer = buffer
129
- end
130
-
131
- def wait_for_message
132
- [ @script.shift, @script.shift ]
133
- end
134
-
135
- def peer
136
- {}
137
- end
138
-
139
- def algorithms
140
- OpenStruct.new( :host_key => "ssh-test" )
141
- end
142
- end
143
-
144
- def setup
145
- @kex = Net::SSH::Transport::Kex::DiffieHellmanGroup1SHA1.new(
146
- MockBNs.new, MockDigests.new )
147
- @kex.keys = MockKeys.new
148
- @kex.buffers = MockBuffers.new
149
- @kex.host_key_verifier = Net::SSH::NullHostKeyVerifier.new
150
-
151
- @init = Net::SSH::Transport::Kex::DiffieHellmanGroup1SHA1::KEXDH_INIT
152
- @reply = Net::SSH::Transport::Kex::DiffieHellmanGroup1SHA1::KEXDH_REPLY
153
- @session_id = "\0\0\0\1A\0\0\0\1B\0\0\0\1C\0\0\0\1D\0\0\0\1E[10][20][30]"
154
-
155
- @exchange_keys_script = [
156
- 31,
157
- MockReaderBuffer.new( "\0\0\0\10key blob\0\0\0\0041001\0\0\0\27\0\0\0\10ssh-test\0\0\0\11signature" ),
158
- 21,
159
- nil
160
- ]
161
-
162
- @exchange_keys_session_id = "\0\0\0\1A\0\0\0\1B\0\0\0\1C\0\0\0\1D\0\0\0\10key blob[80][1001][9]"
163
- end
164
-
165
- def test_generate_key
166
- dh = nil
167
- assert_nothing_raised do
168
- dh = @kex.generate_key( nil, { :need_bytes=>10 } )
169
- end
170
-
171
- expected_p =
172
- 0xFFFFFFFF_FFFFFFFF_C90FDAA2_2168C234_C4C6628B_80DC1CD1_29024E08_8A67CC74_020BBEA6_3B139B22_514A0879_8E3404DD_EF9519B3_CD3A431B_302B0A6D_F25F1437_4FE1356D_6D51C245_E485B576_625E7EC6_F44C42E9_A637ED6B_0BFF5CB6_F406B7ED_EE386BFB_5A899FA5_AE9F2411_7C4B1FE6_49286651_ECE65381_FFFFFFFF_FFFFFFFF
173
-
174
- assert_equal expected_p, dh.p.to_i
175
- assert_equal 2, dh.g
176
- assert_equal 80, dh.priv_key
177
- end
178
-
179
- def test_verify_server_key
180
- key = OpenStruct.new( :ssh_type => "test" )
181
- session = OpenStruct.new( :algorithms => OpenStruct.new( :host_key => "test" ) )
182
- assert_nothing_raised { @kex.verify_server_key( key, session ) }
183
-
184
- session = OpenStruct.new( :algorithms => OpenStruct.new( :host_key => "bogus" ) )
185
- assert_raise( Net::SSH::Exception ) {
186
- @kex.verify_server_key( key, session ) }
187
- end
188
-
189
- def test_send_kexinit
190
- dh = MockDH.new
191
- dh.pub_key = MockBN.new( 80 )
192
- session = MockSession.new( @reply, :worked )
193
-
194
- result = nil
195
- assert_nothing_raised do
196
- result = @kex.send_kexinit( dh, session )
197
- end
198
-
199
- assert_equal :worked, result
200
- assert_equal "#{@init.chr}[80]", session.sent_buffer.to_s
201
-
202
- session = MockSession.new( @reply+1, :worked )
203
-
204
- assert_raise( Net::SSH::Exception ) do
205
- @kex.send_kexinit( dh, session )
206
- end
207
- end
208
-
209
- def test_parse_kex_reply
210
- dh = MockDH.new
211
-
212
- buffer = Net::SSH::Util::WriterBuffer.new
213
- buffer.write_string "key blob"
214
- buffer.write_string "1001"
215
-
216
- sigbuf = Net::SSH::Util::WriterBuffer.new
217
- sigbuf.write_string "ssh-test"
218
- sigbuf.write_string "signature"
219
- buffer.write_string sigbuf
220
-
221
- buffer = MockReaderBuffer.new( buffer.content )
222
-
223
- result = nil
224
- assert_nothing_raised do
225
- result = @kex.parse_kex_reply( dh, buffer, MockSession.new )
226
- end
227
-
228
- assert_equal "key blob", result[:key_blob]
229
- assert_equal "key blob", result[:server_key].result
230
- assert_equal "1001", result[:server_dh_pubkey].value
231
- assert_equal 9, result[:shared_secret].to_i
232
- assert_equal "signature", result[:server_sig]
233
-
234
- buffer = Net::SSH::Util::WriterBuffer.new
235
- buffer.write_string "key blob"
236
- buffer.write_string "1001"
237
-
238
- sigbuf = Net::SSH::Util::WriterBuffer.new
239
- sigbuf.write_string "ssh-bogus"
240
- sigbuf.write_string "signature"
241
- buffer.write_string sigbuf
242
-
243
- buffer = MockReaderBuffer.new( buffer.content )
244
- assert_raise( Net::SSH::Exception ) do
245
- @kex.parse_kex_reply( dh, buffer, MockSession.new )
246
- end
247
- end
248
-
249
- def test_verify_signature
250
- dh = MockDH.new
251
- dh.p = MockBN.new( 2 )
252
- dh.g = MockBN.new( 6 )
253
- dh.pub_key = MockBN.new( 10 )
254
-
255
- data = { :client_version_string => "A",
256
- :server_version_string => "B",
257
- :client_algorithm_packet => "C",
258
- :need_bits => 0,
259
- :server_algorithm_packet => "D" }
260
- result = { :key_blob => "E",
261
- :server_dh_pubkey => MockBN.new( 20 ),
262
- :shared_secret => MockBN.new( 30 ),
263
- :server_key => MockServerKey.new( true ) }
264
-
265
- session_id = nil
266
- assert_nothing_raised do
267
- session_id = @kex.verify_signature( dh, data, result )
268
- end
269
-
270
- assert_equal @session_id, session_id
271
-
272
- result[:server_key] = MockServerKey.new( false )
273
- assert_raise( Net::SSH::Exception ) do
274
- @kex.verify_signature( dh, data, result )
275
- end
276
- end
277
-
278
- def test_confirm_newkeys
279
- session = MockSession.new( 21, :worked )
280
-
281
- assert_nothing_raised do
282
- @kex.confirm_newkeys( session )
283
- end
284
-
285
- assert_equal 21.chr, session.sent_buffer.to_s
286
-
287
- session = MockSession.new( 22, :worked )
288
- assert_raise( Net::SSH::Exception ) do
289
- @kex.confirm_newkeys( session )
290
- end
291
- end
292
-
293
- def test_exchange_keys
294
- session = MockSession.new( *@exchange_keys_script )
295
- data = { :need_bytes => 10,
296
- :client_version_string => "A",
297
- :server_version_string => "B",
298
- :client_algorithm_packet => "C",
299
- :server_algorithm_packet => "D" }
300
-
301
- result = nil
302
- assert_nothing_raised do
303
- result = @kex.exchange_keys( session, data )
304
- end
305
-
306
- assert_equal MockDigest, result.hashing_algorithm
307
- assert_equal @exchange_keys_session_id, result.session_id
308
- assert_equal "key blob", result.server_key.result
309
- assert_equal 9, result.shared_secret.to_i
310
- end
311
-
312
- end