svn commit: samba r2217 - in branches/SAMBA_4_0/source/torture/raw: .

jra at samba.org jra at samba.org
Fri Sep 3 20:06:27 GMT 2004


Author: jra
Date: 2004-09-03 20:06:27 +0000 (Fri, 03 Sep 2004)
New Revision: 2217

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

Log:
Ad-hoc tests to allow me to work out the correct error code
for the bad path algorithm.
Jeremy.

Modified:
   branches/SAMBA_4_0/source/torture/raw/chkpath.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/raw/chkpath.c
===================================================================
--- branches/SAMBA_4_0/source/torture/raw/chkpath.c	2004-09-03 20:05:37 UTC (rev 2216)
+++ branches/SAMBA_4_0/source/torture/raw/chkpath.c	2004-09-03 20:06:27 UTC (rev 2217)
@@ -31,6 +31,25 @@
 	}} while (0)
 
 
+static NTSTATUS single_search(struct smbcli_state *cli,
+                              TALLOC_CTX *mem_ctx, const char *pattern)
+{
+        union smb_search_first io;
+        NTSTATUS status;
+                                                                                                                                   
+        io.generic.level = RAW_SEARCH_STANDARD;
+	io.t2ffirst.in.search_attrib = 0;
+	io.t2ffirst.in.max_count = 1;
+	io.t2ffirst.in.flags = FLAG_TRANS2_FIND_CLOSE;
+	io.t2ffirst.in.storage_type = 0;
+	io.t2ffirst.in.pattern = pattern;
+
+	status = smb_raw_search_first(cli->tree, mem_ctx,
+			&io, NULL, NULL);
+                                                                                                                                   
+        return status;
+}
+
 static BOOL test_chkpath(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
 {
 	struct smb_chkpath io;
@@ -48,14 +67,14 @@
 	status = smb_raw_chkpath(cli->tree, &io);
 	CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_NOT_FOUND);
 
-	fnum = create_complex_file(cli, mem_ctx, BASEDIR "\\test.txt");
+	fnum = create_complex_file(cli, mem_ctx, BASEDIR "\\test.txt..");
 	if (fnum == -1) {
 		printf("failed to open test.txt - %s\n", smbcli_errstr(cli->tree));
 		ret = False;
 		goto done;
 	}
 
-	io.in.path = BASEDIR "\\test.txt";
+	io.in.path = BASEDIR "\\test.txt..";
 	printf("testing %s\n", io.in.path);
 	status = smb_raw_chkpath(cli->tree, &io);
 	CHECK_STATUS(status, NT_STATUS_NOT_A_DIRECTORY);
@@ -81,11 +100,93 @@
 	status = smb_raw_chkpath(cli->tree, &io);
 	CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_INVALID);
 
+	io.in.path = ".\\";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_INVALID);
+
+	io.in.path = ".\\.";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_NOT_FOUND);
+
+	io.in.path = ".\\.\\";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_NOT_FOUND);
+
+	io.in.path = ".\\.\\.";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_NOT_FOUND);
+
+	io.in.path = ".\\.\\.aaaaa";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_NOT_FOUND);
+
+	io.in.path = "\\.\\";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_INVALID);
+
+	io.in.path = "\\.\\\\";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_INVALID);
+
+	io.in.path = "\\.\\\\\\\\\\\\";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_INVALID);
+
+	/* Note that the two following paths are identical but
+	  give different NT status returns for chkpth and findfirst. */
+
+	printf("testing findfirst on %s\n", "\\.\\\\\\\\\\\\.");
+	status = single_search(cli, mem_ctx, "\\.\\\\\\\\\\\\.");
+	CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_INVALID);
+
+	io.in.path = "\\.\\\\\\\\\\\\.";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_NOT_FOUND);
+
+	/* We expect this open to fail with the same error code as the chkpath below. */
+	printf("testing Open on %s\n", "\\.\\\\\\\\\\\\.");
+	/* findfirst seems to fail with a different error. */
+	fnum1 = smbcli_nt_create_full(cli->tree, "\\.\\\\\\\\\\\\.",
+				0, GENERIC_RIGHTS_FILE_ALL_ACCESS,
+				FILE_ATTRIBUTE_NORMAL,
+				NTCREATEX_SHARE_ACCESS_DELETE|
+				NTCREATEX_SHARE_ACCESS_READ|
+				NTCREATEX_SHARE_ACCESS_WRITE,
+				NTCREATEX_DISP_OVERWRITE_IF,
+				0, 0);
+	status = smbcli_nt_error(cli->tree);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_NOT_FOUND);
+
+
+	io.in.path = "\\.\\\\xxx";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_NOT_FOUND);
+
+	io.in.path = "\\.\\\\\\\\\\\\xxx";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_NOT_FOUND);
+
 	io.in.path = BASEDIR"\\.\\";
 	printf("testing %s\n", io.in.path);
 	status = smb_raw_chkpath(cli->tree, &io);
 	CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_INVALID);
 
+	io.in.path = BASEDIR"\\.\\\\";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_INVALID);
+
 	io.in.path = BASEDIR"\\.\\nt";
 	printf("testing %s\n", io.in.path);
 	status = smb_raw_chkpath(cli->tree, &io);
@@ -146,6 +247,11 @@
 	status = smb_raw_chkpath(cli->tree, &io);
 	CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_INVALID);
 
+	io.in.path = "\\..\\";
+	printf("testing %s\n", io.in.path);
+	status = smb_raw_chkpath(cli->tree, &io);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_SYNTAX_BAD);
+
 	io.in.path = "\\..";
 	printf("testing %s\n", io.in.path);
 	status = smb_raw_chkpath(cli->tree, &io);
@@ -172,6 +278,26 @@
 	CHECK_STATUS(status, NT_STATUS_NOT_A_DIRECTORY);
 
 	/* We expect this open to fail with the same error code as the chkpath below. */
+	printf("testing Open on %s\n", BASEDIR".\\.\\.\\.\\foo\\..\\.\\");
+	/* findfirst seems to fail with a different error. */
+	fnum1 = smbcli_nt_create_full(cli->tree, BASEDIR".\\.\\.\\.\\foo\\..\\.\\",
+				0, GENERIC_RIGHTS_FILE_ALL_ACCESS,
+				FILE_ATTRIBUTE_NORMAL,
+				NTCREATEX_SHARE_ACCESS_DELETE|
+				NTCREATEX_SHARE_ACCESS_READ|
+				NTCREATEX_SHARE_ACCESS_WRITE,
+				NTCREATEX_DISP_OVERWRITE_IF,
+				0, 0);
+	status = smbcli_nt_error(cli->tree);
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_NOT_FOUND);
+
+	printf("testing findfirst on %s\n", BASEDIR".\\.\\.\\.\\foo\\..\\.\\");
+	status = single_search(cli, mem_ctx, BASEDIR".\\.\\.\\.\\foo\\..\\.\\");
+	CHECK_STATUS(status, NT_STATUS_OBJECT_PATH_NOT_FOUND);
+
+	/* We expect this open to fail with the same error code as the chkpath below. */
+	/* findfirst seems to fail with a different error. */
+	printf("testing Open on %s\n", BASEDIR "\\nt\\Visual Studio\\VB98\\vb6.exe\\3");
 	fnum1 = smbcli_nt_create_full(cli->tree, BASEDIR "\\nt\\Visual Studio\\VB98\\vb6.exe\\3",
 				0, GENERIC_RIGHTS_FILE_ALL_ACCESS,
 				FILE_ATTRIBUTE_NORMAL,



More information about the samba-cvs mailing list