summaryrefslogtreecommitdiff
path: root/source3/modules
diff options
context:
space:
mode:
authorJames Peach <jpeach@samba.org>2007-03-08 01:40:49 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:18:28 -0500
commit6e5ea70e9e0aafa39dbf8cd53238d0045f38f468 (patch)
treebd2c3726d5953f2cda700f8c20bacb9b75fcef33 /source3/modules
parent286d8554aa4547629b7e5d1349be4550885b76a2 (diff)
downloadsamba-6e5ea70e9e0aafa39dbf8cd53238d0045f38f468.tar.gz
samba-6e5ea70e9e0aafa39dbf8cd53238d0045f38f468.tar.bz2
samba-6e5ea70e9e0aafa39dbf8cd53238d0045f38f468.zip
r21757: Add SMB_VFS_CHFLAGS operation.
(This used to be commit 16cb22d6b83c502dec1b297c544c05d89714b3d6)
Diffstat (limited to 'source3/modules')
-rw-r--r--source3/modules/vfs_default.c8
-rw-r--r--source3/modules/vfs_full_audit.c17
2 files changed, 25 insertions, 0 deletions
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index f482a3b1f3..4febc064d9 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -903,6 +903,12 @@ static NTSTATUS vfswrap_notify_watch(vfs_handle_struct *vfs_handle,
return NT_STATUS_OK;
}
+static int vfswrap_chflags(vfs_handle_struct *handle, const char *path, int flags)
+{
+ errno = ENOSYS;
+ return -1;
+}
+
static size_t vfswrap_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, uint32 security_info, SEC_DESC **ppdesc)
{
size_t result;
@@ -1286,6 +1292,8 @@ static vfs_op_tuple vfs_default_ops[] = {
SMB_VFS_LAYER_OPAQUE},
{SMB_VFS_OP(vfswrap_notify_watch), SMB_VFS_OP_NOTIFY_WATCH,
SMB_VFS_LAYER_OPAQUE},
+ {SMB_VFS_OP(vfswrap_chflags), SMB_VFS_OP_CHFLAGS,
+ SMB_VFS_LAYER_OPAQUE},
/* NT ACL operations. */
diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c
index e609ae1cd1..79a511df41 100644
--- a/source3/modules/vfs_full_audit.c
+++ b/source3/modules/vfs_full_audit.c
@@ -174,6 +174,8 @@ static int smb_full_audit_mknod(vfs_handle_struct *handle,
const char *pathname, mode_t mode, SMB_DEV_T dev);
static char *smb_full_audit_realpath(vfs_handle_struct *handle,
const char *path, char *resolved_path);
+static int smb_full_audit_chflags(vfs_handle_struct *handle,
+ const char *path, uint flags);
static size_t smb_full_audit_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
int fd, uint32 security_info,
SEC_DESC **ppdesc);
@@ -397,6 +399,8 @@ static vfs_op_tuple audit_op_tuples[] = {
SMB_VFS_LAYER_LOGGER},
{SMB_VFS_OP(smb_full_audit_realpath), SMB_VFS_OP_REALPATH,
SMB_VFS_LAYER_LOGGER},
+ {SMB_VFS_OP(smb_full_audit_chflags), SMB_VFS_OP_CHFLAGS,
+ SMB_VFS_LAYER_LOGGER},
/* NT ACL operations. */
@@ -560,6 +564,7 @@ static struct {
{ SMB_VFS_OP_LINK, "link" },
{ SMB_VFS_OP_MKNOD, "mknod" },
{ SMB_VFS_OP_REALPATH, "realpath" },
+ { SMB_VFS_OP_CHFLAGS, "chflags" },
{ 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" },
@@ -1405,6 +1410,18 @@ static char *smb_full_audit_realpath(vfs_handle_struct *handle,
return result;
}
+static int smb_full_audit_chflags(vfs_handle_struct *handle,
+ const char *path, uint flags)
+{
+ int result;
+
+ result = SMB_VFS_NEXT_CHFLAGS(handle, path, flags);
+
+ do_log(SMB_VFS_OP_CHFLAGS, (result != 0), handle, "%s", path);
+
+ return result;
+}
+
static size_t smb_full_audit_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
int fd, uint32 security_info,
SEC_DESC **ppdesc)