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
*/
2020-05-04 11:56:21 +03:00
/*
* Changed to version 2 for CIFS UNIX extensions ( mknod and link added ) . JRA .
* Changed to version 3 for POSIX acl extensions . JRA .
* Changed to version 4 for cascaded VFS interface . Alexander Bokovoy .
* Changed to version 5 for sendfile addition . JRA .
* Changed to version 6 for the new module system , fixed cascading and quota functions . - - metze
* Changed to version 7 to include the get_nt_acl info parameter . JRA .
* Changed to version 8 includes EA calls . JRA .
* Changed to version 9 to include the get_shadow_data call . - - metze
* Changed to version 10 to include pread pwrite calls .
* Changed to version 11 to include seekdir telldir rewinddir calls . JRA
* Changed to version 12 to add mask and attributes to opendir ( ) . JRA
* Also include aio calls . JRA .
* Changed to version 13 as the internal structure of files_struct has changed . JRA
* 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
* Changed to version 17 as we removed redundant connection_struct parameters . - - jpeach
* Changed to version 18 to add fsp parameter to the open call - - jpeach
* Also include kernel_flock call - jmcd
* Changed to version 19 , kernel change notify has been merged
* Also included linux setlease call - jmcd
* Changed to version 20 , use ntimes call instead of utime ( greater
* timestamp resolition . JRA .
* Changed to version21 to add chflags operation - - jpeach
* Changed to version22 to add lchown operation - - jra
* Leave at 22 - not yet released . But change set_nt_acl to return an NTSTATUS . jra .
* Leave at 22 - not yet released . Add file_id_create operation . - - metze
* Leave at 22 - not yet released . Change all BOOL parameters ( int ) to bool . jra .
* Leave at 22 - not yet released . Added recvfile .
* Leave at 22 - not yet released . Change get_nt_acl to return NTSTATUS - vl
* Leave at 22 - not yet released . Change get_nt_acl to * not * take a
* files_struct . - obnox .
* Leave at 22 - not yet released . Remove parameter fd from fget_nt_acl . - obnox
* Leave at 22 - not yet released . Remove parameter fd from gset_nt_acl . - obnox
* Leave at 22 - not yet released . Remove parameter fd from pread . - obnox
* Leave at 22 - not yet released . Remove parameter fd from pwrite . - obnox
* Leave at 22 - not yet released . Remove parameter fd from lseek . - obnox
* Leave at 22 - not yet released . Remove parameter fd from fsync . - obnox
* Leave at 22 - not yet released . Remove parameter fd from fstat . - obnox
* Leave at 22 - not yet released . Remove parameter fd from fchmod . - obnox
* Leave at 22 - not yet released . Remove parameter fd from fchown . - obnox
* Leave at 22 - not yet released . Remove parameter fd from ftruncate . - obnox
* Leave at 22 - not yet released . Remove parameter fd from lock . - obnox
* Leave at 22 - not yet released . Remove parameter fd from kernel_flock . - obnox
* 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
* Leave at 22 - not yet released . Remove parameter fd from sys_acl_get_fd . - obnox
* Leave at 22 - not yet released . Remove parameter fd from fchmod_acl . - obnox
* Leave at 22 - not yet released . Remove parameter fd from sys_acl_set_fd . - obnox
* Leave at 22 - not yet released . Remove parameter fd from fgetxattr . - obnox
* Leave at 22 - not yet released . Remove parameter fd from flistxattr . - obnox
* Leave at 22 - not yet released . Remove parameter fd from fremovexattr . - obnox
* Leave at 22 - not yet released . Remove parameter fd from fsetxattr . - obnox
* Leave at 22 - not yet released . Remove parameter fd from aio_cancel . - obnox
* Leave at 22 - not yet released . Remove parameter fd from read . - obnox
* Leave at 22 - not yet released . Remove parameter fd from write . - obnox
* Leave at 22 - not yet released . Remove parameter fromfd from sendfile . - obnox
* Leave at 22 - not yet released . Remove parameter fromfd from recvfile . - obnox
* Leave at 22 - not yet released . Additional change : add operations for offline files - - ab
* Leave at 22 - not yet released . Add the streaminfo call . - - jpeach , vl
* Leave at 22 - not yet released . Remove parameter fd from close_fn . - obnox
* Changed to version 23 - remove set_nt_acl call . This can only be done via an
* open handle . JRA .
* Changed to version 24 - make security descriptor const in fset_nt_acl . JRA .
* Changed to version 25 - Jelmer ' s change from SMB_BIG_UINT to uint64_t .
* Leave at 25 - not yet released . Add create_file call . - - tprouty .
* Leave at 25 - not yet released . Add create time to ntimes . - - tstecher .
* Leave at 25 - not yet released . Add get_alloc_size call . - - tprouty .
* Leave at 25 - not yet released . Add SMB_STRUCT_STAT to readdir . - sdann
* Leave at 25 - not yet released . Add init_search_op call . - sdann
* Leave at 25 - not yet released . Add locking calls . - - zkirsch .
* Leave at 25 - not yet released . Add strict locking calls . - - drichards .
* Changed to version 26 - Plumb struct smb_filename to SMB_VFS_CREATE_FILE ,
* SMB_VFS_OPEN , SMB_VFS_STAT , SMB_VFS_LSTAT ,
* SMB_VFS_RENAME , SMB_VFS_UNLINK , SMB_VFS_NTIMES .
* Changed to version 27 - not yet released . Added enum timestamp_set_resolution
* return to fs_capabilities call . JRA .
* Leave at 27 - not yet released . Add translate_name VFS call to convert
* UNIX names to Windows supported names - - asrinivasan .
* Changed to version 28 - Add private_flags uint32_t to CREATE call .
* Leave at 28 - not yet released . Change realpath to assume NULL and return a
* malloc ' ed path . JRA .
* Leave at 28 - not yet released . Move posix_fallocate into the VFS
* where it belongs . JRA .
* Leave at 28 - not yet released . Rename posix_fallocate to fallocate
* to split out the two possible uses . JRA .
* Leave at 28 - not yet released . Add fdopendir . JRA .
* Leave at 28 - not yet released . Rename open function to open_fn . - gd
* Leave at 28 - not yet released . Make getwd function always return malloced memory . JRA .
* Bump to version 29 - Samba 3.6 .0 will ship with interface version 28.
* Leave at 29 - not yet releases . Add fsctl . Richard Sharpe
* Leave at 29 - not yet released . add SMB_VFS_GET_DFS_REFERRAL ( ) - metze
* Leave at 29 - not yet released . Remove l { list , get , set , remove } xattr - abartlet
* Leave at 29 - not yet released . move to plain off_t - abartlet
* Leave at 29 - not yet released . Remove sys_acl functions other than set and get - abartlet
* Leave at 29 - not yet released . Added backup_intent bool to files_struct - JRA
* Leave at 29 - not yet released . Add durable handle functions - metze obnox
* Leave at 29 - not yet released . Added sys_acl_blob_get_file and sys_acl_blob_get_fd
* Bump to version 30 - Samba 4.0 .0 will ship with interface version 30
* Leave at 30 - not yet released . Added conn - > cwd to save vfs_GetWd ( ) calls .
* Leave at 30 - not yet released . Changed sys_acl_blob_get_file interface to remove type
* 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 .
* Leave at 31 - not yet released . Add share_access to vuid_cache_entry .
* Leave at 31 - not yet released . add SMB_VFS_COPY_CHUNK ( )
* Leave at 31 - not yet released . Remove the unused
* fsp - > pending_break_messages array
* Leave at 31 - not yet released . add SMB_VFS_ [ GET SET ] _COMPRESSION ( )
*
* Bump to version 32 - Samba 4.2 will ship with that .
* Version 32 - Add " lease " to CREATE_FILE operation
* Version 32 - Add " lease " to struct files_struct
* Version 32 - Add SMB_VFS_READDIR_ATTR ( )
* Version 32 - Add in and out create context blobs to create_file
* Version 32 - Remove unnecessary SMB_VFS_DISK_FREE ( ) small_query parameter
* Bump to version 33 - Samba 4.3 will ship with that .
* Version 33 - change fallocate mode flags param from enum - > uint32_t
* Version 33 - Add snapshot create delete calls
* Version 33 - Add OS X SMB2 AAPL copyfile extension flag to fsp
* Version 33 - Remove notify_watch_fn
* Bump to version 34 - Samba 4.4 will ship with that
* Version 34 - Remove bool posix_open , add uint64_t posix_flags
* Version 34 - Added bool posix_pathnames to struct smb_request
* 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 *
* Version 35 - Change mkdir from const char * , to
* const struct smb_filename *
* Version 35 - Change rmdir from const char * , to
* const struct smb_filename *
* Version 35 - Change opendir from const char * , to
* const struct smb_filename *
* Version 35 - Wrap aio async funtions args in a struct vfs_aio_state
* Version 35 - Change chmod from const char * , to
* const struct smb_filename *
* Version 35 - Change chmod_acl from const char * , to
* const struct smb_filename *
* Version 35 - Change chown from const char * , to
* const struct smb_filename *
* Version 35 - Change lchown from const char * , to
* const struct smb_filename *
* Version 35 - Change streaminfo from const char * , to
* const struct smb_filename *
* Version 35 - Add uint32_t flags to struct smb_filename
* Version 35 - Add get set fget fset dos attribute functions .
* Version 35 - Add bool use_ofd_locks to struct files_struct
* Bump to version 36 - Samba 4.6 will ship with that
* Version 36 - Remove is_offline and set_offline
* Version 37 - Module init functions now take a TALLOC_CTX * parameter .
* Version 37 - Add vfs_copy_chunk_flags for DUP_EXTENTS_TO_FILE
* Version 37 - Change sys_acl_delete_def_file from const char *
* to const struct smb_filename *
* Version 37 - Change sys_acl_get_file from const char *
* to const struct smb_filename *
* Version 37 - Change sys_acl_blob_get_file from const char *
* to const struct smb_filename *
* Version 37 - Change sys_acl_set_file from const char *
* to const struct smb_filename *
* Version 37 - Change listxattr from const char *
* to const struct smb_filename *
* Version 37 - Change removexattr from const char *
* to const struct smb_filename *
* Version 37 - Change setxattr from const char *
* to const struct smb_filename *
* Version 37 - Change getxattr from const char *
* to const struct smb_filename *
* Version 37 - Change mknod from const char * to const struct smb_filename *
* Version 37 - Change chflags from const char *
* to const struct smb_filename *
* Version 37 - Change disk_free from const char *
* to const struct smb_filename *
* Version 37 - Change get_quota from const char *
* to const struct smb_filename *
* Version 37 - Change link from const char *
* to const struct smb_filename *
* Version 37 - Change statvfs from const char *
* to const struct smb_filename *
* Version 37 - Change readlink from const char *
* to const struct smb_filename *
* Version 37 - Change symlink from const char *
* to const struct smb_filename *
* Version 37 - Change chdir from const char *
* to const struct smb_filename *
* Version 37 - Change getwd from char *
* to const struct smb_filename *
* Version 37 - Change conn - > cwd from char *
* to struct smb_filename *
* Version 37 - Change realpath from char *
* to struct smb_filename *
* Version 37 - Change connectpath from char *
* to struct smb_filename *
* Version 37 - Add SMB_VFS_OFFLOAD_READ_SEND RECV
* Version 37 - Rename SMB_VFS_COPY_CHUNK_SEND RECV to
* SMB_VFS_OFFLOAD_READ_SEND RECV
* Version 37 - Remove SMB_VFS_STRICT_UNLOCK
* Version 37 - Rename SMB_VFS_STRICT_LOCK to
* SMB_VFS_STRICT_LOCK_CHECK
* Version 38 - Remove SMB_VFS_INIT_SEARCH_OP
* Bump to version 39 , Samba 4.9 will ship with that
* Version 39 - Remove SMB_VFS_FSYNC
* Only implement async versions .
* Version 39 - Remove SMB_VFS_READ
* All users are now pread or async versions .
* Version 39 - Remove SMB_VFS_WRITE
* All users are now pwrite or async versions .
* Version 39 - Remove SMB_VFS_CHMOD_ACL - no longer used .
* Version 39 - Remove SMB_VFS_FCHMOD_ACL - no longer used .
* Version 39 - Remove struct dfree_cached_info pointer from
* connection struct
* Bump to version 40 , Samba 4.10 will ship with that
* Version 40 - Add SMB_VFS_GETXATTRAT_SEND RECV
* Version 40 - Add SMB_VFS_GET_DOS_ATTRIBUTES_SEND RECV
* Bump to version 41 , Samba 4.11 will ship with that
* Version 41 - Remove SMB_VFS_BRL_CANCEL_WINDOWS
* Version 41 - Remove unused st_ex_mask from struct stat_ex
* Version 41 - convert struct stat_ex . st_ex_calculated_birthtime to flags
* Version 41 - add st_ex_itime to struct stat_ex
* Version 41 - add st_ex_file_id to struct stat_ex
* Version 41 - add SMB_VFS_FS_FILE_ID
* Version 41 - Remove " blocking_lock " parameter from
* SMB_VFS_BRL_LOCK_WINDOWS
* Version 41 - Remove " msg_ctx " parameter from SMB_VFS_BRL_UNLOCK_WINDOWS
* Bump to version 42 , Samba 4.12 will ship with that
* Version 42 - Remove share_access member from struct files_struct
* Version 42 - Make " lease " a const * in create_file_fn
* Version 42 - Move SMB_VFS_RENAME - > SMB_VFS_RENAMEAT
* Version 42 - Move SMB_VFS_LINK - > SMB_VFS_LINKAT .
* Version 42 - Move SMB_VFS_MKNOD - > SMB_VFS_MKDNODAT .
* Version 42 - Move SMB_VFS_READLINK - > SMB_VFS_READLINKAT .
* Version 42 - Move SMB_VFS_SYMLINK - > SMB_VFS_SYMLINKAT .
* Version 42 - Move SMB_VFS_MKDIR - > SMB_VFS_MKDIRAT .
* Version 42 - Move change_to_user ( ) - > change_to_user_and_service ( )
* Version 42 - Move change_to_user_by_fsp ( ) - > change_to_user_and_service_by_fsp ( )
* Version 42 - Move [ un ] become_user * ( ) - > [ un ] become_user_without_service * ( )
* Version 42 - Move SMB_VFS_UNLINK - > SMB_VFS_UNLINKAT .
* Version 42 - Add SMB_VFS_FCNTL
* Version 42 - Remove SMB_VFS_RMDIR .
* Use SMB_VFS_UNLINKAT ( . . , AT_REMOVEDIR ) instead .
* Version 42 - Remove SMB_VFS_CHOWN
* Version 42 - Remove struct write_cache * wcp from files_struct
* Version 42 - SMB_VFS_NTIMES ( ) receives null times based on UTIMES_OMIT
* Version 42 - Add SMB_VFS_CREATE_DFS_PATHAT ( )
* Version 42 - Add SMB_VFS_READ_DFS_PATHAT ( )
* Change to Version 43 - will ship with 4.13 .
* Version 43 - Remove deferred_close from struct files_struct
* Version 43 - Remove SMB_VFS_OPENDIR ( )
* Version 43 - Remove original_lcomp from struct smb_filename
* Version 43 - files_struct flags :
* bool kernel_share_modes_taken
* bool update_write_time_triggered
* bool update_write_time_on_close
* bool write_time_forced
* bool can_lock
* bool can_read
* bool can_write
* bool modified
* bool is_directory
* bool aio_write_behind
* bool initial_delete_on_close
* bool delete_on_close
* bool is_sparse
* bool backup_intent
* bool use_ofd_locks
* bool closing
* bool lock_failure_seen
* changed to bitfields .
2020-04-30 17:40:28 +03:00
* Version 43 - convert SMB_VFS_GET_REAL_FILENAME ( ) arg path
* to be a struct smb_filename
2020-04-30 20:30:50 +03:00
* Version 43 - convert link_contents arg of SMB_VFS_SYMLINKAT ( )
* to struct smb_filename
2020-04-14 20:27:46 +03:00
* Version 43 - Move SMB_VFS_GET_NT_ACL ( ) - > SMB_VFS_GET_NT_ACL_AT ( ) .
2020-05-14 16:59:33 +03:00
* Version 43 - Remove root_dir_fid from SMB_VFS_CREATE_FILE ( ) .
2020-05-15 17:18:13 +03:00
* Version 43 - Add dirfsp to struct files_struct
2020-05-14 15:00:22 +03:00
* Version 43 - Add dirfsp args to SMB_VFS_CREATE_FILE ( )
2020-05-15 17:29:44 +03:00
* Version 43 - Add SMB_VFS_OPENAT ( )
2020-05-21 00:26:14 +03:00
* Version 43 - Remove SMB_VFS_OPEN ( )
2020-05-30 02:32:12 +03:00
* Version 43 - SMB_VFS_READ_DFS_PATHAT ( ) should take a non - const name .
There ' s no easy way to return stat info for a DFS link
otherwise .
2020-10-02 17:51:16 +03:00
* Change to Version 44 - will ship with 4.14 .
* Version 44 - Remove dirfsp arg from struct files_struct
2020-10-02 18:29:58 +03:00
* Version 44 - Remove dirfsp arg to SMB_VFS_CREATE_FILE ( )
2020-05-04 11:56:21 +03:00
*/
2013-08-21 17:56:14 +04:00
2020-10-02 17:51:16 +03:00
# define SMB_VFS_INTERFACE_VERSION 44
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-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 .
*/
2019-09-16 13:50:02 +03:00
uint64_t gen_id ;
2012-06-05 12:13:45 +04:00
} ;
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 timeval open_time ;
2015-04-14 02:56:09 +03:00
uint32_t access_mask ; /* NTCreateX access bits (FILE_READ_DATA etc.) */
2020-04-01 12:59:10 +03:00
struct {
bool kernel_share_modes_taken : 1 ;
2020-04-02 16:31:10 +03:00
bool update_write_time_triggered : 1 ;
2020-04-02 16:37:15 +03:00
bool update_write_time_on_close : 1 ;
2020-04-02 16:39:32 +03:00
bool write_time_forced : 1 ;
2020-04-02 18:09:36 +03:00
bool can_lock : 1 ;
2020-04-02 18:18:43 +03:00
bool can_read : 1 ;
2020-04-02 18:28:32 +03:00
bool can_write : 1 ;
2020-04-02 18:37:02 +03:00
bool modified : 1 ;
2020-04-02 19:21:11 +03:00
bool is_directory : 1 ;
2020-04-06 16:41:41 +03:00
bool is_dirfsp : 1 ;
2020-04-03 08:39:34 +03:00
bool aio_write_behind : 1 ;
2020-04-03 08:43:38 +03:00
bool initial_delete_on_close : 1 ;
2020-04-03 08:48:08 +03:00
bool delete_on_close : 1 ;
2020-04-03 08:52:10 +03:00
bool is_sparse : 1 ;
2020-04-03 09:01:45 +03:00
bool backup_intent : 1 ;
2020-04-03 09:02:23 +03:00
bool use_ofd_locks : 1 ;
2020-04-03 09:06:27 +03:00
bool closing : 1 ;
2020-04-03 10:48:58 +03:00
bool lock_failure_seen : 1 ;
2020-04-01 12:59:10 +03:00
} fsp_flags ;
2016-05-16 02:39:09 +03:00
2013-02-18 13:18:29 +04:00
struct tevent_timer * update_write_time_event ;
2012-06-05 12:13:45 +04:00
struct timespec close_write_time ;
int oplock_type ;
2019-08-15 13:10:52 +03:00
/*
* Cache of our lease_type , stored as " current_state " in
* leases . tdb
*/
int leases_db_seqnum ;
uint32_t lease_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. */
2015-11-29 17:55:43 +03:00
uint64_t posix_flags ;
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 */
2019-06-30 09:54:20 +03:00
/*
* Cache of share_mode_data - > flags
*/
int share_mode_flags_seqnum ;
2019-08-09 17:16:21 +03:00
uint16_t share_mode_flags ;
2019-06-30 09:54:20 +03:00
2012-06-05 12:13:45 +04:00
/*
* 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 ;
2019-06-03 14:41:30 +03:00
/*
* Optimize the aio_requests array for high performance : Never
* shrink it , maintain num_aio_requests separately
*/
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
2019-06-13 13:38:57 +03:00
/*
* Requests waiting for smb1 byte range locks . They are
* generated by smbd_smb1_do_locks_send and are required here ,
* because lock cancel operations index through reply_lockingX
* not based on mid but on the lock type and range .
*/
struct tevent_req * * blocked_smb1_lock_reqs ;
/*
* SMB1 remembers lock failures and delays repeated blocking
* lock attempts on the same offset .
*/
uint64_t lock_failure_offset ;
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 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 ;
2019-08-15 16:53:32 +03:00
struct files_struct * cwd_fsp ; /* Working directory. */
2018-06-14 08:27:43 +03:00
bool tcon_done ;
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 trans_state * pending_trans ;
struct rpc_pipe_client * spoolss_pipe ;
} connection_struct ;
2012-06-05 15:39:49 +04:00
struct smbd_smb2_request ;
2020-01-09 21:13:14 +03:00
struct referral ;
2012-06-05 15:39:49 +04:00
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 ;
2019-12-29 10:30:22 +03:00
/*
* Pointer to session , can be NULL ,
* eg during negprot and session setup .
*/
struct smbXsrv_session * session ;
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 ;
/*
* 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 ;
2016-03-18 02:20:17 +03:00
uint32_t flags ;
2012-06-05 12:38:48 +04:00
SMB_STRUCT_STAT st ;
2020-04-28 19:23:37 +03:00
NTTIME twrp ;
2012-06-05 12:38:48 +04:00
} ;
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 ) ;
2017-05-23 20:40:47 +03:00
uint64_t ( * disk_free_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uint64_t * bsize ,
uint64_t * dfree ,
uint64_t * dsize ) ;
2017-06-01 21:45:25 +03:00
int ( * get_quota_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
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 ) ;
2017-06-03 01:26:06 +03:00
int ( * statvfs_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
struct vfs_statvfs_struct * statbuf ) ;
2011-12-04 08:45:04 +04:00
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 ) ;
2020-01-09 21:13:14 +03:00
NTSTATUS ( * create_dfs_pathat_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
const struct referral * reflist ,
size_t referral_count ) ;
2020-01-28 20:51:17 +03:00
NTSTATUS ( * read_dfs_pathat_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct files_struct * dirfsp ,
2020-05-30 02:32:12 +03:00
struct smb_filename * smb_fname ,
2020-01-28 20:51:17 +03:00
struct referral * * ppreflist ,
size_t * preferral_count ) ;
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
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 ) ;
2019-09-04 22:20:46 +03:00
int ( * mkdirat_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
mode_t mode ) ;
2012-03-28 06:22:03 +04:00
int ( * closedir_fn ) ( struct vfs_handle_struct * handle , DIR * dir ) ;
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
2020-05-15 17:29:44 +03:00
int ( * openat_fn ) ( struct vfs_handle_struct * handle ,
const struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
struct 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 ,
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 ,
2019-08-07 23:00:11 +03:00
const 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 ) ;
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 ) ;
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 ) ;
2019-08-09 01:22:31 +03:00
int ( * renameat_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * srcdir_fsp ,
const struct smb_filename * smb_fname_src ,
struct files_struct * dstdir_fsp ,
const struct smb_filename * smb_fname_dst ) ;
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 ) ;
2019-09-12 00:37:31 +03:00
int ( * unlinkat_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * srcdir_fsp ,
const struct smb_filename * smb_fname ,
int flags ) ;
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 ) ;
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 ) ;
2017-06-29 21:29:33 +03:00
int ( * chdir_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ) ;
2017-06-30 00:32:47 +03:00
struct smb_filename * ( * getwd_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ) ;
2011-12-04 08:45:04 +04:00
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 ,
2020-01-03 22:05:57 +03:00
uint32_t share_access , uint32_t access_mask ) ;
2019-09-27 08:49:37 +03:00
int ( * fcntl_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , int cmd , va_list cmd_arg ) ;
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 ) ;
2019-08-30 22:01:13 +03:00
int ( * symlinkat_fn ) ( struct vfs_handle_struct * handle ,
2020-04-30 20:30:50 +03:00
const struct smb_filename * link_contents ,
2019-08-30 22:01:13 +03:00
struct files_struct * dirfsp ,
const struct smb_filename * new_smb_fname ) ;
2019-08-22 23:42:26 +03:00
int ( * readlinkat_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
char * buf ,
size_t bufsiz ) ;
2019-08-13 02:49:26 +03:00
int ( * linkat_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * srcfsp ,
const struct smb_filename * old_smb_fname ,
struct files_struct * dstfsp ,
const struct smb_filename * new_smb_fname ,
int flags ) ;
2019-08-21 02:31:00 +03:00
int ( * mknodat_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
mode_t mode ,
SMB_DEV_T dev ) ;
2017-06-30 21:32:59 +03:00
struct smb_filename * ( * realpath_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * ctx ,
const struct smb_filename * smb_fname ) ;
2017-05-20 02:15:55 +03:00
int ( * chflags_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
unsigned int flags ) ;
2011-12-04 08:45:04 +04:00
struct file_id ( * file_id_create_fn ) ( struct vfs_handle_struct * handle ,
const SMB_STRUCT_STAT * sbuf ) ;
2019-06-29 15:08:04 +03:00
uint64_t ( * fs_file_id_fn ) ( struct vfs_handle_struct * handle ,
const SMB_STRUCT_STAT * sbuf ) ;
2017-06-03 13:57:59 +03:00
struct tevent_req * ( * offload_read_send_fn ) ( TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
uint32_t fsctl ,
uint32_t ttl ,
off_t offset ,
size_t to_copy ) ;
NTSTATUS ( * offload_read_recv_fn ) ( struct tevent_req * req ,
struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
DATA_BLOB * token_blob ) ;
2017-06-04 14:50:33 +03:00
struct tevent_req * ( * offload_write_send_fn ) ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
2017-06-09 14:02:49 +03:00
uint32_t fsctl ,
DATA_BLOB * token ,
off_t transfer_offset ,
2017-06-04 14:50:33 +03:00
struct files_struct * dest_fsp ,
off_t dest_off ,
2017-06-10 10:05:55 +03:00
off_t to_copy ) ;
2017-06-04 14:50:33 +03:00
NTSTATUS ( * offload_write_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 ,
2020-04-30 17:40:28 +03:00
const struct smb_filename * path ,
2011-12-04 08:45:04 +04:00
const char * name ,
TALLOC_CTX * mem_ctx ,
char * * found_name ) ;
const char * ( * connectpath_fn ) ( struct vfs_handle_struct * handle ,
2017-06-30 23:37:03 +03:00
const struct smb_filename * smb_fname ) ;
2011-12-04 08:45:04 +04:00
NTSTATUS ( * brl_lock_windows_fn ) ( struct vfs_handle_struct * handle ,
struct byte_range_lock * br_lck ,
2019-07-01 15:55:42 +03:00
struct lock_struct * plock ) ;
2011-12-04 08:45:04 +04:00
bool ( * brl_unlock_windows_fn ) ( struct vfs_handle_struct * handle ,
struct byte_range_lock * br_lck ,
const struct lock_struct * plock ) ;
2017-07-09 15:34:10 +03:00
bool ( * strict_lock_check_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 ) ;
2018-03-15 15:08:55 +03:00
struct tevent_req * ( * get_dos_attributes_send_fn ) (
TALLOC_CTX * mem_ctx ,
2018-12-28 14:12:20 +03:00
struct tevent_context * ev ,
2018-03-15 15:08:55 +03:00
struct vfs_handle_struct * handle ,
files_struct * dir_fsp ,
struct smb_filename * smb_fname ) ;
NTSTATUS ( * get_dos_attributes_recv_fn ) (
struct tevent_req * req ,
struct vfs_aio_state * aio_state ,
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 ) ;
2020-04-10 03:35:49 +03:00
NTSTATUS ( * get_nt_acl_at_fn ) ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
uint32_t security_info ,
TALLOC_CTX * mem_ctx ,
struct security_descriptor * * ppdesc ) ;
2011-12-04 08:45:04 +04:00
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. */
2012-10-10 03:18:32 +04:00
SMB_ACL_T ( * sys_acl_get_file_fn ) ( struct vfs_handle_struct * handle ,
2017-05-24 03:11:18 +03:00
const struct smb_filename * smb_fname ,
2012-10-10 03:18:32 +04:00
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 ,
2017-05-24 03:35:59 +03:00
const struct smb_filename * smb_fname ,
2012-10-10 09:44:41 +04:00
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 ) ;
2017-05-24 20:47:46 +03:00
int ( * sys_acl_set_file_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
SMB_ACL_TYPE_T acltype ,
SMB_ACL_T theacl ) ;
2011-12-04 08:45:04 +04:00
int ( * sys_acl_set_fd_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , SMB_ACL_T theacl ) ;
2017-05-24 01:33:31 +03:00
int ( * sys_acl_delete_def_file_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ) ;
2009-07-24 04:28:58 +04:00
/* EA operations. */
2017-05-26 02:42:04 +03:00
ssize_t ( * getxattr_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
const char * name ,
void * value ,
size_t size ) ;
2018-03-13 10:14:53 +03:00
struct tevent_req * ( * getxattrat_send_fn ) (
TALLOC_CTX * mem_ctx ,
2018-12-27 18:32:46 +03:00
struct tevent_context * ev ,
2018-03-13 10:14:53 +03:00
struct vfs_handle_struct * handle ,
files_struct * dir_fsp ,
const struct smb_filename * smb_fname ,
const char * xattr_name ,
size_t alloc_hint ) ;
ssize_t ( * getxattrat_recv_fn ) ( struct tevent_req * req ,
struct vfs_aio_state * aio_state ,
TALLOC_CTX * mem_ctx ,
uint8_t * * xattr_value ) ;
2011-12-04 08:45:04 +04:00
ssize_t ( * fgetxattr_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , const char * name , void * value , size_t size ) ;
2017-05-23 23:12:29 +03:00
ssize_t ( * listxattr_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
char * list ,
size_t size ) ;
2011-12-04 08:45:04 +04:00
ssize_t ( * flistxattr_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , char * list , size_t size ) ;
2017-05-24 21:35:50 +03:00
int ( * removexattr_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
const char * name ) ;
2011-12-04 08:45:04 +04:00
int ( * fremovexattr_fn ) ( struct vfs_handle_struct * handle , struct files_struct * fsp , const char * name ) ;
2017-05-25 22:41:31 +03:00
int ( * setxattr_fn ) ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
const char * name ,
const void * value ,
size_t size ,
int flags ) ;
2011-12-04 08:45:04 +04:00
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) \
2017-12-05 15:16:31 +03:00
( type * ) 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 ,
2017-05-23 20:40:47 +03:00
const struct smb_filename * smb_filename ,
uint64_t * bsize ,
uint64_t * dfree ,
uint64_t * dsize ) ;
2017-06-01 21:45:25 +03:00
int smb_vfs_call_get_quota ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_filename ,
enum SMB_QUOTA_TYPE qtype ,
unid_t id ,
SMB_DISK_QUOTA * qt ) ;
2009-07-24 04:28:58 +04:00
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 ) ;
2017-06-03 01:26:06 +03:00
int smb_vfs_call_statvfs ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
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 ) ;
2020-01-09 21:13:14 +03:00
NTSTATUS smb_vfs_call_create_dfs_pathat ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
const struct referral * reflist ,
size_t referral_count ) ;
2020-01-28 20:51:17 +03:00
NTSTATUS smb_vfs_call_read_dfs_pathat ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct files_struct * dirfsp ,
2020-05-30 02:32:12 +03:00
struct smb_filename * smb_fname ,
2020-01-28 20:51:17 +03:00
struct referral * * ppreflist ,
size_t * preferral_count ) ;
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 ) ;
2019-09-04 22:20:46 +03:00
int smb_vfs_call_mkdirat ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
mode_t mode ) ;
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 ) ;
2020-05-15 17:29:44 +03:00
int smb_vfs_call_openat ( struct vfs_handle_struct * handle ,
const struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
struct files_struct * fsp ,
int flags ,
mode_t mode ) ;
2009-07-24 04:28:58 +04:00
NTSTATUS smb_vfs_call_create_file ( struct vfs_handle_struct * handle ,
struct smb_request * req ,
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 ,
2019-08-07 23:00:11 +03:00
const 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 ) ;
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_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 ) ;
2019-08-09 01:22:31 +03:00
int smb_vfs_call_renameat ( struct vfs_handle_struct * handle ,
struct files_struct * srcfsp ,
const struct smb_filename * smb_fname_src ,
struct files_struct * dstfsp ,
const struct smb_filename * smb_fname_dst ) ;
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
2018-04-28 02:59:02 +03:00
int smb_vfs_fsync_sync ( files_struct * fsp ) ;
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 ) ;
2019-09-12 00:37:31 +03:00
int smb_vfs_call_unlinkat ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
int flags ) ;
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 ) ;
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 ) ;
2017-06-29 21:29:33 +03:00
int smb_vfs_call_chdir ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ) ;
2017-06-30 00:32:47 +03:00
struct smb_filename * smb_vfs_call_getwd ( struct vfs_handle_struct * handle ,
TALLOC_CTX * ctx ) ;
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 ,
2020-01-03 22:05:57 +03:00
struct files_struct * fsp , uint32_t share_access ,
2009-10-06 19:14:56 +04:00
uint32_t access_mask ) ;
2019-09-27 08:49:37 +03:00
int smb_vfs_call_fcntl ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , int cmd , . . . ) ;
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 ) ;
2019-08-30 22:01:13 +03:00
int smb_vfs_call_symlinkat ( struct vfs_handle_struct * handle ,
2020-04-30 20:30:50 +03:00
const struct smb_filename * link_contents ,
2019-08-30 22:01:13 +03:00
struct files_struct * dirfsp ,
const struct smb_filename * new_smb_fname ) ;
2019-08-22 23:42:26 +03:00
int smb_vfs_call_readlinkat ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
char * buf ,
size_t bufsiz ) ;
2019-08-13 02:49:26 +03:00
int smb_vfs_call_linkat ( struct vfs_handle_struct * handle ,
struct files_struct * srcfsp ,
const struct smb_filename * old_smb_fname ,
struct files_struct * dstfsp ,
const struct smb_filename * new_smb_fname ,
int flags ) ;
2019-08-21 02:31:00 +03:00
int smb_vfs_call_mknodat ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
mode_t mode ,
SMB_DEV_T dev ) ;
2017-06-30 21:32:59 +03:00
struct smb_filename * smb_vfs_call_realpath ( struct vfs_handle_struct * handle ,
TALLOC_CTX * ctx ,
const struct smb_filename * smb_fname ) ;
2017-05-20 02:15:55 +03:00
int smb_vfs_call_chflags ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
unsigned int flags ) ;
2009-07-24 04:28:58 +04:00
struct file_id smb_vfs_call_file_id_create ( struct vfs_handle_struct * handle ,
const SMB_STRUCT_STAT * sbuf ) ;
2019-06-29 15:08:04 +03:00
uint64_t smb_vfs_call_fs_file_id ( struct vfs_handle_struct * handle ,
const SMB_STRUCT_STAT * sbuf ) ;
2009-07-24 04:28:58 +04:00
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 ,
2020-04-30 17:40:28 +03:00
const struct smb_filename * path ,
2020-04-30 17:26:48 +03:00
const char * name ,
TALLOC_CTX * mem_ctx ,
char * * found_name ) ;
2009-07-24 04:28:58 +04:00
const char * smb_vfs_call_connectpath ( struct vfs_handle_struct * handle ,
2017-06-30 23:37:03 +03:00
const struct smb_filename * smb_fname ) ;
2009-07-24 04:28:58 +04:00
NTSTATUS smb_vfs_call_brl_lock_windows ( struct vfs_handle_struct * handle ,
struct byte_range_lock * br_lck ,
2019-07-01 15:55:42 +03:00
struct lock_struct * plock ) ;
2009-07-24 04:28:58 +04:00
bool smb_vfs_call_brl_unlock_windows ( struct vfs_handle_struct * handle ,
struct byte_range_lock * br_lck ,
const struct lock_struct * plock ) ;
2017-07-09 15:34:10 +03:00
bool smb_vfs_call_strict_lock_check ( 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 ) ;
2018-03-15 15:08:55 +03:00
struct tevent_req * smb_vfs_call_get_dos_attributes_send (
TALLOC_CTX * mem_ctx ,
2018-12-28 14:12:20 +03:00
struct tevent_context * ev ,
2018-03-15 15:08:55 +03:00
struct vfs_handle_struct * handle ,
files_struct * dir_fsp ,
struct smb_filename * smb_fname ) ;
NTSTATUS smb_vfs_call_get_dos_attributes_recv (
struct tevent_req * req ,
struct vfs_aio_state * aio_state ,
uint32_t * dosmode ) ;
2017-06-03 13:57:59 +03:00
struct tevent_req * smb_vfs_call_offload_read_send (
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
uint32_t fsctl ,
uint32_t ttl ,
off_t offset ,
size_t to_copy ) ;
NTSTATUS smb_vfs_call_offload_read_recv ( struct tevent_req * req ,
struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
DATA_BLOB * token_blob ) ;
2017-06-04 14:50:33 +03:00
struct tevent_req * smb_vfs_call_offload_write_send ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
2017-06-09 14:02:49 +03:00
uint32_t fsctl ,
DATA_BLOB * token ,
off_t transfer_offset ,
2017-06-04 14:50:33 +03:00
struct files_struct * dest_fsp ,
off_t dest_off ,
2017-06-10 10:05:55 +03:00
off_t num ) ;
2017-06-04 14:50:33 +03:00
NTSTATUS smb_vfs_call_offload_write_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 ) ;
2020-04-10 03:35:49 +03:00
NTSTATUS smb_vfs_call_get_nt_acl_at ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
uint32_t security_info ,
TALLOC_CTX * mem_ctx ,
struct security_descriptor * * ppdesc ) ;
2009-07-24 04:28:58 +04:00
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
SMB_ACL_T smb_vfs_call_sys_acl_get_file ( struct vfs_handle_struct * handle ,
2017-05-24 03:11:18 +03:00
const struct smb_filename * smb_fname ,
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 ,
2017-05-24 03:35:59 +03:00
const struct smb_filename * smb_fname ,
2012-09-10 06:44:01 +04:00
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 ,
2017-05-24 20:47:46 +03:00
const struct smb_filename * smb_fname ,
SMB_ACL_TYPE_T acltype ,
SMB_ACL_T theacl ) ;
2009-07-24 04:28:58 +04:00
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 ,
2017-05-24 01:33:31 +03:00
const struct smb_filename * smb_fname ) ;
2009-07-24 04:28:58 +04:00
ssize_t smb_vfs_call_getxattr ( struct vfs_handle_struct * handle ,
2017-05-26 02:42:04 +03:00
const struct smb_filename * smb_fname ,
const char * name ,
void * value ,
size_t size ) ;
2018-03-13 10:14:53 +03:00
struct tevent_req * smb_vfs_call_getxattrat_send (
TALLOC_CTX * mem_ctx ,
2018-12-27 18:32:46 +03:00
struct tevent_context * ev ,
2018-03-13 10:14:53 +03:00
struct vfs_handle_struct * handle ,
files_struct * dir_fsp ,
const struct smb_filename * smb_fname ,
const char * xattr_name ,
size_t alloc_hint ) ;
ssize_t smb_vfs_call_getxattrat_recv ( struct tevent_req * req ,
struct vfs_aio_state * aio_state ,
TALLOC_CTX * mem_ctx ,
uint8_t * * xattr_value ) ;
2009-07-24 04:28:58 +04:00
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 ,
2017-05-23 23:12:29 +03:00
const struct smb_filename * smb_fname ,
char * list ,
size_t size ) ;
2009-07-24 04:28:58 +04:00
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 ,
2017-05-24 21:35:50 +03:00
const struct smb_filename * smb_fname ,
const char * name ) ;
2009-07-24 04:28:58 +04:00
int smb_vfs_call_fremovexattr ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , const char * name ) ;
2017-05-25 22:41:31 +03:00
int smb_vfs_call_setxattr ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
const char * name ,
const void * value ,
size_t size ,
int flags ) ;
2009-07-24 04:28:58 +04:00
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 ) ;
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 ) ;
2018-07-25 13:26:05 +03:00
/*
* Helper functions from source3 / modules / vfs_not_implemented . c
*/
int vfs_not_implemented_connect (
vfs_handle_struct * handle ,
const char * service ,
const char * user ) ;
void vfs_not_implemented_disconnect ( vfs_handle_struct * handle ) ;
uint64_t vfs_not_implemented_disk_free ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uint64_t * bsize ,
uint64_t * dfree ,
uint64_t * dsize ) ;
int vfs_not_implemented_get_quota ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
enum SMB_QUOTA_TYPE qtype ,
unid_t id ,
SMB_DISK_QUOTA * dq ) ;
int vfs_not_implemented_set_quota ( vfs_handle_struct * handle ,
enum SMB_QUOTA_TYPE qtype ,
unid_t id , SMB_DISK_QUOTA * dq ) ;
int vfs_not_implemented_get_shadow_copy_data ( vfs_handle_struct * handle ,
files_struct * fsp ,
struct shadow_copy_data * shadow_copy_data ,
bool labels ) ;
int vfs_not_implemented_statvfs ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
struct vfs_statvfs_struct * statbuf ) ;
uint32_t vfs_not_implemented_fs_capabilities ( struct vfs_handle_struct * handle ,
enum timestamp_set_resolution * p_ts_res ) ;
NTSTATUS vfs_not_implemented_get_dfs_referrals ( struct vfs_handle_struct * handle ,
struct dfs_GetDFSReferral * r ) ;
2020-01-09 21:13:14 +03:00
NTSTATUS vfs_not_implemented_create_dfs_pathat ( struct vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
const struct referral * reflist ,
size_t referral_count ) ;
2020-01-28 20:51:17 +03:00
NTSTATUS vfs_not_implemented_read_dfs_pathat ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct files_struct * dirfsp ,
2020-05-30 02:32:12 +03:00
struct smb_filename * smb_fname ,
2020-01-28 20:51:17 +03:00
struct referral * * ppreflist ,
size_t * preferral_count ) ;
2018-07-25 13:26:05 +03:00
NTSTATUS vfs_not_implemented_snap_check_path ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
const char * service_path ,
char * * base_volume ) ;
NTSTATUS vfs_not_implemented_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 vfs_not_implemented_snap_delete ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
char * base_path ,
char * snap_path ) ;
DIR * vfs_not_implemented_fdopendir ( vfs_handle_struct * handle , files_struct * fsp ,
const char * mask , uint32_t attr ) ;
struct dirent * vfs_not_implemented_readdir ( vfs_handle_struct * handle ,
DIR * dirp , SMB_STRUCT_STAT * sbuf ) ;
void vfs_not_implemented_seekdir ( vfs_handle_struct * handle , DIR * dirp , long offset ) ;
long vfs_not_implemented_telldir ( vfs_handle_struct * handle , DIR * dirp ) ;
void vfs_not_implemented_rewind_dir ( vfs_handle_struct * handle , DIR * dirp ) ;
2019-09-04 22:20:46 +03:00
int vfs_not_implemented_mkdirat ( vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
mode_t mode ) ;
2018-07-25 13:26:05 +03:00
int vfs_not_implemented_closedir ( vfs_handle_struct * handle , DIR * dir ) ;
int vfs_not_implemented_open ( vfs_handle_struct * handle ,
struct smb_filename * smb_fname ,
files_struct * fsp , int flags , mode_t mode ) ;
2020-05-15 17:29:44 +03:00
int vfs_not_implemented_openat ( vfs_handle_struct * handle ,
const struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
struct files_struct * fsp ,
int flags ,
mode_t mode ) ;
2018-07-25 13:26:05 +03:00
NTSTATUS vfs_not_implemented_create_file ( struct vfs_handle_struct * handle ,
struct smb_request * req ,
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 ,
2019-08-07 23:00:11 +03:00
const struct smb2_lease * lease ,
2018-07-25 13:26:05 +03:00
uint64_t allocation_size ,
uint32_t private_flags ,
struct security_descriptor * sd ,
struct ea_list * ea_list ,
files_struct * * result , int * pinfo ,
const struct smb2_create_blobs * in_context_blobs ,
struct smb2_create_blobs * out_context_blobs ) ;
int vfs_not_implemented_close_fn ( vfs_handle_struct * handle , files_struct * fsp ) ;
ssize_t vfs_not_implemented_pread ( vfs_handle_struct * handle , files_struct * fsp ,
void * data , size_t n , off_t offset ) ;
struct tevent_req * vfs_not_implemented_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 ) ;
ssize_t vfs_not_implemented_pread_recv ( struct tevent_req * req ,
struct vfs_aio_state * vfs_aio_state ) ;
ssize_t vfs_not_implemented_pwrite ( vfs_handle_struct * handle , files_struct * fsp ,
const void * data , size_t n , off_t offset ) ;
struct tevent_req * vfs_not_implemented_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 ) ;
ssize_t vfs_not_implemented_pwrite_recv ( struct tevent_req * req ,
struct vfs_aio_state * vfs_aio_state ) ;
off_t vfs_not_implemented_lseek ( vfs_handle_struct * handle , files_struct * fsp ,
off_t offset , int whence ) ;
ssize_t vfs_not_implemented_sendfile ( vfs_handle_struct * handle , int tofd ,
files_struct * fromfsp , const DATA_BLOB * hdr ,
off_t offset , size_t n ) ;
ssize_t vfs_not_implemented_recvfile ( vfs_handle_struct * handle , int fromfd ,
files_struct * tofsp , off_t offset , size_t n ) ;
2019-08-09 01:22:31 +03:00
int vfs_not_implemented_renameat ( vfs_handle_struct * handle ,
files_struct * srcfsp ,
const struct smb_filename * smb_fname_src ,
files_struct * dstfsp ,
const struct smb_filename * smb_fname_dst ) ;
2018-07-25 13:26:05 +03:00
struct tevent_req * vfs_not_implemented_fsync_send ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct files_struct * fsp ) ;
int vfs_not_implemented_fsync_recv ( struct tevent_req * req ,
struct vfs_aio_state * vfs_aio_state ) ;
int vfs_not_implemented_stat ( vfs_handle_struct * handle , struct smb_filename * smb_fname ) ;
int vfs_not_implemented_fstat ( vfs_handle_struct * handle , files_struct * fsp ,
SMB_STRUCT_STAT * sbuf ) ;
int vfs_not_implemented_lstat ( vfs_handle_struct * handle ,
struct smb_filename * smb_fname ) ;
uint64_t vfs_not_implemented_get_alloc_size ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
const SMB_STRUCT_STAT * sbuf ) ;
2019-09-12 00:37:31 +03:00
int vfs_not_implemented_unlinkat ( vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
int flags ) ;
2018-07-25 13:26:05 +03:00
int vfs_not_implemented_chmod ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
mode_t mode ) ;
int vfs_not_implemented_fchmod ( vfs_handle_struct * handle , files_struct * fsp ,
mode_t mode ) ;
int vfs_not_implemented_fchown ( vfs_handle_struct * handle , files_struct * fsp ,
uid_t uid , gid_t gid ) ;
int vfs_not_implemented_lchown ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uid_t uid ,
gid_t gid ) ;
int vfs_not_implemented_chdir ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ) ;
struct smb_filename * vfs_not_implemented_getwd ( vfs_handle_struct * handle ,
TALLOC_CTX * ctx ) ;
int vfs_not_implemented_ntimes ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
struct smb_file_time * ft ) ;
int vfs_not_implemented_ftruncate ( vfs_handle_struct * handle , files_struct * fsp ,
off_t offset ) ;
int vfs_not_implemented_fallocate ( vfs_handle_struct * handle , files_struct * fsp ,
uint32_t mode , off_t offset , off_t len ) ;
bool vfs_not_implemented_lock ( vfs_handle_struct * handle , files_struct * fsp , int op ,
off_t offset , off_t count , int type ) ;
int vfs_not_implemented_kernel_flock ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
2020-01-03 22:06:40 +03:00
uint32_t share_access , uint32_t access_mask ) ;
2019-09-27 08:49:37 +03:00
int vfs_not_implemented_fcntl ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , int cmd , va_list cmd_arg ) ;
2018-07-25 13:26:05 +03:00
int vfs_not_implemented_linux_setlease ( struct vfs_handle_struct * handle ,
struct files_struct * fsp , int leasetype ) ;
bool vfs_not_implemented_getlock ( vfs_handle_struct * handle , files_struct * fsp ,
off_t * poffset , off_t * pcount , int * ptype ,
pid_t * ppid ) ;
2019-08-30 22:01:13 +03:00
int vfs_not_implemented_symlinkat ( vfs_handle_struct * handle ,
2020-04-30 20:30:50 +03:00
const struct smb_filename * link_contents ,
2019-08-30 22:01:13 +03:00
struct files_struct * dirfsp ,
const struct smb_filename * new_smb_fname ) ;
2019-08-22 23:42:26 +03:00
int vfs_not_implemented_vfs_readlinkat ( vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
char * buf ,
size_t bufsiz ) ;
2019-08-13 02:49:26 +03:00
int vfs_not_implemented_linkat ( vfs_handle_struct * handle ,
struct files_struct * srcfsp ,
const struct smb_filename * old_smb_fname ,
struct files_struct * dstfsp ,
const struct smb_filename * new_smb_fname ,
int flags ) ;
2019-08-21 02:31:00 +03:00
int vfs_not_implemented_mknodat ( vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
mode_t mode ,
SMB_DEV_T dev ) ;
2018-07-25 13:26:05 +03:00
struct smb_filename * vfs_not_implemented_realpath ( vfs_handle_struct * handle ,
TALLOC_CTX * ctx ,
const struct smb_filename * smb_fname ) ;
int vfs_not_implemented_chflags ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uint flags ) ;
struct file_id vfs_not_implemented_file_id_create ( vfs_handle_struct * handle ,
const SMB_STRUCT_STAT * sbuf ) ;
2019-06-29 15:08:04 +03:00
uint64_t vfs_not_implemented_fs_file_id ( vfs_handle_struct * handle ,
const SMB_STRUCT_STAT * sbuf ) ;
2018-07-25 13:26:05 +03:00
struct tevent_req * vfs_not_implemented_offload_read_send (
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
uint32_t fsctl ,
uint32_t ttl ,
off_t offset ,
size_t to_copy ) ;
NTSTATUS vfs_not_implemented_offload_read_recv ( struct tevent_req * req ,
struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
DATA_BLOB * _token_blob ) ;
struct tevent_req * vfs_not_implemented_offload_write_send (
struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
uint32_t fsctl ,
DATA_BLOB * token ,
off_t transfer_offset ,
struct files_struct * dest_fsp ,
off_t dest_off ,
off_t num ) ;
NTSTATUS vfs_not_implemented_offload_write_recv ( struct vfs_handle_struct * handle ,
struct tevent_req * req ,
off_t * copied ) ;
NTSTATUS vfs_not_implemented_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 vfs_not_implemented_set_compression ( struct vfs_handle_struct * handle ,
TALLOC_CTX * mem_ctx ,
struct files_struct * fsp ,
uint16_t compression_fmt ) ;
NTSTATUS vfs_not_implemented_streaminfo ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
const struct smb_filename * smb_fname ,
TALLOC_CTX * mem_ctx ,
unsigned int * num_streams ,
struct stream_struct * * streams ) ;
int vfs_not_implemented_get_real_filename ( struct vfs_handle_struct * handle ,
2020-04-30 17:40:28 +03:00
const struct smb_filename * path ,
2018-07-25 13:26:05 +03:00
const char * name ,
TALLOC_CTX * mem_ctx ,
char * * found_name ) ;
const char * vfs_not_implemented_connectpath ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ) ;
NTSTATUS vfs_not_implemented_brl_lock_windows ( struct vfs_handle_struct * handle ,
struct byte_range_lock * br_lck ,
2019-07-01 15:55:42 +03:00
struct lock_struct * plock ) ;
2018-07-25 13:26:05 +03:00
bool vfs_not_implemented_brl_unlock_windows ( struct vfs_handle_struct * handle ,
struct byte_range_lock * br_lck ,
const struct lock_struct * plock ) ;
bool vfs_not_implemented_strict_lock_check ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
struct lock_struct * plock ) ;
NTSTATUS vfs_not_implemented_translate_name ( struct vfs_handle_struct * handle ,
const char * mapped_name ,
enum vfs_translate_direction direction ,
TALLOC_CTX * mem_ctx , char * * pmapped_name ) ;
NTSTATUS vfs_not_implemented_fsctl ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
TALLOC_CTX * ctx ,
uint32_t function ,
uint16_t req_flags , /* Needed for UNICODE ... */
const uint8_t * _in_data ,
uint32_t in_len ,
uint8_t * * _out_data ,
uint32_t max_out_len , uint32_t * out_len ) ;
NTSTATUS vfs_not_implemented_readdir_attr ( struct vfs_handle_struct * handle ,
const struct smb_filename * fname ,
TALLOC_CTX * mem_ctx ,
struct readdir_attr_data * * pattr_data ) ;
NTSTATUS vfs_not_implemented_get_dos_attributes ( struct vfs_handle_struct * handle ,
struct smb_filename * smb_fname ,
uint32_t * dosmode ) ;
2018-03-15 15:08:55 +03:00
struct tevent_req * vfs_not_implemented_get_dos_attributes_send (
TALLOC_CTX * mem_ctx ,
2018-12-28 14:12:20 +03:00
struct tevent_context * ev ,
2018-03-15 15:08:55 +03:00
struct vfs_handle_struct * handle ,
files_struct * dir_fsp ,
struct smb_filename * smb_fname ) ;
NTSTATUS vfs_not_implemented_get_dos_attributes_recv (
struct tevent_req * req ,
struct vfs_aio_state * aio_state ,
uint32_t * dosmode ) ;
2018-07-25 13:26:05 +03:00
NTSTATUS vfs_not_implemented_fget_dos_attributes ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
uint32_t * dosmode ) ;
NTSTATUS vfs_not_implemented_set_dos_attributes ( struct vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
uint32_t dosmode ) ;
NTSTATUS vfs_not_implemented_fset_dos_attributes ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
uint32_t dosmode ) ;
NTSTATUS vfs_not_implemented_fget_nt_acl ( vfs_handle_struct * handle , files_struct * fsp ,
uint32_t security_info ,
TALLOC_CTX * mem_ctx ,
struct security_descriptor * * ppdesc ) ;
2020-04-10 03:35:49 +03:00
NTSTATUS vfs_not_implemented_get_nt_acl_at ( vfs_handle_struct * handle ,
struct files_struct * dirfsp ,
const struct smb_filename * smb_fname ,
uint32_t security_info ,
TALLOC_CTX * mem_ctx ,
struct security_descriptor * * ppdesc ) ;
2018-07-25 13:26:05 +03:00
NTSTATUS vfs_not_implemented_fset_nt_acl ( vfs_handle_struct * handle , files_struct * fsp ,
uint32_t security_info_sent ,
const struct security_descriptor * psd ) ;
SMB_ACL_T vfs_not_implemented_sys_acl_get_file ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
SMB_ACL_TYPE_T type ,
TALLOC_CTX * mem_ctx ) ;
SMB_ACL_T vfs_not_implemented_sys_acl_get_fd ( vfs_handle_struct * handle ,
files_struct * fsp , TALLOC_CTX * mem_ctx ) ;
int vfs_not_implemented_sys_acl_blob_get_file ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
TALLOC_CTX * mem_ctx ,
char * * blob_description ,
DATA_BLOB * blob ) ;
int vfs_not_implemented_sys_acl_blob_get_fd ( vfs_handle_struct * handle ,
files_struct * fsp , TALLOC_CTX * mem_ctx ,
char * * blob_description , DATA_BLOB * blob ) ;
int vfs_not_implemented_sys_acl_set_file ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
SMB_ACL_TYPE_T acltype ,
SMB_ACL_T theacl ) ;
int vfs_not_implemented_sys_acl_set_fd ( vfs_handle_struct * handle , files_struct * fsp ,
SMB_ACL_T theacl ) ;
int vfs_not_implemented_sys_acl_delete_def_file ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ) ;
ssize_t vfs_not_implemented_getxattr ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
const char * name ,
void * value ,
size_t size ) ;
2018-03-13 10:14:53 +03:00
struct tevent_req * vfs_not_implemented_getxattrat_send (
TALLOC_CTX * mem_ctx ,
2018-12-27 18:32:46 +03:00
struct tevent_context * ev ,
2018-03-13 10:14:53 +03:00
struct vfs_handle_struct * handle ,
files_struct * dir_fsp ,
const struct smb_filename * smb_fname ,
const char * xattr_name ,
size_t alloc_hint ) ;
ssize_t vfs_not_implemented_getxattrat_recv ( struct tevent_req * req ,
struct vfs_aio_state * aio_state ,
TALLOC_CTX * mem_ctx ,
uint8_t * * xattr_value ) ;
2018-07-25 13:26:05 +03:00
ssize_t vfs_not_implemented_fgetxattr ( vfs_handle_struct * handle ,
struct files_struct * fsp , const char * name ,
void * value , size_t size ) ;
ssize_t vfs_not_implemented_listxattr ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
char * list ,
size_t size ) ;
ssize_t vfs_not_implemented_flistxattr ( vfs_handle_struct * handle ,
struct files_struct * fsp , char * list ,
size_t size ) ;
int vfs_not_implemented_removexattr ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
const char * name ) ;
int vfs_not_implemented_fremovexattr ( vfs_handle_struct * handle ,
struct files_struct * fsp , const char * name ) ;
int vfs_not_implemented_setxattr ( vfs_handle_struct * handle ,
const struct smb_filename * smb_fname ,
const char * name ,
const void * value ,
size_t size ,
int flags ) ;
int vfs_not_implemented_fsetxattr ( vfs_handle_struct * handle , struct files_struct * fsp ,
const char * name , const void * value , size_t size ,
int flags ) ;
bool vfs_not_implemented_aio_force ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ) ;
NTSTATUS vfs_not_implemented_audit_file ( struct vfs_handle_struct * handle ,
struct smb_filename * file ,
struct security_acl * sacl ,
uint32_t access_requested ,
uint32_t access_denied ) ;
NTSTATUS vfs_not_implemented_durable_cookie ( struct vfs_handle_struct * handle ,
struct files_struct * fsp ,
TALLOC_CTX * mem_ctx ,
DATA_BLOB * cookie ) ;
NTSTATUS vfs_not_implemented_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 vfs_not_implemented_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 ) ;
2000-02-03 07:47:50 +03:00
# endif /* _VFS_H */