hrr_rb_sftp 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +23 -0
- data/lib/hrr_rb_sftp.rb +79 -1
- data/lib/hrr_rb_sftp/loggable.rb +34 -0
- data/lib/hrr_rb_sftp/protocol.rb +39 -33
- data/lib/hrr_rb_sftp/protocol/common.rb +6 -3
- data/lib/hrr_rb_sftp/protocol/common/data_types.rb +19 -0
- data/lib/hrr_rb_sftp/protocol/common/data_types/byte.rb +40 -0
- data/lib/hrr_rb_sftp/protocol/common/data_types/extension_pair.rb +41 -0
- data/lib/hrr_rb_sftp/protocol/common/data_types/extension_pairs.rb +42 -0
- data/lib/hrr_rb_sftp/protocol/common/data_types/string.rb +42 -0
- data/lib/hrr_rb_sftp/protocol/common/data_types/uint32.rb +40 -0
- data/lib/hrr_rb_sftp/protocol/common/data_types/uint64.rb +40 -0
- data/lib/hrr_rb_sftp/protocol/common/packets.rb +16 -0
- data/lib/hrr_rb_sftp/protocol/common/packets/001_ssh_fxp_init.rb +27 -0
- data/lib/hrr_rb_sftp/protocol/common/packets/002_ssh_fxp_version.rb +28 -0
- data/lib/hrr_rb_sftp/protocol/common/packets/packet.rb +96 -0
- data/lib/hrr_rb_sftp/protocol/version1.rb +11 -3
- data/lib/hrr_rb_sftp/protocol/version1/data_types.rb +15 -0
- data/lib/hrr_rb_sftp/protocol/version1/data_types/attrs.rb +91 -0
- data/lib/hrr_rb_sftp/protocol/version1/packets.rb +72 -0
- data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/003_ssh_fxp_open.rb +94 -43
- data/lib/hrr_rb_sftp/protocol/version1/packets/004_ssh_fxp_close.rb +61 -0
- data/lib/hrr_rb_sftp/protocol/version1/packets/005_ssh_fxp_read.rb +72 -0
- data/lib/hrr_rb_sftp/protocol/version1/packets/006_ssh_fxp_write.rb +64 -0
- data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/007_ssh_fxp_lstat.rb +27 -9
- data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/008_ssh_fxp_fstat.rb +26 -9
- data/lib/hrr_rb_sftp/protocol/version1/packets/009_ssh_fxp_setstat.rb +92 -0
- data/lib/hrr_rb_sftp/protocol/version1/packets/010_ssh_fxp_fsetstat.rb +85 -0
- data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/011_ssh_fxp_opendir.rb +32 -11
- data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/012_ssh_fxp_readdir.rb +73 -49
- data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/013_ssh_fxp_remove.rb +27 -9
- data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/014_ssh_fxp_mkdir.rb +28 -10
- data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/015_ssh_fxp_rmdir.rb +32 -12
- data/lib/hrr_rb_sftp/protocol/version1/packets/016_ssh_fxp_realpath.rb +47 -0
- data/lib/hrr_rb_sftp/protocol/version1/{packet → packets}/017_ssh_fxp_stat.rb +27 -9
- data/lib/hrr_rb_sftp/protocol/version1/packets/101_ssh_fxp_status.rb +73 -0
- data/lib/hrr_rb_sftp/protocol/version1/packets/102_ssh_fxp_handle.rb +28 -0
- data/lib/hrr_rb_sftp/protocol/version1/packets/103_ssh_fxp_data.rb +28 -0
- data/lib/hrr_rb_sftp/protocol/version1/packets/104_ssh_fxp_name.rb +48 -0
- data/lib/hrr_rb_sftp/protocol/version1/packets/105_ssh_fxp_attrs.rb +28 -0
- data/lib/hrr_rb_sftp/protocol/version1/packets/packet.rb +57 -0
- data/lib/hrr_rb_sftp/protocol/version2.rb +11 -3
- data/lib/hrr_rb_sftp/protocol/version2/data_types.rb +13 -0
- data/lib/hrr_rb_sftp/protocol/version2/packets.rb +14 -0
- data/lib/hrr_rb_sftp/protocol/version2/packets/018_ssh_fxp_rename.rb +91 -0
- data/lib/hrr_rb_sftp/protocol/version3.rb +12 -3
- data/lib/hrr_rb_sftp/protocol/version3/data_types.rb +13 -0
- data/lib/hrr_rb_sftp/protocol/version3/extensions.rb +94 -0
- data/lib/hrr_rb_sftp/protocol/version3/extensions/extension.rb +58 -0
- data/lib/hrr_rb_sftp/protocol/version3/extensions/fsync_at_openssh_com.rb +59 -0
- data/lib/hrr_rb_sftp/protocol/version3/extensions/hardlink_at_openssh_com.rb +84 -0
- data/lib/hrr_rb_sftp/protocol/version3/extensions/lsetstat_at_openssh_com.rb +132 -0
- data/lib/hrr_rb_sftp/protocol/version3/extensions/posix_rename_at_openssh_com.rb +76 -0
- data/lib/hrr_rb_sftp/protocol/version3/packets.rb +19 -0
- data/lib/hrr_rb_sftp/protocol/version3/packets/014_ssh_fxp_mkdir.rb +75 -0
- data/lib/hrr_rb_sftp/protocol/version3/packets/019_ssh_fxp_readlink.rb +76 -0
- data/lib/hrr_rb_sftp/protocol/version3/packets/020_ssh_fxp_symlink.rb +76 -0
- data/lib/hrr_rb_sftp/protocol/version3/packets/101_ssh_fxp_status.rb +25 -0
- data/lib/hrr_rb_sftp/protocol/version3/packets/200_ssh_fxp_extended.rb +95 -0
- data/lib/hrr_rb_sftp/protocol/version3/packets/201_ssh_fxp_extended_reply.rb +60 -0
- data/lib/hrr_rb_sftp/receiver.rb +17 -2
- data/lib/hrr_rb_sftp/sender.rb +15 -1
- data/lib/hrr_rb_sftp/server.rb +43 -12
- data/lib/hrr_rb_sftp/version.rb +5 -1
- metadata +54 -47
- data/lib/hrr_rb_sftp/protocol/common/data_type.rb +0 -15
- data/lib/hrr_rb_sftp/protocol/common/data_type/byte.rb +0 -22
- data/lib/hrr_rb_sftp/protocol/common/data_type/extension_pair.rb +0 -23
- data/lib/hrr_rb_sftp/protocol/common/data_type/extension_pairs.rb +0 -24
- data/lib/hrr_rb_sftp/protocol/common/data_type/string.rb +0 -24
- data/lib/hrr_rb_sftp/protocol/common/data_type/uint32.rb +0 -22
- data/lib/hrr_rb_sftp/protocol/common/data_type/uint64.rb +0 -22
- data/lib/hrr_rb_sftp/protocol/common/packet.rb +0 -11
- data/lib/hrr_rb_sftp/protocol/common/packet/001_ssh_fxp_init.rb +0 -18
- data/lib/hrr_rb_sftp/protocol/common/packet/002_ssh_fxp_version.rb +0 -19
- data/lib/hrr_rb_sftp/protocol/common/packetable.rb +0 -72
- data/lib/hrr_rb_sftp/protocol/version1/data_type.rb +0 -11
- data/lib/hrr_rb_sftp/protocol/version1/data_type/attrs.rb +0 -54
- data/lib/hrr_rb_sftp/protocol/version1/packet.rb +0 -29
- data/lib/hrr_rb_sftp/protocol/version1/packet/004_ssh_fxp_close.rb +0 -44
- data/lib/hrr_rb_sftp/protocol/version1/packet/005_ssh_fxp_read.rb +0 -53
- data/lib/hrr_rb_sftp/protocol/version1/packet/006_ssh_fxp_write.rb +0 -46
- data/lib/hrr_rb_sftp/protocol/version1/packet/009_ssh_fxp_setstat.rb +0 -63
- data/lib/hrr_rb_sftp/protocol/version1/packet/010_ssh_fxp_fsetstat.rb +0 -48
- data/lib/hrr_rb_sftp/protocol/version1/packet/016_ssh_fxp_realpath.rb +0 -30
- data/lib/hrr_rb_sftp/protocol/version1/packet/101_ssh_fxp_status.rb +0 -29
- data/lib/hrr_rb_sftp/protocol/version1/packet/102_ssh_fxp_handle.rb +0 -19
- data/lib/hrr_rb_sftp/protocol/version1/packet/103_ssh_fxp_data.rb +0 -19
- data/lib/hrr_rb_sftp/protocol/version1/packet/104_ssh_fxp_name.rb +0 -33
- data/lib/hrr_rb_sftp/protocol/version1/packet/105_ssh_fxp_attrs.rb +0 -19
- data/lib/hrr_rb_sftp/protocol/version2/data_type.rb +0 -9
- data/lib/hrr_rb_sftp/protocol/version2/packet.rb +0 -11
- data/lib/hrr_rb_sftp/protocol/version2/packet/018_ssh_fxp_rename.rb +0 -70
- data/lib/hrr_rb_sftp/protocol/version3/data_type.rb +0 -9
- data/lib/hrr_rb_sftp/protocol/version3/packet.rb +0 -16
- data/lib/hrr_rb_sftp/protocol/version3/packet/014_ssh_fxp_mkdir.rb +0 -58
- data/lib/hrr_rb_sftp/protocol/version3/packet/019_ssh_fxp_readlink.rb +0 -57
- data/lib/hrr_rb_sftp/protocol/version3/packet/020_ssh_fxp_symlink.rb +0 -58
- data/lib/hrr_rb_sftp/protocol/version3/packet/101_ssh_fxp_status.rb +0 -31
- data/lib/hrr_rb_sftp/protocol/version3/packet/200_ssh_fxp_extended.rb +0 -34
- data/lib/hrr_rb_sftp/protocol/version3/packet/201_ssh_fxp_extended_reply.rb +0 -23
@@ -1,46 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version1
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_WRITE
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 6
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::String, :"handle" ],
|
14
|
-
[DataType::Uint64, :"offset" ],
|
15
|
-
[DataType::String, :"data" ],
|
16
|
-
]
|
17
|
-
|
18
|
-
def respond_to request
|
19
|
-
begin
|
20
|
-
raise "Specified handle does not exist" unless @handles.has_key?(request[:"handle"])
|
21
|
-
file = @handles[request[:"handle"]]
|
22
|
-
file.pos = request[:"offset"]
|
23
|
-
file.write request[:"data"]
|
24
|
-
{
|
25
|
-
:"type" => SSH_FXP_STATUS::TYPE,
|
26
|
-
:"request-id" => request[:"request-id"],
|
27
|
-
:"code" => SSH_FXP_STATUS::SSH_FX_OK,
|
28
|
-
:"error message" => "Success",
|
29
|
-
:"language tag" => "",
|
30
|
-
}
|
31
|
-
rescue => e
|
32
|
-
log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
|
33
|
-
{
|
34
|
-
:"type" => SSH_FXP_STATUS::TYPE,
|
35
|
-
:"request-id" => request[:"request-id"],
|
36
|
-
:"code" => SSH_FXP_STATUS::SSH_FX_FAILURE,
|
37
|
-
:"error message" => e.message,
|
38
|
-
:"language tag" => "",
|
39
|
-
}
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version1
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_SETSTAT
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 9
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::String, :"path" ],
|
14
|
-
[DataType::Attrs, :"attrs" ],
|
15
|
-
]
|
16
|
-
|
17
|
-
def respond_to request
|
18
|
-
begin
|
19
|
-
path = request[:"path"]
|
20
|
-
attrs = request[:"attrs"]
|
21
|
-
FileUtils.chmod(attrs[:"permissions"], path) if attrs.has_key?(:"permissions")
|
22
|
-
File.utime(attrs[:"atime"], attrs[:"mtime"], path) if attrs.has_key?(:"atime") && attrs.has_key?(:"mtime")
|
23
|
-
FileUtils.chown(attrs[:"uid"], attrs[:"gid"], path) if attrs.has_key?(:"uid") && attrs.has_key?(:"gid")
|
24
|
-
File.truncate(path, attrs[:"size"]) if attrs.has_key?(:"size")
|
25
|
-
{
|
26
|
-
:"type" => SSH_FXP_STATUS::TYPE,
|
27
|
-
:"request-id" => request[:"request-id"],
|
28
|
-
:"code" => SSH_FXP_STATUS::SSH_FX_OK,
|
29
|
-
:"error message" => "Success",
|
30
|
-
:"language tag" => "",
|
31
|
-
}
|
32
|
-
rescue Errno::ENOENT
|
33
|
-
{
|
34
|
-
:"type" => SSH_FXP_STATUS::TYPE,
|
35
|
-
:"request-id" => request[:"request-id"],
|
36
|
-
:"code" => SSH_FXP_STATUS::SSH_FX_NO_SUCH_FILE,
|
37
|
-
:"error message" => "No such file or directory",
|
38
|
-
:"language tag" => "",
|
39
|
-
}
|
40
|
-
rescue Errno::EACCES
|
41
|
-
{
|
42
|
-
:"type" => SSH_FXP_STATUS::TYPE,
|
43
|
-
:"request-id" => request[:"request-id"],
|
44
|
-
:"code" => SSH_FXP_STATUS::SSH_FX_PERMISSION_DENIED,
|
45
|
-
:"error message" => "Permission denied",
|
46
|
-
:"language tag" => "",
|
47
|
-
}
|
48
|
-
rescue => e
|
49
|
-
log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
|
50
|
-
{
|
51
|
-
:"type" => SSH_FXP_STATUS::TYPE,
|
52
|
-
:"request-id" => request[:"request-id"],
|
53
|
-
:"code" => SSH_FXP_STATUS::SSH_FX_FAILURE,
|
54
|
-
:"error message" => e.message,
|
55
|
-
:"language tag" => "",
|
56
|
-
}
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version1
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_FSETSTAT
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 10
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::String, :"handle" ],
|
14
|
-
[DataType::Attrs, :"attrs" ],
|
15
|
-
]
|
16
|
-
|
17
|
-
def respond_to request
|
18
|
-
begin
|
19
|
-
raise "Specified handle does not exist" unless @handles.has_key?(request[:"handle"])
|
20
|
-
file = @handles[request[:"handle"]]
|
21
|
-
attrs = request[:"attrs"]
|
22
|
-
file.chmod(attrs[:"permissions"]) if attrs.has_key?(:"permissions")
|
23
|
-
File.utime(attrs[:"atime"], attrs[:"mtime"], file.path) if attrs.has_key?(:"atime") && attrs.has_key?(:"mtime")
|
24
|
-
file.chown(attrs[:"uid"], attrs[:"gid"]) if attrs.has_key?(:"uid") && attrs.has_key?(:"gid")
|
25
|
-
file.truncate(attrs[:"size"]) if attrs.has_key?(:"size")
|
26
|
-
{
|
27
|
-
:"type" => SSH_FXP_STATUS::TYPE,
|
28
|
-
:"request-id" => request[:"request-id"],
|
29
|
-
:"code" => SSH_FXP_STATUS::SSH_FX_OK,
|
30
|
-
:"error message" => "Success",
|
31
|
-
:"language tag" => "",
|
32
|
-
}
|
33
|
-
rescue => e
|
34
|
-
log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
|
35
|
-
{
|
36
|
-
:"type" => SSH_FXP_STATUS::TYPE,
|
37
|
-
:"request-id" => request[:"request-id"],
|
38
|
-
:"code" => SSH_FXP_STATUS::SSH_FX_FAILURE,
|
39
|
-
:"error message" => e.message,
|
40
|
-
:"language tag" => "",
|
41
|
-
}
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version1
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_REALPATH
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 16
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::String, :"path" ],
|
14
|
-
]
|
15
|
-
|
16
|
-
def respond_to request
|
17
|
-
{
|
18
|
-
:"type" => SSH_FXP_NAME::TYPE,
|
19
|
-
:"request-id" => request[:"request-id"],
|
20
|
-
:"count" => 1,
|
21
|
-
:"filename[0]" => File.absolute_path(request[:"path"]),
|
22
|
-
:"longname[0]" => File.absolute_path(request[:"path"]),
|
23
|
-
:"attrs[0]" => {},
|
24
|
-
}
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version1
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_STATUS
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 101
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::Uint32, :"code" ],
|
14
|
-
]
|
15
|
-
|
16
|
-
SSH_FX_OK = 0
|
17
|
-
SSH_FX_EOF = 1
|
18
|
-
SSH_FX_NO_SUCH_FILE = 2
|
19
|
-
SSH_FX_PERMISSION_DENIED = 3
|
20
|
-
SSH_FX_FAILURE = 4
|
21
|
-
SSH_FX_BAD_MESSAGE = 5
|
22
|
-
SSH_FX_NO_CONNECTION = 6
|
23
|
-
SSH_FX_CONNECTION_LOST = 7
|
24
|
-
SSH_FX_OP_UNSUPPORTED = 8
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version1
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_HANDLE
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 102
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::String, :"handle" ],
|
14
|
-
]
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version1
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_DATA
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 103
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::String, :"data" ],
|
14
|
-
]
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version1
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_NAME
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 104
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::Uint32, :"count" ],
|
14
|
-
]
|
15
|
-
|
16
|
-
PER_COUNT_FORMAT = Hash.new{ |hash, key|
|
17
|
-
Array.new(key){ |i|
|
18
|
-
[
|
19
|
-
[DataType::String, :"filename[#{i}]"],
|
20
|
-
[DataType::String, :"longname[#{i}]"],
|
21
|
-
[DataType::Attrs, :"attrs[#{i}]" ],
|
22
|
-
]
|
23
|
-
}.inject(:+)
|
24
|
-
}
|
25
|
-
|
26
|
-
CONDITIONAL_FORMAT = {
|
27
|
-
:"count" => PER_COUNT_FORMAT,
|
28
|
-
}
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version1
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_ATTRS
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 105
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::Attrs, :"attrs" ],
|
14
|
-
]
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version2
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_RENAME
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 18
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::String, :"oldpath" ],
|
14
|
-
[DataType::String, :"newpath" ],
|
15
|
-
]
|
16
|
-
|
17
|
-
def respond_to request
|
18
|
-
oldpath = request[:"oldpath"]
|
19
|
-
newpath = request[:"newpath"]
|
20
|
-
if File.exist?(newpath)
|
21
|
-
{
|
22
|
-
:"type" => Packet::SSH_FXP_STATUS::TYPE,
|
23
|
-
:"request-id" => request[:"request-id"],
|
24
|
-
:"code" => Packet::SSH_FXP_STATUS::SSH_FX_FAILURE,
|
25
|
-
:"error message" => "File exists",
|
26
|
-
:"language tag" => "",
|
27
|
-
}
|
28
|
-
else
|
29
|
-
begin
|
30
|
-
File.rename(oldpath, newpath)
|
31
|
-
{
|
32
|
-
:"type" => Packet::SSH_FXP_STATUS::TYPE,
|
33
|
-
:"request-id" => request[:"request-id"],
|
34
|
-
:"code" => Packet::SSH_FXP_STATUS::SSH_FX_OK,
|
35
|
-
:"error message" => "Success",
|
36
|
-
:"language tag" => "",
|
37
|
-
}
|
38
|
-
rescue Errno::ENOENT
|
39
|
-
{
|
40
|
-
:"type" => Packet::SSH_FXP_STATUS::TYPE,
|
41
|
-
:"request-id" => request[:"request-id"],
|
42
|
-
:"code" => Packet::SSH_FXP_STATUS::SSH_FX_NO_SUCH_FILE,
|
43
|
-
:"error message" => "No such file or directory",
|
44
|
-
:"language tag" => "",
|
45
|
-
}
|
46
|
-
rescue Errno::EACCES
|
47
|
-
{
|
48
|
-
:"type" => Packet::SSH_FXP_STATUS::TYPE,
|
49
|
-
:"request-id" => request[:"request-id"],
|
50
|
-
:"code" => Packet::SSH_FXP_STATUS::SSH_FX_PERMISSION_DENIED,
|
51
|
-
:"error message" => "Permission denied",
|
52
|
-
:"language tag" => "",
|
53
|
-
}
|
54
|
-
rescue => e
|
55
|
-
log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
|
56
|
-
{
|
57
|
-
:"type" => Packet::SSH_FXP_STATUS::TYPE,
|
58
|
-
:"request-id" => request[:"request-id"],
|
59
|
-
:"code" => Packet::SSH_FXP_STATUS::SSH_FX_FAILURE,
|
60
|
-
:"error message" => e.message,
|
61
|
-
:"language tag" => "",
|
62
|
-
}
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version3
|
4
|
-
module Packet
|
5
|
-
include Version2::Packet
|
6
|
-
end
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
require "hrr_rb_sftp/protocol/version3/packet/014_ssh_fxp_mkdir"
|
12
|
-
require "hrr_rb_sftp/protocol/version3/packet/019_ssh_fxp_readlink"
|
13
|
-
require "hrr_rb_sftp/protocol/version3/packet/020_ssh_fxp_symlink"
|
14
|
-
require "hrr_rb_sftp/protocol/version3/packet/101_ssh_fxp_status"
|
15
|
-
require "hrr_rb_sftp/protocol/version3/packet/200_ssh_fxp_extended"
|
16
|
-
require "hrr_rb_sftp/protocol/version3/packet/201_ssh_fxp_extended_reply"
|
@@ -1,58 +0,0 @@
|
|
1
|
-
module HrrRbSftp
|
2
|
-
class Protocol
|
3
|
-
class Version3
|
4
|
-
module Packet
|
5
|
-
class SSH_FXP_MKDIR
|
6
|
-
include Common::Packetable
|
7
|
-
|
8
|
-
TYPE = 14
|
9
|
-
|
10
|
-
FORMAT = [
|
11
|
-
[DataType::Byte, :"type" ],
|
12
|
-
[DataType::Uint32, :"request-id"],
|
13
|
-
[DataType::String, :"path" ],
|
14
|
-
[DataType::Attrs, :"attrs" ],
|
15
|
-
]
|
16
|
-
|
17
|
-
def respond_to request
|
18
|
-
begin
|
19
|
-
Dir.mkdir request[:"path"]
|
20
|
-
{
|
21
|
-
:"type" => Packet::SSH_FXP_STATUS::TYPE,
|
22
|
-
:"request-id" => request[:"request-id"],
|
23
|
-
:"code" => Packet::SSH_FXP_STATUS::SSH_FX_OK,
|
24
|
-
:"error message" => "Success",
|
25
|
-
:"language tag" => "",
|
26
|
-
}
|
27
|
-
rescue Errno::EACCES
|
28
|
-
{
|
29
|
-
:"type" => Packet::SSH_FXP_STATUS::TYPE,
|
30
|
-
:"request-id" => request[:"request-id"],
|
31
|
-
:"code" => Packet::SSH_FXP_STATUS::SSH_FX_PERMISSION_DENIED,
|
32
|
-
:"error message" => "Permission denied",
|
33
|
-
:"language tag" => "",
|
34
|
-
}
|
35
|
-
rescue Errno::EEXIST
|
36
|
-
{
|
37
|
-
:"type" => Packet::SSH_FXP_STATUS::TYPE,
|
38
|
-
:"request-id" => request[:"request-id"],
|
39
|
-
:"code" => Packet::SSH_FXP_STATUS::SSH_FX_FAILURE,
|
40
|
-
:"error message" => "File exists",
|
41
|
-
:"language tag" => "",
|
42
|
-
}
|
43
|
-
rescue => e
|
44
|
-
log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
|
45
|
-
{
|
46
|
-
:"type" => Packet::SSH_FXP_STATUS::TYPE,
|
47
|
-
:"request-id" => request[:"request-id"],
|
48
|
-
:"code" => Packet::SSH_FXP_STATUS::SSH_FX_FAILURE,
|
49
|
-
:"error message" => e.message,
|
50
|
-
:"language tag" => "",
|
51
|
-
}
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|