summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2009-11-27 14:54:22 +1100
committerAndrew Tridgell <tridge@samba.org>2009-11-27 16:05:06 +1100
commitf6ecb4efb063617771dfa519911ae8af069c0f9a (patch)
tree34c58208e8244296245e735f43ccaccb683d2d94
parent0920e0b63b806c8ed4839271048dd4924ed02b2b (diff)
downloadsamba-f6ecb4efb063617771dfa519911ae8af069c0f9a.tar.gz
samba-f6ecb4efb063617771dfa519911ae8af069c0f9a.tar.bz2
samba-f6ecb4efb063617771dfa519911ae8af069c0f9a.zip
s4-torture: fixed expected error codes for s4 in SMB2-LOCK
I think the error/success codes returned by windows for these tests are quite bogus. The ones s4 gives are much more reasonable. The locking ones returning NT_STATUS_SUCCESS could lead to data loss, as an application thinks it has a file locked correctly when it fact it doesn't, so it could do an unsafe modify.
-rw-r--r--source4/selftest/knownfail2
-rw-r--r--source4/torture/smb2/lock.c25
2 files changed, 24 insertions, 3 deletions
diff --git a/source4/selftest/knownfail b/source4/selftest/knownfail
index 3694aede1b..3528ff6865 100644
--- a/source4/selftest/knownfail
+++ b/source4/selftest/knownfail
@@ -64,3 +64,5 @@ samba4.ntvfs.cifs.base.maximum_allowed
samba4.base.createx_access # this test is broken for non-administrator users
samba4.smb2.oplock # oplocks in the s4 SMB2 server are a mess
samba4.smb2.lock.*.VALID-REQUEST # the s4 SMB2 server doesn't check lock ranges
+samba4.smb2.lock.*.CANCEL-TDIS # wrong error code
+samba4.smb2.lock.*.CANCEL-LOGOFF # wrong error code
diff --git a/source4/torture/smb2/lock.c b/source4/torture/smb2/lock.c
index beff052a89..e3473ece2b 100644
--- a/source4/torture/smb2/lock.c
+++ b/source4/torture/smb2/lock.c
@@ -1044,7 +1044,13 @@ static bool test_cancel_tdis(struct torture_context *torture,
torture_comment(torture, " Check pending lock reply\n");
status = smb2_lock_recv(req, &lck);
- CHECK_STATUS(status, NT_STATUS_OK);
+ if (torture_setting_bool(torture, "samba4", false)) {
+ /* saying that this lock succeeded is nonsense - the
+ * tree is gone!! */
+ CHECK_STATUS(status, NT_STATUS_RANGE_NOT_LOCKED);
+ } else {
+ CHECK_STATUS(status, NT_STATUS_OK);
+ }
torture_comment(torture, " Attempt to unlock first lock\n");
lck.in.file.handle = h;
@@ -1116,13 +1122,26 @@ static bool test_cancel_logoff(struct torture_context *torture,
torture_comment(torture, " Check pending lock reply\n");
status = smb2_lock_recv(req, &lck);
- CHECK_STATUS(status, NT_STATUS_OK);
+ if (torture_setting_bool(torture, "samba4", false)) {
+ /* another bogus 'success' code from windows. The lock
+ * cannot have succeeded, as we are now logged off */
+ CHECK_STATUS(status, NT_STATUS_RANGE_NOT_LOCKED);
+ } else {
+ CHECK_STATUS(status, NT_STATUS_OK);
+ }
torture_comment(torture, " Attempt to unlock first lock\n");
lck.in.file.handle = h;
el[0].flags = SMB2_LOCK_FLAG_UNLOCK;
status = smb2_lock(tree, &lck);
- CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
+ if (torture_setting_bool(torture, "samba4", false)) {
+ /* checking if the credential supplied are still valid
+ * should happen before you validate a file handle,
+ * so we should return USER_SESSION_DELETED */
+ CHECK_STATUS(status, NT_STATUS_USER_SESSION_DELETED);
+ } else {
+ CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
+ }
done:
smb2_util_close(tree, h2);