s3:include: move struct fd_handle/files_struct to vfs.h
[Samba/gebeck_regimport.git] / source3 / include / vfs.h
blob069e56ff0388eeed692152aca19863f7fdbf6b7d
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.
49 /* Changed to version 2 for CIFS UNIX extensions (mknod and link added). JRA. */
50 /* Changed to version 3 for POSIX acl extensions. JRA. */
51 /* Changed to version 4 for cascaded VFS interface. Alexander Bokovoy. */
52 /* Changed to version 5 for sendfile addition. JRA. */
53 /* Changed to version 6 for the new module system, fixed cascading and quota functions. --metze */
54 /* Changed to version 7 to include the get_nt_acl info parameter. JRA. */
55 /* Changed to version 8 includes EA calls. JRA. */
56 /* Changed to version 9 to include the get_shadow_data call. --metze */
57 /* Changed to version 10 to include pread/pwrite calls. */
58 /* Changed to version 11 to include seekdir/telldir/rewinddir calls. JRA */
59 /* Changed to version 12 to add mask and attributes to opendir(). JRA
60 Also include aio calls. JRA. */
61 /* Changed to version 13 as the internal structure of files_struct has changed. JRA */
62 /* Changed to version 14 as we had to change DIR to SMB_STRUCT_DIR. JRA */
63 /* Changed to version 15 as we added the statvfs call. JRA */
64 /* Changed to version 16 as we added the getlock call. JRA */
65 /* Changed to version 17 as we removed redundant connection_struct parameters. --jpeach */
66 /* Changed to version 18 to add fsp parameter to the open call -- jpeach
67 Also include kernel_flock call - jmcd */
68 /* Changed to version 19, kernel change notify has been merged
69 Also included linux setlease call - jmcd */
70 /* Changed to version 20, use ntimes call instead of utime (greater
71 * timestamp resolition. JRA. */
72 /* Changed to version21 to add chflags operation -- jpeach */
73 /* Changed to version22 to add lchown operation -- jra */
74 /* Leave at 22 - not yet released. But change set_nt_acl to return an NTSTATUS. jra. */
75 /* Leave at 22 - not yet released. Add file_id_create operation. --metze */
76 /* Leave at 22 - not yet released. Change all BOOL parameters (int) to bool. jra. */
77 /* Leave at 22 - not yet released. Added recvfile. */
78 /* Leave at 22 - not yet released. Change get_nt_acl to return NTSTATUS - vl */
79 /* Leave at 22 - not yet released. Change get_nt_acl to *not* take a
80 * files_struct. - obnox.*/
81 /* Leave at 22 - not yet released. Remove parameter fd from fget_nt_acl. - obnox */
82 /* Leave at 22 - not yet released. Remove parameter fd from gset_nt_acl. - obnox */
83 /* Leave at 22 - not yet released. Remove parameter fd from pread. - obnox */
84 /* Leave at 22 - not yet released. Remove parameter fd from pwrite. - obnox */
85 /* Leave at 22 - not yet released. Remove parameter fd from lseek. - obnox */
86 /* Leave at 22 - not yet released. Remove parameter fd from fsync. - obnox */
87 /* Leave at 22 - not yet released. Remove parameter fd from fstat. - obnox */
88 /* Leave at 22 - not yet released. Remove parameter fd from fchmod. - obnox */
89 /* Leave at 22 - not yet released. Remove parameter fd from fchown. - obnox */
90 /* Leave at 22 - not yet released. Remove parameter fd from ftruncate. - obnox */
91 /* Leave at 22 - not yet released. Remove parameter fd from lock. - obnox */
92 /* Leave at 22 - not yet released. Remove parameter fd from kernel_flock. - obnox */
93 /* Leave at 22 - not yet released. Remove parameter fd from linux_setlease. - obnox */
94 /* Leave at 22 - not yet released. Remove parameter fd from getlock. - obnox */
95 /* Leave at 22 - not yet released. Remove parameter fd from sys_acl_get_fd. - obnox */
96 /* Leave at 22 - not yet released. Remove parameter fd from fchmod_acl. - obnox */
97 /* Leave at 22 - not yet released. Remove parameter fd from sys_acl_set_fd. - obnox */
98 /* Leave at 22 - not yet released. Remove parameter fd from fgetxattr. - obnox */
99 /* Leave at 22 - not yet released. Remove parameter fd from flistxattr. - obnox */
100 /* Leave at 22 - not yet released. Remove parameter fd from fremovexattr. - obnox */
101 /* Leave at 22 - not yet released. Remove parameter fd from fsetxattr. - obnox */
102 /* Leave at 22 - not yet released. Remove parameter fd from aio_cancel. - obnox */
103 /* Leave at 22 - not yet released. Remove parameter fd from read. - obnox */
104 /* Leave at 22 - not yet released. Remove parameter fd from write. - obnox */
105 /* Leave at 22 - not yet released. Remove parameter fromfd from sendfile. - obnox */
106 /* Leave at 22 - not yet released. Remove parameter fromfd from recvfile. - obnox */
107 /* Leave at 22 - not yet released. Additional change: add operations for offline files -- ab */
108 /* Leave at 22 - not yet released. Add the streaminfo call. -- jpeach, vl */
109 /* Leave at 22 - not yet released. Remove parameter fd from close_fn. - obnox */
110 /* Changed to version 23 - remove set_nt_acl call. This can only be done via an
111 open handle. JRA. */
112 /* Changed to version 24 - make security descriptor const in fset_nt_acl. JRA. */
113 /* Changed to version 25 - Jelmer's change from SMB_BIG_UINT to uint64_t. */
114 /* Leave at 25 - not yet released. Add create_file call. -- tprouty. */
115 /* Leave at 25 - not yet released. Add create time to ntimes. -- tstecher. */
116 /* Leave at 25 - not yet released. Add get_alloc_size call. -- tprouty. */
117 /* Leave at 25 - not yet released. Add SMB_STRUCT_STAT to readdir. - sdann */
118 /* Leave at 25 - not yet released. Add init_search_op call. - sdann */
119 /* Leave at 25 - not yet released. Add locking calls. -- zkirsch. */
120 /* Leave at 25 - not yet released. Add strict locking calls. -- drichards. */
121 /* Changed to version 26 - Plumb struct smb_filename to SMB_VFS_CREATE_FILE,
122 SMB_VFS_OPEN, SMB_VFS_STAT, SMB_VFS_LSTAT,
123 SMB_VFS_RENAME, SMB_VFS_UNLINK, SMB_VFS_NTIMES. */
124 /* Changed to version 27 - not yet released. Added enum timestamp_set_resolution
125 * return to fs_capabilities call. JRA. */
126 /* Leave at 27 - not yet released. Add translate_name VFS call to convert
127 UNIX names to Windows supported names -- asrinivasan. */
128 /* Changed to version 28 - Add private_flags uint32_t to CREATE call. */
129 /* Leave at 28 - not yet released. Change realpath to assume NULL and return a
130 malloc'ed path. JRA. */
131 /* Leave at 28 - not yet released. Move posix_fallocate into the VFS
132 where it belongs. JRA. */
133 /* Leave at 28 - not yet released. Rename posix_fallocate to fallocate
134 to split out the two possible uses. JRA. */
135 /* Leave at 28 - not yet released. Add fdopendir. JRA. */
136 /* Leave at 28 - not yet released. Rename open function to open_fn. - gd */
137 /* Leave at 28 - not yet released. Make getwd function always return malloced memory. JRA. */
138 /* Bump to version 29 - Samba 3.6.0 will ship with interface version 28. */
139 /* Leave at 29 - not yet releases. Add fsctl. Richard Sharpe */
140 /* Leave at 29 - not yet released. add SMB_VFS_GET_DFS_REFERRAL() - metze */
141 /* Leave at 29 - not yet released. Remove l{list,get,set,remove}xattr - abartlet */
142 /* Leave at 29 - not yet released. move to plain off_t - abartlet */
143 #define SMB_VFS_INTERFACE_VERSION 29
146 All intercepted VFS operations must be declared as static functions inside module source
147 in order to keep smbd namespace unpolluted. See source of audit, extd_audit, fake_perms and recycle
148 example VFS modules for more details.
151 /* VFS operations structure */
153 struct vfs_handle_struct;
154 struct connection_struct;
155 struct files_struct;
156 struct security_descriptor;
157 struct vfs_statvfs_struct;
158 struct smb_request;
159 struct ea_list;
160 struct smb_file_time;
161 struct blocking_lock_record;
162 struct smb_filename;
163 struct dfs_GetDFSReferral;
165 typedef union unid_t {
166 uid_t uid;
167 gid_t gid;
168 } unid_t;
170 struct fd_handle {
171 size_t ref_count;
172 int fd;
173 uint64_t position_information;
174 off_t pos;
175 uint32 private_options; /* NT Create options, but we only look at
176 * NTCREATEX_OPTIONS_PRIVATE_DENY_DOS and
177 * NTCREATEX_OPTIONS_PRIVATE_DENY_FCB and
178 * NTCREATEX_OPTIONS_PRIVATE_DELETE_ON_CLOSE
179 * for print files *only*, where
180 * DELETE_ON_CLOSE is not stored in the share
181 * mode database.
183 unsigned long gen_id;
186 typedef struct files_struct {
187 struct files_struct *next, *prev;
188 int fnum;
189 struct connection_struct *conn;
190 struct fd_handle *fh;
191 unsigned int num_smb_operations;
192 struct file_id file_id;
193 uint64_t initial_allocation_size; /* Faked up initial allocation on disk. */
194 uint16 file_pid;
195 uint16 vuid;
196 struct write_cache *wcp;
197 struct timeval open_time;
198 uint32 access_mask; /* NTCreateX access bits (FILE_READ_DATA etc.) */
199 uint32 share_access; /* NTCreateX share constants (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE). */
201 bool update_write_time_triggered;
202 struct timed_event *update_write_time_event;
203 bool update_write_time_on_close;
204 struct timespec close_write_time;
205 bool write_time_forced;
207 int oplock_type;
208 int sent_oplock_break;
209 struct timed_event *oplock_timeout;
210 struct lock_struct last_lock_failure;
211 int current_lock_count; /* Count the number of outstanding locks and pending locks. */
213 struct share_mode_entry *pending_break_messages;
214 int num_pending_break_messages;
216 bool can_lock;
217 bool can_read;
218 bool can_write;
219 bool modified;
220 bool is_directory;
221 bool aio_write_behind;
222 bool lockdb_clean;
223 bool initial_delete_on_close; /* Only set at NTCreateX if file was created. */
224 bool delete_on_close;
225 bool posix_open;
226 bool is_sparse;
227 struct smb_filename *fsp_name;
228 uint32_t name_hash; /* Jenkins hash of full pathname. */
230 struct vfs_fsp_data *vfs_extension;
231 struct fake_file_handle *fake_file_handle;
233 struct notify_change_buf *notify;
235 struct files_struct *base_fsp; /* placeholder for delete on close */
238 * Read-only cached brlock record, thrown away when the
239 * brlock.tdb seqnum changes. This avoids fetching data from
240 * the brlock.tdb on every read/write call.
242 int brlock_seqnum;
243 struct byte_range_lock *brlock_rec;
245 struct dptr_struct *dptr;
247 /* if not NULL, means this is a print file */
248 struct print_file_data *print_file;
250 } files_struct;
252 #define VFS_FIND(__fn__) while (handle->fns->__fn__##_fn==NULL) { \
253 handle = handle->next; \
256 enum vfs_translate_direction {
257 vfs_translate_to_unix = 0,
258 vfs_translate_to_windows
261 enum vfs_fallocate_mode {
262 VFS_FALLOCATE_EXTEND_SIZE = 0,
263 VFS_FALLOCATE_KEEP_SIZE = 1
267 Available VFS operations. These values must be in sync with vfs_ops struct
268 (struct vfs_fn_pointers and struct vfs_handle_pointers inside of struct vfs_ops).
269 In particular, if new operations are added to vfs_ops, appropriate constants
270 should be added to vfs_op_type so that order of them kept same as in vfs_ops.
272 struct shadow_copy_data;
274 struct vfs_fn_pointers {
275 /* Disk operations */
277 int (*connect_fn)(struct vfs_handle_struct *handle, const char *service, const char *user);
278 void (*disconnect_fn)(struct vfs_handle_struct *handle);
279 uint64_t (*disk_free_fn)(struct vfs_handle_struct *handle, const char *path, bool small_query, uint64_t *bsize,
280 uint64_t *dfree, uint64_t *dsize);
281 int (*get_quota_fn)(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt);
282 int (*set_quota_fn)(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt);
283 int (*get_shadow_copy_data_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, struct shadow_copy_data *shadow_copy_data, bool labels);
284 int (*statvfs_fn)(struct vfs_handle_struct *handle, const char *path, struct vfs_statvfs_struct *statbuf);
285 uint32_t (*fs_capabilities_fn)(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res);
288 * Note: that "struct dfs_GetDFSReferral *r"
289 * needs to be a valid TALLOC_CTX
291 NTSTATUS (*get_dfs_referrals_fn)(struct vfs_handle_struct *handle,
292 struct dfs_GetDFSReferral *r);
294 /* Directory operations */
296 DIR *(*opendir_fn)(struct vfs_handle_struct *handle, const char *fname, const char *mask, uint32 attributes);
297 DIR *(*fdopendir_fn)(struct vfs_handle_struct *handle, files_struct *fsp, const char *mask, uint32 attributes);
298 struct dirent *(*readdir_fn)(struct vfs_handle_struct *handle,
299 DIR *dirp,
300 SMB_STRUCT_STAT *sbuf);
301 void (*seekdir_fn)(struct vfs_handle_struct *handle, DIR *dirp, long offset);
302 long (*telldir_fn)(struct vfs_handle_struct *handle, DIR *dirp);
303 void (*rewind_dir_fn)(struct vfs_handle_struct *handle, DIR *dirp);
304 int (*mkdir_fn)(struct vfs_handle_struct *handle, const char *path, mode_t mode);
305 int (*rmdir_fn)(struct vfs_handle_struct *handle, const char *path);
306 int (*closedir_fn)(struct vfs_handle_struct *handle, DIR *dir);
307 void (*init_search_op_fn)(struct vfs_handle_struct *handle, DIR *dirp);
309 /* File operations */
311 int (*open_fn)(struct vfs_handle_struct *handle,
312 struct smb_filename *smb_fname, files_struct *fsp,
313 int flags, mode_t mode);
314 NTSTATUS (*create_file_fn)(struct vfs_handle_struct *handle,
315 struct smb_request *req,
316 uint16_t root_dir_fid,
317 struct smb_filename *smb_fname,
318 uint32_t access_mask,
319 uint32_t share_access,
320 uint32_t create_disposition,
321 uint32_t create_options,
322 uint32_t file_attributes,
323 uint32_t oplock_request,
324 uint64_t allocation_size,
325 uint32_t private_flags,
326 struct security_descriptor *sd,
327 struct ea_list *ea_list,
328 files_struct **result,
329 int *pinfo);
330 int (*close_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
331 ssize_t (*read_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, void *data, size_t n);
332 ssize_t (*pread_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, void *data, size_t n, off_t offset);
333 ssize_t (*write_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n);
334 ssize_t (*pwrite_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n, off_t offset);
335 off_t (*lseek_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t offset, int whence);
336 ssize_t (*sendfile_fn)(struct vfs_handle_struct *handle, int tofd, files_struct *fromfsp, const DATA_BLOB *header, off_t offset, size_t count);
337 ssize_t (*recvfile_fn)(struct vfs_handle_struct *handle, int fromfd, files_struct *tofsp, off_t offset, size_t count);
338 int (*rename_fn)(struct vfs_handle_struct *handle,
339 const struct smb_filename *smb_fname_src,
340 const struct smb_filename *smb_fname_dst);
341 int (*fsync_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
342 int (*stat_fn)(struct vfs_handle_struct *handle, struct smb_filename *smb_fname);
343 int (*fstat_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_STAT *sbuf);
344 int (*lstat_fn)(struct vfs_handle_struct *handle, struct smb_filename *smb_filename);
345 uint64_t (*get_alloc_size_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const SMB_STRUCT_STAT *sbuf);
346 int (*unlink_fn)(struct vfs_handle_struct *handle,
347 const struct smb_filename *smb_fname);
348 int (*chmod_fn)(struct vfs_handle_struct *handle, const char *path, mode_t mode);
349 int (*fchmod_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, mode_t mode);
350 int (*chown_fn)(struct vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid);
351 int (*fchown_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, uid_t uid, gid_t gid);
352 int (*lchown_fn)(struct vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid);
353 int (*chdir_fn)(struct vfs_handle_struct *handle, const char *path);
354 char *(*getwd_fn)(struct vfs_handle_struct *handle);
355 int (*ntimes_fn)(struct vfs_handle_struct *handle,
356 const struct smb_filename *smb_fname,
357 struct smb_file_time *ft);
358 int (*ftruncate_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t offset);
359 int (*fallocate_fn)(struct vfs_handle_struct *handle,
360 struct files_struct *fsp,
361 enum vfs_fallocate_mode mode,
362 off_t offset,
363 off_t len);
364 bool (*lock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int op, off_t offset, off_t count, int type);
365 int (*kernel_flock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp,
366 uint32 share_mode, uint32_t access_mask);
367 int (*linux_setlease_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int leasetype);
368 bool (*getlock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t *poffset, off_t *pcount, int *ptype, pid_t *ppid);
369 int (*symlink_fn)(struct vfs_handle_struct *handle, const char *oldpath, const char *newpath);
370 int (*readlink_fn)(struct vfs_handle_struct *handle, const char *path, char *buf, size_t bufsiz);
371 int (*link_fn)(struct vfs_handle_struct *handle, const char *oldpath, const char *newpath);
372 int (*mknod_fn)(struct vfs_handle_struct *handle, const char *path, mode_t mode, SMB_DEV_T dev);
373 char *(*realpath_fn)(struct vfs_handle_struct *handle, const char *path);
374 NTSTATUS (*notify_watch_fn)(struct vfs_handle_struct *handle,
375 struct sys_notify_context *ctx,
376 const char *path,
377 uint32_t *filter,
378 uint32_t *subdir_filter,
379 void (*callback)(struct sys_notify_context *ctx,
380 void *private_data,
381 struct notify_event *ev),
382 void *private_data,
383 void *handle_p);
384 int (*chflags_fn)(struct vfs_handle_struct *handle, const char *path, unsigned int flags);
385 struct file_id (*file_id_create_fn)(struct vfs_handle_struct *handle,
386 const SMB_STRUCT_STAT *sbuf);
388 NTSTATUS (*streaminfo_fn)(struct vfs_handle_struct *handle,
389 struct files_struct *fsp,
390 const char *fname,
391 TALLOC_CTX *mem_ctx,
392 unsigned int *num_streams,
393 struct stream_struct **streams);
395 int (*get_real_filename_fn)(struct vfs_handle_struct *handle,
396 const char *path,
397 const char *name,
398 TALLOC_CTX *mem_ctx,
399 char **found_name);
401 const char *(*connectpath_fn)(struct vfs_handle_struct *handle,
402 const char *filename);
404 NTSTATUS (*brl_lock_windows_fn)(struct vfs_handle_struct *handle,
405 struct byte_range_lock *br_lck,
406 struct lock_struct *plock,
407 bool blocking_lock,
408 struct blocking_lock_record *blr);
410 bool (*brl_unlock_windows_fn)(struct vfs_handle_struct *handle,
411 struct messaging_context *msg_ctx,
412 struct byte_range_lock *br_lck,
413 const struct lock_struct *plock);
415 bool (*brl_cancel_windows_fn)(struct vfs_handle_struct *handle,
416 struct byte_range_lock *br_lck,
417 struct lock_struct *plock,
418 struct blocking_lock_record *blr);
420 bool (*strict_lock_fn)(struct vfs_handle_struct *handle,
421 struct files_struct *fsp,
422 struct lock_struct *plock);
424 void (*strict_unlock_fn)(struct vfs_handle_struct *handle,
425 struct files_struct *fsp,
426 struct lock_struct *plock);
428 NTSTATUS (*translate_name_fn)(struct vfs_handle_struct *handle,
429 const char *name,
430 enum vfs_translate_direction direction,
431 TALLOC_CTX *mem_ctx,
432 char **mapped_name);
434 NTSTATUS (*fsctl_fn)(struct vfs_handle_struct *handle,
435 struct files_struct *fsp,
436 TALLOC_CTX *ctx,
437 uint32_t function,
438 uint16_t req_flags,
439 const uint8_t *_in_data,
440 uint32_t in_len,
441 uint8_t **_out_data,
442 uint32_t max_out_len,
443 uint32_t *out_len);
445 /* NT ACL operations. */
447 NTSTATUS (*fget_nt_acl_fn)(struct vfs_handle_struct *handle,
448 struct files_struct *fsp,
449 uint32 security_info,
450 struct security_descriptor **ppdesc);
451 NTSTATUS (*get_nt_acl_fn)(struct vfs_handle_struct *handle,
452 const char *name,
453 uint32 security_info,
454 struct security_descriptor **ppdesc);
455 NTSTATUS (*fset_nt_acl_fn)(struct vfs_handle_struct *handle,
456 struct files_struct *fsp,
457 uint32 security_info_sent,
458 const struct security_descriptor *psd);
460 NTSTATUS (*audit_file_fn)(struct vfs_handle_struct *handle,
461 struct smb_filename *file,
462 struct security_acl *sacl,
463 uint32_t access_requested,
464 uint32_t access_denied);
466 /* POSIX ACL operations. */
468 int (*chmod_acl_fn)(struct vfs_handle_struct *handle, const char *name, mode_t mode);
469 int (*fchmod_acl_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, mode_t mode);
471 int (*sys_acl_get_entry_fn)(struct vfs_handle_struct *handle, SMB_ACL_T theacl, int entry_id, SMB_ACL_ENTRY_T *entry_p);
472 int (*sys_acl_get_tag_type_fn)(struct vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *tag_type_p);
473 int (*sys_acl_get_permset_fn)(struct vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p);
474 void * (*sys_acl_get_qualifier_fn)(struct vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry_d);
475 SMB_ACL_T (*sys_acl_get_file_fn)(struct vfs_handle_struct *handle, const char *path_p, SMB_ACL_TYPE_T type);
476 SMB_ACL_T (*sys_acl_get_fd_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
477 int (*sys_acl_clear_perms_fn)(struct vfs_handle_struct *handle, SMB_ACL_PERMSET_T permset);
478 int (*sys_acl_add_perm_fn)(struct vfs_handle_struct *handle, SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
479 char * (*sys_acl_to_text_fn)(struct vfs_handle_struct *handle, SMB_ACL_T theacl, ssize_t *plen);
480 SMB_ACL_T (*sys_acl_init_fn)(struct vfs_handle_struct *handle, int count);
481 int (*sys_acl_create_entry_fn)(struct vfs_handle_struct *handle, SMB_ACL_T *pacl, SMB_ACL_ENTRY_T *pentry);
482 int (*sys_acl_set_tag_type_fn)(struct vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry, SMB_ACL_TAG_T tagtype);
483 int (*sys_acl_set_qualifier_fn)(struct vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry, void *qual);
484 int (*sys_acl_set_permset_fn)(struct vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry, SMB_ACL_PERMSET_T permset);
485 int (*sys_acl_valid_fn)(struct vfs_handle_struct *handle, SMB_ACL_T theacl );
486 int (*sys_acl_set_file_fn)(struct vfs_handle_struct *handle, const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
487 int (*sys_acl_set_fd_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_ACL_T theacl);
488 int (*sys_acl_delete_def_file_fn)(struct vfs_handle_struct *handle, const char *path);
489 int (*sys_acl_get_perm_fn)(struct vfs_handle_struct *handle, SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
490 int (*sys_acl_free_text_fn)(struct vfs_handle_struct *handle, char *text);
491 int (*sys_acl_free_acl_fn)(struct vfs_handle_struct *handle, SMB_ACL_T posix_acl);
492 int (*sys_acl_free_qualifier_fn)(struct vfs_handle_struct *handle, void *qualifier, SMB_ACL_TAG_T tagtype);
494 /* EA operations. */
495 ssize_t (*getxattr_fn)(struct vfs_handle_struct *handle,const char *path, const char *name, void *value, size_t size);
496 ssize_t (*fgetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size);
497 ssize_t (*listxattr_fn)(struct vfs_handle_struct *handle, const char *path, char *list, size_t size);
498 ssize_t (*flistxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size);
499 int (*removexattr_fn)(struct vfs_handle_struct *handle, const char *path, const char *name);
500 int (*fremovexattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name);
501 int (*setxattr_fn)(struct vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags);
502 int (*fsetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags);
504 /* aio operations */
505 int (*aio_read_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
506 int (*aio_write_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
507 ssize_t (*aio_return_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
508 int (*aio_cancel_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
509 int (*aio_error_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
510 int (*aio_fsync_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int op, SMB_STRUCT_AIOCB *aiocb);
511 int (*aio_suspend_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const SMB_STRUCT_AIOCB * const aiocb[], int n, const struct timespec *timeout);
512 bool (*aio_force_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
514 /* offline operations */
515 bool (*is_offline_fn)(struct vfs_handle_struct *handle,
516 const struct smb_filename *fname,
517 SMB_STRUCT_STAT *sbuf);
518 int (*set_offline_fn)(struct vfs_handle_struct *handle,
519 const struct smb_filename *fname);
523 VFS operation description. Each VFS module registers an array of vfs_op_tuple to VFS subsystem,
524 which describes all operations this module is willing to intercept.
525 VFS subsystem initializes then the conn->vfs_ops and conn->vfs_opaque_ops structs
526 using this information.
529 typedef struct vfs_handle_struct {
530 struct vfs_handle_struct *next, *prev;
531 const char *param;
532 struct connection_struct *conn;
533 const struct vfs_fn_pointers *fns;
534 void *data;
535 void (*free_data)(void **data);
536 } vfs_handle_struct;
539 typedef struct vfs_statvfs_struct {
540 /* For undefined recommended transfer size return -1 in that field */
541 uint32 OptimalTransferSize; /* bsize on some os, iosize on other os */
542 uint32 BlockSize;
545 The next three fields are in terms of the block size.
546 (above). If block size is unknown, 4096 would be a
547 reasonable block size for a server to report.
548 Note that returning the blocks/blocksavail removes need
549 to make a second call (to QFSInfo level 0x103 to get this info.
550 UserBlockAvail is typically less than or equal to BlocksAvail,
551 if no distinction is made return the same value in each.
554 uint64_t TotalBlocks;
555 uint64_t BlocksAvail; /* bfree */
556 uint64_t UserBlocksAvail; /* bavail */
558 /* For undefined Node fields or FSID return -1 */
559 uint64_t TotalFileNodes;
560 uint64_t FreeFileNodes;
561 uint64_t FsIdentifier; /* fsid */
562 /* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */
563 /* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */
565 int FsCapabilities;
566 } vfs_statvfs_struct;
568 /* Add a new FSP extension of the given type. Returns a pointer to the
569 * extenstion data.
571 #define VFS_ADD_FSP_EXTENSION(handle, fsp, type, destroy_fn) \
572 vfs_add_fsp_extension_notype(handle, (fsp), sizeof(type), (destroy_fn))
574 /* Return a pointer to the existing FSP extension data. */
575 #define VFS_FETCH_FSP_EXTENSION(handle, fsp) \
576 vfs_fetch_fsp_extension(handle, (fsp))
578 /* Return the talloc context associated with an FSP extension. */
579 #define VFS_MEMCTX_FSP_EXTENSION(handle, fsp) \
580 vfs_memctx_fsp_extension(handle, (fsp))
582 /* Remove and destroy an FSP extension. */
583 #define VFS_REMOVE_FSP_EXTENSION(handle, fsp) \
584 vfs_remove_fsp_extension((handle), (fsp))
586 #define SMB_VFS_HANDLE_GET_DATA(handle, datap, type, ret) { \
587 if (!(handle)||((datap=(type *)(handle)->data)==NULL)) { \
588 DEBUG(0,("%s() failed to get vfs_handle->data!\n",__FUNCTION__)); \
589 ret; \
593 #define SMB_VFS_HANDLE_SET_DATA(handle, datap, free_fn, type, ret) { \
594 if (!(handle)) { \
595 DEBUG(0,("%s() failed to set handle->data!\n",__FUNCTION__)); \
596 ret; \
597 } else { \
598 if ((handle)->free_data) { \
599 (handle)->free_data(&(handle)->data); \
601 (handle)->data = (void *)datap; \
602 (handle)->free_data = free_fn; \
606 #define SMB_VFS_HANDLE_FREE_DATA(handle) { \
607 if ((handle) && (handle)->free_data) { \
608 (handle)->free_data(&(handle)->data); \
612 /* Check whether module-specific data handle was already allocated or not */
613 #define SMB_VFS_HANDLE_TEST_DATA(handle) ( !(handle) || !(handle)->data ? False : True )
615 #define SMB_VFS_OP(x) ((void *) x)
617 #define DEFAULT_VFS_MODULE_NAME "/[Default VFS]/"
619 #include "vfs_macros.h"
621 int smb_vfs_call_connect(struct vfs_handle_struct *handle,
622 const char *service, const char *user);
623 void smb_vfs_call_disconnect(struct vfs_handle_struct *handle);
624 uint64_t smb_vfs_call_disk_free(struct vfs_handle_struct *handle,
625 const char *path, bool small_query,
626 uint64_t *bsize, uint64_t *dfree,
627 uint64_t *dsize);
628 int smb_vfs_call_get_quota(struct vfs_handle_struct *handle,
629 enum SMB_QUOTA_TYPE qtype, unid_t id,
630 SMB_DISK_QUOTA *qt);
631 int smb_vfs_call_set_quota(struct vfs_handle_struct *handle,
632 enum SMB_QUOTA_TYPE qtype, unid_t id,
633 SMB_DISK_QUOTA *qt);
634 int smb_vfs_call_get_shadow_copy_data(struct vfs_handle_struct *handle,
635 struct files_struct *fsp,
636 struct shadow_copy_data *shadow_copy_data,
637 bool labels);
638 int smb_vfs_call_statvfs(struct vfs_handle_struct *handle, const char *path,
639 struct vfs_statvfs_struct *statbuf);
640 uint32_t smb_vfs_call_fs_capabilities(struct vfs_handle_struct *handle,
641 enum timestamp_set_resolution *p_ts_res);
643 * Note: that "struct dfs_GetDFSReferral *r" needs to be a valid TALLOC_CTX
645 NTSTATUS smb_vfs_call_get_dfs_referrals(struct vfs_handle_struct *handle,
646 struct dfs_GetDFSReferral *r);
647 DIR *smb_vfs_call_opendir(struct vfs_handle_struct *handle,
648 const char *fname, const char *mask,
649 uint32 attributes);
650 DIR *smb_vfs_call_fdopendir(struct vfs_handle_struct *handle,
651 struct files_struct *fsp,
652 const char *mask,
653 uint32 attributes);
654 struct dirent *smb_vfs_call_readdir(struct vfs_handle_struct *handle,
655 DIR *dirp,
656 SMB_STRUCT_STAT *sbuf);
657 void smb_vfs_call_seekdir(struct vfs_handle_struct *handle,
658 DIR *dirp, long offset);
659 long smb_vfs_call_telldir(struct vfs_handle_struct *handle,
660 DIR *dirp);
661 void smb_vfs_call_rewind_dir(struct vfs_handle_struct *handle,
662 DIR *dirp);
663 int smb_vfs_call_mkdir(struct vfs_handle_struct *handle, const char *path,
664 mode_t mode);
665 int smb_vfs_call_rmdir(struct vfs_handle_struct *handle, const char *path);
666 int smb_vfs_call_closedir(struct vfs_handle_struct *handle,
667 DIR *dir);
668 void smb_vfs_call_init_search_op(struct vfs_handle_struct *handle,
669 DIR *dirp);
670 int smb_vfs_call_open(struct vfs_handle_struct *handle,
671 struct smb_filename *smb_fname, struct files_struct *fsp,
672 int flags, mode_t mode);
673 NTSTATUS smb_vfs_call_create_file(struct vfs_handle_struct *handle,
674 struct smb_request *req,
675 uint16_t root_dir_fid,
676 struct smb_filename *smb_fname,
677 uint32_t access_mask,
678 uint32_t share_access,
679 uint32_t create_disposition,
680 uint32_t create_options,
681 uint32_t file_attributes,
682 uint32_t oplock_request,
683 uint64_t allocation_size,
684 uint32_t private_flags,
685 struct security_descriptor *sd,
686 struct ea_list *ea_list,
687 files_struct **result,
688 int *pinfo);
689 int smb_vfs_call_close(struct vfs_handle_struct *handle,
690 struct files_struct *fsp);
691 ssize_t smb_vfs_call_read(struct vfs_handle_struct *handle,
692 struct files_struct *fsp, void *data, size_t n);
693 ssize_t smb_vfs_call_pread(struct vfs_handle_struct *handle,
694 struct files_struct *fsp, void *data, size_t n,
695 off_t offset);
696 ssize_t smb_vfs_call_write(struct vfs_handle_struct *handle,
697 struct files_struct *fsp, const void *data,
698 size_t n);
699 ssize_t smb_vfs_call_pwrite(struct vfs_handle_struct *handle,
700 struct files_struct *fsp, const void *data,
701 size_t n, off_t offset);
702 off_t smb_vfs_call_lseek(struct vfs_handle_struct *handle,
703 struct files_struct *fsp, off_t offset,
704 int whence);
705 ssize_t smb_vfs_call_sendfile(struct vfs_handle_struct *handle, int tofd,
706 files_struct *fromfsp, const DATA_BLOB *header,
707 off_t offset, size_t count);
708 ssize_t smb_vfs_call_recvfile(struct vfs_handle_struct *handle, int fromfd,
709 files_struct *tofsp, off_t offset,
710 size_t count);
711 int smb_vfs_call_rename(struct vfs_handle_struct *handle,
712 const struct smb_filename *smb_fname_src,
713 const struct smb_filename *smb_fname_dst);
714 int smb_vfs_call_fsync(struct vfs_handle_struct *handle,
715 struct files_struct *fsp);
716 int smb_vfs_call_stat(struct vfs_handle_struct *handle,
717 struct smb_filename *smb_fname);
718 int smb_vfs_call_fstat(struct vfs_handle_struct *handle,
719 struct files_struct *fsp, SMB_STRUCT_STAT *sbuf);
720 int smb_vfs_call_lstat(struct vfs_handle_struct *handle,
721 struct smb_filename *smb_filename);
722 uint64_t smb_vfs_call_get_alloc_size(struct vfs_handle_struct *handle,
723 struct files_struct *fsp,
724 const SMB_STRUCT_STAT *sbuf);
725 int smb_vfs_call_unlink(struct vfs_handle_struct *handle,
726 const struct smb_filename *smb_fname);
727 int smb_vfs_call_chmod(struct vfs_handle_struct *handle, const char *path,
728 mode_t mode);
729 int smb_vfs_call_fchmod(struct vfs_handle_struct *handle,
730 struct files_struct *fsp, mode_t mode);
731 int smb_vfs_call_chown(struct vfs_handle_struct *handle, const char *path,
732 uid_t uid, gid_t gid);
733 int smb_vfs_call_fchown(struct vfs_handle_struct *handle,
734 struct files_struct *fsp, uid_t uid, gid_t gid);
735 int smb_vfs_call_lchown(struct vfs_handle_struct *handle, const char *path,
736 uid_t uid, gid_t gid);
737 int smb_vfs_call_chdir(struct vfs_handle_struct *handle, const char *path);
738 char *smb_vfs_call_getwd(struct vfs_handle_struct *handle);
739 int smb_vfs_call_ntimes(struct vfs_handle_struct *handle,
740 const struct smb_filename *smb_fname,
741 struct smb_file_time *ft);
742 int smb_vfs_call_ftruncate(struct vfs_handle_struct *handle,
743 struct files_struct *fsp, off_t offset);
744 int smb_vfs_call_fallocate(struct vfs_handle_struct *handle,
745 struct files_struct *fsp,
746 enum vfs_fallocate_mode mode,
747 off_t offset,
748 off_t len);
749 bool smb_vfs_call_lock(struct vfs_handle_struct *handle,
750 struct files_struct *fsp, int op, off_t offset,
751 off_t count, int type);
752 int smb_vfs_call_kernel_flock(struct vfs_handle_struct *handle,
753 struct files_struct *fsp, uint32 share_mode,
754 uint32_t access_mask);
755 int smb_vfs_call_linux_setlease(struct vfs_handle_struct *handle,
756 struct files_struct *fsp, int leasetype);
757 bool smb_vfs_call_getlock(struct vfs_handle_struct *handle,
758 struct files_struct *fsp, off_t *poffset,
759 off_t *pcount, int *ptype, pid_t *ppid);
760 int smb_vfs_call_symlink(struct vfs_handle_struct *handle, const char *oldpath,
761 const char *newpath);
762 int smb_vfs_call_readlink(struct vfs_handle_struct *handle,
763 const char *path, char *buf, size_t bufsiz);
764 int smb_vfs_call_link(struct vfs_handle_struct *handle, const char *oldpath,
765 const char *newpath);
766 int smb_vfs_call_mknod(struct vfs_handle_struct *handle, const char *path,
767 mode_t mode, SMB_DEV_T dev);
768 char *smb_vfs_call_realpath(struct vfs_handle_struct *handle, const char *path);
769 NTSTATUS smb_vfs_call_notify_watch(struct vfs_handle_struct *handle,
770 struct sys_notify_context *ctx,
771 const char *name,
772 uint32_t *filter,
773 uint32_t *subdir_filter,
774 void (*callback)(struct sys_notify_context *ctx,
775 void *private_data,
776 struct notify_event *ev),
777 void *private_data, void *handle_p);
778 int smb_vfs_call_chflags(struct vfs_handle_struct *handle, const char *path,
779 unsigned int flags);
780 struct file_id smb_vfs_call_file_id_create(struct vfs_handle_struct *handle,
781 const SMB_STRUCT_STAT *sbuf);
782 NTSTATUS smb_vfs_call_streaminfo(struct vfs_handle_struct *handle,
783 struct files_struct *fsp,
784 const char *fname,
785 TALLOC_CTX *mem_ctx,
786 unsigned int *num_streams,
787 struct stream_struct **streams);
788 int smb_vfs_call_get_real_filename(struct vfs_handle_struct *handle,
789 const char *path, const char *name,
790 TALLOC_CTX *mem_ctx, char **found_name);
791 const char *smb_vfs_call_connectpath(struct vfs_handle_struct *handle,
792 const char *filename);
793 NTSTATUS smb_vfs_call_brl_lock_windows(struct vfs_handle_struct *handle,
794 struct byte_range_lock *br_lck,
795 struct lock_struct *plock,
796 bool blocking_lock,
797 struct blocking_lock_record *blr);
798 bool smb_vfs_call_brl_unlock_windows(struct vfs_handle_struct *handle,
799 struct messaging_context *msg_ctx,
800 struct byte_range_lock *br_lck,
801 const struct lock_struct *plock);
802 bool smb_vfs_call_brl_cancel_windows(struct vfs_handle_struct *handle,
803 struct byte_range_lock *br_lck,
804 struct lock_struct *plock,
805 struct blocking_lock_record *blr);
806 bool smb_vfs_call_strict_lock(struct vfs_handle_struct *handle,
807 struct files_struct *fsp,
808 struct lock_struct *plock);
809 void smb_vfs_call_strict_unlock(struct vfs_handle_struct *handle,
810 struct files_struct *fsp,
811 struct lock_struct *plock);
812 NTSTATUS smb_vfs_call_translate_name(struct vfs_handle_struct *handle,
813 const char *name,
814 enum vfs_translate_direction direction,
815 TALLOC_CTX *mem_ctx,
816 char **mapped_name);
817 NTSTATUS smb_vfs_call_fsctl(struct vfs_handle_struct *handle,
818 struct files_struct *fsp,
819 TALLOC_CTX *ctx,
820 uint32_t function,
821 uint16_t req_flags,
822 const uint8_t *_in_data,
823 uint32_t in_len,
824 uint8_t **_out_data,
825 uint32_t max_out_len,
826 uint32_t *out_len);
827 NTSTATUS smb_vfs_call_fget_nt_acl(struct vfs_handle_struct *handle,
828 struct files_struct *fsp,
829 uint32 security_info,
830 struct security_descriptor **ppdesc);
831 NTSTATUS smb_vfs_call_get_nt_acl(struct vfs_handle_struct *handle,
832 const char *name,
833 uint32 security_info,
834 struct security_descriptor **ppdesc);
835 NTSTATUS smb_vfs_call_fset_nt_acl(struct vfs_handle_struct *handle,
836 struct files_struct *fsp,
837 uint32 security_info_sent,
838 const struct security_descriptor *psd);
839 NTSTATUS smb_vfs_call_audit_file(struct vfs_handle_struct *handle,
840 struct smb_filename *file,
841 struct security_acl *sacl,
842 uint32_t access_requested,
843 uint32_t access_denied);
844 int smb_vfs_call_chmod_acl(struct vfs_handle_struct *handle, const char *name,
845 mode_t mode);
846 int smb_vfs_call_fchmod_acl(struct vfs_handle_struct *handle,
847 struct files_struct *fsp, mode_t mode);
848 int smb_vfs_call_sys_acl_get_entry(struct vfs_handle_struct *handle,
849 SMB_ACL_T theacl, int entry_id,
850 SMB_ACL_ENTRY_T *entry_p);
851 int smb_vfs_call_sys_acl_get_tag_type(struct vfs_handle_struct *handle,
852 SMB_ACL_ENTRY_T entry_d,
853 SMB_ACL_TAG_T *tag_type_p);
854 int smb_vfs_call_sys_acl_get_permset(struct vfs_handle_struct *handle,
855 SMB_ACL_ENTRY_T entry_d,
856 SMB_ACL_PERMSET_T *permset_p);
857 void * smb_vfs_call_sys_acl_get_qualifier(struct vfs_handle_struct *handle,
858 SMB_ACL_ENTRY_T entry_d);
859 SMB_ACL_T smb_vfs_call_sys_acl_get_file(struct vfs_handle_struct *handle,
860 const char *path_p,
861 SMB_ACL_TYPE_T type);
862 SMB_ACL_T smb_vfs_call_sys_acl_get_fd(struct vfs_handle_struct *handle,
863 struct files_struct *fsp);
864 int smb_vfs_call_sys_acl_clear_perms(struct vfs_handle_struct *handle,
865 SMB_ACL_PERMSET_T permset);
866 int smb_vfs_call_sys_acl_add_perm(struct vfs_handle_struct *handle,
867 SMB_ACL_PERMSET_T permset,
868 SMB_ACL_PERM_T perm);
869 char * smb_vfs_call_sys_acl_to_text(struct vfs_handle_struct *handle,
870 SMB_ACL_T theacl, ssize_t *plen);
871 SMB_ACL_T smb_vfs_call_sys_acl_init(struct vfs_handle_struct *handle,
872 int count);
873 int smb_vfs_call_sys_acl_create_entry(struct vfs_handle_struct *handle,
874 SMB_ACL_T *pacl, SMB_ACL_ENTRY_T *pentry);
875 int smb_vfs_call_sys_acl_set_tag_type(struct vfs_handle_struct *handle,
876 SMB_ACL_ENTRY_T entry,
877 SMB_ACL_TAG_T tagtype);
878 int smb_vfs_call_sys_acl_set_qualifier(struct vfs_handle_struct *handle,
879 SMB_ACL_ENTRY_T entry, void *qual);
880 int smb_vfs_call_sys_acl_set_permset(struct vfs_handle_struct *handle,
881 SMB_ACL_ENTRY_T entry,
882 SMB_ACL_PERMSET_T permset);
883 int smb_vfs_call_sys_acl_valid(struct vfs_handle_struct *handle,
884 SMB_ACL_T theacl);
885 int smb_vfs_call_sys_acl_set_file(struct vfs_handle_struct *handle,
886 const char *name, SMB_ACL_TYPE_T acltype,
887 SMB_ACL_T theacl);
888 int smb_vfs_call_sys_acl_set_fd(struct vfs_handle_struct *handle,
889 struct files_struct *fsp, SMB_ACL_T theacl);
890 int smb_vfs_call_sys_acl_delete_def_file(struct vfs_handle_struct *handle,
891 const char *path);
892 int smb_vfs_call_sys_acl_get_perm(struct vfs_handle_struct *handle,
893 SMB_ACL_PERMSET_T permset,
894 SMB_ACL_PERM_T perm);
895 int smb_vfs_call_sys_acl_free_text(struct vfs_handle_struct *handle,
896 char *text);
897 int smb_vfs_call_sys_acl_free_acl(struct vfs_handle_struct *handle,
898 SMB_ACL_T posix_acl);
899 int smb_vfs_call_sys_acl_free_qualifier(struct vfs_handle_struct *handle,
900 void *qualifier, SMB_ACL_TAG_T tagtype);
901 ssize_t smb_vfs_call_getxattr(struct vfs_handle_struct *handle,
902 const char *path, const char *name, void *value,
903 size_t size);
904 ssize_t smb_vfs_call_fgetxattr(struct vfs_handle_struct *handle,
905 struct files_struct *fsp, const char *name,
906 void *value, size_t size);
907 ssize_t smb_vfs_call_listxattr(struct vfs_handle_struct *handle,
908 const char *path, char *list, size_t size);
909 ssize_t smb_vfs_call_llistxattr(struct vfs_handle_struct *handle,
910 const char *path, char *list, size_t size);
911 ssize_t smb_vfs_call_flistxattr(struct vfs_handle_struct *handle,
912 struct files_struct *fsp, char *list,
913 size_t size);
914 int smb_vfs_call_removexattr(struct vfs_handle_struct *handle,
915 const char *path, const char *name);
916 int smb_vfs_call_fremovexattr(struct vfs_handle_struct *handle,
917 struct files_struct *fsp, const char *name);
918 int smb_vfs_call_setxattr(struct vfs_handle_struct *handle, const char *path,
919 const char *name, const void *value, size_t size,
920 int flags);
921 int smb_vfs_call_lsetxattr(struct vfs_handle_struct *handle, const char *path,
922 const char *name, const void *value, size_t size,
923 int flags);
924 int smb_vfs_call_fsetxattr(struct vfs_handle_struct *handle,
925 struct files_struct *fsp, const char *name,
926 const void *value, size_t size, int flags);
927 int smb_vfs_call_aio_read(struct vfs_handle_struct *handle,
928 struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
929 int smb_vfs_call_aio_write(struct vfs_handle_struct *handle,
930 struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
931 ssize_t smb_vfs_call_aio_return(struct vfs_handle_struct *handle,
932 struct files_struct *fsp,
933 SMB_STRUCT_AIOCB *aiocb);
934 int smb_vfs_call_aio_cancel(struct vfs_handle_struct *handle,
935 struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
936 int smb_vfs_call_aio_error(struct vfs_handle_struct *handle,
937 struct files_struct *fsp,
938 SMB_STRUCT_AIOCB *aiocb);
939 int smb_vfs_call_aio_fsync(struct vfs_handle_struct *handle,
940 struct files_struct *fsp, int op,
941 SMB_STRUCT_AIOCB *aiocb);
942 int smb_vfs_call_aio_suspend(struct vfs_handle_struct *handle,
943 struct files_struct *fsp,
944 const SMB_STRUCT_AIOCB * const aiocb[], int n,
945 const struct timespec *timeout);
946 bool smb_vfs_call_aio_force(struct vfs_handle_struct *handle,
947 struct files_struct *fsp);
948 bool smb_vfs_call_is_offline(struct vfs_handle_struct *handle,
949 const struct smb_filename *fname,
950 SMB_STRUCT_STAT *sbuf);
951 int smb_vfs_call_set_offline(struct vfs_handle_struct *handle,
952 const struct smb_filename *fname);
954 #endif /* _VFS_H */