2000-02-03 07:47:50 +03:00
/*
2002-03-22 09:24:38 +03:00
Unix SMB / CIFS implementation .
2000-02-03 07:47:50 +03:00
VFS structures and parameters
2005-06-28 02:53:56 +04:00
Copyright ( C ) Jeremy Allison 1999 - 2005
2002-08-17 21:00:51 +04:00
Copyright ( C ) Tim Potter 1999
2005-10-20 21:33:17 +04:00
Copyright ( C ) Alexander Bokovoy 2002 - 2005
2003-05-12 03:34:18 +04:00
Copyright ( C ) Stefan ( metze ) Metzmacher 2003
2009-07-24 21:21:45 +04:00
Copyright ( C ) Volker Lendecke 2009
2011-08-05 18:01:23 +04:00
2000-02-03 07:47:50 +03:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-09 23:25:36 +04:00
the Free Software Foundation ; either version 3 of the License , or
2000-02-03 07:47:50 +03:00
( at your option ) any later version .
2011-08-05 18:01:23 +04:00
2000-02-03 07:47:50 +03:00
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
2011-08-05 18:01:23 +04:00
2000-02-03 07:47:50 +03:00
You should have received a copy of the GNU General Public License
2007-07-10 04:52:41 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2002-08-17 21:00:51 +04:00
This work was sponsored by Optifacio Software Services , Inc .
2000-02-03 07:47:50 +03:00
*/
# ifndef _VFS_H
# define _VFS_H
2000-10-05 23:04:41 +04:00
/* Avoid conflict with an AIX include file */
# ifdef vfs_ops
# undef vfs_ops
# endif
2000-10-06 07:21:49 +04:00
/*
* As we ' re now ( thanks Andrew ! : - ) using file_structs and connection
* structs in the vfs - then anyone writing a vfs must include includes . h . . .
*/
2000-02-03 07:47:50 +03:00
2000-11-07 00:44:33 +03:00
/*
* This next constant specifies the version number of the VFS interface
* this smbd will load . Increment this if * ANY * changes are made to the
* vfs_ops below . JRA .
2004-04-29 16:11:59 +04:00
*
* If you change anything here , please also update modules / vfs_full_audit . c .
* VL .
2000-11-07 00:44:33 +03:00
*/
2002-01-10 03:28:09 +03:00
/* Changed to version 2 for CIFS UNIX extensions (mknod and link added). JRA. */
2002-03-12 03:08:08 +03:00
/* Changed to version 3 for POSIX acl extensions. JRA. */
2002-08-17 21:00:51 +04:00
/* Changed to version 4 for cascaded VFS interface. Alexander Bokovoy. */
2002-09-25 19:19:00 +04:00
/* Changed to version 5 for sendfile addition. JRA. */
2003-05-12 03:34:18 +04:00
/* Changed to version 6 for the new module system, fixed cascading and quota functions. --metze */
2003-06-06 04:04:27 +04:00
/* Changed to version 7 to include the get_nt_acl info parameter. JRA. */
/* Changed to version 8 includes EA calls. JRA. */
2003-08-08 01:47:46 +04:00
/* Changed to version 9 to include the get_shadow_data call. --metze */
2004-01-06 04:22:14 +03:00
/* Changed to version 10 to include pread/pwrite calls. */
2004-11-10 01:49:28 +03:00
/* Changed to version 11 to include seekdir/telldir/rewinddir calls. JRA */
2005-06-28 02:53:56 +04:00
/* Changed to version 12 to add mask and attributes to opendir(). JRA
Also include aio calls . JRA . */
2005-07-08 08:51:27 +04:00
/* Changed to version 13 as the internal structure of files_struct has changed. JRA */
2006-04-10 19:33:04 +04:00
/* Changed to version 14 as we had to change DIR to SMB_STRUCT_DIR. JRA */
/* Changed to version 15 as we added the statvfs call. JRA */
/* Changed to version 16 as we added the getlock call. JRA */
2006-07-11 22:01:26 +04:00
/* Changed to version 17 as we removed redundant connection_struct parameters. --jpeach */
2006-11-10 18:43:29 +03:00
/* Changed to version 18 to add fsp parameter to the open call -- jpeach
Also include kernel_flock call - jmcd */
2007-02-14 05:37:14 +03:00
/* Changed to version 19, kernel change notify has been merged
Also included linux setlease call - jmcd */
2007-03-06 02:40:03 +03:00
/* Changed to version 20, use ntimes call instead of utime (greater
* timestamp resolition . JRA . */
2007-03-08 04:40:49 +03:00
/* Changed to version21 to add chflags operation -- jpeach */
2007-05-24 03:55:12 +04:00
/* Changed to version22 to add lchown operation -- jra */
2007-06-27 02:49:10 +04:00
/* Leave at 22 - not yet released. But change set_nt_acl to return an NTSTATUS. jra. */
2007-08-02 12:53:24 +04:00
/* Leave at 22 - not yet released. Add file_id_create operation. --metze */
2007-10-19 04:40:25 +04:00
/* Leave at 22 - not yet released. Change all BOOL parameters (int) to bool. jra. */
2007-10-30 03:16:13 +03:00
/* Leave at 22 - not yet released. Added recvfile. */
2007-10-13 23:06:49 +04:00
/* Leave at 22 - not yet released. Change get_nt_acl to return NTSTATUS - vl */
2007-12-05 11:53:10 +03:00
/* Leave at 22 - not yet released. Change get_nt_acl to *not* take a
* files_struct . - obnox . */
2008-01-05 04:16:15 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from fget_nt_acl. - obnox */
2008-01-06 20:48:02 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from gset_nt_acl. - obnox */
2008-01-07 02:14:19 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from pread. - obnox */
2008-01-07 11:23:04 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from pwrite. - obnox */
2008-01-07 12:15:08 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from lseek. - obnox */
2008-01-07 14:49:02 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from fsync. - obnox */
2008-01-07 15:21:26 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from fstat. - obnox */
2008-01-07 15:44:37 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from fchmod. - obnox */
2008-01-07 16:26:00 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from fchown. - obnox */
2008-01-07 17:55:09 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from ftruncate. - obnox */
2008-01-07 18:38:23 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from lock. - obnox */
2008-01-07 19:14:20 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from kernel_flock. - obnox */
2008-01-08 00:18:50 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from linux_setlease. - obnox */
/* Leave at 22 - not yet released. Remove parameter fd from getlock. - obnox */
2008-01-08 02:21:58 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from sys_acl_get_fd. - obnox */
2008-01-08 03:14:24 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from fchmod_acl. - obnox */
2008-01-08 03:54:19 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from sys_acl_set_fd. - obnox */
2008-01-08 12:00:47 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from fgetxattr. - obnox */
2008-01-08 12:51:40 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from flistxattr. - obnox */
2008-01-08 13:29:09 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from fremovexattr. - obnox */
2008-01-08 13:47:33 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from fsetxattr. - obnox */
2008-01-08 14:20:51 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from aio_cancel. - obnox */
2008-01-10 17:33:51 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from read. - obnox */
2008-01-10 17:49:35 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from write. - obnox */
2008-01-11 02:51:19 +03:00
/* Leave at 22 - not yet released. Remove parameter fromfd from sendfile. - obnox */
2008-01-11 03:26:54 +03:00
/* Leave at 22 - not yet released. Remove parameter fromfd from recvfile. - obnox */
2008-01-19 18:19:08 +03:00
/* Leave at 22 - not yet released. Additional change: add operations for offline files -- ab */
2008-01-19 22:41:15 +03:00
/* Leave at 22 - not yet released. Add the streaminfo call. -- jpeach, vl */
2008-01-11 16:19:28 +03:00
/* Leave at 22 - not yet released. Remove parameter fd from close_fn. - obnox */
2008-05-09 05:09:07 +04:00
/* Changed to version 23 - remove set_nt_acl call. This can only be done via an
open handle . JRA . */
2008-10-08 04:50:01 +04:00
/* Changed to version 24 - make security descriptor const in fset_nt_acl. JRA. */
2008-10-14 04:22:33 +04:00
/* Changed to version 25 - Jelmer's change from SMB_BIG_UINT to uint64_t. */
2008-10-21 04:43:45 +04:00
/* Leave at 25 - not yet released. Add create_file call. -- tprouty. */
2009-01-24 01:40:19 +03:00
/* Leave at 25 - not yet released. Add create time to ntimes. -- tstecher. */
2009-01-27 02:39:40 +03:00
/* Leave at 25 - not yet released. Add get_alloc_size call. -- tprouty. */
2009-01-23 07:14:38 +03:00
/* Leave at 25 - not yet released. Add SMB_STRUCT_STAT to readdir. - sdann */
2009-02-03 08:37:51 +03:00
/* Leave at 25 - not yet released. Add init_search_op call. - sdann */
2009-02-10 08:51:29 +03:00
/* Leave at 25 - not yet released. Add locking calls. -- zkirsch. */
2009-03-14 00:15:28 +03:00
/* Leave at 25 - not yet released. Add strict locking calls. -- drichards. */
2009-06-16 23:01:13 +04:00
/* Changed to version 26 - Plumb struct smb_filename to SMB_VFS_CREATE_FILE,
2009-07-01 04:04:38 +04:00
SMB_VFS_OPEN , SMB_VFS_STAT , SMB_VFS_LSTAT ,
2009-07-03 00:39:20 +04:00
SMB_VFS_RENAME , SMB_VFS_UNLINK , SMB_VFS_NTIMES . */
2009-08-25 07:57:37 +04:00
/* Changed to version 27 - not yet released. Added enum timestamp_set_resolution
* return to fs_capabilities call . JRA . */
2009-08-27 01:56:09 +04:00
/* Leave at 27 - not yet released. Add translate_name VFS call to convert
UNIX names to Windows supported names - - asrinivasan . */
2010-03-06 02:10:30 +03:00
/* Changed to version 28 - Add private_flags uint32_t to CREATE call. */
2010-11-20 03:29:26 +03:00
/* Leave at 28 - not yet released. Change realpath to assume NULL and return a
malloc ' ed path . JRA . */
2010-12-03 03:25:59 +03:00
/* Leave at 28 - not yet released. Move posix_fallocate into the VFS
where it belongs . JRA . */
2010-12-18 10:08:01 +03:00
/* Leave at 28 - not yet released. Rename posix_fallocate to fallocate
to split out the two possible uses . JRA . */
2011-02-09 02:07:48 +03:00
/* Leave at 28 - not yet released. Add fdopendir. JRA. */
2011-04-21 00:55:25 +04:00
/* Leave at 28 - not yet released. Rename open function to open_fn. - gd */
2011-06-01 03:36:06 +04:00
/* Leave at 28 - not yet released. Make getwd function always return malloced memory. JRA. */
2011-06-01 08:03:22 +04:00
/* Bump to version 29 - Samba 3.6.0 will ship with interface version 28. */
2011-09-16 22:52:22 +04:00
/* Leave at 29 - not yet releases. Add fsctl. Richard Sharpe */
2011-10-01 08:57:18 +04:00
/* Leave at 29 - not yet released. add SMB_VFS_GET_DFS_REFERRAL() - metze */
2012-04-04 02:34:25 +04:00
/* Leave at 29 - not yet released. Remove l{list,get,set,remove}xattr - abartlet */
2012-04-05 08:53:08 +04:00
/* Leave at 29 - not yet released. move to plain off_t - abartlet */
2012-08-13 14:03:48 +04:00
/* Leave at 29 - not yet released. Remove sys_acl functions other than set and get - abartlet */
2012-09-05 21:46:51 +04:00
/* Leave at 29 - not yet released. Added backup_intent bool to files_struct - JRA */
2012-09-04 20:04:11 +04:00
/* Leave at 29 - not yet released. Add durable handle functions - metze/obnox */
2012-09-10 06:44:01 +04:00
/* Leave at 29 - not yet released. Added sys_acl_blob_get_file and sys_acl_blob_get_fd */
2012-09-10 19:24:57 +04:00
/* Bump to version 30 - Samba 4.0.0 will ship with interface version 30 */
2012-09-12 22:39:37 +04:00
/* Leave at 30 - not yet released. Added conn->cwd to save vfs_GetWd() calls. */
2012-10-10 09:44:41 +04:00
/* Leave at 30 - not yet released. Changed sys_acl_blob_get_file interface to remove type */
2012-12-21 02:42:55 +04:00
/* Bump to version 31 - Samba 4.1.0 will ship with interface version 31 */
/* Leave at 31 - not yet released. Make struct vuid_cache_entry in
connection_struct a pointer . */
2012-12-21 21:22:16 +04:00
/* Leave at 31 - not yet released. Add share_access to vuid_cache_entry. */
2013-01-15 20:22:59 +04:00
/* Leave at 31 - not yet released. add SMB_VFS_COPY_CHUNK() */
2013-04-12 16:09:12 +04:00
/* Leave at 31 - not yet released. Remove the unused
fsp - > pending_break_messages array */
2013-11-18 17:54:30 +04:00
/* Leave at 31 - not yet released. add SMB_VFS_[GET/SET]_COMPRESSION() */
2012-12-21 02:42:55 +04:00
2013-08-21 17:56:14 +04:00
/* Bump to version 32 - Samba 4.2 will ship with that. */
/* Version 32 - Add "lease" to CREATE_FILE operation */
2014-10-08 20:06:06 +04:00
/* Version 32 - Add "lease" to struct files_struct */
2014-11-26 16:30:37 +03:00
/* Version 32 - Add SMB_VFS_READDIR_ATTR() */
2015-02-16 21:26:24 +03:00
/* Version 32 - Add in and out create context blobs to create_file */
/* Version 32 - Remove unnecessary SMB_VFS_DISK_FREE() small_query parameter */
2015-02-18 14:01:14 +03:00
/* Bump to version 33 - Samba 4.3 will ship with that. */
2015-02-09 20:21:59 +03:00
/* Version 33 - change fallocate mode flags param from enum->uint32_t */
2012-04-10 05:16:57 +04:00
/* Version 33 - Add snapshot create/delete calls */
2015-04-22 23:29:16 +03:00
/* Version 33 - Add OS X SMB2 AAPL copyfile extension flag to fsp */
2014-12-12 17:37:30 +03:00
/* Version 33 - Remove notify_watch_fn */
2015-11-29 17:55:43 +03:00
/* Bump to version 34 - Samba 4.4 will ship with that */
/* Version 34 - Remove bool posix_open, add uint64_t posix_flags */
2015-12-23 00:35:10 +03:00
/* Version 34 - Added bool posix_pathnames to struct smb_request */
2016-02-12 21:30:10 +03:00
/* Bump to version 35 - Samba 4.5 will ship with that */
/* Version 35 - Change get_nt_acl_fn from const char *, to
const struct smb_filename * */
2016-02-24 00:14:03 +03:00
/* Version 35 - Change mkdir from const char *, to
const struct smb_filename * */
2016-02-25 01:02:45 +03:00
/* Version 35 - Change rmdir from const char *, to
const struct smb_filename * */
2016-02-27 01:53:12 +03:00
/* Version 35 - Change opendir from const char *, to
const struct smb_filename * */
2016-02-26 12:54:01 +03:00
/* Version 35 - Wrap aio async funtions args in a struct vfs_aio_state */
2016-03-02 03:20:25 +03:00
/* Version 35 - Change chmod from const char *, to
const struct smb_filename * */
2016-03-02 04:25:25 +03:00
/* Version 35 - Change chmod_acl from const char *, to
const struct smb_filename * */
2016-03-03 22:54:23 +03:00
/* Version 35 - Change chown from const char *, to
const struct smb_filename * */
2016-03-04 01:34:57 +03:00
/* Version 35 - Change lchown from const char *, to
const struct smb_filename * */
2016-03-05 01:16:13 +03:00
/* Version 35 - Change streaminfo from const char *, to
const struct smb_filename * */
2016-03-18 02:20:17 +03:00
/* Version 35 - Add uint32_t flags to struct smb_filename */
2016-03-20 22:51:32 +03:00
/* Version 35 - Add get/set/fget/fset dos attribute functions. */
2016-05-12 22:03:57 +03:00
/* Version 35 - Add bool use_ofd_locks to struct files_struct */
2016-10-10 18:10:43 +03:00
/* Bump to version 36 - Samba 4.6 will ship with that */
/* Version 36 - Remove is_offline and set_offline */
2017-04-20 22:24:43 +03:00
/* Version 37 - Module init functions now take a TALLOC_CTX * parameter. */
2013-08-21 17:56:14 +04:00
2017-04-20 22:24:43 +03:00
# define SMB_VFS_INTERFACE_VERSION 37
2002-08-17 21:00:51 +04:00
/*
All intercepted VFS operations must be declared as static functions inside module source
2003-05-12 03:34:18 +04:00
in order to keep smbd namespace unpolluted . See source of audit , extd_audit , fake_perms and recycle
2002-08-17 21:00:51 +04:00
example VFS modules for more details .
*/
2000-11-07 00:44:33 +03:00
2000-02-03 07:47:50 +03:00
/* VFS operations structure */
2003-05-12 03:34:18 +04:00
struct vfs_handle_struct ;
2000-10-06 07:21:49 +04:00
struct connection_struct ;
struct files_struct ;
2006-09-21 02:23:12 +04:00
struct security_descriptor ;
2005-10-20 21:33:17 +04:00
struct vfs_statvfs_struct ;
2008-10-21 04:43:45 +04:00
struct smb_request ;
struct ea_list ;
2009-01-24 01:40:19 +03:00
struct smb_file_time ;
2009-02-10 08:51:29 +03:00
struct blocking_lock_record ;
2009-06-12 23:54:11 +04:00
struct smb_filename ;
2011-10-01 08:57:18 +04:00
struct dfs_GetDFSReferral ;
2000-10-06 07:21:49 +04:00
2012-06-05 12:10:17 +04:00
typedef union unid_t {
uid_t uid ;
gid_t gid ;
} unid_t ;
2012-06-05 12:13:45 +04:00
struct fd_handle {
size_t ref_count ;
int fd ;
uint64_t position_information ;
off_t pos ;
2015-04-14 02:56:09 +03:00
uint32_t private_options ; /* NT Create options, but we only look at
2012-06-05 12:13:45 +04:00
* NTCREATEX_OPTIONS_PRIVATE_DENY_DOS and
* NTCREATEX_OPTIONS_PRIVATE_DENY_FCB and
* NTCREATEX_OPTIONS_PRIVATE_DELETE_ON_CLOSE
* for print files * only * , where
* DELETE_ON_CLOSE is not stored in the share
* mode database .
*/
unsigned long gen_id ;
} ;
2014-10-08 20:06:06 +04:00
struct fsp_lease {
size_t ref_count ;
2014-12-03 19:57:37 +03:00
struct smbd_server_connection * sconn ;
struct tevent_timer * timeout ;
2014-10-08 20:06:06 +04:00
struct smb2_lease lease ;
} ;
2012-06-05 12:13:45 +04:00
typedef struct files_struct {
struct files_struct * next , * prev ;
2012-06-14 15:34:46 +04:00
uint64_t fnum ;
2012-07-02 16:47:45 +04:00
struct smbXsrv_open * op ;
2012-06-05 12:13:45 +04:00
struct connection_struct * conn ;
struct fd_handle * fh ;
unsigned int num_smb_operations ;
struct file_id file_id ;
uint64_t initial_allocation_size ; /* Faked up initial allocation on disk. */
2015-04-14 02:56:09 +03:00
uint16_t file_pid ;
2012-06-05 15:17:26 +04:00
uint64_t vuid ; /* SMB2 compat */
2012-06-05 12:13:45 +04:00
struct write_cache * wcp ;
struct timeval open_time ;
2015-04-14 02:56:09 +03:00
uint32_t access_mask ; /* NTCreateX access bits (FILE_READ_DATA etc.) */
uint32_t share_access ; /* NTCreateX share constants (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE). */
2012-06-05 12:13:45 +04:00
2016-05-16 02:39:09 +03:00
bool kernel_share_modes_taken ;
2012-06-05 12:13:45 +04:00
bool update_write_time_triggered ;
2013-02-18 13:18:29 +04:00
struct tevent_timer * update_write_time_event ;
2012-06-05 12:13:45 +04:00
bool update_write_time_on_close ;
struct timespec close_write_time ;
bool write_time_forced ;
int oplock_type ;
2016-03-02 23:54:58 +03:00
struct fsp_lease * lease ;
2012-06-05 12:13:45 +04:00
int sent_oplock_break ;
2013-02-18 13:18:29 +04:00
struct tevent_timer * oplock_timeout ;
2012-06-05 12:13:45 +04:00
struct lock_struct last_lock_failure ;
int current_lock_count ; /* Count the number of outstanding locks and pending locks. */
bool can_lock ;
bool can_read ;
bool can_write ;
bool modified ;
bool is_directory ;
bool aio_write_behind ;
bool initial_delete_on_close ; /* Only set at NTCreateX if file was created. */
bool delete_on_close ;
2015-11-29 17:55:43 +03:00
uint64_t posix_flags ;
2012-06-05 12:13:45 +04:00
bool is_sparse ;
2012-09-05 21:46:51 +04:00
bool backup_intent ; /* Handle was successfully opened with backup intent
and opener has privilege to do so . */
2015-04-22 23:29:16 +03:00
bool aapl_copyfile_supported ;
2016-05-12 22:03:57 +03:00
bool use_ofd_locks ; /* Are we using open file description locks ? */
2012-06-05 12:13:45 +04:00
struct smb_filename * fsp_name ;
uint32_t name_hash ; /* Jenkins hash of full pathname. */
2012-06-29 23:41:47 +04:00
uint64_t mid ; /* Mid of the operation that created us. */
2012-06-05 12:13:45 +04:00
struct vfs_fsp_data * vfs_extension ;
struct fake_file_handle * fake_file_handle ;
struct notify_change_buf * notify ;
struct files_struct * base_fsp ; /* placeholder for delete on close */
/*
* Read - only cached brlock record , thrown away when the
* brlock . tdb seqnum changes . This avoids fetching data from
* the brlock . tdb on every read / write call .
*/
int brlock_seqnum ;
struct byte_range_lock * brlock_rec ;
struct dptr_struct * dptr ;
/* if not NULL, means this is a print file */
struct print_file_data * print_file ;
2012-07-06 11:37:57 +04:00
unsigned num_aio_requests ;
struct tevent_req * * aio_requests ;
2012-07-18 00:24:51 +04:00
/*
* If a close request comes in while we still have aio_requests
* around , we need to hold back the close . When all aio_requests are
* done , the aio completion routines need tevent_wait_done ( ) on
* this . A bit ugly , but before we have close_file ( ) fully async
* possibly the simplest approach . Thanks , Jeremy for the idea .
*/
struct tevent_req * deferred_close ;
2012-06-05 12:13:45 +04:00
} files_struct ;
2015-11-27 20:29:55 +03:00
# define FSP_POSIX_FLAGS_OPEN 0x01
2015-01-22 12:00:15 +03:00
# define FSP_POSIX_FLAGS_RENAME 0x02
2015-12-13 00:31:24 +03:00
# define FSP_POSIX_FLAGS_PATHNAMES 0x04
2015-11-27 20:29:55 +03:00
# define FSP_POSIX_FLAGS_ALL \
2015-01-22 12:00:15 +03:00
( FSP_POSIX_FLAGS_OPEN | \
2015-12-13 00:31:24 +03:00
FSP_POSIX_FLAGS_PATHNAMES | \
2015-01-22 12:00:15 +03:00
FSP_POSIX_FLAGS_RENAME )
2015-11-27 20:29:55 +03:00
2012-06-05 12:28:49 +04:00
struct vuid_cache_entry {
struct auth_session_info * session_info ;
2012-06-04 16:37:45 +04:00
uint64_t vuid ; /* SMB2 compat */
2012-06-05 12:28:49 +04:00
bool read_only ;
2012-12-21 21:22:16 +04:00
uint32_t share_access ;
2012-06-05 12:28:49 +04:00
} ;
struct vuid_cache {
unsigned int next_entry ;
struct vuid_cache_entry array [ VUID_CACHE_SIZE ] ;
} ;
typedef struct {
char * name ;
bool is_wild ;
} name_compare_entry ;
struct dfree_cached_info {
time_t last_dfree_time ;
uint64_t dfree_ret ;
uint64_t bsize ;
uint64_t dfree ;
uint64_t dsize ;
} ;
struct share_params {
int service ;
} ;
typedef struct connection_struct {
struct connection_struct * next , * prev ;
struct smbd_server_connection * sconn ; /* can be NULL */
2012-07-02 16:46:32 +04:00
struct smbXsrv_tcon * tcon ; /* can be NULL */
2012-06-06 17:28:14 +04:00
uint32_t cnum ; /* an index passed over the wire */
2012-06-05 12:28:49 +04:00
struct share_params * params ;
bool force_user ;
2012-12-21 02:42:55 +04:00
struct vuid_cache * vuid_cache ;
2012-06-05 12:28:49 +04:00
bool printer ;
bool ipc ;
bool read_only ; /* Attributes for the current user of the share. */
uint32_t share_access ;
/* Does this filesystem honor
sub second timestamps on files
and directories when setting time ? */
enum timestamp_set_resolution ts_res ;
char * connectpath ;
char * origpath ;
2012-09-12 22:39:37 +04:00
char * cwd ; /* Working directory. */
2012-06-05 12:28:49 +04:00
struct vfs_handle_struct * vfs_handles ; /* for the new plugins */
/*
* This represents the user information on this connection . Depending
* on the vuid using this tid , this might change per SMB request .
*/
struct auth_session_info * session_info ;
/*
* If the " force group " parameter is set , this is the primary gid that
* may be used in the users token , depending on the vuid using this tid .
*/
gid_t force_group_gid ;
2012-06-05 15:05:43 +04:00
uint64_t vuid ; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
2012-06-05 12:28:49 +04:00
time_t lastused ;
time_t lastused_count ;
int num_files_open ;
unsigned int num_smb_operations ; /* Count of smb operations on this tree. */
int encrypt_level ;
bool encrypted_tid ;
/* Semantics requested by the client or forced by the server config. */
bool case_sensitive ;
bool case_preserve ;
bool short_case_preserve ;
/* Semantics provided by the underlying filesystem. */
int fs_capabilities ;
/* Device number of the directory of the share mount.
Used to ensure unique FileIndex returns . */
SMB_DEV_T base_share_dev ;
name_compare_entry * hide_list ; /* Per-share list of files to return as hidden. */
name_compare_entry * veto_list ; /* Per-share list of files to veto (never show). */
name_compare_entry * veto_oplock_list ; /* Per-share list of files to refuse oplocks on. */
name_compare_entry * aio_write_behind_list ; /* Per-share list of files to use aio write behind on. */
struct dfree_cached_info * dfree_info ;
struct trans_state * pending_trans ;
struct rpc_pipe_client * spoolss_pipe ;
} connection_struct ;
2012-06-05 15:39:49 +04:00
struct smbd_smb2_request ;
struct privilege_paths ;
struct smb_request {
uint8_t cmd ;
2015-04-14 02:56:09 +03:00
uint16_t flags2 ;
uint16_t smbpid ;
2012-06-05 15:39:49 +04:00
uint64_t mid ; /* For compatibility with SMB2. */
uint32_t seqnum ;
2012-06-05 16:40:57 +04:00
uint64_t vuid ; /* For compatibility with SMB2. */
2012-06-06 17:26:05 +04:00
uint32_t tid ;
2015-04-14 02:56:09 +03:00
uint8_t wct ;
2012-06-05 15:39:49 +04:00
const uint16_t * vwv ;
uint16_t buflen ;
const uint8_t * buf ;
2015-04-14 02:56:09 +03:00
const uint8_t * inbuf ;
2012-06-05 15:39:49 +04:00
/*
* Async handling in the main smb processing loop is directed by
* outbuf : reply_xxx routines indicate sync behaviour by putting their
* reply into " outbuf " . If they leave it as NULL , they take care of it
* themselves , possibly later .
*
* If async handling is wanted , the reply_xxx routine must make sure
* that it talloc_move ( ) s the smb_req somewhere else .
*/
2015-04-14 02:56:09 +03:00
uint8_t * outbuf ;
2012-06-05 15:39:49 +04:00
size_t unread_bytes ;
bool encrypted ;
connection_struct * conn ;
struct smbd_server_connection * sconn ;
2014-06-10 15:34:55 +04:00
struct smbXsrv_connection * xconn ;
2012-06-05 15:39:49 +04:00
struct smb_perfcount_data pcd ;
/*
* Chained request handling
*/
struct files_struct * chain_fsp ;
/*
* state information for async smb handling
*/
void * async_priv ;
/*
* Back pointer to smb2 request .
*/
struct smbd_smb2_request * smb2req ;
/*
* Pathnames used if request done
* under privilege .
*/
struct privilege_paths * priv_paths ;
/*
* Request list for chained requests , we ' re part of it .
*/
struct smb_request * * chain ;
2012-04-11 18:54:17 +04:00
struct timeval request_time ;
2015-12-23 00:35:10 +03:00
bool posix_pathnames ;
2012-06-05 15:39:49 +04:00
} ;
2012-06-05 12:17:57 +04:00
/*
* Info about an alternate data stream
*/
struct stream_struct {
off_t size ;
off_t alloc_size ;
char * name ;
} ;
2012-06-05 12:37:34 +04:00
/* time info */
struct smb_file_time {
struct timespec mtime ;
struct timespec atime ;
struct timespec ctime ;
struct timespec create_time ;
} ;
2012-06-05 12:38:48 +04:00
/*
* smb_filename
*/
struct smb_filename {
char * base_name ;
char * stream_name ;
char * original_lcomp ;
2016-03-18 02:20:17 +03:00
uint32_t flags ;
2012-06-05 12:38:48 +04:00
SMB_STRUCT_STAT st ;
} ;
2016-03-18 02:20:17 +03:00
/*
* smb_filename flags . Define in terms of the FSP_POSIX_FLAGS_XX
* to keep the numeric values consistent .
*/
# define SMB_FILENAME_POSIX_PATH FSP_POSIX_FLAGS_PATHNAMES
2011-12-04 08:45:04 +04:00
# define VFS_FIND(__fn__) while (handle->fns->__fn__##_fn==NULL) { \
2009-07-24 04:28:58 +04:00
handle = handle - > next ; \
}
2009-09-04 00:46:10 +04:00
enum vfs_translate_direction {
vfs_translate_to_unix = 0 ,
vfs_translate_to_windows
} ;
2015-02-09 20:21:59 +03:00
enum vfs_fallocate_flags {
VFS_FALLOCATE_FL_KEEP_SIZE = 0x0001 ,
2015-02-10 16:32:07 +03:00
VFS_FALLOCATE_FL_PUNCH_HOLE = 0x0002 ,
2010-12-18 10:08:01 +03:00
} ;
2016-02-26 12:54:01 +03:00
struct vfs_aio_state {
int error ;
2016-02-29 14:17:18 +03:00
uint64_t duration ;
2016-02-26 12:54:01 +03:00
} ;
2002-08-17 21:00:51 +04:00
/*
2003-05-12 03:34:18 +04:00
Available VFS operations . These values must be in sync with vfs_ops struct
2009-02-03 08:37:51 +03:00
( struct vfs_fn_pointers and struct vfs_handle_pointers inside of struct vfs_ops ) .
2002-08-17 21:00:51 +04:00
In particular , if new operations are added to vfs_ops , appropriate constants
should be added to vfs_op_type so that order of them kept same as in vfs_ops .
*/
2011-03-25 15:42:42 +03:00
struct shadow_copy_data ;
2002-08-17 21:00:51 +04:00
2009-07-24 04:28:58 +04:00
struct vfs_fn_pointers {
/* Disk operations */
2003-05-12 03:34:18 +04:00
2009-07-24 04:28:58 +04:00
int ( * connect_fn ) ( struct vfs_handle_struct * handle , const char * service , const char * user ) ;
2011-12-04 08:45:04 +04:00
void ( * disconnect_fn ) ( struct vfs_handle_struct * handle ) ;
2015-02-16 21:26:24 +03:00
uint64_t ( * disk_free_fn ) ( struct vfs_handle_struct * handle , const char * path , uint64_t * bsize ,
2009-07-24 04:28:58 +04:00
uint64_t * dfree , uint64_t * dsize ) ;
2016-01-10 14:29:25 +03:00
int ( * get_quota_fn ) ( struct vfs_handle_struct * handle , const char * path ,
enum SMB_QUOTA_TYPE qtype , unid_t id ,
SMB_DISK_QUOTA * qt ) ;
2011-12-04 08:45:04 +04:00
int ( * set_quota_fn ) ( struct vfs_handle_struct * handle , enum SMB_QUOTA_TYPE qtype , unid_t id , SMB_DISK_QUOTA * qt ) ;
int ( * get_shadow_copy_data_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , struct shadow_copy_data * shadow_copy_data , bool labels ) ;
int ( * statvfs_fn ) ( struct vfs_handle_struct * handle , const char * path , struct vfs_statvfs_struct * statbuf ) ;
uint32_t ( * fs_capabilities_fn ) ( struct vfs_handle_struct * handle , enum timestamp_set_resolution * p_ts_res ) ;
2008-01-17 04:22:31 +03:00
2011-10-01 08:57:18 +04:00
/*
* Note : that " struct dfs_GetDFSReferral *r "
* needs to be a valid TALLOC_CTX
*/
2011-12-04 08:45:04 +04:00
NTSTATUS ( * get_dfs_referrals_fn ) ( struct vfs_handle_struct * handle ,
struct dfs_GetDFSReferral * r ) ;
2011-10-01 08:57:18 +04:00
2009-07-24 04:28:58 +04:00
/* Directory operations */
2008-01-17 04:22:31 +03:00
2016-02-27 01:53:12 +03:00
DIR * ( * opendir_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
const char * mask ,
uint32_t attributes ) ;
2015-04-14 02:56:09 +03:00
DIR * ( * fdopendir_fn ) ( struct vfs_handle_struct * handle , files_struct * fsp , const char * mask , uint32_t attributes ) ;
2012-03-28 06:18:14 +04:00
struct dirent * ( * readdir_fn ) ( struct vfs_handle_struct * handle ,
2012-03-28 06:22:03 +04:00
DIR * dirp ,
2011-12-04 08:45:04 +04:00
SMB_STRUCT_STAT * sbuf ) ;
2012-03-28 06:22:03 +04:00
void ( * seekdir_fn ) ( struct vfs_handle_struct * handle , DIR * dirp , long offset ) ;
long ( * telldir_fn ) ( struct vfs_handle_struct * handle , DIR * dirp ) ;
void ( * rewind_dir_fn ) ( struct vfs_handle_struct * handle , DIR * dirp ) ;
2016-02-24 00:14:03 +03:00
int ( * mkdir_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
mode_t mode ) ;
2016-02-25 01:02:45 +03:00
int ( * rmdir_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ) ;
2012-03-28 06:22:03 +04:00
int ( * closedir_fn ) ( struct vfs_handle_struct * handle , DIR * dir ) ;
void ( * init_search_op_fn ) ( struct vfs_handle_struct * handle , DIR * dirp ) ;
2008-01-17 04:22:31 +03:00
2009-07-24 04:28:58 +04:00
/* File operations */
2008-01-17 04:22:31 +03:00
2011-04-21 00:55:25 +04:00
int ( * open_fn ) ( struct vfs_handle_struct * handle ,
struct smb_filename * smb_fname , files_struct * fsp ,
int flags , mode_t mode ) ;
2011-12-04 08:45:04 +04:00
NTSTATUS ( * create_file_fn ) ( struct vfs_handle_struct * handle ,
struct smb_request * req ,
uint16_t root_dir_fid ,
struct smb_filename * smb_fname ,
uint32_t access_mask ,
uint32_t share_access ,
uint32_t create_disposition ,
uint32_t create_options ,
uint32_t file_attributes ,
uint32_t oplock_request ,
2013-08-21 17:56:14 +04:00
struct smb2_lease * lease ,
2011-12-04 08:45:04 +04:00
uint64_t allocation_size ,
uint32_t private_flags ,
struct security_descriptor * sd ,
struct ea_list * ea_list ,
files_struct * * result ,
2014-11-26 16:12:51 +03:00
int * pinfo ,
const struct smb2_create_blobs * in_context_blobs ,
struct smb2_create_blobs * out_context_blobs ) ;
2009-07-24 04:28:58 +04:00
int ( * close_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp ) ;
2011-12-04 08:45:04 +04:00
ssize_t ( * read_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , void * data , size_t n ) ;
2012-04-05 08:53:08 +04:00
ssize_t ( * pread_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , void * data , size_t n , off_t offset ) ;
2012-06-26 16:30:59 +04:00
struct tevent_req * ( * pread_send_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct files_struct * fsp ,
void * data ,
size_t n , off_t offset ) ;
2016-02-26 12:54:01 +03:00
ssize_t ( * pread_recv_fn ) ( struct tevent_req * req , struct vfs_aio_state * state ) ;
2011-12-04 08:45:04 +04:00
ssize_t ( * write_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , const void * data , size_t n ) ;
2012-04-05 08:53:08 +04:00
ssize_t ( * pwrite_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , const void * data , size_t n , off_t offset ) ;
2012-06-26 16:30:59 +04:00
struct tevent_req * ( * pwrite_send_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct files_struct * fsp ,
const void * data ,
size_t n , off_t offset ) ;
2016-02-26 12:54:01 +03:00
ssize_t ( * pwrite_recv_fn ) ( struct tevent_req * req , struct vfs_aio_state * state ) ;
2012-04-05 08:53:08 +04:00
off_t ( * lseek_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , off_t offset , int whence ) ;
ssize_t ( * sendfile_fn ) ( struct vfs_handle_struct * handle , int tofd , files_struct * fromfsp , const DATA_BLOB * header , off_t offset , size_t count ) ;
ssize_t ( * recvfile_fn ) ( struct vfs_handle_struct * handle , int fromfd , files_struct * tofsp , off_t offset , size_t count ) ;
2011-12-04 08:45:04 +04:00
int ( * rename_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname_src ,
const struct smb_filename * smb_fname_dst ) ;
int ( * fsync_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp ) ;
2012-07-13 12:22:25 +04:00
struct tevent_req * ( * fsync_send_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct files_struct * fsp ) ;
2016-02-26 12:54:01 +03:00
int ( * fsync_recv_fn ) ( struct tevent_req * req , struct vfs_aio_state * state ) ;
2011-12-04 08:45:04 +04:00
int ( * stat_fn ) ( struct vfs_handle_struct * handle , struct smb_filename * smb_fname ) ;
int ( * fstat_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , SMB_STRUCT_STAT * sbuf ) ;
int ( * lstat_fn ) ( struct vfs_handle_struct * handle , struct smb_filename * smb_filename ) ;
uint64_t ( * get_alloc_size_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , const SMB_STRUCT_STAT * sbuf ) ;
int ( * unlink_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ) ;
2016-03-02 03:20:25 +03:00
int ( * chmod_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
mode_t mode ) ;
2011-12-04 08:45:04 +04:00
int ( * fchmod_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , mode_t mode ) ;
2016-03-03 22:54:23 +03:00
int ( * chown_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uid_t uid ,
gid_t gid ) ;
2011-12-04 08:45:04 +04:00
int ( * fchown_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , uid_t uid , gid_t gid ) ;
2016-03-04 01:34:57 +03:00
int ( * lchown_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uid_t uid ,
gid_t gid ) ;
2011-12-04 08:45:04 +04:00
int ( * chdir_fn ) ( struct vfs_handle_struct * handle , const char * path ) ;
char * ( * getwd_fn ) ( struct vfs_handle_struct * handle ) ;
int ( * ntimes_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
struct smb_file_time * ft ) ;
2012-04-05 08:53:08 +04:00
int ( * ftruncate_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , off_t offset ) ;
2011-12-04 08:45:04 +04:00
int ( * fallocate_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
2015-02-09 20:21:59 +03:00
uint32_t mode ,
2012-04-05 08:53:08 +04:00
off_t offset ,
off_t len ) ;
bool ( * lock_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , int op , off_t offset , off_t count , int type ) ;
2011-12-04 08:45:04 +04:00
int ( * kernel_flock_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp ,
2015-04-14 02:56:09 +03:00
uint32_t share_mode , uint32_t access_mask ) ;
2011-12-04 08:45:04 +04:00
int ( * linux_setlease_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , int leasetype ) ;
2012-04-05 08:53:08 +04:00
bool ( * getlock_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , off_t * poffset , off_t * pcount , int * ptype , pid_t * ppid ) ;
2011-12-04 08:45:04 +04:00
int ( * symlink_fn ) ( struct vfs_handle_struct * handle , const char * oldpath , const char * newpath ) ;
int ( * readlink_fn ) ( struct vfs_handle_struct * handle , const char * path , char * buf , size_t bufsiz ) ;
int ( * link_fn ) ( struct vfs_handle_struct * handle , const char * oldpath , const char * newpath ) ;
int ( * mknod_fn ) ( struct vfs_handle_struct * handle , const char * path , mode_t mode , SMB_DEV_T dev ) ;
char * ( * realpath_fn ) ( struct vfs_handle_struct * handle , const char * path ) ;
int ( * chflags_fn ) ( struct vfs_handle_struct * handle , const char * path , unsigned int flags ) ;
struct file_id ( * file_id_create_fn ) ( struct vfs_handle_struct * handle ,
const SMB_STRUCT_STAT * sbuf ) ;
2013-01-15 20:22:59 +04:00
struct tevent_req * ( * copy_chunk_send_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct files_struct * src_fsp ,
off_t src_off ,
struct files_struct * dest_fsp ,
off_t dest_off ,
off_t num ) ;
NTSTATUS ( * copy_chunk_recv_fn ) ( struct vfs_handle_struct * handle ,
struct tevent_req * req ,
off_t * copied ) ;
2013-11-18 17:54:30 +04:00
NTSTATUS ( * get_compression_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct files_struct * fsp ,
struct smb_filename * smb_fname ,
uint16_t * _compression_fmt ) ;
NTSTATUS ( * set_compression_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct files_struct * fsp ,
uint16_t compression_fmt ) ;
2012-04-10 05:16:57 +04:00
NTSTATUS ( * snap_check_path_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
const char * service_path ,
char * * base_volume ) ;
NTSTATUS ( * snap_create_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
const char * base_volume ,
time_t * tstamp ,
bool rw ,
char * * base_path ,
char * * snap_path ) ;
NTSTATUS ( * snap_delete_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
char * base_path ,
char * snap_path ) ;
2011-12-04 08:45:04 +04:00
NTSTATUS ( * streaminfo_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
2016-03-05 01:16:13 +03:00
const struct smb_filename * smb_fname ,
2011-12-04 08:45:04 +04:00
TALLOC_CTX * mem_ctx ,
unsigned int * num_streams ,
struct stream_struct * * streams ) ;
int ( * get_real_filename_fn ) ( struct vfs_handle_struct * handle ,
const char * path ,
const char * name ,
TALLOC_CTX * mem_ctx ,
char * * found_name ) ;
const char * ( * connectpath_fn ) ( struct vfs_handle_struct * handle ,
const char * filename ) ;
NTSTATUS ( * brl_lock_windows_fn ) ( struct vfs_handle_struct * handle ,
struct byte_range_lock * br_lck ,
struct lock_struct * plock ,
2014-07-03 17:51:45 +04:00
bool blocking_lock ) ;
2011-12-04 08:45:04 +04:00
bool ( * brl_unlock_windows_fn ) ( struct vfs_handle_struct * handle ,
struct messaging_context * msg_ctx ,
struct byte_range_lock * br_lck ,
const struct lock_struct * plock ) ;
bool ( * brl_cancel_windows_fn ) ( struct vfs_handle_struct * handle ,
struct byte_range_lock * br_lck ,
2014-07-03 17:51:45 +04:00
struct lock_struct * plock ) ;
2011-12-04 08:45:04 +04:00
bool ( * strict_lock_fn ) ( struct vfs_handle_struct * handle ,
2009-07-24 04:28:58 +04:00
struct files_struct * fsp ,
2011-12-04 08:45:04 +04:00
struct lock_struct * plock ) ;
2009-07-24 04:28:58 +04:00
2011-12-04 08:45:04 +04:00
void ( * strict_unlock_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
struct lock_struct * plock ) ;
2009-07-24 04:28:58 +04:00
2011-12-04 08:45:04 +04:00
NTSTATUS ( * translate_name_fn ) ( struct vfs_handle_struct * handle ,
const char * name ,
enum vfs_translate_direction direction ,
TALLOC_CTX * mem_ctx ,
char * * mapped_name ) ;
2009-07-24 04:28:58 +04:00
2011-12-04 08:45:04 +04:00
NTSTATUS ( * fsctl_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
TALLOC_CTX * ctx ,
uint32_t function ,
uint16_t req_flags ,
const uint8_t * _in_data ,
uint32_t in_len ,
uint8_t * * _out_data ,
uint32_t max_out_len ,
uint32_t * out_len ) ;
2011-09-16 22:52:22 +04:00
2016-03-20 22:51:32 +03:00
NTSTATUS ( * get_dos_attributes_fn ) ( struct vfs_handle_struct * handle ,
struct smb_filename * smb_fname ,
uint32_t * dosmode ) ;
NTSTATUS ( * fget_dos_attributes_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
uint32_t * dosmode ) ;
NTSTATUS ( * set_dos_attributes_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uint32_t dosmode ) ;
NTSTATUS ( * fset_dos_attributes_fn ) ( struct vfs_handle_struct * hande ,
struct files_struct * fsp ,
uint32_t dosmode ) ;
2009-07-24 04:28:58 +04:00
/* NT ACL operations. */
2011-12-04 08:45:04 +04:00
NTSTATUS ( * fget_nt_acl_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
2015-04-14 02:56:09 +03:00
uint32_t security_info ,
2012-10-10 04:50:27 +04:00
TALLOC_CTX * mem_ctx ,
2011-12-04 08:45:04 +04:00
struct security_descriptor * * ppdesc ) ;
NTSTATUS ( * get_nt_acl_fn ) ( struct vfs_handle_struct * handle ,
2016-02-12 21:30:10 +03:00
const struct smb_filename * smb_fname ,
2015-04-14 02:56:09 +03:00
uint32_t security_info ,
2012-10-10 04:50:27 +04:00
TALLOC_CTX * mem_ctx ,
2011-12-04 08:45:04 +04:00
struct security_descriptor * * ppdesc ) ;
NTSTATUS ( * fset_nt_acl_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
2015-04-14 02:56:09 +03:00
uint32_t security_info_sent ,
2011-12-04 08:45:04 +04:00
const struct security_descriptor * psd ) ;
2002-08-17 21:00:51 +04:00
2012-04-28 08:31:34 +04:00
NTSTATUS ( * audit_file_fn ) ( struct vfs_handle_struct * handle ,
struct smb_filename * file ,
struct security_acl * sacl ,
uint32_t access_requested ,
uint32_t access_denied ) ;
2009-07-24 04:28:58 +04:00
/* POSIX ACL operations. */
2016-03-02 04:25:25 +03:00
int ( * chmod_acl_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
mode_t mode ) ;
2011-12-04 08:45:04 +04:00
int ( * fchmod_acl_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , mode_t mode ) ;
2012-10-10 03:18:32 +04:00
SMB_ACL_T ( * sys_acl_get_file_fn ) ( struct vfs_handle_struct * handle ,
const char * path_p ,
SMB_ACL_TYPE_T type ,
TALLOC_CTX * mem_ctx ) ;
SMB_ACL_T ( * sys_acl_get_fd_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
TALLOC_CTX * mem_ctx ) ;
2012-10-10 09:44:41 +04:00
int ( * sys_acl_blob_get_file_fn ) ( struct vfs_handle_struct * handle ,
const char * path_p ,
TALLOC_CTX * mem_ctx ,
char * * blob_description ,
2012-09-10 06:44:01 +04:00
DATA_BLOB * blob ) ;
2012-10-10 09:44:41 +04:00
int ( * sys_acl_blob_get_fd_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp ,
2012-09-10 06:44:01 +04:00
TALLOC_CTX * mem_ctx , char * * blob_description ,
DATA_BLOB * blob ) ;
2011-12-04 08:45:04 +04:00
int ( * sys_acl_set_file_fn ) ( struct vfs_handle_struct * handle , const char * name , SMB_ACL_TYPE_T acltype , SMB_ACL_T theacl ) ;
int ( * sys_acl_set_fd_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , SMB_ACL_T theacl ) ;
int ( * sys_acl_delete_def_file_fn ) ( struct vfs_handle_struct * handle , const char * path ) ;
2009-07-24 04:28:58 +04:00
/* EA operations. */
2011-12-04 08:45:04 +04:00
ssize_t ( * getxattr_fn ) ( struct vfs_handle_struct * handle , const char * path , const char * name , void * value , size_t size ) ;
ssize_t ( * fgetxattr_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , const char * name , void * value , size_t size ) ;
ssize_t ( * listxattr_fn ) ( struct vfs_handle_struct * handle , const char * path , char * list , size_t size ) ;
ssize_t ( * flistxattr_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , char * list , size_t size ) ;
int ( * removexattr_fn ) ( struct vfs_handle_struct * handle , const char * path , const char * name ) ;
int ( * fremovexattr_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , const char * name ) ;
int ( * setxattr_fn ) ( struct vfs_handle_struct * handle , const char * path , const char * name , const void * value , size_t size , int flags ) ;
int ( * fsetxattr_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , const char * name , const void * value , size_t size , int flags ) ;
2009-07-24 04:28:58 +04:00
/* aio operations */
2011-12-04 08:45:04 +04:00
bool ( * aio_force_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp ) ;
2009-07-24 04:28:58 +04:00
2012-09-04 20:04:11 +04:00
/* durable handle operations */
NTSTATUS ( * durable_cookie_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
TALLOC_CTX * mem_ctx ,
DATA_BLOB * cookie ) ;
NTSTATUS ( * durable_disconnect_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
const DATA_BLOB old_cookie ,
TALLOC_CTX * mem_ctx ,
DATA_BLOB * new_cookie ) ;
NTSTATUS ( * durable_reconnect_fn ) ( struct vfs_handle_struct * handle ,
struct smb_request * smb1req ,
struct smbXsrv_open * op ,
const DATA_BLOB old_cookie ,
TALLOC_CTX * mem_ctx ,
struct files_struct * * fsp ,
DATA_BLOB * new_cookie ) ;
2014-11-26 16:30:37 +03:00
NTSTATUS ( * readdir_attr_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * fname ,
TALLOC_CTX * mem_ctx ,
struct readdir_attr_data * * attr_data ) ;
2009-07-24 04:28:58 +04:00
} ;
2002-08-17 21:00:51 +04:00
/*
2003-05-12 03:34:18 +04:00
VFS operation description . Each VFS module registers an array of vfs_op_tuple to VFS subsystem ,
2008-01-17 04:22:31 +03:00
which describes all operations this module is willing to intercept .
2003-05-12 03:34:18 +04:00
VFS subsystem initializes then the conn - > vfs_ops and conn - > vfs_opaque_ops structs
using this information .
2002-08-17 21:00:51 +04:00
*/
2003-05-12 03:34:18 +04:00
typedef struct vfs_handle_struct {
struct vfs_handle_struct * next , * prev ;
const char * param ;
struct connection_struct * conn ;
2009-07-24 04:28:58 +04:00
const struct vfs_fn_pointers * fns ;
2003-05-12 03:34:18 +04:00
void * data ;
void ( * free_data ) ( void * * data ) ;
} vfs_handle_struct ;
2005-10-20 21:33:17 +04:00
typedef struct vfs_statvfs_struct {
/* For undefined recommended transfer size return -1 in that field */
2015-04-14 02:56:09 +03:00
uint32_t OptimalTransferSize ; /* bsize on some os, iosize on other os */
uint32_t BlockSize ;
2005-10-20 21:33:17 +04:00
/*
The next three fields are in terms of the block size .
( above ) . If block size is unknown , 4096 would be a
2008-01-17 04:22:31 +03:00
reasonable block size for a server to report .
2005-10-20 21:33:17 +04:00
Note that returning the blocks / blocksavail removes need
to make a second call ( to QFSInfo level 0x103 to get this info .
UserBlockAvail is typically less than or equal to BlocksAvail ,
if no distinction is made return the same value in each .
*/
2008-10-14 03:59:36 +04:00
uint64_t TotalBlocks ;
uint64_t BlocksAvail ; /* bfree */
uint64_t UserBlocksAvail ; /* bavail */
2005-10-20 21:33:17 +04:00
/* For undefined Node fields or FSID return -1 */
2008-10-14 03:59:36 +04:00
uint64_t TotalFileNodes ;
uint64_t FreeFileNodes ;
uint64_t FsIdentifier ; /* fsid */
2005-10-20 21:33:17 +04:00
/* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */
/* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */
2007-10-16 01:03:40 +04:00
int FsCapabilities ;
2005-10-20 21:33:17 +04:00
} vfs_statvfs_struct ;
2007-10-16 01:01:12 +04:00
/* Add a new FSP extension of the given type. Returns a pointer to the
* extenstion data .
*/
2009-02-01 07:51:04 +03:00
# define VFS_ADD_FSP_EXTENSION(handle, fsp, type, destroy_fn) \
vfs_add_fsp_extension_notype ( handle , ( fsp ) , sizeof ( type ) , ( destroy_fn ) )
2006-07-11 22:01:26 +04:00
2007-10-16 01:01:12 +04:00
/* Return a pointer to the existing FSP extension data. */
2006-07-11 22:01:26 +04:00
# define VFS_FETCH_FSP_EXTENSION(handle, fsp) \
vfs_fetch_fsp_extension ( handle , ( fsp ) )
2007-10-16 01:01:12 +04:00
/* Return the talloc context associated with an FSP extension. */
# define VFS_MEMCTX_FSP_EXTENSION(handle, fsp) \
vfs_memctx_fsp_extension ( handle , ( fsp ) )
/* Remove and destroy an FSP extension. */
2006-07-11 22:01:26 +04:00
# define VFS_REMOVE_FSP_EXTENSION(handle, fsp) \
vfs_remove_fsp_extension ( ( handle ) , ( fsp ) )
2005-10-20 21:33:17 +04:00
2003-05-14 14:59:01 +04:00
# define SMB_VFS_HANDLE_GET_DATA(handle, datap, type, ret) { \
2003-05-12 03:34:18 +04:00
if ( ! ( handle ) | | ( ( datap = ( type * ) ( handle ) - > data ) = = NULL ) ) { \
2011-02-28 16:46:30 +03:00
DEBUG ( 0 , ( " %s() failed to get vfs_handle->data! \n " , __FUNCTION__ ) ) ; \
2003-05-12 03:34:18 +04:00
ret ; \
} \
}
2003-05-14 14:59:01 +04:00
# define SMB_VFS_HANDLE_SET_DATA(handle, datap, free_fn, type, ret) { \
2003-05-12 03:34:18 +04:00
if ( ! ( handle ) ) { \
2011-02-28 16:46:30 +03:00
DEBUG ( 0 , ( " %s() failed to set handle->data! \n " , __FUNCTION__ ) ) ; \
2003-05-12 03:34:18 +04:00
ret ; \
} else { \
if ( ( handle ) - > free_data ) { \
( handle ) - > free_data ( & ( handle ) - > data ) ; \
} \
( handle ) - > data = ( void * ) datap ; \
( handle ) - > free_data = free_fn ; \
} \
}
2003-05-14 14:59:01 +04:00
# define SMB_VFS_HANDLE_FREE_DATA(handle) { \
2003-05-12 03:34:18 +04:00
if ( ( handle ) & & ( handle ) - > free_data ) { \
( handle ) - > free_data ( & ( handle ) - > data ) ; \
} \
}
2003-07-24 18:23:54 +04:00
/* Check whether module-specific data handle was already allocated or not */
# define SMB_VFS_HANDLE_TEST_DATA(handle) ( !(handle) || !(handle)->data ? False : True )
2003-05-14 14:59:01 +04:00
# define SMB_VFS_OP(x) ((void *) x)
2003-05-12 03:34:18 +04:00
2006-07-11 22:01:26 +04:00
# define DEFAULT_VFS_MODULE_NAME " / [Default VFS] / "
2003-05-12 03:34:18 +04:00
# include "vfs_macros.h"
2002-08-17 21:00:51 +04:00
2009-07-24 04:28:58 +04:00
int smb_vfs_call_connect ( struct vfs_handle_struct * handle ,
const char * service , const char * user ) ;
void smb_vfs_call_disconnect ( struct vfs_handle_struct * handle ) ;
uint64_t smb_vfs_call_disk_free ( struct vfs_handle_struct * handle ,
2015-02-16 21:26:24 +03:00
const char * path , uint64_t * bsize ,
uint64_t * dfree , uint64_t * dsize ) ;
2016-01-10 14:29:25 +03:00
int smb_vfs_call_get_quota ( struct vfs_handle_struct * handle , const char * path ,
2009-07-24 04:28:58 +04:00
enum SMB_QUOTA_TYPE qtype , unid_t id ,
SMB_DISK_QUOTA * qt ) ;
int smb_vfs_call_set_quota ( struct vfs_handle_struct * handle ,
enum SMB_QUOTA_TYPE qtype , unid_t id ,
SMB_DISK_QUOTA * qt ) ;
int smb_vfs_call_get_shadow_copy_data ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
2011-03-25 15:42:42 +03:00
struct shadow_copy_data * shadow_copy_data ,
2009-07-24 04:28:58 +04:00
bool labels ) ;
int smb_vfs_call_statvfs ( struct vfs_handle_struct * handle , const char * path ,
struct vfs_statvfs_struct * statbuf ) ;
2009-08-25 07:57:37 +04:00
uint32_t smb_vfs_call_fs_capabilities ( struct vfs_handle_struct * handle ,
2011-12-04 08:45:04 +04:00
enum timestamp_set_resolution * p_ts_res ) ;
2011-10-01 08:57:18 +04:00
/*
* Note : that " struct dfs_GetDFSReferral *r " needs to be a valid TALLOC_CTX
*/
NTSTATUS smb_vfs_call_get_dfs_referrals ( struct vfs_handle_struct * handle ,
struct dfs_GetDFSReferral * r ) ;
2012-03-28 06:22:03 +04:00
DIR * smb_vfs_call_opendir ( struct vfs_handle_struct * handle ,
2016-02-27 01:53:12 +03:00
const struct smb_filename * smb_fname ,
const char * mask ,
uint32_t attributes ) ;
2012-03-28 06:22:03 +04:00
DIR * smb_vfs_call_fdopendir ( struct vfs_handle_struct * handle ,
2011-02-09 02:07:48 +03:00
struct files_struct * fsp ,
const char * mask ,
2015-04-14 02:56:09 +03:00
uint32_t attributes ) ;
2012-03-28 06:18:14 +04:00
struct dirent * smb_vfs_call_readdir ( struct vfs_handle_struct * handle ,
2012-03-28 06:22:03 +04:00
DIR * dirp ,
2009-07-24 04:28:58 +04:00
SMB_STRUCT_STAT * sbuf ) ;
void smb_vfs_call_seekdir ( struct vfs_handle_struct * handle ,
2012-03-28 06:22:03 +04:00
DIR * dirp , long offset ) ;
2009-07-24 04:28:58 +04:00
long smb_vfs_call_telldir ( struct vfs_handle_struct * handle ,
2012-03-28 06:22:03 +04:00
DIR * dirp ) ;
2009-07-24 04:28:58 +04:00
void smb_vfs_call_rewind_dir ( struct vfs_handle_struct * handle ,
2012-03-28 06:22:03 +04:00
DIR * dirp ) ;
2016-02-24 00:14:03 +03:00
int smb_vfs_call_mkdir ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
mode_t mode ) ;
2016-02-25 01:02:45 +03:00
int smb_vfs_call_rmdir ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_closedir ( struct vfs_handle_struct * handle ,
2012-03-28 06:22:03 +04:00
DIR * dir ) ;
2009-07-24 04:28:58 +04:00
void smb_vfs_call_init_search_op ( struct vfs_handle_struct * handle ,
2012-03-28 06:22:03 +04:00
DIR * dirp ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_open ( struct vfs_handle_struct * handle ,
struct smb_filename * smb_fname , struct files_struct * fsp ,
int flags , mode_t mode ) ;
NTSTATUS smb_vfs_call_create_file ( struct vfs_handle_struct * handle ,
struct smb_request * req ,
uint16_t root_dir_fid ,
struct smb_filename * smb_fname ,
uint32_t access_mask ,
uint32_t share_access ,
uint32_t create_disposition ,
uint32_t create_options ,
uint32_t file_attributes ,
uint32_t oplock_request ,
2013-08-21 17:56:14 +04:00
struct smb2_lease * lease ,
2009-07-24 04:28:58 +04:00
uint64_t allocation_size ,
2010-03-06 02:10:30 +03:00
uint32_t private_flags ,
2009-07-24 04:28:58 +04:00
struct security_descriptor * sd ,
struct ea_list * ea_list ,
files_struct * * result ,
2014-11-26 16:12:51 +03:00
int * pinfo ,
const struct smb2_create_blobs * in_context_blobs ,
struct smb2_create_blobs * out_context_blobs ) ;
2011-12-04 08:45:04 +04:00
int smb_vfs_call_close ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ) ;
ssize_t smb_vfs_call_read ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , void * data , size_t n ) ;
2009-07-24 04:28:58 +04:00
ssize_t smb_vfs_call_pread ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , void * data , size_t n ,
2012-04-05 08:53:08 +04:00
off_t offset ) ;
2012-06-26 16:30:59 +04:00
struct tevent_req * smb_vfs_call_pread_send ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct files_struct * fsp ,
void * data ,
size_t n , off_t offset ) ;
2016-02-26 12:54:01 +03:00
ssize_t SMB_VFS_PREAD_RECV ( struct tevent_req * req , struct vfs_aio_state * state ) ;
2012-06-26 16:30:59 +04:00
2009-07-24 04:28:58 +04:00
ssize_t smb_vfs_call_write ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , const void * data ,
size_t n ) ;
ssize_t smb_vfs_call_pwrite ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , const void * data ,
2012-04-05 08:53:08 +04:00
size_t n , off_t offset ) ;
2012-06-26 16:30:59 +04:00
struct tevent_req * smb_vfs_call_pwrite_send ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct files_struct * fsp ,
const void * data ,
size_t n , off_t offset ) ;
2016-02-26 12:54:01 +03:00
ssize_t SMB_VFS_PWRITE_RECV ( struct tevent_req * req , struct vfs_aio_state * state ) ;
2012-06-26 16:30:59 +04:00
2012-04-05 08:53:08 +04:00
off_t smb_vfs_call_lseek ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , off_t offset ,
2009-07-24 04:28:58 +04:00
int whence ) ;
ssize_t smb_vfs_call_sendfile ( struct vfs_handle_struct * handle , int tofd ,
files_struct * fromfsp , const DATA_BLOB * header ,
2012-04-05 08:53:08 +04:00
off_t offset , size_t count ) ;
2009-07-24 04:28:58 +04:00
ssize_t smb_vfs_call_recvfile ( struct vfs_handle_struct * handle , int fromfd ,
2012-04-05 08:53:08 +04:00
files_struct * tofsp , off_t offset ,
2009-07-24 04:28:58 +04:00
size_t count ) ;
int smb_vfs_call_rename ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname_src ,
const struct smb_filename * smb_fname_dst ) ;
int smb_vfs_call_fsync ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ) ;
2012-07-13 12:22:25 +04:00
struct tevent_req * smb_vfs_call_fsync_send ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct files_struct * fsp ) ;
2016-02-26 12:54:01 +03:00
int SMB_VFS_FSYNC_RECV ( struct tevent_req * req , struct vfs_aio_state * state ) ;
2012-07-13 12:22:25 +04:00
2009-07-24 04:28:58 +04:00
int smb_vfs_call_stat ( struct vfs_handle_struct * handle ,
struct smb_filename * smb_fname ) ;
int smb_vfs_call_fstat ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , SMB_STRUCT_STAT * sbuf ) ;
int smb_vfs_call_lstat ( struct vfs_handle_struct * handle ,
struct smb_filename * smb_filename ) ;
uint64_t smb_vfs_call_get_alloc_size ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
const SMB_STRUCT_STAT * sbuf ) ;
int smb_vfs_call_unlink ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ) ;
2016-03-02 03:20:25 +03:00
int smb_vfs_call_chmod ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
mode_t mode ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_fchmod ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , mode_t mode ) ;
2016-03-03 22:54:23 +03:00
int smb_vfs_call_chown ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uid_t uid ,
gid_t gid ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_fchown ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , uid_t uid , gid_t gid ) ;
2016-03-04 01:34:57 +03:00
int smb_vfs_call_lchown ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uid_t uid ,
gid_t gid ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_chdir ( struct vfs_handle_struct * handle , const char * path ) ;
2011-06-01 03:36:06 +04:00
char * smb_vfs_call_getwd ( struct vfs_handle_struct * handle ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_ntimes ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
struct smb_file_time * ft ) ;
int smb_vfs_call_ftruncate ( struct vfs_handle_struct * handle ,
2012-04-05 08:53:08 +04:00
struct files_struct * fsp , off_t offset ) ;
2010-12-18 10:08:01 +03:00
int smb_vfs_call_fallocate ( struct vfs_handle_struct * handle ,
2015-02-09 20:21:59 +03:00
struct files_struct * fsp ,
uint32_t mode ,
off_t offset ,
off_t len ) ;
2009-07-24 04:28:58 +04:00
bool smb_vfs_call_lock ( struct vfs_handle_struct * handle ,
2012-04-05 08:53:08 +04:00
struct files_struct * fsp , int op , off_t offset ,
off_t count , int type ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_kernel_flock ( struct vfs_handle_struct * handle ,
2015-04-14 02:56:09 +03:00
struct files_struct * fsp , uint32_t share_mode ,
2009-10-06 19:14:56 +04:00
uint32_t access_mask ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_linux_setlease ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , int leasetype ) ;
bool smb_vfs_call_getlock ( struct vfs_handle_struct * handle ,
2012-04-05 08:53:08 +04:00
struct files_struct * fsp , off_t * poffset ,
off_t * pcount , int * ptype , pid_t * ppid ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_symlink ( struct vfs_handle_struct * handle , const char * oldpath ,
const char * newpath ) ;
2011-12-04 08:45:04 +04:00
int smb_vfs_call_readlink ( struct vfs_handle_struct * handle ,
const char * path , char * buf , size_t bufsiz ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_link ( struct vfs_handle_struct * handle , const char * oldpath ,
const char * newpath ) ;
int smb_vfs_call_mknod ( struct vfs_handle_struct * handle , const char * path ,
mode_t mode , SMB_DEV_T dev ) ;
2010-11-20 03:29:26 +03:00
char * smb_vfs_call_realpath ( struct vfs_handle_struct * handle , const char * path ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_chflags ( struct vfs_handle_struct * handle , const char * path ,
unsigned int flags ) ;
struct file_id smb_vfs_call_file_id_create ( struct vfs_handle_struct * handle ,
const SMB_STRUCT_STAT * sbuf ) ;
NTSTATUS smb_vfs_call_streaminfo ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
2016-03-05 01:16:13 +03:00
const struct smb_filename * smb_fname ,
2009-07-24 04:28:58 +04:00
TALLOC_CTX * mem_ctx ,
unsigned int * num_streams ,
struct stream_struct * * streams ) ;
int smb_vfs_call_get_real_filename ( struct vfs_handle_struct * handle ,
const char * path , const char * name ,
TALLOC_CTX * mem_ctx , char * * found_name ) ;
const char * smb_vfs_call_connectpath ( struct vfs_handle_struct * handle ,
const char * filename ) ;
NTSTATUS smb_vfs_call_brl_lock_windows ( struct vfs_handle_struct * handle ,
struct byte_range_lock * br_lck ,
struct lock_struct * plock ,
2014-07-03 17:51:45 +04:00
bool blocking_lock ) ;
2009-07-24 04:28:58 +04:00
bool smb_vfs_call_brl_unlock_windows ( struct vfs_handle_struct * handle ,
struct messaging_context * msg_ctx ,
struct byte_range_lock * br_lck ,
const struct lock_struct * plock ) ;
bool smb_vfs_call_brl_cancel_windows ( struct vfs_handle_struct * handle ,
struct byte_range_lock * br_lck ,
2014-07-03 17:51:45 +04:00
struct lock_struct * plock ) ;
2009-07-24 04:28:58 +04:00
bool smb_vfs_call_strict_lock ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
struct lock_struct * plock ) ;
void smb_vfs_call_strict_unlock ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
struct lock_struct * plock ) ;
2009-08-27 01:56:09 +04:00
NTSTATUS smb_vfs_call_translate_name ( struct vfs_handle_struct * handle ,
2009-11-16 11:49:23 +03:00
const char * name ,
enum vfs_translate_direction direction ,
TALLOC_CTX * mem_ctx ,
char * * mapped_name ) ;
2011-09-16 22:52:22 +04:00
NTSTATUS smb_vfs_call_fsctl ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
TALLOC_CTX * ctx ,
uint32_t function ,
uint16_t req_flags ,
const uint8_t * _in_data ,
uint32_t in_len ,
uint8_t * * _out_data ,
uint32_t max_out_len ,
2013-01-15 20:22:59 +04:00
uint32_t * out_len ) ;
2016-03-20 22:51:32 +03:00
NTSTATUS smb_vfs_call_get_dos_attributes ( struct vfs_handle_struct * handle ,
struct smb_filename * smb_fname ,
uint32_t * dosmode ) ;
NTSTATUS smb_vfs_call_fget_dos_attributes ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
uint32_t * dosmode ) ;
NTSTATUS smb_vfs_call_set_dos_attributes ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uint32_t dosmode ) ;
NTSTATUS smb_vfs_call_fset_dos_attributes ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
uint32_t dosmode ) ;
2013-01-15 20:22:59 +04:00
struct tevent_req * smb_vfs_call_copy_chunk_send ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct files_struct * src_fsp ,
off_t src_off ,
struct files_struct * dest_fsp ,
off_t dest_off ,
off_t num ) ;
NTSTATUS smb_vfs_call_copy_chunk_recv ( struct vfs_handle_struct * handle ,
struct tevent_req * req ,
off_t * copied ) ;
2013-11-18 17:54:30 +04:00
NTSTATUS smb_vfs_call_get_compression ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct files_struct * fsp ,
struct smb_filename * smb_fname ,
uint16_t * _compression_fmt ) ;
NTSTATUS smb_vfs_call_set_compression ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct files_struct * fsp ,
uint16_t compression_fmt ) ;
2012-04-10 05:16:57 +04:00
NTSTATUS smb_vfs_call_snap_check_path ( vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
const char * service_path ,
char * * base_volume ) ;
NTSTATUS smb_vfs_call_snap_create ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
const char * base_volume ,
time_t * tstamp ,
bool rw ,
char * * base_path ,
char * * snap_path ) ;
NTSTATUS smb_vfs_call_snap_delete ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
char * base_path ,
char * snap_path ) ;
2009-07-24 04:28:58 +04:00
NTSTATUS smb_vfs_call_fget_nt_acl ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
2015-04-14 02:56:09 +03:00
uint32_t security_info ,
2012-10-10 04:50:27 +04:00
TALLOC_CTX * mem_ctx ,
2009-07-24 04:28:58 +04:00
struct security_descriptor * * ppdesc ) ;
NTSTATUS smb_vfs_call_get_nt_acl ( struct vfs_handle_struct * handle ,
2016-02-12 21:30:10 +03:00
const struct smb_filename * smb_fname ,
2015-04-14 02:56:09 +03:00
uint32_t security_info ,
2012-10-10 04:50:27 +04:00
TALLOC_CTX * mem_ctx ,
2009-07-24 04:28:58 +04:00
struct security_descriptor * * ppdesc ) ;
NTSTATUS smb_vfs_call_fset_nt_acl ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
2015-04-14 02:56:09 +03:00
uint32_t security_info_sent ,
2009-07-24 04:28:58 +04:00
const struct security_descriptor * psd ) ;
2012-05-03 20:32:06 +04:00
NTSTATUS smb_vfs_call_audit_file ( struct vfs_handle_struct * handle ,
struct smb_filename * file ,
struct security_acl * sacl ,
uint32_t access_requested ,
uint32_t access_denied ) ;
2016-03-02 04:25:25 +03:00
int smb_vfs_call_chmod_acl ( struct vfs_handle_struct * handle ,
const struct smb_filename * file ,
mode_t mode ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_fchmod_acl ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , mode_t mode ) ;
SMB_ACL_T smb_vfs_call_sys_acl_get_file ( struct vfs_handle_struct * handle ,
const char * path_p ,
2012-10-10 03:18:32 +04:00
SMB_ACL_TYPE_T type ,
TALLOC_CTX * mem_ctx ) ;
2009-07-24 04:28:58 +04:00
SMB_ACL_T smb_vfs_call_sys_acl_get_fd ( struct vfs_handle_struct * handle ,
2012-10-10 03:18:32 +04:00
struct files_struct * fsp ,
TALLOC_CTX * mem_ctx ) ;
2012-09-10 06:44:01 +04:00
int smb_vfs_call_sys_acl_blob_get_file ( struct vfs_handle_struct * handle ,
const char * path_p ,
TALLOC_CTX * mem_ctx ,
char * * blob_description ,
DATA_BLOB * blob ) ;
int smb_vfs_call_sys_acl_blob_get_fd ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
TALLOC_CTX * mem_ctx ,
char * * blob_description ,
DATA_BLOB * blob ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_sys_acl_set_file ( struct vfs_handle_struct * handle ,
const char * name , SMB_ACL_TYPE_T acltype ,
SMB_ACL_T theacl ) ;
int smb_vfs_call_sys_acl_set_fd ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , SMB_ACL_T theacl ) ;
int smb_vfs_call_sys_acl_delete_def_file ( struct vfs_handle_struct * handle ,
const char * path ) ;
ssize_t smb_vfs_call_getxattr ( struct vfs_handle_struct * handle ,
const char * path , const char * name , void * value ,
size_t size ) ;
ssize_t smb_vfs_call_fgetxattr ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , const char * name ,
void * value , size_t size ) ;
ssize_t smb_vfs_call_listxattr ( struct vfs_handle_struct * handle ,
const char * path , char * list , size_t size ) ;
ssize_t smb_vfs_call_llistxattr ( struct vfs_handle_struct * handle ,
const char * path , char * list , size_t size ) ;
ssize_t smb_vfs_call_flistxattr ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , char * list ,
size_t size ) ;
int smb_vfs_call_removexattr ( struct vfs_handle_struct * handle ,
const char * path , const char * name ) ;
int smb_vfs_call_fremovexattr ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , const char * name ) ;
int smb_vfs_call_setxattr ( struct vfs_handle_struct * handle , const char * path ,
const char * name , const void * value , size_t size ,
int flags ) ;
int smb_vfs_call_lsetxattr ( struct vfs_handle_struct * handle , const char * path ,
const char * name , const void * value , size_t size ,
int flags ) ;
int smb_vfs_call_fsetxattr ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , const char * name ,
const void * value , size_t size , int flags ) ;
bool smb_vfs_call_aio_force ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ) ;
bool smb_vfs_call_is_offline ( struct vfs_handle_struct * handle ,
2011-02-25 16:37:34 +03:00
const struct smb_filename * fname ,
SMB_STRUCT_STAT * sbuf ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_set_offline ( struct vfs_handle_struct * handle ,
2011-02-25 16:43:52 +03:00
const struct smb_filename * fname ) ;
2012-09-04 20:04:11 +04:00
NTSTATUS smb_vfs_call_durable_cookie ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
TALLOC_CTX * mem_ctx ,
DATA_BLOB * cookie ) ;
NTSTATUS smb_vfs_call_durable_disconnect ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
const DATA_BLOB old_cookie ,
TALLOC_CTX * mem_ctx ,
DATA_BLOB * new_cookie ) ;
NTSTATUS smb_vfs_call_durable_reconnect ( struct vfs_handle_struct * handle ,
struct smb_request * smb1req ,
struct smbXsrv_open * op ,
const DATA_BLOB old_cookie ,
TALLOC_CTX * mem_ctx ,
struct files_struct * * fsp ,
DATA_BLOB * new_cookie ) ;
2014-11-26 16:30:37 +03:00
NTSTATUS smb_vfs_call_readdir_attr ( struct vfs_handle_struct * handle ,
const struct smb_filename * fname ,
TALLOC_CTX * mem_ctx ,
struct readdir_attr_data * * attr_data ) ;
2009-07-24 04:28:58 +04:00
2012-06-05 13:50:53 +04:00
NTSTATUS smb_register_vfs ( int version , const char * name ,
const struct vfs_fn_pointers * fns ) ;
void * vfs_add_fsp_extension_notype ( vfs_handle_struct * handle ,
files_struct * fsp , size_t ext_size ,
void ( * destroy_fn ) ( void * p_data ) ) ;
void vfs_remove_fsp_extension ( vfs_handle_struct * handle , files_struct * fsp ) ;
void vfs_remove_all_fsp_extensions ( struct files_struct * fsp ) ;
void * vfs_memctx_fsp_extension ( vfs_handle_struct * handle , files_struct * fsp ) ;
void * vfs_fetch_fsp_extension ( vfs_handle_struct * handle , files_struct * fsp ) ;
2016-04-01 19:47:31 +03:00
void smb_vfs_assert_all_fns ( const struct vfs_fn_pointers * fns ,
const char * module ) ;
2000-02-03 07:47:50 +03:00
# endif /* _VFS_H */