net-sftp 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/doc/faq/faq.html CHANGED
@@ -60,56 +60,56 @@
60
60
  <h1>Net::SFTP FAQ</h1>
61
61
  <div class="faq-list">
62
62
  <ul>
63
- <li><a href='#2203312'>What is Net::SFTP?</a></li>
63
+ <li><a href='#2224878'>What is Net::SFTP?</a></li>
64
64
  <li>How do I&#8230;
65
65
  <ul>
66
66
  <li>...connect to an <span class="caps">SFTP</span> server?
67
67
  <ul>
68
- <li><a href='#2203252'>I&#8217;d like to connect without first getting a Net::SSH connection&#8230;</a></li>
69
- <li><a href='#2203212'>I already have an open Net::SSH connection&#8230;</a></li>
68
+ <li><a href='#2224778'>I&#8217;d like to connect without first getting a Net::SSH connection&#8230;</a></li>
69
+ <li><a href='#2224728'>I already have an open Net::SSH connection&#8230;</a></li>
70
70
  </ul>
71
71
  </li>
72
72
  <li>...upload data?
73
73
  <ul>
74
- <li><a href='#2203132'>I want to upload an entire file on disk&#8230;</a></li>
75
- <li><a href='#2203092'>I want to upload bytes from a string or other object&#8230;</a></li>
74
+ <li><a href='#2224628'>I want to upload an entire file on disk&#8230;</a></li>
75
+ <li><a href='#2224588'>I want to upload bytes from a string or other object&#8230;</a></li>
76
76
  </ul>
77
77
  </li>
78
78
  <li>...download data?
79
79
  <ul>
80
- <li><a href='#2203012'>I want to download directly to a local file&#8230;</a></li>
81
- <li><a href='#2202972'>I want to download to a string in memory&#8230;</a></li>
82
- <li><a href='#2202932'>I want to be notified of the progress of the download&#8230;</a></li>
80
+ <li><a href='#2224508'>I want to download directly to a local file&#8230;</a></li>
81
+ <li><a href='#2224458'>I want to download to a string in memory&#8230;</a></li>
82
+ <li><a href='#292410'>I want to be notified of the progress of the download&#8230;</a></li>
83
83
  </ul>
84
84
  </li>
85
85
  <li>...manage file permissions?
86
86
  <ul>
87
- <li><a href='#2202862'>I want to query a file&#8217;s permissions&#8230;</a></li>
88
- <li><a href='#2202822'>I want to change a file&#8217;s permissions&#8230;</a></li>
89
- <li><a href='#2202782'>I already have an open handle for the remove file&#8230;</a></li>
87
+ <li><a href='#292290'>I want to query a file&#8217;s permissions&#8230;</a></li>
88
+ <li><a href='#292210'>I want to change a file&#8217;s permissions&#8230;</a></li>
89
+ <li><a href='#292130'>I already have an open handle for the remote file&#8230;</a></li>
90
90
  </ul>
91
91
  </li>
92
92
  <li>...manage directories?
93
93
  <ul>
94
- <li><a href='#2202692'>I want to query the contents of a directory&#8230;</a></li>
95
- <li><a href='#2202652'>I want to create a directory&#8230;</a></li>
96
- <li><a href='#2202612'>I want to remove a directory&#8230;</a></li>
94
+ <li><a href='#291970'>I want to query the contents of a directory&#8230;</a></li>
95
+ <li><a href='#291870'>I want to create a directory&#8230;</a></li>
96
+ <li><a href='#291750'>I want to remove a directory&#8230;</a></li>
97
97
  </ul>
98
98
  </li>
99
- <li><a href='#2202542'>...delete a file?</a></li>
100
- <li><a href='#2202502'>...rename a file?</a></li>
99
+ <li><a href='#291670'>...delete a file?</a></li>
100
+ <li><a href='#291630'>...rename a file?</a></li>
101
101
  </ul>
102
102
  </li>
103
103
  </ul>
104
104
  </div>
105
- <a name='2203312'></a>
105
+ <a name='2224878'></a>
106
106
  <div class='faq-title'>What is Net::SFTP?</div>
107
107
  <div class='faq-answer'><p>Net::SFTP is a pure-Ruby implementation of the <span class="caps">SFTP</span> protocol. That&#8217;s
108
108
  &#8220;SFTP&#8221; as in &#8220;Secure File Transfer Protocol&#8221;, as defined as an adjuct to the
109
109
  <span class="caps">SSH</span> specification. <em>Not</em> &#8220;SFTP&#8221; as in &#8220;Secure <span class="caps">FTP</span>&#8221; (a <em>completely</em> different
110
110
  beast). Nor is it an implementation of the &#8220;Simple File Transfer Protocol&#8221;
111
111
  (which is in no way secure).</p></div>
112
- <a name='2203252'></a>
112
+ <a name='2224778'></a>
113
113
  <div class='faq-title'>How do I&#8230; ...connect to an <span class="caps">SFTP</span> server? I&#8217;d like to connect without first getting a Net::SSH connection&#8230;</div>
114
114
  <div class='faq-answer'><p>Something like this:</p>
115
115
 
@@ -124,7 +124,7 @@ beast). Nor is it an implementation of the &#8220;Simple File Transfer Protocol&
124
124
 
125
125
  <p><code>Net::SFTP.start</code> accepts the same parameters as <code>Net::SSH.start</code>,
126
126
  so I&#8217;ll direct you to that documentation for all the particulars.</p></div>
127
- <a name='2203212'></a>
127
+ <a name='2224728'></a>
128
128
  <div class='faq-title'>How do I&#8230; ...connect to an <span class="caps">SFTP</span> server? I already have an open Net::SSH connection&#8230;</div>
129
129
  <div class='faq-answer'><p>You can piggy-back an <span class="caps">SFTP</span> connection on an existing Net::SSH
130
130
  connection, which can be useful if you&#8217;ve already got an <span class="caps">SSH</span>
@@ -143,7 +143,7 @@ connection that you&#8217;re using for port forwarding or whatever.</p>
143
143
  ...
144
144
  end
145
145
  </pre></code></div>
146
- <a name='2203132'></a>
146
+ <a name='2224628'></a>
147
147
  <div class='faq-title'>How do I&#8230; ...upload data? I want to upload an entire file on disk&#8230;</div>
148
148
  <div class='faq-answer'><p>Assuming you already have an <span class="caps">SFTP</span> connection:</p>
149
149
 
@@ -151,7 +151,7 @@ connection that you&#8217;re using for port forwarding or whatever.</p>
151
151
  <code><pre>
152
152
  sftp.put_file "/path/to/local.file", "/path/to/remote.file"
153
153
  </pre></code></div>
154
- <a name='2203092'></a>
154
+ <a name='2224588'></a>
155
155
  <div class='faq-title'>How do I&#8230; ...upload data? I want to upload bytes from a string or other object&#8230;</div>
156
156
  <div class='faq-answer'><p>Assuming you already have an <span class="caps">SFTP</span> connection, and your data is stored
157
157
  in a string named <code>data</code>:</p>
@@ -174,7 +174,7 @@ without, but be sure to call <code>close_handle</code> when you&#8217;re done:</
174
174
  puts result.code # the result of the operation
175
175
  sftp.close_handle(handle)
176
176
  </pre></code></div>
177
- <a name='2203012'></a>
177
+ <a name='2224508'></a>
178
178
  <div class='faq-title'>How do I&#8230; ...download data? I want to download directly to a local file&#8230;</div>
179
179
  <div class='faq-answer'><p>Assuming you already have an <span class="caps">SFTP</span> connection:</p>
180
180
 
@@ -182,7 +182,7 @@ without, but be sure to call <code>close_handle</code> when you&#8217;re done:</
182
182
  <code><pre>
183
183
  sftp.get_file "/path/to/remote.file", "/path/to/local.file"
184
184
  </pre></code></div>
185
- <a name='2202972'></a>
185
+ <a name='2224458'></a>
186
186
  <div class='faq-title'>How do I&#8230; ...download data? I want to download to a string in memory&#8230;</div>
187
187
  <div class='faq-answer'><p>Assuming you already have an <span class="caps">SFTP</span> connection:</p>
188
188
 
@@ -193,7 +193,7 @@ without, but be sure to call <code>close_handle</code> when you&#8217;re done:</
193
193
  data = sftp.read(handle)
194
194
  end
195
195
  </pre></code></div>
196
- <a name='2202932'></a>
196
+ <a name='292410'></a>
197
197
  <div class='faq-title'>How do I&#8230; ...download data? I want to be notified of the progress of the download&#8230;</div>
198
198
  <div class='faq-answer'><p>You can specify both a &#8220;chunk size&#8221; and a &#8220;progress callback&#8221;. The
199
199
  callback will be invoked for every &#8220;chunk size&#8221; bytes that are
@@ -212,7 +212,7 @@ received:</p>
212
212
  end
213
213
  end
214
214
  </pre></code></div>
215
- <a name='2202862'></a>
215
+ <a name='292290'></a>
216
216
  <div class='faq-title'>How do I&#8230; ...manage file permissions? I want to query a file&#8217;s permissions&#8230;</div>
217
217
  <div class='faq-answer'><p>File permissions are one of the <code>stat</code> attributes of files and
218
218
  directories:</p>
@@ -221,7 +221,7 @@ directories:</p>
221
221
  <code><pre>
222
222
  p sftp.stat("/path/to/remote.file").permissions
223
223
  </pre></code></div>
224
- <a name='2202822'></a>
224
+ <a name='292210'></a>
225
225
  <div class='faq-title'>How do I&#8230; ...manage file permissions? I want to change a file&#8217;s permissions&#8230;</div>
226
226
  <div class='faq-answer'><p>Just use <code>setstat</code> to change the permissions of an existing file:</p>
227
227
 
@@ -229,8 +229,8 @@ directories:</p>
229
229
  <code><pre>
230
230
  sftp.setstat("/path/to/remote.file", :permissions =&gt; 0644)
231
231
  </pre></code></div>
232
- <a name='2202782'></a>
233
- <div class='faq-title'>How do I&#8230; ...manage file permissions? I already have an open handle for the remove file&#8230;</div>
232
+ <a name='292130'></a>
233
+ <div class='faq-title'>How do I&#8230; ...manage file permissions? I already have an open handle for the remote file&#8230;</div>
234
234
  <div class='faq-answer'><p>If you have a handle for the remote file, you can use <code>fstat</code> and
235
235
  <code>fsetstat</code> to query and set the permissions:</p>
236
236
 
@@ -241,7 +241,7 @@ directories:</p>
241
241
  sftp.fsetstat(handle, :permissions =&gt; permissions | 0444)
242
242
  end
243
243
  </pre></code></div>
244
- <a name='2202692'></a>
244
+ <a name='291970'></a>
245
245
  <div class='faq-title'>How do I&#8230; ...manage directories? I want to query the contents of a directory&#8230;</div>
246
246
  <div class='faq-answer'><p>You query the contents of a directory by calling <code>opendir</code> to obtain
247
247
  a handle to the directory, and then using <code>readdir</code> on the handle to
@@ -259,7 +259,7 @@ you&#8217;re done:</p>
259
259
  end
260
260
  sftp.close_handle(handle)
261
261
  </pre></code></div>
262
- <a name='2202652'></a>
262
+ <a name='291870'></a>
263
263
  <div class='faq-title'>How do I&#8230; ...manage directories? I want to create a directory&#8230;</div>
264
264
  <div class='faq-answer'><p>Use <code>mkdir</code>:</p>
265
265
 
@@ -267,7 +267,7 @@ you&#8217;re done:</p>
267
267
  <code><pre>
268
268
  sftp.mkdir("/path/to/remote/dir", :permissions =&gt; 0500)
269
269
  </pre></code></div>
270
- <a name='2202612'></a>
270
+ <a name='291750'></a>
271
271
  <div class='faq-title'>How do I&#8230; ...manage directories? I want to remove a directory&#8230;</div>
272
272
  <div class='faq-answer'><p>Use <code>rmdir</code>:</p>
273
273
 
@@ -275,7 +275,7 @@ you&#8217;re done:</p>
275
275
  <code><pre>
276
276
  sftp.rmdir("/path/to/remote/dir")
277
277
  </pre></code></div>
278
- <a name='2202542'></a>
278
+ <a name='291670'></a>
279
279
  <div class='faq-title'>How do I&#8230; ...delete a file?</div>
280
280
  <div class='faq-answer'><p>Use <code>remove</code>:</p>
281
281
 
@@ -283,7 +283,7 @@ you&#8217;re done:</p>
283
283
  <code><pre>
284
284
  sftp.remove("/path/to/remote.file")
285
285
  </pre></code></div>
286
- <a name='2202502'></a>
286
+ <a name='291630'></a>
287
287
  <div class='faq-title'>How do I&#8230; ...rename a file?</div>
288
288
  <div class='faq-answer'><p>Use <code>rename</code>:</p>
289
289
 
data/doc/faq/faq.yml CHANGED
@@ -121,7 +121,7 @@
121
121
  sftp.setstat("/path/to/remote.file", :permissions => 0644)
122
122
  </pre></code>
123
123
 
124
- - "I already have an open handle for the remove file...": |
124
+ - "I already have an open handle for the remote file...": |
125
125
  If you have a handle for the remote file, you can use @fstat@ and
126
126
  @fsetstat@ to query and set the permissions:
127
127
 
@@ -23,7 +23,7 @@ module Net ; module SFTP ; module Operations
23
23
  class Write < Abstract
24
24
 
25
25
  # The maximum size of data that will be written at one time.
26
- CHUNK_SIZE = 64 * 1024
26
+ CHUNK_SIZE = 32 * 1024
27
27
 
28
28
  # Perform the operation. Only CHUNK_SIZE portions of the +data+ parameter
29
29
  # will be written at a time, with subsequent chunks being writteni
@@ -21,70 +21,7 @@ module Net ; module SFTP ; module Protocol ; module V_04
21
21
  # The implementation of the operations available to version 4 of the SFTP
22
22
  # protocol.
23
23
  class Impl < V_03::Impl
24
-
25
- F_CREATE_NEW = 0x00000000
26
- F_CREATE_TRUNCATE = 0x00000001
27
- F_OPEN_EXISTING = 0x00000002
28
- F_OPEN_OR_CREATE = 0x00000003
29
- F_TRUNCATE_EXISTING = 0x00000004
30
-
31
- F_APPEND_DATA = 0x00000008
32
- F_APPEND_DATA_ATOMIC = 0x00000010
33
- F_TEXT_MODE = 0x00000020
34
- F_READ_LOCK = 0x00000040
35
- F_WRITE_LOCK = 0x00000080
36
- F_DELETE_LOCK = 0x00000100
37
-
38
- module ACE
39
- F_READ_DATA = 0x00000001
40
- F_LIST_DIRECTORY = 0x00000001
41
- F_WRITE_DATA = 0x00000002
42
- F_ADD_FILE = 0x00000002
43
- F_APPEND_DATA = 0x00000004
44
- F_ADD_SUBDIRECTORY = 0x00000004
45
- F_READ_NAMED_ATTRS = 0x00000008
46
- F_WRITE_NAMED_ATTRS = 0x00000010
47
- F_EXECUTE = 0x00000020
48
- F_DELETE_CHILD = 0x00000040
49
- F_READ_ATTRIBUTES = 0x00000080
50
- F_WRITE_ATTRIBUTES = 0x00000100
51
- F_DELETE = 0x00010000
52
- F_READ_ACL = 0x00020000
53
- F_WRITE_ACL = 0x00040000
54
- F_WRITE_OWNER = 0x00080000
55
- F_SYNCHRONIZE = 0x00100000
56
- end
57
-
58
- # The open operation changed in version 4. This method keeps the same
59
- # interface as previous versions, but changes how the parameters are
60
- # interpreted and converted into a packet.
61
- def open( id, path, flags, mode=0660 )
62
- sftp_flags, desired_access = case
63
- when flags & IO::WRONLY != 0 then
64
- [ F_CREATE_TRUNCATE,
65
- ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES ]
66
- when flags & IO::RDWR != 0 then
67
- [ F_OPEN_OR_CREATE,
68
- ACE::F_READ_DATA | ACE::F_READ_ATTRIBUTES |
69
- ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES ]
70
- when flags & IO::APPEND != 0 then
71
- [ F_OPEN_OR_CREATE | F_APPEND_DATA,
72
- ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES |
73
- ACE::F_APPEND_DATA ]
74
- else
75
- [ F_OPEN_EXISTING,
76
- ACE::F_READ_DATA | ACE::F_READ_ATTRIBUTES ]
77
- end
78
-
79
- sftp_flags |= F_OPEN_OR_CREATE if flags & IO::CREAT != 0
80
- sftp_flags |= F_TRUNCATE_EXISTING if flags & IO::TRUNC != 0
81
-
82
- attributes = @attr_factory.empty
83
- attributes.permissions = mode
84
-
85
- open_raw id, path, desired_access, sftp_flags, attributes
86
- end
87
-
24
+
88
25
  # In version 4, stat accepts a flags parameter. If flags is +nil+, it
89
26
  # will default to returning all attributes. Otherwise, the flags parameter
90
27
  # should be a bitwise combination of the F_xxx constants of
@@ -129,6 +66,21 @@ module Net ; module SFTP ; module Protocol ; module V_04
129
66
  end
130
67
  private :convert_flags
131
68
 
69
+ # Used internally to handle +name+ packets. The +on_name+ callback is
70
+ # invoked, if registered, with the driver, id, and array of items. The v4
71
+ # version of this method sets the 'longname' member of the Name object to
72
+ # +nil+ (it is not used in this version).
73
+ def do_name( channel, content )
74
+ return unless has_on_name?
75
+ id = content.read_long
76
+ items = []
77
+ content.read_long.times do
78
+ items.push( Name.new( content.read_string, nil,
79
+ @attr_factory.from_buffer( content ) ) )
80
+ end
81
+ call_on_name( driver, id, items )
82
+ end
83
+
132
84
  end
133
85
 
134
86
  end ; end ; end ; end
@@ -21,18 +21,12 @@ module Net ; module SFTP ; module Protocol ; module V_04
21
21
  # Version 4 of the SFTP protocol changed the number of parameters to several
22
22
  # different packet types:
23
23
  #
24
- # * open( id, path, access, flags, attrs )
25
24
  # * rename( id, old, new, flags )
26
25
  # * stat( id, path, flags )
27
26
  # * lstat( id, path, flags )
28
27
  # * fstat( id, handle, flags )
29
28
  class PacketAssistant < V_03::PacketAssistant
30
29
 
31
- packet :open, :string, # path
32
- :long, # access
33
- :long, # flags
34
- :attrs # file attributes
35
-
36
30
  packet :rename, :string, # old name
37
31
  :string, # new name
38
32
  :long # flags
@@ -0,0 +1,90 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
4
+ # All rights reserved.
5
+ #
6
+ # This source file is distributed as part of the Net::SFTP Secure FTP 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::SFTP
10
+ # distribution for the texts of these licenses.
11
+ # -----------------------------------------------------------------------------
12
+ # net-sftp website: http://net-ssh.rubyforge.org/sftp
13
+ # project website : http://rubyforge.org/projects/net-ssh
14
+ # =============================================================================
15
+ #++
16
+
17
+ require 'net/sftp/protocol/04/impl'
18
+
19
+ module Net ; module SFTP ; module Protocol ; module V_05
20
+
21
+ # The implementation of the operations available to version 5 of the SFTP
22
+ # protocol.
23
+ class Impl < V_04::Impl
24
+
25
+ F_CREATE_NEW = 0x00000000
26
+ F_CREATE_TRUNCATE = 0x00000001
27
+ F_OPEN_EXISTING = 0x00000002
28
+ F_OPEN_OR_CREATE = 0x00000003
29
+ F_TRUNCATE_EXISTING = 0x00000004
30
+
31
+ F_APPEND_DATA = 0x00000008
32
+ F_APPEND_DATA_ATOMIC = 0x00000010
33
+ F_TEXT_MODE = 0x00000020
34
+ F_READ_LOCK = 0x00000040
35
+ F_WRITE_LOCK = 0x00000080
36
+ F_DELETE_LOCK = 0x00000100
37
+
38
+ module ACE
39
+ F_READ_DATA = 0x00000001
40
+ F_LIST_DIRECTORY = 0x00000001
41
+ F_WRITE_DATA = 0x00000002
42
+ F_ADD_FILE = 0x00000002
43
+ F_APPEND_DATA = 0x00000004
44
+ F_ADD_SUBDIRECTORY = 0x00000004
45
+ F_READ_NAMED_ATTRS = 0x00000008
46
+ F_WRITE_NAMED_ATTRS = 0x00000010
47
+ F_EXECUTE = 0x00000020
48
+ F_DELETE_CHILD = 0x00000040
49
+ F_READ_ATTRIBUTES = 0x00000080
50
+ F_WRITE_ATTRIBUTES = 0x00000100
51
+ F_DELETE = 0x00010000
52
+ F_READ_ACL = 0x00020000
53
+ F_WRITE_ACL = 0x00040000
54
+ F_WRITE_OWNER = 0x00080000
55
+ F_SYNCHRONIZE = 0x00100000
56
+ end
57
+
58
+ # The open operation changed in version 4. This method keeps the same
59
+ # interface as previous versions, but changes how the parameters are
60
+ # interpreted and converted into a packet.
61
+ def open( id, path, flags, mode=0660 )
62
+ sftp_flags, desired_access = case
63
+ when flags & IO::WRONLY != 0 then
64
+ [ F_CREATE_TRUNCATE,
65
+ ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES ]
66
+ when flags & IO::RDWR != 0 then
67
+ [ F_OPEN_OR_CREATE,
68
+ ACE::F_READ_DATA | ACE::F_READ_ATTRIBUTES |
69
+ ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES ]
70
+ when flags & IO::APPEND != 0 then
71
+ [ F_OPEN_OR_CREATE | F_APPEND_DATA,
72
+ ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES |
73
+ ACE::F_APPEND_DATA ]
74
+ else
75
+ [ F_OPEN_EXISTING,
76
+ ACE::F_READ_DATA | ACE::F_READ_ATTRIBUTES ]
77
+ end
78
+
79
+ sftp_flags |= F_OPEN_OR_CREATE if flags & IO::CREAT != 0
80
+ sftp_flags |= F_TRUNCATE_EXISTING if flags & IO::TRUNC != 0
81
+
82
+ attributes = @attr_factory.empty
83
+ attributes.permissions = mode
84
+
85
+ open_raw id, path, desired_access, sftp_flags, attributes
86
+ end
87
+
88
+ end
89
+
90
+ end ; end ; end ; end
@@ -0,0 +1,34 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
4
+ # All rights reserved.
5
+ #
6
+ # This source file is distributed as part of the Net::SFTP Secure FTP 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::SFTP
10
+ # distribution for the texts of these licenses.
11
+ # -----------------------------------------------------------------------------
12
+ # net-sftp website: http://net-ssh.rubyforge.org/sftp
13
+ # project website : http://rubyforge.org/projects/net-ssh
14
+ # =============================================================================
15
+ #++
16
+
17
+ require 'net/sftp/protocol/04/packet-assistant'
18
+
19
+ module Net ; module SFTP ; module Protocol ; module V_05
20
+
21
+ # Version 5 of the SFTP protocol changed the number of parameters to several
22
+ # different packet types:
23
+ #
24
+ # * open( id, path, access, flags, attrs )
25
+ class PacketAssistant < V_04::PacketAssistant
26
+
27
+ packet :open, :string, # path
28
+ :long, # access
29
+ :long, # flags
30
+ :attrs # file attributes
31
+
32
+ end
33
+
34
+ end ; end ; end ; end
@@ -20,8 +20,8 @@ module Net ; module SFTP ; module Protocol ; module V_05
20
20
  container.namespace_define :v_05 do |ns|
21
21
 
22
22
  ns.packet_assistant do |c,|
23
- require 'net/sftp/protocol/04/packet-assistant'
24
- V_04::PacketAssistant.new( c[:transport][:buffers],
23
+ require 'net/sftp/protocol/05/packet-assistant'
24
+ PacketAssistant.new( c[:transport][:buffers],
25
25
  c[:driver] )
26
26
  end
27
27
 
@@ -31,8 +31,8 @@ module Net ; module SFTP ; module Protocol ; module V_05
31
31
  end
32
32
 
33
33
  ns.impl do |c,|
34
- require 'net/sftp/protocol/04/impl'
35
- V_04::Impl.new( c[:transport][:buffers],
34
+ require 'net/sftp/protocol/05/impl'
35
+ Impl.new( c[:transport][:buffers],
36
36
  c[:driver], c[:packet_assistant],
37
37
  c[:attr_factory] )
38
38
  end
@@ -18,7 +18,7 @@ module Net ; module SFTP ; module Version
18
18
 
19
19
  MAJOR = 1
20
20
  MINOR = 0
21
- TINY = 0
21
+ TINY = 1
22
22
 
23
23
  STRING = [MAJOR,MINOR,TINY].join('.')
24
24
 
@@ -26,38 +26,6 @@ class TC_04_Impl < TC_03_Impl
26
26
  Net::SFTP::Protocol::V_04::Impl
27
27
  end
28
28
 
29
- unless defined?( IO_FLAGS_V4 )
30
- IO_FLAGS_V4 = [ IO::RDONLY, IO::WRONLY, IO::RDWR, IO::APPEND ]
31
- OTHER_FLAGS_V4 = [ 0, IO::CREAT, IO::TRUNC, IO::EXCL ]
32
- FLAG_MAP_V4 = { IO::RDONLY => 2, IO::WRONLY => 1, IO::RDWR => 3,
33
- IO::APPEND => 11, IO::CREAT => 3, IO::TRUNC => 4 }
34
- ACCESS_MAP_V4 = { IO::RDONLY => 0x81, IO::WRONLY => 0x102,
35
- IO::RDWR => 0x183, IO::APPEND => 0x106 }
36
-
37
- IO_FLAGS_V4.each do |flag|
38
- OTHER_FLAGS_V4.each do |oflag|
39
- [ nil, 0400 ].each do |mode|
40
- define_method( "test_open_#{flag}_#{oflag}_#{mode||"nil"}" ) do
41
- return if oflag == IO::EXCL
42
- @assistant.mock_handle( :open ) { |*a| [ a[0], a[1..-1] ] }
43
- args = [ 14, "a path", flag | oflag ]
44
- args << mode if mode
45
- assert_equal 14, @impl.open( *args )
46
- assert_equal 1, @assistant.mock_count( :open )
47
- assert_equal( ( mode || 0660 ), @permissions )
48
- sftp_flag = FLAG_MAP_V4[flag] |
49
- ( oflag == 0 ? 0 : FLAG_MAP_V4[oflag] )
50
- access_flag = ACCESS_MAP_V4[flag]
51
- assert_equal Net::SFTP::Protocol::Constants::FXP_OPEN,
52
- @sent_data.first[0]
53
- assert_equal [ "a path", access_flag, sftp_flag ],
54
- @sent_data.first[1][0,3]
55
- end
56
- end
57
- end
58
- end
59
- end
60
-
61
29
  def test_stat_flags
62
30
  @assistant.mock_handle( :stat ) { |*a| [ a[0], a[1..-1] ] }
63
31
  id = @impl.stat( 14, :a, :b )
@@ -99,4 +67,25 @@ class TC_04_Impl < TC_03_Impl
99
67
  @sent_data
100
68
  end
101
69
 
70
+ # overrides the v1 implementation of the test
71
+ def test_do_name_with_callback
72
+ buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\2" +
73
+ "\0\0\0\1a\0\0\0\0" +
74
+ "\0\0\0\1c\0\0\0\0" )
75
+ called = false
76
+ @impl.on_name do |d,i,names|
77
+ called = true
78
+ assert_equal 1, i
79
+ assert_equal 2, names.length
80
+ assert_equal "a", names.first.filename
81
+ assert_nil names.first.longname
82
+ assert_equal 0, names.first.attributes
83
+ assert_equal "c", names.last.filename
84
+ assert_nil names.last.longname
85
+ assert_equal 0, names.last.attributes
86
+ end
87
+ @impl.do_name nil, buffer
88
+ assert called
89
+ end
90
+
102
91
  end
@@ -26,9 +26,6 @@ class TC_04_PacketAssistant < TC_03_PacketAssistant
26
26
  Net::SFTP::Protocol::V_04::PacketAssistant
27
27
  end
28
28
 
29
- packet :open, [ "a path", 1, 2, "attrs" ],
30
- "\0\0\0\6a path\0\0\0\1\0\0\0\2attrs"
31
-
32
29
  packet :rename, [ "old name", "new name", 1 ],
33
30
  "\0\0\0\10old name\0\0\0\10new name\0\0\0\1"
34
31
 
@@ -0,0 +1,61 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
4
+ # All rights reserved.
5
+ #
6
+ # This source file is distributed as part of the Net::SFTP Secure FTP 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::SFTP
10
+ # distribution for the texts of these licenses.
11
+ # -----------------------------------------------------------------------------
12
+ # net-sftp website: http://net-ssh.rubyforge.org/sftp
13
+ # project website : http://rubyforge.org/projects/net-ssh
14
+ # =============================================================================
15
+ #++
16
+
17
+ $:.unshift "../../../lib"
18
+ $:.unshift File.join( File.dirname( __FILE__ ), ".." )
19
+
20
+ require 'net/sftp/protocol/05/impl'
21
+ require '04/tc_impl'
22
+
23
+ class TC_05_Impl < TC_04_Impl
24
+
25
+ def impl_class
26
+ Net::SFTP::Protocol::V_05::Impl
27
+ end
28
+
29
+ unless defined?( IO_FLAGS_V4 )
30
+ IO_FLAGS_V4 = [ IO::RDONLY, IO::WRONLY, IO::RDWR, IO::APPEND ]
31
+ OTHER_FLAGS_V4 = [ 0, IO::CREAT, IO::TRUNC, IO::EXCL ]
32
+ FLAG_MAP_V4 = { IO::RDONLY => 2, IO::WRONLY => 1, IO::RDWR => 3,
33
+ IO::APPEND => 11, IO::CREAT => 3, IO::TRUNC => 4 }
34
+ ACCESS_MAP_V4 = { IO::RDONLY => 0x81, IO::WRONLY => 0x102,
35
+ IO::RDWR => 0x183, IO::APPEND => 0x106 }
36
+
37
+ IO_FLAGS_V4.each do |flag|
38
+ OTHER_FLAGS_V4.each do |oflag|
39
+ [ nil, 0400 ].each do |mode|
40
+ define_method( "test_open_#{flag}_#{oflag}_#{mode||"nil"}" ) do
41
+ return if oflag == IO::EXCL
42
+ @assistant.mock_handle( :open ) { |*a| [ a[0], a[1..-1] ] }
43
+ args = [ 14, "a path", flag | oflag ]
44
+ args << mode if mode
45
+ assert_equal 14, @impl.open( *args )
46
+ assert_equal 1, @assistant.mock_count( :open )
47
+ assert_equal( ( mode || 0660 ), @permissions )
48
+ sftp_flag = FLAG_MAP_V4[flag] |
49
+ ( oflag == 0 ? 0 : FLAG_MAP_V4[oflag] )
50
+ access_flag = ACCESS_MAP_V4[flag]
51
+ assert_equal Net::SFTP::Protocol::Constants::FXP_OPEN,
52
+ @sent_data.first[0]
53
+ assert_equal [ "a path", access_flag, sftp_flag ],
54
+ @sent_data.first[1][0,3]
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,32 @@
1
+ #--
2
+ # =============================================================================
3
+ # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
4
+ # All rights reserved.
5
+ #
6
+ # This source file is distributed as part of the Net::SFTP Secure FTP 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::SFTP
10
+ # distribution for the texts of these licenses.
11
+ # -----------------------------------------------------------------------------
12
+ # net-sftp website: http://net-ssh.rubyforge.org/sftp
13
+ # project website : http://rubyforge.org/projects/net-ssh
14
+ # =============================================================================
15
+ #++
16
+
17
+ $:.unshift "../../../lib"
18
+ $:.unshift File.join( File.dirname( __FILE__ ), ".." )
19
+
20
+ require '04/tc_packet_assistant'
21
+ require 'net/sftp/protocol/05/packet-assistant'
22
+
23
+ class TC_05_PacketAssistant < TC_04_PacketAssistant
24
+
25
+ def packet_assistant_class
26
+ Net::SFTP::Protocol::V_05::PacketAssistant
27
+ end
28
+
29
+ packet :open, [ "a path", 1, 2, "attrs" ],
30
+ "\0\0\0\6a path\0\0\0\1\0\0\0\2attrs"
31
+
32
+ end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.10
2
+ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: net-sftp
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.0.0
7
- date: 2005-06-17
6
+ version: 1.0.1
7
+ date: 2005-12-06 00:00:00 -07:00
8
8
  summary: Net::SFTP is a pure-Ruby implementation of the SFTP client protocol.
9
9
  require_paths:
10
10
  - lib
@@ -24,6 +24,8 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
24
24
  version: 0.0.0
25
25
  version:
26
26
  platform: ruby
27
+ signing_key:
28
+ cert_chain:
27
29
  authors:
28
30
  - Jamis Buck
29
31
  files:
@@ -85,6 +87,8 @@ files:
85
87
  - lib/net/sftp/protocol/04/impl.rb
86
88
  - lib/net/sftp/protocol/04/packet-assistant.rb
87
89
  - lib/net/sftp/protocol/04/services.rb
90
+ - lib/net/sftp/protocol/05/impl.rb
91
+ - lib/net/sftp/protocol/05/packet-assistant.rb
88
92
  - lib/net/sftp/protocol/05/services.rb
89
93
  - lib/uri/open-sftp.rb
90
94
  - lib/uri/sftp.rb
@@ -116,6 +120,7 @@ files:
116
120
  - test/protocol/02
117
121
  - test/protocol/03
118
122
  - test/protocol/04
123
+ - test/protocol/05
119
124
  - test/protocol/tc_driver.rb
120
125
  - test/protocol/01/tc_attributes.rb
121
126
  - test/protocol/01/tc_impl.rb
@@ -127,6 +132,8 @@ files:
127
132
  - test/protocol/04/tc_attributes.rb
128
133
  - test/protocol/04/tc_impl.rb
129
134
  - test/protocol/04/tc_packet_assistant.rb
135
+ - test/protocol/05/tc_impl.rb
136
+ - test/protocol/05/tc_packet_assistant.rb
130
137
  test_files:
131
138
  - test/ALL-TESTS.rb
132
139
  rdoc_options: []
@@ -143,5 +150,5 @@ dependencies:
143
150
  -
144
151
  - ">="
145
152
  - !ruby/object:Gem::Version
146
- version: 0.6.0
153
+ version: 1.0.0
147
154
  version: