smbd/open: disable compression with FILE_NO_COMPRESSION
authorDavid Disseldorp <ddiss@samba.org>
Mon, 18 Nov 2013 13:54:37 +0000 (14:54 +0100)
committerJeremy Allison <jra@samba.org>
Fri, 22 Nov 2013 16:56:45 +0000 (08:56 -0800)
Files and directories created with FILE_NO_COMPRESSION should not
inherit the compression attribute from their parent directory.

Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/open.c

index 105eb09530fc02ae6aa4abd72542711f8cbffff4..5370cb8ab1120f7b9592be89ba8829c98a3e9e1a 100644 (file)
@@ -29,6 +29,7 @@
 #include "../librpc/gen_ndr/ndr_security.h"
 #include "../librpc/gen_ndr/open_files.h"
 #include "../librpc/gen_ndr/idmap.h"
+#include "../librpc/gen_ndr/ioctl.h"
 #include "passdb/lookup_sid.h"
 #include "auth.h"
 #include "serverid.h"
@@ -4067,6 +4068,17 @@ static NTSTATUS create_file_unixpath(connection_struct *conn,
                }
        }
 
+       if ((conn->fs_capabilities & FILE_FILE_COMPRESSION)
+        && (create_options & FILE_NO_COMPRESSION)
+        && (info == FILE_WAS_CREATED)) {
+               status = SMB_VFS_SET_COMPRESSION(conn, fsp, fsp,
+                                                COMPRESSION_FORMAT_NONE);
+               if (!NT_STATUS_IS_OK(status)) {
+                       DEBUG(1, ("failed to disable compression: %s\n",
+                                 nt_errstr(status)));
+               }
+       }
+
        DEBUG(10, ("create_file_unixpath: info=%d\n", info));
 
        *result = fsp;