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,190 +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/driver'
20
- require 'net/ssh/util/buffer'
21
- require 'test/unit'
22
-
23
- class TC_UserAuth_Driver < Test::Unit::TestCase
24
-
25
- class Log
26
- def debug?
27
- false
28
- end
29
- end
30
-
31
- class Buffers
32
- def writer
33
- Net::SSH::Util::WriterBuffer.new
34
- end
35
- end
36
-
37
- class KeyManager
38
- attr_reader :events
39
-
40
- def initialize
41
- @events = []
42
- end
43
-
44
- def clear!
45
- @events << :clear!
46
- end
47
-
48
- def clear_host!
49
- @events << :clear_host!
50
- end
51
-
52
- def finish
53
- @events << :finish
54
- end
55
-
56
- def add( file )
57
- @events << { :name => :add, :file => file }
58
- end
59
- alias :<< :add
60
-
61
- def add_host_key( file )
62
- @events << { :name => :add_host_key, :file => file }
63
- end
64
- end
65
-
66
- class Session
67
- attr_reader :script
68
- attr_reader :messages
69
-
70
- def initialize
71
- @script = []
72
- @messages = []
73
- end
74
-
75
- def send_message( message )
76
- @messages << message
77
- end
78
-
79
- def wait_for_message
80
- type, data = @script.shift
81
- [ type, Net::SSH::Util::ReaderBuffer.new( data ) ]
82
- end
83
- end
84
-
85
- class AuthMethod
86
- attr_reader :next_service
87
- attr_reader :username
88
- attr_reader :data
89
-
90
- def initialize( good )
91
- @good = good
92
- end
93
-
94
- def authenticate( next_service, username, data={} )
95
- @next_service = next_service
96
- @username = username
97
- @data = data
98
- @good
99
- end
100
- end
101
-
102
- def setup
103
- @methods = { :test_fail => AuthMethod.new( false ),
104
- :test_succeed => AuthMethod.new( true ) }
105
- order = [ "test-fail", "test-succeed" ]
106
- @driver = Net::SSH::UserAuth::Driver.new( Log.new,
107
- Buffers.new, @methods, order )
108
- @driver.session = @session = Session.new
109
- @driver.key_manager = @manager = KeyManager.new
110
- end
111
-
112
- def test_set_key_files
113
- @driver.set_key_files [ :one, :two ]
114
- assert_equal [ :clear!,
115
- { :name => :add, :file => :one },
116
- { :name => :add, :file => :two } ], @manager.events
117
- end
118
-
119
- def test_set_host_key_files
120
- @driver.set_host_key_files [ :one, :two ]
121
- assert_equal [ :clear_host!,
122
- { :name => :add_host_key, :file => :one },
123
- { :name => :add_host_key, :file => :two } ], @manager.events
124
- end
125
-
126
- def test_order
127
- assert_equal [ "test-fail", "test-succeed" ], @driver.order
128
- original = [ "one", "two", "three" ]
129
- @driver.set_auth_method_order( original )
130
- @driver.order << "four"
131
- assert_equal [ "one", "two", "three" ], original
132
- assert_equal [ "one", "two", "three", "four" ], @driver.order
133
- @driver.set_auth_method_order(*original)
134
- assert_equal [ "one", "two", "three" ], @driver.order
135
- end
136
-
137
- def test_on_banner
138
- msg = lang = nil
139
- @driver.on_banner { |m,l| msg, lang = m, l }
140
- @session.script << [ 53, "\0\0\0\15hello, world!\0\0\0\2en" ]
141
- @session.script << [ 51, "\0\0\0\15howdy, earth!\0" ]
142
- result = @driver.wait_for_message
143
-
144
- assert_equal "hello, world!", msg
145
- assert_equal "en", lang
146
- assert_equal 51, result.message_type
147
- end
148
-
149
- def test_send_message
150
- @driver.send_message "konnichi wa"
151
- assert_equal [ "konnichi wa" ], @session.messages
152
- end
153
-
154
- def test_authenticate_bad_reply
155
- @session.script << [ 0, "\0\0\0\0" ]
156
- assert_raise( Net::SSH::Exception ) do
157
- @driver.authenticate( "service", "test_user", "passwd" )
158
- end
159
- end
160
-
161
- def test_authenticate_unexpected_reply
162
- @session.script << [ 60, "\0\0\0\0" ]
163
- assert_raise( Net::SSH::Exception ) do
164
- @driver.authenticate( "service", "test_user", "passwd" )
165
- end
166
- end
167
-
168
- def test_authenticate
169
- @session.script << [ 6, "\0\0\0\14ssh-userauth" ]
170
- assert @driver.authenticate( "service", "test_user", "passwd" )
171
-
172
- @methods.each_value do |method|
173
- assert_equal "service", method.next_service
174
- assert_equal "test_user", method.username
175
- assert_equal( { :password => "passwd", :key_manager => @manager }, method.data )
176
- end
177
-
178
- assert_equal :finish, @manager.events.last
179
- end
180
-
181
- def test_authenticate_not_implemented
182
- @session.script << [ 6, "\0\0\0\14ssh-userauth" ]
183
- @driver.set_auth_method_order "bogus"
184
- assert_raise( NotImplementedError ) do
185
- @driver.authenticate( "service", "test_user", "passwd" )
186
- end
187
- assert_equal :finish, @manager.events.last
188
- end
189
-
190
- end
@@ -1,97 +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/transport/services'
24
- require 'net/ssh/userauth/services'
25
- require 'test/unit'
26
-
27
- class TC_UserAuth_Integration < Test::Unit::TestCase
28
-
29
- HOST = "test.host"
30
- USER = "test"
31
- PASSWORD = "test/unit"
32
- SERVICE = "ssh-connection"
33
-
34
- def setup
35
- @registry = Needle::Registry.new(
36
- :logs => { :device=>STDOUT, :default_level => :WARN }
37
- )
38
-
39
- Net::SSH::Transport.register_services( @registry )
40
- Net::SSH::UserAuth.register_services( @registry )
41
-
42
- @registry.define do |b|
43
- b.crypto_backend { :ossl }
44
- b.transport_host { HOST }
45
- b.host_key_verifier { Net::SSH::NullHostKeyVerifier.new }
46
- end
47
-
48
- @userauth = @registry[:userauth][:driver]
49
- end
50
-
51
- def teardown
52
- @registry[:transport][:session].close
53
- @registry.logs.close
54
- end
55
-
56
- def test_keyboard_interactive
57
- @userauth.set_auth_method_order "keyboard-interactive"
58
-
59
- called = 0
60
- @registry.userauth[:methods].define.keyboard_interactive_callback do |c,p|
61
- proc do |req|
62
- called += 1
63
- if req.prompts.length > 0
64
- [ req.password ]
65
- else
66
- []
67
- end
68
- end
69
- end
70
-
71
- assert @userauth.authenticate( SERVICE, USER, PASSWORD )
72
- assert_equal 2, called
73
- end
74
-
75
- def test_password
76
- @userauth.set_auth_method_order "password"
77
- assert @userauth.authenticate( SERVICE, USER, PASSWORD )
78
- end
79
-
80
- def test_password_bad
81
- @userauth.set_auth_method_order "password"
82
- assert !@userauth.authenticate( SERVICE, USER, PASSWORD + 'K' )
83
- end
84
-
85
- def test_publickey_bad
86
- @userauth.set_auth_method_order "publickey"
87
- assert !@userauth.authenticate( SERVICE, USER )
88
- end
89
-
90
- def test_hostbased_bad
91
- @userauth.set_auth_method_order "hostbased"
92
- assert !@userauth.authenticate( SERVICE, USER )
93
- end
94
-
95
- end
96
-
97
- end
@@ -1,265 +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/userkeys'
20
- require 'net/ssh/util/buffer'
21
- require 'test/unit'
22
- require 'logger'
23
- require 'stringio'
24
-
25
- class TC_UserKeyManager < Test::Unit::TestCase
26
-
27
- class Buffers
28
- def writer
29
- Net::SSH::Util::WriterBuffer.new
30
- end
31
- end
32
-
33
- class Keys
34
- def load_public_key( file )
35
- o = Object.new
36
- singleton = class << o; self; end
37
- singleton.send( :define_method, :ssh_type ) { "test" }
38
- o
39
- end
40
-
41
- def load_private_key( file )
42
- count = 0
43
- o = Object.new
44
- singleton = class << o; self; end
45
- singleton.send( :define_method, :ssh_do_sign ) { |data| count += 1; "<#{data}:#{count}>" }
46
- o
47
- end
48
- end
49
-
50
- class AgentFactory
51
- attr_reader :state
52
-
53
- def initialize
54
- @state = :new
55
- end
56
-
57
- def open
58
- @state = :opened
59
- self
60
- end
61
-
62
- def sign( identity, data )
63
- "from the agent (#{identity.inspect}, #{data.inspect})"
64
- end
65
-
66
- def identities
67
- [ :one, :two, :three ]
68
- end
69
-
70
- def close
71
- @state = :closed
72
- end
73
- end
74
-
75
- class ExistenceTester
76
- def readable?( file )
77
- true
78
- end
79
- end
80
-
81
- def setup
82
- @userkeys = Net::SSH::UserAuth::UserKeyManager.new
83
- @userkeys.agent_factory = @agent_factory = AgentFactory.new
84
- @userkeys.keys = Keys.new
85
- @userkeys.log = @log = Logger.new( StringIO.new )
86
- @userkeys.buffers = Buffers.new
87
- @userkeys.key_existence_tester = ExistenceTester.new
88
- end
89
-
90
- def test_initialize
91
- assert_equal 0, @userkeys.key_files.length
92
- assert_equal 0, @userkeys.host_key_files.length
93
- assert @userkeys.use_agent?
94
- end
95
-
96
- def test_add
97
- assert_equal 0, @userkeys.key_files.length
98
- @userkeys.add "hello"
99
- assert_equal 1, @userkeys.key_files.length
100
- assert_equal "hello", @userkeys.key_files.first
101
- @userkeys.add "world"
102
- assert_equal 2, @userkeys.key_files.length
103
- @userkeys.add "hello"
104
- assert_equal 2, @userkeys.key_files.length
105
- end
106
-
107
- def test_add_host_key
108
- assert_equal 0, @userkeys.host_key_files.length
109
- @userkeys.add_host_key "hello"
110
- assert_equal 1, @userkeys.host_key_files.length
111
- assert_equal "hello", @userkeys.host_key_files.first
112
- @userkeys.add_host_key "world"
113
- assert_equal 2, @userkeys.host_key_files.length
114
- @userkeys.add_host_key "hello"
115
- assert_equal 2, @userkeys.host_key_files.length
116
- end
117
-
118
- def test_clear!
119
- @userkeys.add "hello"
120
- @userkeys.add "howdy"
121
- assert_equal 2, @userkeys.key_files.length
122
- @userkeys.clear!
123
- assert_equal 0, @userkeys.key_files.length
124
- end
125
-
126
- def test_clear_host!
127
- @userkeys.add_host_key "hello"
128
- @userkeys.add_host_key "howdy"
129
- assert_equal 2, @userkeys.host_key_files.length
130
- @userkeys.clear_host!
131
- assert_equal 0, @userkeys.host_key_files.length
132
- end
133
-
134
- def test_clear_and_clear_host!
135
- @userkeys.add "hello"
136
- @userkeys.add "howdy"
137
- @userkeys.add_host_key "hello"
138
- @userkeys.add_host_key "howdy"
139
- assert_equal 2, @userkeys.key_files.length
140
- assert_equal 2, @userkeys.host_key_files.length
141
- @userkeys.clear!
142
- assert_equal 0, @userkeys.key_files.length
143
- assert_equal 2, @userkeys.host_key_files.length
144
- @userkeys.add "hello"
145
- @userkeys.add "howdy"
146
- assert_equal 2, @userkeys.key_files.length
147
- assert_equal 2, @userkeys.host_key_files.length
148
- @userkeys.clear_host!
149
- assert_equal 2, @userkeys.key_files.length
150
- assert_equal 0, @userkeys.host_key_files.length
151
- end
152
-
153
- def test_finish_use_agent_unopened
154
- @userkeys.use_agent = true
155
- assert_equal :new, @agent_factory.state
156
- @userkeys.finish
157
- assert_equal :new, @agent_factory.state
158
- end
159
-
160
- def test_finish_unopened_no_use_agent
161
- @userkeys.use_agent = false
162
- assert_equal :new, @agent_factory.state
163
- @userkeys.finish
164
- assert_equal :new, @agent_factory.state
165
- end
166
-
167
- def test_finish_use_agent_opened
168
- @userkeys.use_agent = true
169
- @userkeys.identities
170
- assert_equal :opened, @agent_factory.state
171
- @userkeys.finish
172
- assert_equal :closed, @agent_factory.state
173
- end
174
-
175
- def test_finish_no_use_agent_opened
176
- @userkeys.use_agent = false
177
- @userkeys.identities
178
- assert_equal :new, @agent_factory.state
179
- @userkeys.finish
180
- assert_equal :new, @agent_factory.state
181
- end
182
-
183
- def test_identities_no_use_agent_no_files
184
- @userkeys.use_agent = false
185
- ids = @userkeys.identities
186
- assert_equal 0, ids.length
187
- end
188
-
189
- def test_identities_use_agent_no_files
190
- @userkeys.use_agent = true
191
- ids = @userkeys.identities
192
- assert_equal 3, ids.length
193
- end
194
-
195
- def test_identities_no_use_agent_files
196
- @userkeys.use_agent = false
197
- @userkeys.add "one"
198
- @userkeys.add "two"
199
- @userkeys.add "three"
200
- ids = @userkeys.identities
201
- assert_equal 3, ids.length
202
- end
203
-
204
- def test_identities_use_agent_files
205
- @userkeys.use_agent = true
206
- @userkeys.add "one"
207
- @userkeys.add "two"
208
- @userkeys.add "three"
209
- ids = @userkeys.identities
210
- assert_equal 6, ids.length
211
- end
212
-
213
- def test_host_identities_no_files
214
- ids = @userkeys.host_identities
215
- assert_equal 0, ids.length
216
- end
217
-
218
- def test_host_identities_files
219
- @userkeys.add_host_key "one"
220
- @userkeys.add_host_key "two"
221
- @userkeys.add_host_key "three"
222
- ids = @userkeys.host_identities
223
- assert_equal 3, ids.length
224
- end
225
-
226
- def test_sign_from_file
227
- @userkeys.use_agent = false
228
- @userkeys.add "one"
229
- ids = @userkeys.identities
230
- assert_equal 1, ids.length
231
- data = @userkeys.sign( ids.first, "hello" )
232
- assert_equal "\0\0\0\4test\0\0\0\11<hello:1>", data
233
- end
234
-
235
- def test_sign_from_agent
236
- @userkeys.use_agent = true
237
- ids = @userkeys.identities
238
- assert_equal 3, ids.length
239
- data = @userkeys.sign( ids.first, "hello" )
240
- assert_equal %q{from the agent (:one, "hello")}, data
241
- end
242
-
243
- def test_sign_from_key
244
- @userkeys.use_agent = false
245
- @userkeys.add "one"
246
- ids = @userkeys.identities
247
- assert_equal 1, ids.length
248
- @userkeys.sign( ids.first, "hello" )
249
- data = @userkeys.sign( ids.first, "hello" )
250
- assert_equal "\0\0\0\4test\0\0\0\11<hello:2>", data
251
- end
252
-
253
- def test_use_agent
254
- assert @userkeys.use_agent?
255
- @userkeys.identities
256
- assert_equal :opened, @agent_factory.state
257
- @userkeys.use_agent = false
258
- assert_equal :closed, @agent_factory.state
259
- @userkeys.use_agent = true
260
- assert_equal :closed, @agent_factory.state
261
- @userkeys.identities
262
- assert_equal :opened, @agent_factory.state
263
- end
264
-
265
- end