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,296 +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/constants'
20
- require 'net/ssh/transport/session'
21
- require 'net/ssh/util/buffer'
22
- require 'test/unit'
23
- require 'ostruct'
24
-
25
- class TC_Session < Test::Unit::TestCase
26
- include Net::SSH::Transport::Constants
27
-
28
- class Logger
29
- attr_reader :msgs
30
- def initialize
31
- @msgs = []
32
- end
33
- def debug?; true; end
34
- def debug(msg)
35
- @msgs << "[D] #{msg}"
36
- end
37
- def info?; true; end
38
- def info(msg)
39
- @msgs << "[I] #{msg}"
40
- end
41
- def warn?; true; end
42
- def warn(msg)
43
- @msgs << "[W] #{msg}"
44
- end
45
- end
46
-
47
- class VersionNegotiator
48
- def negotiate( socket, version ); "A"; end
49
- end
50
-
51
- class AlgorithmNegotiator
52
- def negotiate( session, options )
53
- OpenStruct.new(
54
- :server_packet => "A",
55
- :client_packet => "B",
56
- :kex => "C",
57
- :host_key => "D",
58
- :encryption_c2s => "E",
59
- :encryption_s2c => "E",
60
- :mac_c2s => "F",
61
- :mac_s2c => "F",
62
- :compression_c2s => "G",
63
- :compression_s2c => "G",
64
- :language_c2s => "",
65
- :language_s2c => ""
66
- )
67
- end
68
- end
69
-
70
- class ScriptedSocket
71
- attr_reader :replies
72
- attr_accessor :open_delay
73
-
74
- def initialize( script )
75
- @replies = []
76
- @script = script
77
- @open_delay = 0
78
- end
79
-
80
- def open( host, port )
81
- @replies << "#{host}:#{port}"
82
- sleep @open_delay
83
- self
84
- end
85
-
86
- def write( msg )
87
- @replies << msg
88
- end
89
-
90
- def read
91
- @script.shift
92
- end
93
- end
94
-
95
- class PacketHandler
96
- attr_writer :socket
97
- def on_new_algos( &block )
98
- @on_new_algos = block
99
- end
100
- def set_algorithms( *args )
101
- @on_new_algos.call(*args) if @on_new_algos
102
- end
103
- end
104
-
105
- class PacketSender < PacketHandler
106
- def send( msg )
107
- @socket.write msg
108
- end
109
- end
110
-
111
- class PacketReceiver < PacketHandler
112
- def get
113
- @socket.read
114
- end
115
- end
116
-
117
- class Ciphers
118
- def get( *args )
119
- args.first
120
- end
121
- def get_lengths( name )
122
- [ 24, 8 ]
123
- end
124
- end
125
-
126
- class HMACs
127
- def get( *args )
128
- args.first
129
- end
130
- def get_key_length( name )
131
- 24
132
- end
133
- end
134
-
135
- class Compressor
136
- def initialize( *args )
137
- end
138
- end
139
-
140
- class SSHAble; def to_ssh; ""; end; end
141
-
142
- class Digester
143
- def digest( text )
144
- text
145
- end
146
- end
147
-
148
- class Kex
149
- def exchange_keys( session, info )
150
- {
151
- :shared_secret => SSHAble.new,
152
- :session_id => "",
153
- :server_key => "",
154
- :hashing_algorithm => Digester.new
155
- }
156
- end
157
- end
158
-
159
- def self.method_added( name )
160
- super
161
-
162
- end
163
-
164
- def reader(text)
165
- Net::SSH::Util::ReaderBuffer.new( text )
166
- end
167
-
168
- def setup
169
- @script = []
170
- @logger = Logger.new
171
- @socket = ScriptedSocket.new( @script )
172
- @sender = PacketSender.new
173
- @getter = PacketReceiver.new
174
- end
175
-
176
- def do_setup( host, opts={} )
177
- @session = Net::SSH::Transport::Session.new( host, opts ) do |s|
178
- s.logger = @logger
179
- s.default_port = 22
180
- s.version_negotiator = VersionNegotiator.new
181
- s.algorithm_negotiator = AlgorithmNegotiator.new
182
- s.socket_factory = @socket
183
- s.packet_sender = @sender
184
- s.packet_receiver = @getter
185
- s.ciphers = Ciphers.new
186
- s.hmacs = HMACs.new
187
- s.kexs = { "C" => Kex.new }
188
- s.compressors = { "G" => Compressor }
189
- s.decompressors = { "G" => Compressor }
190
- end
191
- end
192
-
193
- def test_bad_option
194
- assert_raise( ArgumentError ) do
195
- do_setup( "the-host", :bogus => "thing" )
196
- end
197
- end
198
-
199
- def test_open
200
- @sender.on_new_algos do |a,b,c|
201
- assert_equal "E", a
202
- assert_equal "F", b
203
- assert_instance_of Compressor, c
204
- end
205
-
206
- @getter.on_new_algos do |a,b,c|
207
- assert_equal "E", a
208
- assert_equal "F", b
209
- assert_instance_of Compressor, c
210
- end
211
-
212
- do_setup "the.host.com"
213
-
214
- assert_equal [ "the.host.com:22" ], @socket.replies
215
- end
216
-
217
- def test_send_message
218
- do_setup "the.host.com"
219
- @session.send_message "sending"
220
- assert_equal [ "the.host.com:22", "sending" ], @socket.replies
221
- end
222
-
223
- def test_wait_for_message
224
- @script << reader( "\xFFhello" )
225
- do_setup "the.host.com"
226
- type, buffer = @session.wait_for_message
227
- assert_equal 255, type
228
- assert_equal "hello", buffer.remainder_as_buffer.content
229
- end
230
-
231
- def test_wait_for_disconnect
232
- @script << reader( "#{DISCONNECT.chr}\0\0\0\1\0\0\0\1A\0\0\0\1B" )
233
- do_setup "the.host.com"
234
- assert_raise( Net::SSH::Transport::Disconnect ) do
235
- @session.wait_for_message
236
- end
237
- end
238
-
239
- def test_wait_for_ignore
240
- @script << reader( "#{IGNORE.chr}\0\0\0\1A" )
241
- @script << reader( "\xFFhello" )
242
- do_setup "the.host.com"
243
- type, buffer = @session.wait_for_message
244
-
245
- assert_equal 255, type
246
- assert_equal "hello", buffer.remainder_as_buffer.content
247
-
248
- assert @logger.msgs.include?("[I] received IGNORE message (\"A\")")
249
- end
250
-
251
- def test_wait_for_debug_quiet
252
- @script << reader( "#{DEBUG.chr}\0\0\0\0\1A\0\0\0\1B" )
253
- @script << reader( "\xFFhello" )
254
- do_setup "the.host.com"
255
- type, buffer = @session.wait_for_message
256
-
257
- assert_equal 255, type
258
- assert_equal "hello", buffer.remainder_as_buffer.content
259
-
260
- assert @logger.msgs.include?("[D] A (B)")
261
- end
262
-
263
- def test_wait_for_debug_verbose
264
- @script << reader( "#{DEBUG.chr}\1\0\0\0\1A\0\0\0\1B" )
265
- @script << reader( "\xFFhello" )
266
- do_setup "the.host.com"
267
- type, buffer = @session.wait_for_message
268
-
269
- assert_equal 255, type
270
- assert_equal "hello", buffer.remainder_as_buffer.content
271
-
272
- assert @logger.msgs.include?("[W] A (B)")
273
- end
274
-
275
- def test_wait_for_kexinit
276
- @script << reader( "#{KEXINIT.chr}\1\0\0\0\1A\0\0\0\1B" )
277
- @script << reader( "\xFFhello" )
278
- do_setup "the.host.com"
279
- type, buffer = @session.wait_for_message
280
-
281
- assert_equal 255, type
282
- assert_equal "hello", buffer.remainder_as_buffer.content
283
-
284
- assert @logger.msgs.include?("[I] re-key requested")
285
- end
286
-
287
- def test_timeout_expired
288
- @socket.open_delay = 2
289
- assert_raise(Timeout::Error) { do_setup( "the.host.com", :timeout => 1 ) }
290
- end
291
-
292
- def test_timeout_not_expired
293
- @socket.open_delay = 1
294
- assert_nothing_raised { do_setup( "the.host.com", :timeout => 2 ) }
295
- end
296
- end
@@ -1,86 +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/version-negotiator'
20
- require 'test/unit'
21
-
22
- class TC_VersionNegotiator < Test::Unit::TestCase
23
-
24
- class MockLogger; def debug?; false; end; end
25
-
26
- class ScriptedSocket
27
- attr_reader :lines
28
-
29
- def initialize( *script )
30
- @lines = []
31
- @script = script
32
- end
33
-
34
- def readline
35
- @script.shift
36
- end
37
-
38
- def print( msg )
39
- @lines << msg
40
- end
41
- end
42
-
43
- def setup
44
- logger = MockLogger.new
45
- @negotiator = Net::SSH::Transport::VersionNegotiator.new( logger )
46
- end
47
-
48
- def test_negotiate_bad_version
49
- socket = ScriptedSocket.new( "SSH-1.5-Bogus/Thing\n" )
50
- assert_raise( Net::SSH::Exception ) do
51
- @negotiator.negotiate( socket, "SSH-2.0-My/Version" )
52
- end
53
- end
54
-
55
- def test_negotiate_compat_version
56
- socket = ScriptedSocket.new( "SSH-1.99-Bogus/Thing\n" )
57
- version = nil
58
- assert_nothing_raised do
59
- version = @negotiator.negotiate( socket, "SSH-2.0-My/Version" )
60
- end
61
- assert_equal "SSH-1.99-Bogus/Thing", version
62
- assert_equal [ "SSH-2.0-My/Version\r\n" ], socket.lines
63
- end
64
-
65
- def test_negotiate_good_version
66
- socket = ScriptedSocket.new( "SSH-2.0-Bogus/Thing\n" )
67
- version = nil
68
- assert_nothing_raised do
69
- version = @negotiator.negotiate( socket, "SSH-2.0-My/Version" )
70
- end
71
- assert_equal "SSH-2.0-Bogus/Thing", version
72
- assert_equal [ "SSH-2.0-My/Version\r\n" ], socket.lines
73
- end
74
-
75
- def test_header_lines
76
- socket = ScriptedSocket.new( "First Line", "Second Line", "SSH-2.0-Bogus/Thing\n" )
77
- version = nil
78
- assert_nothing_raised do
79
- version = @negotiator.negotiate( socket, "SSH-2.0-My/Version" )
80
- end
81
- assert_equal "SSH-2.0-Bogus/Thing", version
82
- assert_equal [ "SSH-2.0-My/Version\r\n" ], socket.lines
83
- assert_equal [ "First Line", "Second Line" ], @negotiator.header_lines
84
- end
85
-
86
- end
@@ -1,136 +0,0 @@
1
- #--
2
- # =============================================================================
3
- # Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
4
- # All rights reserved.
5
- #
6
- # This source file is distributed as part of the Net::SSH Secure Shell Client
7
- # library for Ruby. This file (and the library as a whole) may be used only as
8
- # allowed by either the BSD license, or the Ruby license (or, by association
9
- # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
10
- # distribution for the texts of these licenses.
11
- # -----------------------------------------------------------------------------
12
- # net-ssh website : http://net-ssh.rubyforge.org
13
- # project website: http://rubyforge.org/projects/net-ssh
14
- # =============================================================================
15
- #++
16
-
17
- $:.unshift "#{File.dirname(__FILE__)}/../../../lib"
18
-
19
- require 'net/ssh/userauth/methods/hostbased'
20
- require 'net/ssh/util/buffer'
21
- require 'test/unit'
22
- require 'ostruct'
23
-
24
- class TC_Methods_HostBased < Test::Unit::TestCase
25
-
26
- class Buffers
27
- def writer
28
- Net::SSH::Util::WriterBuffer.new
29
- end
30
- end
31
-
32
- class Key < OpenStruct
33
- def initialize( e, n )
34
- super( :ssh_type => "ssh-rsa",
35
- :e => OpenStruct.new( :to_ssh => [ e ].pack("N") ),
36
- :n => OpenStruct.new( :to_ssh => [ n ].pack("N") ) )
37
- end
38
- end
39
-
40
- class Messenger
41
- attr_reader :data
42
- attr_reader :messages
43
-
44
- def initialize
45
- @data = []
46
- @messages = []
47
- end
48
-
49
- def send_message( msg )
50
- @messages << msg.to_s
51
- end
52
-
53
- def wait_for_message
54
- @data.shift
55
- end
56
- end
57
-
58
- class KeyManager
59
- attr_reader :host_identities
60
- attr_reader :state
61
- attr_reader :sigdata
62
-
63
- def initialize( *identities )
64
- @host_identities = identities.flatten
65
- @state = :open
66
- end
67
-
68
- def sign( identity, data )
69
- @sigdata = [ identity, data.to_s ]
70
- "<signature>"
71
- end
72
-
73
- def finish
74
- @state = :finished
75
- end
76
- end
77
-
78
- def setup
79
- ENV["USER"] = "test_client_user"
80
- buffers = Buffers.new
81
- @messenger = Messenger.new
82
- @method = Net::SSH::UserAuth::Methods::HostBased.new( buffers )
83
- @method.messenger = @messenger
84
- @method.session_id = "test"
85
- @method.hostname = "test.host"
86
- end
87
-
88
- def test_authenticate_no_key_manager
89
- assert !@method.authenticate( "test", "test_user" )
90
- assert @messenger.messages.empty?
91
- end
92
-
93
- def test_authenticate_no_identities
94
- manager = KeyManager.new
95
- assert !@method.authenticate( "test", "test_user", :key_manager => manager )
96
- assert_equal :finished, manager.state
97
- end
98
-
99
- def test_authenticate_success
100
- manager = KeyManager.new( Key.new( 0x01010101, 0x02020202 ) )
101
- @messenger.data.concat [ OpenStruct.new( :message_type => 52 ) ]
102
- assert @method.authenticate( "test", "test_user", :key_manager => manager )
103
- assert_equal :finished, manager.state
104
- assert_equal 1, @messenger.messages.length
105
-
106
- sig = "#{50.chr}\0\0\0\11test_user\0\0\0\4test\0\0\0\11hostbased\0\0\0\7ssh-rsa" +
107
- "\0\0\0\23\0\0\0\7ssh-rsa\1\1\1\1\2\2\2\2" +
108
- "\0\0\0\12test.host.\0\0\0\20test_client_user"
109
- packet1 = sig + "\0\0\0\13<signature>"
110
- assert_equal packet1, @messenger.messages[0]
111
-
112
- sigdata = manager.sigdata
113
- assert_equal "\0\0\0\4test" + sig, sigdata[1]
114
- end
115
-
116
- def test_authenticate_fail
117
- manager = KeyManager.new( Key.new( 0x01010101, 0x02020202 ),
118
- Key.new( 0x03030303, 0x04040404 ) )
119
- @messenger.data.concat [ OpenStruct.new( :message_type => 51 ),
120
- OpenStruct.new( :message_type => 51 ) ]
121
- assert !@method.authenticate( "test", "test_user", :key_manager => manager )
122
- assert_equal :finished, manager.state
123
- assert_equal 2, @messenger.messages.length
124
- end
125
-
126
- def test_authenticate_acceptible_identities_error
127
- manager = KeyManager.new( Key.new( 0x01010101, 0x02020202 ) )
128
- @messenger.data.concat [ OpenStruct.new( :message_type => 60 ),
129
- OpenStruct.new( :message_type => 0 ) ]
130
- assert_raise( Net::SSH::Exception ) do
131
- @method.authenticate( "test", "test_user", :key_manager => manager )
132
- end
133
- assert_equal 1, @messenger.messages.length
134
- end
135
-
136
- end