2 Unix SMB/Netbios implementation.
4 VFS structures and parameters
5 Copyright (C) Tim Potter 1999
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 /* Avoid conflict with an AIX include file */
32 * As we're now (thanks Andrew ! :-) using file_structs and connection
33 * structs in the vfs - then anyone writing a vfs must include includes.h...
37 * This next constant specifies the version number of the VFS interface
38 * this smbd will load. Increment this if *ANY* changes are made to the
42 /* Changed to version 2 for CIFS UNIX extensions (mknod and link added). JRA. */
43 #define SMB_VFS_INTERFACE_VERSION 2
45 /* VFS operations structure */
47 struct connection_struct
;
49 struct security_descriptor_info
;
55 int (*connect
)(struct connection_struct
*conn
, char *service
, char *user
);
56 void (*disconnect
)(struct connection_struct
*conn
);
57 SMB_BIG_UINT (*disk_free
)(struct connection_struct
*conn
, char *path
, BOOL small_query
, SMB_BIG_UINT
*bsize
,
58 SMB_BIG_UINT
*dfree
, SMB_BIG_UINT
*dsize
);
60 /* Directory operations */
62 DIR *(*opendir
)(struct connection_struct
*conn
, char *fname
);
63 struct dirent
*(*readdir
)(struct connection_struct
*conn
, DIR *dirp
);
64 int (*mkdir
)(struct connection_struct
*conn
, char *path
, mode_t mode
);
65 int (*rmdir
)(struct connection_struct
*conn
, char *path
);
66 int (*closedir
)(struct connection_struct
*conn
, DIR *dir
);
70 int (*open
)(struct connection_struct
*conn
, char *fname
, int flags
, mode_t mode
);
71 int (*close
)(struct files_struct
*fsp
, int fd
);
72 ssize_t (*read
)(struct files_struct
*fsp
, int fd
, void *data
, size_t n
);
73 ssize_t (*write
)(struct files_struct
*fsp
, int fd
, const void *data
, size_t n
);
74 SMB_OFF_T (*lseek
)(struct files_struct
*fsp
, int filedes
, SMB_OFF_T offset
, int whence
);
75 int (*rename
)(struct connection_struct
*conn
, char *old
, char *new);
76 int (*fsync
)(struct files_struct
*fsp
, int fd
);
77 int (*stat
)(struct connection_struct
*conn
, char *fname
, SMB_STRUCT_STAT
*sbuf
);
78 int (*fstat
)(struct files_struct
*fsp
, int fd
, SMB_STRUCT_STAT
*sbuf
);
79 int (*lstat
)(struct connection_struct
*conn
, char *path
, SMB_STRUCT_STAT
*sbuf
);
80 int (*unlink
)(struct connection_struct
*conn
, char *path
);
81 int (*chmod
)(struct connection_struct
*conn
, char *path
, mode_t mode
);
82 int (*fchmod
)(struct files_struct
*fsp
, int fd
, mode_t mode
);
83 int (*chown
)(struct connection_struct
*conn
, char *path
, uid_t uid
, gid_t gid
);
84 int (*fchown
)(struct files_struct
*fsp
, int fd
, uid_t uid
, gid_t gid
);
85 int (*chdir
)(struct connection_struct
*conn
, char *path
);
86 char *(*getwd
)(struct connection_struct
*conn
, char *buf
);
87 int (*utime
)(struct connection_struct
*conn
, char *path
, struct utimbuf
*times
);
88 int (*ftruncate
)(struct files_struct
*fsp
, int fd
, SMB_OFF_T offset
);
89 BOOL (*lock
)(struct files_struct
*fsp
, int fd
, int op
, SMB_OFF_T offset
, SMB_OFF_T count
, int type
);
90 int (*symlink
)(struct connection_struct
*conn
, const char *oldpath
, const char *newpath
);
91 int (*readlink
)(struct connection_struct
*conn
, const char *path
, char *buf
, size_t bufsiz
);
92 int (*link
)(struct connection_struct
*conn
, const char *oldpath
, const char *newpath
);
93 int (*mknod
)(struct connection_struct
*conn
, const char *path
, mode_t mode
, SMB_DEV_T dev
);
94 char *(*realpath
)(struct connection_struct
*conn
, const char *path
, char *resolved_path
);
96 /* NT ACL operations. */
98 size_t (*fget_nt_acl
)(struct files_struct
*fsp
, int fd
, struct security_descriptor_info
**ppdesc
);
99 size_t (*get_nt_acl
)(struct files_struct
*fsp
, char *name
, struct security_descriptor_info
**ppdesc
);
100 BOOL (*fset_nt_acl
)(struct files_struct
*fsp
, int fd
, uint32 security_info_sent
, struct security_descriptor_info
*psd
);
101 BOOL (*set_nt_acl
)(struct files_struct
*fsp
, char *name
, uint32 security_info_sent
, struct security_descriptor_info
*psd
);
103 /* POSIX ACL operations. */
105 int (*chmod_acl
)(struct connection_struct
*conn
, char *name
, mode_t mode
);
106 int (*fchmod_acl
)(struct files_struct
*fsp
, int fd
, mode_t mode
);
111 struct vfs_options
*prev
, *next
;