📄 vfs.h
字号:
/* Unix SMB/CIFS implementation. VFS structures and parameters Copyright (C) Jeremy Allison 1999-2005 Copyright (C) Tim Potter 1999 Copyright (C) Alexander Bokovoy 2002-2005 Copyright (C) Stefan (metze) Metzmacher 2003 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 the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 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. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. This work was sponsored by Optifacio Software Services, Inc.*/#ifndef _VFS_H#define _VFS_H/* Avoid conflict with an AIX include file */#ifdef vfs_ops#undef vfs_ops#endif/* * As we're now (thanks Andrew ! :-) using file_structs and connection * structs in the vfs - then anyone writing a vfs must include includes.h... *//* * 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. * * If you change anything here, please also update modules/vfs_full_audit.c. * VL. *//* 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 the we had to change DIR to SMB_STRUCT_DIR. JRA *//* Changed to version 15 as the we added the statvfs call. JRA */#define SMB_VFS_INTERFACE_VERSION 15/* to bug old modules which are trying to compile with the old functions */#define vfs_init __ERROR_please_port_this_module_to_SMB_VFS_INTERFACE_VERSION_8_donot_use_vfs_init_anymore(void) { __ERROR_please_port_this_module_to_SMB_VFS_INTERFACE_VERSION_8_donot_use_vfs_init_anymore };#define lp_parm_string __ERROR_please_port_lp_parm_string_to_lp_parm_const_string_or_lp_parm_talloc_string { \ __ERROR_please_port_lp_parm_string_to_lp_parm_const_string_or_lp_parm_talloc_string };#define lp_vfs_options __ERROR_please_donot_use_lp_vfs_options_anymore_use_lp_parm_xxxx_functions_instead { \ __ERROR_please_donot_use_lp_vfs_options_anymore_use_lp_parm_xxxx_functions_instead };/* All intercepted VFS operations must be declared as static functions inside module source in order to keep smbd namespace unpolluted. See source of audit, extd_audit, fake_perms and recycle example VFS modules for more details.*//* VFS operations structure */struct vfs_handle_struct;struct connection_struct;struct files_struct;struct security_descriptor_info;struct vfs_statvfs_struct;/* Available VFS operations. These values must be in sync with vfs_ops struct (struct vfs_fn_pointers and struct vfs_handle_pointers inside of struct vfs_ops). 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.*/typedef enum _vfs_op_type { SMB_VFS_OP_NOOP = -1, /* Disk operations */ SMB_VFS_OP_CONNECT = 0, SMB_VFS_OP_DISCONNECT, SMB_VFS_OP_DISK_FREE, SMB_VFS_OP_GET_QUOTA, SMB_VFS_OP_SET_QUOTA, SMB_VFS_OP_GET_SHADOW_COPY_DATA, SMB_VFS_OP_STATVFS, /* Directory operations */ SMB_VFS_OP_OPENDIR, SMB_VFS_OP_READDIR, SMB_VFS_OP_SEEKDIR, SMB_VFS_OP_TELLDIR, SMB_VFS_OP_REWINDDIR, SMB_VFS_OP_MKDIR, SMB_VFS_OP_RMDIR, SMB_VFS_OP_CLOSEDIR, /* File operations */ SMB_VFS_OP_OPEN, SMB_VFS_OP_CLOSE, SMB_VFS_OP_READ, SMB_VFS_OP_PREAD, SMB_VFS_OP_WRITE, SMB_VFS_OP_PWRITE, SMB_VFS_OP_LSEEK, SMB_VFS_OP_SENDFILE, SMB_VFS_OP_RENAME, SMB_VFS_OP_FSYNC, SMB_VFS_OP_STAT, SMB_VFS_OP_FSTAT, SMB_VFS_OP_LSTAT, SMB_VFS_OP_UNLINK, SMB_VFS_OP_CHMOD, SMB_VFS_OP_FCHMOD, SMB_VFS_OP_CHOWN, SMB_VFS_OP_FCHOWN, SMB_VFS_OP_CHDIR, SMB_VFS_OP_GETWD, SMB_VFS_OP_UTIME, SMB_VFS_OP_FTRUNCATE, SMB_VFS_OP_LOCK, SMB_VFS_OP_SYMLINK, SMB_VFS_OP_READLINK, SMB_VFS_OP_LINK, SMB_VFS_OP_MKNOD, SMB_VFS_OP_REALPATH, /* NT ACL operations. */ SMB_VFS_OP_FGET_NT_ACL, SMB_VFS_OP_GET_NT_ACL, SMB_VFS_OP_FSET_NT_ACL, SMB_VFS_OP_SET_NT_ACL, /* POSIX ACL operations. */ SMB_VFS_OP_CHMOD_ACL, SMB_VFS_OP_FCHMOD_ACL, SMB_VFS_OP_SYS_ACL_GET_ENTRY, SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE, SMB_VFS_OP_SYS_ACL_GET_PERMSET, SMB_VFS_OP_SYS_ACL_GET_QUALIFIER, SMB_VFS_OP_SYS_ACL_GET_FILE, SMB_VFS_OP_SYS_ACL_GET_FD, SMB_VFS_OP_SYS_ACL_CLEAR_PERMS, SMB_VFS_OP_SYS_ACL_ADD_PERM, SMB_VFS_OP_SYS_ACL_TO_TEXT, SMB_VFS_OP_SYS_ACL_INIT, SMB_VFS_OP_SYS_ACL_CREATE_ENTRY, SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE, SMB_VFS_OP_SYS_ACL_SET_QUALIFIER, SMB_VFS_OP_SYS_ACL_SET_PERMSET, SMB_VFS_OP_SYS_ACL_VALID, SMB_VFS_OP_SYS_ACL_SET_FILE, SMB_VFS_OP_SYS_ACL_SET_FD, SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE, SMB_VFS_OP_SYS_ACL_GET_PERM, SMB_VFS_OP_SYS_ACL_FREE_TEXT, SMB_VFS_OP_SYS_ACL_FREE_ACL, SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER, /* EA operations. */ SMB_VFS_OP_GETXATTR, SMB_VFS_OP_LGETXATTR, SMB_VFS_OP_FGETXATTR, SMB_VFS_OP_LISTXATTR, SMB_VFS_OP_LLISTXATTR, SMB_VFS_OP_FLISTXATTR, SMB_VFS_OP_REMOVEXATTR, SMB_VFS_OP_LREMOVEXATTR, SMB_VFS_OP_FREMOVEXATTR, SMB_VFS_OP_SETXATTR, SMB_VFS_OP_LSETXATTR, SMB_VFS_OP_FSETXATTR, /* aio operations */ SMB_VFS_OP_AIO_READ, SMB_VFS_OP_AIO_WRITE, SMB_VFS_OP_AIO_RETURN, SMB_VFS_OP_AIO_CANCEL, SMB_VFS_OP_AIO_ERROR, SMB_VFS_OP_AIO_FSYNC, SMB_VFS_OP_AIO_SUSPEND, /* This should always be last enum value */ SMB_VFS_OP_LAST} vfs_op_type;/* Please keep vfs_op_type, struct vfs_fn_pointers and struct vfs_handles_pointers in sync.*/struct vfs_ops { struct vfs_fn_pointers { /* Disk operations */ int (*connect_fn)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *service, const char *user); void (*disconnect)(struct vfs_handle_struct *handle, struct connection_struct *conn); SMB_BIG_UINT (*disk_free)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, BOOL small_query, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize); int (*get_quota)(struct vfs_handle_struct *handle, struct connection_struct *conn, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt); int (*set_quota)(struct vfs_handle_struct *handle, struct connection_struct *conn, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt); int (*get_shadow_copy_data)(struct vfs_handle_struct *handle, struct files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, BOOL labels); int (*statvfs)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, struct vfs_statvfs_struct *statbuf); /* Directory operations */ SMB_STRUCT_DIR *(*opendir)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *fname, const char *mask, uint32 attributes); SMB_STRUCT_DIRENT *(*readdir)(struct vfs_handle_struct *handle, struct connection_struct *conn, SMB_STRUCT_DIR *dirp); void (*seekdir)(struct vfs_handle_struct *handle, struct connection_struct *conn, SMB_STRUCT_DIR *dirp, long offset); long (*telldir)(struct vfs_handle_struct *handle, struct connection_struct *conn, SMB_STRUCT_DIR *dirp); void (*rewind_dir)(struct vfs_handle_struct *handle, struct connection_struct *conn, SMB_STRUCT_DIR *dirp); int (*mkdir)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, mode_t mode); int (*rmdir)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path); int (*closedir)(struct vfs_handle_struct *handle, struct connection_struct *conn, SMB_STRUCT_DIR *dir); /* File operations */ int (*open)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *fname, int flags, mode_t mode); int (*close_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd); ssize_t (*read)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, void *data, size_t n); ssize_t (*pread)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, void *data, size_t n, SMB_OFF_T offset); ssize_t (*write)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, const void *data, size_t n); ssize_t (*pwrite)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, const void *data, size_t n, SMB_OFF_T offset); SMB_OFF_T (*lseek)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_OFF_T offset, int whence); ssize_t (*sendfile)(struct vfs_handle_struct *handle, int tofd, files_struct *fsp, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count); int (*rename)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *oldname, const char *newname); int (*fsync)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd); int (*stat)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *fname, SMB_STRUCT_STAT *sbuf); int (*fstat)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_STRUCT_STAT *sbuf); int (*lstat)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, SMB_STRUCT_STAT *sbuf); int (*unlink)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path); int (*chmod)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, mode_t mode); int (*fchmod)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, mode_t mode); int (*chown)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, uid_t uid, gid_t gid); int (*fchown)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, uid_t uid, gid_t gid); int (*chdir)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path); char *(*getwd)(struct vfs_handle_struct *handle, struct connection_struct *conn, char *buf); int (*utime)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, struct utimbuf *times); int (*ftruncate)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_OFF_T offset); BOOL (*lock)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type); int (*symlink)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *oldpath, const char *newpath); int (*readlink)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, char *buf, size_t bufsiz); int (*link)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *oldpath, const char *newpath); int (*mknod)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, mode_t mode, SMB_DEV_T dev); char *(*realpath)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, char *resolved_path); /* NT ACL operations. */ size_t (*fget_nt_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, uint32 security_info, struct security_descriptor_info **ppdesc); size_t (*get_nt_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, uint32 security_info, struct security_descriptor_info **ppdesc); BOOL (*fset_nt_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, uint32 security_info_sent, struct security_descriptor_info *psd); BOOL (*set_nt_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, uint32 security_info_sent, struct security_descriptor_info *psd); /* POSIX ACL operations. */ int (*chmod_acl)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *name, mode_t mode); int (*fchmod_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, mode_t mode); int (*sys_acl_get_entry)(struct vfs_handle_struct *handle, struct connection_struct *conn, SMB_ACL_T theacl, int entry_id, SMB_ACL_ENTRY_T *entry_p);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -