mirror of
https://github.com/samba-team/samba.git
synced 2025-03-20 22:50:26 +03:00
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=13803 Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Volker Lendecke <vl@samba.org> (cherry picked from commit 632d0db8c42d50f5eecd002d9573f739cd945960)
This commit is contained in:
parent
4b58042f3f
commit
ffb706ddbc
@ -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.*ad_dc_ntvfs.*SMB2-DIR-FSYNC.*
|
||||
^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
|
||||
|
@ -7269,6 +7269,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();
|
||||
|
||||
@ -7295,6 +7296,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);
|
||||
@ -7336,6 +7433,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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user