svn commit: samba r3198 - in branches/SAMBA_4_0/source: ntvfs/posix script/tests torture/raw

tridge at samba.org tridge at samba.org
Mon Oct 25 06:23:28 GMT 2004


Author: tridge
Date: 2004-10-25 06:23:28 +0000 (Mon, 25 Oct 2004)
New Revision: 3198

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source&rev=3198&nolog=1

Log:
check for too many .. components in filenames

pvfs now passes RAW-MKDIR



Modified:
   branches/SAMBA_4_0/source/ntvfs/posix/pvfs_resolve.c
   branches/SAMBA_4_0/source/script/tests/test_posix.sh
   branches/SAMBA_4_0/source/torture/raw/mkdir.c


Changeset:
Modified: branches/SAMBA_4_0/source/ntvfs/posix/pvfs_resolve.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/posix/pvfs_resolve.c	2004-10-25 06:22:29 UTC (rev 3197)
+++ branches/SAMBA_4_0/source/ntvfs/posix/pvfs_resolve.c	2004-10-25 06:23:28 UTC (rev 3198)
@@ -180,8 +180,9 @@
 static NTSTATUS pvfs_unix_path(struct pvfs_state *pvfs, const char *cifs_name,
 			       uint_t flags, struct pvfs_filename *name)
 {
-	char *ret, *p;
+	char *ret, *p, *p_start;
 	size_t len;
+	int num_components=0;
 
 	name->original_name = talloc_strdup(name, cifs_name);
 	name->stream_name = NULL;
@@ -217,6 +218,7 @@
 
 	/* now do an in-place conversion of '\' to '/', checking
 	   for legal characters */
+	p_start = p;
 	while (*p) {
 		size_t c_size;
 		codepoint_t c = next_codepoint(p, &c_size);
@@ -228,6 +230,7 @@
 				return NT_STATUS_ILLEGAL_CHARACTER;
 			}
 			*p = '/';
+			num_components++;
 			break;
 		case ':':
 			if (!(flags & PVFS_RESOLVE_STREAMS)) {
@@ -252,6 +255,18 @@
 		case '/':
 		case '|':
 			return NT_STATUS_ILLEGAL_CHARACTER;
+		case '.':
+			if (p[1] != '.' ||
+			    (p[2] != '\\' && p[2] != 0) ||
+			    (p != p_start && p[-1] != '/')) {
+				break;
+			}
+			/* its definately a .. component */
+			num_components--;
+			if (num_components <= 0) {
+				return NT_STATUS_OBJECT_PATH_SYNTAX_BAD;
+			}
+			break;
 		}
 
 		p += c_size;

Modified: branches/SAMBA_4_0/source/script/tests/test_posix.sh
===================================================================
--- branches/SAMBA_4_0/source/script/tests/test_posix.sh	2004-10-25 06:22:29 UTC (rev 3197)
+++ branches/SAMBA_4_0/source/script/tests/test_posix.sh	2004-10-25 06:23:28 UTC (rev 3198)
@@ -30,7 +30,7 @@
 
 tests="BASE-FDPASS BASE-LOCK1 BASE-LOCK2 BASE-LOCK3 BASE-LOCK4"
 tests="$tests BASE-LOCK5 BASE-LOCK6 BASE-LOCK7 BASE-UNLINK BASE-ATTR"
-tests="$tests BASE-NEGNOWAIT BASE-DIR"
+tests="$tests BASE-NEGNOWAIT BASE-DIR RAW-MKDIR"
 tests="$tests BASE-DENY2 BASE-TCON BASE-TCONDEV BASE-RW1"
 tests="$tests BASE-DENY3 BASE-XCOPY"
 tests="$tests BASE-DELETE BASE-PROPERTIES BASE-MANGLE"
@@ -40,7 +40,7 @@
 
 
 soon="BASE-DIR1 BASE-DENY1 BASE-VUID BASE-OPEN BASE-DEFER_OPEN BASE-OPENATTR BASE-CHARSET"
-soon="$soon RAW-SFILEINFO RAW-SEARCH RAW-OPEN RAW-MKDIR RAW-OPLOCK RAW-NOTIFY RAW-MUX RAW-IOCTL"
+soon="$soon RAW-SFILEINFO RAW-SEARCH RAW-OPEN RAW-OPLOCK RAW-NOTIFY RAW-MUX RAW-IOCTL"
 soon="$soon RAW-CHKPATH RAW-UNLINK RAW-READ RAW-WRITE RAW-RENAME RAW-CLOSE BASE-TRANS2"
 
 for t in $tests; do

Modified: branches/SAMBA_4_0/source/torture/raw/mkdir.c
===================================================================
--- branches/SAMBA_4_0/source/torture/raw/mkdir.c	2004-10-25 06:22:29 UTC (rev 3197)
+++ branches/SAMBA_4_0/source/torture/raw/mkdir.c	2004-10-25 06:23:28 UTC (rev 3198)
@@ -22,8 +22,8 @@
 
 #define CHECK_STATUS(status, correct) do { \
 	if (!NT_STATUS_EQUAL(status, correct)) { \
-		printf("(%d) Incorrect status %s - should be %s\n", \
-		       __LINE__, nt_errstr(status), nt_errstr(correct)); \
+		printf("(%s) Incorrect status %s - should be %s\n", \
+		       __location__, nt_errstr(status), nt_errstr(correct)); \
 		ret = False; \
 		goto done; \
 	}} while (0)



More information about the samba-cvs mailing list