net-sftp 1.1.1 → 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.
- data/CHANGELOG.rdoc +23 -0
- data/Manifest +55 -0
- data/README.rdoc +96 -0
- data/Rakefile +30 -0
- data/lib/net/sftp.rb +53 -38
- data/lib/net/sftp/constants.rb +187 -0
- data/lib/net/sftp/errors.rb +34 -20
- data/lib/net/sftp/operations/dir.rb +93 -0
- data/lib/net/sftp/operations/download.rb +364 -0
- data/lib/net/sftp/operations/file.rb +176 -0
- data/lib/net/sftp/operations/file_factory.rb +60 -0
- data/lib/net/sftp/operations/upload.rb +387 -0
- data/lib/net/sftp/packet.rb +21 -0
- data/lib/net/sftp/protocol.rb +32 -0
- data/lib/net/sftp/protocol/01/attributes.rb +265 -96
- data/lib/net/sftp/protocol/01/base.rb +268 -0
- data/lib/net/sftp/protocol/01/name.rb +43 -0
- data/lib/net/sftp/protocol/02/base.rb +31 -0
- data/lib/net/sftp/protocol/03/base.rb +35 -0
- data/lib/net/sftp/protocol/04/attributes.rb +120 -195
- data/lib/net/sftp/protocol/04/base.rb +94 -0
- data/lib/net/sftp/protocol/04/name.rb +67 -0
- data/lib/net/sftp/protocol/05/base.rb +66 -0
- data/lib/net/sftp/protocol/06/attributes.rb +107 -0
- data/lib/net/sftp/protocol/06/base.rb +63 -0
- data/lib/net/sftp/protocol/base.rb +50 -0
- data/lib/net/sftp/request.rb +91 -0
- data/lib/net/sftp/response.rb +76 -0
- data/lib/net/sftp/session.rb +914 -238
- data/lib/net/sftp/version.rb +14 -21
- data/net-sftp.gemspec +60 -0
- data/setup.rb +1331 -0
- data/test/common.rb +173 -0
- data/test/protocol/01/test_attributes.rb +97 -0
- data/test/protocol/01/test_base.rb +210 -0
- data/test/protocol/01/test_name.rb +27 -0
- data/test/protocol/02/test_base.rb +26 -0
- data/test/protocol/03/test_base.rb +27 -0
- data/test/protocol/04/test_attributes.rb +148 -0
- data/test/protocol/04/test_base.rb +74 -0
- data/test/protocol/04/test_name.rb +49 -0
- data/test/protocol/05/test_base.rb +62 -0
- data/test/protocol/06/test_attributes.rb +124 -0
- data/test/protocol/06/test_base.rb +51 -0
- data/test/protocol/test_base.rb +42 -0
- data/test/test_all.rb +3 -0
- data/test/test_dir.rb +47 -0
- data/test/test_download.rb +252 -0
- data/test/test_file.rb +159 -0
- data/test/test_file_factory.rb +48 -0
- data/test/test_packet.rb +9 -0
- data/test/test_protocol.rb +17 -0
- data/test/test_request.rb +71 -0
- data/test/test_response.rb +53 -0
- data/test/test_session.rb +741 -0
- data/test/test_upload.rb +219 -0
- metadata +59 -111
- data/doc/LICENSE-BSD +0 -27
- data/doc/LICENSE-GPL +0 -280
- data/doc/LICENSE-RUBY +0 -56
- data/doc/faq/faq.html +0 -298
- data/doc/faq/faq.rb +0 -154
- data/doc/faq/faq.yml +0 -183
- data/examples/asynchronous.rb +0 -57
- data/examples/get-put.rb +0 -45
- data/examples/sftp-open-uri.rb +0 -30
- data/examples/ssh-service.rb +0 -30
- data/examples/synchronous.rb +0 -131
- data/lib/net/sftp/operations/abstract.rb +0 -108
- data/lib/net/sftp/operations/close.rb +0 -31
- data/lib/net/sftp/operations/errors.rb +0 -76
- data/lib/net/sftp/operations/fsetstat.rb +0 -36
- data/lib/net/sftp/operations/fstat.rb +0 -32
- data/lib/net/sftp/operations/lstat.rb +0 -31
- data/lib/net/sftp/operations/mkdir.rb +0 -33
- data/lib/net/sftp/operations/open.rb +0 -32
- data/lib/net/sftp/operations/opendir.rb +0 -32
- data/lib/net/sftp/operations/read.rb +0 -88
- data/lib/net/sftp/operations/readdir.rb +0 -55
- data/lib/net/sftp/operations/realpath.rb +0 -37
- data/lib/net/sftp/operations/remove.rb +0 -31
- data/lib/net/sftp/operations/rename.rb +0 -32
- data/lib/net/sftp/operations/rmdir.rb +0 -31
- data/lib/net/sftp/operations/services.rb +0 -42
- data/lib/net/sftp/operations/setstat.rb +0 -33
- data/lib/net/sftp/operations/stat.rb +0 -31
- data/lib/net/sftp/operations/write.rb +0 -63
- data/lib/net/sftp/protocol/01/impl.rb +0 -251
- data/lib/net/sftp/protocol/01/packet-assistant.rb +0 -82
- data/lib/net/sftp/protocol/01/services.rb +0 -47
- data/lib/net/sftp/protocol/02/impl.rb +0 -39
- data/lib/net/sftp/protocol/02/packet-assistant.rb +0 -32
- data/lib/net/sftp/protocol/02/services.rb +0 -44
- data/lib/net/sftp/protocol/03/impl.rb +0 -42
- data/lib/net/sftp/protocol/03/packet-assistant.rb +0 -35
- data/lib/net/sftp/protocol/03/services.rb +0 -44
- data/lib/net/sftp/protocol/04/impl.rb +0 -86
- data/lib/net/sftp/protocol/04/packet-assistant.rb +0 -45
- data/lib/net/sftp/protocol/04/services.rb +0 -44
- data/lib/net/sftp/protocol/05/impl.rb +0 -90
- data/lib/net/sftp/protocol/05/packet-assistant.rb +0 -34
- data/lib/net/sftp/protocol/05/services.rb +0 -44
- data/lib/net/sftp/protocol/constants.rb +0 -60
- data/lib/net/sftp/protocol/driver.rb +0 -235
- data/lib/net/sftp/protocol/packet-assistant.rb +0 -84
- data/lib/net/sftp/protocol/services.rb +0 -55
- data/lib/uri/open-sftp.rb +0 -54
- data/lib/uri/sftp.rb +0 -42
- data/test/ALL-TESTS.rb +0 -23
- data/test/operations/tc_abstract.rb +0 -124
- data/test/operations/tc_close.rb +0 -40
- data/test/operations/tc_fsetstat.rb +0 -48
- data/test/operations/tc_fstat.rb +0 -40
- data/test/operations/tc_lstat.rb +0 -40
- data/test/operations/tc_mkdir.rb +0 -48
- data/test/operations/tc_open.rb +0 -42
- data/test/operations/tc_opendir.rb +0 -40
- data/test/operations/tc_read.rb +0 -103
- data/test/operations/tc_readdir.rb +0 -88
- data/test/operations/tc_realpath.rb +0 -54
- data/test/operations/tc_remove.rb +0 -40
- data/test/operations/tc_rmdir.rb +0 -40
- data/test/operations/tc_setstat.rb +0 -48
- data/test/operations/tc_stat.rb +0 -40
- data/test/operations/tc_write.rb +0 -91
- data/test/protocol/01/tc_attributes.rb +0 -138
- data/test/protocol/01/tc_impl.rb +0 -294
- data/test/protocol/01/tc_packet_assistant.rb +0 -81
- data/test/protocol/02/tc_impl.rb +0 -41
- data/test/protocol/02/tc_packet_assistant.rb +0 -31
- data/test/protocol/03/tc_impl.rb +0 -48
- data/test/protocol/03/tc_packet_assistant.rb +0 -34
- data/test/protocol/04/tc_attributes.rb +0 -174
- data/test/protocol/04/tc_impl.rb +0 -91
- data/test/protocol/04/tc_packet_assistant.rb +0 -38
- data/test/protocol/05/tc_impl.rb +0 -61
- data/test/protocol/05/tc_packet_assistant.rb +0 -32
- data/test/protocol/tc_driver.rb +0 -219
data/CHANGELOG.rdoc
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
=== 2.0.0 / 1 May 2008
|
2
|
+
|
3
|
+
* Make Net::SSH::Connection::Session#sftp accept an argument determining whether or not to block while the SFTP subsystem initializes (defaults to true) [Jamis Buck]
|
4
|
+
|
5
|
+
* Allow Session#connect to be useful even in the open/opening states by invoking or queuing the callback block [Jamis Buck]
|
6
|
+
|
7
|
+
* Allow custom properties to be set on upload/download initiation via the :properties option [Jamis Buck]
|
8
|
+
|
9
|
+
* Custom properties on Download instances [Jamis Buck]
|
10
|
+
|
11
|
+
* Add #abort! method to Upload and Download operations [Jamis Buck]
|
12
|
+
|
13
|
+
* More complete support for file-type detection in protocol versions 1-3 [Jamis Buck]
|
14
|
+
|
15
|
+
|
16
|
+
=== 2.0 Preview Release 2 (1.99.1) / 10 Apr 2008
|
17
|
+
|
18
|
+
* Custom properties on Upload instances [Jamis Buck]
|
19
|
+
|
20
|
+
|
21
|
+
=== 2.0 Preview Release 1 (1.99.0) / 22 Mar 2008
|
22
|
+
|
23
|
+
* Rewritten! (Never, ever, do this at home.) New and improved API.
|
data/Manifest
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
CHANGELOG.rdoc
|
2
|
+
lib/net/sftp/constants.rb
|
3
|
+
lib/net/sftp/errors.rb
|
4
|
+
lib/net/sftp/operations/dir.rb
|
5
|
+
lib/net/sftp/operations/download.rb
|
6
|
+
lib/net/sftp/operations/file.rb
|
7
|
+
lib/net/sftp/operations/file_factory.rb
|
8
|
+
lib/net/sftp/operations/upload.rb
|
9
|
+
lib/net/sftp/packet.rb
|
10
|
+
lib/net/sftp/protocol/01/attributes.rb
|
11
|
+
lib/net/sftp/protocol/01/base.rb
|
12
|
+
lib/net/sftp/protocol/01/name.rb
|
13
|
+
lib/net/sftp/protocol/02/base.rb
|
14
|
+
lib/net/sftp/protocol/03/base.rb
|
15
|
+
lib/net/sftp/protocol/04/attributes.rb
|
16
|
+
lib/net/sftp/protocol/04/base.rb
|
17
|
+
lib/net/sftp/protocol/04/name.rb
|
18
|
+
lib/net/sftp/protocol/05/base.rb
|
19
|
+
lib/net/sftp/protocol/06/attributes.rb
|
20
|
+
lib/net/sftp/protocol/06/base.rb
|
21
|
+
lib/net/sftp/protocol/base.rb
|
22
|
+
lib/net/sftp/protocol.rb
|
23
|
+
lib/net/sftp/request.rb
|
24
|
+
lib/net/sftp/response.rb
|
25
|
+
lib/net/sftp/session.rb
|
26
|
+
lib/net/sftp/version.rb
|
27
|
+
lib/net/sftp.rb
|
28
|
+
Rakefile
|
29
|
+
README.rdoc
|
30
|
+
setup.rb
|
31
|
+
test/common.rb
|
32
|
+
test/protocol/01/test_attributes.rb
|
33
|
+
test/protocol/01/test_base.rb
|
34
|
+
test/protocol/01/test_name.rb
|
35
|
+
test/protocol/02/test_base.rb
|
36
|
+
test/protocol/03/test_base.rb
|
37
|
+
test/protocol/04/test_attributes.rb
|
38
|
+
test/protocol/04/test_base.rb
|
39
|
+
test/protocol/04/test_name.rb
|
40
|
+
test/protocol/05/test_base.rb
|
41
|
+
test/protocol/06/test_attributes.rb
|
42
|
+
test/protocol/06/test_base.rb
|
43
|
+
test/protocol/test_base.rb
|
44
|
+
test/test_all.rb
|
45
|
+
test/test_dir.rb
|
46
|
+
test/test_download.rb
|
47
|
+
test/test_file.rb
|
48
|
+
test/test_file_factory.rb
|
49
|
+
test/test_packet.rb
|
50
|
+
test/test_protocol.rb
|
51
|
+
test/test_request.rb
|
52
|
+
test/test_response.rb
|
53
|
+
test/test_session.rb
|
54
|
+
test/test_upload.rb
|
55
|
+
Manifest
|
data/README.rdoc
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
= Net::SFTP
|
2
|
+
|
3
|
+
* http://net-ssh.rubyforge.org/sftp
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
Net::SFTP is a pure-Ruby implementation of the SFTP protocol (specifically, versions 1 through 6 of the SFTP protocol). Note that this is the "Secure File Transfer Protocol", typically run over an SSH connection, and has nothing to do with the FTP protocol.
|
8
|
+
|
9
|
+
== FEATURES/PROBLEMS:
|
10
|
+
|
11
|
+
* Transfer files or even entire directory trees to or from a remote host via SFTP
|
12
|
+
* Completely supports all six protocol versions
|
13
|
+
* Asynchronous and synchronous operation
|
14
|
+
* Read and write files using an IO-like interface
|
15
|
+
|
16
|
+
== SYNOPSIS:
|
17
|
+
|
18
|
+
In a nutshell:
|
19
|
+
|
20
|
+
require 'net/sftp'
|
21
|
+
|
22
|
+
Net::SFTP.start('host', 'username', :password => 'password') do |sftp|
|
23
|
+
# upload a file or directory to the remote host
|
24
|
+
sftp.upload!("/path/to/local", "/path/to/remote")
|
25
|
+
|
26
|
+
# download a file or directory from the remote host
|
27
|
+
sftp.download!("/path/to/remote", "/path/to/local")
|
28
|
+
|
29
|
+
# grab data off the remote host directly to a buffer
|
30
|
+
data = sftp.download!("/path/to/remote")
|
31
|
+
|
32
|
+
# open and write to a pseudo-IO for a remote file
|
33
|
+
sftp.file.open("/path/to/remote", "w") do |f|
|
34
|
+
f.puts "Hello, world!\n"
|
35
|
+
end
|
36
|
+
|
37
|
+
# open and read from a pseudo-IO for a remote file
|
38
|
+
sftp.file.open("/path/to/remote", "r") do |f|
|
39
|
+
puts f.gets
|
40
|
+
end
|
41
|
+
|
42
|
+
# create a directory
|
43
|
+
sftp.mkdir! "/path/to/directory"
|
44
|
+
|
45
|
+
# list the entries in a directory
|
46
|
+
sftp.dir.foreach("/path/to/directory") do |entry|
|
47
|
+
puts entry.longname
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
For the full documentation, start with Net::SFTP::Session. Also see Net::SFTP::Operations::Upload, Net::SFTP::Operations::Download, Net::SFTP::Operations::FileFactory, Net::SFTP::Operations::File, and Net::SFTP::Operations::Dir.
|
52
|
+
|
53
|
+
== REQUIREMENTS:
|
54
|
+
|
55
|
+
* Net::SSH 2
|
56
|
+
|
57
|
+
If you wish to run the tests, you'll need:
|
58
|
+
|
59
|
+
* Echoe (if you want to use the Rakefile)
|
60
|
+
* Mocha
|
61
|
+
|
62
|
+
== INSTALL:
|
63
|
+
|
64
|
+
* gem install net-sftp (might need sudo privileges)
|
65
|
+
|
66
|
+
Or, if you prefer to do it the hard way (sans Rubygems):
|
67
|
+
|
68
|
+
* tar xzf net-ssh-*.tgz
|
69
|
+
* cd net-ssh-*
|
70
|
+
* ruby setup.rb config
|
71
|
+
* ruby setup.rb install (might need sudo privileges)
|
72
|
+
|
73
|
+
== LICENSE:
|
74
|
+
|
75
|
+
(The MIT License)
|
76
|
+
|
77
|
+
Copyright (c) 2008 Jamis Buck <jamis@37signals.com>
|
78
|
+
|
79
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
80
|
+
a copy of this software and associated documentation files (the
|
81
|
+
'Software'), to deal in the Software without restriction, including
|
82
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
83
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
84
|
+
permit persons to whom the Software is furnished to do so, subject to
|
85
|
+
the following conditions:
|
86
|
+
|
87
|
+
The above copyright notice and this permission notice shall be
|
88
|
+
included in all copies or substantial portions of the Software.
|
89
|
+
|
90
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
91
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
92
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
93
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
94
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
95
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
96
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
$LOAD_PATH.unshift "../net-ssh/lib"
|
2
|
+
require './lib/net/sftp/version'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'echoe'
|
6
|
+
rescue LoadError
|
7
|
+
abort "You'll need to have `echoe' installed to use Net::SFTP's Rakefile"
|
8
|
+
end
|
9
|
+
|
10
|
+
version = Net::SFTP::Version::STRING.dup
|
11
|
+
if ENV['SNAPSHOT'].to_i == 1
|
12
|
+
version << "." << Time.now.utc.strftime("%Y%m%d%H%M%S")
|
13
|
+
end
|
14
|
+
|
15
|
+
Echoe.new('net-sftp', version) do |p|
|
16
|
+
p.project = "net-ssh"
|
17
|
+
p.changelog = "CHANGELOG.rdoc"
|
18
|
+
|
19
|
+
p.author = "Jamis Buck"
|
20
|
+
p.email = "jamis@jamisbuck.org"
|
21
|
+
p.summary = "A pure Ruby implementation of the SFTP client protocol"
|
22
|
+
p.url = "http://net-ssh.rubyforge.org/sftp"
|
23
|
+
|
24
|
+
p.dependencies = ["net-ssh >=1.99.1"]
|
25
|
+
|
26
|
+
p.need_zip = true
|
27
|
+
p.include_rakefile = true
|
28
|
+
|
29
|
+
p.rdoc_pattern = /^(lib|README.rdoc|CHANGELOG.rdoc)/
|
30
|
+
end
|
data/lib/net/sftp.rb
CHANGED
@@ -1,45 +1,60 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
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
|
-
begin
|
18
|
-
require 'rubygems'
|
19
|
-
gem "net-ssh", "< 1.99.0"
|
20
|
-
rescue LoadError
|
21
|
-
end
|
22
|
-
|
23
1
|
require 'net/ssh'
|
24
2
|
require 'net/sftp/session'
|
25
3
|
|
26
|
-
module Net
|
4
|
+
module Net
|
27
5
|
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
#
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
6
|
+
# Net::SFTP is a pure-Ruby module for programmatically interacting with a
|
7
|
+
# remote host via the SFTP protocol (that's SFTP as in "Secure File Transfer
|
8
|
+
# Protocol" produced by the Secure Shell Working Group, not "Secure FTP"
|
9
|
+
# and certainly not "Simple FTP").
|
10
|
+
#
|
11
|
+
# See Net::SFTP#start for an introduction to the library. Also, see
|
12
|
+
# Net::SFTP::Session for further documentation.
|
13
|
+
module SFTP
|
14
|
+
# A convenience method for starting a standalone SFTP session. It will
|
15
|
+
# start up an SSH session using the given arguments (see the documentation
|
16
|
+
# for Net::SSH::Session for details), and will then start a new SFTP session
|
17
|
+
# with the SSH session. This will block until the new SFTP is fully open
|
18
|
+
# and initialized before returning it.
|
19
|
+
#
|
20
|
+
# sftp = Net::SFTP.start("localhost", "user")
|
21
|
+
# sftp.upload! "/local/file.tgz", "/remote/file.tgz"
|
22
|
+
#
|
23
|
+
# If a block is given, it will be passed to the SFTP session and will be
|
24
|
+
# called once the SFTP session is fully open and initialized. When the
|
25
|
+
# block terminates, the new SSH session will automatically be closed.
|
26
|
+
#
|
27
|
+
# Net::SFTP.start("localhost", "user") do |sftp|
|
28
|
+
# sftp.upload! "/local/file.tgz", "/remote/file.tgz"
|
29
|
+
# end
|
30
|
+
def self.start(host, user, options={}, &block)
|
31
|
+
session = Net::SSH.start(host, user, options)
|
32
|
+
sftp = Net::SFTP::Session.new(session, &block).connect!
|
40
33
|
|
41
|
-
|
34
|
+
sftp.loop if block_given?
|
35
|
+
|
36
|
+
sftp
|
37
|
+
ensure
|
38
|
+
session.close if session && block_given?
|
39
|
+
end
|
40
|
+
end
|
42
41
|
|
43
|
-
Net::SSH.register_service( :sftp ) do |c,p|
|
44
|
-
Net::SFTP::Session.new( c[:session] )
|
45
42
|
end
|
43
|
+
|
44
|
+
class Net::SSH::Connection::Session
|
45
|
+
# A convenience method for starting up a new SFTP connection on the current
|
46
|
+
# SSH session. Blocks until the SFTP session is fully open, and then
|
47
|
+
# returns the SFTP session.
|
48
|
+
#
|
49
|
+
# Net::SSH.start("localhost", "user", "password") do |ssh|
|
50
|
+
# ssh.sftp.upload!("/local/file.tgz", "/remote/file.tgz")
|
51
|
+
# ssh.exec! "cd /some/path && tar xf /remote/file.tgz && rm /remote/file.tgz"
|
52
|
+
# end
|
53
|
+
def sftp(wait=true)
|
54
|
+
@sftp ||= begin
|
55
|
+
sftp = Net::SFTP::Session.new(self)
|
56
|
+
sftp.connect! if wait
|
57
|
+
sftp
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
module Net module SFTP
|
2
|
+
|
3
|
+
# The packet types and other general constants used by the SFTP protocol.
|
4
|
+
# See the specification for the SFTP protocol for a full discussion of their
|
5
|
+
# meaning and usage.
|
6
|
+
module Constants
|
7
|
+
|
8
|
+
# The various packet types supported by SFTP protocol versions 1 through 6.
|
9
|
+
# The FXP_EXTENDED and FXP_EXTENDED_REPLY packet types are not currently
|
10
|
+
# understood by Net::SFTP.
|
11
|
+
module PacketTypes
|
12
|
+
FXP_INIT = 1
|
13
|
+
FXP_VERSION = 2
|
14
|
+
|
15
|
+
FXP_OPEN = 3
|
16
|
+
FXP_CLOSE = 4
|
17
|
+
FXP_READ = 5
|
18
|
+
FXP_WRITE = 6
|
19
|
+
FXP_LSTAT = 7
|
20
|
+
FXP_FSTAT = 8
|
21
|
+
FXP_SETSTAT = 9
|
22
|
+
FXP_FSETSTAT = 10
|
23
|
+
FXP_OPENDIR = 11
|
24
|
+
FXP_READDIR = 12
|
25
|
+
FXP_REMOVE = 13
|
26
|
+
FXP_MKDIR = 14
|
27
|
+
FXP_RMDIR = 15
|
28
|
+
FXP_REALPATH = 16
|
29
|
+
FXP_STAT = 17
|
30
|
+
FXP_RENAME = 18
|
31
|
+
FXP_READLINK = 19
|
32
|
+
FXP_SYMLINK = 20
|
33
|
+
FXP_LINK = 21
|
34
|
+
FXP_BLOCK = 22
|
35
|
+
FXP_UNBLOCK = 23
|
36
|
+
|
37
|
+
FXP_STATUS = 101
|
38
|
+
FXP_HANDLE = 102
|
39
|
+
FXP_DATA = 103
|
40
|
+
FXP_NAME = 104
|
41
|
+
FXP_ATTRS = 105
|
42
|
+
|
43
|
+
FXP_EXTENDED = 200
|
44
|
+
FXP_EXTENDED_REPLY = 201
|
45
|
+
end
|
46
|
+
|
47
|
+
# Beginning in version 5 of the protocol, Net::SFTP::Session#rename accepts
|
48
|
+
# an optional +flags+ argument that must be either 0 or a combination of
|
49
|
+
# these constants.
|
50
|
+
module RenameFlags
|
51
|
+
OVERWRITE = 0x00000001
|
52
|
+
ATOMIC = 0x00000002
|
53
|
+
NATIVE = 0x00000004
|
54
|
+
end
|
55
|
+
|
56
|
+
# When an FXP_STATUS packet is received from the server, the +code+ will
|
57
|
+
# be one of the following constants.
|
58
|
+
module StatusCodes
|
59
|
+
FX_OK = 0
|
60
|
+
FX_EOF = 1
|
61
|
+
FX_NO_SUCH_FILE = 2
|
62
|
+
FX_PERMISSION_DENIED = 3
|
63
|
+
FX_FAILURE = 4
|
64
|
+
FX_BAD_MESSAGE = 5
|
65
|
+
FX_NO_CONNECTION = 6
|
66
|
+
FX_CONNECTION_LOST = 7
|
67
|
+
FX_OP_UNSUPPORTED = 8
|
68
|
+
FX_INVALID_HANDLE = 9
|
69
|
+
FX_NO_SUCH_PATH = 10
|
70
|
+
FX_FILE_ALREADY_EXISTS = 11
|
71
|
+
FX_WRITE_PROTECT = 12
|
72
|
+
FX_NO_MEDIA = 13
|
73
|
+
FX_NO_SPACE_ON_FILESYSTEM = 14
|
74
|
+
FX_QUOTA_EXCEEDED = 15
|
75
|
+
FX_UNKNOWN_PRINCIPLE = 16
|
76
|
+
FX_LOCK_CONFlICT = 17
|
77
|
+
FX_DIR_NOT_EMPTY = 18
|
78
|
+
FX_NOT_A_DIRECTORY = 19
|
79
|
+
FX_INVALID_FILENAME = 20
|
80
|
+
FX_LINK_LOOP = 21
|
81
|
+
end
|
82
|
+
|
83
|
+
# The Net::SFTP::Session#open operation is one of the worst casualties of
|
84
|
+
# the revisions between SFTP protocol versions. The flags change considerably
|
85
|
+
# between version 1 and version 6. Net::SFTP tries to shield programmers
|
86
|
+
# from the differences, so you'll almost never need to use these flags
|
87
|
+
# directly, but if you ever need to specify some flag that isn't exposed
|
88
|
+
# by the higher-level API, these are the ones that are available to you.
|
89
|
+
module OpenFlags
|
90
|
+
# These are the flags that are understood by versions 1-4 of the the
|
91
|
+
# open operation.
|
92
|
+
module FV1
|
93
|
+
READ = 0x00000001
|
94
|
+
WRITE = 0x00000002
|
95
|
+
APPEND = 0x00000004
|
96
|
+
CREAT = 0x00000008
|
97
|
+
TRUNC = 0x00000010
|
98
|
+
EXCL = 0x00000020
|
99
|
+
end
|
100
|
+
|
101
|
+
# Version 5 of the open operation totally discarded the flags understood
|
102
|
+
# by versions 1-4, and replaced them with these.
|
103
|
+
module FV5
|
104
|
+
CREATE_NEW = 0x00000000
|
105
|
+
CREATE_TRUNCATE = 0x00000001
|
106
|
+
OPEN_EXISTING = 0x00000002
|
107
|
+
OPEN_OR_CREATE = 0x00000003
|
108
|
+
TRUNCATE_EXISTING = 0x00000004
|
109
|
+
|
110
|
+
APPEND_DATA = 0x00000008
|
111
|
+
APPEND_DATA_ATOMIC = 0x00000010
|
112
|
+
TEXT_MODE = 0x00000020
|
113
|
+
READ_LOCK = 0x00000040
|
114
|
+
WRITE_LOCK = 0x00000080
|
115
|
+
DELETE_LOCK = 0x00000100
|
116
|
+
end
|
117
|
+
|
118
|
+
# Version 6 of the open operation added these flags, in addition to the
|
119
|
+
# flags understood by version 5.
|
120
|
+
module FV6
|
121
|
+
ADVISORY_LOCK = 0x00000200
|
122
|
+
NOFOLLOW = 0x00000400
|
123
|
+
DELETE_ON_CLOSE = 0x00000800
|
124
|
+
ACCESS_AUDIT_ALARM_INFO = 0x00001000
|
125
|
+
ACCESS_BACKUP = 0x00002000
|
126
|
+
BACKUP_STREAM = 0x00004000
|
127
|
+
OVERRIDE_OWNER = 0x00008000
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
# The Net::SFTP::Session#block operation, implemented in version 6 of
|
132
|
+
# the protocol, understands these constants for the +mask+ parameter.
|
133
|
+
module LockTypes
|
134
|
+
READ = OpenFlags::FV5::READ_LOCK
|
135
|
+
WRITE = OpenFlags::FV5::WRITE_LOCK
|
136
|
+
DELETE = OpenFlags::FV5::DELETE_LOCK
|
137
|
+
ADVISORY = OpenFlags::FV6::ADVISORY_LOCK
|
138
|
+
end
|
139
|
+
|
140
|
+
module ACE
|
141
|
+
# Access control entry types, used from version 4 of the protocol,
|
142
|
+
# onward. See Net::SFTP::Protocol::V04::Attributes::ACL.
|
143
|
+
module Type
|
144
|
+
ACCESS_ALLOWED = 0x00000000
|
145
|
+
ACCESS_DENIED = 0x00000001
|
146
|
+
SYSTEM_AUDIT = 0x00000002
|
147
|
+
SYSTEM_ALARM = 0x00000003
|
148
|
+
end
|
149
|
+
|
150
|
+
# Access control entry flags, used from version 4 of the protocol,
|
151
|
+
# onward. See Net::SFTP::Protocol::V04::Attributes::ACL.
|
152
|
+
module Flag
|
153
|
+
FILE_INHERIT = 0x00000001
|
154
|
+
DIRECTORY_INHERIT = 0x00000002
|
155
|
+
NO_PROPAGATE_INHERIT = 0x00000004
|
156
|
+
INHERIT_ONLY = 0x00000008
|
157
|
+
SUCCESSFUL_ACCESS = 0x00000010
|
158
|
+
FAILED_ACCESS = 0x00000020
|
159
|
+
IDENTIFIER_GROUP = 0x00000040
|
160
|
+
end
|
161
|
+
|
162
|
+
# Access control entry masks, used from version 4 of the protocol,
|
163
|
+
# onward. See Net::SFTP::Protocol::V04::Attributes::ACL.
|
164
|
+
module Mask
|
165
|
+
READ_DATA = 0x00000001
|
166
|
+
LIST_DIRECTORY = 0x00000001
|
167
|
+
WRITE_DATA = 0x00000002
|
168
|
+
ADD_FILE = 0x00000002
|
169
|
+
APPEND_DATA = 0x00000004
|
170
|
+
ADD_SUBDIRECTORY = 0x00000004
|
171
|
+
READ_NAMED_ATTRS = 0x00000008
|
172
|
+
WRITE_NAMED_ATTRS = 0x00000010
|
173
|
+
EXECUTE = 0x00000020
|
174
|
+
DELETE_CHILD = 0x00000040
|
175
|
+
READ_ATTRIBUTES = 0x00000080
|
176
|
+
WRITE_ATTRIBUTES = 0x00000100
|
177
|
+
DELETE = 0x00010000
|
178
|
+
READ_ACL = 0x00020000
|
179
|
+
WRITE_ACL = 0x00040000
|
180
|
+
WRITE_OWNER = 0x00080000
|
181
|
+
SYNCHRONIZE = 0x00100000
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
end end
|