[SCM] Samba Shared Repository - branch v3-6-test updated
Karolin Seeger
kseeger at samba.org
Fri Sep 28 01:13:45 MDT 2012
The branch, v3-6-test has been updated
via 834c817 selftest: we fail samba3.smb2.compound.interim2
via f9773cf s4:torture:smb2:compound: remove two unused macros (cherry picked from commit 6f6b1c6ac15f225978e8c2d67c1a817d9e098317)
via 51ae753 s4:torture:smb2: don't skip the compound.interim2 test for non win7/win2k8 (cherry picked from commit 8df0b023c51ed198d3054760447e1b273eada991)
via 52b0692 s4:torture:smb2: don't skip the compound.interim1 test for non win7/win2k8 (cherry picked from commit 917e714831178b2a3d07c7f9d09711231a7ccf31)
via 3326b16 s3:smb2_notify: don't call tevent_req_done() from smbd_smb2_notify_cancel()
via d791071 s3:smb2_server: avoid segfault in smbd_smb2_request_pending_queue()
via 54463cc s4:torture:smb2: extend the compound.invalid1 test
via 52aa261 s3:smbd:smb2: simplify smbd_smb2_request_validate() and smbd_smb2_request_dispatch()
via efb16fc s3:smbd:smb2: add check for session_status for compound requests (cherry picked from commit 27d38b5c27bd96d5124c175d946718bf0836b8f4)
via ebabb40 s3:smb2_server: do the req->next_status check before the signing checks
via 68ef8cf s3:smb2_server: reset req->last_session_id and req->last_tid after using it
via 9e662f3 s4:torture:smb2: fix the compound.invalid3 test to work against windows (cherry picked from commit bd8d50b451ea7f94efa7777fbe5dc0c2c19f6bf9)
via 96aa3cd s4:torture:smb2: fix compound.related3 test to work against windows (cherry picked from commit 8e525a29a7c6512f61e4647ecb2e0771e2019a49)
via 750b600 s3: Compound requests should continue processing.
via 41a797a s4:torture/smb2: fix compound.invalid2 against windows
from d4faae3 Fix bug #9016 - Connection to outbound trusted domain goes offline.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test
- Log -----------------------------------------------------------------
commit 834c817d6ea8384bd2e3d3bb6555c950ba98c80d
Author: Michael Adam <obnox at samba.org>
Date: Thu Sep 20 20:46:53 2012 +0200
selftest: we fail samba3.smb2.compound.interim2
We currently return NT_STATUS_CANCELLED where we should
return NT_STATUS_INTERNAL_ERROR.
(similar to commit 841934647b06d6400148932cc8ce02a20c209610)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
The last 15 patches address bug #9173 - SMB2 compound request
create/delete_on_close/close doesn't work as windows.
commit f9773cfc85c92cace85163092b2f40783cd482a5
Author: Michael Adam <obnox at samba.org>
Date: Thu Sep 20 00:43:54 2012 +0200
s4:torture:smb2:compound: remove two unused macros (cherry picked from commit 6f6b1c6ac15f225978e8c2d67c1a817d9e098317)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 51ae7533af420e232c431a80d9a378f89e4363c6
Author: Michael Adam <obnox at samba.org>
Date: Thu Sep 20 00:41:48 2012 +0200
s4:torture:smb2: don't skip the compound.interim2 test for non win7/win2k8 (cherry picked from commit 8df0b023c51ed198d3054760447e1b273eada991)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 52b06922b5d63207b03a1ae07896a9657b091cd4
Author: Michael Adam <obnox at samba.org>
Date: Thu Sep 20 00:41:04 2012 +0200
s4:torture:smb2: don't skip the compound.interim1 test for non win7/win2k8 (cherry picked from commit 917e714831178b2a3d07c7f9d09711231a7ccf31)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 3326b16454c9b4299a7213c42c3a63a29e3b20dc
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Sep 20 16:23:26 2012 +0200
s3:smb2_notify: don't call tevent_req_done() from smbd_smb2_notify_cancel()
smbd_notify_cancel_by_smbreq() will already trigger this via
smbd_smb2_notify_reply() and smbd_smb2_notify_reply_trigger().
metze
(cherry picked from commit 1f0dfd42f16c388abc7054a7b615d2e81031472b)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit d7910716920a324e0bba962241dd9b362d38d2b2
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Sep 20 16:04:01 2012 +0200
s3:smb2_server: avoid segfault in smbd_smb2_request_pending_queue()
Because we should not call smbd_smb2_request_error() on an
request that is still running.
If the subreq implementes a cancel function, this should
take care of triggering smbd_smb2_request_error.
metze
Signed-off-by: Michael Adam <obnox at samba.org>
(cherry picked from commit 9249871f40aab021d62d3154f8ca286b52f5ef76)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 54463ccc90379213ecab18bbfcfd0646929d21ad
Author: Stefan Metzmacher <metze at samba.org>
Date: Fri Sep 21 22:20:20 2012 +0200
s4:torture:smb2: extend the compound.invalid1 test
Test that when turning the related flag back off for the
last compound request, the return code changes from
invalid parameter to file closed.
Pair-Programmed-With: Michael Adam <obnox at samba.org>
(cherry picked from commit 25437df8a65e56616499dda18c696f58be08f67a)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 52aa2612b73b43589f01d87a4852df28e44d0cfb
Author: Michael Adam <obnox at samba.org>
Date: Fri Sep 21 21:43:36 2012 +0200
s3:smbd:smb2: simplify smbd_smb2_request_validate() and smbd_smb2_request_dispatch()
removes unnneccary checks/assignments for compound_related and next_status
and duplicate setting of error status.
And remove (now) unused next_status from struct smbd_smb2_request.
Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
(similar to commit 1ae6f9c62629f8513bbe93a56775b3c64ff06832)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit efb16fc0ff7908c61c1c85e7959270702ab28c80
Author: Michael Adam <obnox at samba.org>
Date: Sat Sep 22 04:06:27 2012 +0200
s3:smbd:smb2: add check for session_status for compound requests (cherry picked from commit 27d38b5c27bd96d5124c175d946718bf0836b8f4)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit ebabb40d1d423fab720735ac9225a09a8fc5feca
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Sep 20 00:52:19 2012 +0200
s3:smb2_server: do the req->next_status check before the signing checks
Windows 2012 returns NT_STATUS_INVALID_PARAMETER to
the smb2.compound.invalid1 test if that uses signing
(instead of NT_STATUS_ACCESS_DENIED).
metze
(similar to commit 4384485f82aac109bf4c4c31075e313e54b4c076)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 68ef8cf99a7421daa1d57895189cfc2dc508adfd
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Sep 20 05:10:28 2012 +0200
s3:smb2_server: reset req->last_session_id and req->last_tid after using it
If we can find a valid session or tcon we'll set it after the lookup,
but it need to make sure to reset it if we don't find the session.
This fixes a problem where a compound unrelated request between
related requests doesn't reset the session.
If we have 3 requests in a compound chain, request 3 should never
use the id's cached from request 1. It should only every inherit
handles from request 2.
metze
(similar to commit 2552b6632372b35cbd7b788c4e00091dfe520a41)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 9e662f376f7ecffb7b0d113db674192b2d64a77a
Author: Michael Adam <obnox at samba.org>
Date: Thu Sep 20 00:36:29 2012 +0200
s4:torture:smb2: fix the compound.invalid3 test to work against windows (cherry picked from commit bd8d50b451ea7f94efa7777fbe5dc0c2c19f6bf9)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 96aa3cdc6846994c0799672b509d60796198b9fa
Author: Michael Adam <obnox at samba.org>
Date: Thu Sep 20 00:35:52 2012 +0200
s4:torture:smb2: fix compound.related3 test to work against windows (cherry picked from commit 8e525a29a7c6512f61e4647ecb2e0771e2019a49)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 750b600d35f87103f47619fb5961afabeb4d32f2
Author: Ira Cooper <ira at samba.org>
Date: Wed Sep 19 18:39:07 2012 +0000
s3: Compound requests should continue processing.
This patch addresses #9173.
Signed-off-by: Michael Adam <obnox at samba.org>
(cherry picked from commit 75951946193c874b6db30c1b9c8722264c3ce656)
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 41a797a4c0d082d4e2a1d34645c4974de41df199
Author: Stefan Metzmacher <metze at samba.org>
Date: Thu Oct 27 21:41:11 2011 +0200
s4:torture/smb2: fix compound.invalid2 against windows
Tested against w2k8r2 with signing and win8pre0 without signing.
metze
Autobuild-User: Stefan Metzmacher <metze at samba.org>
Autobuild-Date: Mon Oct 31 21:40:25 CET 2011 on sn-devel-104
(cherry picked from commit c90870f9b728dfb827ebc2fe8ad67a7ca3a50c43)
-----------------------------------------------------------------------
Summary of changes:
source3/selftest/knownfail | 1 +
source3/smbd/globals.h | 2 -
source3/smbd/smb2_notify.c | 3 +-
source3/smbd/smb2_server.c | 87 ++++++++++-----------------------------
source3/smbd/smb2_sesssetup.c | 2 +
source3/smbd/smb2_tcon.c | 2 +
source4/torture/smb2/compound.c | 34 ++++++---------
7 files changed, 42 insertions(+), 89 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/selftest/knownfail b/source3/selftest/knownfail
index 95f01f6..d2cb953 100644
--- a/source3/selftest/knownfail
+++ b/source3/selftest/knownfail
@@ -5,6 +5,7 @@ samba3.posix_s3.rap.printing # fails sometimes on sn-devel
samba3.posix_s3.rpc.spoolss.*printserver.enum_printers_old # fails on some hosts due to timing issues ?
samba3.posix_s3.rpc.spoolss.printer.*addprinterex.print_test # another intermittent failure
samba3.posix_s3.smb2.lock.*.rw-exclusive # another intermittent failure
+samba3.posix_s3.smb2.compound.*interim2 # wrong return code (STATUS_CANCELLED)
.*driver.add_driver_timestamps # we only can store dates, not timestamps
samba3.raw.mux.* #This test is flaky on the async lock time
samba3.smbtorture_s3.*OPLOCK4 # fails sometimes on sn-devel
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index eefc2c6..f515f19 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -369,8 +369,6 @@ struct smbd_smb2_request {
struct smb_request *smb1req;
struct files_struct *compat_chain_fsp;
- NTSTATUS next_status;
-
/*
* The sub request for async backend calls.
* This is used for SMB2 Cancel.
diff --git a/source3/smbd/smb2_notify.c b/source3/smbd/smb2_notify.c
index 72430eb..961ee9d 100644
--- a/source3/smbd/smb2_notify.c
+++ b/source3/smbd/smb2_notify.c
@@ -357,10 +357,9 @@ static bool smbd_smb2_notify_cancel(struct tevent_req *req)
struct smbd_smb2_notify_state *state = tevent_req_data(req,
struct smbd_smb2_notify_state);
+ state->smb2req->cancelled = true;
smbd_notify_cancel_by_smbreq(state->smbreq);
- state->smb2req->cancelled = true;
- tevent_req_done(req);
return true;
}
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index cef0677..a0e390e 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -426,7 +426,6 @@ static NTSTATUS smbd_smb2_request_validate(struct smbd_smb2_request *req)
for (idx=1; idx < count; idx += 3) {
const uint8_t *inhdr = NULL;
- uint32_t flags;
if (req->in.vector[idx].iov_len != SMB2_HDR_BODY) {
return NT_STATUS_INVALID_PARAMETER;
@@ -446,50 +445,6 @@ static NTSTATUS smbd_smb2_request_validate(struct smbd_smb2_request *req)
if (!smb2_validate_message_id(req->sconn, inhdr)) {
return NT_STATUS_INVALID_PARAMETER;
}
-
- flags = IVAL(inhdr, SMB2_HDR_FLAGS);
- if (idx == 1) {
- /*
- * the 1st request should never have the
- * SMB2_HDR_FLAG_CHAINED flag set
- */
- if (flags & SMB2_HDR_FLAG_CHAINED) {
- req->next_status = NT_STATUS_INVALID_PARAMETER;
- return NT_STATUS_OK;
- }
- } else if (idx == 4) {
- /*
- * the 2nd request triggers related vs. unrelated
- * compounded requests
- */
- if (flags & SMB2_HDR_FLAG_CHAINED) {
- req->compound_related = true;
- }
- } else if (idx > 4) {
-#if 0
- /*
- * It seems the this tests are wrong
- * see the SMB2-COMPOUND test
- */
-
- /*
- * all other requests should match the 2nd one
- */
- if (flags & SMB2_HDR_FLAG_CHAINED) {
- if (!req->compound_related) {
- req->next_status =
- NT_STATUS_INVALID_PARAMETER;
- return NT_STATUS_OK;
- }
- } else {
- if (req->compound_related) {
- req->next_status =
- NT_STATUS_INVALID_PARAMETER;
- return NT_STATUS_OK;
- }
- }
-#endif
- }
}
return NT_STATUS_OK;
@@ -992,9 +947,13 @@ NTSTATUS smbd_smb2_request_pending_queue(struct smbd_smb2_request *req,
* request chain. This is not allowed.
* Cancel the outstanding request.
*/
- tevent_req_cancel(req->subreq);
+ bool ok = tevent_req_cancel(req->subreq);
+ if (ok) {
+ return NT_STATUS_OK;
+ }
+ TALLOC_FREE(req->subreq);
return smbd_smb2_request_error(req,
- NT_STATUS_INSUFFICIENT_RESOURCES);
+ NT_STATUS_INTERNAL_ERROR);
}
if (DEBUGLEVEL >= 10) {
@@ -1369,6 +1328,18 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
*/
session_status = smbd_smb2_request_check_session(req);
+ if (flags & SMB2_HDR_FLAG_CHAINED) {
+ /*
+ * This check is mostly for giving the correct error code
+ * for compounded requests.
+ */
+ if (!NT_STATUS_IS_OK(session_status)) {
+ return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ }
+ } else {
+ req->compat_chain_fsp = NULL;
+ }
+
req->do_signing = false;
if (flags & SMB2_HDR_FLAG_SIGNED) {
if (!NT_STATUS_IS_OK(session_status)) {
@@ -1388,21 +1359,7 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
}
if (flags & SMB2_HDR_FLAG_CHAINED) {
- /*
- * This check is mostly for giving the correct error code
- * for compounded requests.
- *
- * TODO: we may need to move this after the session
- * and tcon checks.
- */
- if (!NT_STATUS_IS_OK(req->next_status)) {
- return smbd_smb2_request_error(req, req->next_status);
- }
- } else {
- req->compat_chain_fsp = NULL;
- }
-
- if (req->compound_related) {
+ req->compound_related = true;
req->sconn->smb2.compound_related_in_progress = true;
}
@@ -1853,6 +1810,7 @@ static NTSTATUS smbd_smb2_request_reply(struct smbd_smb2_request *req)
}
if (req->compound_related) {
+ req->compound_related = false;
req->sconn->smb2.compound_related_in_progress = false;
}
@@ -2100,10 +2058,9 @@ NTSTATUS smbd_smb2_request_error_ex(struct smbd_smb2_request *req,
}
/*
- * if a request fails, all other remaining
- * compounded requests should fail too
+ * Note: Even if there is an error, continue to process the request.
+ * per MS-SMB2.
*/
- req->next_status = NT_STATUS_INVALID_PARAMETER;
return smbd_smb2_request_done_ex(req, status, body, info, __location__);
}
diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c
index c90368f..1f48e33 100644
--- a/source3/smbd/smb2_sesssetup.c
+++ b/source3/smbd/smb2_sesssetup.c
@@ -835,6 +835,8 @@ NTSTATUS smbd_smb2_request_check_session(struct smbd_smb2_request *req)
in_session_id = req->last_session_id;
}
+ req->last_session_id = UINT64_MAX;
+
/* lookup an existing session */
p = idr_find(req->sconn->smb2.sessions.idtree, in_session_id);
if (p == NULL) {
diff --git a/source3/smbd/smb2_tcon.c b/source3/smbd/smb2_tcon.c
index 5ca303e..5f0e3a9 100644
--- a/source3/smbd/smb2_tcon.c
+++ b/source3/smbd/smb2_tcon.c
@@ -298,6 +298,8 @@ NTSTATUS smbd_smb2_request_check_tcon(struct smbd_smb2_request *req)
in_tid = req->last_tid;
}
+ req->last_tid = UINT32_MAX;
+
/* lookup an existing session */
p = idr_find(req->session->tcons.idtree, in_tid);
if (p == NULL) {
diff --git a/source4/torture/smb2/compound.c b/source4/torture/smb2/compound.c
index 59ed9b1..22e578d 100644
--- a/source4/torture/smb2/compound.c
+++ b/source4/torture/smb2/compound.c
@@ -33,9 +33,6 @@
goto done; \
}} while (0)
-#define TARGET_IS_W2K8(_tctx) (torture_setting_bool(_tctx, "w2k8", false))
-#define TARGET_IS_WIN7(_tctx) (torture_setting_bool(_tctx, "win7", false))
-
static bool test_compound_related1(struct torture_context *tctx,
struct smb2_tree *tree)
{
@@ -166,9 +163,9 @@ static bool test_compound_related2(struct torture_context *tctx,
status = smb2_close_recv(req[2], &cl);
CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
status = smb2_close_recv(req[3], &cl);
- CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER);
+ CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
status = smb2_close_recv(req[4], &cl);
- CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER);
+ CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
tree->tid = saved_tid;
tree->session->uid = saved_uid;
@@ -252,9 +249,9 @@ static bool test_compound_invalid1(struct torture_context *tctx,
const char *fname = "compound_invalid1.dat";
struct smb2_close cl;
bool ret = true;
- struct smb2_request *req[2];
+ struct smb2_request *req[3];
- smb2_transport_credits_ask_num(tree->session->transport, 2);
+ smb2_transport_credits_ask_num(tree->session->transport, 3);
smb2_util_unlink(tree, fname);
@@ -278,7 +275,7 @@ static bool test_compound_invalid1(struct torture_context *tctx,
0x00200000;
cr.in.fname = fname;
- smb2_transport_compound_start(tree->session->transport, 2);
+ smb2_transport_compound_start(tree->session->transport, 3);
/* passing the first request with the related flag is invalid */
smb2_transport_compound_set_related(tree->session->transport, true);
@@ -292,11 +289,16 @@ static bool test_compound_invalid1(struct torture_context *tctx,
cl.in.file.handle = hd;
req[1] = smb2_close_send(tree, &cl);
+ smb2_transport_compound_set_related(tree->session->transport, false);
+ req[2] = smb2_close_send(tree, &cl);
+
status = smb2_create_recv(req[0], tree, &cr);
/* TODO: check why this fails with --signing=required */
CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER);
status = smb2_close_recv(req[1], &cl);
CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER);
+ status = smb2_close_recv(req[2], &cl);
+ CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
smb2_util_unlink(tree, fname);
done:
@@ -367,9 +369,9 @@ static bool test_compound_invalid2(struct torture_context *tctx,
status = smb2_close_recv(req[1], &cl);
CHECK_STATUS(status, NT_STATUS_OK);
status = smb2_close_recv(req[2], &cl);
- CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
+ CHECK_STATUS(status, NT_STATUS_USER_SESSION_DELETED);
status = smb2_close_recv(req[3], &cl);
- CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
+ CHECK_STATUS(status, NT_STATUS_USER_SESSION_DELETED);
status = smb2_close_recv(req[4], &cl);
CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER);
@@ -439,9 +441,9 @@ static bool test_compound_invalid3(struct torture_context *tctx,
status = smb2_close_recv(req[2], &cl);
CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
status = smb2_close_recv(req[3], &cl);
- CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER);
+ CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
status = smb2_close_recv(req[4], &cl);
- CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER);
+ CHECK_STATUS(status, NT_STATUS_FILE_CLOSED);
smb2_util_unlink(tree, fname);
done:
@@ -465,10 +467,6 @@ static bool test_compound_interim1(struct torture_context *tctx,
/* Win7 compound request implementation deviates substantially from the
* SMB2 spec as noted in MS-SMB2 <159>, <162>. This, test currently
* verifies the Windows behavior, not the general spec behavior. */
- if (!TARGET_IS_WIN7(tctx) && !TARGET_IS_W2K8(tctx)) {
- torture_skip(tctx, "Interim test is specific to Windows server "
- "behavior.\n");
- }
smb2_transport_credits_ask_num(tree->session->transport, 5);
@@ -536,10 +534,6 @@ static bool test_compound_interim2(struct torture_context *tctx,
/* Win7 compound request implementation deviates substantially from the
* SMB2 spec as noted in MS-SMB2 <159>, <162>. This, test currently
* verifies the Windows behavior, not the general spec behavior. */
- if (!TARGET_IS_WIN7(tctx) && !TARGET_IS_W2K8(tctx)) {
- torture_skip(tctx, "Interim test is specific to Windows server "
- "behavior.\n");
- }
smb2_transport_credits_ask_num(tree->session->transport, 5);
--
Samba Shared Repository
More information about the samba-cvs
mailing list