components/samba/samba/samba36/patches/worm.patch
author Jiri Sasek <Jiri.Sasek@Oracle.COM>
Fri, 27 Feb 2015 10:07:56 -0800
changeset 4371 29fdb14099eb
parent 1621 components/samba/samba/patches/worm.patch@e58b809ee5f8
permissions -rw-r--r--
PSARC/2015/008 Update Samba to release 4 18462092 Update to Samba 4.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1621
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
     1
Samba.org patch source is referenced below.
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
     2
WiKi page is:
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
     3
https://wiki.samba.org/index.php/VFS/vfs_worm
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
     4
changes against the community version:
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
     5
 - removed support of grace time on file
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
     6
 - slightly modified to run on VFS rev.28
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
     7
-- Jiri Sasek
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
     8
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
     9
From 2004317c09d781a4ec1275aaa4a29289e798eff3 Mon Sep 17 00:00:00 2001
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    10
From: Volker Lendecke <[email protected]>
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    11
Date: Wed, 20 Nov 2013 12:09:47 +0100
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    12
Subject: [PATCH] s3-modules: add new vfs_worm module
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    13
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    14
VFS module to disallow writes for older files.
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    15
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    16
Signed-off-by: Volker Lendecke <[email protected]>
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    17
Reviewed-by: Stefan Metzmacher <[email protected]>
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    18
Reviewed-by: Jeremy Allison <[email protected]>
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    19
---
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    20
 source3/modules/vfs_worm.c |   97 ++++++++++++++++++++++++++++++++++++++++++++
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    21
 1 files changed, 97 insertions(+), 0 deletions(-)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    22
 create mode 100644 source3/modules/vfs_worm.c
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    23
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    24
diff --git a/source3/modules/vfs_worm.c b/source3/modules/vfs_worm.c
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    25
new file mode 100644
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    26
index 0000000..77a18ca
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    27
--- /dev/null
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    28
+++ b/source3/modules/vfs_worm.c
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    29
@@ -0,0 +1,93 @@
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    30
+/*
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    31
+ * VFS module to disallow writes for older files
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    32
+ *
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    33
+ * Copyright (C) 2013, Volker Lendecke
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    34
+ *
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    35
+ * This program is free software; you can redistribute it and/or modify
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    36
+ * it under the terms of the GNU General Public License as published by
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    37
+ * the Free Software Foundation; either version 3 of the License, or
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    38
+ * (at your option) any later version.
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    39
+ *
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    40
+ * This program is distributed in the hope that it will be useful,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    41
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    42
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    43
+ * GNU General Public License for more details.
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    44
+ *
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    45
+ * You should have received a copy of the GNU General Public License
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    46
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    47
+ */
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    48
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    49
+#include "includes.h"
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    50
+#include "smbd/smbd.h"
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    51
+#include "system/filesys.h"
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    52
+#include "libcli/security/security.h"
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    53
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    54
+static NTSTATUS vfs_worm_create_file(vfs_handle_struct *handle,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    55
+				     struct smb_request *req,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    56
+				     uint16_t root_dir_fid,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    57
+				     struct smb_filename *smb_fname,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    58
+				     uint32_t access_mask,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    59
+				     uint32_t share_access,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    60
+				     uint32_t create_disposition,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    61
+				     uint32_t create_options,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    62
+				     uint32_t file_attributes,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    63
+				     uint32_t oplock_request,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    64
+				     uint64_t allocation_size,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    65
+				     uint32_t private_flags,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    66
+				     struct security_descriptor *sd,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    67
+				     struct ea_list *ea_list,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    68
+				     files_struct **result,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    69
+				     int *pinfo)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    70
+{
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    71
+	bool readonly = false;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    72
+	const uint32_t write_access_flags =
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    73
+		FILE_WRITE_DATA | FILE_APPEND_DATA |
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    74
+		FILE_WRITE_ATTRIBUTES | DELETE_ACCESS |
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    75
+		WRITE_DAC_ACCESS | WRITE_OWNER_ACCESS;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    76
+	NTSTATUS status;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    77
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    78
+	if (VALID_STAT(smb_fname->st)) {
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    79
+		/* no grace_period supported */
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    80
+		readonly = true;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    81
+	}
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    82
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    83
+	if (readonly && (access_mask & write_access_flags)) {
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    84
+		return NT_STATUS_ACCESS_DENIED;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    85
+	}
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    86
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    87
+	status = SMB_VFS_NEXT_CREATE_FILE(
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    88
+		handle, req, root_dir_fid, smb_fname, access_mask,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    89
+		share_access, create_disposition, create_options,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    90
+		file_attributes, oplock_request, allocation_size,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    91
+		private_flags, sd, ea_list, result, pinfo);
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    92
+	if (!NT_STATUS_IS_OK(status)) {
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    93
+		return status;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    94
+	}
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    95
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    96
+	/*
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    97
+	 * Access via MAXIMUM_ALLOWED_ACCESS?
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    98
+	 */
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
    99
+	if (readonly && ((*result)->access_mask & write_access_flags)) {
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   100
+		close_file(req, *result, NORMAL_CLOSE);
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   101
+		return NT_STATUS_ACCESS_DENIED;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   102
+	}
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   103
+	return NT_STATUS_OK;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   104
+}
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   105
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   106
+static struct vfs_fn_pointers vfs_worm_fns = {
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   107
+	.create_file = vfs_worm_create_file,
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   108
+};
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   109
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   110
+NTSTATUS vfs_worm_init(void);
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   111
+NTSTATUS vfs_worm_init(void)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   112
+{
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   113
+	NTSTATUS ret;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   114
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   115
+	ret = smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "worm",
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   116
+			       &vfs_worm_fns);
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   117
+	if (!NT_STATUS_IS_OK(ret)) {
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   118
+		return ret;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   119
+	}
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   120
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   121
+	return ret;
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   122
+}
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   123
-- 
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   124
1.7.0.4
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   125
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   126
   Makefile.in and configure.in adds
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   127
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   128
--- a/source3/configure.in	2013-01-17 15:54:47.194376100 -0800
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   129
+++ b/source3/configure.in	2013-01-17 15:58:39.854303900 -0800
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   130
@@ -6994,6 +6994,7 @@
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   131
 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   132
 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   133
 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   134
+SMB_MODULE(vfs_worm, \$(VFS_WORM_OBJ), "bin/worm.$SHLIBEXT", VFS)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   135
 AC_SUBST(SAMFS_LIBS)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   136
 SMB_MODULE(vfs_samfs, \$(VFS_SAMFS_OBJ), "bin/samfs.$SHLIBEXT", VFS)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   137
 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   138
--- a/source3/Makefile.in	2013-01-17 15:55:00.777531900 -0800
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   139
+++ b/source3/Makefile.in	2013-01-17 16:02:06.513093500 -0800
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   140
@@ -813,6 +813,7 @@
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   141
 VFS_AIXACL2_OBJ = modules/vfs_aixacl2.o modules/vfs_aixacl_util.o modules/nfs4_acls.o
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   142
 VFS_SOLARISACL_OBJ = modules/vfs_solarisacl.o
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   143
 VFS_ZFSACL_OBJ = modules/vfs_zfsacl.o modules/nfs4_acls.o
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   144
+VFS_WORM_OBJ = modules/vfs_worm.o
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   145
 VFS_SAMFS_OBJ = modules/vfs_samfs.o
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   146
 VFS_HPUXACL_OBJ = modules/vfs_hpuxacl.o
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   147
 VFS_IRIXACL_OBJ = modules/vfs_irixacl.o
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   148
@@ -2967,6 +2968,10 @@
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   149
 	@echo "Building plugin $@"
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   150
 	@$(SHLD_MODULE) $(VFS_ZFSACL_OBJ) @ZFSACL_LIBS@
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   151
 
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   152
+bin/worm.@SHLIBEXT@: $(BINARY_PREREQS) $(VFS_WORM_OBJ)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   153
+	@echo "Building plugin $@"
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   154
+	@$(SHLD_MODULE) $(VFS_WORM_OBJ)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   155
+
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   156
 bin/samfs.@SHLIBEXT@: $(BINARY_PREREQS) $(VFS_SAMFS_OBJ)
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   157
 	@echo "Building plugin $@"
e58b809ee5f8 15782587 SUNBT7157974 RFE: Request to include a Samba VFS module which implements WORM
Jiri Sasek <Jiri.Sasek@Oracle.COM>
parents:
diff changeset
   158
 	@$(SHLD_MODULE) $(VFS_SAMFS_OBJ) @SAMFS_LIBS@