net-sftp-backports 4.0.0.backports

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d06f649000e5b6b2b99d1d7687823e13d26a5096946d328f6bc2b8c91a6f4f58
4
+ data.tar.gz: '094c9406cc40e516f1db5db40a7644ca5b97f119cb2197dfa00c57e0e9027602'
5
+ SHA512:
6
+ metadata.gz: 9ba63089193e5900a47d1b4fb63eef6b356dc4c468c66b5c18f82c2e2445a108380f1bcc51e6a8f83fc7f47bfbeb470c02d90a785b1e2bbf373170cf4b8a5d50
7
+ data.tar.gz: 22052815baf86a9d676272c0d2b126f0ef8fa904c5d224ef5d06df188803bc7698f02f31faf1fb41d86192f7e440c51b671d80eb25f4cb794b17e14292778a21
@@ -0,0 +1,35 @@
1
+ name: CI
2
+ on: [push, pull_request]
3
+ jobs:
4
+ test:
5
+ runs-on: ubuntu-18.04
6
+ continue-on-error: ${{ matrix.flaky }}
7
+ strategy:
8
+ matrix:
9
+ ruby-version: ["2.5", "2.6", "2.7", "3.0", "3.1", "truffleruby-22", "truffleruby-21"]
10
+ flaky: [false]
11
+ include:
12
+ - ruby-version: "ruby-head"
13
+ flaky: true
14
+ - ruby-version: "jruby-9.2"
15
+ flaky: true
16
+ - ruby-version: "jruby-9.3"
17
+ flaky: true
18
+ - ruby-version: "jruby-head"
19
+ flaky: true
20
+ - ruby-version: "truffleruby-head"
21
+ flaky: true
22
+ steps:
23
+ - uses: actions/checkout@v1
24
+
25
+ - name: Set up Ruby ${{ matrix.ruby-version }}
26
+ uses: ruby/setup-ruby@v1
27
+ with:
28
+ ruby-version: ${{ matrix.ruby-version }}
29
+
30
+ - name: Bundle install
31
+ run: |
32
+ gem install bundler
33
+ bundle install
34
+ - name: Run Tests
35
+ run: bundle exec rake test
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ pkg
2
+ doc
3
+ coverage
4
+ ri
5
+ *.swp
6
+ Gemfile.lock
data/CHANGES.txt ADDED
@@ -0,0 +1,67 @@
1
+ === 3.0.0
2
+
3
+ * Pass protocol version via Net::SFTP.start [#107]
4
+ * Net-ssh 6.0 support [#106]
5
+
6
+ === 2.1.2 / 07 May 2013
7
+
8
+ * Fix fragmentation download failure [accardi]
9
+
10
+ === 2.1.0 / 06 Feb 2013
11
+
12
+ * Added public cert. All gem releases are now signed. See INSTALL in readme.
13
+ * Remove self-require, it causes a warning in Ruby 1.9.2. [jbarnette]
14
+ * Allow for upload to use the filename of the local file by default [czarneckid]
15
+ * Properly handle receiving less data than requested. [thedarkone]
16
+ * Added option to create directory on directory upload [Pablo Merino]
17
+ * Remove a warnings in tests [kachick]
18
+
19
+
20
+ === 2.0.5 / 19 Aug 2010
21
+
22
+ * Fixed missing StringIO exception in download! [Toby Bryans, Delano Mandelbaum]
23
+
24
+
25
+ === 2.0.4 / 23 Nov 2009
26
+
27
+ * Fixed frozen string issue in StatusException.message [appoxy]
28
+
29
+
30
+ === 2.0.3 / 17 Nov 2009
31
+
32
+ * Reference the correct Exception class when rescuing errors [Scott Tadman]
33
+
34
+
35
+ === 2.0.2 / 1 Feb 2009
36
+
37
+ * Avoid using 'ensure' in Net::SFTP.start since it causes unfriendly behavior when exceptions are raised [Jamis Buck]
38
+
39
+
40
+ === 2.0.1 / 29 May 2008
41
+
42
+ * Open files in binary mode to appease Windows [Jamis Buck]
43
+
44
+
45
+ === 2.0.0 / 1 May 2008
46
+
47
+ * 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]
48
+
49
+ * Allow Session#connect to be useful even in the open/opening states by invoking or queuing the callback block [Jamis Buck]
50
+
51
+ * Allow custom properties to be set on upload/download initiation via the :properties option [Jamis Buck]
52
+
53
+ * Custom properties on Download instances [Jamis Buck]
54
+
55
+ * Add #abort! method to Upload and Download operations [Jamis Buck]
56
+
57
+ * More complete support for file-type detection in protocol versions 1-3 [Jamis Buck]
58
+
59
+
60
+ === 2.0 Preview Release 2 (1.99.1) / 10 Apr 2008
61
+
62
+ * Custom properties on Upload instances [Jamis Buck]
63
+
64
+
65
+ === 2.0 Preview Release 1 (1.99.0) / 22 Mar 2008
66
+
67
+ * Rewritten! (Never, ever, do this at home.) New and improved API.
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mygem.gemspec
4
+ gemspec
5
+
6
+ # TODO: add to gemspec
7
+ gem "bundler", "~> 2.1"
8
+ gem "rake", "~> 12.0"
9
+
10
+ gem 'byebug', group: %i[development test] if !Gem.win_platform? && RUBY_ENGINE == "ruby"
11
+
12
+ if ENV["CI"]
13
+ gem 'codecov', require: false, group: :test
14
+ gem 'simplecov', require: false, group: :test
15
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,19 @@
1
+ Copyright © 2008 Jamis Buck
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the ‘Software’), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
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,118 @@
1
+ = Net::SFTP
2
+
3
+ <em><b>Please note: this project is in maintenance mode. It is not under active development but pull requests are very much welcome. Just be sure to include tests! -- delano</b></em>
4
+
5
+
6
+ * Docs: http://net-ssh.github.io/net-sftp
7
+ * Issues: https://github.com/net-ssh/net-sftp/issues
8
+ * Codes: https://github.com/net-ssh/net-sftp
9
+ * Email: net-ssh@solutious.com
10
+
11
+ <em>As of v2.1.0, all gem releases are signed. See INSTALL.</em>
12
+
13
+
14
+ == DESCRIPTION:
15
+
16
+ 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.
17
+
18
+ == FEATURES/PROBLEMS:
19
+
20
+ * Transfer files or even entire directory trees to or from a remote host via SFTP
21
+ * Completely supports all six protocol versions
22
+ * Asynchronous and synchronous operation
23
+ * Read and write files using an IO-like interface
24
+
25
+ == SYNOPSIS:
26
+
27
+ In a nutshell:
28
+
29
+ require 'net/sftp'
30
+
31
+ Net::SFTP.start('host', 'username', :password => 'password') do |sftp|
32
+ # upload a file or directory to the remote host
33
+ sftp.upload!("/path/to/local", "/path/to/remote")
34
+
35
+ # download a file or directory from the remote host
36
+ sftp.download!("/path/to/remote", "/path/to/local")
37
+
38
+ # grab data off the remote host directly to a buffer
39
+ data = sftp.download!("/path/to/remote")
40
+
41
+ # open and write to a pseudo-IO for a remote file
42
+ sftp.file.open("/path/to/remote", "w") do |f|
43
+ f.puts "Hello, world!\n"
44
+ end
45
+
46
+ # open and read from a pseudo-IO for a remote file
47
+ sftp.file.open("/path/to/remote", "r") do |f|
48
+ puts f.gets
49
+ end
50
+
51
+ # create a directory
52
+ sftp.mkdir! "/path/to/directory"
53
+
54
+ # list the entries in a directory
55
+ sftp.dir.foreach("/path/to/directory") do |entry|
56
+ puts entry.longname
57
+ end
58
+ end
59
+
60
+ 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.
61
+
62
+ == REQUIREMENTS:
63
+
64
+ * Net::SSH 2
65
+
66
+ If you wish to run the tests, you'll need:
67
+
68
+ * Echoe (if you want to use the Rakefile)
69
+ * Mocha
70
+
71
+ == INSTALL:
72
+
73
+ * gem install net-sftp (might need sudo privileges)
74
+
75
+ However, in order to be sure the code you're installing hasn't been tampered with, it's recommended that you verify the signature[http://docs.rubygems.org/read/chapter/21]. To do this, you need to add my public key as a trusted certificate (you only need to do this once):
76
+
77
+ # Add the public key as a trusted certificate
78
+ # (You only need to do this once)
79
+ $ curl -O https://raw.githubusercontent.com/net-ssh/net-sftp/master/net-sftp-public_cert.pem
80
+ $ gem cert --add net-sftp-public_cert.pem
81
+
82
+ Then, when install the gem, do so with high security:
83
+
84
+ $ gem install net-sftp -P HighSecurity
85
+
86
+ If you don't add the public key, you'll see an error like "Couldn't verify data signature". If you're still having trouble let me know and I'll give you a hand.
87
+
88
+ Or, if you prefer to do it the hard way (sans Rubygems):
89
+
90
+ * tar xzf net-ssh-*.tgz
91
+ * cd net-ssh-*
92
+ * ruby setup.rb config
93
+ * ruby setup.rb install (might need sudo privileges)
94
+
95
+ == LICENSE:
96
+
97
+ (The MIT License)
98
+
99
+ Copyright (c) 2008 Jamis Buck <jamis@37signals.com>
100
+
101
+ Permission is hereby granted, free of charge, to any person obtaining
102
+ a copy of this software and associated documentation files (the
103
+ 'Software'), to deal in the Software without restriction, including
104
+ without limitation the rights to use, copy, modify, merge, publish,
105
+ distribute, sublicense, and/or sell copies of the Software, and to
106
+ permit persons to whom the Software is furnished to do so, subject to
107
+ the following conditions:
108
+
109
+ The above copyright notice and this permission notice shall be
110
+ included in all copies or substantial portions of the Software.
111
+
112
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
113
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
114
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
115
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
116
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
117
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
118
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ require "rubygems"
2
+ require "rake"
3
+ require "rake/clean"
4
+ require "rdoc/task"
5
+ require "bundler/gem_tasks"
6
+
7
+ desc "When releasing make sure NET_SSH_BUILDGEM_SIGNED is set"
8
+ task :check_NET_SSH_BUILDGEM_SIGNED do
9
+ raise "NET_SSH_BUILDGEM_SIGNED should be set to release" unless ENV['NET_SSH_BUILDGEM_SIGNED']
10
+ end
11
+
12
+ Rake::Task[:release].enhance [:check_NET_SSH_BUILDGEM_SIGNED]
13
+ Rake::Task[:release].prerequisites.unshift(:check_NET_SSH_BUILDGEM_SIGNED)
14
+
15
+ task :default => ["build"]
16
+ CLEAN.include [ 'pkg', 'rdoc' ]
17
+ name = "net-sftp"
18
+
19
+ require_relative "lib/net/sftp/version"
20
+ version = Net::SFTP::Version::CURRENT
21
+
22
+ namespace :cert do
23
+ desc "Update public cert from private - only run if public is expired"
24
+ task :update_public_when_expired do
25
+ require 'openssl'
26
+ require 'time'
27
+ raw = File.read "net-sftp-public_cert.pem"
28
+ certificate = OpenSSL::X509::Certificate.new raw
29
+ raise Exception, "Not yet expired: #{certificate.not_after}" unless certificate.not_after < Time.now
30
+ sh "gem cert --build netssh@solutious.com --days 365*5 --private-key /mnt/gem/net-ssh-private_key.pem"
31
+ sh "mv gem-public_cert.pem net-sftp-public_cert.pem"
32
+ sh "gem cert --add net-sftp-public_cert.pem"
33
+ end
34
+ end
35
+
36
+ require 'rake/testtask'
37
+ Rake::TestTask.new do |t|
38
+ t.libs = ["lib", "test"]
39
+ end
40
+
41
+ extra_files = %w[LICENSE.txt THANKS.txt CHANGES.txt ]
42
+ RDoc::Task.new do |rdoc|
43
+ rdoc.rdoc_dir = "rdoc"
44
+ rdoc.title = "#{name} #{version}"
45
+ rdoc.generator = 'hanna' # gem install hanna-nouveau
46
+ rdoc.main = 'README.rdoc'
47
+ rdoc.rdoc_files.include("README*")
48
+ rdoc.rdoc_files.include("bin/*.rb")
49
+ rdoc.rdoc_files.include("lib/**/*.rb")
50
+ extra_files.each { |file|
51
+ rdoc.rdoc_files.include(file) if File.exist?(file)
52
+ }
53
+ 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
@@ -0,0 +1,39 @@
1
+ module Net; module SFTP
2
+
3
+ # The base exception class for the SFTP system.
4
+ class Exception < RuntimeError; end
5
+
6
+ # A exception class for reporting a non-success result of an operation.
7
+ class StatusException < Net::SFTP::Exception
8
+
9
+ # The response object that caused the exception.
10
+ attr_reader :response
11
+
12
+ # The error code (numeric)
13
+ attr_reader :code
14
+
15
+ # The description of the error
16
+ attr_reader :description
17
+
18
+ # Any incident-specific text given when the exception was raised
19
+ attr_reader :text
20
+
21
+ # Create a new status exception that reports the given code and
22
+ # description.
23
+ def initialize(response, text=nil)
24
+ @response, @text = response, text
25
+ @code = response.code
26
+ @description = response.message
27
+ @description = Response::MAP[@code] if @description.nil? || @description.empty?
28
+ end
29
+
30
+ # Override the default message format, to include the code and
31
+ # description.
32
+ def message
33
+ m = super.dup
34
+ m << " #{text}" if text
35
+ m << " (#{code}, #{description.inspect})"
36
+ end
37
+
38
+ end
39
+ end; end