⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfs_full_audit.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	/* NT ACL operations. */	{SMB_VFS_OP(smb_full_audit_fget_nt_acl),	SMB_VFS_OP_FGET_NT_ACL,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_get_nt_acl),	SMB_VFS_OP_GET_NT_ACL,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_fset_nt_acl),	SMB_VFS_OP_FSET_NT_ACL,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_set_nt_acl),	SMB_VFS_OP_SET_NT_ACL,	 SMB_VFS_LAYER_LOGGER},	/* POSIX ACL operations. */	{SMB_VFS_OP(smb_full_audit_chmod_acl),	SMB_VFS_OP_CHMOD_ACL,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_fchmod_acl),	SMB_VFS_OP_FCHMOD_ACL,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_get_entry),	SMB_VFS_OP_SYS_ACL_GET_ENTRY,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_get_tag_type),	SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_get_permset),	SMB_VFS_OP_SYS_ACL_GET_PERMSET,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_get_qualifier),	SMB_VFS_OP_SYS_ACL_GET_QUALIFIER,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_get_file),	SMB_VFS_OP_SYS_ACL_GET_FILE,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_get_fd),	SMB_VFS_OP_SYS_ACL_GET_FD,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_clear_perms),	SMB_VFS_OP_SYS_ACL_CLEAR_PERMS,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_add_perm),	SMB_VFS_OP_SYS_ACL_ADD_PERM,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_to_text),	SMB_VFS_OP_SYS_ACL_TO_TEXT,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_init),	SMB_VFS_OP_SYS_ACL_INIT,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_create_entry),	SMB_VFS_OP_SYS_ACL_CREATE_ENTRY,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_set_tag_type),	SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_set_qualifier),	SMB_VFS_OP_SYS_ACL_SET_QUALIFIER,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_set_permset),	SMB_VFS_OP_SYS_ACL_SET_PERMSET,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_valid),	SMB_VFS_OP_SYS_ACL_VALID,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_set_file),	SMB_VFS_OP_SYS_ACL_SET_FILE,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_set_fd),	SMB_VFS_OP_SYS_ACL_SET_FD,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_delete_def_file),	SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_get_perm),	SMB_VFS_OP_SYS_ACL_GET_PERM,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_free_text),	SMB_VFS_OP_SYS_ACL_FREE_TEXT,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_free_acl),	SMB_VFS_OP_SYS_ACL_FREE_ACL,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_sys_acl_free_qualifier),	SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER,	 SMB_VFS_LAYER_LOGGER},		/* EA operations. */	{SMB_VFS_OP(smb_full_audit_getxattr),	SMB_VFS_OP_GETXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_lgetxattr),	SMB_VFS_OP_LGETXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_fgetxattr),	SMB_VFS_OP_FGETXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_listxattr),	SMB_VFS_OP_LISTXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_llistxattr),	SMB_VFS_OP_LLISTXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_flistxattr),	SMB_VFS_OP_FLISTXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_removexattr),	SMB_VFS_OP_REMOVEXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_lremovexattr),	SMB_VFS_OP_LREMOVEXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_fremovexattr),	SMB_VFS_OP_FREMOVEXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_setxattr),	SMB_VFS_OP_SETXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_lsetxattr),	SMB_VFS_OP_LSETXATTR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_fsetxattr),	SMB_VFS_OP_FSETXATTR,	 SMB_VFS_LAYER_LOGGER},		{SMB_VFS_OP(smb_full_audit_aio_read),	SMB_VFS_OP_AIO_READ,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_aio_write),	SMB_VFS_OP_AIO_WRITE,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_aio_return),	SMB_VFS_OP_AIO_RETURN,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_aio_cancel), SMB_VFS_OP_AIO_CANCEL,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_aio_error),	SMB_VFS_OP_AIO_ERROR,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_aio_fsync),	SMB_VFS_OP_AIO_FSYNC,	 SMB_VFS_LAYER_LOGGER},	{SMB_VFS_OP(smb_full_audit_aio_suspend),SMB_VFS_OP_AIO_SUSPEND,	 SMB_VFS_LAYER_LOGGER},	/* Finish VFS operations definition */		{SMB_VFS_OP(NULL),		SMB_VFS_OP_NOOP,	 SMB_VFS_LAYER_NOOP}};/* The following array *must* be in the same order as defined in vfs.h */static struct {	vfs_op_type type;	const char *name;} vfs_op_names[] = {	{ SMB_VFS_OP_CONNECT,	"connect" },	{ SMB_VFS_OP_DISCONNECT,	"disconnect" },	{ SMB_VFS_OP_DISK_FREE,	"disk_free" },	{ SMB_VFS_OP_GET_QUOTA,	"get_quota" },	{ SMB_VFS_OP_SET_QUOTA,	"set_quota" },	{ SMB_VFS_OP_GET_SHADOW_COPY_DATA,	"get_shadow_copy_data" },	{ SMB_VFS_OP_STATVFS,	"statvfs" },	{ SMB_VFS_OP_OPENDIR,	"opendir" },	{ SMB_VFS_OP_READDIR,	"readdir" },	{ SMB_VFS_OP_SEEKDIR,   "seekdir" },	{ SMB_VFS_OP_TELLDIR,   "telldir" },	{ SMB_VFS_OP_REWINDDIR, "rewinddir" },	{ SMB_VFS_OP_MKDIR,	"mkdir" },	{ SMB_VFS_OP_RMDIR,	"rmdir" },	{ SMB_VFS_OP_CLOSEDIR,	"closedir" },	{ SMB_VFS_OP_OPEN,	"open" },	{ SMB_VFS_OP_CLOSE,	"close" },	{ SMB_VFS_OP_READ,	"read" },	{ SMB_VFS_OP_PREAD,	"pread" },	{ SMB_VFS_OP_WRITE,	"write" },	{ SMB_VFS_OP_PWRITE,	"pwrite" },	{ SMB_VFS_OP_LSEEK,	"lseek" },	{ SMB_VFS_OP_SENDFILE,	"sendfile" },	{ SMB_VFS_OP_RENAME,	"rename" },	{ SMB_VFS_OP_FSYNC,	"fsync" },	{ SMB_VFS_OP_STAT,	"stat" },	{ SMB_VFS_OP_FSTAT,	"fstat" },	{ SMB_VFS_OP_LSTAT,	"lstat" },	{ SMB_VFS_OP_UNLINK,	"unlink" },	{ SMB_VFS_OP_CHMOD,	"chmod" },	{ SMB_VFS_OP_FCHMOD,	"fchmod" },	{ SMB_VFS_OP_CHOWN,	"chown" },	{ SMB_VFS_OP_FCHOWN,	"fchown" },	{ SMB_VFS_OP_CHDIR,	"chdir" },	{ SMB_VFS_OP_GETWD,	"getwd" },	{ SMB_VFS_OP_UTIME,	"utime" },	{ SMB_VFS_OP_FTRUNCATE,	"ftruncate" },	{ SMB_VFS_OP_LOCK,	"lock" },	{ SMB_VFS_OP_SYMLINK,	"symlink" },	{ SMB_VFS_OP_READLINK,	"readlink" },	{ SMB_VFS_OP_LINK,	"link" },	{ SMB_VFS_OP_MKNOD,	"mknod" },	{ SMB_VFS_OP_REALPATH,	"realpath" },	{ SMB_VFS_OP_FGET_NT_ACL,	"fget_nt_acl" },	{ SMB_VFS_OP_GET_NT_ACL,	"get_nt_acl" },	{ SMB_VFS_OP_FSET_NT_ACL,	"fset_nt_acl" },	{ SMB_VFS_OP_SET_NT_ACL,	"set_nt_acl" },	{ SMB_VFS_OP_CHMOD_ACL,	"chmod_acl" },	{ SMB_VFS_OP_FCHMOD_ACL,	"fchmod_acl" },	{ SMB_VFS_OP_SYS_ACL_GET_ENTRY,	"sys_acl_get_entry" },	{ SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE,	"sys_acl_get_tag_type" },	{ SMB_VFS_OP_SYS_ACL_GET_PERMSET,	"sys_acl_get_permset" },	{ SMB_VFS_OP_SYS_ACL_GET_QUALIFIER,	"sys_acl_get_qualifier" },	{ SMB_VFS_OP_SYS_ACL_GET_FILE,	"sys_acl_get_file" },	{ SMB_VFS_OP_SYS_ACL_GET_FD,	"sys_acl_get_fd" },	{ SMB_VFS_OP_SYS_ACL_CLEAR_PERMS,	"sys_acl_clear_perms" },	{ SMB_VFS_OP_SYS_ACL_ADD_PERM,	"sys_acl_add_perm" },	{ SMB_VFS_OP_SYS_ACL_TO_TEXT,	"sys_acl_to_text" },	{ SMB_VFS_OP_SYS_ACL_INIT,	"sys_acl_init" },	{ SMB_VFS_OP_SYS_ACL_CREATE_ENTRY,	"sys_acl_create_entry" },	{ SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE,	"sys_acl_set_tag_type" },	{ SMB_VFS_OP_SYS_ACL_SET_QUALIFIER,	"sys_acl_set_qualifier" },	{ SMB_VFS_OP_SYS_ACL_SET_PERMSET,	"sys_acl_set_permset" },	{ SMB_VFS_OP_SYS_ACL_VALID,	"sys_acl_valid" },	{ SMB_VFS_OP_SYS_ACL_SET_FILE,	"sys_acl_set_file" },	{ SMB_VFS_OP_SYS_ACL_SET_FD,	"sys_acl_set_fd" },	{ SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,	"sys_acl_delete_def_file" },	{ SMB_VFS_OP_SYS_ACL_GET_PERM,	"sys_acl_get_perm" },	{ SMB_VFS_OP_SYS_ACL_FREE_TEXT,	"sys_acl_free_text" },	{ SMB_VFS_OP_SYS_ACL_FREE_ACL,	"sys_acl_free_acl" },	{ SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER,	"sys_acl_free_qualifier" },	{ SMB_VFS_OP_GETXATTR,	"getxattr" },	{ SMB_VFS_OP_LGETXATTR,	"lgetxattr" },	{ SMB_VFS_OP_FGETXATTR,	"fgetxattr" },	{ SMB_VFS_OP_LISTXATTR,	"listxattr" },	{ SMB_VFS_OP_LLISTXATTR,	"llistxattr" },	{ SMB_VFS_OP_FLISTXATTR,	"flistxattr" },	{ SMB_VFS_OP_REMOVEXATTR,	"removexattr" },	{ SMB_VFS_OP_LREMOVEXATTR,	"lremovexattr" },	{ SMB_VFS_OP_FREMOVEXATTR,	"fremovexattr" },	{ SMB_VFS_OP_SETXATTR,	"setxattr" },	{ SMB_VFS_OP_LSETXATTR,	"lsetxattr" },	{ SMB_VFS_OP_FSETXATTR,	"fsetxattr" },	{ SMB_VFS_OP_AIO_READ,	"aio_read" },	{ SMB_VFS_OP_AIO_WRITE,	"aio_write" },	{ SMB_VFS_OP_AIO_RETURN,"aio_return" },	{ SMB_VFS_OP_AIO_CANCEL,"aio_cancel" },	{ SMB_VFS_OP_AIO_ERROR,	"aio_error" },	{ SMB_VFS_OP_AIO_FSYNC,	"aio_fsync" },	{ SMB_VFS_OP_AIO_SUSPEND,"aio_suspend" },	{ SMB_VFS_OP_LAST, NULL }};	static int audit_syslog_facility(vfs_handle_struct *handle){	static const struct enum_list enum_log_facilities[] = {		{ LOG_USER, "USER" },		{ LOG_LOCAL0, "LOCAL0" },		{ LOG_LOCAL1, "LOCAL1" },		{ LOG_LOCAL2, "LOCAL2" },		{ LOG_LOCAL3, "LOCAL3" },		{ LOG_LOCAL4, "LOCAL4" },		{ LOG_LOCAL5, "LOCAL5" },		{ LOG_LOCAL6, "LOCAL6" },		{ LOG_LOCAL7, "LOCAL7" }	};	int facility;	facility = lp_parm_enum(SNUM(handle->conn), "full_audit", "facility", enum_log_facilities, LOG_USER);	return facility;}static int audit_syslog_priority(vfs_handle_struct *handle){	static const struct enum_list enum_log_priorities[] = {		{ LOG_EMERG, "EMERG" },		{ LOG_ALERT, "ALERT" },		{ LOG_CRIT, "CRIT" },		{ LOG_ERR, "ERR" },		{ LOG_WARNING, "WARNING" },		{ LOG_NOTICE, "NOTICE" },		{ LOG_INFO, "INFO" },		{ LOG_DEBUG, "DEBUG" }	};	int priority;	priority = lp_parm_enum(SNUM(handle->conn), "full_audit", "priority", enum_log_priorities, LOG_NOTICE);	return priority;}static char *audit_prefix(connection_struct *conn){	static pstring prefix;	pstrcpy(prefix, lp_parm_const_string(SNUM(conn), "full_audit",					     "prefix", "%u|%I"));	standard_sub_snum(SNUM(conn), prefix, sizeof(prefix)-1);	return prefix;}static BOOL log_success(vfs_handle_struct *handle, vfs_op_type op){	struct vfs_full_audit_private_data *pd = NULL;	SMB_VFS_HANDLE_GET_DATA(handle, pd,		struct vfs_full_audit_private_data,		return True);	if (pd->success_ops == NULL) {		return True;	}	return bitmap_query(pd->success_ops, op);}static BOOL log_failure(vfs_handle_struct *handle, vfs_op_type op){	struct vfs_full_audit_private_data *pd = NULL;	SMB_VFS_HANDLE_GET_DATA(handle, pd,		struct vfs_full_audit_private_data,		return True);	if (pd->failure_ops == NULL)		return True;	return bitmap_query(pd->failure_ops, op);}static void init_bitmap(struct bitmap **bm, const char **ops){	BOOL log_all = False;	if (*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) {		int i;		BOOL found = False;		if (strequal(*ops, "all")) {			log_all = True;			break;		}		if (strequal(*ops, "none")) {			break;		}		for (i=0; i<SMB_VFS_OP_LAST; i++) {			if (vfs_op_names[i].name == NULL) {				smb_panic("vfs_full_audit.c: name table not "					  "in sync with vfs.h\n");			}			if (strequal(*ops, vfs_op_names[i].name)) {				bitmap_set(*bm, i);				found = True;			}		}		if (!found) {			DEBUG(0, ("Could not find opname %s, logging all\n",				  *ops));			log_all = True;			break;		}		ops += 1;	}	if (log_all) {		/* The query functions default to True */		bitmap_free(*bm);		*bm = NULL;	}}static const char *audit_opname(vfs_op_type op){	if (op >= SMB_VFS_OP_LAST)		return "INVALID VFS OP";	return vfs_op_names[op].name;}static void do_log(vfs_op_type op, BOOL success, vfs_handle_struct *handle,		   const char *format, ...){	fstring err_msg;	pstring op_msg;	va_list ap;	if (success && (!log_success(handle, op)))		return;	if (!success && (!log_failure(handle, op)))		return;	if (success)		fstrcpy(err_msg, "ok");	else		fstr_sprintf(err_msg, "fail (%s)", strerror(errno));	va_start(ap, format);	vsnprintf(op_msg, sizeof(op_msg), format, ap);	va_end(ap);	syslog(audit_syslog_priority(handle), "%s|%s|%s|%s\n",	       audit_prefix(handle->conn), audit_opname(op), err_msg, op_msg);	return;}/* Free function for the private data. */static void free_private_data(void **p_data){	struct vfs_full_audit_private_data *pd = *(struct vfs_full_audit_private_data **)p_data;	if (pd->success_ops) {		bitmap_free(pd->success_ops);	}	if (pd->failure_ops) {		bitmap_free(pd->failure_ops);	}	SAFE_FREE(pd);	*p_data = NULL;}/* Implementation of vfs_ops.  Pass everything on to the default   operation but log event first. */static int smb_full_audit_connect(vfs_handle_struct *handle, connection_struct *conn,			 const char *svc, const char *user){	int result;	struct vfs_full_audit_private_data *pd = NULL;	const char *none[] = { NULL };	const char *all [] = { "all" };	pd = SMB_MALLOC_P(struct vfs_full_audit_private_data);	if (!pd) {		return -1;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -