Commit 632d0db8 authored by Jeremy Allison's avatar Jeremy Allison Committed by Volker Lendecke

s3: torture: Add additional POSIX mkdir tests.

Ensure that if POSIX_foo exists as a file
we return the correct error code NT_STATUS_OBJECT_PATH_NOT_FOUND
if we try and traverse it as a directory.

Also ensure creation/deletion of POSIX_foo/foo fails
for directories and files with NT_STATUS_OBJECT_PATH_NOT_FOUND
if the directory POSIX_foo/ doesn't exist.

knownfail is back :-).

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13803Signed-off-by: default avatarJeremy Allison <jra@samba.org>
Reviewed-by: default avatarVolker Lendecke <vl@samba.org>
parent c93430fe
......@@ -9,6 +9,7 @@
^samba3.smbtorture_s3.crypt_server\(nt4_dc\).SMB2-SESSION-REAUTH # expected to give ACCESS_DENIED SMB2.1 doesn't have encryption
^samba3.smbtorture_s3.crypt_server\(nt4_dc\).SMB2-SESSION-RECONNECT # expected to give CONNECTION_DISCONNECTED, we need to fix the test
^samba3.smbtorture_s3.plain.*SMB2-DIR-FSYNC.*\(ad_dc_ntvfs\)
^samba3.smbtorture_s3.*.POSIX-MKDIR
^samba3.smb2.session enc.reconnect # expected to give CONNECTION_DISCONNECTED, we need to fix the test
^samba3.raw.session enc # expected to give ACCESS_DENIED as SMB1 encryption isn't used
^samba3.smbtorture_s3.crypt_server # expected to give ACCESS_DENIED as SMB1 encryption isn't used
......
......@@ -7271,6 +7271,7 @@ static bool run_posix_mkdir_test(int dummy)
bool correct = false;
NTSTATUS status;
TALLOC_CTX *frame = NULL;
uint16_t fnum = (uint16_t)-1;
frame = talloc_stackframe();
......@@ -7297,6 +7298,102 @@ static bool run_posix_mkdir_test(int dummy)
cli_posix_rmdir(cli, fname_Foo_Foo);
cli_posix_rmdir(cli, fname_Foo);
/*
* Create a file POSIX_foo then try
* and use it in a directory path by
* doing mkdir POSIX_foo/bar.
* The mkdir should fail with
* NT_STATUS_OBJECT_PATH_NOT_FOUND
*/
status = cli_posix_open(cli,
fname_foo,
O_RDWR|O_CREAT,
0666,
&fnum);
if (!NT_STATUS_IS_OK(status)) {
printf("cli_posix_open of %s failed error %s\n",
fname_foo,
nt_errstr(status));
goto out;
}
status = cli_posix_mkdir(cli, fname_foo_foo, 0777);
if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_PATH_NOT_FOUND)) {
printf("cli_posix_mkdir of %s should fail with "
"NT_STATUS_OBJECT_PATH_NOT_FOUND got "
"%s instead\n",
fname_foo_foo,
nt_errstr(status));
goto out;
}
status = cli_close(cli, fnum);
if (!NT_STATUS_IS_OK(status)) {
printf("cli_close failed %s\n", nt_errstr(status));
goto out;
}
fnum = (uint16_t)-1;
status = cli_posix_unlink(cli, fname_foo);
if (!NT_STATUS_IS_OK(status)) {
printf("cli_posix_unlink of %s failed error %s\n",
fname_foo,
nt_errstr(status));
goto out;
}
/*
* Now we've deleted everything, posix_mkdir, posix_rmdir,
* posix_open, posix_unlink, on
* POSIX_foo/foo should return NT_STATUS_OBJECT_PATH_NOT_FOUND
* not silently create POSIX_foo/foo.
*/
status = cli_posix_mkdir(cli, fname_foo_foo, 0777);
if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_PATH_NOT_FOUND)) {
printf("cli_posix_mkdir of %s should fail with "
"NT_STATUS_OBJECT_PATH_NOT_FOUND got "
"%s instead\n",
fname_foo_foo,
nt_errstr(status));
goto out;
}
status = cli_posix_rmdir(cli, fname_foo_foo);
if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_PATH_NOT_FOUND)) {
printf("cli_posix_rmdir of %s should fail with "
"NT_STATUS_OBJECT_PATH_NOT_FOUND got "
"%s instead\n",
fname_foo_foo,
nt_errstr(status));
goto out;
}
status = cli_posix_open(cli,
fname_foo_foo,
O_RDWR|O_CREAT,
0666,
&fnum);
if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_PATH_NOT_FOUND)) {
printf("cli_posix_open of %s should fail with "
"NT_STATUS_OBJECT_PATH_NOT_FOUND got "
"%s instead\n",
fname_foo_foo,
nt_errstr(status));
goto out;
}
status = cli_posix_unlink(cli, fname_foo_foo);
if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_PATH_NOT_FOUND)) {
printf("cli_posix_unlink of %s should fail with "
"NT_STATUS_OBJECT_PATH_NOT_FOUND got "
"%s instead\n",
fname_foo_foo,
nt_errstr(status));
goto out;
}
status = cli_posix_mkdir(cli, fname_foo, 0777);
if (!NT_STATUS_IS_OK(status)) {
printf("cli_posix_mkdir of %s failed\n", fname_foo);
......@@ -7338,6 +7435,11 @@ static bool run_posix_mkdir_test(int dummy)
out:
if (fnum != (uint16_t)-1) {
cli_close(cli, fnum);
fnum = (uint16_t)-1;
}
cli_posix_rmdir(cli, fname_foo_foo);
cli_posix_rmdir(cli, fname_foo_Foo);
cli_posix_rmdir(cli, fname_foo);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment