[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Tue May 8 18:54:04 MDT 2012
The branch, master has been updated
via 9a01661 Revert "selftest: mark ^samba4.raw.context.session1 as flapping, the test was wrong"
via 49dbd38 s4:smb_server/smb: only create a new session with vuid == 0
via 865e9c4 s4:torture/raw/context: test a session setup with a given invalid vuid
via d7c9da8 selftest: mark ^samba4.raw.context.session1 as flapping, the test was wrong
via aee52a2 s3:libsmb: remove unused var in smb2cli_set_info_done
from 088436d s3:winbindd:autorid check that transaction start did work
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 9a016613dbc32a5b76043b0c582ee50e495002c0
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon May 7 17:01:08 2012 +0200
Revert "selftest: mark ^samba4.raw.context.session1 as flapping, the test was wrong"
This reverts commit 794a9da38fbd88eb3d358d453cc5d21998604caa.
The test is fixed now.
metze
Autobuild-User: Stefan Metzmacher <metze at samba.org>
Autobuild-Date: Wed May 9 02:53:24 CEST 2012 on sn-devel-104
commit 49dbd380477f9987d2511ca3111af50f2bdd2859
Author: Stefan Metzmacher <metze at samba.org>
Date: Sun May 6 21:09:47 2012 +0200
s4:smb_server/smb: only create a new session with vuid == 0
metze
commit 865e9c45606e59e111470bbdb35943d8fceff814
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue May 1 13:33:14 2012 +0200
s4:torture/raw/context: test a session setup with a given invalid vuid
On a session setup with EXTENDED_SECURITY we'll get ERRSRV:ERRbaduid,
while a session setup without EXTENDED_SECURITY ignores the given vuid.
Before this test was doing a reauth of a given vuid, which works for newer
Windows versions, but Windows 2000 gives INVALID_PARAMETER.
metze
commit d7c9da8b89a48f76155f9cc2ac4d03a99a324397
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon May 7 12:32:28 2012 +0200
selftest: mark ^samba4.raw.context.session1 as flapping, the test was wrong
metze
commit aee52a25386ff2830ee4c89443978fca42dd2b49
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon May 7 12:33:45 2012 +0200
s3:libsmb: remove unused var in smb2cli_set_info_done
-----------------------------------------------------------------------
Summary of changes:
source3/libsmb/smb2cli_set_info.c | 3 --
source4/smb_server/session.c | 9 ++----
source4/smb_server/smb/sesssetup.c | 12 +++++++--
source4/smb_server/smb2/sesssetup.c | 5 ++++
source4/torture/raw/context.c | 46 ++++++++++++++++++++++-------------
5 files changed, 46 insertions(+), 29 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/libsmb/smb2cli_set_info.c b/source3/libsmb/smb2cli_set_info.c
index 2ffb3ec..bd59535 100644
--- a/source3/libsmb/smb2cli_set_info.c
+++ b/source3/libsmb/smb2cli_set_info.c
@@ -105,9 +105,6 @@ static void smb2cli_set_info_done(struct tevent_req *subreq)
struct tevent_req *req =
tevent_req_callback_data(subreq,
struct tevent_req);
- struct smb2cli_set_info_state *state =
- tevent_req_data(req,
- struct smb2cli_set_info_state);
NTSTATUS status;
static const struct smb2cli_req_expected_response expected[] = {
{
diff --git a/source4/smb_server/session.c b/source4/smb_server/session.c
index 3cb6576..aa8d752 100644
--- a/source4/smb_server/session.c
+++ b/source4/smb_server/session.c
@@ -85,12 +85,9 @@ struct smbsrv_session *smbsrv_session_find_sesssetup(struct smbsrv_connection *s
p = idr_find(smb_conn->sessions.idtree_vuid, vuid);
if (!p) return NULL;
- /* only return an unfinished session */
- sess = talloc_get_type(p, struct smbsrv_session);
- if (sess && !sess->session_info) {
- return sess;
- }
- return NULL;
+ sess = talloc_get_type_abort(p, struct smbsrv_session);
+
+ return sess;
}
/*
diff --git a/source4/smb_server/smb/sesssetup.c b/source4/smb_server/smb/sesssetup.c
index 57460fa..b26c128 100644
--- a/source4/smb_server/smb/sesssetup.c
+++ b/source4/smb_server/smb/sesssetup.c
@@ -435,8 +435,7 @@ static void sesssetup_spnego(struct smbsrv_request *req, union smb_sesssetup *se
vuid = SVAL(req->in.hdr,HDR_UID);
/* lookup an existing session */
- smb_sess = smbsrv_session_find_sesssetup(req->smb_conn, vuid);
- if (!smb_sess) {
+ if (vuid == 0) {
struct gensec_security *gensec_ctx;
status = samba_server_gensec_start(req,
@@ -466,10 +465,17 @@ static void sesssetup_spnego(struct smbsrv_request *req, union smb_sesssetup *se
status = NT_STATUS_INSUFFICIENT_RESOURCES;
goto failed;
}
+ } else {
+ smb_sess = smbsrv_session_find_sesssetup(req->smb_conn, vuid);
}
if (!smb_sess) {
- status = NT_STATUS_ACCESS_DENIED;
+ status = NT_STATUS_DOS(ERRSRV, ERRbaduid);
+ goto failed;
+ }
+
+ if (smb_sess->session_info) {
+ status = NT_STATUS_INVALID_PARAMETER;
goto failed;
}
diff --git a/source4/smb_server/smb2/sesssetup.c b/source4/smb_server/smb2/sesssetup.c
index 41f629b..35a1484 100644
--- a/source4/smb_server/smb2/sesssetup.c
+++ b/source4/smb_server/smb2/sesssetup.c
@@ -167,6 +167,11 @@ static void smb2srv_sesssetup_backend(struct smb2srv_request *req, union smb_ses
}
if (!smb_sess) {
+ status = NT_STATUS_USER_SESSION_DELETED;
+ goto failed;
+ }
+
+ if (smb_sess->session_info) {
/* see WSPP test suite - test 11 */
status = NT_STATUS_REQUEST_NOT_ACCEPTED;
goto failed;
diff --git a/source4/torture/raw/context.c b/source4/torture/raw/context.c
index af53453..386ba34 100644
--- a/source4/torture/raw/context.c
+++ b/source4/torture/raw/context.c
@@ -52,6 +52,7 @@ static bool test_session(struct torture_context *tctx,
bool ret = true;
struct smbcli_session *session;
struct smbcli_session *session2;
+ uint16_t vuid3;
struct smbcli_session *session3;
struct smbcli_session *session4;
struct cli_credentials *anon_creds;
@@ -95,37 +96,50 @@ static bool test_session(struct torture_context *tctx,
session->vuid = setup.out.vuid;
- torture_comment(tctx, "create a third security context on the same transport, with vuid set\n");
+ torture_comment(tctx, "create a third security context on the same transport, with given vuid\n");
session2 = smbcli_session_init(cli->transport, tctx, false, options);
- session2->vuid = session->vuid;
+ if (cli->transport->negotiate.capabilities & CAP_EXTENDED_SECURITY) {
+ vuid3 = session->vuid+1;
+ if (vuid3 == cli->session->vuid) {
+ vuid3 += 1;
+ }
+ if (vuid3 == UINT16_MAX) {
+ vuid3 += 2;
+ }
+ } else {
+ vuid3 = session->vuid;
+ }
+ session2->vuid = vuid3;
+
setup.in.sesskey = cli->transport->negotiate.sesskey;
setup.in.capabilities = cli->transport->negotiate.capabilities; /* ignored in secondary session setup, except by our libs, which care about the extended security bit */
setup.in.workgroup = lpcfg_workgroup(tctx->lp_ctx);
setup.in.credentials = cmdline_credentials;
- status = smb_composite_sesssetup(session2, &setup);
- CHECK_STATUS(status, NT_STATUS_OK);
+ torture_comment(tctx, "vuid1=%d vuid2=%d vuid3=%d\n", cli->session->vuid, session->vuid, vuid3);
- session2->vuid = setup.out.vuid;
- torture_comment(tctx, "vuid1=%d vuid2=%d vuid3=%d\n", cli->session->vuid, session->vuid, session2->vuid);
-
+ status = smb_composite_sesssetup(session2, &setup);
if (cli->transport->negotiate.capabilities & CAP_EXTENDED_SECURITY) {
- /* Samba4 currently fails this - we need to determine if this insane behaviour is important */
- if (session2->vuid == session->vuid) {
- torture_comment(tctx, "server allows the user to re-use an existing vuid in session setup \n");
- }
+ CHECK_STATUS(status, NT_STATUS_DOS(ERRSRV, ERRbaduid));
} else {
- CHECK_NOT_VALUE(session2->vuid, session->vuid);
+ CHECK_STATUS(status, NT_STATUS_OK);
+ session2->vuid = setup.out.vuid;
+ CHECK_NOT_VALUE(session2->vuid, vuid3);
}
+
+ torture_comment(tctx, "vuid1=%d vuid2=%d vuid3=%d=>%d (%s)\n",
+ cli->session->vuid, session->vuid,
+ vuid3, session2->vuid, nt_errstr(status));
+
talloc_free(session2);
if (cli->transport->negotiate.capabilities & CAP_EXTENDED_SECURITY) {
torture_comment(tctx, "create a fourth security context on the same transport, without extended security\n");
session3 = smbcli_session_init(cli->transport, tctx, false, options);
- session3->vuid = session->vuid;
+ session3->vuid = vuid3;
setup.in.sesskey = cli->transport->negotiate.sesskey;
setup.in.capabilities &= ~CAP_EXTENDED_SECURITY; /* force a non extended security login (should fail) */
setup.in.workgroup = lpcfg_workgroup(tctx->lp_ctx);
@@ -144,7 +158,7 @@ static bool test_session(struct torture_context *tctx,
torture_comment(tctx, "create a fouth anonymous security context on the same transport, without extended security\n");
session4 = smbcli_session_init(cli->transport, tctx, false, options);
- session4->vuid = session->vuid;
+ session4->vuid = vuid3;
setup.in.sesskey = cli->transport->negotiate.sesskey;
setup.in.capabilities &= ~CAP_EXTENDED_SECURITY; /* force a non extended security login (should fail) */
setup.in.workgroup = lpcfg_workgroup(tctx->lp_ctx);
@@ -210,6 +224,7 @@ static bool test_session(struct torture_context *tctx,
torture_comment(tctx, "second logoff for the new vuid should fail\n");
status = smb_raw_ulogoff(session);
CHECK_STATUS(status, NT_STATUS_DOS(ERRSRV, ERRbaduid));
+ talloc_free(tree);
talloc_free(session);
torture_comment(tctx, "the fnum should have been auto-closed\n");
@@ -246,9 +261,6 @@ static bool test_session(struct torture_context *tctx,
CHECK_STATUS(status, NT_STATUS_OK);
}
-
- talloc_free(tree);
-
done:
return ret;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list