Author: jpeach
Date: 2007-03-08 01:40:49 +0000 (Thu, 08 Mar 2007)
New Revision: 21757

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21757

Log:
Add SMB_VFS_CHFLAGS operation.

Modified:
   branches/SAMBA_3_0/source/include/vfs.h
   branches/SAMBA_3_0/source/include/vfs_macros.h
   branches/SAMBA_3_0/source/modules/vfs_default.c
   branches/SAMBA_3_0/source/modules/vfs_full_audit.c


Changeset:
Modified: branches/SAMBA_3_0/source/include/vfs.h
===================================================================
--- branches/SAMBA_3_0/source/include/vfs.h     2007-03-07 23:58:40 UTC (rev 
21756)
+++ branches/SAMBA_3_0/source/include/vfs.h     2007-03-08 01:40:49 UTC (rev 
21757)
@@ -69,7 +69,8 @@
    Also included linux setlease call - jmcd */
 /* Changed to version 20, use ntimes call instead of utime (greater
  * timestamp resolition. JRA. */
-#define SMB_VFS_INTERFACE_VERSION 20
+/* Changed to version21 to add chflags operation -- jpeach */
+#define SMB_VFS_INTERFACE_VERSION 21
 
 
 /* to bug old modules which are trying to compile with the old functions */
@@ -158,6 +159,7 @@
        SMB_VFS_OP_MKNOD,
        SMB_VFS_OP_REALPATH,
        SMB_VFS_OP_NOTIFY_WATCH,
+       SMB_VFS_OP_CHFLAGS,
 
        /* NT ACL operations. */
 
@@ -289,6 +291,7 @@
                                                          void *private_data,
                                                          struct notify_event 
*ev),
                                         void *private_data, void *handle_p);
+               int (*chflags)(struct vfs_handle_struct *handle, const char 
*path, uint flags);
                
                /* NT ACL operations. */
                
@@ -406,6 +409,7 @@
                struct vfs_handle_struct *mknod;
                struct vfs_handle_struct *realpath;
                struct vfs_handle_struct *notify_watch;
+               struct vfs_handle_struct *chflags;
 
                /* NT ACL operations. */
 

Modified: branches/SAMBA_3_0/source/include/vfs_macros.h
===================================================================
--- branches/SAMBA_3_0/source/include/vfs_macros.h      2007-03-07 23:58:40 UTC 
(rev 21756)
+++ branches/SAMBA_3_0/source/include/vfs_macros.h      2007-03-08 01:40:49 UTC 
(rev 21757)
@@ -79,6 +79,7 @@
 #define SMB_VFS_MKNOD(conn, path, mode, dev) 
((conn)->vfs.ops.mknod((conn)->vfs.handles.mknod, (path), (mode), (dev)))
 #define SMB_VFS_REALPATH(conn, path, resolved_path) 
((conn)->vfs.ops.realpath((conn)->vfs.handles.realpath, (path), 
(resolved_path)))
 #define SMB_VFS_NOTIFY_WATCH(conn, ctx, e, callback, private_data, handle_p) 
((conn)->vfs.ops.notify_watch((conn)->vfs.handles.notify_watch, (ctx), (e), 
(callback), (private_data), (handle_p)))
+#define SMB_VFS_CHFLAGS(conn, path, flags) 
((conn)->vfs.ops.chflags((conn)->vfs.handles.chflags, (path), (flags)))
 
 /* NT ACL operations. */
 #define SMB_VFS_FGET_NT_ACL(fsp, fd, security_info, ppdesc) 
((fsp)->conn->vfs.ops.fget_nt_acl((fsp)->conn->vfs.handles.fget_nt_acl, (fsp), 
(fd), (security_info), (ppdesc)))
@@ -194,6 +195,7 @@
 #define SMB_VFS_OPAQUE_MKNOD(conn, path, mode, dev) 
((conn)->vfs_opaque.ops.mknod((conn)->vfs_opaque.handles.mknod, (path), (mode), 
(dev)))
 #define SMB_VFS_OPAQUE_REALPATH(conn, path, resolved_path) 
((conn)->vfs_opaque.ops.realpath((conn)->vfs_opaque.handles.realpath, (path), 
(resolved_path)))
 #define SMB_VFS_OPAQUE_NOTIFY_WATCH(conn, ctx, e, callback, private_data, 
handle_p) 
((conn)->vfs_opaque.ops.notify_watch((conn)->vfs_opaque.handles.notify_watch, 
(ctx), (e), (callback), (private_data), (handle_p)))
+#define SMB_VFS_OPAQUE_CHFLAGS(conn, path, flags) 
((conn)->vfs_opaque.ops.chflags((conn)->vfs_opaque.handles.chflags, (path), 
(flags)))
 
 /* NT ACL operations. */
 #define SMB_VFS_OPAQUE_FGET_NT_ACL(fsp, fd, security_info, ppdesc) 
((fsp)->conn->vfs_opaque.ops.fget_nt_acl((fsp)->conn->vfs_opaque.handles.fget_nt_acl,
 (fsp), (fd), (security_info), (ppdesc)))
@@ -310,6 +312,7 @@
 #define SMB_VFS_NEXT_MKNOD(handle, path, mode, dev) 
((handle)->vfs_next.ops.mknod((handle)->vfs_next.handles.mknod, (path), (mode), 
(dev)))
 #define SMB_VFS_NEXT_REALPATH(handle, path, resolved_path) 
((handle)->vfs_next.ops.realpath((handle)->vfs_next.handles.realpath, (path), 
(resolved_path)))
 #define SMB_VFS_NEXT_NOTIFY_WATCH(conn, ctx, e, callback, private_data, 
handle_p) 
((conn)->vfs_next.ops.notify_watch((conn)->vfs_next.handles.notify_watch, 
(ctx), (e), (callback), (private_data), (handle_p)))
+#define SMB_VFS_NEXT_CHFLAGS(handle, path, flags) 
((handle)->vfs_next.ops.chflags((handle)->vfs_next.handles.chflags, (path), 
(flags)))
 
 /* NT ACL operations. */
 #define SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, fd, security_info, ppdesc) 
((handle)->vfs_next.ops.fget_nt_acl((handle)->vfs_next.handles.fget_nt_acl, 
(fsp), (fd), (security_info), (ppdesc)))

Modified: branches/SAMBA_3_0/source/modules/vfs_default.c
===================================================================
--- branches/SAMBA_3_0/source/modules/vfs_default.c     2007-03-07 23:58:40 UTC 
(rev 21756)
+++ branches/SAMBA_3_0/source/modules/vfs_default.c     2007-03-08 01:40:49 UTC 
(rev 21757)
@@ -903,6 +903,12 @@
        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 @@
         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. */
 

Modified: branches/SAMBA_3_0/source/modules/vfs_full_audit.c
===================================================================
--- branches/SAMBA_3_0/source/modules/vfs_full_audit.c  2007-03-07 23:58:40 UTC 
(rev 21756)
+++ branches/SAMBA_3_0/source/modules/vfs_full_audit.c  2007-03-08 01:40:49 UTC 
(rev 21757)
@@ -174,6 +174,8 @@
                       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 @@
         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 @@
        { 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 @@
        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)

Reply via email to