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

Jeremy Allison jra at samba.org
Mon Dec 1 21:22:19 GMT 2008


The branch, v3-3-test has been updated
       via  6f8e7146cd51c81963f9e2830a4ed7e37eefdf1f (commit)
      from  7435fe9d147fd495aa2dd9cc97f6fd0c1e93bddc (commit)

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


- Log -----------------------------------------------------------------
commit 6f8e7146cd51c81963f9e2830a4ed7e37eefdf1f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Dec 1 13:21:56 2008 -0800

    s3:smbd: correctly verify stream names to pass RAW-STREAMS
    
    metze

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

Summary of changes:
 source/smbd/reply.c |   36 +++++++++++++++++++++++++++++++++++-
 1 files changed, 35 insertions(+), 1 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/smbd/reply.c b/source/smbd/reply.c
index 6198818..171e85b 100644
--- a/source/smbd/reply.c
+++ b/source/smbd/reply.c
@@ -52,11 +52,45 @@ static NTSTATUS check_path_syntax_internal(char *path,
 	const char *s = path;
 	NTSTATUS ret = NT_STATUS_OK;
 	bool start_of_name_component = True;
+	bool stream_started = false;
 
 	*p_last_component_contains_wcard = False;
 
 	while (*s) {
-		if (IS_PATH_SEP(*s,posix_path)) {
+		if (stream_started) {
+			switch (*s) {
+			case '/':
+			case '\\':
+				return NT_STATUS_OBJECT_NAME_INVALID;
+			case ':':
+				if (s[1] == '\0') {
+					return NT_STATUS_OBJECT_NAME_INVALID;
+				}
+				if (strchr_m(&s[1], ':')) {
+					return NT_STATUS_OBJECT_NAME_INVALID;
+				}
+				if (StrCaseCmp(s, ":$DATA") != 0) {
+					return NT_STATUS_INVALID_PARAMETER;
+				}
+				break;
+			}
+		}
+
+		if (!stream_started && *s == ':') {
+			if (*p_last_component_contains_wcard) {
+				return NT_STATUS_OBJECT_NAME_INVALID;
+			}
+			/* stream names allow more characters than file names */
+			stream_started = true;
+			start_of_name_component = false;
+			posix_path = true;
+
+			if (s[1] == '\0') {
+				return NT_STATUS_OBJECT_NAME_INVALID;
+			}
+		}
+
+		if (!stream_started && IS_PATH_SEP(*s,posix_path)) {
 			/*
 			 * Safe to assume is not the second part of a mb char
 			 * as this is handled below.


-- 
Samba Shared Repository


More information about the samba-cvs mailing list