1%%
2%% %CopyrightBegin%
3%%
4%% Copyright Ericsson AB 2005-2020. All Rights Reserved.
5%%
6%% Licensed under the Apache License, Version 2.0 (the "License");
7%% you may not use this file except in compliance with the License.
8%% You may obtain a copy of the License at
9%%
10%%     http://www.apache.org/licenses/LICENSE-2.0
11%%
12%% Unless required by applicable law or agreed to in writing, software
13%% distributed under the License is distributed on an "AS IS" BASIS,
14%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15%% See the License for the specific language governing permissions and
16%% limitations under the License.
17%%
18%% %CopyrightEnd%
19%%
20
21%%
22
23
24-define(XFER_PACKET_SIZE, 65536).
25-define(XFER_WINDOW_SIZE, 20*?XFER_PACKET_SIZE).
26
27%%% Description: SFTP defines
28-define(SSH_SFTP_PROTOCOL_VERSION, 6).
29%%%----------------------------------------------------------------------
30%%% #   SSH_FXP_xxx
31%%% Description: Request and initialization packet types for file transfer
32%%%              protocol.
33%%%----------------------------------------------------------------------
34-define(SSH_FXP_INIT,		1).
35-define(SSH_FXP_VERSION,	2).
36-define(SSH_FXP_OPEN,		3).
37-define(SSH_FXP_CLOSE,		4).
38-define(SSH_FXP_READ,		5).
39-define(SSH_FXP_WRITE,		6).
40-define(SSH_FXP_LSTAT,		7).
41-define(SSH_FXP_FSTAT,		8).
42-define(SSH_FXP_SETSTAT,	9).
43-define(SSH_FXP_FSETSTAT,	10).
44-define(SSH_FXP_OPENDIR,	11).
45-define(SSH_FXP_READDIR,	12).
46-define(SSH_FXP_REMOVE,		13).
47-define(SSH_FXP_MKDIR,		14).
48-define(SSH_FXP_RMDIR,		15).
49-define(SSH_FXP_REALPATH,	16).
50-define(SSH_FXP_STAT,		17).
51-define(SSH_FXP_RENAME,		18).
52-define(SSH_FXP_READLINK,	19).
53-define(SSH_FXP_SYMLINK,	20).
54-define(SSH_FXP_STATUS,		101).
55-define(SSH_FXP_HANDLE,		102).
56-define(SSH_FXP_DATA,		103).
57-define(SSH_FXP_NAME,		104).
58-define(SSH_FXP_ATTRS,		105).
59-define(SSH_FXP_EXTENDED,	200).
60-define(SSH_FXP_EXTENDED_REPLY,	201).
61
62%%%----------------------------------------------------------------------
63%%% #   SSH_FX_xxx
64%%% Description: Response packet types for file transfer protocol.
65%%%----------------------------------------------------------------------
66-define(SSH_FX_OK,			0).
67-define(SSH_FX_EOF,			1).
68-define(SSH_FX_NO_SUCH_FILE,		2).
69-define(SSH_FX_PERMISSION_DENIED,	3).
70-define(SSH_FX_FAILURE,			4).
71-define(SSH_FX_BAD_MESSAGE,		5).
72-define(SSH_FX_NO_CONNECTION,		6).
73-define(SSH_FX_CONNECTION_LOST,		7).
74-define(SSH_FX_OP_UNSUPPORTED,		8).
75-define(SSH_FX_INVALID_HANDLE,          9).
76-define(SSH_FX_NO_SUCH_PATH,            10).
77-define(SSH_FX_FILE_ALREADY_EXISTS,     11).
78-define(SSH_FX_WRITE_PROTECT,           12).
79-define(SSH_FX_NO_MEDIA,                13).
80-define(SSH_FX_NO_SPACE_ON_FILESYSTEM,  14).
81-define(SSH_FX_QUOTA_EXCEEDED,          15).
82-define(SSH_FX_UNKNOWN_PRINCIPLE,       16).
83-define(SSH_FX_LOCK_CONFlICT,           17).
84-define(SSH_FX_DIR_NOT_EMPTY,           18).
85-define(SSH_FX_NOT_A_DIRECTORY,         19).
86-define(SSH_FX_INVALID_FILENAME,        20).
87-define(SSH_FX_LINK_LOOP,               21).
88-define(SSH_FX_CANNOT_DELETE,           22).
89-define(SSH_FX_INVALID_PARAMETER,       23).
90-define(SSH_FX_FILE_IS_A_DIRECTORY,     24).
91-define(SSH_FX_BYTE_RANGE_LOCK_CONFLICT,25).
92-define(SSH_FX_BYTE_RANGE_LOCK_REFUSED, 26).
93-define(SSH_FX_DELETE_PENDING,          27).
94-define(SSH_FX_FILE_CORRUPT,            28).
95-define(SSH_FX_OWNER_INVALID,           29).
96-define(SSH_FX_GROUP_INVALID,           30).
97-define(SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK,31).
98
99%%%----------------------------------------------------------------------
100%%% #   SSH_FILEXFER_xxx
101%%% Description: Bits for file attributes bit mask
102%%%----------------------------------------------------------------------
103-define(SSH_FILEXFER_ATTR_SIZE,            16#00000001). %% vsn 3,5
104-define(SSH_FILEXFER_ATTR_UIDGID,          16#00000002). %% vsn 3
105-define(SSH_FILEXFER_ATTR_PERMISSIONS,     16#00000004). %% vsn 3,5
106-define(SSH_FILEXFER_ATTR_ACCESSTIME,      16#00000008). %% vsn 5
107-define(SSH_FILEXFER_ATTR_ACMODTIME,       16#00000008). %% vsn 3
108-define(SSH_FILEXFER_ATTR_CREATETIME,      16#00000010). %% vsn 5
109-define(SSH_FILEXFER_ATTR_MODIFYTIME,      16#00000020) .%% vsn 5
110-define(SSH_FILEXFER_ATTR_ACL,             16#00000040). %% vsn 5
111-define(SSH_FILEXFER_ATTR_OWNERGROUP,      16#00000080). %% vsn 5
112-define(SSH_FILEXFER_ATTR_SUBSECOND_TIMES, 16#00000100). %% vsn 5
113-define(SSH_FILEXFER_ATTR_BITS,            16#00000200). %% vsn 5
114-define(SSH_FILEXFER_ATTR_EXTENDED,        16#80000000). %% vsn 3,5
115
116%% File types
117-define(SSH_FILEXFER_TYPE_REGULAR,         1).
118-define(SSH_FILEXFER_TYPE_DIRECTORY,       2).
119-define(SSH_FILEXFER_TYPE_SYMLINK,         3).
120-define(SSH_FILEXFER_TYPE_SPECIAL,         4).
121-define(SSH_FILEXFER_TYPE_UNKNOWN,         5).
122-define(SSH_FILEXFER_TYPE_SOCKET,          6).
123-define(SSH_FILEXFER_TYPE_CHAR_DEVICE,     7).
124-define(SSH_FILEXFER_TYPE_BLOCK_DEVICE,    8).
125-define(SSH_FILEXFER_TYPE_FIFO,            9).
126
127%% Permissions
128-define(S_IRUSR,  8#0000400).
129-define(S_IWUSR,  8#0000200).
130-define(S_IXUSR,  8#0000100).
131-define(S_IRGRP,  8#0000040).
132-define(S_IWGRP,  8#0000020).
133-define(S_IXGRP,  8#0000010).
134-define(S_IROTH,  8#0000004).
135-define(S_IWOTH,  8#0000002).
136-define(S_IXOTH,  8#0000001).
137-define(S_ISUID,  8#0004000).
138-define(S_ISGID,  8#0002000).
139-define(S_ISVTX,  8#0001000).
140%% type bits (version 3 only?)
141-define(S_IFMT,   8#0170000).  %% file type mask
142-define(S_IFDIR,  8#0040000).
143-define(S_IFCHR,  8#0020000).
144-define(S_IFBLK,  8#0060000).
145-define(S_IFIFO,  8#0010000).
146-define(S_IFREG,  8#0100000).
147-define(S_IFLNK,  8#0120000).
148-define(S_IFSOCK, 8#0140000).
149
150%% ACE-Type
151-define(ACE4_ACCESS_ALLOWED_ACE_TYPE,    16#00000000).
152-define(ACE4_ACCESS_DENIED_ACE_TYPE,     16#00000001).
153-define(ACE4_SYSTEM_AUDIT_ACE_TYPE,      16#00000002).
154-define(ACE4_SYSTEM_ALARM_ACE_TYPE,      16#00000003).
155
156%% ACE-Flag
157-define(ACE4_FILE_INHERIT_ACE,           16#00000001).
158-define(ACE4_DIRECTORY_INHERIT_ACE,      16#00000002).
159-define(ACE4_NO_PROPAGATE_INHERIT_ACE,   16#00000004).
160-define(ACE4_INHERIT_ONLY_ACE,           16#00000008).
161-define(ACE4_SUCCESSFUL_ACCESS_ACE_FLAG, 16#00000010).
162-define(ACE4_FAILED_ACCESS_ACE_FLAG,     16#00000020).
163-define(ACE4_IDENTIFIER_GROUP,           16#00000040).
164
165%% ACE-Mask
166-define(ACE4_READ_DATA,         16#00000001).
167-define(ACE4_LIST_DIRECTORY,    16#00000001).
168-define(ACE4_WRITE_DATA,        16#00000002).
169-define(ACE4_ADD_FILE,          16#00000002).
170-define(ACE4_APPEND_DATA,       16#00000004).
171-define(ACE4_ADD_SUBDIRECTORY,  16#00000004).
172-define(ACE4_READ_NAMED_ATTRS,  16#00000008).
173-define(ACE4_WRITE_NAMED_ATTRS, 16#00000010).
174-define(ACE4_EXECUTE,           16#00000020).
175-define(ACE4_DELETE_CHILD,      16#00000040).
176-define(ACE4_READ_ATTRIBUTES,   16#00000080).
177-define(ACE4_WRITE_ATTRIBUTES,  16#00000100).
178-define(ACE4_DELETE,            16#00010000).
179-define(ACE4_READ_ACL,          16#00020000).
180-define(ACE4_WRITE_ACL,         16#00040000).
181-define(ACE4_WRITE_OWNER,       16#00080000).
182-define(ACE4_SYNCHRONIZE,       16#00100000).
183
184%% Attrib-bits
185-define(SSH_FILEXFER_ATTR_FLAGS_READONLY,         16#00000001).
186-define(SSH_FILEXFER_ATTR_FLAGS_SYSTEM,           16#00000002).
187-define(SSH_FILEXFER_ATTR_FLAGS_HIDDEN,           16#00000004).
188-define(SSH_FILEXFER_ATTR_FLAGS_CASE_INSENSITIVE, 16#00000008).
189-define(SSH_FILEXFER_ATTR_FLAGS_ARCHIVE,          16#00000010).
190-define(SSH_FILEXFER_ATTR_FLAGS_ENCRYPTED,        16#00000020).
191-define(SSH_FILEXFER_ATTR_FLAGS_COMPRESSED,       16#00000040).
192-define(SSH_FILEXFER_ATTR_FLAGS_SPARSE,           16#00000080).
193-define(SSH_FILEXFER_ATTR_FLAGS_APPEND_ONLY,      16#00000100).
194-define(SSH_FILEXFER_ATTR_FLAGS_IMMUTABLE,        16#00000200).
195-define(SSH_FILEXFER_ATTR_FLAGS_SYNC,             16#00000400).
196
197%% Open flags (version 3)
198-define(SSH_FXF_READ,			16#00000001).
199-define(SSH_FXF_WRITE,  		16#00000002).
200-define(SSH_FXF_APPEND,		        16#00000004).
201-define(SSH_FXF_CREAT,			16#00000008).
202-define(SSH_FXF_TRUNC,			16#00000010).
203-define(SSH_FXF_EXCL,			16#00000020).
204
205%% Open flags (version 5)
206-define(SSH_FXF_ACCESS_DISPOSITION,   16#00000007).
207-define(SSH_FXF_CREATE_NEW,           16#00000000).
208-define(SSH_FXF_CREATE_TRUNCATE,      16#00000001).
209-define(SSH_FXF_OPEN_EXISTING,        16#00000002).
210-define(SSH_FXF_OPEN_OR_CREATE,       16#00000003).
211-define(SSH_FXF_TRUNCATE_EXISTING,    16#00000004).
212-define(SSH_FXF_ACCESS_APPEND_DATA,   16#00000008).
213-define(SSH_FXF_ACCESS_APPEND_DATA_ATOMIC, 16#00000010).
214-define(SSH_FXF_ACCESS_TEXT_MODE,     16#00000020).
215-define(SSH_FXF_ACCESS_READ_LOCK,     16#00000040).
216-define(SSH_FXF_ACCESS_WRITE_LOCK,    16#00000080).
217-define(SSH_FXF_ACCESS_DELETE_LOCK,   16#00000100).
218
219%% Rename flags
220-define(SSH_FXP_RENAME_OVERWRITE, 16#00000001).
221-define(SSH_FXP_RENAME_ATOMIC,    16#00000002).
222-define(SSH_FXP_RENAME_NATIVE,    16#00000004).
223
224
225-define(SSH_FILEXFER_LARGEFILESIZE, (1 bsl 63)).
226
227-record(ssh_xfer_attr,
228	{
229	  type,    %% regular, dirctory, symlink, ...
230	  size,
231	  owner,
232	  group,
233	  permissions,
234	  atime,
235	  atime_nseconds,
236	  createtime,
237	  createtime_nseconds,
238	  mtime,
239	  mtime_nseconds,
240	  acl,
241	  attrib_bits,
242	  extensions    %% list of [{type,data}]
243	 }).
244
245-record(ssh_xfer_ace,
246	{
247	  type,
248	  flag,
249	  mask,
250	  who
251	 }).
252
253%% connection endpoint and server/client info
254-record(ssh_xfer,
255	{
256	  vsn,      %% server version
257	  ext,      %% server extensions
258	  cm,       %% connection mgr
259	  channel   %% SFTP channel
260	 }).
261
262
263
264
265
266
267