net-sftp 0.5.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/doc/LICENSE-BSD +27 -0
- data/doc/LICENSE-GPL +280 -0
- data/doc/LICENSE-RUBY +56 -0
- data/examples/asynchronous.rb +57 -0
- data/examples/ssh-service.rb +31 -0
- data/examples/synchronous.rb +120 -0
- data/lib/net/sftp.rb +39 -0
- data/lib/net/sftp/errors.rb +25 -0
- data/lib/net/sftp/operations/abstract.rb +103 -0
- data/lib/net/sftp/operations/close.rb +31 -0
- data/lib/net/sftp/operations/errors.rb +76 -0
- data/lib/net/sftp/operations/fsetstat.rb +36 -0
- data/lib/net/sftp/operations/fstat.rb +32 -0
- data/lib/net/sftp/operations/lstat.rb +31 -0
- data/lib/net/sftp/operations/mkdir.rb +33 -0
- data/lib/net/sftp/operations/open.rb +32 -0
- data/lib/net/sftp/operations/opendir.rb +32 -0
- data/lib/net/sftp/operations/read.rb +84 -0
- data/lib/net/sftp/operations/readdir.rb +55 -0
- data/lib/net/sftp/operations/realpath.rb +37 -0
- data/lib/net/sftp/operations/remove.rb +31 -0
- data/lib/net/sftp/operations/rename.rb +32 -0
- data/lib/net/sftp/operations/rmdir.rb +31 -0
- data/lib/net/sftp/operations/services.rb +42 -0
- data/lib/net/sftp/operations/setstat.rb +33 -0
- data/lib/net/sftp/operations/stat.rb +31 -0
- data/lib/net/sftp/operations/write.rb +63 -0
- data/lib/net/sftp/protocol/01/attributes.rb +146 -0
- data/lib/net/sftp/protocol/01/impl.rb +251 -0
- data/lib/net/sftp/protocol/01/packet-assistant.rb +82 -0
- data/lib/net/sftp/protocol/01/services.rb +47 -0
- data/lib/net/sftp/protocol/02/impl.rb +39 -0
- data/lib/net/sftp/protocol/02/packet-assistant.rb +32 -0
- data/lib/net/sftp/protocol/02/services.rb +44 -0
- data/lib/net/sftp/protocol/03/impl.rb +42 -0
- data/lib/net/sftp/protocol/03/packet-assistant.rb +35 -0
- data/lib/net/sftp/protocol/03/services.rb +44 -0
- data/lib/net/sftp/protocol/04/attributes.rb +227 -0
- data/lib/net/sftp/protocol/04/impl.rb +134 -0
- data/lib/net/sftp/protocol/04/packet-assistant.rb +51 -0
- data/lib/net/sftp/protocol/04/services.rb +44 -0
- data/lib/net/sftp/protocol/05/services.rb +44 -0
- data/lib/net/sftp/protocol/constants.rb +60 -0
- data/lib/net/sftp/protocol/driver.rb +232 -0
- data/lib/net/sftp/protocol/packet-assistant.rb +84 -0
- data/lib/net/sftp/protocol/services.rb +55 -0
- data/lib/net/sftp/session.rb +215 -0
- data/lib/net/sftp/version.rb +25 -0
- data/test/ALL-TESTS.rb +21 -0
- data/test/operations/tc_abstract.rb +124 -0
- data/test/operations/tc_close.rb +40 -0
- data/test/operations/tc_fsetstat.rb +48 -0
- data/test/operations/tc_fstat.rb +40 -0
- data/test/operations/tc_lstat.rb +40 -0
- data/test/operations/tc_mkdir.rb +48 -0
- data/test/operations/tc_open.rb +42 -0
- data/test/operations/tc_opendir.rb +40 -0
- data/test/operations/tc_read.rb +103 -0
- data/test/operations/tc_readdir.rb +88 -0
- data/test/operations/tc_realpath.rb +54 -0
- data/test/operations/tc_remove.rb +40 -0
- data/test/operations/tc_rmdir.rb +40 -0
- data/test/operations/tc_setstat.rb +48 -0
- data/test/operations/tc_stat.rb +40 -0
- data/test/operations/tc_write.rb +91 -0
- data/test/protocol/01/tc_attributes.rb +138 -0
- data/test/protocol/01/tc_impl.rb +294 -0
- data/test/protocol/01/tc_packet_assistant.rb +81 -0
- data/test/protocol/02/tc_impl.rb +41 -0
- data/test/protocol/02/tc_packet_assistant.rb +31 -0
- data/test/protocol/03/tc_impl.rb +48 -0
- data/test/protocol/03/tc_packet_assistant.rb +34 -0
- data/test/protocol/04/tc_attributes.rb +174 -0
- data/test/protocol/04/tc_impl.rb +102 -0
- data/test/protocol/04/tc_packet_assistant.rb +41 -0
- data/test/protocol/tc_driver.rb +219 -0
- metadata +137 -0
@@ -0,0 +1,120 @@
|
|
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
|
+
require 'net/sftp'
|
19
|
+
|
20
|
+
Net::SFTP.start( 'localhost',
|
21
|
+
:registry_options => { :logs => { :levels => { "sftp.*" => :debug } } }
|
22
|
+
) do |sftp|
|
23
|
+
puts "----------------------------------------------"
|
24
|
+
puts "getting handle..."
|
25
|
+
handle = sftp.open( "temp/out" )
|
26
|
+
puts "got handle: #{handle.inspect}"
|
27
|
+
puts "reading..."
|
28
|
+
data = sftp.read( handle )
|
29
|
+
puts "got data: #{data.length} bytes"
|
30
|
+
sftp.close_handle( handle )
|
31
|
+
|
32
|
+
puts "----------------------------------------------"
|
33
|
+
puts "opening handle for writing..."
|
34
|
+
handle = sftp.open( "temp/blah", IO::WRONLY | IO::CREAT )
|
35
|
+
puts "got handle: #{handle.inspect}"
|
36
|
+
data = "1234567890" * 100
|
37
|
+
puts "writing #{data.length} bytes..."
|
38
|
+
p sftp.write( handle, data ).code
|
39
|
+
sftp.close_handle( handle )
|
40
|
+
|
41
|
+
puts "----------------------------------------------"
|
42
|
+
puts "opening handle for writing..."
|
43
|
+
handle = sftp.open( "temp/blah", IO::WRONLY | IO::CREAT )
|
44
|
+
puts "got handle: #{handle.inspect}"
|
45
|
+
data = "1234567890" * 100000
|
46
|
+
puts "writing #{data.length} bytes..."
|
47
|
+
p sftp.write( handle, data ).code
|
48
|
+
sftp.close_handle( handle )
|
49
|
+
|
50
|
+
puts "----------------------------------------------"
|
51
|
+
puts "opening directory handle..."
|
52
|
+
handle = sftp.opendir( "/usr/lib" )
|
53
|
+
puts "got handle: #{handle.inspect}"
|
54
|
+
puts "reading directory..."
|
55
|
+
items = sftp.readdir( handle )
|
56
|
+
puts "got #{items.length} entries"
|
57
|
+
sftp.close_handle( handle )
|
58
|
+
|
59
|
+
puts "----------------------------------------------"
|
60
|
+
puts "removing file..."
|
61
|
+
p sftp.remove( "temp/blah" ).code
|
62
|
+
|
63
|
+
puts "----------------------------------------------"
|
64
|
+
puts "getting attributes (stat)..."
|
65
|
+
p sftp.stat( "temp/out" )
|
66
|
+
|
67
|
+
puts "----------------------------------------------"
|
68
|
+
puts "getting attributes (lstat)..."
|
69
|
+
p sftp.lstat( "temp/out" )
|
70
|
+
|
71
|
+
puts "----------------------------------------------"
|
72
|
+
puts "getting handle..."
|
73
|
+
handle = sftp.open( "temp/out" )
|
74
|
+
puts "getting attributes (fstat)..."
|
75
|
+
p sftp.fstat( handle )
|
76
|
+
sftp.close_handle( handle )
|
77
|
+
|
78
|
+
puts "----------------------------------------------"
|
79
|
+
puts "setting attributes (setstat)..."
|
80
|
+
p sftp.setstat( "temp/out", :permissions => 0777 )
|
81
|
+
puts "getting attributes (stat)..."
|
82
|
+
p sftp.stat( "temp/out" )
|
83
|
+
|
84
|
+
puts "----------------------------------------------"
|
85
|
+
puts "getting handle..."
|
86
|
+
handle = sftp.open( "temp/out" )
|
87
|
+
puts "setting attributes (fsetstat)..."
|
88
|
+
p sftp.fsetstat( handle, :permissions => 0660 )
|
89
|
+
sftp.close_handle( handle )
|
90
|
+
puts "getting attributes (stat)..."
|
91
|
+
p sftp.stat( "temp/out" )
|
92
|
+
|
93
|
+
puts "----------------------------------------------"
|
94
|
+
puts "mkdir..."
|
95
|
+
p sftp.mkdir( "temp/test_dir", :permissions => 0500 )
|
96
|
+
puts "getting attributes (stat)..."
|
97
|
+
p sftp.stat( "temp/test_dir" )
|
98
|
+
|
99
|
+
puts "----------------------------------------------"
|
100
|
+
puts "rmdir..."
|
101
|
+
p sftp.rmdir( "temp/test_dir" )
|
102
|
+
|
103
|
+
puts "----------------------------------------------"
|
104
|
+
puts "realpath..."
|
105
|
+
p sftp.realpath( "." )
|
106
|
+
|
107
|
+
# 'rename' is only available from protocol version 2+.
|
108
|
+
if sftp.support?( :rename )
|
109
|
+
puts "----------------------------------------------"
|
110
|
+
puts "rename..."
|
111
|
+
p sftp.rename( "temp/out", "temp/out2" )
|
112
|
+
puts "getting realpath..."
|
113
|
+
p sftp.realpath( "temp/out2" )
|
114
|
+
puts "restoring name..."
|
115
|
+
p sftp.rename( "temp/out2", "temp/out" )
|
116
|
+
end
|
117
|
+
|
118
|
+
puts "----------------------------------------------"
|
119
|
+
puts "done!"
|
120
|
+
end
|
data/lib/net/sftp.rb
ADDED
@@ -0,0 +1,39 @@
|
|
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/ssh'
|
18
|
+
require 'net/sftp/session'
|
19
|
+
|
20
|
+
module Net ; module SFTP
|
21
|
+
|
22
|
+
# A convenience method for starting a standalone SFTP session. It will
|
23
|
+
# start up an SSH session using the given arguments (see the documentation
|
24
|
+
# for Net::SSH::Session for details), and will then start a new SFTP session
|
25
|
+
# with the SSH session. If a block is given, it will be passed to the SFTP
|
26
|
+
# session.
|
27
|
+
def start( *args, &block )
|
28
|
+
session = Net::SSH.start( *args )
|
29
|
+
Net::SFTP::Session.new( session, &block )
|
30
|
+
ensure
|
31
|
+
session.close if session && block_given?
|
32
|
+
end
|
33
|
+
module_function :start
|
34
|
+
|
35
|
+
end ; end
|
36
|
+
|
37
|
+
Net::SSH.register_service( :sftp ) do |c,p|
|
38
|
+
Net::SFTP::Session.new( c[:session] )
|
39
|
+
end
|
@@ -0,0 +1,25 @@
|
|
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
|
+
module Net ; module SFTP
|
18
|
+
|
19
|
+
# The base exception class for the SFTP system.
|
20
|
+
class Exception < ::Exception; end
|
21
|
+
|
22
|
+
# An exception class representing a bug condition.
|
23
|
+
class Bug < Exception; end
|
24
|
+
|
25
|
+
end ; end
|
@@ -0,0 +1,103 @@
|
|
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/operations/errors'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# The base class for all SFTP operations. Subclasses must implement a
|
22
|
+
# +perform+ method, which accepts the arguments expected by the corresponding
|
23
|
+
# method of the driver. Subclasses _may_ also override the default
|
24
|
+
# implementations of +do_status+, +do_data+, +do_name+, +do_handle+, and
|
25
|
+
# +do_attrs+, as necessary.
|
26
|
+
class Abstract
|
27
|
+
include Constants
|
28
|
+
|
29
|
+
# A structure for reporting status information.
|
30
|
+
Status = Struct.new( :code, :message, :language )
|
31
|
+
|
32
|
+
# A constant for representing the commonly-used FX_OK status.
|
33
|
+
OK = Status.new( FX_OK, "Success", "" )
|
34
|
+
|
35
|
+
# Create a new operation with the given logger instance, which will
|
36
|
+
# operate atop the given session, using the given driver to format and
|
37
|
+
# send the requests to the server.
|
38
|
+
def initialize( log, session, driver )
|
39
|
+
@log = log
|
40
|
+
@session = session
|
41
|
+
@driver = driver
|
42
|
+
end
|
43
|
+
|
44
|
+
# Execute the operation. If a callback is given, the operation will be
|
45
|
+
# performed asynchronously with the callback being invoked when the
|
46
|
+
# operation completes. If a callback is not given, the operation will
|
47
|
+
# be performed synchronously, with the expected value being returned.
|
48
|
+
def execute( *args, &callback )
|
49
|
+
@log.debug "executing" if @log.debug?
|
50
|
+
|
51
|
+
unless block_given?
|
52
|
+
callback = Proc.new do |status, *pargs|
|
53
|
+
@session.status = status
|
54
|
+
case
|
55
|
+
when pargs.empty? then return @session.status
|
56
|
+
when pargs.length == 1 then return pargs.first
|
57
|
+
else return pargs
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
@callback = callback
|
63
|
+
@id = perform *args
|
64
|
+
@log.debug "received request id #{@id}"
|
65
|
+
@session.register( @id, self )
|
66
|
+
|
67
|
+
@session.loop unless block_given?
|
68
|
+
end
|
69
|
+
|
70
|
+
# A callback for SFTP status packets. By default, raises an exception unless
|
71
|
+
# the status is FX_OK, in which case the registered callback is invoked.
|
72
|
+
def do_status( code, message, language )
|
73
|
+
raise StatusException.new( code, message, language ) unless code == FX_OK
|
74
|
+
@callback[ Status.new( code, message, language ) ]
|
75
|
+
end
|
76
|
+
|
77
|
+
# A callback for SFTP handle packets. By default, invokes the registered
|
78
|
+
# callback, passing an OK status and the handle.
|
79
|
+
def do_handle( handle )
|
80
|
+
@callback[ OK, handle ]
|
81
|
+
end
|
82
|
+
|
83
|
+
# A callback for SFTP data packets. By default, invokes the registered
|
84
|
+
# callback, passing an OK status and the data.
|
85
|
+
def do_data( data )
|
86
|
+
@callback[ OK, data ]
|
87
|
+
end
|
88
|
+
|
89
|
+
# A callback for SFTP name packets. By default, invokes the registered
|
90
|
+
# callback, passing an OK status and the list of items.
|
91
|
+
def do_name( items )
|
92
|
+
@callback[ OK, items ]
|
93
|
+
end
|
94
|
+
|
95
|
+
# A callback for SFTP attrs packets. By default, invokes the registered
|
96
|
+
# callback, passing an OK status and the attributes object.
|
97
|
+
def do_attrs( attributes )
|
98
|
+
@callback[ OK, attributes ]
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
end ; end ; end
|
@@ -0,0 +1,31 @@
|
|
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/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# The implementation of the close operation, for closing an open handle.
|
22
|
+
class Close < Abstract
|
23
|
+
|
24
|
+
# Closes the given handle.
|
25
|
+
def perform( handle )
|
26
|
+
@driver.close_handle( nil, handle )
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end ; end ; end
|
@@ -0,0 +1,76 @@
|
|
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/errors'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
module Constants
|
22
|
+
FX_OK = 0
|
23
|
+
FX_EOF = 1
|
24
|
+
FX_NO_SUCH_FILE = 2
|
25
|
+
FX_PERMISSION_DENIED = 3
|
26
|
+
FX_FAILURE = 4
|
27
|
+
FX_BAD_MESSAGE = 5
|
28
|
+
FX_NO_CONNECTION = 6
|
29
|
+
FX_CONNECTION_LOST = 7
|
30
|
+
FX_OP_UNSUPPORTED = 8
|
31
|
+
FX_INVALID_HANDLE = 9
|
32
|
+
FX_NO_SUCH_PATH = 10
|
33
|
+
FX_FILE_ALREADY_EXISTS = 11
|
34
|
+
FX_WRITE_PROTECT = 12
|
35
|
+
FX_NO_MEDIA = 13
|
36
|
+
FX_NO_SPACE_ON_FILESYSTEM = 14
|
37
|
+
FX_QUOTA_EXCEEDED = 15
|
38
|
+
FX_UNKNOWN_PRINCIPLE = 16
|
39
|
+
FX_LOCK_CONFlICT = 17
|
40
|
+
FX_DIR_NOT_EMPTY = 18
|
41
|
+
FX_NOT_A_DIRECTORY = 19
|
42
|
+
FX_INVALID_FILENAME = 20
|
43
|
+
FX_LINK_LOOP = 21
|
44
|
+
end
|
45
|
+
|
46
|
+
# A exception class for reporting a non-success result of an operation.
|
47
|
+
class StatusException < Net::SFTP::Exception
|
48
|
+
|
49
|
+
# The error code (numeric)
|
50
|
+
attr_reader :code
|
51
|
+
|
52
|
+
# The description of the error
|
53
|
+
attr_reader :description
|
54
|
+
|
55
|
+
# The language in which the description is being reported (usually the
|
56
|
+
# empty string)
|
57
|
+
attr_reader :language
|
58
|
+
|
59
|
+
# Create a new status exception that reports the given code and
|
60
|
+
# description.
|
61
|
+
def initialize( code, description, language )
|
62
|
+
@code = code
|
63
|
+
@description = description
|
64
|
+
@language = language
|
65
|
+
end
|
66
|
+
|
67
|
+
# Override the default message format, to include the code and
|
68
|
+
# description.
|
69
|
+
def message
|
70
|
+
m = super
|
71
|
+
m << " (#{code}, #{description.inspect})"
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end ; end ; end
|
@@ -0,0 +1,36 @@
|
|
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/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# The implementation of the +fsetstat+ operation.
|
22
|
+
class Fsetstat < Abstract
|
23
|
+
|
24
|
+
# Performs the fsetstat operation on the given handle. The +hash+
|
25
|
+
# parameter is a Hash of attribute name/value pairs, from which an
|
26
|
+
# attributes object will be created and sent to the server. It
|
27
|
+
# represents the attributes to set on the file/directory represented
|
28
|
+
# by the handle.
|
29
|
+
def perform( handle, hash )
|
30
|
+
attrs = @driver.attr_factory.from_hash( hash )
|
31
|
+
@driver.fsetstat( nil, handle, attrs )
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end ; end ; 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
|
+
require 'net/sftp/operations/abstract'
|
18
|
+
|
19
|
+
module Net ; module SFTP ; module Operations
|
20
|
+
|
21
|
+
# The implementation of the +fstat+ operation.
|
22
|
+
class Fstat < Abstract
|
23
|
+
|
24
|
+
# Ask the server for the attributes of the file/directory represented by
|
25
|
+
# the given handle.
|
26
|
+
def perform( handle )
|
27
|
+
@driver.fstat( nil, handle )
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end ; end ; end
|