s3: VFS: Add SMB_VFS_SYS_ACL_DELETE_DEF_FD(),
[Samba.git] / source3 / include / vfs.h
blob885fbf7de613c6834d363eca96f86d84fda7289a
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
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.
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.
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/>.
23 This work was sponsored by Optifacio Software Services, Inc.
26 #ifndef _VFS_H
27 #define _VFS_H
29 /* Avoid conflict with an AIX include file */
31 #ifdef vfs_ops
32 #undef vfs_ops
33 #endif
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...
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.
45 * If you change anything here, please also update modules/vfs_full_audit.c.
46 * VL.
50 * Changed to version 2 for CIFS UNIX extensions (mknod and link added). JRA.
51 * Changed to version 3 for POSIX acl extensions. JRA.
52 * Changed to version 4 for cascaded VFS interface. Alexander Bokovoy.
53 * Changed to version 5 for sendfile addition. JRA.
54 * Changed to version 6 for the new module system, fixed cascading and quota functions. --metze
55 * Changed to version 7 to include the get_nt_acl info parameter. JRA.
56 * Changed to version 8 includes EA calls. JRA.
57 * Changed to version 9 to include the get_shadow_data call. --metze
58 * Changed to version 10 to include pread pwrite calls.
59 * Changed to version 11 to include seekdir telldir rewinddir calls. JRA
60 * Changed to version 12 to add mask and attributes to opendir(). JRA
61 * Also include aio calls. JRA.
62 * Changed to version 13 as the internal structure of files_struct has changed. JRA
63 * Changed to version 14 as we had to change DIR to SMB_STRUCT_DIR. JRA
64 * Changed to version 15 as we added the statvfs call. JRA
65 * Changed to version 16 as we added the getlock call. JRA
66 * Changed to version 17 as we removed redundant connection_struct parameters. --jpeach
67 * Changed to version 18 to add fsp parameter to the open call -- jpeach
68 * Also include kernel_flock call - jmcd
69 * Changed to version 19, kernel change notify has been merged
70 * Also included linux setlease call - jmcd
71 * Changed to version 20, use ntimes call instead of utime (greater
72 * timestamp resolition. JRA.
73 * Changed to version21 to add chflags operation -- jpeach
74 * Changed to version22 to add lchown operation -- jra
75 * Leave at 22 - not yet released. But change set_nt_acl to return an NTSTATUS. jra.
76 * Leave at 22 - not yet released. Add file_id_create operation. --metze
77 * Leave at 22 - not yet released. Change all BOOL parameters (int) to bool. jra.
78 * Leave at 22 - not yet released. Added recvfile.
79 * Leave at 22 - not yet released. Change get_nt_acl to return NTSTATUS - vl
80 * Leave at 22 - not yet released. Change get_nt_acl to *not* take a
81 * files_struct. - obnox.
82 * Leave at 22 - not yet released. Remove parameter fd from fget_nt_acl. - obnox
83 * Leave at 22 - not yet released. Remove parameter fd from gset_nt_acl. - obnox
84 * Leave at 22 - not yet released. Remove parameter fd from pread. - obnox
85 * Leave at 22 - not yet released. Remove parameter fd from pwrite. - obnox
86 * Leave at 22 - not yet released. Remove parameter fd from lseek. - obnox
87 * Leave at 22 - not yet released. Remove parameter fd from fsync. - obnox
88 * Leave at 22 - not yet released. Remove parameter fd from fstat. - obnox
89 * Leave at 22 - not yet released. Remove parameter fd from fchmod. - obnox
90 * Leave at 22 - not yet released. Remove parameter fd from fchown. - obnox
91 * Leave at 22 - not yet released. Remove parameter fd from ftruncate. - obnox
92 * Leave at 22 - not yet released. Remove parameter fd from lock. - obnox
93 * Leave at 22 - not yet released. Remove parameter fd from kernel_flock. - obnox
94 * Leave at 22 - not yet released. Remove parameter fd from linux_setlease. - obnox
95 * Leave at 22 - not yet released. Remove parameter fd from getlock. - obnox
96 * Leave at 22 - not yet released. Remove parameter fd from sys_acl_get_fd. - obnox
97 * Leave at 22 - not yet released. Remove parameter fd from fchmod_acl. - obnox
98 * Leave at 22 - not yet released. Remove parameter fd from sys_acl_set_fd. - obnox
99 * Leave at 22 - not yet released. Remove parameter fd from fgetxattr. - obnox
100 * Leave at 22 - not yet released. Remove parameter fd from flistxattr. - obnox
101 * Leave at 22 - not yet released. Remove parameter fd from fremovexattr. - obnox
102 * Leave at 22 - not yet released. Remove parameter fd from fsetxattr. - obnox
103 * Leave at 22 - not yet released. Remove parameter fd from aio_cancel. - obnox
104 * Leave at 22 - not yet released. Remove parameter fd from read. - obnox
105 * Leave at 22 - not yet released. Remove parameter fd from write. - obnox
106 * Leave at 22 - not yet released. Remove parameter fromfd from sendfile. - obnox
107 * Leave at 22 - not yet released. Remove parameter fromfd from recvfile. - obnox
108 * Leave at 22 - not yet released. Additional change: add operations for offline files -- ab
109 * Leave at 22 - not yet released. Add the streaminfo call. -- jpeach, vl
110 * Leave at 22 - not yet released. Remove parameter fd from close_fn. - obnox
111 * Changed to version 23 - remove set_nt_acl call. This can only be done via an
112 * open handle. JRA.
113 * Changed to version 24 - make security descriptor const in fset_nt_acl. JRA.
114 * Changed to version 25 - Jelmer's change from SMB_BIG_UINT to uint64_t.
115 * Leave at 25 - not yet released. Add create_file call. -- tprouty.
116 * Leave at 25 - not yet released. Add create time to ntimes. -- tstecher.
117 * Leave at 25 - not yet released. Add get_alloc_size call. -- tprouty.
118 * Leave at 25 - not yet released. Add SMB_STRUCT_STAT to readdir. - sdann
119 * Leave at 25 - not yet released. Add init_search_op call. - sdann
120 * Leave at 25 - not yet released. Add locking calls. -- zkirsch.
121 * Leave at 25 - not yet released. Add strict locking calls. -- drichards.
122 * Changed to version 26 - Plumb struct smb_filename to SMB_VFS_CREATE_FILE,
123 * SMB_VFS_OPEN, SMB_VFS_STAT, SMB_VFS_LSTAT,
124 * SMB_VFS_RENAME, SMB_VFS_UNLINK, SMB_VFS_NTIMES.
125 * Changed to version 27 - not yet released. Added enum timestamp_set_resolution
126 * return to fs_capabilities call. JRA.
127 * Leave at 27 - not yet released. Add translate_name VFS call to convert
128 * UNIX names to Windows supported names -- asrinivasan.
129 * Changed to version 28 - Add private_flags uint32_t to CREATE call.
130 * Leave at 28 - not yet released. Change realpath to assume NULL and return a
131 * malloc'ed path. JRA.
132 * Leave at 28 - not yet released. Move posix_fallocate into the VFS
133 * where it belongs. JRA.
134 * Leave at 28 - not yet released. Rename posix_fallocate to fallocate
135 * to split out the two possible uses. JRA.
136 * Leave at 28 - not yet released. Add fdopendir. JRA.
137 * Leave at 28 - not yet released. Rename open function to open_fn. - gd
138 * Leave at 28 - not yet released. Make getwd function always return malloced memory. JRA.
139 * Bump to version 29 - Samba 3.6.0 will ship with interface version 28.
140 * Leave at 29 - not yet releases. Add fsctl. Richard Sharpe
141 * Leave at 29 - not yet released. add SMB_VFS_GET_DFS_REFERRAL() - metze
142 * Leave at 29 - not yet released. Remove l{list,get,set,remove}xattr - abartlet
143 * Leave at 29 - not yet released. move to plain off_t - abartlet
144 * Leave at 29 - not yet released. Remove sys_acl functions other than set and get - abartlet
145 * Leave at 29 - not yet released. Added backup_intent bool to files_struct - JRA
146 * Leave at 29 - not yet released. Add durable handle functions - metze obnox
147 * Leave at 29 - not yet released. Added sys_acl_blob_get_file and sys_acl_blob_get_fd
148 * Bump to version 30 - Samba 4.0.0 will ship with interface version 30
149 * Leave at 30 - not yet released. Added conn->cwd to save vfs_GetWd() calls.
150 * Leave at 30 - not yet released. Changed sys_acl_blob_get_file interface to remove type
151 * Bump to version 31 - Samba 4.1.0 will ship with interface version 31
152 * Leave at 31 - not yet released. Make struct vuid_cache_entry in
153 * connection_struct a pointer.
154 * Leave at 31 - not yet released. Add share_access to vuid_cache_entry.
155 * Leave at 31 - not yet released. add SMB_VFS_COPY_CHUNK()
156 * Leave at 31 - not yet released. Remove the unused
157 * fsp->pending_break_messages array
158 * Leave at 31 - not yet released. add SMB_VFS_[GET SET]_COMPRESSION()
160 * Bump to version 32 - Samba 4.2 will ship with that.
161 * Version 32 - Add "lease" to CREATE_FILE operation
162 * Version 32 - Add "lease" to struct files_struct
163 * Version 32 - Add SMB_VFS_READDIR_ATTR()
164 * Version 32 - Add in and out create context blobs to create_file
165 * Version 32 - Remove unnecessary SMB_VFS_DISK_FREE() small_query parameter
166 * Bump to version 33 - Samba 4.3 will ship with that.
167 * Version 33 - change fallocate mode flags param from enum->uint32_t
168 * Version 33 - Add snapshot create delete calls
169 * Version 33 - Add OS X SMB2 AAPL copyfile extension flag to fsp
170 * Version 33 - Remove notify_watch_fn
171 * Bump to version 34 - Samba 4.4 will ship with that
172 * Version 34 - Remove bool posix_open, add uint64_t posix_flags
173 * Version 34 - Added bool posix_pathnames to struct smb_request
174 * Bump to version 35 - Samba 4.5 will ship with that
175 * Version 35 - Change get_nt_acl_fn from const char *, to
176 * const struct smb_filename *
177 * Version 35 - Change mkdir from const char *, to
178 * const struct smb_filename *
179 * Version 35 - Change rmdir from const char *, to
180 * const struct smb_filename *
181 * Version 35 - Change opendir from const char *, to
182 * const struct smb_filename *
183 * Version 35 - Wrap aio async funtions args in a struct vfs_aio_state
184 * Version 35 - Change chmod from const char *, to
185 * const struct smb_filename *
186 * Version 35 - Change chmod_acl from const char *, to
187 * const struct smb_filename *
188 * Version 35 - Change chown from const char *, to
189 * const struct smb_filename *
190 * Version 35 - Change lchown from const char *, to
191 * const struct smb_filename *
192 * Version 35 - Change streaminfo from const char *, to
193 * const struct smb_filename *
194 * Version 35 - Add uint32_t flags to struct smb_filename
195 * Version 35 - Add get set fget fset dos attribute functions.
196 * Version 35 - Add bool use_ofd_locks to struct files_struct
197 * Bump to version 36 - Samba 4.6 will ship with that
198 * Version 36 - Remove is_offline and set_offline
199 * Version 37 - Module init functions now take a TALLOC_CTX * parameter.
200 * Version 37 - Add vfs_copy_chunk_flags for DUP_EXTENTS_TO_FILE
201 * Version 37 - Change sys_acl_delete_def_file from const char *
202 * to const struct smb_filename *
203 * Version 37 - Change sys_acl_get_file from const char *
204 * to const struct smb_filename *
205 * Version 37 - Change sys_acl_blob_get_file from const char *
206 * to const struct smb_filename *
207 * Version 37 - Change sys_acl_set_file from const char *
208 * to const struct smb_filename *
209 * Version 37 - Change listxattr from const char *
210 * to const struct smb_filename *
211 * Version 37 - Change removexattr from const char *
212 * to const struct smb_filename *
213 * Version 37 - Change setxattr from const char *
214 * to const struct smb_filename *
215 * Version 37 - Change getxattr from const char *
216 * to const struct smb_filename *
217 * Version 37 - Change mknod from const char * to const struct smb_filename *
218 * Version 37 - Change chflags from const char *
219 * to const struct smb_filename *
220 * Version 37 - Change disk_free from const char *
221 * to const struct smb_filename *
222 * Version 37 - Change get_quota from const char *
223 * to const struct smb_filename *
224 * Version 37 - Change link from const char *
225 * to const struct smb_filename *
226 * Version 37 - Change statvfs from const char *
227 * to const struct smb_filename *
228 * Version 37 - Change readlink from const char *
229 * to const struct smb_filename *
230 * Version 37 - Change symlink from const char *
231 * to const struct smb_filename *
232 * Version 37 - Change chdir from const char *
233 * to const struct smb_filename *
234 * Version 37 - Change getwd from char *
235 * to const struct smb_filename *
236 * Version 37 - Change conn->cwd from char *
237 * to struct smb_filename *
238 * Version 37 - Change realpath from char *
239 * to struct smb_filename *
240 * Version 37 - Change connectpath from char *
241 * to struct smb_filename *
242 * Version 37 - Add SMB_VFS_OFFLOAD_READ_SEND RECV
243 * Version 37 - Rename SMB_VFS_COPY_CHUNK_SEND RECV to
244 * SMB_VFS_OFFLOAD_READ_SEND RECV
245 * Version 37 - Remove SMB_VFS_STRICT_UNLOCK
246 * Version 37 - Rename SMB_VFS_STRICT_LOCK to
247 * SMB_VFS_STRICT_LOCK_CHECK
248 * Version 38 - Remove SMB_VFS_INIT_SEARCH_OP
249 * Bump to version 39, Samba 4.9 will ship with that
250 * Version 39 - Remove SMB_VFS_FSYNC
251 * Only implement async versions.
252 * Version 39 - Remove SMB_VFS_READ
253 * All users are now pread or async versions.
254 * Version 39 - Remove SMB_VFS_WRITE
255 * All users are now pwrite or async versions.
256 * Version 39 - Remove SMB_VFS_CHMOD_ACL - no longer used.
257 * Version 39 - Remove SMB_VFS_FCHMOD_ACL - no longer used.
258 * Version 39 - Remove struct dfree_cached_info pointer from
259 * connection struct
260 * Bump to version 40, Samba 4.10 will ship with that
261 * Version 40 - Add SMB_VFS_GETXATTRAT_SEND RECV
262 * Version 40 - Add SMB_VFS_GET_DOS_ATTRIBUTES_SEND RECV
263 * Bump to version 41, Samba 4.11 will ship with that
264 * Version 41 - Remove SMB_VFS_BRL_CANCEL_WINDOWS
265 * Version 41 - Remove unused st_ex_mask from struct stat_ex
266 * Version 41 - convert struct stat_ex.st_ex_calculated_birthtime to flags
267 * Version 41 - add st_ex_itime to struct stat_ex
268 * Version 41 - add st_ex_file_id to struct stat_ex
269 * Version 41 - add SMB_VFS_FS_FILE_ID
270 * Version 41 - Remove "blocking_lock" parameter from
271 * SMB_VFS_BRL_LOCK_WINDOWS
272 * Version 41 - Remove "msg_ctx" parameter from SMB_VFS_BRL_UNLOCK_WINDOWS
273 * Bump to version 42, Samba 4.12 will ship with that
274 * Version 42 - Remove share_access member from struct files_struct
275 * Version 42 - Make "lease" a const* in create_file_fn
276 * Version 42 - Move SMB_VFS_RENAME -> SMB_VFS_RENAMEAT
277 * Version 42 - Move SMB_VFS_LINK -> SMB_VFS_LINKAT.
278 * Version 42 - Move SMB_VFS_MKNOD -> SMB_VFS_MKDNODAT.
279 * Version 42 - Move SMB_VFS_READLINK -> SMB_VFS_READLINKAT.
280 * Version 42 - Move SMB_VFS_SYMLINK -> SMB_VFS_SYMLINKAT.
281 * Version 42 - Move SMB_VFS_MKDIR -> SMB_VFS_MKDIRAT.
282 * Version 42 - Move change_to_user() -> change_to_user_and_service()
283 * Version 42 - Move change_to_user_by_fsp() -> change_to_user_and_service_by_fsp()
284 * Version 42 - Move [un]become_user*() -> [un]become_user_without_service*()
285 * Version 42 - Move SMB_VFS_UNLINK -> SMB_VFS_UNLINKAT.
286 * Version 42 - Add SMB_VFS_FCNTL
287 * Version 42 - Remove SMB_VFS_RMDIR.
288 * Use SMB_VFS_UNLINKAT(.., AT_REMOVEDIR) instead.
289 * Version 42 - Remove SMB_VFS_CHOWN
290 * Version 42 - Remove struct write_cache *wcp from files_struct
291 * Version 42 - SMB_VFS_NTIMES() receives null times based on UTIMES_OMIT
292 * Version 42 - Add SMB_VFS_CREATE_DFS_PATHAT()
293 * Version 42 - Add SMB_VFS_READ_DFS_PATHAT()
294 * Change to Version 43 - will ship with 4.13.
295 * Version 43 - Remove deferred_close from struct files_struct
296 * Version 43 - Remove SMB_VFS_OPENDIR()
297 * Version 43 - Remove original_lcomp from struct smb_filename
298 * Version 43 - files_struct flags:
299 * bool kernel_share_modes_taken
300 * bool update_write_time_triggered
301 * bool update_write_time_on_close
302 * bool write_time_forced
303 * bool can_lock
304 * bool can_read
305 * bool can_write
306 * bool modified
307 * bool is_directory
308 * bool aio_write_behind
309 * bool initial_delete_on_close
310 * bool delete_on_close
311 * bool is_sparse
312 * bool backup_intent
313 * bool use_ofd_locks
314 * bool closing
315 * bool lock_failure_seen
316 * changed to bitfields.
317 * Version 43 - convert SMB_VFS_GET_REAL_FILENAME() arg path
318 * to be a struct smb_filename
319 * Version 43 - convert link_contents arg of SMB_VFS_SYMLINKAT()
320 * to struct smb_filename
321 * Version 43 - Move SMB_VFS_GET_NT_ACL() -> SMB_VFS_GET_NT_ACL_AT().
322 * Version 43 - Remove root_dir_fid from SMB_VFS_CREATE_FILE().
323 * Version 43 - Add dirfsp to struct files_struct
324 * Version 43 - Add dirfsp args to SMB_VFS_CREATE_FILE()
325 * Version 43 - Add SMB_VFS_OPENAT()
326 * Version 43 - Remove SMB_VFS_OPEN()
327 * Version 43 - SMB_VFS_READ_DFS_PATHAT() should take a non-const name.
328 There's no easy way to return stat info for a DFS link
329 otherwise.
330 * Change to Version 44 - will ship with 4.14.
331 * Version 44 - Remove dirfsp arg from struct files_struct
332 * Version 44 - Remove dirfsp arg to SMB_VFS_CREATE_FILE()
333 * Version 44 - Make dirfsp arg to SMB_VFS_READLINKAT() const
334 * Version 44 - Add a flag 'encryption_required' to files_struct that that
335 * prevents that encrypted connections can be downgraded.
336 * Version 44 - Add a flag 'is_pathref' to struct files_struct.
337 * Version 44 - Add 'is_fsa' flag to struct files_struct.
338 * Version 44 - Add 'have_proc_fds' flag to struct connection_struct.
339 * Version 44 - Add 'have_proc_fds' flag to struct files_struct.
340 * Version 44 - Add dirfsp arg to SMB_VFS_READDIR()
341 * Version 44 - Replace SMB_VFS_GET_COMPRESSION() with SMB_VFS_FGET_COMPRESSION()
342 * Version 44 - Add type argument to SMB_VFS_SYS_ACL_SET_FD()
343 * Version 44 - Remove SMB_VFS_SYS_ACL_SET_FILE()
344 * Change to Version 45 - will ship with 4.15
345 * Version 45 - Remove SMB_VFS_LISTXATTR
346 * Version 45 - Remove SMB_VFS_SETXATTR
347 * Version 45 - Remove SMB_VFS_REMOVEXATTR
348 * Version 45 - Remove SMB_VFS_GET_DOS_ATTRIBUTES()
349 * Version 45 - Remove SMB_VFS_CHMOD
350 * Version 45 - Add SMB_VFS_FNTIMES
351 * Version 45 - Remove SMB_VFS_NTIMES
352 * Version 45 - ADD SMB_VFS_FSTREAMINFO
353 * Version 45 - Add SMB_VFS_FREADDIR_ATTR
354 * Version 45 - Remove SMB_VFS_READDIR_ATTR
355 * Version 45 - Add SMB_VFS_SYS_ACL_DELETE_DEF_FD
358 #define SMB_VFS_INTERFACE_VERSION 45
361 All intercepted VFS operations must be declared as static functions inside module source
362 in order to keep smbd namespace unpolluted. See source of audit, extd_audit, fake_perms and recycle
363 example VFS modules for more details.
366 /* VFS operations structure */
368 struct vfs_handle_struct;
369 struct connection_struct;
370 struct files_struct;
371 struct security_descriptor;
372 struct vfs_statvfs_struct;
373 struct smb_request;
374 struct ea_list;
375 struct smb_file_time;
376 struct smb_filename;
377 struct dfs_GetDFSReferral;
379 typedef union unid_t {
380 uid_t uid;
381 gid_t gid;
382 } unid_t;
384 struct fd_handle;
386 struct fsp_lease {
387 size_t ref_count;
388 struct smbd_server_connection *sconn;
389 struct tevent_timer *timeout;
390 struct smb2_lease lease;
393 typedef struct files_struct {
394 struct files_struct *next, *prev;
395 uint64_t fnum;
396 struct smbXsrv_open *op;
397 struct connection_struct *conn;
398 struct fd_handle *fh;
399 unsigned int num_smb_operations;
400 struct file_id file_id;
401 uint64_t initial_allocation_size; /* Faked up initial allocation on disk. */
402 uint16_t file_pid;
403 uint64_t vuid; /* SMB2 compat */
404 struct timeval open_time;
405 uint32_t access_mask; /* NTCreateX access bits (FILE_READ_DATA etc.) */
406 struct {
407 bool is_pathref : 1; /* See below */
408 bool is_fsa : 1; /* See below */
409 bool have_proc_fds : 1;
410 bool kernel_share_modes_taken : 1;
411 bool update_write_time_triggered : 1;
412 bool update_write_time_on_close : 1;
413 bool write_time_forced : 1;
414 bool can_lock : 1;
415 bool can_read : 1;
416 bool can_write : 1;
417 bool modified : 1;
418 bool is_directory : 1;
419 bool is_dirfsp : 1;
420 bool aio_write_behind : 1;
421 bool initial_delete_on_close : 1;
422 bool delete_on_close : 1;
423 bool is_sparse : 1;
424 bool backup_intent : 1;
425 bool use_ofd_locks : 1;
426 bool closing : 1;
427 bool lock_failure_seen : 1;
428 bool encryption_required : 1;
429 } fsp_flags;
431 struct tevent_timer *update_write_time_event;
432 struct timespec close_write_time;
434 int oplock_type;
437 * Cache of our lease_type, stored as "current_state" in
438 * leases.tdb
440 int leases_db_seqnum;
441 uint32_t lease_type;
443 struct fsp_lease *lease;
444 int sent_oplock_break;
445 struct tevent_timer *oplock_timeout;
446 struct lock_struct last_lock_failure;
447 int current_lock_count; /* Count the number of outstanding locks and pending locks. */
449 uint64_t posix_flags;
450 struct smb_filename *fsp_name;
451 uint32_t name_hash; /* Jenkins hash of full pathname. */
452 uint64_t mid; /* Mid of the operation that created us. */
454 struct vfs_fsp_data *vfs_extension;
455 struct fake_file_handle *fake_file_handle;
457 struct notify_change_buf *notify;
459 struct files_struct *base_fsp; /* placeholder for delete on close */
460 struct files_struct *stream_fsp; /* backlink from base_fsp */
463 * Cache of share_mode_data->flags
465 int share_mode_flags_seqnum;
466 uint16_t share_mode_flags;
469 * Read-only cached brlock record, thrown away when the
470 * brlock.tdb seqnum changes. This avoids fetching data from
471 * the brlock.tdb on every read/write call.
473 int brlock_seqnum;
474 struct byte_range_lock *brlock_rec;
476 struct dptr_struct *dptr;
478 /* if not NULL, means this is a print file */
479 struct print_file_data *print_file;
482 * Optimize the aio_requests array for high performance: Never
483 * shrink it, maintain num_aio_requests separately
485 unsigned num_aio_requests;
486 struct tevent_req **aio_requests;
489 * Requests waiting for smb1 byte range locks. They are
490 * generated by smbd_smb1_do_locks_send and are required here,
491 * because lock cancel operations index through reply_lockingX
492 * not based on mid but on the lock type and range.
494 struct tevent_req **blocked_smb1_lock_reqs;
497 * SMB1 remembers lock failures and delays repeated blocking
498 * lock attempts on the same offset.
500 uint64_t lock_failure_offset;
501 } files_struct;
504 * The fsp flags "is_pathref" and "is_fsa"
505 * =======================================
507 * Summary
508 * -------
510 * The flag "is_pathref" is a property of the low-level VFS-layer file
511 * handle. If "is_pathref" is true, only a subset of VFS calls are allowed
512 * on the handle and on systems that support it, the low-level fd is open
513 * with O_PATH. If "is_pathref" is false, the low-level fd is a "normal"
514 * file descriptor that can be used with all VFS calls.
516 * The flag "is_fsa" is a property of the FSA layer in Samba. The term FSA
517 * layer refers to the parts of smbs that implement Windows NTFS semantics
518 * on-top of a POSIX filesystem. If "is_fsa" is true, the fsp was
519 * processed by the SMB_VFS_CREATE_FILE() VFS call, otherwise the fsp was
520 * created by openat_pathref_fsp() which only connected the low-level
521 * handle by calling into VFS SMB_VFS_OPENAT(), but the whole FSA layer
522 * logic is skipped.
524 * Note that only three possible combinations of "is_pathref" and "is_fsa"
525 * are possible:
527 * | is_fsa \ is_pathref | + | - |
528 * |---------------------+---+---|
529 * | + | + | + |
530 * | - | + | - |
532 * So a fsp can't be a full low-level fd (is_pathref=false) and not be
533 * processed by the FSA layer.
535 * Details
536 * -------
538 * On Linux the O_PATH flag to open() can be used to open a filehandle on
539 * a file or directory with interesting properties:
541 * - the file-handle indicates a location in the filesystem tree,
542 * - no permission checks are done by the kernel and
543 * - only operations that act purely at the file descriptor level are
544 * allowed.
546 * The file itself is not opened, and other file operations (e.g.,
547 * read(2), write(2), fchmod(2), fchown(2), fgetxattr(2), ioctl(2),
548 * mmap(2)) fail with the error EBADF.
550 * The following subset of operations that is relevant to Samba is allowed:
552 * - close(2),
553 * - fchdir(2), if the file descriptor refers to a directory,
554 * - fstat(2),
555 * - fstatfs(2) and
556 * - passing the file descriptor as the dirfd argument of openat() and the
557 * other "*at()" system calls. This includes linkat(2) with
558 * AT_EMPTY_PATH (or via procfs using AT_SYMLINK_FOLLOW) even if the
559 * file is not a directory.
561 * Opening a file or directory with the O_PATH flag requires no
562 * permissions on the object itself (but does require execute permission
563 * on the directories in the path prefix). By contrast, obtaining a
564 * reference to a filesystem object by opening it with the O_RDONLY flag
565 * requires that the caller have read permission on the object, even when
566 * the subsequent operation (e.g., fchdir(2), fstat(2)) does not require
567 * read permis‐ sion on the object. [1]
569 * If for example Samba receives an SMB request to open a file requesting
570 * SEC_FILE_READ_ATTRIBUTE access rights because the client wants to read
571 * the file's metadata from the handle, Samba will have to call POSIX
572 * open() with at least O_RDONLY access rights.
574 * Usecase for O_PATH in Samba
575 * ---------------------------
577 * By leveraging this Linux specific flags we can avoid permission
578 * mismatches as described above. Additionally O_PATH allows basing all
579 * filesystem accesses done by the fileserver on handle based syscalls by
580 * opening all client pathnames with O_PATH and consistently using for
581 * example fstat() instead of stat() throughout the codebase.
583 * Subsequently we will refer to Samba file-handles (fsp's) opened with
584 * O_PATH "path referencing fsp's" or "pathref" fsp's for short.
586 * Currently Samba bases the decision whether to call POSIX open() on a
587 * client pathname or whether to leave the low-level handle at -1, what we
588 * call a stat-open, in the function open_file() and it is based on the
589 * client requested SMB acccess mask.
591 * The set of rights that trigger an open() include READ_CONTROL_ACCESS,
592 * resulting in a call to open() with at least O_RDONLY. If the filesystem
593 * supports NT style ACLs natively (like GPFS or ZFS), the filesystem may
594 * grant the user requested right READ_CONTROL_ACCESS, but it may not
595 * grant READ_DATA (O_RDONLY), resulting in a permission denied error.
597 * Historically the set of access rights that triggered opening a file was:
599 * FILE_READ_DATA
600 * FILE_WRITE_DATA
601 * FILE_APPEND_DATA
602 * FILE_EXECUTE
603 * WRITE_DAC_ACCESS
604 * WRITE_OWNER_ACCESS
605 * SEC_FLAG_SYSTEM_SECURITY
606 * READ_CONTROL_ACCESS
608 * By using O_PATH this can be trimmed down to
610 * FILE_READ_DATA
611 * FILE_WRITE_DATA
612 * FILE_APPEND_DATA
613 * FILE_EXECUTE
615 * Fallback on systems without O_PATH support
616 * ------------------------------------------
618 * A fallback is needed that allows opening a file-handle with the same
619 * higher level semantics even if the system doesn't support O_PATH. This
620 * is implemented by qimpersonating the root user for the open()
621 * syscall. To avoid bypassing restrictive permissions on intermediate
622 * directories components of a path, the root user is only impersonated
623 * after changing directory to the parent directory of the client
624 * requested pathname.
626 * In order to avoid privilege escalation security issues with these root
627 * opened file-handles we must carefully control their usage throughout
628 * the codebase. Therefor we
630 * - tag the pathref fsp's with the flag "is_pathref" and
632 * - control access to the file-handle by making the structure private and only
633 * allowing access with accessor functions.
635 * Two functions are used to fetch the low-level system file-handle from an fsp
637 * - fsp_get_io_fd(fsp): enforces fsp is NOT a pathref file-handle and
639 * - fsp_get_pathref_fd(fsp): allows fsp to be either a pathref file-handle or a
640 * traditional POSIX file-handle opened with O_RDONLY or any other POSIX open
641 * flag.
643 * The general guideline when to use which function is:
645 * - if you do something like fstat(fd), use fsp_get_pathref_fd(fsp),
646 * - if you do something like *at(dirfd, ...), use fsp_get_pathref_fd(fsp),
647 * - if you want to print the fd for example in DEBUG messages, use
648 * fsp_get_pathref_fd(fsp),
649 * - if you want to call close(fd), use fsp_get_pathref_fd(fsp),
650 * - if you're doing a logical comparison of fd values, use
651 * fsp_get_pathref_fd().
653 * In any other case use fsp_get_io_fd().
656 #define FSP_POSIX_FLAGS_OPEN 0x01
657 #define FSP_POSIX_FLAGS_RENAME 0x02
658 #define FSP_POSIX_FLAGS_PATHNAMES 0x04
660 #define FSP_POSIX_FLAGS_ALL \
661 (FSP_POSIX_FLAGS_OPEN | \
662 FSP_POSIX_FLAGS_PATHNAMES | \
663 FSP_POSIX_FLAGS_RENAME)
665 struct vuid_cache_entry {
666 struct auth_session_info *session_info;
667 uint64_t vuid; /* SMB2 compat */
668 bool read_only;
669 uint32_t share_access;
672 struct vuid_cache {
673 unsigned int next_entry;
674 struct vuid_cache_entry array[VUID_CACHE_SIZE];
677 typedef struct {
678 char *name;
679 bool is_wild;
680 } name_compare_entry;
682 struct share_params {
683 int service;
686 typedef struct connection_struct {
687 struct connection_struct *next, *prev;
688 struct smbd_server_connection *sconn; /* can be NULL */
689 struct smbXsrv_tcon *tcon; /* can be NULL */
690 uint32_t cnum; /* an index passed over the wire */
691 struct share_params *params;
692 bool force_user;
693 struct vuid_cache *vuid_cache;
694 bool printer;
695 bool ipc;
696 bool read_only; /* Attributes for the current user of the share. */
697 bool have_proc_fds;
698 uint32_t share_access;
699 /* Does this filesystem honor
700 sub second timestamps on files
701 and directories when setting time ? */
702 enum timestamp_set_resolution ts_res;
703 char *connectpath;
704 struct files_struct *cwd_fsp; /* Working directory. */
705 bool tcon_done;
707 struct vfs_handle_struct *vfs_handles; /* for the new plugins */
710 * This represents the user information on this connection. Depending
711 * on the vuid using this tid, this might change per SMB request.
713 struct auth_session_info *session_info;
716 * If the "force group" parameter is set, this is the primary gid that
717 * may be used in the users token, depending on the vuid using this tid.
719 gid_t force_group_gid;
721 uint64_t vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
723 time_t lastused;
724 time_t lastused_count;
725 int num_files_open;
726 unsigned int num_smb_operations; /* Count of smb operations on this tree. */
727 int encrypt_level;
728 bool encrypted_tid;
730 /* Semantics requested by the client or forced by the server config. */
731 bool case_sensitive;
732 bool case_preserve;
733 bool short_case_preserve;
735 /* Semantics provided by the underlying filesystem. */
736 int fs_capabilities;
737 /* Device number of the directory of the share mount.
738 Used to ensure unique FileIndex returns. */
739 SMB_DEV_T base_share_dev;
741 name_compare_entry *hide_list; /* Per-share list of files to return as hidden. */
742 name_compare_entry *veto_list; /* Per-share list of files to veto (never show). */
743 name_compare_entry *veto_oplock_list; /* Per-share list of files to refuse oplocks on. */
744 name_compare_entry *aio_write_behind_list; /* Per-share list of files to use aio write behind on. */
745 struct trans_state *pending_trans;
747 struct rpc_pipe_client *spoolss_pipe;
749 } connection_struct;
751 struct smbd_smb2_request;
752 struct referral;
754 struct smb_request {
755 uint8_t cmd;
756 uint16_t flags2;
757 uint16_t smbpid;
758 uint64_t mid; /* For compatibility with SMB2. */
759 uint32_t seqnum;
760 uint64_t vuid; /* For compatibility with SMB2. */
761 uint32_t tid;
762 uint8_t wct;
763 const uint16_t *vwv;
764 uint16_t buflen;
765 const uint8_t *buf;
766 const uint8_t *inbuf;
769 * Async handling in the main smb processing loop is directed by
770 * outbuf: reply_xxx routines indicate sync behaviour by putting their
771 * reply into "outbuf". If they leave it as NULL, they take care of it
772 * themselves, possibly later.
774 * If async handling is wanted, the reply_xxx routine must make sure
775 * that it talloc_move()s the smb_req somewhere else.
777 uint8_t *outbuf;
779 size_t unread_bytes;
780 bool encrypted;
781 connection_struct *conn;
782 struct smbd_server_connection *sconn;
783 struct smbXsrv_connection *xconn;
786 * Pointer to session, can be NULL,
787 * eg during negprot and session setup.
789 struct smbXsrv_session *session;
791 struct smb_perfcount_data pcd;
794 * Chained request handling
796 struct files_struct *chain_fsp;
799 * state information for async smb handling
801 void *async_priv;
804 * Back pointer to smb2 request.
806 struct smbd_smb2_request *smb2req;
809 * Request list for chained requests, we're part of it.
811 struct smb_request **chain;
813 struct timeval request_time;
815 bool posix_pathnames;
819 * Info about an alternate data stream
822 struct stream_struct {
823 off_t size;
824 off_t alloc_size;
825 char *name;
828 /* time info */
829 struct smb_file_time {
830 struct timespec mtime;
831 struct timespec atime;
832 struct timespec ctime;
833 struct timespec create_time;
837 * smb_filename
839 struct smb_filename {
840 char *base_name;
841 char *stream_name;
842 uint32_t flags;
843 SMB_STRUCT_STAT st;
844 NTTIME twrp;
847 * Internal file handle, O_PATH based if available,
848 * otherwise O_RDONLY as root.
850 struct files_struct *fsp;
853 * Link between the struct smb_filename and the above
854 * fsp. fsp_link is a talloc child of the fsp. Ensures a possible
855 * talloc_free(fsp) resets the smb_fname->fsp pointer to NULL in
856 * the is fsp_link talloc destructor.
858 struct fsp_smb_fname_link *fsp_link;
862 * smb_filename flags. Define in terms of the FSP_POSIX_FLAGS_XX
863 * to keep the numeric values consistent.
866 #define SMB_FILENAME_POSIX_PATH FSP_POSIX_FLAGS_PATHNAMES
868 #define VFS_FIND(__fn__) while (handle->fns->__fn__##_fn==NULL) { \
869 handle = handle->next; \
872 enum vfs_translate_direction {
873 vfs_translate_to_unix = 0,
874 vfs_translate_to_windows
877 enum vfs_fallocate_flags {
878 VFS_FALLOCATE_FL_KEEP_SIZE = 0x0001,
879 VFS_FALLOCATE_FL_PUNCH_HOLE = 0x0002,
882 struct vfs_aio_state {
883 int error;
884 uint64_t duration;
888 Available VFS operations. These values must be in sync with vfs_ops struct
889 (struct vfs_fn_pointers and struct vfs_handle_pointers inside of struct vfs_ops).
890 In particular, if new operations are added to vfs_ops, appropriate constants
891 should be added to vfs_op_type so that order of them kept same as in vfs_ops.
893 struct shadow_copy_data;
895 struct vfs_fn_pointers {
896 /* Disk operations */
898 int (*connect_fn)(struct vfs_handle_struct *handle, const char *service, const char *user);
899 void (*disconnect_fn)(struct vfs_handle_struct *handle);
900 uint64_t (*disk_free_fn)(struct vfs_handle_struct *handle,
901 const struct smb_filename *smb_fname,
902 uint64_t *bsize,
903 uint64_t *dfree,
904 uint64_t *dsize);
905 int (*get_quota_fn)(struct vfs_handle_struct *handle,
906 const struct smb_filename *smb_fname,
907 enum SMB_QUOTA_TYPE qtype,
908 unid_t id,
909 SMB_DISK_QUOTA *qt);
910 int (*set_quota_fn)(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt);
911 int (*get_shadow_copy_data_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, struct shadow_copy_data *shadow_copy_data, bool labels);
912 int (*statvfs_fn)(struct vfs_handle_struct *handle,
913 const struct smb_filename *smb_fname,
914 struct vfs_statvfs_struct *statbuf);
915 uint32_t (*fs_capabilities_fn)(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res);
918 * Note: that "struct dfs_GetDFSReferral *r"
919 * needs to be a valid TALLOC_CTX
921 NTSTATUS (*get_dfs_referrals_fn)(struct vfs_handle_struct *handle,
922 struct dfs_GetDFSReferral *r);
923 NTSTATUS (*create_dfs_pathat_fn)(struct vfs_handle_struct *handle,
924 struct files_struct *dirfsp,
925 const struct smb_filename *smb_fname,
926 const struct referral *reflist,
927 size_t referral_count);
928 NTSTATUS (*read_dfs_pathat_fn)(struct vfs_handle_struct *handle,
929 TALLOC_CTX *mem_ctx,
930 struct files_struct *dirfsp,
931 struct smb_filename *smb_fname,
932 struct referral **ppreflist,
933 size_t *preferral_count);
935 /* Directory operations */
937 DIR *(*fdopendir_fn)(struct vfs_handle_struct *handle, files_struct *fsp, const char *mask, uint32_t attributes);
938 struct dirent *(*readdir_fn)(struct vfs_handle_struct *handle,
939 struct files_struct *dirfsp,
940 DIR *dirp,
941 SMB_STRUCT_STAT *sbuf);
942 void (*seekdir_fn)(struct vfs_handle_struct *handle, DIR *dirp, long offset);
943 long (*telldir_fn)(struct vfs_handle_struct *handle, DIR *dirp);
944 void (*rewind_dir_fn)(struct vfs_handle_struct *handle, DIR *dirp);
945 int (*mkdirat_fn)(struct vfs_handle_struct *handle,
946 struct files_struct *dirfsp,
947 const struct smb_filename *smb_fname,
948 mode_t mode);
949 int (*closedir_fn)(struct vfs_handle_struct *handle, DIR *dir);
951 /* File operations */
953 int (*openat_fn)(struct vfs_handle_struct *handle,
954 const struct files_struct *dirfsp,
955 const struct smb_filename *smb_fname,
956 struct files_struct *fsp,
957 int flags,
958 mode_t mode);
959 NTSTATUS (*create_file_fn)(struct vfs_handle_struct *handle,
960 struct smb_request *req,
961 struct smb_filename *smb_fname,
962 uint32_t access_mask,
963 uint32_t share_access,
964 uint32_t create_disposition,
965 uint32_t create_options,
966 uint32_t file_attributes,
967 uint32_t oplock_request,
968 const struct smb2_lease *lease,
969 uint64_t allocation_size,
970 uint32_t private_flags,
971 struct security_descriptor *sd,
972 struct ea_list *ea_list,
973 files_struct **result,
974 int *pinfo,
975 const struct smb2_create_blobs *in_context_blobs,
976 struct smb2_create_blobs *out_context_blobs);
977 int (*close_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
978 ssize_t (*pread_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, void *data, size_t n, off_t offset);
979 struct tevent_req *(*pread_send_fn)(struct vfs_handle_struct *handle,
980 TALLOC_CTX *mem_ctx,
981 struct tevent_context *ev,
982 struct files_struct *fsp,
983 void *data,
984 size_t n, off_t offset);
985 ssize_t (*pread_recv_fn)(struct tevent_req *req, struct vfs_aio_state *state);
986 ssize_t (*pwrite_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n, off_t offset);
987 struct tevent_req *(*pwrite_send_fn)(struct vfs_handle_struct *handle,
988 TALLOC_CTX *mem_ctx,
989 struct tevent_context *ev,
990 struct files_struct *fsp,
991 const void *data,
992 size_t n, off_t offset);
993 ssize_t (*pwrite_recv_fn)(struct tevent_req *req, struct vfs_aio_state *state);
994 off_t (*lseek_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t offset, int whence);
995 ssize_t (*sendfile_fn)(struct vfs_handle_struct *handle, int tofd, files_struct *fromfsp, const DATA_BLOB *header, off_t offset, size_t count);
996 ssize_t (*recvfile_fn)(struct vfs_handle_struct *handle, int fromfd, files_struct *tofsp, off_t offset, size_t count);
997 int (*renameat_fn)(struct vfs_handle_struct *handle,
998 struct files_struct *srcdir_fsp,
999 const struct smb_filename *smb_fname_src,
1000 struct files_struct *dstdir_fsp,
1001 const struct smb_filename *smb_fname_dst);
1002 struct tevent_req *(*fsync_send_fn)(struct vfs_handle_struct *handle,
1003 TALLOC_CTX *mem_ctx,
1004 struct tevent_context *ev,
1005 struct files_struct *fsp);
1006 int (*fsync_recv_fn)(struct tevent_req *req, struct vfs_aio_state *state);
1007 int (*stat_fn)(struct vfs_handle_struct *handle, struct smb_filename *smb_fname);
1008 int (*fstat_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_STAT *sbuf);
1009 int (*lstat_fn)(struct vfs_handle_struct *handle, struct smb_filename *smb_filename);
1010 uint64_t (*get_alloc_size_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const SMB_STRUCT_STAT *sbuf);
1011 int (*unlinkat_fn)(struct vfs_handle_struct *handle,
1012 struct files_struct *srcdir_fsp,
1013 const struct smb_filename *smb_fname,
1014 int flags);
1015 int (*fchmod_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, mode_t mode);
1016 int (*fchown_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, uid_t uid, gid_t gid);
1017 int (*lchown_fn)(struct vfs_handle_struct *handle,
1018 const struct smb_filename *smb_fname,
1019 uid_t uid,
1020 gid_t gid);
1021 int (*chdir_fn)(struct vfs_handle_struct *handle,
1022 const struct smb_filename *smb_fname);
1023 struct smb_filename *(*getwd_fn)(struct vfs_handle_struct *handle,
1024 TALLOC_CTX *mem_ctx);
1025 int (*fntimes_fn)(struct vfs_handle_struct *handle,
1026 struct files_struct *fsp,
1027 struct smb_file_time *ft);
1028 int (*ftruncate_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t offset);
1029 int (*fallocate_fn)(struct vfs_handle_struct *handle,
1030 struct files_struct *fsp,
1031 uint32_t mode,
1032 off_t offset,
1033 off_t len);
1034 bool (*lock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int op, off_t offset, off_t count, int type);
1035 int (*kernel_flock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp,
1036 uint32_t share_access, uint32_t access_mask);
1037 int (*fcntl_fn)(struct vfs_handle_struct *handle,
1038 struct files_struct *fsp, int cmd, va_list cmd_arg);
1039 int (*linux_setlease_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int leasetype);
1040 bool (*getlock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t *poffset, off_t *pcount, int *ptype, pid_t *ppid);
1041 int (*symlinkat_fn)(struct vfs_handle_struct *handle,
1042 const struct smb_filename *link_contents,
1043 struct files_struct *dirfsp,
1044 const struct smb_filename *new_smb_fname);
1045 int (*readlinkat_fn)(struct vfs_handle_struct *handle,
1046 const struct files_struct *dirfsp,
1047 const struct smb_filename *smb_fname,
1048 char *buf,
1049 size_t bufsiz);
1050 int (*linkat_fn)(struct vfs_handle_struct *handle,
1051 struct files_struct *srcfsp,
1052 const struct smb_filename *old_smb_fname,
1053 struct files_struct *dstfsp,
1054 const struct smb_filename *new_smb_fname,
1055 int flags);
1056 int (*mknodat_fn)(struct vfs_handle_struct *handle,
1057 struct files_struct *dirfsp,
1058 const struct smb_filename *smb_fname,
1059 mode_t mode,
1060 SMB_DEV_T dev);
1061 struct smb_filename *(*realpath_fn)(struct vfs_handle_struct *handle,
1062 TALLOC_CTX *ctx,
1063 const struct smb_filename *smb_fname);
1064 int (*chflags_fn)(struct vfs_handle_struct *handle,
1065 const struct smb_filename *smb_fname,
1066 unsigned int flags);
1067 struct file_id (*file_id_create_fn)(struct vfs_handle_struct *handle,
1068 const SMB_STRUCT_STAT *sbuf);
1069 uint64_t (*fs_file_id_fn)(struct vfs_handle_struct *handle,
1070 const SMB_STRUCT_STAT *sbuf);
1071 struct tevent_req *(*offload_read_send_fn)(TALLOC_CTX *mem_ctx,
1072 struct tevent_context *ev,
1073 struct vfs_handle_struct *handle,
1074 struct files_struct *fsp,
1075 uint32_t fsctl,
1076 uint32_t ttl,
1077 off_t offset,
1078 size_t to_copy);
1079 NTSTATUS (*offload_read_recv_fn)(struct tevent_req *req,
1080 struct vfs_handle_struct *handle,
1081 TALLOC_CTX *mem_ctx,
1082 DATA_BLOB *token_blob);
1083 struct tevent_req *(*offload_write_send_fn)(struct vfs_handle_struct *handle,
1084 TALLOC_CTX *mem_ctx,
1085 struct tevent_context *ev,
1086 uint32_t fsctl,
1087 DATA_BLOB *token,
1088 off_t transfer_offset,
1089 struct files_struct *dest_fsp,
1090 off_t dest_off,
1091 off_t to_copy);
1092 NTSTATUS (*offload_write_recv_fn)(struct vfs_handle_struct *handle,
1093 struct tevent_req *req,
1094 off_t *copied);
1095 NTSTATUS (*fget_compression_fn)(struct vfs_handle_struct *handle,
1096 TALLOC_CTX *mem_ctx,
1097 struct files_struct *fsp,
1098 uint16_t *_compression_fmt);
1099 NTSTATUS (*set_compression_fn)(struct vfs_handle_struct *handle,
1100 TALLOC_CTX *mem_ctx,
1101 struct files_struct *fsp,
1102 uint16_t compression_fmt);
1103 NTSTATUS (*snap_check_path_fn)(struct vfs_handle_struct *handle,
1104 TALLOC_CTX *mem_ctx,
1105 const char *service_path,
1106 char **base_volume);
1107 NTSTATUS (*snap_create_fn)(struct vfs_handle_struct *handle,
1108 TALLOC_CTX *mem_ctx,
1109 const char *base_volume,
1110 time_t *tstamp,
1111 bool rw,
1112 char **base_path,
1113 char **snap_path);
1114 NTSTATUS (*snap_delete_fn)(struct vfs_handle_struct *handle,
1115 TALLOC_CTX *mem_ctx,
1116 char *base_path,
1117 char *snap_path);
1119 NTSTATUS (*fstreaminfo_fn)(struct vfs_handle_struct *handle,
1120 struct files_struct *fsp,
1121 TALLOC_CTX *mem_ctx,
1122 unsigned int *num_streams,
1123 struct stream_struct **streams);
1125 int (*get_real_filename_fn)(struct vfs_handle_struct *handle,
1126 const struct smb_filename *path,
1127 const char *name,
1128 TALLOC_CTX *mem_ctx,
1129 char **found_name);
1131 const char *(*connectpath_fn)(struct vfs_handle_struct *handle,
1132 const struct smb_filename *smb_fname);
1134 NTSTATUS (*brl_lock_windows_fn)(struct vfs_handle_struct *handle,
1135 struct byte_range_lock *br_lck,
1136 struct lock_struct *plock);
1138 bool (*brl_unlock_windows_fn)(struct vfs_handle_struct *handle,
1139 struct byte_range_lock *br_lck,
1140 const struct lock_struct *plock);
1142 bool (*strict_lock_check_fn)(struct vfs_handle_struct *handle,
1143 struct files_struct *fsp,
1144 struct lock_struct *plock);
1146 NTSTATUS (*translate_name_fn)(struct vfs_handle_struct *handle,
1147 const char *name,
1148 enum vfs_translate_direction direction,
1149 TALLOC_CTX *mem_ctx,
1150 char **mapped_name);
1152 NTSTATUS (*fsctl_fn)(struct vfs_handle_struct *handle,
1153 struct files_struct *fsp,
1154 TALLOC_CTX *ctx,
1155 uint32_t function,
1156 uint16_t req_flags,
1157 const uint8_t *_in_data,
1158 uint32_t in_len,
1159 uint8_t **_out_data,
1160 uint32_t max_out_len,
1161 uint32_t *out_len);
1163 NTSTATUS (*fget_dos_attributes_fn)(struct vfs_handle_struct *handle,
1164 struct files_struct *fsp,
1165 uint32_t *dosmode);
1167 NTSTATUS (*fset_dos_attributes_fn)(struct vfs_handle_struct *hande,
1168 struct files_struct *fsp,
1169 uint32_t dosmode);
1171 struct tevent_req *(*get_dos_attributes_send_fn)(
1172 TALLOC_CTX *mem_ctx,
1173 struct tevent_context *ev,
1174 struct vfs_handle_struct *handle,
1175 files_struct *dir_fsp,
1176 struct smb_filename *smb_fname);
1178 NTSTATUS (*get_dos_attributes_recv_fn)(
1179 struct tevent_req *req,
1180 struct vfs_aio_state *aio_state,
1181 uint32_t *dosmode);
1183 /* NT ACL operations. */
1185 NTSTATUS (*fget_nt_acl_fn)(struct vfs_handle_struct *handle,
1186 struct files_struct *fsp,
1187 uint32_t security_info,
1188 TALLOC_CTX *mem_ctx,
1189 struct security_descriptor **ppdesc);
1190 NTSTATUS (*get_nt_acl_at_fn)(struct vfs_handle_struct *handle,
1191 struct files_struct *dirfsp,
1192 const struct smb_filename *smb_fname,
1193 uint32_t security_info,
1194 TALLOC_CTX *mem_ctx,
1195 struct security_descriptor **ppdesc);
1196 NTSTATUS (*fset_nt_acl_fn)(struct vfs_handle_struct *handle,
1197 struct files_struct *fsp,
1198 uint32_t security_info_sent,
1199 const struct security_descriptor *psd);
1201 NTSTATUS (*audit_file_fn)(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);
1207 /* POSIX ACL operations. */
1209 SMB_ACL_T (*sys_acl_get_file_fn)(struct vfs_handle_struct *handle,
1210 const struct smb_filename *smb_fname,
1211 SMB_ACL_TYPE_T type,
1212 TALLOC_CTX *mem_ctx);
1213 SMB_ACL_T (*sys_acl_get_fd_fn)(struct vfs_handle_struct *handle,
1214 struct files_struct *fsp,
1215 TALLOC_CTX *mem_ctx);
1216 int (*sys_acl_blob_get_file_fn)(struct vfs_handle_struct *handle,
1217 const struct smb_filename *smb_fname,
1218 TALLOC_CTX *mem_ctx,
1219 char **blob_description,
1220 DATA_BLOB *blob);
1221 int (*sys_acl_blob_get_fd_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp,
1222 TALLOC_CTX *mem_ctx, char **blob_description,
1223 DATA_BLOB *blob);
1224 int (*sys_acl_set_fd_fn)(struct vfs_handle_struct *handle,
1225 struct files_struct *fsp,
1226 SMB_ACL_TYPE_T type,
1227 SMB_ACL_T theacl);
1228 int (*sys_acl_delete_def_file_fn)(struct vfs_handle_struct *handle,
1229 const struct smb_filename *smb_fname);
1230 int (*sys_acl_delete_def_fd_fn)(struct vfs_handle_struct *handle,
1231 struct files_struct *fsp);
1233 /* EA operations. */
1234 ssize_t (*getxattr_fn)(struct vfs_handle_struct *handle,
1235 const struct smb_filename *smb_fname,
1236 const char *name,
1237 void *value,
1238 size_t size);
1239 struct tevent_req *(*getxattrat_send_fn)(
1240 TALLOC_CTX *mem_ctx,
1241 struct tevent_context *ev,
1242 struct vfs_handle_struct *handle,
1243 files_struct *dir_fsp,
1244 const struct smb_filename *smb_fname,
1245 const char *xattr_name,
1246 size_t alloc_hint);
1247 ssize_t (*getxattrat_recv_fn)(struct tevent_req *req,
1248 struct vfs_aio_state *aio_state,
1249 TALLOC_CTX *mem_ctx,
1250 uint8_t **xattr_value);
1251 ssize_t (*fgetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size);
1252 ssize_t (*flistxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size);
1253 int (*fremovexattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name);
1254 int (*fsetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags);
1256 /* aio operations */
1257 bool (*aio_force_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
1259 /* durable handle operations */
1260 NTSTATUS (*durable_cookie_fn)(struct vfs_handle_struct *handle,
1261 struct files_struct *fsp,
1262 TALLOC_CTX *mem_ctx,
1263 DATA_BLOB *cookie);
1264 NTSTATUS (*durable_disconnect_fn)(struct vfs_handle_struct *handle,
1265 struct files_struct *fsp,
1266 const DATA_BLOB old_cookie,
1267 TALLOC_CTX *mem_ctx,
1268 DATA_BLOB *new_cookie);
1269 NTSTATUS (*durable_reconnect_fn)(struct vfs_handle_struct *handle,
1270 struct smb_request *smb1req,
1271 struct smbXsrv_open *op,
1272 const DATA_BLOB old_cookie,
1273 TALLOC_CTX *mem_ctx,
1274 struct files_struct **fsp,
1275 DATA_BLOB *new_cookie);
1277 NTSTATUS (*freaddir_attr_fn)(struct vfs_handle_struct *handle,
1278 struct files_struct *fsp,
1279 TALLOC_CTX *mem_ctx,
1280 struct readdir_attr_data **attr_data);
1284 VFS operation description. Each VFS module registers an array of vfs_op_tuple to VFS subsystem,
1285 which describes all operations this module is willing to intercept.
1286 VFS subsystem initializes then the conn->vfs_ops and conn->vfs_opaque_ops structs
1287 using this information.
1290 typedef struct vfs_handle_struct {
1291 struct vfs_handle_struct *next, *prev;
1292 const char *param;
1293 struct connection_struct *conn;
1294 const struct vfs_fn_pointers *fns;
1295 void *data;
1296 void (*free_data)(void **data);
1297 } vfs_handle_struct;
1300 typedef struct vfs_statvfs_struct {
1301 /* For undefined recommended transfer size return -1 in that field */
1302 uint32_t OptimalTransferSize; /* bsize on some os, iosize on other os */
1303 uint32_t BlockSize;
1306 The next three fields are in terms of the block size.
1307 (above). If block size is unknown, 4096 would be a
1308 reasonable block size for a server to report.
1309 Note that returning the blocks/blocksavail removes need
1310 to make a second call (to QFSInfo level 0x103 to get this info.
1311 UserBlockAvail is typically less than or equal to BlocksAvail,
1312 if no distinction is made return the same value in each.
1315 uint64_t TotalBlocks;
1316 uint64_t BlocksAvail; /* bfree */
1317 uint64_t UserBlocksAvail; /* bavail */
1319 /* For undefined Node fields or FSID return -1 */
1320 uint64_t TotalFileNodes;
1321 uint64_t FreeFileNodes;
1322 uint64_t FsIdentifier; /* fsid */
1323 /* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */
1324 /* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */
1326 int FsCapabilities;
1327 } vfs_statvfs_struct;
1329 /* Add a new FSP extension of the given type. Returns a pointer to the
1330 * extenstion data.
1332 #define VFS_ADD_FSP_EXTENSION(handle, fsp, type, destroy_fn) \
1333 (type *)vfs_add_fsp_extension_notype(handle, (fsp), sizeof(type), (destroy_fn))
1335 /* Return a pointer to the existing FSP extension data. */
1336 #define VFS_FETCH_FSP_EXTENSION(handle, fsp) \
1337 vfs_fetch_fsp_extension(handle, (fsp))
1339 /* Return the talloc context associated with an FSP extension. */
1340 #define VFS_MEMCTX_FSP_EXTENSION(handle, fsp) \
1341 vfs_memctx_fsp_extension(handle, (fsp))
1343 /* Remove and destroy an FSP extension. */
1344 #define VFS_REMOVE_FSP_EXTENSION(handle, fsp) \
1345 vfs_remove_fsp_extension((handle), (fsp))
1347 #define SMB_VFS_HANDLE_GET_DATA(handle, datap, type, ret) { \
1348 if (!(handle)||((datap=(type *)(handle)->data)==NULL)) { \
1349 DEBUG(0,("%s() failed to get vfs_handle->data!\n",__FUNCTION__)); \
1350 ret; \
1354 #define SMB_VFS_HANDLE_SET_DATA(handle, datap, free_fn, type, ret) { \
1355 if (!(handle)) { \
1356 DEBUG(0,("%s() failed to set handle->data!\n",__FUNCTION__)); \
1357 ret; \
1358 } else { \
1359 if ((handle)->free_data) { \
1360 (handle)->free_data(&(handle)->data); \
1362 (handle)->data = (void *)datap; \
1363 (handle)->free_data = free_fn; \
1367 #define SMB_VFS_HANDLE_FREE_DATA(handle) { \
1368 if ((handle) && (handle)->free_data) { \
1369 (handle)->free_data(&(handle)->data); \
1373 /* Check whether module-specific data handle was already allocated or not */
1374 #define SMB_VFS_HANDLE_TEST_DATA(handle) ( !(handle) || !(handle)->data ? False : True )
1376 #define SMB_VFS_OP(x) ((void *) x)
1378 #define DEFAULT_VFS_MODULE_NAME "/[Default VFS]/"
1380 #include "vfs_macros.h"
1382 int smb_vfs_call_connect(struct vfs_handle_struct *handle,
1383 const char *service, const char *user);
1384 void smb_vfs_call_disconnect(struct vfs_handle_struct *handle);
1385 uint64_t smb_vfs_call_disk_free(struct vfs_handle_struct *handle,
1386 const struct smb_filename *smb_filename,
1387 uint64_t *bsize,
1388 uint64_t *dfree,
1389 uint64_t *dsize);
1390 int smb_vfs_call_get_quota(struct vfs_handle_struct *handle,
1391 const struct smb_filename *smb_filename,
1392 enum SMB_QUOTA_TYPE qtype,
1393 unid_t id,
1394 SMB_DISK_QUOTA *qt);
1395 int smb_vfs_call_set_quota(struct vfs_handle_struct *handle,
1396 enum SMB_QUOTA_TYPE qtype, unid_t id,
1397 SMB_DISK_QUOTA *qt);
1398 int smb_vfs_call_get_shadow_copy_data(struct vfs_handle_struct *handle,
1399 struct files_struct *fsp,
1400 struct shadow_copy_data *shadow_copy_data,
1401 bool labels);
1402 int smb_vfs_call_statvfs(struct vfs_handle_struct *handle,
1403 const struct smb_filename *smb_fname,
1404 struct vfs_statvfs_struct *statbuf);
1405 uint32_t smb_vfs_call_fs_capabilities(struct vfs_handle_struct *handle,
1406 enum timestamp_set_resolution *p_ts_res);
1408 * Note: that "struct dfs_GetDFSReferral *r" needs to be a valid TALLOC_CTX
1410 NTSTATUS smb_vfs_call_get_dfs_referrals(struct vfs_handle_struct *handle,
1411 struct dfs_GetDFSReferral *r);
1412 NTSTATUS smb_vfs_call_create_dfs_pathat(struct vfs_handle_struct *handle,
1413 struct files_struct *dirfsp,
1414 const struct smb_filename *smb_fname,
1415 const struct referral *reflist,
1416 size_t referral_count);
1417 NTSTATUS smb_vfs_call_read_dfs_pathat(struct vfs_handle_struct *handle,
1418 TALLOC_CTX *mem_ctx,
1419 struct files_struct *dirfsp,
1420 struct smb_filename *smb_fname,
1421 struct referral **ppreflist,
1422 size_t *preferral_count);
1423 DIR *smb_vfs_call_fdopendir(struct vfs_handle_struct *handle,
1424 struct files_struct *fsp,
1425 const char *mask,
1426 uint32_t attributes);
1427 struct dirent *smb_vfs_call_readdir(struct vfs_handle_struct *handle,
1428 struct files_struct *dirfsp,
1429 DIR *dirp,
1430 SMB_STRUCT_STAT *sbuf);
1431 void smb_vfs_call_seekdir(struct vfs_handle_struct *handle,
1432 DIR *dirp, long offset);
1433 long smb_vfs_call_telldir(struct vfs_handle_struct *handle,
1434 DIR *dirp);
1435 void smb_vfs_call_rewind_dir(struct vfs_handle_struct *handle,
1436 DIR *dirp);
1437 int smb_vfs_call_mkdirat(struct vfs_handle_struct *handle,
1438 struct files_struct *dirfsp,
1439 const struct smb_filename *smb_fname,
1440 mode_t mode);
1441 int smb_vfs_call_closedir(struct vfs_handle_struct *handle,
1442 DIR *dir);
1443 int smb_vfs_call_openat(struct vfs_handle_struct *handle,
1444 const struct files_struct *dirfsp,
1445 const struct smb_filename *smb_fname,
1446 struct files_struct *fsp,
1447 int flags,
1448 mode_t mode);
1449 NTSTATUS smb_vfs_call_create_file(struct vfs_handle_struct *handle,
1450 struct smb_request *req,
1451 struct smb_filename *smb_fname,
1452 uint32_t access_mask,
1453 uint32_t share_access,
1454 uint32_t create_disposition,
1455 uint32_t create_options,
1456 uint32_t file_attributes,
1457 uint32_t oplock_request,
1458 const struct smb2_lease *lease,
1459 uint64_t allocation_size,
1460 uint32_t private_flags,
1461 struct security_descriptor *sd,
1462 struct ea_list *ea_list,
1463 files_struct **result,
1464 int *pinfo,
1465 const struct smb2_create_blobs *in_context_blobs,
1466 struct smb2_create_blobs *out_context_blobs);
1467 int smb_vfs_call_close(struct vfs_handle_struct *handle,
1468 struct files_struct *fsp);
1469 ssize_t smb_vfs_call_pread(struct vfs_handle_struct *handle,
1470 struct files_struct *fsp, void *data, size_t n,
1471 off_t offset);
1472 struct tevent_req *smb_vfs_call_pread_send(struct vfs_handle_struct *handle,
1473 TALLOC_CTX *mem_ctx,
1474 struct tevent_context *ev,
1475 struct files_struct *fsp,
1476 void *data,
1477 size_t n, off_t offset);
1478 ssize_t SMB_VFS_PREAD_RECV(struct tevent_req *req, struct vfs_aio_state *state);
1480 ssize_t smb_vfs_call_pwrite(struct vfs_handle_struct *handle,
1481 struct files_struct *fsp, const void *data,
1482 size_t n, off_t offset);
1483 struct tevent_req *smb_vfs_call_pwrite_send(struct vfs_handle_struct *handle,
1484 TALLOC_CTX *mem_ctx,
1485 struct tevent_context *ev,
1486 struct files_struct *fsp,
1487 const void *data,
1488 size_t n, off_t offset);
1489 ssize_t SMB_VFS_PWRITE_RECV(struct tevent_req *req, struct vfs_aio_state *state);
1491 off_t smb_vfs_call_lseek(struct vfs_handle_struct *handle,
1492 struct files_struct *fsp, off_t offset,
1493 int whence);
1494 ssize_t smb_vfs_call_sendfile(struct vfs_handle_struct *handle, int tofd,
1495 files_struct *fromfsp, const DATA_BLOB *header,
1496 off_t offset, size_t count);
1497 ssize_t smb_vfs_call_recvfile(struct vfs_handle_struct *handle, int fromfd,
1498 files_struct *tofsp, off_t offset,
1499 size_t count);
1500 int smb_vfs_call_renameat(struct vfs_handle_struct *handle,
1501 struct files_struct *srcfsp,
1502 const struct smb_filename *smb_fname_src,
1503 struct files_struct *dstfsp,
1504 const struct smb_filename *smb_fname_dst);
1506 struct tevent_req *smb_vfs_call_fsync_send(struct vfs_handle_struct *handle,
1507 TALLOC_CTX *mem_ctx,
1508 struct tevent_context *ev,
1509 struct files_struct *fsp);
1510 int SMB_VFS_FSYNC_RECV(struct tevent_req *req, struct vfs_aio_state *state);
1512 int smb_vfs_fsync_sync(files_struct *fsp);
1513 int smb_vfs_call_stat(struct vfs_handle_struct *handle,
1514 struct smb_filename *smb_fname);
1515 int smb_vfs_call_fstat(struct vfs_handle_struct *handle,
1516 struct files_struct *fsp, SMB_STRUCT_STAT *sbuf);
1517 int smb_vfs_call_lstat(struct vfs_handle_struct *handle,
1518 struct smb_filename *smb_filename);
1519 uint64_t smb_vfs_call_get_alloc_size(struct vfs_handle_struct *handle,
1520 struct files_struct *fsp,
1521 const SMB_STRUCT_STAT *sbuf);
1522 int smb_vfs_call_unlinkat(struct vfs_handle_struct *handle,
1523 struct files_struct *dirfsp,
1524 const struct smb_filename *smb_fname,
1525 int flags);
1526 int smb_vfs_call_fchmod(struct vfs_handle_struct *handle,
1527 struct files_struct *fsp, mode_t mode);
1528 int smb_vfs_call_fchown(struct vfs_handle_struct *handle,
1529 struct files_struct *fsp, uid_t uid, gid_t gid);
1530 int smb_vfs_call_lchown(struct vfs_handle_struct *handle,
1531 const struct smb_filename *smb_fname,
1532 uid_t uid,
1533 gid_t gid);
1534 int smb_vfs_call_chdir(struct vfs_handle_struct *handle,
1535 const struct smb_filename *smb_fname);
1536 struct smb_filename *smb_vfs_call_getwd(struct vfs_handle_struct *handle,
1537 TALLOC_CTX *ctx);
1538 int smb_vfs_call_ntimes(struct vfs_handle_struct *handle,
1539 const struct smb_filename *smb_fname,
1540 struct smb_file_time *ft);
1541 int smb_vfs_call_fntimes(struct vfs_handle_struct *handle,
1542 struct files_struct *fsp,
1543 struct smb_file_time *ft);
1544 int smb_vfs_call_ftruncate(struct vfs_handle_struct *handle,
1545 struct files_struct *fsp, off_t offset);
1546 int smb_vfs_call_fallocate(struct vfs_handle_struct *handle,
1547 struct files_struct *fsp,
1548 uint32_t mode,
1549 off_t offset,
1550 off_t len);
1551 bool smb_vfs_call_lock(struct vfs_handle_struct *handle,
1552 struct files_struct *fsp, int op, off_t offset,
1553 off_t count, int type);
1554 int smb_vfs_call_kernel_flock(struct vfs_handle_struct *handle,
1555 struct files_struct *fsp, uint32_t share_access,
1556 uint32_t access_mask);
1557 int smb_vfs_call_fcntl(struct vfs_handle_struct *handle,
1558 struct files_struct *fsp, int cmd, ...);
1559 int smb_vfs_call_linux_setlease(struct vfs_handle_struct *handle,
1560 struct files_struct *fsp, int leasetype);
1561 bool smb_vfs_call_getlock(struct vfs_handle_struct *handle,
1562 struct files_struct *fsp, off_t *poffset,
1563 off_t *pcount, int *ptype, pid_t *ppid);
1564 int smb_vfs_call_symlinkat(struct vfs_handle_struct *handle,
1565 const struct smb_filename *link_contents,
1566 struct files_struct *dirfsp,
1567 const struct smb_filename *new_smb_fname);
1568 int smb_vfs_call_readlinkat(struct vfs_handle_struct *handle,
1569 const struct files_struct *dirfsp,
1570 const struct smb_filename *smb_fname,
1571 char *buf,
1572 size_t bufsiz);
1573 int smb_vfs_call_linkat(struct vfs_handle_struct *handle,
1574 struct files_struct *srcfsp,
1575 const struct smb_filename *old_smb_fname,
1576 struct files_struct *dstfsp,
1577 const struct smb_filename *new_smb_fname,
1578 int flags);
1579 int smb_vfs_call_mknodat(struct vfs_handle_struct *handle,
1580 struct files_struct *dirfsp,
1581 const struct smb_filename *smb_fname,
1582 mode_t mode,
1583 SMB_DEV_T dev);
1584 struct smb_filename *smb_vfs_call_realpath(struct vfs_handle_struct *handle,
1585 TALLOC_CTX *ctx,
1586 const struct smb_filename *smb_fname);
1587 int smb_vfs_call_chflags(struct vfs_handle_struct *handle,
1588 const struct smb_filename *smb_fname,
1589 unsigned int flags);
1590 struct file_id smb_vfs_call_file_id_create(struct vfs_handle_struct *handle,
1591 const SMB_STRUCT_STAT *sbuf);
1592 uint64_t smb_vfs_call_fs_file_id(struct vfs_handle_struct *handle,
1593 const SMB_STRUCT_STAT *sbuf);
1594 NTSTATUS smb_vfs_call_fstreaminfo(struct vfs_handle_struct *handle,
1595 struct files_struct *fsp,
1596 TALLOC_CTX *mem_ctx,
1597 unsigned int *num_streams,
1598 struct stream_struct **streams);
1599 int smb_vfs_call_get_real_filename(struct vfs_handle_struct *handle,
1600 const struct smb_filename *path,
1601 const char *name,
1602 TALLOC_CTX *mem_ctx,
1603 char **found_name);
1604 const char *smb_vfs_call_connectpath(struct vfs_handle_struct *handle,
1605 const struct smb_filename *smb_fname);
1606 NTSTATUS smb_vfs_call_brl_lock_windows(struct vfs_handle_struct *handle,
1607 struct byte_range_lock *br_lck,
1608 struct lock_struct *plock);
1609 bool smb_vfs_call_brl_unlock_windows(struct vfs_handle_struct *handle,
1610 struct byte_range_lock *br_lck,
1611 const struct lock_struct *plock);
1612 bool smb_vfs_call_strict_lock_check(struct vfs_handle_struct *handle,
1613 struct files_struct *fsp,
1614 struct lock_struct *plock);
1615 NTSTATUS smb_vfs_call_translate_name(struct vfs_handle_struct *handle,
1616 const char *name,
1617 enum vfs_translate_direction direction,
1618 TALLOC_CTX *mem_ctx,
1619 char **mapped_name);
1620 NTSTATUS smb_vfs_call_fsctl(struct vfs_handle_struct *handle,
1621 struct files_struct *fsp,
1622 TALLOC_CTX *ctx,
1623 uint32_t function,
1624 uint16_t req_flags,
1625 const uint8_t *_in_data,
1626 uint32_t in_len,
1627 uint8_t **_out_data,
1628 uint32_t max_out_len,
1629 uint32_t *out_len);
1630 NTSTATUS smb_vfs_call_fget_dos_attributes(struct vfs_handle_struct *handle,
1631 struct files_struct *fsp,
1632 uint32_t *dosmode);
1633 NTSTATUS smb_vfs_call_fset_dos_attributes(struct vfs_handle_struct *handle,
1634 struct files_struct *fsp,
1635 uint32_t dosmode);
1636 struct tevent_req *smb_vfs_call_get_dos_attributes_send(
1637 TALLOC_CTX *mem_ctx,
1638 struct tevent_context *ev,
1639 struct vfs_handle_struct *handle,
1640 files_struct *dir_fsp,
1641 struct smb_filename *smb_fname);
1642 NTSTATUS smb_vfs_call_get_dos_attributes_recv(
1643 struct tevent_req *req,
1644 struct vfs_aio_state *aio_state,
1645 uint32_t *dosmode);
1646 struct tevent_req *smb_vfs_call_offload_read_send(
1647 TALLOC_CTX *mem_ctx,
1648 struct tevent_context *ev,
1649 struct vfs_handle_struct *handle,
1650 struct files_struct *fsp,
1651 uint32_t fsctl,
1652 uint32_t ttl,
1653 off_t offset,
1654 size_t to_copy);
1655 NTSTATUS smb_vfs_call_offload_read_recv(struct tevent_req *req,
1656 struct vfs_handle_struct *handle,
1657 TALLOC_CTX *mem_ctx,
1658 DATA_BLOB *token_blob);
1659 struct tevent_req *smb_vfs_call_offload_write_send(struct vfs_handle_struct *handle,
1660 TALLOC_CTX *mem_ctx,
1661 struct tevent_context *ev,
1662 uint32_t fsctl,
1663 DATA_BLOB *token,
1664 off_t transfer_offset,
1665 struct files_struct *dest_fsp,
1666 off_t dest_off,
1667 off_t num);
1668 NTSTATUS smb_vfs_call_offload_write_recv(struct vfs_handle_struct *handle,
1669 struct tevent_req *req,
1670 off_t *copied);
1671 NTSTATUS smb_vfs_call_fget_compression(struct vfs_handle_struct *handle,
1672 TALLOC_CTX *mem_ctx,
1673 struct files_struct *fsp,
1674 uint16_t *_compression_fmt);
1675 NTSTATUS smb_vfs_call_set_compression(struct vfs_handle_struct *handle,
1676 TALLOC_CTX *mem_ctx,
1677 struct files_struct *fsp,
1678 uint16_t compression_fmt);
1679 NTSTATUS smb_vfs_call_snap_check_path(vfs_handle_struct *handle,
1680 TALLOC_CTX *mem_ctx,
1681 const char *service_path,
1682 char **base_volume);
1683 NTSTATUS smb_vfs_call_snap_create(struct vfs_handle_struct *handle,
1684 TALLOC_CTX *mem_ctx,
1685 const char *base_volume,
1686 time_t *tstamp,
1687 bool rw,
1688 char **base_path,
1689 char **snap_path);
1690 NTSTATUS smb_vfs_call_snap_delete(struct vfs_handle_struct *handle,
1691 TALLOC_CTX *mem_ctx,
1692 char *base_path,
1693 char *snap_path);
1694 NTSTATUS smb_vfs_call_fget_nt_acl(struct vfs_handle_struct *handle,
1695 struct files_struct *fsp,
1696 uint32_t security_info,
1697 TALLOC_CTX *mem_ctx,
1698 struct security_descriptor **ppdesc);
1699 NTSTATUS smb_vfs_call_get_nt_acl_at(struct vfs_handle_struct *handle,
1700 struct files_struct *dirfsp,
1701 const struct smb_filename *smb_fname,
1702 uint32_t security_info,
1703 TALLOC_CTX *mem_ctx,
1704 struct security_descriptor **ppdesc);
1705 NTSTATUS smb_vfs_call_fset_nt_acl(struct vfs_handle_struct *handle,
1706 struct files_struct *fsp,
1707 uint32_t security_info_sent,
1708 const struct security_descriptor *psd);
1709 NTSTATUS smb_vfs_call_audit_file(struct vfs_handle_struct *handle,
1710 struct smb_filename *file,
1711 struct security_acl *sacl,
1712 uint32_t access_requested,
1713 uint32_t access_denied);
1714 int smb_vfs_call_chmod_acl(struct vfs_handle_struct *handle,
1715 const struct smb_filename *file,
1716 mode_t mode);
1717 SMB_ACL_T smb_vfs_call_sys_acl_get_file(struct vfs_handle_struct *handle,
1718 const struct smb_filename *smb_fname,
1719 SMB_ACL_TYPE_T type,
1720 TALLOC_CTX *mem_ctx);
1721 SMB_ACL_T smb_vfs_call_sys_acl_get_fd(struct vfs_handle_struct *handle,
1722 struct files_struct *fsp,
1723 TALLOC_CTX *mem_ctx);
1724 int smb_vfs_call_sys_acl_blob_get_file(struct vfs_handle_struct *handle,
1725 const struct smb_filename *smb_fname,
1726 TALLOC_CTX *mem_ctx,
1727 char **blob_description,
1728 DATA_BLOB *blob);
1729 int smb_vfs_call_sys_acl_blob_get_fd(struct vfs_handle_struct *handle,
1730 struct files_struct *fsp,
1731 TALLOC_CTX *mem_ctx,
1732 char **blob_description,
1733 DATA_BLOB *blob);
1734 int smb_vfs_call_sys_acl_set_fd(struct vfs_handle_struct *handle,
1735 struct files_struct *fsp,
1736 SMB_ACL_TYPE_T type,
1737 SMB_ACL_T theacl);
1738 int smb_vfs_call_sys_acl_delete_def_file(struct vfs_handle_struct *handle,
1739 const struct smb_filename *smb_fname);
1740 int smb_vfs_call_sys_acl_delete_def_fd(struct vfs_handle_struct *handle,
1741 struct files_struct *fsp);
1742 ssize_t smb_vfs_call_getxattr(struct vfs_handle_struct *handle,
1743 const struct smb_filename *smb_fname,
1744 const char *name,
1745 void *value,
1746 size_t size);
1747 struct tevent_req *smb_vfs_call_getxattrat_send(
1748 TALLOC_CTX *mem_ctx,
1749 struct tevent_context *ev,
1750 struct vfs_handle_struct *handle,
1751 files_struct *dir_fsp,
1752 const struct smb_filename *smb_fname,
1753 const char *xattr_name,
1754 size_t alloc_hint);
1755 ssize_t smb_vfs_call_getxattrat_recv(struct tevent_req *req,
1756 struct vfs_aio_state *aio_state,
1757 TALLOC_CTX *mem_ctx,
1758 uint8_t **xattr_value);
1759 ssize_t smb_vfs_call_fgetxattr(struct vfs_handle_struct *handle,
1760 struct files_struct *fsp, const char *name,
1761 void *value, size_t size);
1762 ssize_t smb_vfs_call_flistxattr(struct vfs_handle_struct *handle,
1763 struct files_struct *fsp, char *list,
1764 size_t size);
1765 int smb_vfs_call_fremovexattr(struct vfs_handle_struct *handle,
1766 struct files_struct *fsp, const char *name);
1767 int smb_vfs_call_lsetxattr(struct vfs_handle_struct *handle, const char *path,
1768 const char *name, const void *value, size_t size,
1769 int flags);
1770 int smb_vfs_call_fsetxattr(struct vfs_handle_struct *handle,
1771 struct files_struct *fsp, const char *name,
1772 const void *value, size_t size, int flags);
1773 bool smb_vfs_call_aio_force(struct vfs_handle_struct *handle,
1774 struct files_struct *fsp);
1775 NTSTATUS smb_vfs_call_durable_cookie(struct vfs_handle_struct *handle,
1776 struct files_struct *fsp,
1777 TALLOC_CTX *mem_ctx,
1778 DATA_BLOB *cookie);
1779 NTSTATUS smb_vfs_call_durable_disconnect(struct vfs_handle_struct *handle,
1780 struct files_struct *fsp,
1781 const DATA_BLOB old_cookie,
1782 TALLOC_CTX *mem_ctx,
1783 DATA_BLOB *new_cookie);
1784 NTSTATUS smb_vfs_call_durable_reconnect(struct vfs_handle_struct *handle,
1785 struct smb_request *smb1req,
1786 struct smbXsrv_open *op,
1787 const DATA_BLOB old_cookie,
1788 TALLOC_CTX *mem_ctx,
1789 struct files_struct **fsp,
1790 DATA_BLOB *new_cookie);
1791 NTSTATUS smb_vfs_call_freaddir_attr(struct vfs_handle_struct *handle,
1792 struct files_struct *fsp,
1793 TALLOC_CTX *mem_ctx,
1794 struct readdir_attr_data **attr_data);
1796 NTSTATUS smb_register_vfs(int version, const char *name,
1797 const struct vfs_fn_pointers *fns);
1798 void *vfs_add_fsp_extension_notype(vfs_handle_struct *handle,
1799 files_struct *fsp, size_t ext_size,
1800 void (*destroy_fn)(void *p_data));
1801 void vfs_remove_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
1802 void vfs_remove_all_fsp_extensions(struct files_struct *fsp);
1803 void *vfs_memctx_fsp_extension(vfs_handle_struct *handle,
1804 const struct files_struct *fsp);
1805 void *vfs_fetch_fsp_extension(vfs_handle_struct *handle, const struct files_struct *fsp);
1807 void smb_vfs_assert_all_fns(const struct vfs_fn_pointers* fns,
1808 const char *module);
1811 * Helper functions from source3/modules/vfs_not_implemented.c
1813 int vfs_not_implemented_connect(
1814 vfs_handle_struct *handle,
1815 const char *service,
1816 const char *user);
1817 void vfs_not_implemented_disconnect(vfs_handle_struct *handle);
1818 uint64_t vfs_not_implemented_disk_free(vfs_handle_struct *handle,
1819 const struct smb_filename *smb_fname,
1820 uint64_t *bsize,
1821 uint64_t *dfree,
1822 uint64_t *dsize);
1823 int vfs_not_implemented_get_quota(vfs_handle_struct *handle,
1824 const struct smb_filename *smb_fname,
1825 enum SMB_QUOTA_TYPE qtype,
1826 unid_t id,
1827 SMB_DISK_QUOTA *dq);
1828 int vfs_not_implemented_set_quota(vfs_handle_struct *handle,
1829 enum SMB_QUOTA_TYPE qtype,
1830 unid_t id, SMB_DISK_QUOTA *dq);
1831 int vfs_not_implemented_get_shadow_copy_data(vfs_handle_struct *handle,
1832 files_struct *fsp,
1833 struct shadow_copy_data *shadow_copy_data,
1834 bool labels);
1835 int vfs_not_implemented_statvfs(struct vfs_handle_struct *handle,
1836 const struct smb_filename *smb_fname,
1837 struct vfs_statvfs_struct *statbuf);
1838 uint32_t vfs_not_implemented_fs_capabilities(struct vfs_handle_struct *handle,
1839 enum timestamp_set_resolution *p_ts_res);
1840 NTSTATUS vfs_not_implemented_get_dfs_referrals(struct vfs_handle_struct *handle,
1841 struct dfs_GetDFSReferral *r);
1842 NTSTATUS vfs_not_implemented_create_dfs_pathat(struct vfs_handle_struct *handle,
1843 struct files_struct *dirfsp,
1844 const struct smb_filename *smb_fname,
1845 const struct referral *reflist,
1846 size_t referral_count);
1847 NTSTATUS vfs_not_implemented_read_dfs_pathat(struct vfs_handle_struct *handle,
1848 TALLOC_CTX *mem_ctx,
1849 struct files_struct *dirfsp,
1850 struct smb_filename *smb_fname,
1851 struct referral **ppreflist,
1852 size_t *preferral_count);
1853 NTSTATUS vfs_not_implemented_snap_check_path(struct vfs_handle_struct *handle,
1854 TALLOC_CTX *mem_ctx,
1855 const char *service_path,
1856 char **base_volume);
1857 NTSTATUS vfs_not_implemented_snap_create(struct vfs_handle_struct *handle,
1858 TALLOC_CTX *mem_ctx,
1859 const char *base_volume,
1860 time_t *tstamp,
1861 bool rw,
1862 char **base_path,
1863 char **snap_path);
1864 NTSTATUS vfs_not_implemented_snap_delete(struct vfs_handle_struct *handle,
1865 TALLOC_CTX *mem_ctx,
1866 char *base_path,
1867 char *snap_path);
1868 DIR *vfs_not_implemented_fdopendir(vfs_handle_struct *handle, files_struct *fsp,
1869 const char *mask, uint32_t attr);
1870 struct dirent *vfs_not_implemented_readdir(vfs_handle_struct *handle,
1871 struct files_struct *dirfsp,
1872 DIR *dirp,
1873 SMB_STRUCT_STAT *sbuf);
1874 void vfs_not_implemented_seekdir(vfs_handle_struct *handle, DIR *dirp, long offset);
1875 long vfs_not_implemented_telldir(vfs_handle_struct *handle, DIR *dirp);
1876 void vfs_not_implemented_rewind_dir(vfs_handle_struct *handle, DIR *dirp);
1877 int vfs_not_implemented_mkdirat(vfs_handle_struct *handle,
1878 struct files_struct *dirfsp,
1879 const struct smb_filename *smb_fname,
1880 mode_t mode);
1881 int vfs_not_implemented_closedir(vfs_handle_struct *handle, DIR *dir);
1882 int vfs_not_implemented_open(vfs_handle_struct *handle,
1883 struct smb_filename *smb_fname,
1884 files_struct *fsp, int flags, mode_t mode);
1885 int vfs_not_implemented_openat(vfs_handle_struct *handle,
1886 const struct files_struct *dirfsp,
1887 const struct smb_filename *smb_fname,
1888 struct files_struct *fsp,
1889 int flags,
1890 mode_t mode);
1891 NTSTATUS vfs_not_implemented_create_file(struct vfs_handle_struct *handle,
1892 struct smb_request *req,
1893 struct smb_filename *smb_fname,
1894 uint32_t access_mask,
1895 uint32_t share_access,
1896 uint32_t create_disposition,
1897 uint32_t create_options,
1898 uint32_t file_attributes,
1899 uint32_t oplock_request,
1900 const struct smb2_lease *lease,
1901 uint64_t allocation_size,
1902 uint32_t private_flags,
1903 struct security_descriptor *sd,
1904 struct ea_list *ea_list,
1905 files_struct **result, int *pinfo,
1906 const struct smb2_create_blobs *in_context_blobs,
1907 struct smb2_create_blobs *out_context_blobs);
1908 int vfs_not_implemented_close_fn(vfs_handle_struct *handle, files_struct *fsp);
1909 ssize_t vfs_not_implemented_pread(vfs_handle_struct *handle, files_struct *fsp,
1910 void *data, size_t n, off_t offset);
1911 struct tevent_req *vfs_not_implemented_pread_send(struct vfs_handle_struct *handle,
1912 TALLOC_CTX *mem_ctx,
1913 struct tevent_context *ev,
1914 struct files_struct *fsp,
1915 void *data, size_t n, off_t offset);
1916 ssize_t vfs_not_implemented_pread_recv(struct tevent_req *req,
1917 struct vfs_aio_state *vfs_aio_state);
1918 ssize_t vfs_not_implemented_pwrite(vfs_handle_struct *handle, files_struct *fsp,
1919 const void *data, size_t n, off_t offset);
1920 struct tevent_req *vfs_not_implemented_pwrite_send(struct vfs_handle_struct *handle,
1921 TALLOC_CTX *mem_ctx,
1922 struct tevent_context *ev,
1923 struct files_struct *fsp,
1924 const void *data,
1925 size_t n, off_t offset);
1926 ssize_t vfs_not_implemented_pwrite_recv(struct tevent_req *req,
1927 struct vfs_aio_state *vfs_aio_state);
1928 off_t vfs_not_implemented_lseek(vfs_handle_struct *handle, files_struct *fsp,
1929 off_t offset, int whence);
1930 ssize_t vfs_not_implemented_sendfile(vfs_handle_struct *handle, int tofd,
1931 files_struct *fromfsp, const DATA_BLOB *hdr,
1932 off_t offset, size_t n);
1933 ssize_t vfs_not_implemented_recvfile(vfs_handle_struct *handle, int fromfd,
1934 files_struct *tofsp, off_t offset, size_t n);
1935 int vfs_not_implemented_renameat(vfs_handle_struct *handle,
1936 files_struct *srcfsp,
1937 const struct smb_filename *smb_fname_src,
1938 files_struct *dstfsp,
1939 const struct smb_filename *smb_fname_dst);
1940 struct tevent_req *vfs_not_implemented_fsync_send(struct vfs_handle_struct *handle,
1941 TALLOC_CTX *mem_ctx,
1942 struct tevent_context *ev,
1943 struct files_struct *fsp);
1944 int vfs_not_implemented_fsync_recv(struct tevent_req *req,
1945 struct vfs_aio_state *vfs_aio_state);
1946 int vfs_not_implemented_stat(vfs_handle_struct *handle, struct smb_filename *smb_fname);
1947 int vfs_not_implemented_fstat(vfs_handle_struct *handle, files_struct *fsp,
1948 SMB_STRUCT_STAT *sbuf);
1949 int vfs_not_implemented_lstat(vfs_handle_struct *handle,
1950 struct smb_filename *smb_fname);
1951 uint64_t vfs_not_implemented_get_alloc_size(struct vfs_handle_struct *handle,
1952 struct files_struct *fsp,
1953 const SMB_STRUCT_STAT *sbuf);
1954 int vfs_not_implemented_unlinkat(vfs_handle_struct *handle,
1955 struct files_struct *dirfsp,
1956 const struct smb_filename *smb_fname,
1957 int flags);
1958 int vfs_not_implemented_fchmod(vfs_handle_struct *handle, files_struct *fsp,
1959 mode_t mode);
1960 int vfs_not_implemented_fchown(vfs_handle_struct *handle, files_struct *fsp,
1961 uid_t uid, gid_t gid);
1962 int vfs_not_implemented_lchown(vfs_handle_struct *handle,
1963 const struct smb_filename *smb_fname,
1964 uid_t uid,
1965 gid_t gid);
1966 int vfs_not_implemented_chdir(vfs_handle_struct *handle,
1967 const struct smb_filename *smb_fname);
1968 struct smb_filename *vfs_not_implemented_getwd(vfs_handle_struct *handle,
1969 TALLOC_CTX *ctx);
1970 int vfs_not_implemented_ntimes(vfs_handle_struct *handle,
1971 const struct smb_filename *smb_fname,
1972 struct smb_file_time *ft);
1973 int vfs_not_implemented_fntimes(vfs_handle_struct *handle,
1974 files_struct *fsp,
1975 struct smb_file_time *ft);
1976 int vfs_not_implemented_ftruncate(vfs_handle_struct *handle, files_struct *fsp,
1977 off_t offset);
1978 int vfs_not_implemented_fallocate(vfs_handle_struct *handle, files_struct *fsp,
1979 uint32_t mode, off_t offset, off_t len);
1980 bool vfs_not_implemented_lock(vfs_handle_struct *handle, files_struct *fsp, int op,
1981 off_t offset, off_t count, int type);
1982 int vfs_not_implemented_kernel_flock(struct vfs_handle_struct *handle,
1983 struct files_struct *fsp,
1984 uint32_t share_access, uint32_t access_mask);
1985 int vfs_not_implemented_fcntl(struct vfs_handle_struct *handle,
1986 struct files_struct *fsp, int cmd, va_list cmd_arg);
1987 int vfs_not_implemented_linux_setlease(struct vfs_handle_struct *handle,
1988 struct files_struct *fsp, int leasetype);
1989 bool vfs_not_implemented_getlock(vfs_handle_struct *handle, files_struct *fsp,
1990 off_t *poffset, off_t *pcount, int *ptype,
1991 pid_t *ppid);
1992 int vfs_not_implemented_symlinkat(vfs_handle_struct *handle,
1993 const struct smb_filename *link_contents,
1994 struct files_struct *dirfsp,
1995 const struct smb_filename *new_smb_fname);
1996 int vfs_not_implemented_vfs_readlinkat(vfs_handle_struct *handle,
1997 const struct files_struct *dirfsp,
1998 const struct smb_filename *smb_fname,
1999 char *buf,
2000 size_t bufsiz);
2001 int vfs_not_implemented_linkat(vfs_handle_struct *handle,
2002 struct files_struct *srcfsp,
2003 const struct smb_filename *old_smb_fname,
2004 struct files_struct *dstfsp,
2005 const struct smb_filename *new_smb_fname,
2006 int flags);
2007 int vfs_not_implemented_mknodat(vfs_handle_struct *handle,
2008 struct files_struct *dirfsp,
2009 const struct smb_filename *smb_fname,
2010 mode_t mode,
2011 SMB_DEV_T dev);
2012 struct smb_filename *vfs_not_implemented_realpath(vfs_handle_struct *handle,
2013 TALLOC_CTX *ctx,
2014 const struct smb_filename *smb_fname);
2015 int vfs_not_implemented_chflags(vfs_handle_struct *handle,
2016 const struct smb_filename *smb_fname,
2017 uint flags);
2018 struct file_id vfs_not_implemented_file_id_create(vfs_handle_struct *handle,
2019 const SMB_STRUCT_STAT *sbuf);
2020 uint64_t vfs_not_implemented_fs_file_id(vfs_handle_struct *handle,
2021 const SMB_STRUCT_STAT *sbuf);
2022 struct tevent_req *vfs_not_implemented_offload_read_send(
2023 TALLOC_CTX *mem_ctx,
2024 struct tevent_context *ev,
2025 struct vfs_handle_struct *handle,
2026 struct files_struct *fsp,
2027 uint32_t fsctl,
2028 uint32_t ttl,
2029 off_t offset,
2030 size_t to_copy);
2031 NTSTATUS vfs_not_implemented_offload_read_recv(struct tevent_req *req,
2032 struct vfs_handle_struct *handle,
2033 TALLOC_CTX *mem_ctx,
2034 DATA_BLOB *_token_blob);
2035 struct tevent_req *vfs_not_implemented_offload_write_send(
2036 struct vfs_handle_struct *handle,
2037 TALLOC_CTX *mem_ctx,
2038 struct tevent_context *ev,
2039 uint32_t fsctl,
2040 DATA_BLOB *token,
2041 off_t transfer_offset,
2042 struct files_struct *dest_fsp,
2043 off_t dest_off,
2044 off_t num);
2045 NTSTATUS vfs_not_implemented_offload_write_recv(struct vfs_handle_struct *handle,
2046 struct tevent_req *req,
2047 off_t *copied);
2048 NTSTATUS vfs_not_implemented_fget_compression(struct vfs_handle_struct *handle,
2049 TALLOC_CTX *mem_ctx,
2050 struct files_struct *fsp,
2051 uint16_t *_compression_fmt);
2052 NTSTATUS vfs_not_implemented_set_compression(struct vfs_handle_struct *handle,
2053 TALLOC_CTX *mem_ctx,
2054 struct files_struct *fsp,
2055 uint16_t compression_fmt);
2056 NTSTATUS vfs_not_implemented_fstreaminfo(struct vfs_handle_struct *handle,
2057 struct files_struct *fsp,
2058 TALLOC_CTX *mem_ctx,
2059 unsigned int *num_streams,
2060 struct stream_struct **streams);
2061 int vfs_not_implemented_get_real_filename(struct vfs_handle_struct *handle,
2062 const struct smb_filename *path,
2063 const char *name,
2064 TALLOC_CTX *mem_ctx,
2065 char **found_name);
2066 const char *vfs_not_implemented_connectpath(struct vfs_handle_struct *handle,
2067 const struct smb_filename *smb_fname);
2068 NTSTATUS vfs_not_implemented_brl_lock_windows(struct vfs_handle_struct *handle,
2069 struct byte_range_lock *br_lck,
2070 struct lock_struct *plock);
2071 bool vfs_not_implemented_brl_unlock_windows(struct vfs_handle_struct *handle,
2072 struct byte_range_lock *br_lck,
2073 const struct lock_struct *plock);
2074 bool vfs_not_implemented_strict_lock_check(struct vfs_handle_struct *handle,
2075 struct files_struct *fsp,
2076 struct lock_struct *plock);
2077 NTSTATUS vfs_not_implemented_translate_name(struct vfs_handle_struct *handle,
2078 const char *mapped_name,
2079 enum vfs_translate_direction direction,
2080 TALLOC_CTX *mem_ctx, char **pmapped_name);
2081 NTSTATUS vfs_not_implemented_fsctl(struct vfs_handle_struct *handle,
2082 struct files_struct *fsp,
2083 TALLOC_CTX *ctx,
2084 uint32_t function,
2085 uint16_t req_flags, /* Needed for UNICODE ... */
2086 const uint8_t *_in_data,
2087 uint32_t in_len,
2088 uint8_t **_out_data,
2089 uint32_t max_out_len, uint32_t *out_len);
2090 NTSTATUS vfs_not_implemented_freaddir_attr(struct vfs_handle_struct *handle,
2091 struct files_struct *dirfsp,
2092 TALLOC_CTX *mem_ctx,
2093 struct readdir_attr_data **pattr_data);
2094 struct tevent_req *vfs_not_implemented_get_dos_attributes_send(
2095 TALLOC_CTX *mem_ctx,
2096 struct tevent_context *ev,
2097 struct vfs_handle_struct *handle,
2098 files_struct *dir_fsp,
2099 struct smb_filename *smb_fname);
2100 NTSTATUS vfs_not_implemented_get_dos_attributes_recv(
2101 struct tevent_req *req,
2102 struct vfs_aio_state *aio_state,
2103 uint32_t *dosmode);
2104 NTSTATUS vfs_not_implemented_fget_dos_attributes(struct vfs_handle_struct *handle,
2105 struct files_struct *fsp,
2106 uint32_t *dosmode);
2107 NTSTATUS vfs_not_implemented_set_dos_attributes(struct vfs_handle_struct *handle,
2108 const struct smb_filename *smb_fname,
2109 uint32_t dosmode);
2110 NTSTATUS vfs_not_implemented_fset_dos_attributes(struct vfs_handle_struct *handle,
2111 struct files_struct *fsp,
2112 uint32_t dosmode);
2113 NTSTATUS vfs_not_implemented_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
2114 uint32_t security_info,
2115 TALLOC_CTX *mem_ctx,
2116 struct security_descriptor **ppdesc);
2117 NTSTATUS vfs_not_implemented_get_nt_acl_at(vfs_handle_struct *handle,
2118 struct files_struct *dirfsp,
2119 const struct smb_filename *smb_fname,
2120 uint32_t security_info,
2121 TALLOC_CTX *mem_ctx,
2122 struct security_descriptor **ppdesc);
2123 NTSTATUS vfs_not_implemented_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
2124 uint32_t security_info_sent,
2125 const struct security_descriptor *psd);
2126 SMB_ACL_T vfs_not_implemented_sys_acl_get_file(vfs_handle_struct *handle,
2127 const struct smb_filename *smb_fname,
2128 SMB_ACL_TYPE_T type,
2129 TALLOC_CTX *mem_ctx);
2130 SMB_ACL_T vfs_not_implemented_sys_acl_get_fd(vfs_handle_struct *handle,
2131 files_struct *fsp, TALLOC_CTX *mem_ctx);
2132 int vfs_not_implemented_sys_acl_blob_get_file(vfs_handle_struct *handle,
2133 const struct smb_filename *smb_fname,
2134 TALLOC_CTX *mem_ctx,
2135 char **blob_description,
2136 DATA_BLOB *blob);
2137 int vfs_not_implemented_sys_acl_blob_get_fd(vfs_handle_struct *handle,
2138 files_struct *fsp, TALLOC_CTX *mem_ctx,
2139 char **blob_description, DATA_BLOB *blob);
2140 int vfs_not_implemented_sys_acl_set_fd(vfs_handle_struct *handle,
2141 struct files_struct *fsp,
2142 SMB_ACL_TYPE_T type,
2143 SMB_ACL_T theacl);
2144 int vfs_not_implemented_sys_acl_delete_def_file(vfs_handle_struct *handle,
2145 const struct smb_filename *smb_fname);
2146 int vfs_not_implemented_sys_acl_delete_def_fd(vfs_handle_struct *handle,
2147 files_struct *fsp);
2148 ssize_t vfs_not_implemented_getxattr(vfs_handle_struct *handle,
2149 const struct smb_filename *smb_fname,
2150 const char *name,
2151 void *value,
2152 size_t size);
2153 struct tevent_req *vfs_not_implemented_getxattrat_send(
2154 TALLOC_CTX *mem_ctx,
2155 struct tevent_context *ev,
2156 struct vfs_handle_struct *handle,
2157 files_struct *dir_fsp,
2158 const struct smb_filename *smb_fname,
2159 const char *xattr_name,
2160 size_t alloc_hint);
2161 ssize_t vfs_not_implemented_getxattrat_recv(struct tevent_req *req,
2162 struct vfs_aio_state *aio_state,
2163 TALLOC_CTX *mem_ctx,
2164 uint8_t **xattr_value);
2165 ssize_t vfs_not_implemented_fgetxattr(vfs_handle_struct *handle,
2166 struct files_struct *fsp, const char *name,
2167 void *value, size_t size);
2168 ssize_t vfs_not_implemented_listxattr(vfs_handle_struct *handle,
2169 const struct smb_filename *smb_fname,
2170 char *list,
2171 size_t size);
2172 ssize_t vfs_not_implemented_flistxattr(vfs_handle_struct *handle,
2173 struct files_struct *fsp, char *list,
2174 size_t size);
2175 int vfs_not_implemented_fremovexattr(vfs_handle_struct *handle,
2176 struct files_struct *fsp, const char *name);
2177 int vfs_not_implemented_setxattr(vfs_handle_struct *handle,
2178 const struct smb_filename *smb_fname,
2179 const char *name,
2180 const void *value,
2181 size_t size,
2182 int flags);
2183 int vfs_not_implemented_fsetxattr(vfs_handle_struct *handle, struct files_struct *fsp,
2184 const char *name, const void *value, size_t size,
2185 int flags);
2186 bool vfs_not_implemented_aio_force(struct vfs_handle_struct *handle,
2187 struct files_struct *fsp);
2188 NTSTATUS vfs_not_implemented_audit_file(struct vfs_handle_struct *handle,
2189 struct smb_filename *file,
2190 struct security_acl *sacl,
2191 uint32_t access_requested,
2192 uint32_t access_denied);
2193 NTSTATUS vfs_not_implemented_durable_cookie(struct vfs_handle_struct *handle,
2194 struct files_struct *fsp,
2195 TALLOC_CTX *mem_ctx,
2196 DATA_BLOB *cookie);
2197 NTSTATUS vfs_not_implemented_durable_disconnect(struct vfs_handle_struct *handle,
2198 struct files_struct *fsp,
2199 const DATA_BLOB old_cookie,
2200 TALLOC_CTX *mem_ctx,
2201 DATA_BLOB *new_cookie);
2202 NTSTATUS vfs_not_implemented_durable_reconnect(struct vfs_handle_struct *handle,
2203 struct smb_request *smb1req,
2204 struct smbXsrv_open *op,
2205 const DATA_BLOB old_cookie,
2206 TALLOC_CTX *mem_ctx,
2207 struct files_struct **fsp,
2208 DATA_BLOB *new_cookie);
2209 #endif /* _VFS_H */