[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-3742-ga12cbcb

Stefan Metzmacher metze at samba.org
Wed Aug 20 13:52:34 GMT 2008


The branch, v3-3-test has been updated
       via  a12cbcb009a02ee23ec0b24c2fca5deaa0ba6412 (commit)
      from  c3dda372241c4e7171aa928fe0a4f5889bcb21a8 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit a12cbcb009a02ee23ec0b24c2fca5deaa0ba6412
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 19 16:34:50 2008 +0200

    smbd: fix the handling of create_options to pass RAW-OPEN
    
    Some of the bits generate INVALID_PARAMETER and some bits
    are ignored when they come from a client, that's why we need
    to use bits from the ignored range for our internal usage.
    
    metze
    (cherry picked from commit 7b4c8a4e39f310eb450918fa841b0ea1b4af19f7)

-----------------------------------------------------------------------

Summary of changes:
 source/include/smb.h  |   15 +++++++++++----
 source/smbd/nttrans.c |   12 ++++++++++++
 source/smbd/open.c    |    5 +++++
 3 files changed, 28 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/smb.h b/source/include/smb.h
index b8ff34f..c8c4f8c 100644
--- a/source/include/smb.h
+++ b/source/include/smb.h
@@ -1330,12 +1330,19 @@ struct bitmap {
 #define FILE_DELETE_ON_CLOSE      0x1000
 #define FILE_OPEN_BY_FILE_ID	  0x2000
 
-/* Private create options used by the ntcreatex processing code. From Samba4. */
-#define NTCREATEX_OPTIONS_PRIVATE_DENY_DOS     0x01000000
-#define NTCREATEX_OPTIONS_PRIVATE_DENY_FCB     0x02000000
+#define NTCREATEX_OPTIONS_MUST_IGNORE_MASK      (0x008F0480)
+
+#define NTCREATEX_OPTIONS_INVALID_PARAM_MASK    (0xFF100030)
+
+/*
+ * Private create options used by the ntcreatex processing code. From Samba4.
+ * We reuse some ignored flags for private use.
+ */
+#define NTCREATEX_OPTIONS_PRIVATE_DENY_DOS     0x00010000
+#define NTCREATEX_OPTIONS_PRIVATE_DENY_FCB     0x00020000
 
 /* Private options for streams support */
-#define NTCREATEX_OPTIONS_PRIVATE_STREAM_DELETE 0x04000000
+#define NTCREATEX_OPTIONS_PRIVATE_STREAM_DELETE 0x00040000
 
 /* Responses when opening a file. */
 #define FILE_WAS_SUPERSEDED 0
diff --git a/source/smbd/nttrans.c b/source/smbd/nttrans.c
index 149e6ec..b695127 100644
--- a/source/smbd/nttrans.c
+++ b/source/smbd/nttrans.c
@@ -455,6 +455,12 @@ void reply_ntcreate_and_X(struct smb_request *req)
 			fname));
 
 	/*
+	 * we need to remove ignored bits when they come directly from the client
+	 * because we reuse some of them for internal stuff
+	 */
+	create_options &= ~NTCREATEX_OPTIONS_MUST_IGNORE_MASK;
+
+	/*
 	 * If it's an IPC, use the pipe handler.
 	 */
 
@@ -858,6 +864,12 @@ static void call_nt_transact_create(connection_struct *conn,
 	allocation_size |= (((SMB_BIG_UINT)IVAL(params,16)) << 32);
 #endif
 
+	/*
+	 * we need to remove ignored bits when they come directly from the client
+	 * because we reuse some of them for internal stuff
+	 */
+	create_options &= ~NTCREATEX_OPTIONS_MUST_IGNORE_MASK;
+
 	/* Ensure the data_len is correct for the sd and ea values given. */
 	if ((ea_len + sd_len > data_count)
 	    || (ea_len > data_count) || (sd_len > data_count)
diff --git a/source/smbd/open.c b/source/smbd/open.c
index 03efd09..8b32907 100644
--- a/source/smbd/open.c
+++ b/source/smbd/open.c
@@ -2560,6 +2560,11 @@ NTSTATUS create_file_unixpath(connection_struct *conn,
 		goto fail;
 	}
 
+	if (create_options & NTCREATEX_OPTIONS_INVALID_PARAM_MASK) {
+		status = NT_STATUS_INVALID_PARAMETER;
+		goto fail;
+	}
+
 	if (req == NULL) {
 		oplock_request |= INTERNAL_OPEN_ONLY;
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list