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.
29 /* Avoid conflict with an AIX include file */
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
45 * If you change anything here, please also update modules/vfs_full_audit.c.
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
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() */
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 /* Bump to version 35 - Samba 4.5 will ship with that */
174 /* Version 35 - Change get_nt_acl_fn from const char *, to
175 const struct smb_filename * */
176 /* Version 35 - Change mkdir from const char *, to
177 const struct smb_filename * */
178 /* Version 35 - Change rmdir from const char *, to
179 const struct smb_filename * */
180 /* Version 35 - Change opendir from const char *, to
181 const struct smb_filename * */
182 /* Version 35 - Wrap aio async funtions args in a struct vfs_aio_state */
183 /* Version 35 - Change chmod from const char *, to
184 const struct smb_filename * */
185 /* Version 35 - Change chmod_acl from const char *, to
186 const struct smb_filename * */
187 /* Version 35 - Change chown from const char *, to
188 const struct smb_filename * */
189 /* Version 35 - Change lchown from const char *, to
190 const struct smb_filename * */
191 /* Version 35 - Change streaminfo from const char *, to
192 const struct smb_filename * */
193 /* Version 35 - Add uint32_t flags to struct smb_filename */
194 /* Version 35 - Add get/set/fget/fset dos attribute functions. */
195 /* Version 35 - Add bool use_ofd_locks to struct files_struct */
196 /* Bump to version 36 - Samba 4.6 will ship with that */
197 /* Version 36 - Remove is_offline and set_offline */
198 /* Version 37 - Module init functions now take a TALLOC_CTX * parameter. */
199 /* Version 37 - Add vfs_copy_chunk_flags for DUP_EXTENTS_TO_FILE */
200 /* Version 37 - Change sys_acl_delete_def_file from const char *
201 to const struct smb_filename * */
202 /* Version 37 - Change sys_acl_get_file from const char *
203 to const struct smb_filename * */
204 /* Version 37 - Change sys_acl_blob_get_file from const char *
205 to const struct smb_filename * */
206 /* Version 37 - Change sys_acl_set_file from const char *
207 to const struct smb_filename * */
208 /* Version 37 - Change listxattr from const char *
209 to const struct smb_filename * */
210 /* Version 37 - Change removexattr from const char *
211 to const struct smb_filename * */
212 /* Version 37 - Change setxattr from const char *
213 to const struct smb_filename * */
214 /* Version 37 - Change getxattr from const char *
215 to const struct smb_filename * */
216 /* Version 37 - Change mknod from const char * to const struct smb_filename * */
217 /* Version 37 - Change chflags from const char *
218 to const struct smb_filename * */
219 /* Version 37 - Change disk_free from const char *
220 to const struct smb_filename * */
221 /* Version 37 - Change get_quota from const char *
222 to const struct smb_filename * */
223 /* Version 37 - Change link from const char *
224 to const struct smb_filename * */
225 /* Version 37 - Change statvfs from const char *
226 to const struct smb_filename * */
227 /* Version 37 - Change readlink from const char *
228 to const struct smb_filename * */
229 /* Version 37 - Change symlink from const char *
230 to const struct smb_filename * */
231 /* Version 37 - Change chdir from const char *
232 to const struct smb_filename * */
233 /* Version 37 - Change getwd from char *
234 to const struct smb_filename * */
235 /* Version 37 - Change conn->cwd from char *
236 to struct smb_filename * */
237 /* Version 37 - Change realpath from char *
238 to struct smb_filename * */
239 /* Version 37 - Change connectpath from char *
240 to struct smb_filename * */
241 /* Version 37 - Add SMB_VFS_OFFLOAD_READ_SEND/RECV */
242 /* Version 37 - Rename SMB_VFS_COPY_CHUNK_SEND/RECV to
243 SMB_VFS_OFFLOAD_READ_SEND/RECV */
244 /* Version 37 - Remove SMB_VFS_STRICT_UNLOCK */
245 /* Version 37 - Rename SMB_VFS_STRICT_LOCK to
246 SMB_VFS_STRICT_LOCK_CHECK */
247 /* Version 38 - Remove SMB_VFS_INIT_SEARCH_OP */
248 /* Bump to version 39, Samba 4.9 will ship with that */
249 /* Version 39 - Remove SMB_VFS_FSYNC
250 Only implement async versions. */
251 /* Version 39 - Remove SMB_VFS_READ
252 All users are now pread or async versions. */
253 /* Version 39 - Remove SMB_VFS_WRITE
254 All users are now pwrite or async versions. */
255 /* Version 39 - Remove SMB_VFS_CHMOD_ACL - no longer used. */
256 /* Version 39 - Remove SMB_VFS_FCHMOD_ACL - no longer used. */
257 /* Version 39 - Remove struct dfree_cached_info pointer from
259 /* Bump to version 40, Samba 4.10 will ship with that */
260 /* Version 40 - Add SMB_VFS_GETXATTRAT_SEND/RECV */
261 /* Version 40 - Add SMB_VFS_GET_DOS_ATTRIBUTES_SEND/RECV */
262 /* Bump to version 41, Samba 4.11 will ship with that */
263 /* Version 41 - Remove SMB_VFS_BRL_CANCEL_WINDOWS */
265 #define SMB_VFS_INTERFACE_VERSION 41
268 All intercepted VFS operations must be declared as static functions inside module source
269 in order to keep smbd namespace unpolluted. See source of audit, extd_audit, fake_perms and recycle
270 example VFS modules for more details.
273 /* VFS operations structure */
275 struct vfs_handle_struct;
276 struct connection_struct;
278 struct security_descriptor;
279 struct vfs_statvfs_struct;
282 struct smb_file_time;
283 struct blocking_lock_record;
285 struct dfs_GetDFSReferral;
287 typedef union unid_t {
295 uint64_t position_information;
297 uint32_t private_options; /* NT Create options, but we only look at
298 * NTCREATEX_OPTIONS_PRIVATE_DENY_DOS and
299 * NTCREATEX_OPTIONS_PRIVATE_DENY_FCB and
300 * NTCREATEX_OPTIONS_PRIVATE_DELETE_ON_CLOSE
301 * for print files *only*, where
302 * DELETE_ON_CLOSE is not stored in the share
305 unsigned long gen_id;
310 struct smbd_server_connection *sconn;
311 struct tevent_timer *timeout;
312 struct smb2_lease lease;
315 typedef struct files_struct {
316 struct files_struct *next, *prev;
318 struct smbXsrv_open *op;
319 struct connection_struct *conn;
320 struct fd_handle *fh;
321 unsigned int num_smb_operations;
322 struct file_id file_id;
323 uint64_t initial_allocation_size; /* Faked up initial allocation on disk. */
325 uint64_t vuid; /* SMB2 compat */
326 struct write_cache *wcp;
327 struct timeval open_time;
328 uint32_t access_mask; /* NTCreateX access bits (FILE_READ_DATA etc.) */
329 uint32_t share_access; /* NTCreateX share constants (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE). */
331 bool kernel_share_modes_taken;
333 bool update_write_time_triggered;
334 struct tevent_timer *update_write_time_event;
335 bool update_write_time_on_close;
336 struct timespec close_write_time;
337 bool write_time_forced;
340 struct fsp_lease *lease;
341 int sent_oplock_break;
342 struct tevent_timer *oplock_timeout;
343 struct lock_struct last_lock_failure;
344 int current_lock_count; /* Count the number of outstanding locks and pending locks. */
351 bool aio_write_behind;
352 bool initial_delete_on_close; /* Only set at NTCreateX if file was created. */
353 bool delete_on_close;
354 uint64_t posix_flags;
356 bool backup_intent; /* Handle was successfully opened with backup intent
357 and opener has privilege to do so. */
358 bool use_ofd_locks; /* Are we using open file description locks ? */
359 struct smb_filename *fsp_name;
360 uint32_t name_hash; /* Jenkins hash of full pathname. */
361 uint64_t mid; /* Mid of the operation that created us. */
363 struct vfs_fsp_data *vfs_extension;
364 struct fake_file_handle *fake_file_handle;
366 struct notify_change_buf *notify;
368 struct files_struct *base_fsp; /* placeholder for delete on close */
371 * Read-only cached brlock record, thrown away when the
372 * brlock.tdb seqnum changes. This avoids fetching data from
373 * the brlock.tdb on every read/write call.
376 struct byte_range_lock *brlock_rec;
378 struct dptr_struct *dptr;
380 /* if not NULL, means this is a print file */
381 struct print_file_data *print_file;
384 * Optimize the aio_requests array for high performance: Never
385 * shrink it, maintain num_aio_requests separately
387 unsigned num_aio_requests;
388 struct tevent_req **aio_requests;
392 * Requests waiting for smb1 byte range locks. They are
393 * generated by smbd_smb1_do_locks_send and are required here,
394 * because lock cancel operations index through reply_lockingX
395 * not based on mid but on the lock type and range.
397 struct tevent_req **blocked_smb1_lock_reqs;
400 * SMB1 remembers lock failures and delays repeated blocking
401 * lock attempts on the same offset.
403 bool lock_failure_seen;
404 uint64_t lock_failure_offset;
407 * If a close request comes in while we still have aio_requests
408 * around, we need to hold back the close. When all aio_requests are
409 * done, the aio completion routines need tevent_wait_done() on
410 * this. A bit ugly, but before we have close_file() fully async
411 * possibly the simplest approach. Thanks, Jeremy for the idea.
413 struct tevent_req *deferred_close;
416 #define FSP_POSIX_FLAGS_OPEN 0x01
417 #define FSP_POSIX_FLAGS_RENAME 0x02
418 #define FSP_POSIX_FLAGS_PATHNAMES 0x04
420 #define FSP_POSIX_FLAGS_ALL \
421 (FSP_POSIX_FLAGS_OPEN | \
422 FSP_POSIX_FLAGS_PATHNAMES | \
423 FSP_POSIX_FLAGS_RENAME)
425 struct vuid_cache_entry {
426 struct auth_session_info *session_info;
427 uint64_t vuid; /* SMB2 compat */
429 uint32_t share_access;
433 unsigned int next_entry;
434 struct vuid_cache_entry array[VUID_CACHE_SIZE];
440 } name_compare_entry;
442 struct share_params {
446 typedef struct connection_struct {
447 struct connection_struct *next, *prev;
448 struct smbd_server_connection *sconn; /* can be NULL */
449 struct smbXsrv_tcon *tcon; /* can be NULL */
450 uint32_t cnum; /* an index passed over the wire */
451 struct share_params *params;
453 struct vuid_cache *vuid_cache;
456 bool read_only; /* Attributes for the current user of the share. */
457 uint32_t share_access;
458 /* Does this filesystem honor
459 sub second timestamps on files
460 and directories when setting time ? */
461 enum timestamp_set_resolution ts_res;
464 struct smb_filename *cwd_fname; /* Working directory. */
467 struct vfs_handle_struct *vfs_handles; /* for the new plugins */
470 * This represents the user information on this connection. Depending
471 * on the vuid using this tid, this might change per SMB request.
473 struct auth_session_info *session_info;
476 * If the "force group" parameter is set, this is the primary gid that
477 * may be used in the users token, depending on the vuid using this tid.
479 gid_t force_group_gid;
481 uint64_t vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
484 time_t lastused_count;
486 unsigned int num_smb_operations; /* Count of smb operations on this tree. */
490 /* Semantics requested by the client or forced by the server config. */
493 bool short_case_preserve;
495 /* Semantics provided by the underlying filesystem. */
497 /* Device number of the directory of the share mount.
498 Used to ensure unique FileIndex returns. */
499 SMB_DEV_T base_share_dev;
501 name_compare_entry *hide_list; /* Per-share list of files to return as hidden. */
502 name_compare_entry *veto_list; /* Per-share list of files to veto (never show). */
503 name_compare_entry *veto_oplock_list; /* Per-share list of files to refuse oplocks on. */
504 name_compare_entry *aio_write_behind_list; /* Per-share list of files to use aio write behind on. */
505 struct trans_state *pending_trans;
507 struct rpc_pipe_client *spoolss_pipe;
511 struct smbd_smb2_request;
512 struct privilege_paths;
518 uint64_t mid; /* For compatibility with SMB2. */
520 uint64_t vuid; /* For compatibility with SMB2. */
526 const uint8_t *inbuf;
529 * Async handling in the main smb processing loop is directed by
530 * outbuf: reply_xxx routines indicate sync behaviour by putting their
531 * reply into "outbuf". If they leave it as NULL, they take care of it
532 * themselves, possibly later.
534 * If async handling is wanted, the reply_xxx routine must make sure
535 * that it talloc_move()s the smb_req somewhere else.
541 connection_struct *conn;
542 struct smbd_server_connection *sconn;
543 struct smbXsrv_connection *xconn;
544 struct smb_perfcount_data pcd;
547 * Chained request handling
549 struct files_struct *chain_fsp;
552 * state information for async smb handling
557 * Back pointer to smb2 request.
559 struct smbd_smb2_request *smb2req;
562 * Pathnames used if request done
565 struct privilege_paths *priv_paths;
568 * Request list for chained requests, we're part of it.
570 struct smb_request **chain;
572 struct timeval request_time;
574 bool posix_pathnames;
578 * Info about an alternate data stream
581 struct stream_struct {
588 struct smb_file_time {
589 struct timespec mtime;
590 struct timespec atime;
591 struct timespec ctime;
592 struct timespec create_time;
598 struct smb_filename {
601 char *original_lcomp;
607 * smb_filename flags. Define in terms of the FSP_POSIX_FLAGS_XX
608 * to keep the numeric values consistent.
611 #define SMB_FILENAME_POSIX_PATH FSP_POSIX_FLAGS_PATHNAMES
613 #define VFS_FIND(__fn__) while (handle->fns->__fn__##_fn==NULL) { \
614 handle = handle->next; \
617 enum vfs_translate_direction {
618 vfs_translate_to_unix = 0,
619 vfs_translate_to_windows
622 enum vfs_fallocate_flags {
623 VFS_FALLOCATE_FL_KEEP_SIZE = 0x0001,
624 VFS_FALLOCATE_FL_PUNCH_HOLE = 0x0002,
627 struct vfs_aio_state {
633 Available VFS operations. These values must be in sync with vfs_ops struct
634 (struct vfs_fn_pointers and struct vfs_handle_pointers inside of struct vfs_ops).
635 In particular, if new operations are added to vfs_ops, appropriate constants
636 should be added to vfs_op_type so that order of them kept same as in vfs_ops.
638 struct shadow_copy_data;
640 struct vfs_fn_pointers {
641 /* Disk operations */
643 int (*connect_fn)(struct vfs_handle_struct *handle, const char *service, const char *user);
644 void (*disconnect_fn)(struct vfs_handle_struct *handle);
645 uint64_t (*disk_free_fn)(struct vfs_handle_struct *handle,
646 const struct smb_filename *smb_fname,
650 int (*get_quota_fn)(struct vfs_handle_struct *handle,
651 const struct smb_filename *smb_fname,
652 enum SMB_QUOTA_TYPE qtype,
655 int (*set_quota_fn)(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt);
656 int (*get_shadow_copy_data_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, struct shadow_copy_data *shadow_copy_data, bool labels);
657 int (*statvfs_fn)(struct vfs_handle_struct *handle,
658 const struct smb_filename *smb_fname,
659 struct vfs_statvfs_struct *statbuf);
660 uint32_t (*fs_capabilities_fn)(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res);
663 * Note: that "struct dfs_GetDFSReferral *r"
664 * needs to be a valid TALLOC_CTX
666 NTSTATUS (*get_dfs_referrals_fn)(struct vfs_handle_struct *handle,
667 struct dfs_GetDFSReferral *r);
669 /* Directory operations */
671 DIR *(*opendir_fn)(struct vfs_handle_struct *handle,
672 const struct smb_filename *smb_fname,
674 uint32_t attributes);
675 DIR *(*fdopendir_fn)(struct vfs_handle_struct *handle, files_struct *fsp, const char *mask, uint32_t attributes);
676 struct dirent *(*readdir_fn)(struct vfs_handle_struct *handle,
678 SMB_STRUCT_STAT *sbuf);
679 void (*seekdir_fn)(struct vfs_handle_struct *handle, DIR *dirp, long offset);
680 long (*telldir_fn)(struct vfs_handle_struct *handle, DIR *dirp);
681 void (*rewind_dir_fn)(struct vfs_handle_struct *handle, DIR *dirp);
682 int (*mkdir_fn)(struct vfs_handle_struct *handle,
683 const struct smb_filename *smb_fname,
685 int (*rmdir_fn)(struct vfs_handle_struct *handle,
686 const struct smb_filename *smb_fname);
687 int (*closedir_fn)(struct vfs_handle_struct *handle, DIR *dir);
689 /* File operations */
691 int (*open_fn)(struct vfs_handle_struct *handle,
692 struct smb_filename *smb_fname, files_struct *fsp,
693 int flags, mode_t mode);
694 NTSTATUS (*create_file_fn)(struct vfs_handle_struct *handle,
695 struct smb_request *req,
696 uint16_t root_dir_fid,
697 struct smb_filename *smb_fname,
698 uint32_t access_mask,
699 uint32_t share_access,
700 uint32_t create_disposition,
701 uint32_t create_options,
702 uint32_t file_attributes,
703 uint32_t oplock_request,
704 struct smb2_lease *lease,
705 uint64_t allocation_size,
706 uint32_t private_flags,
707 struct security_descriptor *sd,
708 struct ea_list *ea_list,
709 files_struct **result,
711 const struct smb2_create_blobs *in_context_blobs,
712 struct smb2_create_blobs *out_context_blobs);
713 int (*close_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
714 ssize_t (*pread_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, void *data, size_t n, off_t offset);
715 struct tevent_req *(*pread_send_fn)(struct vfs_handle_struct *handle,
717 struct tevent_context *ev,
718 struct files_struct *fsp,
720 size_t n, off_t offset);
721 ssize_t (*pread_recv_fn)(struct tevent_req *req, struct vfs_aio_state *state);
722 ssize_t (*pwrite_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n, off_t offset);
723 struct tevent_req *(*pwrite_send_fn)(struct vfs_handle_struct *handle,
725 struct tevent_context *ev,
726 struct files_struct *fsp,
728 size_t n, off_t offset);
729 ssize_t (*pwrite_recv_fn)(struct tevent_req *req, struct vfs_aio_state *state);
730 off_t (*lseek_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t offset, int whence);
731 ssize_t (*sendfile_fn)(struct vfs_handle_struct *handle, int tofd, files_struct *fromfsp, const DATA_BLOB *header, off_t offset, size_t count);
732 ssize_t (*recvfile_fn)(struct vfs_handle_struct *handle, int fromfd, files_struct *tofsp, off_t offset, size_t count);
733 int (*rename_fn)(struct vfs_handle_struct *handle,
734 const struct smb_filename *smb_fname_src,
735 const struct smb_filename *smb_fname_dst);
736 struct tevent_req *(*fsync_send_fn)(struct vfs_handle_struct *handle,
738 struct tevent_context *ev,
739 struct files_struct *fsp);
740 int (*fsync_recv_fn)(struct tevent_req *req, struct vfs_aio_state *state);
741 int (*stat_fn)(struct vfs_handle_struct *handle, struct smb_filename *smb_fname);
742 int (*fstat_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_STAT *sbuf);
743 int (*lstat_fn)(struct vfs_handle_struct *handle, struct smb_filename *smb_filename);
744 uint64_t (*get_alloc_size_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const SMB_STRUCT_STAT *sbuf);
745 int (*unlink_fn)(struct vfs_handle_struct *handle,
746 const struct smb_filename *smb_fname);
747 int (*chmod_fn)(struct vfs_handle_struct *handle,
748 const struct smb_filename *smb_fname,
750 int (*fchmod_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, mode_t mode);
751 int (*chown_fn)(struct vfs_handle_struct *handle,
752 const struct smb_filename *smb_fname,
755 int (*fchown_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, uid_t uid, gid_t gid);
756 int (*lchown_fn)(struct vfs_handle_struct *handle,
757 const struct smb_filename *smb_fname,
760 int (*chdir_fn)(struct vfs_handle_struct *handle,
761 const struct smb_filename *smb_fname);
762 struct smb_filename *(*getwd_fn)(struct vfs_handle_struct *handle,
763 TALLOC_CTX *mem_ctx);
764 int (*ntimes_fn)(struct vfs_handle_struct *handle,
765 const struct smb_filename *smb_fname,
766 struct smb_file_time *ft);
767 int (*ftruncate_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t offset);
768 int (*fallocate_fn)(struct vfs_handle_struct *handle,
769 struct files_struct *fsp,
773 bool (*lock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int op, off_t offset, off_t count, int type);
774 int (*kernel_flock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp,
775 uint32_t share_mode, uint32_t access_mask);
776 int (*linux_setlease_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int leasetype);
777 bool (*getlock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t *poffset, off_t *pcount, int *ptype, pid_t *ppid);
778 int (*symlink_fn)(struct vfs_handle_struct *handle,
779 const char *link_contents,
780 const struct smb_filename *new_smb_fname);
781 int (*readlink_fn)(struct vfs_handle_struct *handle,
782 const struct smb_filename *smb_fname,
785 int (*link_fn)(struct vfs_handle_struct *handle,
786 const struct smb_filename *old_smb_fname,
787 const struct smb_filename *new_smb_fname);
788 int (*mknod_fn)(struct vfs_handle_struct *handle,
789 const struct smb_filename *smb_fname,
792 struct smb_filename *(*realpath_fn)(struct vfs_handle_struct *handle,
794 const struct smb_filename *smb_fname);
795 int (*chflags_fn)(struct vfs_handle_struct *handle,
796 const struct smb_filename *smb_fname,
798 struct file_id (*file_id_create_fn)(struct vfs_handle_struct *handle,
799 const SMB_STRUCT_STAT *sbuf);
800 struct tevent_req *(*offload_read_send_fn)(TALLOC_CTX *mem_ctx,
801 struct tevent_context *ev,
802 struct vfs_handle_struct *handle,
803 struct files_struct *fsp,
808 NTSTATUS (*offload_read_recv_fn)(struct tevent_req *req,
809 struct vfs_handle_struct *handle,
811 DATA_BLOB *token_blob);
812 struct tevent_req *(*offload_write_send_fn)(struct vfs_handle_struct *handle,
814 struct tevent_context *ev,
817 off_t transfer_offset,
818 struct files_struct *dest_fsp,
821 NTSTATUS (*offload_write_recv_fn)(struct vfs_handle_struct *handle,
822 struct tevent_req *req,
824 NTSTATUS (*get_compression_fn)(struct vfs_handle_struct *handle,
826 struct files_struct *fsp,
827 struct smb_filename *smb_fname,
828 uint16_t *_compression_fmt);
829 NTSTATUS (*set_compression_fn)(struct vfs_handle_struct *handle,
831 struct files_struct *fsp,
832 uint16_t compression_fmt);
833 NTSTATUS (*snap_check_path_fn)(struct vfs_handle_struct *handle,
835 const char *service_path,
837 NTSTATUS (*snap_create_fn)(struct vfs_handle_struct *handle,
839 const char *base_volume,
844 NTSTATUS (*snap_delete_fn)(struct vfs_handle_struct *handle,
849 NTSTATUS (*streaminfo_fn)(struct vfs_handle_struct *handle,
850 struct files_struct *fsp,
851 const struct smb_filename *smb_fname,
853 unsigned int *num_streams,
854 struct stream_struct **streams);
856 int (*get_real_filename_fn)(struct vfs_handle_struct *handle,
862 const char *(*connectpath_fn)(struct vfs_handle_struct *handle,
863 const struct smb_filename *smb_fname);
865 NTSTATUS (*brl_lock_windows_fn)(struct vfs_handle_struct *handle,
866 struct byte_range_lock *br_lck,
867 struct lock_struct *plock,
870 bool (*brl_unlock_windows_fn)(struct vfs_handle_struct *handle,
871 struct messaging_context *msg_ctx,
872 struct byte_range_lock *br_lck,
873 const struct lock_struct *plock);
875 bool (*strict_lock_check_fn)(struct vfs_handle_struct *handle,
876 struct files_struct *fsp,
877 struct lock_struct *plock);
879 NTSTATUS (*translate_name_fn)(struct vfs_handle_struct *handle,
881 enum vfs_translate_direction direction,
885 NTSTATUS (*fsctl_fn)(struct vfs_handle_struct *handle,
886 struct files_struct *fsp,
890 const uint8_t *_in_data,
893 uint32_t max_out_len,
896 NTSTATUS (*get_dos_attributes_fn)(struct vfs_handle_struct *handle,
897 struct smb_filename *smb_fname,
900 NTSTATUS (*fget_dos_attributes_fn)(struct vfs_handle_struct *handle,
901 struct files_struct *fsp,
904 NTSTATUS (*set_dos_attributes_fn)(struct vfs_handle_struct *handle,
905 const struct smb_filename *smb_fname,
908 NTSTATUS (*fset_dos_attributes_fn)(struct vfs_handle_struct *hande,
909 struct files_struct *fsp,
912 struct tevent_req *(*get_dos_attributes_send_fn)(
914 struct tevent_context *ev,
915 struct vfs_handle_struct *handle,
916 files_struct *dir_fsp,
917 struct smb_filename *smb_fname);
919 NTSTATUS (*get_dos_attributes_recv_fn)(
920 struct tevent_req *req,
921 struct vfs_aio_state *aio_state,
924 /* NT ACL operations. */
926 NTSTATUS (*fget_nt_acl_fn)(struct vfs_handle_struct *handle,
927 struct files_struct *fsp,
928 uint32_t security_info,
930 struct security_descriptor **ppdesc);
931 NTSTATUS (*get_nt_acl_fn)(struct vfs_handle_struct *handle,
932 const struct smb_filename *smb_fname,
933 uint32_t security_info,
935 struct security_descriptor **ppdesc);
936 NTSTATUS (*fset_nt_acl_fn)(struct vfs_handle_struct *handle,
937 struct files_struct *fsp,
938 uint32_t security_info_sent,
939 const struct security_descriptor *psd);
941 NTSTATUS (*audit_file_fn)(struct vfs_handle_struct *handle,
942 struct smb_filename *file,
943 struct security_acl *sacl,
944 uint32_t access_requested,
945 uint32_t access_denied);
947 /* POSIX ACL operations. */
949 SMB_ACL_T (*sys_acl_get_file_fn)(struct vfs_handle_struct *handle,
950 const struct smb_filename *smb_fname,
952 TALLOC_CTX *mem_ctx);
953 SMB_ACL_T (*sys_acl_get_fd_fn)(struct vfs_handle_struct *handle,
954 struct files_struct *fsp,
955 TALLOC_CTX *mem_ctx);
956 int (*sys_acl_blob_get_file_fn)(struct vfs_handle_struct *handle,
957 const struct smb_filename *smb_fname,
959 char **blob_description,
961 int (*sys_acl_blob_get_fd_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp,
962 TALLOC_CTX *mem_ctx, char **blob_description,
964 int (*sys_acl_set_file_fn)(struct vfs_handle_struct *handle,
965 const struct smb_filename *smb_fname,
966 SMB_ACL_TYPE_T acltype,
968 int (*sys_acl_set_fd_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_ACL_T theacl);
969 int (*sys_acl_delete_def_file_fn)(struct vfs_handle_struct *handle,
970 const struct smb_filename *smb_fname);
973 ssize_t (*getxattr_fn)(struct vfs_handle_struct *handle,
974 const struct smb_filename *smb_fname,
978 struct tevent_req *(*getxattrat_send_fn)(
980 struct tevent_context *ev,
981 struct vfs_handle_struct *handle,
982 files_struct *dir_fsp,
983 const struct smb_filename *smb_fname,
984 const char *xattr_name,
986 ssize_t (*getxattrat_recv_fn)(struct tevent_req *req,
987 struct vfs_aio_state *aio_state,
989 uint8_t **xattr_value);
990 ssize_t (*fgetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size);
991 ssize_t (*listxattr_fn)(struct vfs_handle_struct *handle,
992 const struct smb_filename *smb_fname,
995 ssize_t (*flistxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size);
996 int (*removexattr_fn)(struct vfs_handle_struct *handle,
997 const struct smb_filename *smb_fname,
999 int (*fremovexattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name);
1000 int (*setxattr_fn)(struct vfs_handle_struct *handle,
1001 const struct smb_filename *smb_fname,
1006 int (*fsetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags);
1008 /* aio operations */
1009 bool (*aio_force_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
1011 /* durable handle operations */
1012 NTSTATUS (*durable_cookie_fn)(struct vfs_handle_struct *handle,
1013 struct files_struct *fsp,
1014 TALLOC_CTX *mem_ctx,
1016 NTSTATUS (*durable_disconnect_fn)(struct vfs_handle_struct *handle,
1017 struct files_struct *fsp,
1018 const DATA_BLOB old_cookie,
1019 TALLOC_CTX *mem_ctx,
1020 DATA_BLOB *new_cookie);
1021 NTSTATUS (*durable_reconnect_fn)(struct vfs_handle_struct *handle,
1022 struct smb_request *smb1req,
1023 struct smbXsrv_open *op,
1024 const DATA_BLOB old_cookie,
1025 TALLOC_CTX *mem_ctx,
1026 struct files_struct **fsp,
1027 DATA_BLOB *new_cookie);
1029 NTSTATUS (*readdir_attr_fn)(struct vfs_handle_struct *handle,
1030 const struct smb_filename *fname,
1031 TALLOC_CTX *mem_ctx,
1032 struct readdir_attr_data **attr_data);
1036 VFS operation description. Each VFS module registers an array of vfs_op_tuple to VFS subsystem,
1037 which describes all operations this module is willing to intercept.
1038 VFS subsystem initializes then the conn->vfs_ops and conn->vfs_opaque_ops structs
1039 using this information.
1042 typedef struct vfs_handle_struct {
1043 struct vfs_handle_struct *next, *prev;
1045 struct connection_struct *conn;
1046 const struct vfs_fn_pointers *fns;
1048 void (*free_data)(void **data);
1049 } vfs_handle_struct;
1052 typedef struct vfs_statvfs_struct {
1053 /* For undefined recommended transfer size return -1 in that field */
1054 uint32_t OptimalTransferSize; /* bsize on some os, iosize on other os */
1058 The next three fields are in terms of the block size.
1059 (above). If block size is unknown, 4096 would be a
1060 reasonable block size for a server to report.
1061 Note that returning the blocks/blocksavail removes need
1062 to make a second call (to QFSInfo level 0x103 to get this info.
1063 UserBlockAvail is typically less than or equal to BlocksAvail,
1064 if no distinction is made return the same value in each.
1067 uint64_t TotalBlocks;
1068 uint64_t BlocksAvail; /* bfree */
1069 uint64_t UserBlocksAvail; /* bavail */
1071 /* For undefined Node fields or FSID return -1 */
1072 uint64_t TotalFileNodes;
1073 uint64_t FreeFileNodes;
1074 uint64_t FsIdentifier; /* fsid */
1075 /* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */
1076 /* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */
1079 } vfs_statvfs_struct;
1081 /* Add a new FSP extension of the given type. Returns a pointer to the
1084 #define VFS_ADD_FSP_EXTENSION(handle, fsp, type, destroy_fn) \
1085 (type *)vfs_add_fsp_extension_notype(handle, (fsp), sizeof(type), (destroy_fn))
1087 /* Return a pointer to the existing FSP extension data. */
1088 #define VFS_FETCH_FSP_EXTENSION(handle, fsp) \
1089 vfs_fetch_fsp_extension(handle, (fsp))
1091 /* Return the talloc context associated with an FSP extension. */
1092 #define VFS_MEMCTX_FSP_EXTENSION(handle, fsp) \
1093 vfs_memctx_fsp_extension(handle, (fsp))
1095 /* Remove and destroy an FSP extension. */
1096 #define VFS_REMOVE_FSP_EXTENSION(handle, fsp) \
1097 vfs_remove_fsp_extension((handle), (fsp))
1099 #define SMB_VFS_HANDLE_GET_DATA(handle, datap, type, ret) { \
1100 if (!(handle)||((datap=(type *)(handle)->data)==NULL)) { \
1101 DEBUG(0,("%s() failed to get vfs_handle->data!\n",__FUNCTION__)); \
1106 #define SMB_VFS_HANDLE_SET_DATA(handle, datap, free_fn, type, ret) { \
1108 DEBUG(0,("%s() failed to set handle->data!\n",__FUNCTION__)); \
1111 if ((handle)->free_data) { \
1112 (handle)->free_data(&(handle)->data); \
1114 (handle)->data = (void *)datap; \
1115 (handle)->free_data = free_fn; \
1119 #define SMB_VFS_HANDLE_FREE_DATA(handle) { \
1120 if ((handle) && (handle)->free_data) { \
1121 (handle)->free_data(&(handle)->data); \
1125 /* Check whether module-specific data handle was already allocated or not */
1126 #define SMB_VFS_HANDLE_TEST_DATA(handle) ( !(handle) || !(handle)->data ? False : True )
1128 #define SMB_VFS_OP(x) ((void *) x)
1130 #define DEFAULT_VFS_MODULE_NAME "/[Default VFS]/"
1132 #include "vfs_macros.h"
1134 int smb_vfs_call_connect(struct vfs_handle_struct *handle,
1135 const char *service, const char *user);
1136 void smb_vfs_call_disconnect(struct vfs_handle_struct *handle);
1137 uint64_t smb_vfs_call_disk_free(struct vfs_handle_struct *handle,
1138 const struct smb_filename *smb_filename,
1142 int smb_vfs_call_get_quota(struct vfs_handle_struct *handle,
1143 const struct smb_filename *smb_filename,
1144 enum SMB_QUOTA_TYPE qtype,
1146 SMB_DISK_QUOTA *qt);
1147 int smb_vfs_call_set_quota(struct vfs_handle_struct *handle,
1148 enum SMB_QUOTA_TYPE qtype, unid_t id,
1149 SMB_DISK_QUOTA *qt);
1150 int smb_vfs_call_get_shadow_copy_data(struct vfs_handle_struct *handle,
1151 struct files_struct *fsp,
1152 struct shadow_copy_data *shadow_copy_data,
1154 int smb_vfs_call_statvfs(struct vfs_handle_struct *handle,
1155 const struct smb_filename *smb_fname,
1156 struct vfs_statvfs_struct *statbuf);
1157 uint32_t smb_vfs_call_fs_capabilities(struct vfs_handle_struct *handle,
1158 enum timestamp_set_resolution *p_ts_res);
1160 * Note: that "struct dfs_GetDFSReferral *r" needs to be a valid TALLOC_CTX
1162 NTSTATUS smb_vfs_call_get_dfs_referrals(struct vfs_handle_struct *handle,
1163 struct dfs_GetDFSReferral *r);
1164 DIR *smb_vfs_call_opendir(struct vfs_handle_struct *handle,
1165 const struct smb_filename *smb_fname,
1167 uint32_t attributes);
1168 DIR *smb_vfs_call_fdopendir(struct vfs_handle_struct *handle,
1169 struct files_struct *fsp,
1171 uint32_t attributes);
1172 struct dirent *smb_vfs_call_readdir(struct vfs_handle_struct *handle,
1174 SMB_STRUCT_STAT *sbuf);
1175 void smb_vfs_call_seekdir(struct vfs_handle_struct *handle,
1176 DIR *dirp, long offset);
1177 long smb_vfs_call_telldir(struct vfs_handle_struct *handle,
1179 void smb_vfs_call_rewind_dir(struct vfs_handle_struct *handle,
1181 int smb_vfs_call_mkdir(struct vfs_handle_struct *handle,
1182 const struct smb_filename *smb_fname,
1184 int smb_vfs_call_rmdir(struct vfs_handle_struct *handle,
1185 const struct smb_filename *smb_fname);
1186 int smb_vfs_call_closedir(struct vfs_handle_struct *handle,
1188 int smb_vfs_call_open(struct vfs_handle_struct *handle,
1189 struct smb_filename *smb_fname, struct files_struct *fsp,
1190 int flags, mode_t mode);
1191 NTSTATUS smb_vfs_call_create_file(struct vfs_handle_struct *handle,
1192 struct smb_request *req,
1193 uint16_t root_dir_fid,
1194 struct smb_filename *smb_fname,
1195 uint32_t access_mask,
1196 uint32_t share_access,
1197 uint32_t create_disposition,
1198 uint32_t create_options,
1199 uint32_t file_attributes,
1200 uint32_t oplock_request,
1201 struct smb2_lease *lease,
1202 uint64_t allocation_size,
1203 uint32_t private_flags,
1204 struct security_descriptor *sd,
1205 struct ea_list *ea_list,
1206 files_struct **result,
1208 const struct smb2_create_blobs *in_context_blobs,
1209 struct smb2_create_blobs *out_context_blobs);
1210 int smb_vfs_call_close(struct vfs_handle_struct *handle,
1211 struct files_struct *fsp);
1212 ssize_t smb_vfs_call_pread(struct vfs_handle_struct *handle,
1213 struct files_struct *fsp, void *data, size_t n,
1215 struct tevent_req *smb_vfs_call_pread_send(struct vfs_handle_struct *handle,
1216 TALLOC_CTX *mem_ctx,
1217 struct tevent_context *ev,
1218 struct files_struct *fsp,
1220 size_t n, off_t offset);
1221 ssize_t SMB_VFS_PREAD_RECV(struct tevent_req *req, struct vfs_aio_state *state);
1223 ssize_t smb_vfs_call_pwrite(struct vfs_handle_struct *handle,
1224 struct files_struct *fsp, const void *data,
1225 size_t n, off_t offset);
1226 struct tevent_req *smb_vfs_call_pwrite_send(struct vfs_handle_struct *handle,
1227 TALLOC_CTX *mem_ctx,
1228 struct tevent_context *ev,
1229 struct files_struct *fsp,
1231 size_t n, off_t offset);
1232 ssize_t SMB_VFS_PWRITE_RECV(struct tevent_req *req, struct vfs_aio_state *state);
1234 off_t smb_vfs_call_lseek(struct vfs_handle_struct *handle,
1235 struct files_struct *fsp, off_t offset,
1237 ssize_t smb_vfs_call_sendfile(struct vfs_handle_struct *handle, int tofd,
1238 files_struct *fromfsp, const DATA_BLOB *header,
1239 off_t offset, size_t count);
1240 ssize_t smb_vfs_call_recvfile(struct vfs_handle_struct *handle, int fromfd,
1241 files_struct *tofsp, off_t offset,
1243 int smb_vfs_call_rename(struct vfs_handle_struct *handle,
1244 const struct smb_filename *smb_fname_src,
1245 const struct smb_filename *smb_fname_dst);
1247 struct tevent_req *smb_vfs_call_fsync_send(struct vfs_handle_struct *handle,
1248 TALLOC_CTX *mem_ctx,
1249 struct tevent_context *ev,
1250 struct files_struct *fsp);
1251 int SMB_VFS_FSYNC_RECV(struct tevent_req *req, struct vfs_aio_state *state);
1253 int smb_vfs_fsync_sync(files_struct *fsp);
1254 int smb_vfs_call_stat(struct vfs_handle_struct *handle,
1255 struct smb_filename *smb_fname);
1256 int smb_vfs_call_fstat(struct vfs_handle_struct *handle,
1257 struct files_struct *fsp, SMB_STRUCT_STAT *sbuf);
1258 int smb_vfs_call_lstat(struct vfs_handle_struct *handle,
1259 struct smb_filename *smb_filename);
1260 uint64_t smb_vfs_call_get_alloc_size(struct vfs_handle_struct *handle,
1261 struct files_struct *fsp,
1262 const SMB_STRUCT_STAT *sbuf);
1263 int smb_vfs_call_unlink(struct vfs_handle_struct *handle,
1264 const struct smb_filename *smb_fname);
1265 int smb_vfs_call_chmod(struct vfs_handle_struct *handle,
1266 const struct smb_filename *smb_fname,
1268 int smb_vfs_call_fchmod(struct vfs_handle_struct *handle,
1269 struct files_struct *fsp, mode_t mode);
1270 int smb_vfs_call_chown(struct vfs_handle_struct *handle,
1271 const struct smb_filename *smb_fname,
1274 int smb_vfs_call_fchown(struct vfs_handle_struct *handle,
1275 struct files_struct *fsp, uid_t uid, gid_t gid);
1276 int smb_vfs_call_lchown(struct vfs_handle_struct *handle,
1277 const struct smb_filename *smb_fname,
1280 int smb_vfs_call_chdir(struct vfs_handle_struct *handle,
1281 const struct smb_filename *smb_fname);
1282 struct smb_filename *smb_vfs_call_getwd(struct vfs_handle_struct *handle,
1284 int smb_vfs_call_ntimes(struct vfs_handle_struct *handle,
1285 const struct smb_filename *smb_fname,
1286 struct smb_file_time *ft);
1287 int smb_vfs_call_ftruncate(struct vfs_handle_struct *handle,
1288 struct files_struct *fsp, off_t offset);
1289 int smb_vfs_call_fallocate(struct vfs_handle_struct *handle,
1290 struct files_struct *fsp,
1294 bool smb_vfs_call_lock(struct vfs_handle_struct *handle,
1295 struct files_struct *fsp, int op, off_t offset,
1296 off_t count, int type);
1297 int smb_vfs_call_kernel_flock(struct vfs_handle_struct *handle,
1298 struct files_struct *fsp, uint32_t share_mode,
1299 uint32_t access_mask);
1300 int smb_vfs_call_linux_setlease(struct vfs_handle_struct *handle,
1301 struct files_struct *fsp, int leasetype);
1302 bool smb_vfs_call_getlock(struct vfs_handle_struct *handle,
1303 struct files_struct *fsp, off_t *poffset,
1304 off_t *pcount, int *ptype, pid_t *ppid);
1305 int smb_vfs_call_symlink(struct vfs_handle_struct *handle,
1306 const char *link_contents,
1307 const struct smb_filename *new_smb_fname);
1308 int smb_vfs_call_readlink(struct vfs_handle_struct *handle,
1309 const struct smb_filename *smb_fname,
1312 int smb_vfs_call_link(struct vfs_handle_struct *handle,
1313 const struct smb_filename *old_smb_fname,
1314 const struct smb_filename *new_smb_fname);
1315 int smb_vfs_call_mknod(struct vfs_handle_struct *handle,
1316 const struct smb_filename *smb_fname,
1319 struct smb_filename *smb_vfs_call_realpath(struct vfs_handle_struct *handle,
1321 const struct smb_filename *smb_fname);
1322 int smb_vfs_call_chflags(struct vfs_handle_struct *handle,
1323 const struct smb_filename *smb_fname,
1324 unsigned int flags);
1325 struct file_id smb_vfs_call_file_id_create(struct vfs_handle_struct *handle,
1326 const SMB_STRUCT_STAT *sbuf);
1327 NTSTATUS smb_vfs_call_streaminfo(struct vfs_handle_struct *handle,
1328 struct files_struct *fsp,
1329 const struct smb_filename *smb_fname,
1330 TALLOC_CTX *mem_ctx,
1331 unsigned int *num_streams,
1332 struct stream_struct **streams);
1333 int smb_vfs_call_get_real_filename(struct vfs_handle_struct *handle,
1334 const char *path, const char *name,
1335 TALLOC_CTX *mem_ctx, char **found_name);
1336 const char *smb_vfs_call_connectpath(struct vfs_handle_struct *handle,
1337 const struct smb_filename *smb_fname);
1338 NTSTATUS smb_vfs_call_brl_lock_windows(struct vfs_handle_struct *handle,
1339 struct byte_range_lock *br_lck,
1340 struct lock_struct *plock,
1341 bool blocking_lock);
1342 bool smb_vfs_call_brl_unlock_windows(struct vfs_handle_struct *handle,
1343 struct messaging_context *msg_ctx,
1344 struct byte_range_lock *br_lck,
1345 const struct lock_struct *plock);
1346 bool smb_vfs_call_strict_lock_check(struct vfs_handle_struct *handle,
1347 struct files_struct *fsp,
1348 struct lock_struct *plock);
1349 NTSTATUS smb_vfs_call_translate_name(struct vfs_handle_struct *handle,
1351 enum vfs_translate_direction direction,
1352 TALLOC_CTX *mem_ctx,
1353 char **mapped_name);
1354 NTSTATUS smb_vfs_call_fsctl(struct vfs_handle_struct *handle,
1355 struct files_struct *fsp,
1359 const uint8_t *_in_data,
1361 uint8_t **_out_data,
1362 uint32_t max_out_len,
1364 NTSTATUS smb_vfs_call_get_dos_attributes(struct vfs_handle_struct *handle,
1365 struct smb_filename *smb_fname,
1367 NTSTATUS smb_vfs_call_fget_dos_attributes(struct vfs_handle_struct *handle,
1368 struct files_struct *fsp,
1370 NTSTATUS smb_vfs_call_set_dos_attributes(struct vfs_handle_struct *handle,
1371 const struct smb_filename *smb_fname,
1373 NTSTATUS smb_vfs_call_fset_dos_attributes(struct vfs_handle_struct *handle,
1374 struct files_struct *fsp,
1376 struct tevent_req *smb_vfs_call_get_dos_attributes_send(
1377 TALLOC_CTX *mem_ctx,
1378 struct tevent_context *ev,
1379 struct vfs_handle_struct *handle,
1380 files_struct *dir_fsp,
1381 struct smb_filename *smb_fname);
1382 NTSTATUS smb_vfs_call_get_dos_attributes_recv(
1383 struct tevent_req *req,
1384 struct vfs_aio_state *aio_state,
1386 struct tevent_req *smb_vfs_call_offload_read_send(
1387 TALLOC_CTX *mem_ctx,
1388 struct tevent_context *ev,
1389 struct vfs_handle_struct *handle,
1390 struct files_struct *fsp,
1395 NTSTATUS smb_vfs_call_offload_read_recv(struct tevent_req *req,
1396 struct vfs_handle_struct *handle,
1397 TALLOC_CTX *mem_ctx,
1398 DATA_BLOB *token_blob);
1399 struct tevent_req *smb_vfs_call_offload_write_send(struct vfs_handle_struct *handle,
1400 TALLOC_CTX *mem_ctx,
1401 struct tevent_context *ev,
1404 off_t transfer_offset,
1405 struct files_struct *dest_fsp,
1408 NTSTATUS smb_vfs_call_offload_write_recv(struct vfs_handle_struct *handle,
1409 struct tevent_req *req,
1411 NTSTATUS smb_vfs_call_get_compression(struct vfs_handle_struct *handle,
1412 TALLOC_CTX *mem_ctx,
1413 struct files_struct *fsp,
1414 struct smb_filename *smb_fname,
1415 uint16_t *_compression_fmt);
1416 NTSTATUS smb_vfs_call_set_compression(struct vfs_handle_struct *handle,
1417 TALLOC_CTX *mem_ctx,
1418 struct files_struct *fsp,
1419 uint16_t compression_fmt);
1420 NTSTATUS smb_vfs_call_snap_check_path(vfs_handle_struct *handle,
1421 TALLOC_CTX *mem_ctx,
1422 const char *service_path,
1423 char **base_volume);
1424 NTSTATUS smb_vfs_call_snap_create(struct vfs_handle_struct *handle,
1425 TALLOC_CTX *mem_ctx,
1426 const char *base_volume,
1431 NTSTATUS smb_vfs_call_snap_delete(struct vfs_handle_struct *handle,
1432 TALLOC_CTX *mem_ctx,
1435 NTSTATUS smb_vfs_call_fget_nt_acl(struct vfs_handle_struct *handle,
1436 struct files_struct *fsp,
1437 uint32_t security_info,
1438 TALLOC_CTX *mem_ctx,
1439 struct security_descriptor **ppdesc);
1440 NTSTATUS smb_vfs_call_get_nt_acl(struct vfs_handle_struct *handle,
1441 const struct smb_filename *smb_fname,
1442 uint32_t security_info,
1443 TALLOC_CTX *mem_ctx,
1444 struct security_descriptor **ppdesc);
1445 NTSTATUS smb_vfs_call_fset_nt_acl(struct vfs_handle_struct *handle,
1446 struct files_struct *fsp,
1447 uint32_t security_info_sent,
1448 const struct security_descriptor *psd);
1449 NTSTATUS smb_vfs_call_audit_file(struct vfs_handle_struct *handle,
1450 struct smb_filename *file,
1451 struct security_acl *sacl,
1452 uint32_t access_requested,
1453 uint32_t access_denied);
1454 int smb_vfs_call_chmod_acl(struct vfs_handle_struct *handle,
1455 const struct smb_filename *file,
1457 SMB_ACL_T smb_vfs_call_sys_acl_get_file(struct vfs_handle_struct *handle,
1458 const struct smb_filename *smb_fname,
1459 SMB_ACL_TYPE_T type,
1460 TALLOC_CTX *mem_ctx);
1461 SMB_ACL_T smb_vfs_call_sys_acl_get_fd(struct vfs_handle_struct *handle,
1462 struct files_struct *fsp,
1463 TALLOC_CTX *mem_ctx);
1464 int smb_vfs_call_sys_acl_blob_get_file(struct vfs_handle_struct *handle,
1465 const struct smb_filename *smb_fname,
1466 TALLOC_CTX *mem_ctx,
1467 char **blob_description,
1469 int smb_vfs_call_sys_acl_blob_get_fd(struct vfs_handle_struct *handle,
1470 struct files_struct *fsp,
1471 TALLOC_CTX *mem_ctx,
1472 char **blob_description,
1474 int smb_vfs_call_sys_acl_set_file(struct vfs_handle_struct *handle,
1475 const struct smb_filename *smb_fname,
1476 SMB_ACL_TYPE_T acltype,
1478 int smb_vfs_call_sys_acl_set_fd(struct vfs_handle_struct *handle,
1479 struct files_struct *fsp, SMB_ACL_T theacl);
1480 int smb_vfs_call_sys_acl_delete_def_file(struct vfs_handle_struct *handle,
1481 const struct smb_filename *smb_fname);
1482 ssize_t smb_vfs_call_getxattr(struct vfs_handle_struct *handle,
1483 const struct smb_filename *smb_fname,
1487 struct tevent_req *smb_vfs_call_getxattrat_send(
1488 TALLOC_CTX *mem_ctx,
1489 struct tevent_context *ev,
1490 struct vfs_handle_struct *handle,
1491 files_struct *dir_fsp,
1492 const struct smb_filename *smb_fname,
1493 const char *xattr_name,
1495 ssize_t smb_vfs_call_getxattrat_recv(struct tevent_req *req,
1496 struct vfs_aio_state *aio_state,
1497 TALLOC_CTX *mem_ctx,
1498 uint8_t **xattr_value);
1499 ssize_t smb_vfs_call_fgetxattr(struct vfs_handle_struct *handle,
1500 struct files_struct *fsp, const char *name,
1501 void *value, size_t size);
1502 ssize_t smb_vfs_call_listxattr(struct vfs_handle_struct *handle,
1503 const struct smb_filename *smb_fname,
1506 ssize_t smb_vfs_call_flistxattr(struct vfs_handle_struct *handle,
1507 struct files_struct *fsp, char *list,
1509 int smb_vfs_call_removexattr(struct vfs_handle_struct *handle,
1510 const struct smb_filename *smb_fname,
1512 int smb_vfs_call_fremovexattr(struct vfs_handle_struct *handle,
1513 struct files_struct *fsp, const char *name);
1514 int smb_vfs_call_setxattr(struct vfs_handle_struct *handle,
1515 const struct smb_filename *smb_fname,
1520 int smb_vfs_call_lsetxattr(struct vfs_handle_struct *handle, const char *path,
1521 const char *name, const void *value, size_t size,
1523 int smb_vfs_call_fsetxattr(struct vfs_handle_struct *handle,
1524 struct files_struct *fsp, const char *name,
1525 const void *value, size_t size, int flags);
1526 bool smb_vfs_call_aio_force(struct vfs_handle_struct *handle,
1527 struct files_struct *fsp);
1528 NTSTATUS smb_vfs_call_durable_cookie(struct vfs_handle_struct *handle,
1529 struct files_struct *fsp,
1530 TALLOC_CTX *mem_ctx,
1532 NTSTATUS smb_vfs_call_durable_disconnect(struct vfs_handle_struct *handle,
1533 struct files_struct *fsp,
1534 const DATA_BLOB old_cookie,
1535 TALLOC_CTX *mem_ctx,
1536 DATA_BLOB *new_cookie);
1537 NTSTATUS smb_vfs_call_durable_reconnect(struct vfs_handle_struct *handle,
1538 struct smb_request *smb1req,
1539 struct smbXsrv_open *op,
1540 const DATA_BLOB old_cookie,
1541 TALLOC_CTX *mem_ctx,
1542 struct files_struct **fsp,
1543 DATA_BLOB *new_cookie);
1544 NTSTATUS smb_vfs_call_readdir_attr(struct vfs_handle_struct *handle,
1545 const struct smb_filename *fname,
1546 TALLOC_CTX *mem_ctx,
1547 struct readdir_attr_data **attr_data);
1549 NTSTATUS smb_register_vfs(int version, const char *name,
1550 const struct vfs_fn_pointers *fns);
1551 void *vfs_add_fsp_extension_notype(vfs_handle_struct *handle,
1552 files_struct *fsp, size_t ext_size,
1553 void (*destroy_fn)(void *p_data));
1554 void vfs_remove_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
1555 void vfs_remove_all_fsp_extensions(struct files_struct *fsp);
1556 void *vfs_memctx_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
1557 void *vfs_fetch_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
1559 void smb_vfs_assert_all_fns(const struct vfs_fn_pointers* fns,
1560 const char *module);
1563 * Helper functions from source3/modules/vfs_not_implemented.c
1565 int vfs_not_implemented_connect(
1566 vfs_handle_struct *handle,
1567 const char *service,
1569 void vfs_not_implemented_disconnect(vfs_handle_struct *handle);
1570 uint64_t vfs_not_implemented_disk_free(vfs_handle_struct *handle,
1571 const struct smb_filename *smb_fname,
1575 int vfs_not_implemented_get_quota(vfs_handle_struct *handle,
1576 const struct smb_filename *smb_fname,
1577 enum SMB_QUOTA_TYPE qtype,
1579 SMB_DISK_QUOTA *dq);
1580 int vfs_not_implemented_set_quota(vfs_handle_struct *handle,
1581 enum SMB_QUOTA_TYPE qtype,
1582 unid_t id, SMB_DISK_QUOTA *dq);
1583 int vfs_not_implemented_get_shadow_copy_data(vfs_handle_struct *handle,
1585 struct shadow_copy_data *shadow_copy_data,
1587 int vfs_not_implemented_statvfs(struct vfs_handle_struct *handle,
1588 const struct smb_filename *smb_fname,
1589 struct vfs_statvfs_struct *statbuf);
1590 uint32_t vfs_not_implemented_fs_capabilities(struct vfs_handle_struct *handle,
1591 enum timestamp_set_resolution *p_ts_res);
1592 NTSTATUS vfs_not_implemented_get_dfs_referrals(struct vfs_handle_struct *handle,
1593 struct dfs_GetDFSReferral *r);
1594 DIR *vfs_not_implemented_opendir(vfs_handle_struct *handle,
1595 const struct smb_filename *smb_fname,
1598 NTSTATUS vfs_not_implemented_snap_check_path(struct vfs_handle_struct *handle,
1599 TALLOC_CTX *mem_ctx,
1600 const char *service_path,
1601 char **base_volume);
1602 NTSTATUS vfs_not_implemented_snap_create(struct vfs_handle_struct *handle,
1603 TALLOC_CTX *mem_ctx,
1604 const char *base_volume,
1609 NTSTATUS vfs_not_implemented_snap_delete(struct vfs_handle_struct *handle,
1610 TALLOC_CTX *mem_ctx,
1613 DIR *vfs_not_implemented_fdopendir(vfs_handle_struct *handle, files_struct *fsp,
1614 const char *mask, uint32_t attr);
1615 struct dirent *vfs_not_implemented_readdir(vfs_handle_struct *handle,
1616 DIR *dirp, SMB_STRUCT_STAT *sbuf);
1617 void vfs_not_implemented_seekdir(vfs_handle_struct *handle, DIR *dirp, long offset);
1618 long vfs_not_implemented_telldir(vfs_handle_struct *handle, DIR *dirp);
1619 void vfs_not_implemented_rewind_dir(vfs_handle_struct *handle, DIR *dirp);
1620 int vfs_not_implemented_mkdir(vfs_handle_struct *handle,
1621 const struct smb_filename *smb_fname,
1623 int vfs_not_implemented_rmdir(vfs_handle_struct *handle,
1624 const struct smb_filename *smb_fname);
1625 int vfs_not_implemented_closedir(vfs_handle_struct *handle, DIR *dir);
1626 int vfs_not_implemented_open(vfs_handle_struct *handle,
1627 struct smb_filename *smb_fname,
1628 files_struct *fsp, int flags, mode_t mode);
1629 NTSTATUS vfs_not_implemented_create_file(struct vfs_handle_struct *handle,
1630 struct smb_request *req,
1631 uint16_t root_dir_fid,
1632 struct smb_filename *smb_fname,
1633 uint32_t access_mask,
1634 uint32_t share_access,
1635 uint32_t create_disposition,
1636 uint32_t create_options,
1637 uint32_t file_attributes,
1638 uint32_t oplock_request,
1639 struct smb2_lease *lease,
1640 uint64_t allocation_size,
1641 uint32_t private_flags,
1642 struct security_descriptor *sd,
1643 struct ea_list *ea_list,
1644 files_struct **result, int *pinfo,
1645 const struct smb2_create_blobs *in_context_blobs,
1646 struct smb2_create_blobs *out_context_blobs);
1647 int vfs_not_implemented_close_fn(vfs_handle_struct *handle, files_struct *fsp);
1648 ssize_t vfs_not_implemented_pread(vfs_handle_struct *handle, files_struct *fsp,
1649 void *data, size_t n, off_t offset);
1650 struct tevent_req *vfs_not_implemented_pread_send(struct vfs_handle_struct *handle,
1651 TALLOC_CTX *mem_ctx,
1652 struct tevent_context *ev,
1653 struct files_struct *fsp,
1654 void *data, size_t n, off_t offset);
1655 ssize_t vfs_not_implemented_pread_recv(struct tevent_req *req,
1656 struct vfs_aio_state *vfs_aio_state);
1657 ssize_t vfs_not_implemented_pwrite(vfs_handle_struct *handle, files_struct *fsp,
1658 const void *data, size_t n, off_t offset);
1659 struct tevent_req *vfs_not_implemented_pwrite_send(struct vfs_handle_struct *handle,
1660 TALLOC_CTX *mem_ctx,
1661 struct tevent_context *ev,
1662 struct files_struct *fsp,
1664 size_t n, off_t offset);
1665 ssize_t vfs_not_implemented_pwrite_recv(struct tevent_req *req,
1666 struct vfs_aio_state *vfs_aio_state);
1667 off_t vfs_not_implemented_lseek(vfs_handle_struct *handle, files_struct *fsp,
1668 off_t offset, int whence);
1669 ssize_t vfs_not_implemented_sendfile(vfs_handle_struct *handle, int tofd,
1670 files_struct *fromfsp, const DATA_BLOB *hdr,
1671 off_t offset, size_t n);
1672 ssize_t vfs_not_implemented_recvfile(vfs_handle_struct *handle, int fromfd,
1673 files_struct *tofsp, off_t offset, size_t n);
1674 int vfs_not_implemented_rename(vfs_handle_struct *handle,
1675 const struct smb_filename *smb_fname_src,
1676 const struct smb_filename *smb_fname_dst);
1677 struct tevent_req *vfs_not_implemented_fsync_send(struct vfs_handle_struct *handle,
1678 TALLOC_CTX *mem_ctx,
1679 struct tevent_context *ev,
1680 struct files_struct *fsp);
1681 int vfs_not_implemented_fsync_recv(struct tevent_req *req,
1682 struct vfs_aio_state *vfs_aio_state);
1683 int vfs_not_implemented_stat(vfs_handle_struct *handle, struct smb_filename *smb_fname);
1684 int vfs_not_implemented_fstat(vfs_handle_struct *handle, files_struct *fsp,
1685 SMB_STRUCT_STAT *sbuf);
1686 int vfs_not_implemented_lstat(vfs_handle_struct *handle,
1687 struct smb_filename *smb_fname);
1688 uint64_t vfs_not_implemented_get_alloc_size(struct vfs_handle_struct *handle,
1689 struct files_struct *fsp,
1690 const SMB_STRUCT_STAT *sbuf);
1691 int vfs_not_implemented_unlink(vfs_handle_struct *handle,
1692 const struct smb_filename *smb_fname);
1693 int vfs_not_implemented_chmod(vfs_handle_struct *handle,
1694 const struct smb_filename *smb_fname,
1696 int vfs_not_implemented_fchmod(vfs_handle_struct *handle, files_struct *fsp,
1698 int vfs_not_implemented_chown(vfs_handle_struct *handle,
1699 const struct smb_filename *smb_fname,
1702 int vfs_not_implemented_fchown(vfs_handle_struct *handle, files_struct *fsp,
1703 uid_t uid, gid_t gid);
1704 int vfs_not_implemented_lchown(vfs_handle_struct *handle,
1705 const struct smb_filename *smb_fname,
1708 int vfs_not_implemented_chdir(vfs_handle_struct *handle,
1709 const struct smb_filename *smb_fname);
1710 struct smb_filename *vfs_not_implemented_getwd(vfs_handle_struct *handle,
1712 int vfs_not_implemented_ntimes(vfs_handle_struct *handle,
1713 const struct smb_filename *smb_fname,
1714 struct smb_file_time *ft);
1715 int vfs_not_implemented_ftruncate(vfs_handle_struct *handle, files_struct *fsp,
1717 int vfs_not_implemented_fallocate(vfs_handle_struct *handle, files_struct *fsp,
1718 uint32_t mode, off_t offset, off_t len);
1719 bool vfs_not_implemented_lock(vfs_handle_struct *handle, files_struct *fsp, int op,
1720 off_t offset, off_t count, int type);
1721 int vfs_not_implemented_kernel_flock(struct vfs_handle_struct *handle,
1722 struct files_struct *fsp,
1723 uint32_t share_mode, uint32_t access_mask);
1724 int vfs_not_implemented_linux_setlease(struct vfs_handle_struct *handle,
1725 struct files_struct *fsp, int leasetype);
1726 bool vfs_not_implemented_getlock(vfs_handle_struct *handle, files_struct *fsp,
1727 off_t *poffset, off_t *pcount, int *ptype,
1729 int vfs_not_implemented_symlink(vfs_handle_struct *handle,
1730 const char *link_contents,
1731 const struct smb_filename *new_smb_fname);
1732 int vfs_not_implemented_vfs_readlink(vfs_handle_struct *handle,
1733 const struct smb_filename *smb_fname,
1736 int vfs_not_implemented_link(vfs_handle_struct *handle,
1737 const struct smb_filename *old_smb_fname,
1738 const struct smb_filename *new_smb_fname);
1739 int vfs_not_implemented_mknod(vfs_handle_struct *handle,
1740 const struct smb_filename *smb_fname,
1743 struct smb_filename *vfs_not_implemented_realpath(vfs_handle_struct *handle,
1745 const struct smb_filename *smb_fname);
1746 int vfs_not_implemented_chflags(vfs_handle_struct *handle,
1747 const struct smb_filename *smb_fname,
1749 struct file_id vfs_not_implemented_file_id_create(vfs_handle_struct *handle,
1750 const SMB_STRUCT_STAT *sbuf);
1751 struct tevent_req *vfs_not_implemented_offload_read_send(
1752 TALLOC_CTX *mem_ctx,
1753 struct tevent_context *ev,
1754 struct vfs_handle_struct *handle,
1755 struct files_struct *fsp,
1760 NTSTATUS vfs_not_implemented_offload_read_recv(struct tevent_req *req,
1761 struct vfs_handle_struct *handle,
1762 TALLOC_CTX *mem_ctx,
1763 DATA_BLOB *_token_blob);
1764 struct tevent_req *vfs_not_implemented_offload_write_send(
1765 struct vfs_handle_struct *handle,
1766 TALLOC_CTX *mem_ctx,
1767 struct tevent_context *ev,
1770 off_t transfer_offset,
1771 struct files_struct *dest_fsp,
1774 NTSTATUS vfs_not_implemented_offload_write_recv(struct vfs_handle_struct *handle,
1775 struct tevent_req *req,
1777 NTSTATUS vfs_not_implemented_get_compression(struct vfs_handle_struct *handle,
1778 TALLOC_CTX *mem_ctx,
1779 struct files_struct *fsp,
1780 struct smb_filename *smb_fname,
1781 uint16_t *_compression_fmt);
1782 NTSTATUS vfs_not_implemented_set_compression(struct vfs_handle_struct *handle,
1783 TALLOC_CTX *mem_ctx,
1784 struct files_struct *fsp,
1785 uint16_t compression_fmt);
1786 NTSTATUS vfs_not_implemented_streaminfo(struct vfs_handle_struct *handle,
1787 struct files_struct *fsp,
1788 const struct smb_filename *smb_fname,
1789 TALLOC_CTX *mem_ctx,
1790 unsigned int *num_streams,
1791 struct stream_struct **streams);
1792 int vfs_not_implemented_get_real_filename(struct vfs_handle_struct *handle,
1795 TALLOC_CTX *mem_ctx,
1797 const char *vfs_not_implemented_connectpath(struct vfs_handle_struct *handle,
1798 const struct smb_filename *smb_fname);
1799 NTSTATUS vfs_not_implemented_brl_lock_windows(struct vfs_handle_struct *handle,
1800 struct byte_range_lock *br_lck,
1801 struct lock_struct *plock,
1802 bool blocking_lock);
1803 bool vfs_not_implemented_brl_unlock_windows(struct vfs_handle_struct *handle,
1804 struct messaging_context *msg_ctx,
1805 struct byte_range_lock *br_lck,
1806 const struct lock_struct *plock);
1807 bool vfs_not_implemented_strict_lock_check(struct vfs_handle_struct *handle,
1808 struct files_struct *fsp,
1809 struct lock_struct *plock);
1810 NTSTATUS vfs_not_implemented_translate_name(struct vfs_handle_struct *handle,
1811 const char *mapped_name,
1812 enum vfs_translate_direction direction,
1813 TALLOC_CTX *mem_ctx, char **pmapped_name);
1814 NTSTATUS vfs_not_implemented_fsctl(struct vfs_handle_struct *handle,
1815 struct files_struct *fsp,
1818 uint16_t req_flags, /* Needed for UNICODE ... */
1819 const uint8_t *_in_data,
1821 uint8_t **_out_data,
1822 uint32_t max_out_len, uint32_t *out_len);
1823 NTSTATUS vfs_not_implemented_readdir_attr(struct vfs_handle_struct *handle,
1824 const struct smb_filename *fname,
1825 TALLOC_CTX *mem_ctx,
1826 struct readdir_attr_data **pattr_data);
1827 NTSTATUS vfs_not_implemented_get_dos_attributes(struct vfs_handle_struct *handle,
1828 struct smb_filename *smb_fname,
1830 struct tevent_req *vfs_not_implemented_get_dos_attributes_send(
1831 TALLOC_CTX *mem_ctx,
1832 struct tevent_context *ev,
1833 struct vfs_handle_struct *handle,
1834 files_struct *dir_fsp,
1835 struct smb_filename *smb_fname);
1836 NTSTATUS vfs_not_implemented_get_dos_attributes_recv(
1837 struct tevent_req *req,
1838 struct vfs_aio_state *aio_state,
1840 NTSTATUS vfs_not_implemented_fget_dos_attributes(struct vfs_handle_struct *handle,
1841 struct files_struct *fsp,
1843 NTSTATUS vfs_not_implemented_set_dos_attributes(struct vfs_handle_struct *handle,
1844 const struct smb_filename *smb_fname,
1846 NTSTATUS vfs_not_implemented_fset_dos_attributes(struct vfs_handle_struct *handle,
1847 struct files_struct *fsp,
1849 NTSTATUS vfs_not_implemented_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
1850 uint32_t security_info,
1851 TALLOC_CTX *mem_ctx,
1852 struct security_descriptor **ppdesc);
1853 NTSTATUS vfs_not_implemented_get_nt_acl(vfs_handle_struct *handle,
1854 const struct smb_filename *smb_fname,
1855 uint32_t security_info,
1856 TALLOC_CTX *mem_ctx,
1857 struct security_descriptor **ppdesc);
1858 NTSTATUS vfs_not_implemented_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
1859 uint32_t security_info_sent,
1860 const struct security_descriptor *psd);
1861 SMB_ACL_T vfs_not_implemented_sys_acl_get_file(vfs_handle_struct *handle,
1862 const struct smb_filename *smb_fname,
1863 SMB_ACL_TYPE_T type,
1864 TALLOC_CTX *mem_ctx);
1865 SMB_ACL_T vfs_not_implemented_sys_acl_get_fd(vfs_handle_struct *handle,
1866 files_struct *fsp, TALLOC_CTX *mem_ctx);
1867 int vfs_not_implemented_sys_acl_blob_get_file(vfs_handle_struct *handle,
1868 const struct smb_filename *smb_fname,
1869 TALLOC_CTX *mem_ctx,
1870 char **blob_description,
1872 int vfs_not_implemented_sys_acl_blob_get_fd(vfs_handle_struct *handle,
1873 files_struct *fsp, TALLOC_CTX *mem_ctx,
1874 char **blob_description, DATA_BLOB *blob);
1875 int vfs_not_implemented_sys_acl_set_file(vfs_handle_struct *handle,
1876 const struct smb_filename *smb_fname,
1877 SMB_ACL_TYPE_T acltype,
1879 int vfs_not_implemented_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
1881 int vfs_not_implemented_sys_acl_delete_def_file(vfs_handle_struct *handle,
1882 const struct smb_filename *smb_fname);
1883 ssize_t vfs_not_implemented_getxattr(vfs_handle_struct *handle,
1884 const struct smb_filename *smb_fname,
1888 struct tevent_req *vfs_not_implemented_getxattrat_send(
1889 TALLOC_CTX *mem_ctx,
1890 struct tevent_context *ev,
1891 struct vfs_handle_struct *handle,
1892 files_struct *dir_fsp,
1893 const struct smb_filename *smb_fname,
1894 const char *xattr_name,
1896 ssize_t vfs_not_implemented_getxattrat_recv(struct tevent_req *req,
1897 struct vfs_aio_state *aio_state,
1898 TALLOC_CTX *mem_ctx,
1899 uint8_t **xattr_value);
1900 ssize_t vfs_not_implemented_fgetxattr(vfs_handle_struct *handle,
1901 struct files_struct *fsp, const char *name,
1902 void *value, size_t size);
1903 ssize_t vfs_not_implemented_listxattr(vfs_handle_struct *handle,
1904 const struct smb_filename *smb_fname,
1907 ssize_t vfs_not_implemented_flistxattr(vfs_handle_struct *handle,
1908 struct files_struct *fsp, char *list,
1910 int vfs_not_implemented_removexattr(vfs_handle_struct *handle,
1911 const struct smb_filename *smb_fname,
1913 int vfs_not_implemented_fremovexattr(vfs_handle_struct *handle,
1914 struct files_struct *fsp, const char *name);
1915 int vfs_not_implemented_setxattr(vfs_handle_struct *handle,
1916 const struct smb_filename *smb_fname,
1921 int vfs_not_implemented_fsetxattr(vfs_handle_struct *handle, struct files_struct *fsp,
1922 const char *name, const void *value, size_t size,
1924 bool vfs_not_implemented_aio_force(struct vfs_handle_struct *handle,
1925 struct files_struct *fsp);
1926 NTSTATUS vfs_not_implemented_audit_file(struct vfs_handle_struct *handle,
1927 struct smb_filename *file,
1928 struct security_acl *sacl,
1929 uint32_t access_requested,
1930 uint32_t access_denied);
1931 NTSTATUS vfs_not_implemented_durable_cookie(struct vfs_handle_struct *handle,
1932 struct files_struct *fsp,
1933 TALLOC_CTX *mem_ctx,
1935 NTSTATUS vfs_not_implemented_durable_disconnect(struct vfs_handle_struct *handle,
1936 struct files_struct *fsp,
1937 const DATA_BLOB old_cookie,
1938 TALLOC_CTX *mem_ctx,
1939 DATA_BLOB *new_cookie);
1940 NTSTATUS vfs_not_implemented_durable_reconnect(struct vfs_handle_struct *handle,
1941 struct smb_request *smb1req,
1942 struct smbXsrv_open *op,
1943 const DATA_BLOB old_cookie,
1944 TALLOC_CTX *mem_ctx,
1945 struct files_struct **fsp,
1946 DATA_BLOB *new_cookie);