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 /* Types used in the definition of VFS operations. These are included
26 here so the vfs.h file can be included by VFS modules without
27 having to pull in unnecessary amounts of other stuff. Note to VFS
28 writers: you must include config.h before including this file.
29 The following type definitions reference the HAVE_* symbols which
30 are defined in config.h */
34 # define SMB_OFF_T off64_t
36 # define SMB_OFF_T off_t
40 #ifndef SMB_STRUCT_STAT
41 # if defined(HAVE_STAT64) && defined(HAVE_OFF64_T)
42 # define SMB_STRUCT_STAT struct stat64
44 # define SMB_STRUCT_STAT struct stat
53 #define PSTRING_LEN 1024
54 #define FSTRING_LEN 128
56 typedef char pstring[PSTRING_LEN];
57 typedef char fstring[FSTRING_LEN];
61 #if defined(HAVE_LONGLONG)
62 #define SMB_BIG_UINT unsigned long long
64 #define SMB_BIG_UINT unsigned long
68 #define MAXSUBAUTHS 15 /* max sub authorities in a SID */
72 #define uint8 unsigned char
75 #if !defined(uint32) && !defined(HAVE_UINT32_FROM_RPC_RPC_H)
77 #define uint32 unsigned int
78 #elif (SIZEOF_LONG == 4)
79 #define uint32 unsigned long
80 #elif (SIZEOF_SHORT == 4)
81 #define uint32 unsigned short
86 /* DOM_SID - security id */
87 typedef struct sid_info
89 uint8 sid_rev_num; /* SID revision number */
90 uint8 num_auths; /* number of sub-authorities */
91 uint8 id_auth[6]; /* Identifier Authority */
93 * Note that the values in these uint32's are in *native* byteorder,
94 * not neccessarily little-endian...... JRA.
96 uint32 sub_auths[MAXSUBAUTHS]; /* pointer to sub-authorities. */
104 typedef struct security_info_info
114 typedef struct security_ace_info
116 uint8 type; /* xxxx_xxxx_ACE_TYPE - e.g allowed / denied etc */
117 uint8 flags; /* xxxx_INHERIT_xxxx - e.g OBJECT_INHERIT_ACE */
128 #define ACL_REVISION 0x3
133 typedef struct security_acl_info
135 uint16 revision; /* 0x0003 */
136 uint16 size; /* size in bytes of the entire ACL structure */
137 uint32 num_aces; /* number of Access Control Entries */
145 #ifndef SEC_DESC_REVISION
146 #define SEC_DESC_REVISION 0x1
151 typedef struct security_descriptor_info
153 uint16 revision; /* 0x0001 */
154 uint16 type; /* SEC_DESC_xxxx flags */
156 uint32 off_owner_sid; /* offset to owner sid */
157 uint32 off_grp_sid ; /* offset to group sid */
158 uint32 off_sacl ; /* offset to system list of permissions */
159 uint32 off_dacl ; /* offset to list of permissions */
161 SEC_ACL *dacl; /* user ACL */
162 SEC_ACL *sacl; /* system ACL */
171 * The complete list of SIDS belonging to this user.
172 * Created when a vuid is registered.
175 #ifndef _NT_USER_TOKEN
176 typedef struct _nt_user_token {
180 #define _NT_USER_TOKEN
183 /* Avoid conflict with an AIX include file */
189 /* Information from the connection_struct passed to the vfs layer */
191 struct vfs_connection_struct {
193 /* Connection information */
200 /* Handle on dlopen() call */
211 /* Information on user who *opened* this connection */
218 NT_USER_TOKEN *nt_user_token;
221 /* VFS operations structure */
225 /* Disk operations */
227 int (*connect)(struct vfs_connection_struct *conn, char *service, char *user);
228 void (*disconnect)(void);
229 SMB_BIG_UINT (*disk_free)(char *path, BOOL small_query, SMB_BIG_UINT *bsize,
230 SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize);
232 /* Directory operations */
234 DIR *(*opendir)(char *fname);
235 struct dirent *(*readdir)(DIR *dirp);
236 int (*mkdir)(char *path, mode_t mode);
237 int (*rmdir)(char *path);
238 int (*closedir)(DIR *dir);
240 /* File operations */
242 int (*open)(char *fname, int flags, mode_t mode);
243 int (*close)(int fd);
244 ssize_t (*read)(int fd, char *data, size_t n);
245 ssize_t (*write)(int fd, char *data, size_t n);
246 SMB_OFF_T (*lseek)(int filedes, SMB_OFF_T offset, int whence);
247 int (*rename)(char *old, char *new);
248 int (*fsync)(int fd);
249 int (*stat)(char *fname, SMB_STRUCT_STAT *sbuf);
250 int (*fstat)(int fd, SMB_STRUCT_STAT *sbuf);
251 int (*lstat)(char *path, SMB_STRUCT_STAT *sbuf);
252 int (*unlink)(char *path);
253 int (*chmod)(char *path, mode_t mode);
254 int (*chown)(char *path, uid_t uid, gid_t gid);
255 int (*chdir)(char *path);
256 char *(*getwd)(char *buf);
257 int (*utime)(char *path, struct utimbuf *times);
258 int (*ftruncate)(int fd, SMB_OFF_T offset);
259 BOOL (*lock)(int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type);
261 size_t (*fget_nt_acl)(int fd, SEC_DESC **ppdesc);
262 size_t (*get_nt_acl)(char *name, SEC_DESC **ppdesc);
263 BOOL (*fset_nt_acl)(int fd, uint32 security_info_sent, SEC_DESC *psd);
264 BOOL (*set_nt_acl)(char *name, uint32 security_info_sent, SEC_DESC *psd);
268 struct vfs_options *prev, *next;