1 | /*
|
---|
2 | Unix SMB/CIFS implementation.
|
---|
3 | VFS structures and parameters
|
---|
4 | Copyright (C) Jeremy Allison 1999-2005
|
---|
5 | Copyright (C) Tim Potter 1999
|
---|
6 | Copyright (C) Alexander Bokovoy 2002-2005
|
---|
7 | Copyright (C) Stefan (metze) Metzmacher 2003
|
---|
8 | Copyright (C) Volker Lendecke 2009
|
---|
9 |
|
---|
10 | This program is free software; you can redistribute it and/or modify
|
---|
11 | it under the terms of the GNU General Public License as published by
|
---|
12 | the Free Software Foundation; either version 3 of the License, or
|
---|
13 | (at your option) any later version.
|
---|
14 |
|
---|
15 | This program is distributed in the hope that it will be useful,
|
---|
16 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
18 | GNU General Public License for more details.
|
---|
19 |
|
---|
20 | You should have received a copy of the GNU General Public License
|
---|
21 | along with this program. If not, see <http://www.gnu.org/licenses/>.
|
---|
22 |
|
---|
23 | This work was sponsored by Optifacio Software Services, Inc.
|
---|
24 | */
|
---|
25 |
|
---|
26 | #ifndef _VFS_H
|
---|
27 | #define _VFS_H
|
---|
28 |
|
---|
29 | /* Avoid conflict with an AIX include file */
|
---|
30 |
|
---|
31 | #ifdef vfs_ops
|
---|
32 | #undef vfs_ops
|
---|
33 | #endif
|
---|
34 |
|
---|
35 | /*
|
---|
36 | * As we're now (thanks Andrew ! :-) using file_structs and connection
|
---|
37 | * structs in the vfs - then anyone writing a vfs must include includes.h...
|
---|
38 | */
|
---|
39 |
|
---|
40 | /*
|
---|
41 | * This next constant specifies the version number of the VFS interface
|
---|
42 | * this smbd will load. Increment this if *ANY* changes are made to the
|
---|
43 | * vfs_ops below. JRA.
|
---|
44 | *
|
---|
45 | * If you change anything here, please also update modules/vfs_full_audit.c.
|
---|
46 | * VL.
|
---|
47 | */
|
---|
48 |
|
---|
49 | /* Changed to version 2 for CIFS UNIX extensions (mknod and link added). JRA. */
|
---|
50 | /* Changed to version 3 for POSIX acl extensions. JRA. */
|
---|
51 | /* Changed to version 4 for cascaded VFS interface. Alexander Bokovoy. */
|
---|
52 | /* Changed to version 5 for sendfile addition. JRA. */
|
---|
53 | /* Changed to version 6 for the new module system, fixed cascading and quota functions. --metze */
|
---|
54 | /* Changed to version 7 to include the get_nt_acl info parameter. JRA. */
|
---|
55 | /* Changed to version 8 includes EA calls. JRA. */
|
---|
56 | /* Changed to version 9 to include the get_shadow_data call. --metze */
|
---|
57 | /* Changed to version 10 to include pread/pwrite calls. */
|
---|
58 | /* Changed to version 11 to include seekdir/telldir/rewinddir calls. JRA */
|
---|
59 | /* Changed to version 12 to add mask and attributes to opendir(). JRA
|
---|
60 | Also include aio calls. JRA. */
|
---|
61 | /* Changed to version 13 as the internal structure of files_struct has changed. JRA */
|
---|
62 | /* Changed to version 14 as we had to change DIR to SMB_STRUCT_DIR. JRA */
|
---|
63 | /* Changed to version 15 as we added the statvfs call. JRA */
|
---|
64 | /* Changed to version 16 as we added the getlock call. JRA */
|
---|
65 | /* Changed to version 17 as we removed redundant connection_struct parameters. --jpeach */
|
---|
66 | /* Changed to version 18 to add fsp parameter to the open call -- jpeach
|
---|
67 | Also include kernel_flock call - jmcd */
|
---|
68 | /* Changed to version 19, kernel change notify has been merged
|
---|
69 | Also included linux setlease call - jmcd */
|
---|
70 | /* Changed to version 20, use ntimes call instead of utime (greater
|
---|
71 | * timestamp resolition. JRA. */
|
---|
72 | /* Changed to version21 to add chflags operation -- jpeach */
|
---|
73 | /* Changed to version22 to add lchown operation -- jra */
|
---|
74 | /* Leave at 22 - not yet released. But change set_nt_acl to return an NTSTATUS. jra. */
|
---|
75 | /* Leave at 22 - not yet released. Add file_id_create operation. --metze */
|
---|
76 | /* Leave at 22 - not yet released. Change all BOOL parameters (int) to bool. jra. */
|
---|
77 | /* Leave at 22 - not yet released. Added recvfile. */
|
---|
78 | /* Leave at 22 - not yet released. Change get_nt_acl to return NTSTATUS - vl */
|
---|
79 | /* Leave at 22 - not yet released. Change get_nt_acl to *not* take a
|
---|
80 | * files_struct. - obnox.*/
|
---|
81 | /* Leave at 22 - not yet released. Remove parameter fd from fget_nt_acl. - obnox */
|
---|
82 | /* Leave at 22 - not yet released. Remove parameter fd from gset_nt_acl. - obnox */
|
---|
83 | /* Leave at 22 - not yet released. Remove parameter fd from pread. - obnox */
|
---|
84 | /* Leave at 22 - not yet released. Remove parameter fd from pwrite. - obnox */
|
---|
85 | /* Leave at 22 - not yet released. Remove parameter fd from lseek. - obnox */
|
---|
86 | /* Leave at 22 - not yet released. Remove parameter fd from fsync. - obnox */
|
---|
87 | /* Leave at 22 - not yet released. Remove parameter fd from fstat. - obnox */
|
---|
88 | /* Leave at 22 - not yet released. Remove parameter fd from fchmod. - obnox */
|
---|
89 | /* Leave at 22 - not yet released. Remove parameter fd from fchown. - obnox */
|
---|
90 | /* Leave at 22 - not yet released. Remove parameter fd from ftruncate. - obnox */
|
---|
91 | /* Leave at 22 - not yet released. Remove parameter fd from lock. - obnox */
|
---|
92 | /* Leave at 22 - not yet released. Remove parameter fd from kernel_flock. - obnox */
|
---|
93 | /* Leave at 22 - not yet released. Remove parameter fd from linux_setlease. - obnox */
|
---|
94 | /* Leave at 22 - not yet released. Remove parameter fd from getlock. - obnox */
|
---|
95 | /* Leave at 22 - not yet released. Remove parameter fd from sys_acl_get_fd. - obnox */
|
---|
96 | /* Leave at 22 - not yet released. Remove parameter fd from fchmod_acl. - obnox */
|
---|
97 | /* Leave at 22 - not yet released. Remove parameter fd from sys_acl_set_fd. - obnox */
|
---|
98 | /* Leave at 22 - not yet released. Remove parameter fd from fgetxattr. - obnox */
|
---|
99 | /* Leave at 22 - not yet released. Remove parameter fd from flistxattr. - obnox */
|
---|
100 | /* Leave at 22 - not yet released. Remove parameter fd from fremovexattr. - obnox */
|
---|
101 | /* Leave at 22 - not yet released. Remove parameter fd from fsetxattr. - obnox */
|
---|
102 | /* Leave at 22 - not yet released. Remove parameter fd from aio_cancel. - obnox */
|
---|
103 | /* Leave at 22 - not yet released. Remove parameter fd from read. - obnox */
|
---|
104 | /* Leave at 22 - not yet released. Remove parameter fd from write. - obnox */
|
---|
105 | /* Leave at 22 - not yet released. Remove parameter fromfd from sendfile. - obnox */
|
---|
106 | /* Leave at 22 - not yet released. Remove parameter fromfd from recvfile. - obnox */
|
---|
107 | /* Leave at 22 - not yet released. Additional change: add operations for offline files -- ab */
|
---|
108 | /* Leave at 22 - not yet released. Add the streaminfo call. -- jpeach, vl */
|
---|
109 | /* Leave at 22 - not yet released. Remove parameter fd from close_fn. - obnox */
|
---|
110 | /* Changed to version 23 - remove set_nt_acl call. This can only be done via an
|
---|
111 | open handle. JRA. */
|
---|
112 | /* Changed to version 24 - make security descriptor const in fset_nt_acl. JRA. */
|
---|
113 | /* Changed to version 25 - Jelmer's change from SMB_BIG_UINT to uint64_t. */
|
---|
114 | /* Leave at 25 - not yet released. Add create_file call. -- tprouty. */
|
---|
115 | /* Leave at 25 - not yet released. Add create time to ntimes. -- tstecher. */
|
---|
116 | /* Leave at 25 - not yet released. Add get_alloc_size call. -- tprouty. */
|
---|
117 | /* Leave at 25 - not yet released. Add SMB_STRUCT_STAT to readdir. - sdann */
|
---|
118 | /* Leave at 25 - not yet released. Add init_search_op call. - sdann */
|
---|
119 | /* Leave at 25 - not yet released. Add locking calls. -- zkirsch. */
|
---|
120 | /* Leave at 25 - not yet released. Add strict locking calls. -- drichards. */
|
---|
121 | /* Changed to version 26 - Plumb struct smb_filename to SMB_VFS_CREATE_FILE,
|
---|
122 | SMB_VFS_OPEN, SMB_VFS_STAT, SMB_VFS_LSTAT,
|
---|
123 | SMB_VFS_RENAME, SMB_VFS_UNLINK, SMB_VFS_NTIMES. */
|
---|
124 | /* Changed to version 27 - not yet released. Added enum timestamp_set_resolution
|
---|
125 | * return to fs_capabilities call. JRA. */
|
---|
126 | /* Leave at 27 - not yet released. Add translate_name VFS call to convert
|
---|
127 | UNIX names to Windows supported names -- asrinivasan. */
|
---|
128 | /* Changed to version 28 - Add private_flags uint32_t to CREATE call. */
|
---|
129 | /* Leave at 28 - not yet released. Change realpath to assume NULL and return a
|
---|
130 | malloc'ed path. JRA. */
|
---|
131 | /* Leave at 28 - not yet released. Move posix_fallocate into the VFS
|
---|
132 | where it belongs. JRA. */
|
---|
133 | /* Leave at 28 - not yet released. Rename posix_fallocate to fallocate
|
---|
134 | to split out the two possible uses. JRA. */
|
---|
135 | /* Leave at 28 - not yet released. Add fdopendir. JRA. */
|
---|
136 | /* Leave at 28 - not yet released. Rename open function to open_fn. - gd */
|
---|
137 | /* Leave at 28 - not yet released. Make getwd function always return malloced memory. JRA. */
|
---|
138 | /* Bump to version 29 - Samba 3.6.0 will ship with interface version 28. */
|
---|
139 | /* Leave at 29 - not yet releases. Add fsctl. Richard Sharpe */
|
---|
140 | /* Leave at 29 - not yet released. add SMB_VFS_GET_DFS_REFERRAL() - metze */
|
---|
141 | /* Leave at 29 - not yet released. Remove l{list,get,set,remove}xattr - abartlet */
|
---|
142 | /* Leave at 29 - not yet released. move to plain off_t - abartlet */
|
---|
143 | /* Leave at 29 - not yet released. Remove sys_acl functions other than set and get - abartlet */
|
---|
144 | /* Leave at 29 - not yet released. Added backup_intent bool to files_struct - JRA */
|
---|
145 | /* Leave at 29 - not yet released. Add durable handle functions - metze/obnox */
|
---|
146 | /* Leave at 29 - not yet released. Added sys_acl_blob_get_file and sys_acl_blob_get_fd */
|
---|
147 | /* Bump to version 30 - Samba 4.0.0 will ship with interface version 30 */
|
---|
148 | /* Leave at 30 - not yet released. Added conn->cwd to save vfs_GetWd() calls. */
|
---|
149 | /* Leave at 30 - not yet released. Changed sys_acl_blob_get_file interface to remove type */
|
---|
150 | /* Bump to version 31 - Samba 4.1.0 will ship with interface version 31 */
|
---|
151 | /* Leave at 31 - not yet released. Make struct vuid_cache_entry in
|
---|
152 | connection_struct a pointer. */
|
---|
153 | /* Leave at 31 - not yet released. Add share_access to vuid_cache_entry. */
|
---|
154 | /* Leave at 31 - not yet released. add SMB_VFS_COPY_CHUNK() */
|
---|
155 | /* Leave at 31 - not yet released. Remove the unused
|
---|
156 | fsp->pending_break_messages array */
|
---|
157 | /* Leave at 31 - not yet released. add SMB_VFS_[GET/SET]_COMPRESSION() */
|
---|
158 |
|
---|
159 | /* Bump to version 32 - Samba 4.2 will ship with that. */
|
---|
160 | /* Version 32 - Add "lease" to CREATE_FILE operation */
|
---|
161 | /* Version 32 - Add "lease" to struct files_struct */
|
---|
162 | /* Version 32 - Add SMB_VFS_READDIR_ATTR() */
|
---|
163 | /* Version 32 - Add in and out create context blobs to create_file */
|
---|
164 | /* Version 32 - Remove unnecessary SMB_VFS_DISK_FREE() small_query parameter */
|
---|
165 | /* Bump to version 33 - Samba 4.3 will ship with that. */
|
---|
166 | /* Version 33 - change fallocate mode flags param from enum->uint32_t */
|
---|
167 | /* Version 33 - Add snapshot create/delete calls */
|
---|
168 | /* Version 33 - Add OS X SMB2 AAPL copyfile extension flag to fsp */
|
---|
169 | /* Version 33 - Remove notify_watch_fn */
|
---|
170 | /* Bump to version 34 - Samba 4.4 will ship with that */
|
---|
171 | /* Version 34 - Remove bool posix_open, add uint64_t posix_flags */
|
---|
172 | /* Version 34 - Added bool posix_pathnames to struct smb_request */
|
---|
173 |
|
---|
174 | #define SMB_VFS_INTERFACE_VERSION 34
|
---|
175 |
|
---|
176 | /*
|
---|
177 | All intercepted VFS operations must be declared as static functions inside module source
|
---|
178 | in order to keep smbd namespace unpolluted. See source of audit, extd_audit, fake_perms and recycle
|
---|
179 | example VFS modules for more details.
|
---|
180 | */
|
---|
181 |
|
---|
182 | /* VFS operations structure */
|
---|
183 |
|
---|
184 | struct vfs_handle_struct;
|
---|
185 | struct connection_struct;
|
---|
186 | struct files_struct;
|
---|
187 | struct security_descriptor;
|
---|
188 | struct vfs_statvfs_struct;
|
---|
189 | struct smb_request;
|
---|
190 | struct ea_list;
|
---|
191 | struct smb_file_time;
|
---|
192 | struct blocking_lock_record;
|
---|
193 | struct smb_filename;
|
---|
194 | struct dfs_GetDFSReferral;
|
---|
195 |
|
---|
196 | typedef union unid_t {
|
---|
197 | uid_t uid;
|
---|
198 | gid_t gid;
|
---|
199 | } unid_t;
|
---|
200 |
|
---|
201 | struct fd_handle {
|
---|
202 | size_t ref_count;
|
---|
203 | int fd;
|
---|
204 | uint64_t position_information;
|
---|
205 | off_t pos;
|
---|
206 | uint32_t private_options; /* NT Create options, but we only look at
|
---|
207 | * NTCREATEX_OPTIONS_PRIVATE_DENY_DOS and
|
---|
208 | * NTCREATEX_OPTIONS_PRIVATE_DENY_FCB and
|
---|
209 | * NTCREATEX_OPTIONS_PRIVATE_DELETE_ON_CLOSE
|
---|
210 | * for print files *only*, where
|
---|
211 | * DELETE_ON_CLOSE is not stored in the share
|
---|
212 | * mode database.
|
---|
213 | */
|
---|
214 | unsigned long gen_id;
|
---|
215 | };
|
---|
216 |
|
---|
217 | struct fsp_lease {
|
---|
218 | size_t ref_count;
|
---|
219 | struct smbd_server_connection *sconn;
|
---|
220 | struct tevent_timer *timeout;
|
---|
221 | struct smb2_lease lease;
|
---|
222 | };
|
---|
223 |
|
---|
224 | typedef struct files_struct {
|
---|
225 | struct files_struct *next, *prev;
|
---|
226 | uint64_t fnum;
|
---|
227 | struct smbXsrv_open *op;
|
---|
228 | struct connection_struct *conn;
|
---|
229 | struct fd_handle *fh;
|
---|
230 | unsigned int num_smb_operations;
|
---|
231 | struct file_id file_id;
|
---|
232 | uint64_t initial_allocation_size; /* Faked up initial allocation on disk. */
|
---|
233 | uint16_t file_pid;
|
---|
234 | uint64_t vuid; /* SMB2 compat */
|
---|
235 | struct write_cache *wcp;
|
---|
236 | struct timeval open_time;
|
---|
237 | uint32_t access_mask; /* NTCreateX access bits (FILE_READ_DATA etc.) */
|
---|
238 | uint32_t share_access; /* NTCreateX share constants (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE). */
|
---|
239 |
|
---|
240 | bool kernel_share_modes_taken;
|
---|
241 |
|
---|
242 | bool update_write_time_triggered;
|
---|
243 | struct tevent_timer *update_write_time_event;
|
---|
244 | bool update_write_time_on_close;
|
---|
245 | struct timespec close_write_time;
|
---|
246 | bool write_time_forced;
|
---|
247 |
|
---|
248 | int oplock_type;
|
---|
249 | struct fsp_lease *lease; /* Not yet used. Placeholder for leases. */
|
---|
250 | int sent_oplock_break;
|
---|
251 | struct tevent_timer *oplock_timeout;
|
---|
252 | struct lock_struct last_lock_failure;
|
---|
253 | int current_lock_count; /* Count the number of outstanding locks and pending locks. */
|
---|
254 |
|
---|
255 | bool can_lock;
|
---|
256 | bool can_read;
|
---|
257 | bool can_write;
|
---|
258 | bool modified;
|
---|
259 | bool is_directory;
|
---|
260 | bool aio_write_behind;
|
---|
261 | bool initial_delete_on_close; /* Only set at NTCreateX if file was created. */
|
---|
262 | bool delete_on_close;
|
---|
263 | uint64_t posix_flags;
|
---|
264 | bool is_sparse;
|
---|
265 | bool backup_intent; /* Handle was successfully opened with backup intent
|
---|
266 | and opener has privilege to do so. */
|
---|
267 | bool aapl_copyfile_supported;
|
---|
268 | struct smb_filename *fsp_name;
|
---|
269 | uint32_t name_hash; /* Jenkins hash of full pathname. */
|
---|
270 | uint64_t mid; /* Mid of the operation that created us. */
|
---|
271 |
|
---|
272 | struct vfs_fsp_data *vfs_extension;
|
---|
273 | struct fake_file_handle *fake_file_handle;
|
---|
274 |
|
---|
275 | struct notify_change_buf *notify;
|
---|
276 |
|
---|
277 | struct files_struct *base_fsp; /* placeholder for delete on close */
|
---|
278 |
|
---|
279 | /*
|
---|
280 | * Read-only cached brlock record, thrown away when the
|
---|
281 | * brlock.tdb seqnum changes. This avoids fetching data from
|
---|
282 | * the brlock.tdb on every read/write call.
|
---|
283 | */
|
---|
284 | int brlock_seqnum;
|
---|
285 | struct byte_range_lock *brlock_rec;
|
---|
286 |
|
---|
287 | struct dptr_struct *dptr;
|
---|
288 |
|
---|
289 | /* if not NULL, means this is a print file */
|
---|
290 | struct print_file_data *print_file;
|
---|
291 |
|
---|
292 | unsigned num_aio_requests;
|
---|
293 | struct tevent_req **aio_requests;
|
---|
294 |
|
---|
295 | /*
|
---|
296 | * If a close request comes in while we still have aio_requests
|
---|
297 | * around, we need to hold back the close. When all aio_requests are
|
---|
298 | * done, the aio completion routines need tevent_wait_done() on
|
---|
299 | * this. A bit ugly, but before we have close_file() fully async
|
---|
300 | * possibly the simplest approach. Thanks, Jeremy for the idea.
|
---|
301 | */
|
---|
302 | struct tevent_req *deferred_close;
|
---|
303 | } files_struct;
|
---|
304 |
|
---|
305 | #define FSP_POSIX_FLAGS_OPEN 0x01
|
---|
306 | #define FSP_POSIX_FLAGS_RENAME 0x02
|
---|
307 | #define FSP_POSIX_FLAGS_PATHNAMES 0x04
|
---|
308 |
|
---|
309 | #define FSP_POSIX_FLAGS_ALL \
|
---|
310 | (FSP_POSIX_FLAGS_OPEN | \
|
---|
311 | FSP_POSIX_FLAGS_PATHNAMES | \
|
---|
312 | FSP_POSIX_FLAGS_RENAME)
|
---|
313 |
|
---|
314 | struct vuid_cache_entry {
|
---|
315 | struct auth_session_info *session_info;
|
---|
316 | uint64_t vuid; /* SMB2 compat */
|
---|
317 | bool read_only;
|
---|
318 | uint32_t share_access;
|
---|
319 | };
|
---|
320 |
|
---|
321 | struct vuid_cache {
|
---|
322 | unsigned int next_entry;
|
---|
323 | struct vuid_cache_entry array[VUID_CACHE_SIZE];
|
---|
324 | };
|
---|
325 |
|
---|
326 | typedef struct {
|
---|
327 | char *name;
|
---|
328 | bool is_wild;
|
---|
329 | } name_compare_entry;
|
---|
330 |
|
---|
331 | struct dfree_cached_info {
|
---|
332 | time_t last_dfree_time;
|
---|
333 | uint64_t dfree_ret;
|
---|
334 | uint64_t bsize;
|
---|
335 | uint64_t dfree;
|
---|
336 | uint64_t dsize;
|
---|
337 | };
|
---|
338 |
|
---|
339 | struct share_params {
|
---|
340 | int service;
|
---|
341 | };
|
---|
342 |
|
---|
343 | typedef struct connection_struct {
|
---|
344 | struct connection_struct *next, *prev;
|
---|
345 | struct smbd_server_connection *sconn; /* can be NULL */
|
---|
346 | struct smbXsrv_tcon *tcon; /* can be NULL */
|
---|
347 | uint32_t cnum; /* an index passed over the wire */
|
---|
348 | struct share_params *params;
|
---|
349 | bool force_user;
|
---|
350 | struct vuid_cache *vuid_cache;
|
---|
351 | bool printer;
|
---|
352 | bool ipc;
|
---|
353 | bool read_only; /* Attributes for the current user of the share. */
|
---|
354 | uint32_t share_access;
|
---|
355 | /* Does this filesystem honor
|
---|
356 | sub second timestamps on files
|
---|
357 | and directories when setting time ? */
|
---|
358 | enum timestamp_set_resolution ts_res;
|
---|
359 | char *connectpath;
|
---|
360 | char *origpath;
|
---|
361 | char *cwd; /* Working directory. */
|
---|
362 |
|
---|
363 | struct vfs_handle_struct *vfs_handles; /* for the new plugins */
|
---|
364 |
|
---|
365 | /*
|
---|
366 | * This represents the user information on this connection. Depending
|
---|
367 | * on the vuid using this tid, this might change per SMB request.
|
---|
368 | */
|
---|
369 | struct auth_session_info *session_info;
|
---|
370 |
|
---|
371 | /*
|
---|
372 | * If the "force group" parameter is set, this is the primary gid that
|
---|
373 | * may be used in the users token, depending on the vuid using this tid.
|
---|
374 | */
|
---|
375 | gid_t force_group_gid;
|
---|
376 |
|
---|
377 | uint64_t vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
|
---|
378 |
|
---|
379 | time_t lastused;
|
---|
380 | time_t lastused_count;
|
---|
381 | int num_files_open;
|
---|
382 | unsigned int num_smb_operations; /* Count of smb operations on this tree. */
|
---|
383 | int encrypt_level;
|
---|
384 | bool encrypted_tid;
|
---|
385 |
|
---|
386 | /* Semantics requested by the client or forced by the server config. */
|
---|
387 | bool case_sensitive;
|
---|
388 | bool case_preserve;
|
---|
389 | bool short_case_preserve;
|
---|
390 |
|
---|
391 | /* Semantics provided by the underlying filesystem. */
|
---|
392 | int fs_capabilities;
|
---|
393 | /* Device number of the directory of the share mount.
|
---|
394 | Used to ensure unique FileIndex returns. */
|
---|
395 | SMB_DEV_T base_share_dev;
|
---|
396 |
|
---|
397 | name_compare_entry *hide_list; /* Per-share list of files to return as hidden. */
|
---|
398 | name_compare_entry *veto_list; /* Per-share list of files to veto (never show). */
|
---|
399 | name_compare_entry *veto_oplock_list; /* Per-share list of files to refuse oplocks on. */
|
---|
400 | name_compare_entry *aio_write_behind_list; /* Per-share list of files to use aio write behind on. */
|
---|
401 | struct dfree_cached_info *dfree_info;
|
---|
402 | struct trans_state *pending_trans;
|
---|
403 |
|
---|
404 | struct rpc_pipe_client *spoolss_pipe;
|
---|
405 |
|
---|
406 | } connection_struct;
|
---|
407 |
|
---|
408 | struct smbd_smb2_request;
|
---|
409 | struct privilege_paths;
|
---|
410 |
|
---|
411 | struct smb_request {
|
---|
412 | uint8_t cmd;
|
---|
413 | uint16_t flags2;
|
---|
414 | uint16_t smbpid;
|
---|
415 | uint64_t mid; /* For compatibility with SMB2. */
|
---|
416 | uint32_t seqnum;
|
---|
417 | uint64_t vuid; /* For compatibility with SMB2. */
|
---|
418 | uint32_t tid;
|
---|
419 | uint8_t wct;
|
---|
420 | const uint16_t *vwv;
|
---|
421 | uint16_t buflen;
|
---|
422 | const uint8_t *buf;
|
---|
423 | const uint8_t *inbuf;
|
---|
424 |
|
---|
425 | /*
|
---|
426 | * Async handling in the main smb processing loop is directed by
|
---|
427 | * outbuf: reply_xxx routines indicate sync behaviour by putting their
|
---|
428 | * reply into "outbuf". If they leave it as NULL, they take care of it
|
---|
429 | * themselves, possibly later.
|
---|
430 | *
|
---|
431 | * If async handling is wanted, the reply_xxx routine must make sure
|
---|
432 | * that it talloc_move()s the smb_req somewhere else.
|
---|
433 | */
|
---|
434 | uint8_t *outbuf;
|
---|
435 |
|
---|
436 | size_t unread_bytes;
|
---|
437 | bool encrypted;
|
---|
438 | connection_struct *conn;
|
---|
439 | struct smbd_server_connection *sconn;
|
---|
440 | struct smbXsrv_connection *xconn;
|
---|
441 | struct smb_perfcount_data pcd;
|
---|
442 |
|
---|
443 | /*
|
---|
444 | * Chained request handling
|
---|
445 | */
|
---|
446 | struct files_struct *chain_fsp;
|
---|
447 |
|
---|
448 | /*
|
---|
449 | * state information for async smb handling
|
---|
450 | */
|
---|
451 | void *async_priv;
|
---|
452 |
|
---|
453 | /*
|
---|
454 | * Back pointer to smb2 request.
|
---|
455 | */
|
---|
456 | struct smbd_smb2_request *smb2req;
|
---|
457 |
|
---|
458 | /*
|
---|
459 | * Pathnames used if request done
|
---|
460 | * under privilege.
|
---|
461 | */
|
---|
462 | struct privilege_paths *priv_paths;
|
---|
463 |
|
---|
464 | /*
|
---|
465 | * Request list for chained requests, we're part of it.
|
---|
466 | */
|
---|
467 | struct smb_request **chain;
|
---|
468 |
|
---|
469 | struct timeval request_time;
|
---|
470 |
|
---|
471 | bool posix_pathnames;
|
---|
472 | };
|
---|
473 |
|
---|
474 | /*
|
---|
475 | * Info about an alternate data stream
|
---|
476 | */
|
---|
477 |
|
---|
478 | struct stream_struct {
|
---|
479 | off_t size;
|
---|
480 | off_t alloc_size;
|
---|
481 | char *name;
|
---|
482 | };
|
---|
483 |
|
---|
484 | /* time info */
|
---|
485 | struct smb_file_time {
|
---|
486 | struct timespec mtime;
|
---|
487 | struct timespec atime;
|
---|
488 | struct timespec ctime;
|
---|
489 | struct timespec create_time;
|
---|
490 | };
|
---|
491 |
|
---|
492 | /*
|
---|
493 | * smb_filename
|
---|
494 | */
|
---|
495 | struct smb_filename {
|
---|
496 | char *base_name;
|
---|
497 | char *stream_name;
|
---|
498 | char *original_lcomp;
|
---|
499 | SMB_STRUCT_STAT st;
|
---|
500 | };
|
---|
501 |
|
---|
502 | #define VFS_FIND(__fn__) while (handle->fns->__fn__##_fn==NULL) { \
|
---|
503 | handle = handle->next; \
|
---|
504 | }
|
---|
505 |
|
---|
506 | enum vfs_translate_direction {
|
---|
507 | vfs_translate_to_unix = 0,
|
---|
508 | vfs_translate_to_windows
|
---|
509 | };
|
---|
510 |
|
---|
511 | enum vfs_fallocate_flags {
|
---|
512 | VFS_FALLOCATE_FL_KEEP_SIZE = 0x0001,
|
---|
513 | VFS_FALLOCATE_FL_PUNCH_HOLE = 0x0002,
|
---|
514 | };
|
---|
515 |
|
---|
516 | /*
|
---|
517 | Available VFS operations. These values must be in sync with vfs_ops struct
|
---|
518 | (struct vfs_fn_pointers and struct vfs_handle_pointers inside of struct vfs_ops).
|
---|
519 | In particular, if new operations are added to vfs_ops, appropriate constants
|
---|
520 | should be added to vfs_op_type so that order of them kept same as in vfs_ops.
|
---|
521 | */
|
---|
522 | struct shadow_copy_data;
|
---|
523 |
|
---|
524 | struct vfs_fn_pointers {
|
---|
525 | /* Disk operations */
|
---|
526 |
|
---|
527 | int (*connect_fn)(struct vfs_handle_struct *handle, const char *service, const char *user);
|
---|
528 | void (*disconnect_fn)(struct vfs_handle_struct *handle);
|
---|
529 | uint64_t (*disk_free_fn)(struct vfs_handle_struct *handle, const char *path, uint64_t *bsize,
|
---|
530 | uint64_t *dfree, uint64_t *dsize);
|
---|
531 | int (*get_quota_fn)(struct vfs_handle_struct *handle, const char *path,
|
---|
532 | enum SMB_QUOTA_TYPE qtype, unid_t id,
|
---|
533 | SMB_DISK_QUOTA *qt);
|
---|
534 | int (*set_quota_fn)(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt);
|
---|
535 | int (*get_shadow_copy_data_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, struct shadow_copy_data *shadow_copy_data, bool labels);
|
---|
536 | int (*statvfs_fn)(struct vfs_handle_struct *handle, const char *path, struct vfs_statvfs_struct *statbuf);
|
---|
537 | uint32_t (*fs_capabilities_fn)(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res);
|
---|
538 |
|
---|
539 | /*
|
---|
540 | * Note: that "struct dfs_GetDFSReferral *r"
|
---|
541 | * needs to be a valid TALLOC_CTX
|
---|
542 | */
|
---|
543 | NTSTATUS (*get_dfs_referrals_fn)(struct vfs_handle_struct *handle,
|
---|
544 | struct dfs_GetDFSReferral *r);
|
---|
545 |
|
---|
546 | /* Directory operations */
|
---|
547 |
|
---|
548 | DIR *(*opendir_fn)(struct vfs_handle_struct *handle, const char *fname, const char *mask, uint32_t attributes);
|
---|
549 | DIR *(*fdopendir_fn)(struct vfs_handle_struct *handle, files_struct *fsp, const char *mask, uint32_t attributes);
|
---|
550 | struct dirent *(*readdir_fn)(struct vfs_handle_struct *handle,
|
---|
551 | DIR *dirp,
|
---|
552 | SMB_STRUCT_STAT *sbuf);
|
---|
553 | void (*seekdir_fn)(struct vfs_handle_struct *handle, DIR *dirp, long offset);
|
---|
554 | long (*telldir_fn)(struct vfs_handle_struct *handle, DIR *dirp);
|
---|
555 | void (*rewind_dir_fn)(struct vfs_handle_struct *handle, DIR *dirp);
|
---|
556 | int (*mkdir_fn)(struct vfs_handle_struct *handle, const char *path, mode_t mode);
|
---|
557 | int (*rmdir_fn)(struct vfs_handle_struct *handle, const char *path);
|
---|
558 | int (*closedir_fn)(struct vfs_handle_struct *handle, DIR *dir);
|
---|
559 | void (*init_search_op_fn)(struct vfs_handle_struct *handle, DIR *dirp);
|
---|
560 |
|
---|
561 | /* File operations */
|
---|
562 |
|
---|
563 | int (*open_fn)(struct vfs_handle_struct *handle,
|
---|
564 | struct smb_filename *smb_fname, files_struct *fsp,
|
---|
565 | int flags, mode_t mode);
|
---|
566 | NTSTATUS (*create_file_fn)(struct vfs_handle_struct *handle,
|
---|
567 | struct smb_request *req,
|
---|
568 | uint16_t root_dir_fid,
|
---|
569 | struct smb_filename *smb_fname,
|
---|
570 | uint32_t access_mask,
|
---|
571 | uint32_t share_access,
|
---|
572 | uint32_t create_disposition,
|
---|
573 | uint32_t create_options,
|
---|
574 | uint32_t file_attributes,
|
---|
575 | uint32_t oplock_request,
|
---|
576 | struct smb2_lease *lease,
|
---|
577 | uint64_t allocation_size,
|
---|
578 | uint32_t private_flags,
|
---|
579 | struct security_descriptor *sd,
|
---|
580 | struct ea_list *ea_list,
|
---|
581 | files_struct **result,
|
---|
582 | int *pinfo,
|
---|
583 | const struct smb2_create_blobs *in_context_blobs,
|
---|
584 | struct smb2_create_blobs *out_context_blobs);
|
---|
585 | int (*close_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
|
---|
586 | ssize_t (*read_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, void *data, size_t n);
|
---|
587 | ssize_t (*pread_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, void *data, size_t n, off_t offset);
|
---|
588 | struct tevent_req *(*pread_send_fn)(struct vfs_handle_struct *handle,
|
---|
589 | TALLOC_CTX *mem_ctx,
|
---|
590 | struct tevent_context *ev,
|
---|
591 | struct files_struct *fsp,
|
---|
592 | void *data,
|
---|
593 | size_t n, off_t offset);
|
---|
594 | ssize_t (*pread_recv_fn)(struct tevent_req *req, int *err);
|
---|
595 | ssize_t (*write_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n);
|
---|
596 | ssize_t (*pwrite_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n, off_t offset);
|
---|
597 | struct tevent_req *(*pwrite_send_fn)(struct vfs_handle_struct *handle,
|
---|
598 | TALLOC_CTX *mem_ctx,
|
---|
599 | struct tevent_context *ev,
|
---|
600 | struct files_struct *fsp,
|
---|
601 | const void *data,
|
---|
602 | size_t n, off_t offset);
|
---|
603 | ssize_t (*pwrite_recv_fn)(struct tevent_req *req, int *err);
|
---|
604 | off_t (*lseek_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t offset, int whence);
|
---|
605 | ssize_t (*sendfile_fn)(struct vfs_handle_struct *handle, int tofd, files_struct *fromfsp, const DATA_BLOB *header, off_t offset, size_t count);
|
---|
606 | ssize_t (*recvfile_fn)(struct vfs_handle_struct *handle, int fromfd, files_struct *tofsp, off_t offset, size_t count);
|
---|
607 | int (*rename_fn)(struct vfs_handle_struct *handle,
|
---|
608 | const struct smb_filename *smb_fname_src,
|
---|
609 | const struct smb_filename *smb_fname_dst);
|
---|
610 | int (*fsync_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
|
---|
611 | struct tevent_req *(*fsync_send_fn)(struct vfs_handle_struct *handle,
|
---|
612 | TALLOC_CTX *mem_ctx,
|
---|
613 | struct tevent_context *ev,
|
---|
614 | struct files_struct *fsp);
|
---|
615 | int (*fsync_recv_fn)(struct tevent_req *req, int *err);
|
---|
616 | int (*stat_fn)(struct vfs_handle_struct *handle, struct smb_filename *smb_fname);
|
---|
617 | int (*fstat_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_STAT *sbuf);
|
---|
618 | int (*lstat_fn)(struct vfs_handle_struct *handle, struct smb_filename *smb_filename);
|
---|
619 | uint64_t (*get_alloc_size_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const SMB_STRUCT_STAT *sbuf);
|
---|
620 | int (*unlink_fn)(struct vfs_handle_struct *handle,
|
---|
621 | const struct smb_filename *smb_fname);
|
---|
622 | int (*chmod_fn)(struct vfs_handle_struct *handle, const char *path, mode_t mode);
|
---|
623 | int (*fchmod_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, mode_t mode);
|
---|
624 | int (*chown_fn)(struct vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid);
|
---|
625 | int (*fchown_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, uid_t uid, gid_t gid);
|
---|
626 | int (*lchown_fn)(struct vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid);
|
---|
627 | int (*chdir_fn)(struct vfs_handle_struct *handle, const char *path);
|
---|
628 | char *(*getwd_fn)(struct vfs_handle_struct *handle);
|
---|
629 | int (*ntimes_fn)(struct vfs_handle_struct *handle,
|
---|
630 | const struct smb_filename *smb_fname,
|
---|
631 | struct smb_file_time *ft);
|
---|
632 | int (*ftruncate_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t offset);
|
---|
633 | int (*fallocate_fn)(struct vfs_handle_struct *handle,
|
---|
634 | struct files_struct *fsp,
|
---|
635 | uint32_t mode,
|
---|
636 | off_t offset,
|
---|
637 | off_t len);
|
---|
638 | bool (*lock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int op, off_t offset, off_t count, int type);
|
---|
639 | int (*kernel_flock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp,
|
---|
640 | uint32_t share_mode, uint32_t access_mask);
|
---|
641 | int (*linux_setlease_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int leasetype);
|
---|
642 | bool (*getlock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t *poffset, off_t *pcount, int *ptype, pid_t *ppid);
|
---|
643 | int (*symlink_fn)(struct vfs_handle_struct *handle, const char *oldpath, const char *newpath);
|
---|
644 | int (*readlink_fn)(struct vfs_handle_struct *handle, const char *path, char *buf, size_t bufsiz);
|
---|
645 | int (*link_fn)(struct vfs_handle_struct *handle, const char *oldpath, const char *newpath);
|
---|
646 | int (*mknod_fn)(struct vfs_handle_struct *handle, const char *path, mode_t mode, SMB_DEV_T dev);
|
---|
647 | char *(*realpath_fn)(struct vfs_handle_struct *handle, const char *path);
|
---|
648 | int (*chflags_fn)(struct vfs_handle_struct *handle, const char *path, unsigned int flags);
|
---|
649 | struct file_id (*file_id_create_fn)(struct vfs_handle_struct *handle,
|
---|
650 | const SMB_STRUCT_STAT *sbuf);
|
---|
651 | struct tevent_req *(*copy_chunk_send_fn)(struct vfs_handle_struct *handle,
|
---|
652 | TALLOC_CTX *mem_ctx,
|
---|
653 | struct tevent_context *ev,
|
---|
654 | struct files_struct *src_fsp,
|
---|
655 | off_t src_off,
|
---|
656 | struct files_struct *dest_fsp,
|
---|
657 | off_t dest_off,
|
---|
658 | off_t num);
|
---|
659 | NTSTATUS (*copy_chunk_recv_fn)(struct vfs_handle_struct *handle,
|
---|
660 | struct tevent_req *req,
|
---|
661 | off_t *copied);
|
---|
662 | NTSTATUS (*get_compression_fn)(struct vfs_handle_struct *handle,
|
---|
663 | TALLOC_CTX *mem_ctx,
|
---|
664 | struct files_struct *fsp,
|
---|
665 | struct smb_filename *smb_fname,
|
---|
666 | uint16_t *_compression_fmt);
|
---|
667 | NTSTATUS (*set_compression_fn)(struct vfs_handle_struct *handle,
|
---|
668 | TALLOC_CTX *mem_ctx,
|
---|
669 | struct files_struct *fsp,
|
---|
670 | uint16_t compression_fmt);
|
---|
671 | NTSTATUS (*snap_check_path_fn)(struct vfs_handle_struct *handle,
|
---|
672 | TALLOC_CTX *mem_ctx,
|
---|
673 | const char *service_path,
|
---|
674 | char **base_volume);
|
---|
675 | NTSTATUS (*snap_create_fn)(struct vfs_handle_struct *handle,
|
---|
676 | TALLOC_CTX *mem_ctx,
|
---|
677 | const char *base_volume,
|
---|
678 | time_t *tstamp,
|
---|
679 | bool rw,
|
---|
680 | char **base_path,
|
---|
681 | char **snap_path);
|
---|
682 | NTSTATUS (*snap_delete_fn)(struct vfs_handle_struct *handle,
|
---|
683 | TALLOC_CTX *mem_ctx,
|
---|
684 | char *base_path,
|
---|
685 | char *snap_path);
|
---|
686 |
|
---|
687 | NTSTATUS (*streaminfo_fn)(struct vfs_handle_struct *handle,
|
---|
688 | struct files_struct *fsp,
|
---|
689 | const char *fname,
|
---|
690 | TALLOC_CTX *mem_ctx,
|
---|
691 | unsigned int *num_streams,
|
---|
692 | struct stream_struct **streams);
|
---|
693 |
|
---|
694 | int (*get_real_filename_fn)(struct vfs_handle_struct *handle,
|
---|
695 | const char *path,
|
---|
696 | const char *name,
|
---|
697 | TALLOC_CTX *mem_ctx,
|
---|
698 | char **found_name);
|
---|
699 |
|
---|
700 | const char *(*connectpath_fn)(struct vfs_handle_struct *handle,
|
---|
701 | const char *filename);
|
---|
702 |
|
---|
703 | NTSTATUS (*brl_lock_windows_fn)(struct vfs_handle_struct *handle,
|
---|
704 | struct byte_range_lock *br_lck,
|
---|
705 | struct lock_struct *plock,
|
---|
706 | bool blocking_lock);
|
---|
707 |
|
---|
708 | bool (*brl_unlock_windows_fn)(struct vfs_handle_struct *handle,
|
---|
709 | struct messaging_context *msg_ctx,
|
---|
710 | struct byte_range_lock *br_lck,
|
---|
711 | const struct lock_struct *plock);
|
---|
712 |
|
---|
713 | bool (*brl_cancel_windows_fn)(struct vfs_handle_struct *handle,
|
---|
714 | struct byte_range_lock *br_lck,
|
---|
715 | struct lock_struct *plock);
|
---|
716 |
|
---|
717 | bool (*strict_lock_fn)(struct vfs_handle_struct *handle,
|
---|
718 | struct files_struct *fsp,
|
---|
719 | struct lock_struct *plock);
|
---|
720 |
|
---|
721 | void (*strict_unlock_fn)(struct vfs_handle_struct *handle,
|
---|
722 | struct files_struct *fsp,
|
---|
723 | struct lock_struct *plock);
|
---|
724 |
|
---|
725 | NTSTATUS (*translate_name_fn)(struct vfs_handle_struct *handle,
|
---|
726 | const char *name,
|
---|
727 | enum vfs_translate_direction direction,
|
---|
728 | TALLOC_CTX *mem_ctx,
|
---|
729 | char **mapped_name);
|
---|
730 |
|
---|
731 | NTSTATUS (*fsctl_fn)(struct vfs_handle_struct *handle,
|
---|
732 | struct files_struct *fsp,
|
---|
733 | TALLOC_CTX *ctx,
|
---|
734 | uint32_t function,
|
---|
735 | uint16_t req_flags,
|
---|
736 | const uint8_t *_in_data,
|
---|
737 | uint32_t in_len,
|
---|
738 | uint8_t **_out_data,
|
---|
739 | uint32_t max_out_len,
|
---|
740 | uint32_t *out_len);
|
---|
741 |
|
---|
742 | /* NT ACL operations. */
|
---|
743 |
|
---|
744 | NTSTATUS (*fget_nt_acl_fn)(struct vfs_handle_struct *handle,
|
---|
745 | struct files_struct *fsp,
|
---|
746 | uint32_t security_info,
|
---|
747 | TALLOC_CTX *mem_ctx,
|
---|
748 | struct security_descriptor **ppdesc);
|
---|
749 | NTSTATUS (*get_nt_acl_fn)(struct vfs_handle_struct *handle,
|
---|
750 | const char *name,
|
---|
751 | uint32_t security_info,
|
---|
752 | TALLOC_CTX *mem_ctx,
|
---|
753 | struct security_descriptor **ppdesc);
|
---|
754 | NTSTATUS (*fset_nt_acl_fn)(struct vfs_handle_struct *handle,
|
---|
755 | struct files_struct *fsp,
|
---|
756 | uint32_t security_info_sent,
|
---|
757 | const struct security_descriptor *psd);
|
---|
758 |
|
---|
759 | NTSTATUS (*audit_file_fn)(struct vfs_handle_struct *handle,
|
---|
760 | struct smb_filename *file,
|
---|
761 | struct security_acl *sacl,
|
---|
762 | uint32_t access_requested,
|
---|
763 | uint32_t access_denied);
|
---|
764 |
|
---|
765 | /* POSIX ACL operations. */
|
---|
766 |
|
---|
767 | int (*chmod_acl_fn)(struct vfs_handle_struct *handle, const char *name, mode_t mode);
|
---|
768 | int (*fchmod_acl_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, mode_t mode);
|
---|
769 |
|
---|
770 | SMB_ACL_T (*sys_acl_get_file_fn)(struct vfs_handle_struct *handle,
|
---|
771 | const char *path_p,
|
---|
772 | SMB_ACL_TYPE_T type,
|
---|
773 | TALLOC_CTX *mem_ctx);
|
---|
774 | SMB_ACL_T (*sys_acl_get_fd_fn)(struct vfs_handle_struct *handle,
|
---|
775 | struct files_struct *fsp,
|
---|
776 | TALLOC_CTX *mem_ctx);
|
---|
777 | int (*sys_acl_blob_get_file_fn)(struct vfs_handle_struct *handle,
|
---|
778 | const char *path_p,
|
---|
779 | TALLOC_CTX *mem_ctx,
|
---|
780 | char **blob_description,
|
---|
781 | DATA_BLOB *blob);
|
---|
782 | int (*sys_acl_blob_get_fd_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp,
|
---|
783 | TALLOC_CTX *mem_ctx, char **blob_description,
|
---|
784 | DATA_BLOB *blob);
|
---|
785 | int (*sys_acl_set_file_fn)(struct vfs_handle_struct *handle, const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
|
---|
786 | int (*sys_acl_set_fd_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_ACL_T theacl);
|
---|
787 | int (*sys_acl_delete_def_file_fn)(struct vfs_handle_struct *handle, const char *path);
|
---|
788 |
|
---|
789 | /* EA operations. */
|
---|
790 | ssize_t (*getxattr_fn)(struct vfs_handle_struct *handle,const char *path, const char *name, void *value, size_t size);
|
---|
791 | ssize_t (*fgetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size);
|
---|
792 | ssize_t (*listxattr_fn)(struct vfs_handle_struct *handle, const char *path, char *list, size_t size);
|
---|
793 | ssize_t (*flistxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size);
|
---|
794 | int (*removexattr_fn)(struct vfs_handle_struct *handle, const char *path, const char *name);
|
---|
795 | int (*fremovexattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name);
|
---|
796 | int (*setxattr_fn)(struct vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags);
|
---|
797 | int (*fsetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags);
|
---|
798 |
|
---|
799 | /* aio operations */
|
---|
800 | bool (*aio_force_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
|
---|
801 |
|
---|
802 | /* offline operations */
|
---|
803 | bool (*is_offline_fn)(struct vfs_handle_struct *handle,
|
---|
804 | const struct smb_filename *fname,
|
---|
805 | SMB_STRUCT_STAT *sbuf);
|
---|
806 | int (*set_offline_fn)(struct vfs_handle_struct *handle,
|
---|
807 | const struct smb_filename *fname);
|
---|
808 |
|
---|
809 | /* durable handle operations */
|
---|
810 | NTSTATUS (*durable_cookie_fn)(struct vfs_handle_struct *handle,
|
---|
811 | struct files_struct *fsp,
|
---|
812 | TALLOC_CTX *mem_ctx,
|
---|
813 | DATA_BLOB *cookie);
|
---|
814 | NTSTATUS (*durable_disconnect_fn)(struct vfs_handle_struct *handle,
|
---|
815 | struct files_struct *fsp,
|
---|
816 | const DATA_BLOB old_cookie,
|
---|
817 | TALLOC_CTX *mem_ctx,
|
---|
818 | DATA_BLOB *new_cookie);
|
---|
819 | NTSTATUS (*durable_reconnect_fn)(struct vfs_handle_struct *handle,
|
---|
820 | struct smb_request *smb1req,
|
---|
821 | struct smbXsrv_open *op,
|
---|
822 | const DATA_BLOB old_cookie,
|
---|
823 | TALLOC_CTX *mem_ctx,
|
---|
824 | struct files_struct **fsp,
|
---|
825 | DATA_BLOB *new_cookie);
|
---|
826 |
|
---|
827 | NTSTATUS (*readdir_attr_fn)(struct vfs_handle_struct *handle,
|
---|
828 | const struct smb_filename *fname,
|
---|
829 | TALLOC_CTX *mem_ctx,
|
---|
830 | struct readdir_attr_data **attr_data);
|
---|
831 | };
|
---|
832 |
|
---|
833 | /*
|
---|
834 | VFS operation description. Each VFS module registers an array of vfs_op_tuple to VFS subsystem,
|
---|
835 | which describes all operations this module is willing to intercept.
|
---|
836 | VFS subsystem initializes then the conn->vfs_ops and conn->vfs_opaque_ops structs
|
---|
837 | using this information.
|
---|
838 | */
|
---|
839 |
|
---|
840 | typedef struct vfs_handle_struct {
|
---|
841 | struct vfs_handle_struct *next, *prev;
|
---|
842 | const char *param;
|
---|
843 | struct connection_struct *conn;
|
---|
844 | const struct vfs_fn_pointers *fns;
|
---|
845 | void *data;
|
---|
846 | void (*free_data)(void **data);
|
---|
847 | } vfs_handle_struct;
|
---|
848 |
|
---|
849 |
|
---|
850 | typedef struct vfs_statvfs_struct {
|
---|
851 | /* For undefined recommended transfer size return -1 in that field */
|
---|
852 | uint32_t OptimalTransferSize; /* bsize on some os, iosize on other os */
|
---|
853 | uint32_t BlockSize;
|
---|
854 |
|
---|
855 | /*
|
---|
856 | The next three fields are in terms of the block size.
|
---|
857 | (above). If block size is unknown, 4096 would be a
|
---|
858 | reasonable block size for a server to report.
|
---|
859 | Note that returning the blocks/blocksavail removes need
|
---|
860 | to make a second call (to QFSInfo level 0x103 to get this info.
|
---|
861 | UserBlockAvail is typically less than or equal to BlocksAvail,
|
---|
862 | if no distinction is made return the same value in each.
|
---|
863 | */
|
---|
864 |
|
---|
865 | uint64_t TotalBlocks;
|
---|
866 | uint64_t BlocksAvail; /* bfree */
|
---|
867 | uint64_t UserBlocksAvail; /* bavail */
|
---|
868 |
|
---|
869 | /* For undefined Node fields or FSID return -1 */
|
---|
870 | uint64_t TotalFileNodes;
|
---|
871 | uint64_t FreeFileNodes;
|
---|
872 | uint64_t FsIdentifier; /* fsid */
|
---|
873 | /* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */
|
---|
874 | /* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */
|
---|
875 |
|
---|
876 | int FsCapabilities;
|
---|
877 | } vfs_statvfs_struct;
|
---|
878 |
|
---|
879 | /* Add a new FSP extension of the given type. Returns a pointer to the
|
---|
880 | * extenstion data.
|
---|
881 | */
|
---|
882 | #define VFS_ADD_FSP_EXTENSION(handle, fsp, type, destroy_fn) \
|
---|
883 | vfs_add_fsp_extension_notype(handle, (fsp), sizeof(type), (destroy_fn))
|
---|
884 |
|
---|
885 | /* Return a pointer to the existing FSP extension data. */
|
---|
886 | #define VFS_FETCH_FSP_EXTENSION(handle, fsp) \
|
---|
887 | vfs_fetch_fsp_extension(handle, (fsp))
|
---|
888 |
|
---|
889 | /* Return the talloc context associated with an FSP extension. */
|
---|
890 | #define VFS_MEMCTX_FSP_EXTENSION(handle, fsp) \
|
---|
891 | vfs_memctx_fsp_extension(handle, (fsp))
|
---|
892 |
|
---|
893 | /* Remove and destroy an FSP extension. */
|
---|
894 | #define VFS_REMOVE_FSP_EXTENSION(handle, fsp) \
|
---|
895 | vfs_remove_fsp_extension((handle), (fsp))
|
---|
896 |
|
---|
897 | #define SMB_VFS_HANDLE_GET_DATA(handle, datap, type, ret) { \
|
---|
898 | if (!(handle)||((datap=(type *)(handle)->data)==NULL)) { \
|
---|
899 | DEBUG(0,("%s() failed to get vfs_handle->data!\n",__FUNCTION__)); \
|
---|
900 | ret; \
|
---|
901 | } \
|
---|
902 | }
|
---|
903 |
|
---|
904 | #define SMB_VFS_HANDLE_SET_DATA(handle, datap, free_fn, type, ret) { \
|
---|
905 | if (!(handle)) { \
|
---|
906 | DEBUG(0,("%s() failed to set handle->data!\n",__FUNCTION__)); \
|
---|
907 | ret; \
|
---|
908 | } else { \
|
---|
909 | if ((handle)->free_data) { \
|
---|
910 | (handle)->free_data(&(handle)->data); \
|
---|
911 | } \
|
---|
912 | (handle)->data = (void *)datap; \
|
---|
913 | (handle)->free_data = free_fn; \
|
---|
914 | } \
|
---|
915 | }
|
---|
916 |
|
---|
917 | #define SMB_VFS_HANDLE_FREE_DATA(handle) { \
|
---|
918 | if ((handle) && (handle)->free_data) { \
|
---|
919 | (handle)->free_data(&(handle)->data); \
|
---|
920 | } \
|
---|
921 | }
|
---|
922 |
|
---|
923 | /* Check whether module-specific data handle was already allocated or not */
|
---|
924 | #define SMB_VFS_HANDLE_TEST_DATA(handle) ( !(handle) || !(handle)->data ? False : True )
|
---|
925 |
|
---|
926 | #define SMB_VFS_OP(x) ((void *) x)
|
---|
927 |
|
---|
928 | #define DEFAULT_VFS_MODULE_NAME "/[Default VFS]/"
|
---|
929 |
|
---|
930 | #include "vfs_macros.h"
|
---|
931 |
|
---|
932 | int smb_vfs_call_connect(struct vfs_handle_struct *handle,
|
---|
933 | const char *service, const char *user);
|
---|
934 | void smb_vfs_call_disconnect(struct vfs_handle_struct *handle);
|
---|
935 | uint64_t smb_vfs_call_disk_free(struct vfs_handle_struct *handle,
|
---|
936 | const char *path, uint64_t *bsize,
|
---|
937 | uint64_t *dfree, uint64_t *dsize);
|
---|
938 | int smb_vfs_call_get_quota(struct vfs_handle_struct *handle, const char *path,
|
---|
939 | enum SMB_QUOTA_TYPE qtype, unid_t id,
|
---|
940 | SMB_DISK_QUOTA *qt);
|
---|
941 | int smb_vfs_call_set_quota(struct vfs_handle_struct *handle,
|
---|
942 | enum SMB_QUOTA_TYPE qtype, unid_t id,
|
---|
943 | SMB_DISK_QUOTA *qt);
|
---|
944 | int smb_vfs_call_get_shadow_copy_data(struct vfs_handle_struct *handle,
|
---|
945 | struct files_struct *fsp,
|
---|
946 | struct shadow_copy_data *shadow_copy_data,
|
---|
947 | bool labels);
|
---|
948 | int smb_vfs_call_statvfs(struct vfs_handle_struct *handle, const char *path,
|
---|
949 | struct vfs_statvfs_struct *statbuf);
|
---|
950 | uint32_t smb_vfs_call_fs_capabilities(struct vfs_handle_struct *handle,
|
---|
951 | enum timestamp_set_resolution *p_ts_res);
|
---|
952 | /*
|
---|
953 | * Note: that "struct dfs_GetDFSReferral *r" needs to be a valid TALLOC_CTX
|
---|
954 | */
|
---|
955 | NTSTATUS smb_vfs_call_get_dfs_referrals(struct vfs_handle_struct *handle,
|
---|
956 | struct dfs_GetDFSReferral *r);
|
---|
957 | DIR *smb_vfs_call_opendir(struct vfs_handle_struct *handle,
|
---|
958 | const char *fname, const char *mask,
|
---|
959 | uint32_t attributes);
|
---|
960 | DIR *smb_vfs_call_fdopendir(struct vfs_handle_struct *handle,
|
---|
961 | struct files_struct *fsp,
|
---|
962 | const char *mask,
|
---|
963 | uint32_t attributes);
|
---|
964 | struct dirent *smb_vfs_call_readdir(struct vfs_handle_struct *handle,
|
---|
965 | DIR *dirp,
|
---|
966 | SMB_STRUCT_STAT *sbuf);
|
---|
967 | void smb_vfs_call_seekdir(struct vfs_handle_struct *handle,
|
---|
968 | DIR *dirp, long offset);
|
---|
969 | long smb_vfs_call_telldir(struct vfs_handle_struct *handle,
|
---|
970 | DIR *dirp);
|
---|
971 | void smb_vfs_call_rewind_dir(struct vfs_handle_struct *handle,
|
---|
972 | DIR *dirp);
|
---|
973 | int smb_vfs_call_mkdir(struct vfs_handle_struct *handle, const char *path,
|
---|
974 | mode_t mode);
|
---|
975 | int smb_vfs_call_rmdir(struct vfs_handle_struct *handle, const char *path);
|
---|
976 | int smb_vfs_call_closedir(struct vfs_handle_struct *handle,
|
---|
977 | DIR *dir);
|
---|
978 | void smb_vfs_call_init_search_op(struct vfs_handle_struct *handle,
|
---|
979 | DIR *dirp);
|
---|
980 | int smb_vfs_call_open(struct vfs_handle_struct *handle,
|
---|
981 | struct smb_filename *smb_fname, struct files_struct *fsp,
|
---|
982 | int flags, mode_t mode);
|
---|
983 | NTSTATUS smb_vfs_call_create_file(struct vfs_handle_struct *handle,
|
---|
984 | struct smb_request *req,
|
---|
985 | uint16_t root_dir_fid,
|
---|
986 | struct smb_filename *smb_fname,
|
---|
987 | uint32_t access_mask,
|
---|
988 | uint32_t share_access,
|
---|
989 | uint32_t create_disposition,
|
---|
990 | uint32_t create_options,
|
---|
991 | uint32_t file_attributes,
|
---|
992 | uint32_t oplock_request,
|
---|
993 | struct smb2_lease *lease,
|
---|
994 | uint64_t allocation_size,
|
---|
995 | uint32_t private_flags,
|
---|
996 | struct security_descriptor *sd,
|
---|
997 | struct ea_list *ea_list,
|
---|
998 | files_struct **result,
|
---|
999 | int *pinfo,
|
---|
1000 | const struct smb2_create_blobs *in_context_blobs,
|
---|
1001 | struct smb2_create_blobs *out_context_blobs);
|
---|
1002 | int smb_vfs_call_close(struct vfs_handle_struct *handle,
|
---|
1003 | struct files_struct *fsp);
|
---|
1004 | ssize_t smb_vfs_call_read(struct vfs_handle_struct *handle,
|
---|
1005 | struct files_struct *fsp, void *data, size_t n);
|
---|
1006 | ssize_t smb_vfs_call_pread(struct vfs_handle_struct *handle,
|
---|
1007 | struct files_struct *fsp, void *data, size_t n,
|
---|
1008 | off_t offset);
|
---|
1009 | struct tevent_req *smb_vfs_call_pread_send(struct vfs_handle_struct *handle,
|
---|
1010 | TALLOC_CTX *mem_ctx,
|
---|
1011 | struct tevent_context *ev,
|
---|
1012 | struct files_struct *fsp,
|
---|
1013 | void *data,
|
---|
1014 | size_t n, off_t offset);
|
---|
1015 | ssize_t SMB_VFS_PREAD_RECV(struct tevent_req *req, int *perrno);
|
---|
1016 |
|
---|
1017 | ssize_t smb_vfs_call_write(struct vfs_handle_struct *handle,
|
---|
1018 | struct files_struct *fsp, const void *data,
|
---|
1019 | size_t n);
|
---|
1020 | ssize_t smb_vfs_call_pwrite(struct vfs_handle_struct *handle,
|
---|
1021 | struct files_struct *fsp, const void *data,
|
---|
1022 | size_t n, off_t offset);
|
---|
1023 | struct tevent_req *smb_vfs_call_pwrite_send(struct vfs_handle_struct *handle,
|
---|
1024 | TALLOC_CTX *mem_ctx,
|
---|
1025 | struct tevent_context *ev,
|
---|
1026 | struct files_struct *fsp,
|
---|
1027 | const void *data,
|
---|
1028 | size_t n, off_t offset);
|
---|
1029 | ssize_t SMB_VFS_PWRITE_RECV(struct tevent_req *req, int *perrno);
|
---|
1030 |
|
---|
1031 | off_t smb_vfs_call_lseek(struct vfs_handle_struct *handle,
|
---|
1032 | struct files_struct *fsp, off_t offset,
|
---|
1033 | int whence);
|
---|
1034 | ssize_t smb_vfs_call_sendfile(struct vfs_handle_struct *handle, int tofd,
|
---|
1035 | files_struct *fromfsp, const DATA_BLOB *header,
|
---|
1036 | off_t offset, size_t count);
|
---|
1037 | ssize_t smb_vfs_call_recvfile(struct vfs_handle_struct *handle, int fromfd,
|
---|
1038 | files_struct *tofsp, off_t offset,
|
---|
1039 | size_t count);
|
---|
1040 | int smb_vfs_call_rename(struct vfs_handle_struct *handle,
|
---|
1041 | const struct smb_filename *smb_fname_src,
|
---|
1042 | const struct smb_filename *smb_fname_dst);
|
---|
1043 | int smb_vfs_call_fsync(struct vfs_handle_struct *handle,
|
---|
1044 | struct files_struct *fsp);
|
---|
1045 |
|
---|
1046 | struct tevent_req *smb_vfs_call_fsync_send(struct vfs_handle_struct *handle,
|
---|
1047 | TALLOC_CTX *mem_ctx,
|
---|
1048 | struct tevent_context *ev,
|
---|
1049 | struct files_struct *fsp);
|
---|
1050 | int SMB_VFS_FSYNC_RECV(struct tevent_req *req, int *perrno);
|
---|
1051 |
|
---|
1052 | int smb_vfs_call_stat(struct vfs_handle_struct *handle,
|
---|
1053 | struct smb_filename *smb_fname);
|
---|
1054 | int smb_vfs_call_fstat(struct vfs_handle_struct *handle,
|
---|
1055 | struct files_struct *fsp, SMB_STRUCT_STAT *sbuf);
|
---|
1056 | int smb_vfs_call_lstat(struct vfs_handle_struct *handle,
|
---|
1057 | struct smb_filename *smb_filename);
|
---|
1058 | uint64_t smb_vfs_call_get_alloc_size(struct vfs_handle_struct *handle,
|
---|
1059 | struct files_struct *fsp,
|
---|
1060 | const SMB_STRUCT_STAT *sbuf);
|
---|
1061 | int smb_vfs_call_unlink(struct vfs_handle_struct *handle,
|
---|
1062 | const struct smb_filename *smb_fname);
|
---|
1063 | int smb_vfs_call_chmod(struct vfs_handle_struct *handle, const char *path,
|
---|
1064 | mode_t mode);
|
---|
1065 | int smb_vfs_call_fchmod(struct vfs_handle_struct *handle,
|
---|
1066 | struct files_struct *fsp, mode_t mode);
|
---|
1067 | int smb_vfs_call_chown(struct vfs_handle_struct *handle, const char *path,
|
---|
1068 | uid_t uid, gid_t gid);
|
---|
1069 | int smb_vfs_call_fchown(struct vfs_handle_struct *handle,
|
---|
1070 | struct files_struct *fsp, uid_t uid, gid_t gid);
|
---|
1071 | int smb_vfs_call_lchown(struct vfs_handle_struct *handle, const char *path,
|
---|
1072 | uid_t uid, gid_t gid);
|
---|
1073 | int smb_vfs_call_chdir(struct vfs_handle_struct *handle, const char *path);
|
---|
1074 | char *smb_vfs_call_getwd(struct vfs_handle_struct *handle);
|
---|
1075 | int smb_vfs_call_ntimes(struct vfs_handle_struct *handle,
|
---|
1076 | const struct smb_filename *smb_fname,
|
---|
1077 | struct smb_file_time *ft);
|
---|
1078 | int smb_vfs_call_ftruncate(struct vfs_handle_struct *handle,
|
---|
1079 | struct files_struct *fsp, off_t offset);
|
---|
1080 | int smb_vfs_call_fallocate(struct vfs_handle_struct *handle,
|
---|
1081 | struct files_struct *fsp,
|
---|
1082 | uint32_t mode,
|
---|
1083 | off_t offset,
|
---|
1084 | off_t len);
|
---|
1085 | bool smb_vfs_call_lock(struct vfs_handle_struct *handle,
|
---|
1086 | struct files_struct *fsp, int op, off_t offset,
|
---|
1087 | off_t count, int type);
|
---|
1088 | int smb_vfs_call_kernel_flock(struct vfs_handle_struct *handle,
|
---|
1089 | struct files_struct *fsp, uint32_t share_mode,
|
---|
1090 | uint32_t access_mask);
|
---|
1091 | int smb_vfs_call_linux_setlease(struct vfs_handle_struct *handle,
|
---|
1092 | struct files_struct *fsp, int leasetype);
|
---|
1093 | bool smb_vfs_call_getlock(struct vfs_handle_struct *handle,
|
---|
1094 | struct files_struct *fsp, off_t *poffset,
|
---|
1095 | off_t *pcount, int *ptype, pid_t *ppid);
|
---|
1096 | int smb_vfs_call_symlink(struct vfs_handle_struct *handle, const char *oldpath,
|
---|
1097 | const char *newpath);
|
---|
1098 | int smb_vfs_call_readlink(struct vfs_handle_struct *handle,
|
---|
1099 | const char *path, char *buf, size_t bufsiz);
|
---|
1100 | int smb_vfs_call_link(struct vfs_handle_struct *handle, const char *oldpath,
|
---|
1101 | const char *newpath);
|
---|
1102 | int smb_vfs_call_mknod(struct vfs_handle_struct *handle, const char *path,
|
---|
1103 | mode_t mode, SMB_DEV_T dev);
|
---|
1104 | char *smb_vfs_call_realpath(struct vfs_handle_struct *handle, const char *path);
|
---|
1105 | int smb_vfs_call_chflags(struct vfs_handle_struct *handle, const char *path,
|
---|
1106 | unsigned int flags);
|
---|
1107 | struct file_id smb_vfs_call_file_id_create(struct vfs_handle_struct *handle,
|
---|
1108 | const SMB_STRUCT_STAT *sbuf);
|
---|
1109 | NTSTATUS smb_vfs_call_streaminfo(struct vfs_handle_struct *handle,
|
---|
1110 | struct files_struct *fsp,
|
---|
1111 | const char *fname,
|
---|
1112 | TALLOC_CTX *mem_ctx,
|
---|
1113 | unsigned int *num_streams,
|
---|
1114 | struct stream_struct **streams);
|
---|
1115 | int smb_vfs_call_get_real_filename(struct vfs_handle_struct *handle,
|
---|
1116 | const char *path, const char *name,
|
---|
1117 | TALLOC_CTX *mem_ctx, char **found_name);
|
---|
1118 | const char *smb_vfs_call_connectpath(struct vfs_handle_struct *handle,
|
---|
1119 | const char *filename);
|
---|
1120 | NTSTATUS smb_vfs_call_brl_lock_windows(struct vfs_handle_struct *handle,
|
---|
1121 | struct byte_range_lock *br_lck,
|
---|
1122 | struct lock_struct *plock,
|
---|
1123 | bool blocking_lock);
|
---|
1124 | bool smb_vfs_call_brl_unlock_windows(struct vfs_handle_struct *handle,
|
---|
1125 | struct messaging_context *msg_ctx,
|
---|
1126 | struct byte_range_lock *br_lck,
|
---|
1127 | const struct lock_struct *plock);
|
---|
1128 | bool smb_vfs_call_brl_cancel_windows(struct vfs_handle_struct *handle,
|
---|
1129 | struct byte_range_lock *br_lck,
|
---|
1130 | struct lock_struct *plock);
|
---|
1131 | bool smb_vfs_call_strict_lock(struct vfs_handle_struct *handle,
|
---|
1132 | struct files_struct *fsp,
|
---|
1133 | struct lock_struct *plock);
|
---|
1134 | void smb_vfs_call_strict_unlock(struct vfs_handle_struct *handle,
|
---|
1135 | struct files_struct *fsp,
|
---|
1136 | struct lock_struct *plock);
|
---|
1137 | NTSTATUS smb_vfs_call_translate_name(struct vfs_handle_struct *handle,
|
---|
1138 | const char *name,
|
---|
1139 | enum vfs_translate_direction direction,
|
---|
1140 | TALLOC_CTX *mem_ctx,
|
---|
1141 | char **mapped_name);
|
---|
1142 | NTSTATUS smb_vfs_call_fsctl(struct vfs_handle_struct *handle,
|
---|
1143 | struct files_struct *fsp,
|
---|
1144 | TALLOC_CTX *ctx,
|
---|
1145 | uint32_t function,
|
---|
1146 | uint16_t req_flags,
|
---|
1147 | const uint8_t *_in_data,
|
---|
1148 | uint32_t in_len,
|
---|
1149 | uint8_t **_out_data,
|
---|
1150 | uint32_t max_out_len,
|
---|
1151 | uint32_t *out_len);
|
---|
1152 | struct tevent_req *smb_vfs_call_copy_chunk_send(struct vfs_handle_struct *handle,
|
---|
1153 | TALLOC_CTX *mem_ctx,
|
---|
1154 | struct tevent_context *ev,
|
---|
1155 | struct files_struct *src_fsp,
|
---|
1156 | off_t src_off,
|
---|
1157 | struct files_struct *dest_fsp,
|
---|
1158 | off_t dest_off,
|
---|
1159 | off_t num);
|
---|
1160 | NTSTATUS smb_vfs_call_copy_chunk_recv(struct vfs_handle_struct *handle,
|
---|
1161 | struct tevent_req *req,
|
---|
1162 | off_t *copied);
|
---|
1163 | NTSTATUS smb_vfs_call_get_compression(struct vfs_handle_struct *handle,
|
---|
1164 | TALLOC_CTX *mem_ctx,
|
---|
1165 | struct files_struct *fsp,
|
---|
1166 | struct smb_filename *smb_fname,
|
---|
1167 | uint16_t *_compression_fmt);
|
---|
1168 | NTSTATUS smb_vfs_call_set_compression(struct vfs_handle_struct *handle,
|
---|
1169 | TALLOC_CTX *mem_ctx,
|
---|
1170 | struct files_struct *fsp,
|
---|
1171 | uint16_t compression_fmt);
|
---|
1172 | NTSTATUS smb_vfs_call_snap_check_path(vfs_handle_struct *handle,
|
---|
1173 | TALLOC_CTX *mem_ctx,
|
---|
1174 | const char *service_path,
|
---|
1175 | char **base_volume);
|
---|
1176 | NTSTATUS smb_vfs_call_snap_create(struct vfs_handle_struct *handle,
|
---|
1177 | TALLOC_CTX *mem_ctx,
|
---|
1178 | const char *base_volume,
|
---|
1179 | time_t *tstamp,
|
---|
1180 | bool rw,
|
---|
1181 | char **base_path,
|
---|
1182 | char **snap_path);
|
---|
1183 | NTSTATUS smb_vfs_call_snap_delete(struct vfs_handle_struct *handle,
|
---|
1184 | TALLOC_CTX *mem_ctx,
|
---|
1185 | char *base_path,
|
---|
1186 | char *snap_path);
|
---|
1187 | NTSTATUS smb_vfs_call_fget_nt_acl(struct vfs_handle_struct *handle,
|
---|
1188 | struct files_struct *fsp,
|
---|
1189 | uint32_t security_info,
|
---|
1190 | TALLOC_CTX *mem_ctx,
|
---|
1191 | struct security_descriptor **ppdesc);
|
---|
1192 | NTSTATUS smb_vfs_call_get_nt_acl(struct vfs_handle_struct *handle,
|
---|
1193 | const char *name,
|
---|
1194 | uint32_t security_info,
|
---|
1195 | TALLOC_CTX *mem_ctx,
|
---|
1196 | struct security_descriptor **ppdesc);
|
---|
1197 | NTSTATUS smb_vfs_call_fset_nt_acl(struct vfs_handle_struct *handle,
|
---|
1198 | struct files_struct *fsp,
|
---|
1199 | uint32_t security_info_sent,
|
---|
1200 | const struct security_descriptor *psd);
|
---|
1201 | NTSTATUS smb_vfs_call_audit_file(struct vfs_handle_struct *handle,
|
---|
1202 | struct smb_filename *file,
|
---|
1203 | struct security_acl *sacl,
|
---|
1204 | uint32_t access_requested,
|
---|
1205 | uint32_t access_denied);
|
---|
1206 | int smb_vfs_call_chmod_acl(struct vfs_handle_struct *handle, const char *name,
|
---|
1207 | mode_t mode);
|
---|
1208 | int smb_vfs_call_fchmod_acl(struct vfs_handle_struct *handle,
|
---|
1209 | struct files_struct *fsp, mode_t mode);
|
---|
1210 | SMB_ACL_T smb_vfs_call_sys_acl_get_file(struct vfs_handle_struct *handle,
|
---|
1211 | const char *path_p,
|
---|
1212 | SMB_ACL_TYPE_T type,
|
---|
1213 | TALLOC_CTX *mem_ctx);
|
---|
1214 | SMB_ACL_T smb_vfs_call_sys_acl_get_fd(struct vfs_handle_struct *handle,
|
---|
1215 | struct files_struct *fsp,
|
---|
1216 | TALLOC_CTX *mem_ctx);
|
---|
1217 | int smb_vfs_call_sys_acl_blob_get_file(struct vfs_handle_struct *handle,
|
---|
1218 | const char *path_p,
|
---|
1219 | TALLOC_CTX *mem_ctx,
|
---|
1220 | char **blob_description,
|
---|
1221 | DATA_BLOB *blob);
|
---|
1222 | int smb_vfs_call_sys_acl_blob_get_fd(struct vfs_handle_struct *handle,
|
---|
1223 | struct files_struct *fsp,
|
---|
1224 | TALLOC_CTX *mem_ctx,
|
---|
1225 | char **blob_description,
|
---|
1226 | DATA_BLOB *blob);
|
---|
1227 | int smb_vfs_call_sys_acl_set_file(struct vfs_handle_struct *handle,
|
---|
1228 | const char *name, SMB_ACL_TYPE_T acltype,
|
---|
1229 | SMB_ACL_T theacl);
|
---|
1230 | int smb_vfs_call_sys_acl_set_fd(struct vfs_handle_struct *handle,
|
---|
1231 | struct files_struct *fsp, SMB_ACL_T theacl);
|
---|
1232 | int smb_vfs_call_sys_acl_delete_def_file(struct vfs_handle_struct *handle,
|
---|
1233 | const char *path);
|
---|
1234 | ssize_t smb_vfs_call_getxattr(struct vfs_handle_struct *handle,
|
---|
1235 | const char *path, const char *name, void *value,
|
---|
1236 | size_t size);
|
---|
1237 | ssize_t smb_vfs_call_fgetxattr(struct vfs_handle_struct *handle,
|
---|
1238 | struct files_struct *fsp, const char *name,
|
---|
1239 | void *value, size_t size);
|
---|
1240 | ssize_t smb_vfs_call_listxattr(struct vfs_handle_struct *handle,
|
---|
1241 | const char *path, char *list, size_t size);
|
---|
1242 | ssize_t smb_vfs_call_llistxattr(struct vfs_handle_struct *handle,
|
---|
1243 | const char *path, char *list, size_t size);
|
---|
1244 | ssize_t smb_vfs_call_flistxattr(struct vfs_handle_struct *handle,
|
---|
1245 | struct files_struct *fsp, char *list,
|
---|
1246 | size_t size);
|
---|
1247 | int smb_vfs_call_removexattr(struct vfs_handle_struct *handle,
|
---|
1248 | const char *path, const char *name);
|
---|
1249 | int smb_vfs_call_fremovexattr(struct vfs_handle_struct *handle,
|
---|
1250 | struct files_struct *fsp, const char *name);
|
---|
1251 | int smb_vfs_call_setxattr(struct vfs_handle_struct *handle, const char *path,
|
---|
1252 | const char *name, const void *value, size_t size,
|
---|
1253 | int flags);
|
---|
1254 | int smb_vfs_call_lsetxattr(struct vfs_handle_struct *handle, const char *path,
|
---|
1255 | const char *name, const void *value, size_t size,
|
---|
1256 | int flags);
|
---|
1257 | int smb_vfs_call_fsetxattr(struct vfs_handle_struct *handle,
|
---|
1258 | struct files_struct *fsp, const char *name,
|
---|
1259 | const void *value, size_t size, int flags);
|
---|
1260 | bool smb_vfs_call_aio_force(struct vfs_handle_struct *handle,
|
---|
1261 | struct files_struct *fsp);
|
---|
1262 | bool smb_vfs_call_is_offline(struct vfs_handle_struct *handle,
|
---|
1263 | const struct smb_filename *fname,
|
---|
1264 | SMB_STRUCT_STAT *sbuf);
|
---|
1265 | int smb_vfs_call_set_offline(struct vfs_handle_struct *handle,
|
---|
1266 | const struct smb_filename *fname);
|
---|
1267 | NTSTATUS smb_vfs_call_durable_cookie(struct vfs_handle_struct *handle,
|
---|
1268 | struct files_struct *fsp,
|
---|
1269 | TALLOC_CTX *mem_ctx,
|
---|
1270 | DATA_BLOB *cookie);
|
---|
1271 | NTSTATUS smb_vfs_call_durable_disconnect(struct vfs_handle_struct *handle,
|
---|
1272 | struct files_struct *fsp,
|
---|
1273 | const DATA_BLOB old_cookie,
|
---|
1274 | TALLOC_CTX *mem_ctx,
|
---|
1275 | DATA_BLOB *new_cookie);
|
---|
1276 | NTSTATUS smb_vfs_call_durable_reconnect(struct vfs_handle_struct *handle,
|
---|
1277 | struct smb_request *smb1req,
|
---|
1278 | struct smbXsrv_open *op,
|
---|
1279 | const DATA_BLOB old_cookie,
|
---|
1280 | TALLOC_CTX *mem_ctx,
|
---|
1281 | struct files_struct **fsp,
|
---|
1282 | DATA_BLOB *new_cookie);
|
---|
1283 | NTSTATUS smb_vfs_call_readdir_attr(struct vfs_handle_struct *handle,
|
---|
1284 | const struct smb_filename *fname,
|
---|
1285 | TALLOC_CTX *mem_ctx,
|
---|
1286 | struct readdir_attr_data **attr_data);
|
---|
1287 |
|
---|
1288 | NTSTATUS smb_register_vfs(int version, const char *name,
|
---|
1289 | const struct vfs_fn_pointers *fns);
|
---|
1290 | void *vfs_add_fsp_extension_notype(vfs_handle_struct *handle,
|
---|
1291 | files_struct *fsp, size_t ext_size,
|
---|
1292 | void (*destroy_fn)(void *p_data));
|
---|
1293 | void vfs_remove_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
|
---|
1294 | void vfs_remove_all_fsp_extensions(struct files_struct *fsp);
|
---|
1295 | void *vfs_memctx_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
|
---|
1296 | void *vfs_fetch_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
|
---|
1297 |
|
---|
1298 | #endif /* _VFS_H */
|
---|