From: Holger Hetterich Date: Thu, 18 Feb 2010 14:13:59 +0000 (+0100) Subject: s3: vfs_full_audit.c: implement negated vfs_ops in the success/failure list X-Git-Tag: samba-3.6.0pre1~4917 X-Git-Url: http://git.samba.org/?p=samba.git;a=commitdiff_plain;h=99fc004e409ba5e535f1662e92370952777e55ff s3: vfs_full_audit.c: implement negated vfs_ops in the success/failure list Supports negated arguments in configuration like: full_audit:success = all !readdir !telldir !closedir Update the manpage accordingly. Part of BSO#4025 --- diff --git a/docs-xml/manpages-3/vfs_full_audit.8.xml b/docs-xml/manpages-3/vfs_full_audit.8.xml index 1d519e2e09b..9c9dc843f89 100644 --- a/docs-xml/manpages-3/vfs_full_audit.8.xml +++ b/docs-xml/manpages-3/vfs_full_audit.8.xml @@ -184,7 +184,8 @@ LIST is a list of VFS operations that should be recorded if they succeed. Operations are specified using - the names listed above. + the names listed above. Operations can be unset by prefixing + the names with "!". @@ -195,7 +196,8 @@ LIST is a list of VFS operations that should be recorded if they failed. Operations are specified using - the names listed above. + the names listed above. Operations can be unset by prefixing + the names with "!". @@ -232,7 +234,8 @@ Log file and directory open operations on the [records] share using the LOCAL7 facility and ALERT priority, including - the username and IP address: + the username and IP address. Logging excludes the open VFS function + on failures: @@ -240,7 +243,7 @@ full_audit %u|%I open opendir - all + all !open LOCAL7 ALERT diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c index 19ac7adaed3..8a40f6712c8 100644 --- a/source3/modules/vfs_full_audit.c +++ b/source3/modules/vfs_full_audit.c @@ -433,56 +433,65 @@ static bool log_failure(vfs_handle_struct *handle, vfs_op_type op) static void init_bitmap(struct bitmap **bm, const char **ops) { - bool log_all = False; + if (*bm != NULL) { + return; + } - if (*bm != NULL) + if (ops == NULL) { + *bm = NULL; return; + } *bm = bitmap_allocate(SMB_VFS_OP_LAST); - if (*bm == NULL) { DEBUG(0, ("Could not alloc bitmap -- " "defaulting to logging everything\n")); return; } - while (*ops != NULL) { + for (; *ops != NULL; ops += 1) { int i; - bool found = False; + bool neg = false; + const char *op; if (strequal(*ops, "all")) { - log_all = True; - break; + for (i=0; isuccess_ops, lp_parm_string_list(SNUM(handle->conn), "full_audit", "success", - none)); + NULL)); init_bitmap(&pd->failure_ops, lp_parm_string_list(SNUM(handle->conn), "full_audit", "failure", - all)); + NULL)); /* Store the private data. */ SMB_VFS_HANDLE_SET_DATA(handle, pd, free_private_data,