2 * Auditing VFS module for samba. Log selected file operations to syslog
5 * Copyright (C) Tim Potter, 1999-2000
6 * Copyright (C) Alexander Bokovoy, 2002
7 * Copyright (C) John H Terpstra, 2003
8 * Copyright (C) Stefan (metze) Metzmacher, 2003
9 * Copyright (C) Volker Lendecke, 2004
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 * This module implements parseable logging for all Samba VFS operations.
29 * You use it as follows:
33 * vfs objects = full_audit
34 * full_audit:prefix = %u|%I
35 * full_audit:success = open opendir
36 * full_audit:failure = all
38 * This leads to syslog entries of the form:
39 * smbd_audit: nobody|192.168.234.1|opendir|ok|.
40 * smbd_audit: nobody|192.168.234.1|open|fail (File not found)|r|x.txt
42 * where "nobody" is the connected username and "192.168.234.1" is the
43 * client's IP address.
47 * prefix: A macro expansion template prepended to the syslog entry.
49 * success: A list of VFS operations for which a successful completion should
50 * be logged. Defaults to no logging at all. The special operation "all" logs
51 * - you guessed it - everything.
53 * failure: A list of VFS operations for which failure to complete should be
54 * logged. Defaults to logging everything.
60 extern struct current_user current_user
;
62 static int vfs_full_audit_debug_level
= DBGC_VFS
;
65 #define DBGC_CLASS vfs_full_audit_debug_level
67 /* Function prototypes */
69 static int smb_full_audit_connect(vfs_handle_struct
*handle
, connection_struct
*conn
,
70 const char *svc
, const char *user
);
71 static void smb_full_audit_disconnect(vfs_handle_struct
*handle
,
72 connection_struct
*conn
);
73 static SMB_BIG_UINT
smb_full_audit_disk_free(vfs_handle_struct
*handle
,
74 connection_struct
*conn
, const char *path
,
75 BOOL small_query
, SMB_BIG_UINT
*bsize
,
76 SMB_BIG_UINT
*dfree
, SMB_BIG_UINT
*dsize
);
77 static int smb_full_audit_get_quota(struct vfs_handle_struct
*handle
,
78 struct connection_struct
*conn
,
79 enum SMB_QUOTA_TYPE qtype
, unid_t id
,
81 static int smb_full_audit_set_quota(struct vfs_handle_struct
*handle
,
82 struct connection_struct
*conn
,
83 enum SMB_QUOTA_TYPE qtype
, unid_t id
,
85 static int smb_full_audit_get_shadow_copy_data(struct vfs_handle_struct
*handle
,
86 struct files_struct
*fsp
,
87 SHADOW_COPY_DATA
*shadow_copy_data
, BOOL labels
);
89 static SMB_STRUCT_DIR
*smb_full_audit_opendir(vfs_handle_struct
*handle
, connection_struct
*conn
,
90 const char *fname
, const char *mask
, uint32 attr
);
91 static SMB_STRUCT_DIRENT
*smb_full_audit_readdir(vfs_handle_struct
*handle
,
92 connection_struct
*conn
, SMB_STRUCT_DIR
*dirp
);
93 static void smb_full_audit_seekdir(vfs_handle_struct
*handle
, connection_struct
*conn
,
94 SMB_STRUCT_DIR
*dirp
, long offset
);
95 static long smb_full_audit_telldir(vfs_handle_struct
*handle
, connection_struct
*conn
,
96 SMB_STRUCT_DIR
*dirp
);
97 static void smb_full_audit_rewinddir(vfs_handle_struct
*handle
, connection_struct
*conn
,
98 SMB_STRUCT_DIR
*dirp
);
99 static int smb_full_audit_mkdir(vfs_handle_struct
*handle
, connection_struct
*conn
,
100 const char *path
, mode_t mode
);
101 static int smb_full_audit_rmdir(vfs_handle_struct
*handle
, connection_struct
*conn
,
103 static int smb_full_audit_closedir(vfs_handle_struct
*handle
, connection_struct
*conn
,
104 SMB_STRUCT_DIR
*dirp
);
105 static int smb_full_audit_open(vfs_handle_struct
*handle
, connection_struct
*conn
,
106 const char *fname
, int flags
, mode_t mode
);
107 static int smb_full_audit_close(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
);
108 static ssize_t
smb_full_audit_read(vfs_handle_struct
*handle
, files_struct
*fsp
,
109 int fd
, void *data
, size_t n
);
110 static ssize_t
smb_full_audit_pread(vfs_handle_struct
*handle
, files_struct
*fsp
,
111 int fd
, void *data
, size_t n
, SMB_OFF_T offset
);
112 static ssize_t
smb_full_audit_write(vfs_handle_struct
*handle
, files_struct
*fsp
,
113 int fd
, const void *data
, size_t n
);
114 static ssize_t
smb_full_audit_pwrite(vfs_handle_struct
*handle
, files_struct
*fsp
,
115 int fd
, const void *data
, size_t n
,
117 static SMB_OFF_T
smb_full_audit_lseek(vfs_handle_struct
*handle
, files_struct
*fsp
,
118 int filedes
, SMB_OFF_T offset
, int whence
);
119 static ssize_t
smb_full_audit_sendfile(vfs_handle_struct
*handle
, int tofd
,
120 files_struct
*fsp
, int fromfd
,
121 const DATA_BLOB
*hdr
, SMB_OFF_T offset
,
123 static int smb_full_audit_rename(vfs_handle_struct
*handle
, connection_struct
*conn
,
124 const char *oldname
, const char *newname
);
125 static int smb_full_audit_fsync(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
);
126 static int smb_full_audit_stat(vfs_handle_struct
*handle
, connection_struct
*conn
,
127 const char *fname
, SMB_STRUCT_STAT
*sbuf
);
128 static int smb_full_audit_fstat(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
,
129 SMB_STRUCT_STAT
*sbuf
);
130 static int smb_full_audit_lstat(vfs_handle_struct
*handle
, connection_struct
*conn
,
131 const char *path
, SMB_STRUCT_STAT
*sbuf
);
132 static int smb_full_audit_unlink(vfs_handle_struct
*handle
, connection_struct
*conn
,
134 static int smb_full_audit_chmod(vfs_handle_struct
*handle
, connection_struct
*conn
,
135 const char *path
, mode_t mode
);
136 static int smb_full_audit_fchmod(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
,
138 static int smb_full_audit_chown(vfs_handle_struct
*handle
, connection_struct
*conn
,
139 const char *path
, uid_t uid
, gid_t gid
);
140 static int smb_full_audit_fchown(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
,
141 uid_t uid
, gid_t gid
);
142 static int smb_full_audit_chdir(vfs_handle_struct
*handle
, connection_struct
*conn
,
144 static char *smb_full_audit_getwd(vfs_handle_struct
*handle
, connection_struct
*conn
,
146 static int smb_full_audit_utime(vfs_handle_struct
*handle
, connection_struct
*conn
,
147 const char *path
, struct utimbuf
*times
);
148 static int smb_full_audit_ftruncate(vfs_handle_struct
*handle
, files_struct
*fsp
,
149 int fd
, SMB_OFF_T len
);
150 static BOOL
smb_full_audit_lock(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
,
151 int op
, SMB_OFF_T offset
, SMB_OFF_T count
, int type
);
152 static int smb_full_audit_symlink(vfs_handle_struct
*handle
, connection_struct
*conn
,
153 const char *oldpath
, const char *newpath
);
154 static int smb_full_audit_readlink(vfs_handle_struct
*handle
, connection_struct
*conn
,
155 const char *path
, char *buf
, size_t bufsiz
);
156 static int smb_full_audit_link(vfs_handle_struct
*handle
, connection_struct
*conn
,
157 const char *oldpath
, const char *newpath
);
158 static int smb_full_audit_mknod(vfs_handle_struct
*handle
, connection_struct
*conn
,
159 const char *pathname
, mode_t mode
, SMB_DEV_T dev
);
160 static char *smb_full_audit_realpath(vfs_handle_struct
*handle
, connection_struct
*conn
,
161 const char *path
, char *resolved_path
);
162 static size_t smb_full_audit_fget_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
,
163 int fd
, uint32 security_info
,
165 static size_t smb_full_audit_get_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
,
166 const char *name
, uint32 security_info
,
168 static BOOL
smb_full_audit_fset_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
,
169 int fd
, uint32 security_info_sent
,
171 static BOOL
smb_full_audit_set_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
,
172 const char *name
, uint32 security_info_sent
,
174 static int smb_full_audit_chmod_acl(vfs_handle_struct
*handle
, connection_struct
*conn
,
175 const char *path
, mode_t mode
);
176 static int smb_full_audit_fchmod_acl(vfs_handle_struct
*handle
, files_struct
*fsp
,
177 int fd
, mode_t mode
);
178 static int smb_full_audit_sys_acl_get_entry(vfs_handle_struct
*handle
,
179 connection_struct
*conn
,
180 SMB_ACL_T theacl
, int entry_id
,
181 SMB_ACL_ENTRY_T
*entry_p
);
182 static int smb_full_audit_sys_acl_get_tag_type(vfs_handle_struct
*handle
,
183 connection_struct
*conn
,
184 SMB_ACL_ENTRY_T entry_d
,
185 SMB_ACL_TAG_T
*tag_type_p
);
186 static int smb_full_audit_sys_acl_get_permset(vfs_handle_struct
*handle
,
187 connection_struct
*conn
,
188 SMB_ACL_ENTRY_T entry_d
,
189 SMB_ACL_PERMSET_T
*permset_p
);
190 static void * smb_full_audit_sys_acl_get_qualifier(vfs_handle_struct
*handle
,
191 connection_struct
*conn
,
192 SMB_ACL_ENTRY_T entry_d
);
193 static SMB_ACL_T
smb_full_audit_sys_acl_get_file(vfs_handle_struct
*handle
,
194 connection_struct
*conn
,
196 SMB_ACL_TYPE_T type
);
197 static SMB_ACL_T
smb_full_audit_sys_acl_get_fd(vfs_handle_struct
*handle
,
200 static int smb_full_audit_sys_acl_clear_perms(vfs_handle_struct
*handle
,
201 connection_struct
*conn
,
202 SMB_ACL_PERMSET_T permset
);
203 static int smb_full_audit_sys_acl_add_perm(vfs_handle_struct
*handle
,
204 connection_struct
*conn
,
205 SMB_ACL_PERMSET_T permset
,
206 SMB_ACL_PERM_T perm
);
207 static char * smb_full_audit_sys_acl_to_text(vfs_handle_struct
*handle
,
208 connection_struct
*conn
, SMB_ACL_T theacl
,
210 static SMB_ACL_T
smb_full_audit_sys_acl_init(vfs_handle_struct
*handle
,
211 connection_struct
*conn
,
213 static int smb_full_audit_sys_acl_create_entry(vfs_handle_struct
*handle
,
214 connection_struct
*conn
, SMB_ACL_T
*pacl
,
215 SMB_ACL_ENTRY_T
*pentry
);
216 static int smb_full_audit_sys_acl_set_tag_type(vfs_handle_struct
*handle
,
217 connection_struct
*conn
,
218 SMB_ACL_ENTRY_T entry
,
219 SMB_ACL_TAG_T tagtype
);
220 static int smb_full_audit_sys_acl_set_qualifier(vfs_handle_struct
*handle
,
221 connection_struct
*conn
,
222 SMB_ACL_ENTRY_T entry
,
224 static int smb_full_audit_sys_acl_set_permset(vfs_handle_struct
*handle
,
225 connection_struct
*conn
,
226 SMB_ACL_ENTRY_T entry
,
227 SMB_ACL_PERMSET_T permset
);
228 static int smb_full_audit_sys_acl_valid(vfs_handle_struct
*handle
,
229 connection_struct
*conn
,
231 static int smb_full_audit_sys_acl_set_file(vfs_handle_struct
*handle
,
232 connection_struct
*conn
,
233 const char *name
, SMB_ACL_TYPE_T acltype
,
235 static int smb_full_audit_sys_acl_set_fd(vfs_handle_struct
*handle
, files_struct
*fsp
,
236 int fd
, SMB_ACL_T theacl
);
237 static int smb_full_audit_sys_acl_delete_def_file(vfs_handle_struct
*handle
,
238 connection_struct
*conn
,
240 static int smb_full_audit_sys_acl_get_perm(vfs_handle_struct
*handle
,
241 connection_struct
*conn
,
242 SMB_ACL_PERMSET_T permset
,
243 SMB_ACL_PERM_T perm
);
244 static int smb_full_audit_sys_acl_free_text(vfs_handle_struct
*handle
,
245 connection_struct
*conn
,
247 static int smb_full_audit_sys_acl_free_acl(vfs_handle_struct
*handle
,
248 connection_struct
*conn
,
249 SMB_ACL_T posix_acl
);
250 static int smb_full_audit_sys_acl_free_qualifier(vfs_handle_struct
*handle
,
251 connection_struct
*conn
,
253 SMB_ACL_TAG_T tagtype
);
254 static ssize_t
smb_full_audit_getxattr(struct vfs_handle_struct
*handle
,
255 struct connection_struct
*conn
, const char *path
,
256 const char *name
, void *value
, size_t size
);
257 static ssize_t
smb_full_audit_lgetxattr(struct vfs_handle_struct
*handle
,
258 struct connection_struct
*conn
,
259 const char *path
, const char *name
,
260 void *value
, size_t size
);
261 static ssize_t
smb_full_audit_fgetxattr(struct vfs_handle_struct
*handle
,
262 struct files_struct
*fsp
, int fd
,
263 const char *name
, void *value
, size_t size
);
264 static ssize_t
smb_full_audit_listxattr(struct vfs_handle_struct
*handle
,
265 struct connection_struct
*conn
,
266 const char *path
, char *list
, size_t size
);
267 static ssize_t
smb_full_audit_llistxattr(struct vfs_handle_struct
*handle
,
268 struct connection_struct
*conn
,
269 const char *path
, char *list
, size_t size
);
270 static ssize_t
smb_full_audit_flistxattr(struct vfs_handle_struct
*handle
,
271 struct files_struct
*fsp
, int fd
, char *list
,
273 static int smb_full_audit_removexattr(struct vfs_handle_struct
*handle
,
274 struct connection_struct
*conn
, const char *path
,
276 static int smb_full_audit_lremovexattr(struct vfs_handle_struct
*handle
,
277 struct connection_struct
*conn
, const char *path
,
279 static int smb_full_audit_fremovexattr(struct vfs_handle_struct
*handle
,
280 struct files_struct
*fsp
, int fd
,
282 static int smb_full_audit_setxattr(struct vfs_handle_struct
*handle
,
283 struct connection_struct
*conn
, const char *path
,
284 const char *name
, const void *value
, size_t size
,
286 static int smb_full_audit_lsetxattr(struct vfs_handle_struct
*handle
,
287 struct connection_struct
*conn
, const char *path
,
288 const char *name
, const void *value
, size_t size
,
290 static int smb_full_audit_fsetxattr(struct vfs_handle_struct
*handle
,
291 struct files_struct
*fsp
, int fd
, const char *name
,
292 const void *value
, size_t size
, int flags
);
294 static int smb_full_audit_aio_read(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
);
295 static int smb_full_audit_aio_write(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
);
296 static ssize_t
smb_full_audit_aio_return(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
);
297 static int smb_full_audit_aio_cancel(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, int fd
, SMB_STRUCT_AIOCB
*aiocb
);
298 static int smb_full_audit_aio_error(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
);
299 static int smb_full_audit_aio_fsync(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, int op
, SMB_STRUCT_AIOCB
*aiocb
);
300 static int smb_full_audit_aio_suspend(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, const SMB_STRUCT_AIOCB
* const aiocb
[], int n
, const struct timespec
*ts
);
304 static vfs_op_tuple audit_op_tuples
[] = {
306 /* Disk operations */
308 {SMB_VFS_OP(smb_full_audit_connect
), SMB_VFS_OP_CONNECT
,
309 SMB_VFS_LAYER_LOGGER
},
310 {SMB_VFS_OP(smb_full_audit_disconnect
), SMB_VFS_OP_DISCONNECT
,
311 SMB_VFS_LAYER_LOGGER
},
312 {SMB_VFS_OP(smb_full_audit_disk_free
), SMB_VFS_OP_DISK_FREE
,
313 SMB_VFS_LAYER_LOGGER
},
314 {SMB_VFS_OP(smb_full_audit_get_quota
), SMB_VFS_OP_GET_QUOTA
,
315 SMB_VFS_LAYER_LOGGER
},
316 {SMB_VFS_OP(smb_full_audit_set_quota
), SMB_VFS_OP_SET_QUOTA
,
317 SMB_VFS_LAYER_LOGGER
},
318 {SMB_VFS_OP(smb_full_audit_get_shadow_copy_data
), SMB_VFS_OP_GET_SHADOW_COPY_DATA
,
319 SMB_VFS_LAYER_LOGGER
},
321 /* Directory operations */
323 {SMB_VFS_OP(smb_full_audit_opendir
), SMB_VFS_OP_OPENDIR
,
324 SMB_VFS_LAYER_LOGGER
},
325 {SMB_VFS_OP(smb_full_audit_readdir
), SMB_VFS_OP_READDIR
,
326 SMB_VFS_LAYER_LOGGER
},
327 {SMB_VFS_OP(smb_full_audit_seekdir
), SMB_VFS_OP_SEEKDIR
,
328 SMB_VFS_LAYER_LOGGER
},
329 {SMB_VFS_OP(smb_full_audit_telldir
), SMB_VFS_OP_TELLDIR
,
330 SMB_VFS_LAYER_LOGGER
},
331 {SMB_VFS_OP(smb_full_audit_rewinddir
), SMB_VFS_OP_REWINDDIR
,
332 SMB_VFS_LAYER_LOGGER
},
333 {SMB_VFS_OP(smb_full_audit_mkdir
), SMB_VFS_OP_MKDIR
,
334 SMB_VFS_LAYER_LOGGER
},
335 {SMB_VFS_OP(smb_full_audit_rmdir
), SMB_VFS_OP_RMDIR
,
336 SMB_VFS_LAYER_LOGGER
},
337 {SMB_VFS_OP(smb_full_audit_closedir
), SMB_VFS_OP_CLOSEDIR
,
338 SMB_VFS_LAYER_LOGGER
},
340 /* File operations */
342 {SMB_VFS_OP(smb_full_audit_open
), SMB_VFS_OP_OPEN
,
343 SMB_VFS_LAYER_LOGGER
},
344 {SMB_VFS_OP(smb_full_audit_close
), SMB_VFS_OP_CLOSE
,
345 SMB_VFS_LAYER_LOGGER
},
346 {SMB_VFS_OP(smb_full_audit_read
), SMB_VFS_OP_READ
,
347 SMB_VFS_LAYER_LOGGER
},
348 {SMB_VFS_OP(smb_full_audit_pread
), SMB_VFS_OP_PREAD
,
349 SMB_VFS_LAYER_LOGGER
},
350 {SMB_VFS_OP(smb_full_audit_write
), SMB_VFS_OP_WRITE
,
351 SMB_VFS_LAYER_LOGGER
},
352 {SMB_VFS_OP(smb_full_audit_pwrite
), SMB_VFS_OP_PWRITE
,
353 SMB_VFS_LAYER_LOGGER
},
354 {SMB_VFS_OP(smb_full_audit_lseek
), SMB_VFS_OP_LSEEK
,
355 SMB_VFS_LAYER_LOGGER
},
356 {SMB_VFS_OP(smb_full_audit_sendfile
), SMB_VFS_OP_SENDFILE
,
357 SMB_VFS_LAYER_LOGGER
},
358 {SMB_VFS_OP(smb_full_audit_rename
), SMB_VFS_OP_RENAME
,
359 SMB_VFS_LAYER_LOGGER
},
360 {SMB_VFS_OP(smb_full_audit_fsync
), SMB_VFS_OP_FSYNC
,
361 SMB_VFS_LAYER_LOGGER
},
362 {SMB_VFS_OP(smb_full_audit_stat
), SMB_VFS_OP_STAT
,
363 SMB_VFS_LAYER_LOGGER
},
364 {SMB_VFS_OP(smb_full_audit_fstat
), SMB_VFS_OP_FSTAT
,
365 SMB_VFS_LAYER_LOGGER
},
366 {SMB_VFS_OP(smb_full_audit_lstat
), SMB_VFS_OP_LSTAT
,
367 SMB_VFS_LAYER_LOGGER
},
368 {SMB_VFS_OP(smb_full_audit_unlink
), SMB_VFS_OP_UNLINK
,
369 SMB_VFS_LAYER_LOGGER
},
370 {SMB_VFS_OP(smb_full_audit_chmod
), SMB_VFS_OP_CHMOD
,
371 SMB_VFS_LAYER_LOGGER
},
372 {SMB_VFS_OP(smb_full_audit_fchmod
), SMB_VFS_OP_FCHMOD
,
373 SMB_VFS_LAYER_LOGGER
},
374 {SMB_VFS_OP(smb_full_audit_chown
), SMB_VFS_OP_CHOWN
,
375 SMB_VFS_LAYER_LOGGER
},
376 {SMB_VFS_OP(smb_full_audit_fchown
), SMB_VFS_OP_FCHOWN
,
377 SMB_VFS_LAYER_LOGGER
},
378 {SMB_VFS_OP(smb_full_audit_chdir
), SMB_VFS_OP_CHDIR
,
379 SMB_VFS_LAYER_LOGGER
},
380 {SMB_VFS_OP(smb_full_audit_getwd
), SMB_VFS_OP_GETWD
,
381 SMB_VFS_LAYER_LOGGER
},
382 {SMB_VFS_OP(smb_full_audit_utime
), SMB_VFS_OP_UTIME
,
383 SMB_VFS_LAYER_LOGGER
},
384 {SMB_VFS_OP(smb_full_audit_ftruncate
), SMB_VFS_OP_FTRUNCATE
,
385 SMB_VFS_LAYER_LOGGER
},
386 {SMB_VFS_OP(smb_full_audit_lock
), SMB_VFS_OP_LOCK
,
387 SMB_VFS_LAYER_LOGGER
},
388 {SMB_VFS_OP(smb_full_audit_symlink
), SMB_VFS_OP_SYMLINK
,
389 SMB_VFS_LAYER_LOGGER
},
390 {SMB_VFS_OP(smb_full_audit_readlink
), SMB_VFS_OP_READLINK
,
391 SMB_VFS_LAYER_LOGGER
},
392 {SMB_VFS_OP(smb_full_audit_link
), SMB_VFS_OP_LINK
,
393 SMB_VFS_LAYER_LOGGER
},
394 {SMB_VFS_OP(smb_full_audit_mknod
), SMB_VFS_OP_MKNOD
,
395 SMB_VFS_LAYER_LOGGER
},
396 {SMB_VFS_OP(smb_full_audit_realpath
), SMB_VFS_OP_REALPATH
,
397 SMB_VFS_LAYER_LOGGER
},
399 /* NT ACL operations. */
401 {SMB_VFS_OP(smb_full_audit_fget_nt_acl
), SMB_VFS_OP_FGET_NT_ACL
,
402 SMB_VFS_LAYER_LOGGER
},
403 {SMB_VFS_OP(smb_full_audit_get_nt_acl
), SMB_VFS_OP_GET_NT_ACL
,
404 SMB_VFS_LAYER_LOGGER
},
405 {SMB_VFS_OP(smb_full_audit_fset_nt_acl
), SMB_VFS_OP_FSET_NT_ACL
,
406 SMB_VFS_LAYER_LOGGER
},
407 {SMB_VFS_OP(smb_full_audit_set_nt_acl
), SMB_VFS_OP_SET_NT_ACL
,
408 SMB_VFS_LAYER_LOGGER
},
410 /* POSIX ACL operations. */
412 {SMB_VFS_OP(smb_full_audit_chmod_acl
), SMB_VFS_OP_CHMOD_ACL
,
413 SMB_VFS_LAYER_LOGGER
},
414 {SMB_VFS_OP(smb_full_audit_fchmod_acl
), SMB_VFS_OP_FCHMOD_ACL
,
415 SMB_VFS_LAYER_LOGGER
},
416 {SMB_VFS_OP(smb_full_audit_sys_acl_get_entry
), SMB_VFS_OP_SYS_ACL_GET_ENTRY
,
417 SMB_VFS_LAYER_LOGGER
},
418 {SMB_VFS_OP(smb_full_audit_sys_acl_get_tag_type
), SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE
,
419 SMB_VFS_LAYER_LOGGER
},
420 {SMB_VFS_OP(smb_full_audit_sys_acl_get_permset
), SMB_VFS_OP_SYS_ACL_GET_PERMSET
,
421 SMB_VFS_LAYER_LOGGER
},
422 {SMB_VFS_OP(smb_full_audit_sys_acl_get_qualifier
), SMB_VFS_OP_SYS_ACL_GET_QUALIFIER
,
423 SMB_VFS_LAYER_LOGGER
},
424 {SMB_VFS_OP(smb_full_audit_sys_acl_get_file
), SMB_VFS_OP_SYS_ACL_GET_FILE
,
425 SMB_VFS_LAYER_LOGGER
},
426 {SMB_VFS_OP(smb_full_audit_sys_acl_get_fd
), SMB_VFS_OP_SYS_ACL_GET_FD
,
427 SMB_VFS_LAYER_LOGGER
},
428 {SMB_VFS_OP(smb_full_audit_sys_acl_clear_perms
), SMB_VFS_OP_SYS_ACL_CLEAR_PERMS
,
429 SMB_VFS_LAYER_LOGGER
},
430 {SMB_VFS_OP(smb_full_audit_sys_acl_add_perm
), SMB_VFS_OP_SYS_ACL_ADD_PERM
,
431 SMB_VFS_LAYER_LOGGER
},
432 {SMB_VFS_OP(smb_full_audit_sys_acl_to_text
), SMB_VFS_OP_SYS_ACL_TO_TEXT
,
433 SMB_VFS_LAYER_LOGGER
},
434 {SMB_VFS_OP(smb_full_audit_sys_acl_init
), SMB_VFS_OP_SYS_ACL_INIT
,
435 SMB_VFS_LAYER_LOGGER
},
436 {SMB_VFS_OP(smb_full_audit_sys_acl_create_entry
), SMB_VFS_OP_SYS_ACL_CREATE_ENTRY
,
437 SMB_VFS_LAYER_LOGGER
},
438 {SMB_VFS_OP(smb_full_audit_sys_acl_set_tag_type
), SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE
,
439 SMB_VFS_LAYER_LOGGER
},
440 {SMB_VFS_OP(smb_full_audit_sys_acl_set_qualifier
), SMB_VFS_OP_SYS_ACL_SET_QUALIFIER
,
441 SMB_VFS_LAYER_LOGGER
},
442 {SMB_VFS_OP(smb_full_audit_sys_acl_set_permset
), SMB_VFS_OP_SYS_ACL_SET_PERMSET
,
443 SMB_VFS_LAYER_LOGGER
},
444 {SMB_VFS_OP(smb_full_audit_sys_acl_valid
), SMB_VFS_OP_SYS_ACL_VALID
,
445 SMB_VFS_LAYER_LOGGER
},
446 {SMB_VFS_OP(smb_full_audit_sys_acl_set_file
), SMB_VFS_OP_SYS_ACL_SET_FILE
,
447 SMB_VFS_LAYER_LOGGER
},
448 {SMB_VFS_OP(smb_full_audit_sys_acl_set_fd
), SMB_VFS_OP_SYS_ACL_SET_FD
,
449 SMB_VFS_LAYER_LOGGER
},
450 {SMB_VFS_OP(smb_full_audit_sys_acl_delete_def_file
), SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE
,
451 SMB_VFS_LAYER_LOGGER
},
452 {SMB_VFS_OP(smb_full_audit_sys_acl_get_perm
), SMB_VFS_OP_SYS_ACL_GET_PERM
,
453 SMB_VFS_LAYER_LOGGER
},
454 {SMB_VFS_OP(smb_full_audit_sys_acl_free_text
), SMB_VFS_OP_SYS_ACL_FREE_TEXT
,
455 SMB_VFS_LAYER_LOGGER
},
456 {SMB_VFS_OP(smb_full_audit_sys_acl_free_acl
), SMB_VFS_OP_SYS_ACL_FREE_ACL
,
457 SMB_VFS_LAYER_LOGGER
},
458 {SMB_VFS_OP(smb_full_audit_sys_acl_free_qualifier
), SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER
,
459 SMB_VFS_LAYER_LOGGER
},
463 {SMB_VFS_OP(smb_full_audit_getxattr
), SMB_VFS_OP_GETXATTR
,
464 SMB_VFS_LAYER_LOGGER
},
465 {SMB_VFS_OP(smb_full_audit_lgetxattr
), SMB_VFS_OP_LGETXATTR
,
466 SMB_VFS_LAYER_LOGGER
},
467 {SMB_VFS_OP(smb_full_audit_fgetxattr
), SMB_VFS_OP_FGETXATTR
,
468 SMB_VFS_LAYER_LOGGER
},
469 {SMB_VFS_OP(smb_full_audit_listxattr
), SMB_VFS_OP_LISTXATTR
,
470 SMB_VFS_LAYER_LOGGER
},
471 {SMB_VFS_OP(smb_full_audit_llistxattr
), SMB_VFS_OP_LLISTXATTR
,
472 SMB_VFS_LAYER_LOGGER
},
473 {SMB_VFS_OP(smb_full_audit_flistxattr
), SMB_VFS_OP_FLISTXATTR
,
474 SMB_VFS_LAYER_LOGGER
},
475 {SMB_VFS_OP(smb_full_audit_removexattr
), SMB_VFS_OP_REMOVEXATTR
,
476 SMB_VFS_LAYER_LOGGER
},
477 {SMB_VFS_OP(smb_full_audit_lremovexattr
), SMB_VFS_OP_LREMOVEXATTR
,
478 SMB_VFS_LAYER_LOGGER
},
479 {SMB_VFS_OP(smb_full_audit_fremovexattr
), SMB_VFS_OP_FREMOVEXATTR
,
480 SMB_VFS_LAYER_LOGGER
},
481 {SMB_VFS_OP(smb_full_audit_setxattr
), SMB_VFS_OP_SETXATTR
,
482 SMB_VFS_LAYER_LOGGER
},
483 {SMB_VFS_OP(smb_full_audit_lsetxattr
), SMB_VFS_OP_LSETXATTR
,
484 SMB_VFS_LAYER_LOGGER
},
485 {SMB_VFS_OP(smb_full_audit_fsetxattr
), SMB_VFS_OP_FSETXATTR
,
486 SMB_VFS_LAYER_LOGGER
},
488 {SMB_VFS_OP(smb_full_audit_aio_read
), SMB_VFS_OP_AIO_READ
,
489 SMB_VFS_LAYER_LOGGER
},
490 {SMB_VFS_OP(smb_full_audit_aio_write
), SMB_VFS_OP_AIO_WRITE
,
491 SMB_VFS_LAYER_LOGGER
},
492 {SMB_VFS_OP(smb_full_audit_aio_return
), SMB_VFS_OP_AIO_RETURN
,
493 SMB_VFS_LAYER_LOGGER
},
494 {SMB_VFS_OP(smb_full_audit_aio_cancel
), SMB_VFS_OP_AIO_CANCEL
,
495 SMB_VFS_LAYER_LOGGER
},
496 {SMB_VFS_OP(smb_full_audit_aio_error
), SMB_VFS_OP_AIO_ERROR
,
497 SMB_VFS_LAYER_LOGGER
},
498 {SMB_VFS_OP(smb_full_audit_aio_fsync
), SMB_VFS_OP_AIO_FSYNC
,
499 SMB_VFS_LAYER_LOGGER
},
500 {SMB_VFS_OP(smb_full_audit_aio_suspend
),SMB_VFS_OP_AIO_SUSPEND
,
501 SMB_VFS_LAYER_LOGGER
},
503 /* Finish VFS operations definition */
505 {SMB_VFS_OP(NULL
), SMB_VFS_OP_NOOP
,
509 /* The following array *must* be in the same order as defined in vfs.h */
515 { SMB_VFS_OP_CONNECT
, "connect" },
516 { SMB_VFS_OP_DISCONNECT
, "disconnect" },
517 { SMB_VFS_OP_DISK_FREE
, "disk_free" },
518 { SMB_VFS_OP_GET_QUOTA
, "get_quota" },
519 { SMB_VFS_OP_SET_QUOTA
, "set_quota" },
520 { SMB_VFS_OP_GET_SHADOW_COPY_DATA
, "get_shadow_copy_data" },
521 { SMB_VFS_OP_OPENDIR
, "opendir" },
522 { SMB_VFS_OP_READDIR
, "readdir" },
523 { SMB_VFS_OP_SEEKDIR
, "seekdir" },
524 { SMB_VFS_OP_TELLDIR
, "telldir" },
525 { SMB_VFS_OP_REWINDDIR
, "rewinddir" },
526 { SMB_VFS_OP_MKDIR
, "mkdir" },
527 { SMB_VFS_OP_RMDIR
, "rmdir" },
528 { SMB_VFS_OP_CLOSEDIR
, "closedir" },
529 { SMB_VFS_OP_OPEN
, "open" },
530 { SMB_VFS_OP_CLOSE
, "close" },
531 { SMB_VFS_OP_READ
, "read" },
532 { SMB_VFS_OP_PREAD
, "pread" },
533 { SMB_VFS_OP_WRITE
, "write" },
534 { SMB_VFS_OP_PWRITE
, "pwrite" },
535 { SMB_VFS_OP_LSEEK
, "lseek" },
536 { SMB_VFS_OP_SENDFILE
, "sendfile" },
537 { SMB_VFS_OP_RENAME
, "rename" },
538 { SMB_VFS_OP_FSYNC
, "fsync" },
539 { SMB_VFS_OP_STAT
, "stat" },
540 { SMB_VFS_OP_FSTAT
, "fstat" },
541 { SMB_VFS_OP_LSTAT
, "lstat" },
542 { SMB_VFS_OP_UNLINK
, "unlink" },
543 { SMB_VFS_OP_CHMOD
, "chmod" },
544 { SMB_VFS_OP_FCHMOD
, "fchmod" },
545 { SMB_VFS_OP_CHOWN
, "chown" },
546 { SMB_VFS_OP_FCHOWN
, "fchown" },
547 { SMB_VFS_OP_CHDIR
, "chdir" },
548 { SMB_VFS_OP_GETWD
, "getwd" },
549 { SMB_VFS_OP_UTIME
, "utime" },
550 { SMB_VFS_OP_FTRUNCATE
, "ftruncate" },
551 { SMB_VFS_OP_LOCK
, "lock" },
552 { SMB_VFS_OP_SYMLINK
, "symlink" },
553 { SMB_VFS_OP_READLINK
, "readlink" },
554 { SMB_VFS_OP_LINK
, "link" },
555 { SMB_VFS_OP_MKNOD
, "mknod" },
556 { SMB_VFS_OP_REALPATH
, "realpath" },
557 { SMB_VFS_OP_FGET_NT_ACL
, "fget_nt_acl" },
558 { SMB_VFS_OP_GET_NT_ACL
, "get_nt_acl" },
559 { SMB_VFS_OP_FSET_NT_ACL
, "fset_nt_acl" },
560 { SMB_VFS_OP_SET_NT_ACL
, "set_nt_acl" },
561 { SMB_VFS_OP_CHMOD_ACL
, "chmod_acl" },
562 { SMB_VFS_OP_FCHMOD_ACL
, "fchmod_acl" },
563 { SMB_VFS_OP_SYS_ACL_GET_ENTRY
, "sys_acl_get_entry" },
564 { SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE
, "sys_acl_get_tag_type" },
565 { SMB_VFS_OP_SYS_ACL_GET_PERMSET
, "sys_acl_get_permset" },
566 { SMB_VFS_OP_SYS_ACL_GET_QUALIFIER
, "sys_acl_get_qualifier" },
567 { SMB_VFS_OP_SYS_ACL_GET_FILE
, "sys_acl_get_file" },
568 { SMB_VFS_OP_SYS_ACL_GET_FD
, "sys_acl_get_fd" },
569 { SMB_VFS_OP_SYS_ACL_CLEAR_PERMS
, "sys_acl_clear_perms" },
570 { SMB_VFS_OP_SYS_ACL_ADD_PERM
, "sys_acl_add_perm" },
571 { SMB_VFS_OP_SYS_ACL_TO_TEXT
, "sys_acl_to_text" },
572 { SMB_VFS_OP_SYS_ACL_INIT
, "sys_acl_init" },
573 { SMB_VFS_OP_SYS_ACL_CREATE_ENTRY
, "sys_acl_create_entry" },
574 { SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE
, "sys_acl_set_tag_type" },
575 { SMB_VFS_OP_SYS_ACL_SET_QUALIFIER
, "sys_acl_set_qualifier" },
576 { SMB_VFS_OP_SYS_ACL_SET_PERMSET
, "sys_acl_set_permset" },
577 { SMB_VFS_OP_SYS_ACL_VALID
, "sys_acl_valid" },
578 { SMB_VFS_OP_SYS_ACL_SET_FILE
, "sys_acl_set_file" },
579 { SMB_VFS_OP_SYS_ACL_SET_FD
, "sys_acl_set_fd" },
580 { SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE
, "sys_acl_delete_def_file" },
581 { SMB_VFS_OP_SYS_ACL_GET_PERM
, "sys_acl_get_perm" },
582 { SMB_VFS_OP_SYS_ACL_FREE_TEXT
, "sys_acl_free_text" },
583 { SMB_VFS_OP_SYS_ACL_FREE_ACL
, "sys_acl_free_acl" },
584 { SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER
, "sys_acl_free_qualifier" },
585 { SMB_VFS_OP_GETXATTR
, "getxattr" },
586 { SMB_VFS_OP_LGETXATTR
, "lgetxattr" },
587 { SMB_VFS_OP_FGETXATTR
, "fgetxattr" },
588 { SMB_VFS_OP_LISTXATTR
, "listxattr" },
589 { SMB_VFS_OP_LLISTXATTR
, "llistxattr" },
590 { SMB_VFS_OP_FLISTXATTR
, "flistxattr" },
591 { SMB_VFS_OP_REMOVEXATTR
, "removexattr" },
592 { SMB_VFS_OP_LREMOVEXATTR
, "lremovexattr" },
593 { SMB_VFS_OP_FREMOVEXATTR
, "fremovexattr" },
594 { SMB_VFS_OP_SETXATTR
, "setxattr" },
595 { SMB_VFS_OP_LSETXATTR
, "lsetxattr" },
596 { SMB_VFS_OP_FSETXATTR
, "fsetxattr" },
597 { SMB_VFS_OP_AIO_READ
, "aio_read" },
598 { SMB_VFS_OP_AIO_WRITE
, "aio_write" },
599 { SMB_VFS_OP_AIO_RETURN
,"aio_return" },
600 { SMB_VFS_OP_AIO_CANCEL
,"aio_cancel" },
601 { SMB_VFS_OP_AIO_ERROR
, "aio_error" },
602 { SMB_VFS_OP_AIO_FSYNC
, "aio_fsync" },
603 { SMB_VFS_OP_AIO_SUSPEND
,"aio_suspend" },
604 { SMB_VFS_OP_LAST
, NULL
}
607 static int audit_syslog_facility(vfs_handle_struct
*handle
)
609 /* fix me: let this be configurable by:
610 * lp_param_enum(SNUM(handle->conn),
611 * (handle->param?handle->param:"full_audit"),
613 * audit_enum_facility,LOG_USER);
618 static int audit_syslog_priority(vfs_handle_struct
*handle
)
620 /* fix me: let this be configurable by:
621 * lp_param_enum(SNUM(handle->conn),
622 * (handle->param?handle->param:"full_audit"),
624 * audit_enum_priority,LOG_NOTICE);
629 static char *audit_prefix(connection_struct
*conn
)
631 static pstring prefix
;
633 pstrcpy(prefix
, lp_parm_const_string(SNUM(conn
), "full_audit",
635 standard_sub_snum(SNUM(conn
), prefix
, sizeof(prefix
)-1);
639 static struct bitmap
*success_ops
= NULL
;
641 static BOOL
log_success(vfs_op_type op
)
643 if (success_ops
== NULL
)
646 return bitmap_query(success_ops
, op
);
649 static struct bitmap
*failure_ops
= NULL
;
651 static BOOL
log_failure(vfs_op_type op
)
653 if (failure_ops
== NULL
)
656 return bitmap_query(failure_ops
, op
);
659 static void init_bitmap(struct bitmap
**bm
, const char **ops
)
661 BOOL log_all
= False
;
666 *bm
= bitmap_allocate(SMB_VFS_OP_LAST
);
669 DEBUG(0, ("Could not alloc bitmap -- "
670 "defaulting to logging everything\n"));
674 while (*ops
!= NULL
) {
678 if (strequal(*ops
, "all")) {
683 for (i
=0; i
<SMB_VFS_OP_LAST
; i
++) {
684 if (vfs_op_names
[i
].name
== NULL
) {
685 smb_panic("vfs_full_audit.c: name table not "
686 "in sync with vfs.h\n");
689 if (strequal(*ops
, vfs_op_names
[i
].name
)) {
695 DEBUG(0, ("Could not find opname %s, logging all\n",
704 /* The query functions default to True */
710 static const char *audit_opname(vfs_op_type op
)
712 if (op
>= SMB_VFS_OP_LAST
)
713 return "INVALID VFS OP";
714 return vfs_op_names
[op
].name
;
717 static void do_log(vfs_op_type op
, BOOL success
, vfs_handle_struct
*handle
,
718 const char *format
, ...)
724 if (success
&& (!log_success(op
)))
727 if (!success
&& (!log_failure(op
)))
731 fstrcpy(err_msg
, "ok");
733 fstr_sprintf(err_msg
, "fail (%s)", strerror(errno
));
735 va_start(ap
, format
);
736 vsnprintf(op_msg
, sizeof(op_msg
), format
, ap
);
739 syslog(audit_syslog_priority(handle
), "%s|%s|%s|%s\n",
740 audit_prefix(handle
->conn
), audit_opname(op
), err_msg
, op_msg
);
745 /* Implementation of vfs_ops. Pass everything on to the default
746 operation but log event first. */
748 static int smb_full_audit_connect(vfs_handle_struct
*handle
, connection_struct
*conn
,
749 const char *svc
, const char *user
)
752 const char *none
[] = { NULL
};
753 const char *all
[] = { "all" };
755 openlog("smbd_audit", 0, audit_syslog_facility(handle
));
757 init_bitmap(&success_ops
,
758 lp_parm_string_list(SNUM(conn
), "full_audit", "success",
760 init_bitmap(&failure_ops
,
761 lp_parm_string_list(SNUM(conn
), "full_audit", "failure",
764 result
= SMB_VFS_NEXT_CONNECT(handle
, conn
, svc
, user
);
766 do_log(SMB_VFS_OP_CONNECT
, True
, handle
,
772 static void smb_full_audit_disconnect(vfs_handle_struct
*handle
,
773 connection_struct
*conn
)
775 SMB_VFS_NEXT_DISCONNECT(handle
, conn
);
777 do_log(SMB_VFS_OP_DISCONNECT
, True
, handle
,
778 "%s", lp_servicename(SNUM(conn
)));
780 bitmap_free(success_ops
);
783 bitmap_free(failure_ops
);
789 static SMB_BIG_UINT
smb_full_audit_disk_free(vfs_handle_struct
*handle
,
790 connection_struct
*conn
, const char *path
,
791 BOOL small_query
, SMB_BIG_UINT
*bsize
,
792 SMB_BIG_UINT
*dfree
, SMB_BIG_UINT
*dsize
)
796 result
= SMB_VFS_NEXT_DISK_FREE(handle
, conn
, path
, small_query
, bsize
,
799 /* Don't have a reasonable notion of failure here */
801 do_log(SMB_VFS_OP_DISK_FREE
, True
, handle
, "%s", path
);
806 static int smb_full_audit_get_quota(struct vfs_handle_struct
*handle
,
807 struct connection_struct
*conn
,
808 enum SMB_QUOTA_TYPE qtype
, unid_t id
,
813 result
= SMB_VFS_NEXT_GET_QUOTA(handle
, conn
, qtype
, id
, qt
);
815 do_log(SMB_VFS_OP_GET_QUOTA
, (result
>= 0), handle
, "");
821 static int smb_full_audit_set_quota(struct vfs_handle_struct
*handle
,
822 struct connection_struct
*conn
,
823 enum SMB_QUOTA_TYPE qtype
, unid_t id
,
828 result
= SMB_VFS_NEXT_SET_QUOTA(handle
, conn
, qtype
, id
, qt
);
830 do_log(SMB_VFS_OP_SET_QUOTA
, (result
>= 0), handle
, "");
835 static int smb_full_audit_get_shadow_copy_data(struct vfs_handle_struct
*handle
,
836 struct files_struct
*fsp
,
837 SHADOW_COPY_DATA
*shadow_copy_data
, BOOL labels
)
841 result
= SMB_VFS_NEXT_GET_SHADOW_COPY_DATA(handle
, fsp
, shadow_copy_data
, labels
);
843 do_log(SMB_VFS_OP_GET_SHADOW_COPY_DATA
, (result
>= 0), handle
, "");
848 static SMB_STRUCT_DIR
*smb_full_audit_opendir(vfs_handle_struct
*handle
, connection_struct
*conn
,
849 const char *fname
, const char *mask
, uint32 attr
)
851 SMB_STRUCT_DIR
*result
;
853 result
= SMB_VFS_NEXT_OPENDIR(handle
, conn
, fname
, mask
, attr
);
855 do_log(SMB_VFS_OP_OPENDIR
, (result
!= NULL
), handle
, "%s", fname
);
860 static SMB_STRUCT_DIRENT
*smb_full_audit_readdir(vfs_handle_struct
*handle
,
861 connection_struct
*conn
, SMB_STRUCT_DIR
*dirp
)
863 SMB_STRUCT_DIRENT
*result
;
865 result
= SMB_VFS_NEXT_READDIR(handle
, conn
, dirp
);
867 /* This operation has no reasonable error condition
868 * (End of dir is also failure), so always succeed.
870 do_log(SMB_VFS_OP_READDIR
, True
, handle
, "");
875 static void smb_full_audit_seekdir(vfs_handle_struct
*handle
, connection_struct
*conn
,
876 SMB_STRUCT_DIR
*dirp
, long offset
)
878 SMB_VFS_NEXT_SEEKDIR(handle
, conn
, dirp
, offset
);
880 do_log(SMB_VFS_OP_SEEKDIR
, True
, handle
, "");
884 static long smb_full_audit_telldir(vfs_handle_struct
*handle
, connection_struct
*conn
,
885 SMB_STRUCT_DIR
*dirp
)
889 result
= SMB_VFS_NEXT_TELLDIR(handle
, conn
, dirp
);
891 do_log(SMB_VFS_OP_TELLDIR
, True
, handle
, "");
896 static void smb_full_audit_rewinddir(vfs_handle_struct
*handle
, connection_struct
*conn
,
897 SMB_STRUCT_DIR
*dirp
)
899 SMB_VFS_NEXT_REWINDDIR(handle
, conn
, dirp
);
901 do_log(SMB_VFS_OP_REWINDDIR
, True
, handle
, "");
905 static int smb_full_audit_mkdir(vfs_handle_struct
*handle
, connection_struct
*conn
,
906 const char *path
, mode_t mode
)
910 result
= SMB_VFS_NEXT_MKDIR(handle
, conn
, path
, mode
);
912 do_log(SMB_VFS_OP_MKDIR
, (result
>= 0), handle
, "%s", path
);
917 static int smb_full_audit_rmdir(vfs_handle_struct
*handle
, connection_struct
*conn
,
922 result
= SMB_VFS_NEXT_RMDIR(handle
, conn
, path
);
924 do_log(SMB_VFS_OP_RMDIR
, (result
>= 0), handle
, "%s", path
);
929 static int smb_full_audit_closedir(vfs_handle_struct
*handle
, connection_struct
*conn
,
930 SMB_STRUCT_DIR
*dirp
)
934 result
= SMB_VFS_NEXT_CLOSEDIR(handle
, conn
, dirp
);
936 do_log(SMB_VFS_OP_CLOSEDIR
, (result
>= 0), handle
, "");
941 static int smb_full_audit_open(vfs_handle_struct
*handle
, connection_struct
*conn
,
942 const char *fname
, int flags
, mode_t mode
)
946 result
= SMB_VFS_NEXT_OPEN(handle
, conn
, fname
, flags
, mode
);
948 do_log(SMB_VFS_OP_OPEN
, (result
>= 0), handle
, "%s|%s",
949 ((flags
& O_WRONLY
) || (flags
& O_RDWR
))?"w":"r",
955 static int smb_full_audit_close(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
)
959 result
= SMB_VFS_NEXT_CLOSE(handle
, fsp
, fd
);
961 do_log(SMB_VFS_OP_CLOSE
, (result
>= 0), handle
, "%s", fsp
->fsp_name
);
966 static ssize_t
smb_full_audit_read(vfs_handle_struct
*handle
, files_struct
*fsp
,
967 int fd
, void *data
, size_t n
)
971 result
= SMB_VFS_NEXT_READ(handle
, fsp
, fd
, data
, n
);
973 do_log(SMB_VFS_OP_READ
, (result
>= 0), handle
, "%s", fsp
->fsp_name
);
978 static ssize_t
smb_full_audit_pread(vfs_handle_struct
*handle
, files_struct
*fsp
,
979 int fd
, void *data
, size_t n
, SMB_OFF_T offset
)
983 result
= SMB_VFS_NEXT_PREAD(handle
, fsp
, fd
, data
, n
, offset
);
985 do_log(SMB_VFS_OP_PREAD
, (result
>= 0), handle
, "%s", fsp
->fsp_name
);
990 static ssize_t
smb_full_audit_write(vfs_handle_struct
*handle
, files_struct
*fsp
,
991 int fd
, const void *data
, size_t n
)
995 result
= SMB_VFS_NEXT_WRITE(handle
, fsp
, fd
, data
, n
);
997 do_log(SMB_VFS_OP_WRITE
, (result
>= 0), handle
, "%s", fsp
->fsp_name
);
1002 static ssize_t
smb_full_audit_pwrite(vfs_handle_struct
*handle
, files_struct
*fsp
,
1003 int fd
, const void *data
, size_t n
,
1008 result
= SMB_VFS_NEXT_PWRITE(handle
, fsp
, fd
, data
, n
, offset
);
1010 do_log(SMB_VFS_OP_PWRITE
, (result
>= 0), handle
, "%s", fsp
->fsp_name
);
1015 static SMB_OFF_T
smb_full_audit_lseek(vfs_handle_struct
*handle
, files_struct
*fsp
,
1016 int filedes
, SMB_OFF_T offset
, int whence
)
1020 result
= SMB_VFS_NEXT_LSEEK(handle
, fsp
, filedes
, offset
, whence
);
1022 do_log(SMB_VFS_OP_LSEEK
, (result
!= (ssize_t
)-1), handle
,
1023 "%s", fsp
->fsp_name
);
1028 static ssize_t
smb_full_audit_sendfile(vfs_handle_struct
*handle
, int tofd
,
1029 files_struct
*fsp
, int fromfd
,
1030 const DATA_BLOB
*hdr
, SMB_OFF_T offset
,
1035 result
= SMB_VFS_NEXT_SENDFILE(handle
, tofd
, fsp
, fromfd
, hdr
,
1038 do_log(SMB_VFS_OP_SENDFILE
, (result
>= 0), handle
,
1039 "%s", fsp
->fsp_name
);
1044 static int smb_full_audit_rename(vfs_handle_struct
*handle
, connection_struct
*conn
,
1045 const char *oldname
, const char *newname
)
1049 result
= SMB_VFS_NEXT_RENAME(handle
, conn
, oldname
, newname
);
1051 do_log(SMB_VFS_OP_RENAME
, (result
>= 0), handle
, "%s|%s", oldname
, newname
);
1056 static int smb_full_audit_fsync(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
)
1060 result
= SMB_VFS_NEXT_FSYNC(handle
, fsp
, fd
);
1062 do_log(SMB_VFS_OP_FSYNC
, (result
>= 0), handle
, "%s", fsp
->fsp_name
);
1067 static int smb_full_audit_stat(vfs_handle_struct
*handle
, connection_struct
*conn
,
1068 const char *fname
, SMB_STRUCT_STAT
*sbuf
)
1072 result
= SMB_VFS_NEXT_STAT(handle
, conn
, fname
, sbuf
);
1074 do_log(SMB_VFS_OP_STAT
, (result
>= 0), handle
, "%s", fname
);
1079 static int smb_full_audit_fstat(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
,
1080 SMB_STRUCT_STAT
*sbuf
)
1084 result
= SMB_VFS_NEXT_FSTAT(handle
, fsp
, fd
, sbuf
);
1086 do_log(SMB_VFS_OP_FSTAT
, (result
>= 0), handle
, "%s", fsp
->fsp_name
);
1091 static int smb_full_audit_lstat(vfs_handle_struct
*handle
, connection_struct
*conn
,
1092 const char *path
, SMB_STRUCT_STAT
*sbuf
)
1096 result
= SMB_VFS_NEXT_LSTAT(handle
, conn
, path
, sbuf
);
1098 do_log(SMB_VFS_OP_LSTAT
, (result
>= 0), handle
, "%s", path
);
1103 static int smb_full_audit_unlink(vfs_handle_struct
*handle
, connection_struct
*conn
,
1108 result
= SMB_VFS_NEXT_UNLINK(handle
, conn
, path
);
1110 do_log(SMB_VFS_OP_UNLINK
, (result
>= 0), handle
, "%s", path
);
1115 static int smb_full_audit_chmod(vfs_handle_struct
*handle
, connection_struct
*conn
,
1116 const char *path
, mode_t mode
)
1120 result
= SMB_VFS_NEXT_CHMOD(handle
, conn
, path
, mode
);
1122 do_log(SMB_VFS_OP_CHMOD
, (result
>= 0), handle
, "%s|%o", path
, mode
);
1127 static int smb_full_audit_fchmod(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
,
1132 result
= SMB_VFS_NEXT_FCHMOD(handle
, fsp
, fd
, mode
);
1134 do_log(SMB_VFS_OP_FCHMOD
, (result
>= 0), handle
,
1135 "%s|%o", fsp
->fsp_name
, mode
);
1140 static int smb_full_audit_chown(vfs_handle_struct
*handle
, connection_struct
*conn
,
1141 const char *path
, uid_t uid
, gid_t gid
)
1145 result
= SMB_VFS_NEXT_CHOWN(handle
, conn
, path
, uid
, gid
);
1147 do_log(SMB_VFS_OP_CHOWN
, (result
>= 0), handle
, "%s|%ld|%ld",
1148 path
, (long int)uid
, (long int)gid
);
1153 static int smb_full_audit_fchown(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
,
1154 uid_t uid
, gid_t gid
)
1158 result
= SMB_VFS_NEXT_FCHOWN(handle
, fsp
, fd
, uid
, gid
);
1160 do_log(SMB_VFS_OP_FCHOWN
, (result
>= 0), handle
, "%s|%ld|%ld",
1161 fsp
->fsp_name
, (long int)uid
, (long int)gid
);
1166 static int smb_full_audit_chdir(vfs_handle_struct
*handle
, connection_struct
*conn
,
1171 result
= SMB_VFS_NEXT_CHDIR(handle
, conn
, path
);
1173 do_log(SMB_VFS_OP_CHDIR
, (result
>= 0), handle
, "chdir|%s", path
);
1178 static char *smb_full_audit_getwd(vfs_handle_struct
*handle
, connection_struct
*conn
,
1183 result
= SMB_VFS_NEXT_GETWD(handle
, conn
, path
);
1185 do_log(SMB_VFS_OP_GETWD
, (result
!= NULL
), handle
, "%s", path
);
1190 static int smb_full_audit_utime(vfs_handle_struct
*handle
, connection_struct
*conn
,
1191 const char *path
, struct utimbuf
*times
)
1195 result
= SMB_VFS_NEXT_UTIME(handle
, conn
, path
, times
);
1197 do_log(SMB_VFS_OP_UTIME
, (result
>= 0), handle
, "%s", path
);
1202 static int smb_full_audit_ftruncate(vfs_handle_struct
*handle
, files_struct
*fsp
,
1203 int fd
, SMB_OFF_T len
)
1207 result
= SMB_VFS_NEXT_FTRUNCATE(handle
, fsp
, fd
, len
);
1209 do_log(SMB_VFS_OP_FTRUNCATE
, (result
>= 0), handle
,
1210 "%s", fsp
->fsp_name
);
1215 static BOOL
smb_full_audit_lock(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
,
1216 int op
, SMB_OFF_T offset
, SMB_OFF_T count
, int type
)
1220 result
= SMB_VFS_NEXT_LOCK(handle
, fsp
, fd
, op
, offset
, count
, type
);
1222 do_log(SMB_VFS_OP_LOCK
, (result
>= 0), handle
, "%s", fsp
->fsp_name
);
1227 static int smb_full_audit_symlink(vfs_handle_struct
*handle
, connection_struct
*conn
,
1228 const char *oldpath
, const char *newpath
)
1232 result
= SMB_VFS_NEXT_SYMLINK(handle
, conn
, oldpath
, newpath
);
1234 do_log(SMB_VFS_OP_SYMLINK
, (result
>= 0), handle
,
1235 "%s|%s", oldpath
, newpath
);
1240 static int smb_full_audit_readlink(vfs_handle_struct
*handle
, connection_struct
*conn
,
1241 const char *path
, char *buf
, size_t bufsiz
)
1245 result
= SMB_VFS_NEXT_READLINK(handle
, conn
, path
, buf
, bufsiz
);
1247 do_log(SMB_VFS_OP_READLINK
, (result
>= 0), handle
, "%s", path
);
1252 static int smb_full_audit_link(vfs_handle_struct
*handle
, connection_struct
*conn
,
1253 const char *oldpath
, const char *newpath
)
1257 result
= SMB_VFS_NEXT_LINK(handle
, conn
, oldpath
, newpath
);
1259 do_log(SMB_VFS_OP_LINK
, (result
>= 0), handle
,
1260 "%s|%s", oldpath
, newpath
);
1265 static int smb_full_audit_mknod(vfs_handle_struct
*handle
, connection_struct
*conn
,
1266 const char *pathname
, mode_t mode
, SMB_DEV_T dev
)
1270 result
= SMB_VFS_NEXT_MKNOD(handle
, conn
, pathname
, mode
, dev
);
1272 do_log(SMB_VFS_OP_MKNOD
, (result
>= 0), handle
, "%s", pathname
);
1277 static char *smb_full_audit_realpath(vfs_handle_struct
*handle
, connection_struct
*conn
,
1278 const char *path
, char *resolved_path
)
1282 result
= SMB_VFS_NEXT_REALPATH(handle
, conn
, path
, resolved_path
);
1284 do_log(SMB_VFS_OP_REALPATH
, (result
!= NULL
), handle
, "%s", path
);
1289 static size_t smb_full_audit_fget_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
,
1290 int fd
, uint32 security_info
,
1295 result
= SMB_VFS_NEXT_FGET_NT_ACL(handle
, fsp
, fd
, security_info
,
1298 do_log(SMB_VFS_OP_FGET_NT_ACL
, (result
> 0), handle
,
1299 "%s", fsp
->fsp_name
);
1304 static size_t smb_full_audit_get_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
,
1305 const char *name
, uint32 security_info
,
1310 result
= SMB_VFS_NEXT_GET_NT_ACL(handle
, fsp
, name
, security_info
,
1313 do_log(SMB_VFS_OP_GET_NT_ACL
, (result
> 0), handle
,
1314 "%s", fsp
->fsp_name
);
1319 static BOOL
smb_full_audit_fset_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
,
1320 int fd
, uint32 security_info_sent
,
1325 result
= SMB_VFS_NEXT_FSET_NT_ACL(handle
, fsp
, fd
, security_info_sent
,
1328 do_log(SMB_VFS_OP_FSET_NT_ACL
, result
, handle
, "%s", fsp
->fsp_name
);
1333 static BOOL
smb_full_audit_set_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
,
1334 const char *name
, uint32 security_info_sent
,
1339 result
= SMB_VFS_NEXT_SET_NT_ACL(handle
, fsp
, name
, security_info_sent
,
1342 do_log(SMB_VFS_OP_SET_NT_ACL
, result
, handle
, "%s", fsp
->fsp_name
);
1347 static int smb_full_audit_chmod_acl(vfs_handle_struct
*handle
, connection_struct
*conn
,
1348 const char *path
, mode_t mode
)
1352 result
= SMB_VFS_NEXT_CHMOD_ACL(handle
, conn
, path
, mode
);
1354 do_log(SMB_VFS_OP_CHMOD_ACL
, (result
>= 0), handle
,
1355 "%s|%o", path
, mode
);
1360 static int smb_full_audit_fchmod_acl(vfs_handle_struct
*handle
, files_struct
*fsp
,
1361 int fd
, mode_t mode
)
1365 result
= SMB_VFS_NEXT_FCHMOD_ACL(handle
, fsp
, fd
, mode
);
1367 do_log(SMB_VFS_OP_FCHMOD_ACL
, (result
>= 0), handle
,
1368 "%s|%o", fsp
->fsp_name
, mode
);
1373 static int smb_full_audit_sys_acl_get_entry(vfs_handle_struct
*handle
,
1374 connection_struct
*conn
,
1375 SMB_ACL_T theacl
, int entry_id
,
1376 SMB_ACL_ENTRY_T
*entry_p
)
1380 result
= SMB_VFS_NEXT_SYS_ACL_GET_ENTRY(handle
, conn
, theacl
, entry_id
,
1383 do_log(SMB_VFS_OP_SYS_ACL_GET_ENTRY
, (result
>= 0), handle
,
1389 static int smb_full_audit_sys_acl_get_tag_type(vfs_handle_struct
*handle
,
1390 connection_struct
*conn
,
1391 SMB_ACL_ENTRY_T entry_d
,
1392 SMB_ACL_TAG_T
*tag_type_p
)
1396 result
= SMB_VFS_NEXT_SYS_ACL_GET_TAG_TYPE(handle
, conn
, entry_d
,
1399 do_log(SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE
, (result
>= 0), handle
,
1405 static int smb_full_audit_sys_acl_get_permset(vfs_handle_struct
*handle
,
1406 connection_struct
*conn
,
1407 SMB_ACL_ENTRY_T entry_d
,
1408 SMB_ACL_PERMSET_T
*permset_p
)
1412 result
= SMB_VFS_NEXT_SYS_ACL_GET_PERMSET(handle
, conn
, entry_d
,
1415 do_log(SMB_VFS_OP_SYS_ACL_GET_PERMSET
, (result
>= 0), handle
,
1421 static void * smb_full_audit_sys_acl_get_qualifier(vfs_handle_struct
*handle
,
1422 connection_struct
*conn
,
1423 SMB_ACL_ENTRY_T entry_d
)
1427 result
= SMB_VFS_NEXT_SYS_ACL_GET_QUALIFIER(handle
, conn
, entry_d
);
1429 do_log(SMB_VFS_OP_SYS_ACL_GET_QUALIFIER
, (result
!= NULL
), handle
,
1435 static SMB_ACL_T
smb_full_audit_sys_acl_get_file(vfs_handle_struct
*handle
,
1436 connection_struct
*conn
,
1438 SMB_ACL_TYPE_T type
)
1442 result
= SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle
, conn
, path_p
, type
);
1444 do_log(SMB_VFS_OP_SYS_ACL_GET_FILE
, (result
!= NULL
), handle
,
1450 static SMB_ACL_T
smb_full_audit_sys_acl_get_fd(vfs_handle_struct
*handle
,
1451 files_struct
*fsp
, int fd
)
1455 result
= SMB_VFS_NEXT_SYS_ACL_GET_FD(handle
, fsp
, fd
);
1457 do_log(SMB_VFS_OP_SYS_ACL_GET_FD
, (result
!= NULL
), handle
,
1458 "%s", fsp
->fsp_name
);
1463 static int smb_full_audit_sys_acl_clear_perms(vfs_handle_struct
*handle
,
1464 connection_struct
*conn
,
1465 SMB_ACL_PERMSET_T permset
)
1469 result
= SMB_VFS_NEXT_SYS_ACL_CLEAR_PERMS(handle
, conn
, permset
);
1471 do_log(SMB_VFS_OP_SYS_ACL_CLEAR_PERMS
, (result
>= 0), handle
,
1477 static int smb_full_audit_sys_acl_add_perm(vfs_handle_struct
*handle
,
1478 connection_struct
*conn
,
1479 SMB_ACL_PERMSET_T permset
,
1480 SMB_ACL_PERM_T perm
)
1484 result
= SMB_VFS_NEXT_SYS_ACL_ADD_PERM(handle
, conn
, permset
, perm
);
1486 do_log(SMB_VFS_OP_SYS_ACL_ADD_PERM
, (result
>= 0), handle
,
1492 static char * smb_full_audit_sys_acl_to_text(vfs_handle_struct
*handle
,
1493 connection_struct
*conn
, SMB_ACL_T theacl
,
1498 result
= SMB_VFS_NEXT_SYS_ACL_TO_TEXT(handle
, conn
, theacl
, plen
);
1500 do_log(SMB_VFS_OP_SYS_ACL_TO_TEXT
, (result
!= NULL
), handle
,
1506 static SMB_ACL_T
smb_full_audit_sys_acl_init(vfs_handle_struct
*handle
,
1507 connection_struct
*conn
,
1512 result
= SMB_VFS_NEXT_SYS_ACL_INIT(handle
, conn
, count
);
1514 do_log(SMB_VFS_OP_SYS_ACL_INIT
, (result
!= NULL
), handle
,
1520 static int smb_full_audit_sys_acl_create_entry(vfs_handle_struct
*handle
,
1521 connection_struct
*conn
, SMB_ACL_T
*pacl
,
1522 SMB_ACL_ENTRY_T
*pentry
)
1526 result
= SMB_VFS_NEXT_SYS_ACL_CREATE_ENTRY(handle
, conn
, pacl
, pentry
);
1528 do_log(SMB_VFS_OP_SYS_ACL_CREATE_ENTRY
, (result
>= 0), handle
,
1534 static int smb_full_audit_sys_acl_set_tag_type(vfs_handle_struct
*handle
,
1535 connection_struct
*conn
,
1536 SMB_ACL_ENTRY_T entry
,
1537 SMB_ACL_TAG_T tagtype
)
1541 result
= SMB_VFS_NEXT_SYS_ACL_SET_TAG_TYPE(handle
, conn
, entry
,
1544 do_log(SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE
, (result
>= 0), handle
,
1550 static int smb_full_audit_sys_acl_set_qualifier(vfs_handle_struct
*handle
,
1551 connection_struct
*conn
,
1552 SMB_ACL_ENTRY_T entry
,
1557 result
= SMB_VFS_NEXT_SYS_ACL_SET_QUALIFIER(handle
, conn
, entry
, qual
);
1559 do_log(SMB_VFS_OP_SYS_ACL_SET_QUALIFIER
, (result
>= 0), handle
,
1565 static int smb_full_audit_sys_acl_set_permset(vfs_handle_struct
*handle
,
1566 connection_struct
*conn
,
1567 SMB_ACL_ENTRY_T entry
,
1568 SMB_ACL_PERMSET_T permset
)
1572 result
= SMB_VFS_NEXT_SYS_ACL_SET_PERMSET(handle
, conn
, entry
, permset
);
1574 do_log(SMB_VFS_OP_SYS_ACL_SET_PERMSET
, (result
>= 0), handle
,
1580 static int smb_full_audit_sys_acl_valid(vfs_handle_struct
*handle
,
1581 connection_struct
*conn
,
1586 result
= SMB_VFS_NEXT_SYS_ACL_VALID(handle
, conn
, theacl
);
1588 do_log(SMB_VFS_OP_SYS_ACL_VALID
, (result
>= 0), handle
,
1594 static int smb_full_audit_sys_acl_set_file(vfs_handle_struct
*handle
,
1595 connection_struct
*conn
,
1596 const char *name
, SMB_ACL_TYPE_T acltype
,
1601 result
= SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle
, conn
, name
, acltype
,
1604 do_log(SMB_VFS_OP_SYS_ACL_SET_FILE
, (result
>= 0), handle
,
1610 static int smb_full_audit_sys_acl_set_fd(vfs_handle_struct
*handle
, files_struct
*fsp
,
1611 int fd
, SMB_ACL_T theacl
)
1615 result
= SMB_VFS_NEXT_SYS_ACL_SET_FD(handle
, fsp
, fd
, theacl
);
1617 do_log(SMB_VFS_OP_SYS_ACL_SET_FD
, (result
>= 0), handle
,
1618 "%s", fsp
->fsp_name
);
1623 static int smb_full_audit_sys_acl_delete_def_file(vfs_handle_struct
*handle
,
1624 connection_struct
*conn
,
1629 result
= SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FILE(handle
, conn
, path
);
1631 do_log(SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE
, (result
>= 0), handle
,
1637 static int smb_full_audit_sys_acl_get_perm(vfs_handle_struct
*handle
,
1638 connection_struct
*conn
,
1639 SMB_ACL_PERMSET_T permset
,
1640 SMB_ACL_PERM_T perm
)
1644 result
= SMB_VFS_NEXT_SYS_ACL_GET_PERM(handle
, conn
, permset
, perm
);
1646 do_log(SMB_VFS_OP_SYS_ACL_GET_PERM
, (result
>= 0), handle
,
1652 static int smb_full_audit_sys_acl_free_text(vfs_handle_struct
*handle
,
1653 connection_struct
*conn
,
1658 result
= SMB_VFS_NEXT_SYS_ACL_FREE_TEXT(handle
, conn
, text
);
1660 do_log(SMB_VFS_OP_SYS_ACL_FREE_TEXT
, (result
>= 0), handle
,
1666 static int smb_full_audit_sys_acl_free_acl(vfs_handle_struct
*handle
,
1667 connection_struct
*conn
,
1668 SMB_ACL_T posix_acl
)
1672 result
= SMB_VFS_NEXT_SYS_ACL_FREE_ACL(handle
, conn
, posix_acl
);
1674 do_log(SMB_VFS_OP_SYS_ACL_FREE_ACL
, (result
>= 0), handle
,
1680 static int smb_full_audit_sys_acl_free_qualifier(vfs_handle_struct
*handle
,
1681 connection_struct
*conn
,
1683 SMB_ACL_TAG_T tagtype
)
1687 result
= SMB_VFS_NEXT_SYS_ACL_FREE_QUALIFIER(handle
, conn
, qualifier
,
1690 do_log(SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER
, (result
>= 0), handle
,
1696 static ssize_t
smb_full_audit_getxattr(struct vfs_handle_struct
*handle
,
1697 struct connection_struct
*conn
, const char *path
,
1698 const char *name
, void *value
, size_t size
)
1702 result
= SMB_VFS_NEXT_GETXATTR(handle
, conn
, path
, name
, value
, size
);
1704 do_log(SMB_VFS_OP_GETXATTR
, (result
>= 0), handle
,
1705 "%s|%s", path
, name
);
1710 static ssize_t
smb_full_audit_lgetxattr(struct vfs_handle_struct
*handle
,
1711 struct connection_struct
*conn
,
1712 const char *path
, const char *name
,
1713 void *value
, size_t size
)
1717 result
= SMB_VFS_NEXT_LGETXATTR(handle
, conn
, path
, name
, value
, size
);
1719 do_log(SMB_VFS_OP_LGETXATTR
, (result
>= 0), handle
,
1720 "%s|%s", path
, name
);
1725 static ssize_t
smb_full_audit_fgetxattr(struct vfs_handle_struct
*handle
,
1726 struct files_struct
*fsp
, int fd
,
1727 const char *name
, void *value
, size_t size
)
1731 result
= SMB_VFS_NEXT_FGETXATTR(handle
, fsp
, fd
, name
, value
, size
);
1733 do_log(SMB_VFS_OP_FGETXATTR
, (result
>= 0), handle
,
1734 "%s|%s", fsp
->fsp_name
, name
);
1739 static ssize_t
smb_full_audit_listxattr(struct vfs_handle_struct
*handle
,
1740 struct connection_struct
*conn
,
1741 const char *path
, char *list
, size_t size
)
1745 result
= SMB_VFS_NEXT_LISTXATTR(handle
, conn
, path
, list
, size
);
1747 do_log(SMB_VFS_OP_LISTXATTR
, (result
>= 0), handle
, "%s", path
);
1752 static ssize_t
smb_full_audit_llistxattr(struct vfs_handle_struct
*handle
,
1753 struct connection_struct
*conn
,
1754 const char *path
, char *list
, size_t size
)
1758 result
= SMB_VFS_NEXT_LLISTXATTR(handle
, conn
, path
, list
, size
);
1760 do_log(SMB_VFS_OP_LLISTXATTR
, (result
>= 0), handle
, "%s", path
);
1765 static ssize_t
smb_full_audit_flistxattr(struct vfs_handle_struct
*handle
,
1766 struct files_struct
*fsp
, int fd
, char *list
,
1771 result
= SMB_VFS_NEXT_FLISTXATTR(handle
, fsp
, fd
, list
, size
);
1773 do_log(SMB_VFS_OP_FLISTXATTR
, (result
>= 0), handle
,
1774 "%s", fsp
->fsp_name
);
1779 static int smb_full_audit_removexattr(struct vfs_handle_struct
*handle
,
1780 struct connection_struct
*conn
, const char *path
,
1785 result
= SMB_VFS_NEXT_REMOVEXATTR(handle
, conn
, path
, name
);
1787 do_log(SMB_VFS_OP_REMOVEXATTR
, (result
>= 0), handle
,
1788 "%s|%s", path
, name
);
1793 static int smb_full_audit_lremovexattr(struct vfs_handle_struct
*handle
,
1794 struct connection_struct
*conn
, const char *path
,
1799 result
= SMB_VFS_NEXT_LREMOVEXATTR(handle
, conn
, path
, name
);
1801 do_log(SMB_VFS_OP_LREMOVEXATTR
, (result
>= 0), handle
,
1802 "%s|%s", path
, name
);
1807 static int smb_full_audit_fremovexattr(struct vfs_handle_struct
*handle
,
1808 struct files_struct
*fsp
, int fd
,
1813 result
= SMB_VFS_NEXT_FREMOVEXATTR(handle
, fsp
, fd
, name
);
1815 do_log(SMB_VFS_OP_FREMOVEXATTR
, (result
>= 0), handle
,
1816 "%s|%s", fsp
->fsp_name
, name
);
1821 static int smb_full_audit_setxattr(struct vfs_handle_struct
*handle
,
1822 struct connection_struct
*conn
, const char *path
,
1823 const char *name
, const void *value
, size_t size
,
1828 result
= SMB_VFS_NEXT_SETXATTR(handle
, conn
, path
, name
, value
, size
,
1831 do_log(SMB_VFS_OP_SETXATTR
, (result
>= 0), handle
,
1832 "%s|%s", path
, name
);
1837 static int smb_full_audit_lsetxattr(struct vfs_handle_struct
*handle
,
1838 struct connection_struct
*conn
, const char *path
,
1839 const char *name
, const void *value
, size_t size
,
1844 result
= SMB_VFS_NEXT_LSETXATTR(handle
, conn
, path
, name
, value
, size
,
1847 do_log(SMB_VFS_OP_LSETXATTR
, (result
>= 0), handle
,
1848 "%s|%s", path
, name
);
1853 static int smb_full_audit_fsetxattr(struct vfs_handle_struct
*handle
,
1854 struct files_struct
*fsp
, int fd
, const char *name
,
1855 const void *value
, size_t size
, int flags
)
1859 result
= SMB_VFS_NEXT_FSETXATTR(handle
, fsp
, fd
, name
, value
, size
,
1862 do_log(SMB_VFS_OP_FSETXATTR
, (result
>= 0), handle
,
1863 "%s|%s", fsp
->fsp_name
, name
);
1868 static int smb_full_audit_aio_read(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
)
1872 result
= SMB_VFS_NEXT_AIO_READ(handle
, fsp
, aiocb
);
1873 do_log(SMB_VFS_OP_AIO_READ
, (result
>= 0), handle
,
1874 "%s", fsp
->fsp_name
);
1879 static int smb_full_audit_aio_write(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
)
1883 result
= SMB_VFS_NEXT_AIO_WRITE(handle
, fsp
, aiocb
);
1884 do_log(SMB_VFS_OP_AIO_WRITE
, (result
>= 0), handle
,
1885 "%s", fsp
->fsp_name
);
1890 static ssize_t
smb_full_audit_aio_return(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
)
1894 result
= SMB_VFS_NEXT_AIO_RETURN(handle
, fsp
, aiocb
);
1895 do_log(SMB_VFS_OP_AIO_RETURN
, (result
>= 0), handle
,
1896 "%s", fsp
->fsp_name
);
1901 static int smb_full_audit_aio_cancel(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, int fd
, SMB_STRUCT_AIOCB
*aiocb
)
1905 result
= SMB_VFS_NEXT_AIO_CANCEL(handle
, fsp
, fd
, aiocb
);
1906 do_log(SMB_VFS_OP_AIO_CANCEL
, (result
>= 0), handle
,
1907 "%s", fsp
->fsp_name
);
1912 static int smb_full_audit_aio_error(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
)
1916 result
= SMB_VFS_NEXT_AIO_ERROR(handle
, fsp
, aiocb
);
1917 do_log(SMB_VFS_OP_AIO_ERROR
, (result
>= 0), handle
,
1918 "%s", fsp
->fsp_name
);
1923 static int smb_full_audit_aio_fsync(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, int op
, SMB_STRUCT_AIOCB
*aiocb
)
1927 result
= SMB_VFS_NEXT_AIO_FSYNC(handle
, fsp
, op
, aiocb
);
1928 do_log(SMB_VFS_OP_AIO_FSYNC
, (result
>= 0), handle
,
1929 "%s", fsp
->fsp_name
);
1934 static int smb_full_audit_aio_suspend(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, const SMB_STRUCT_AIOCB
* const aiocb
[], int n
, const struct timespec
*ts
)
1938 result
= SMB_VFS_NEXT_AIO_SUSPEND(handle
, fsp
, aiocb
, n
, ts
);
1939 do_log(SMB_VFS_OP_AIO_SUSPEND
, (result
>= 0), handle
,
1940 "%s", fsp
->fsp_name
);
1946 NTSTATUS
vfs_full_audit_init(void)
1948 NTSTATUS ret
= smb_register_vfs(SMB_VFS_INTERFACE_VERSION
,
1949 "full_audit", audit_op_tuples
);
1951 if (!NT_STATUS_IS_OK(ret
))
1954 vfs_full_audit_debug_level
= debug_add_class("full_audit");
1955 if (vfs_full_audit_debug_level
== -1) {
1956 vfs_full_audit_debug_level
= DBGC_VFS
;
1957 DEBUG(0, ("vfs_full_audit: Couldn't register custom debugging "
1960 DEBUG(10, ("vfs_full_audit: Debug class number of "
1961 "'full_audit': %d\n", vfs_full_audit_debug_level
));