summaryrefslogtreecommitdiff
path: root/source4/smb_server/smb2/sesssetup.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2008-06-09 21:45:19 +0200
committerStefan Metzmacher <metze@samba.org>2008-07-28 14:09:45 +0200
commit8623e2cc4ca3b7fefcdc943c1da8a89b805f5d29 (patch)
tree7127d1be75bf922dfb0cd920dd532beda3269e7e /source4/smb_server/smb2/sesssetup.c
parent35bd7a6378cc25ed6b24d153c3cf1557d6126788 (diff)
downloadsamba-8623e2cc4ca3b7fefcdc943c1da8a89b805f5d29.tar.gz
samba-8623e2cc4ca3b7fefcdc943c1da8a89b805f5d29.tar.bz2
samba-8623e2cc4ca3b7fefcdc943c1da8a89b805f5d29.zip
smb2srv: correctly hold the signing state per session
metze (This used to be commit 5b3ba3f3556e8031133128853cd2324ee3852aa1)
Diffstat (limited to 'source4/smb_server/smb2/sesssetup.c')
-rw-r--r--source4/smb_server/smb2/sesssetup.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/source4/smb_server/smb2/sesssetup.c b/source4/smb_server/smb2/sesssetup.c
index 9fb3220005..6e3e963794 100644
--- a/source4/smb_server/smb2/sesssetup.c
+++ b/source4/smb_server/smb2/sesssetup.c
@@ -90,6 +90,10 @@ static void smb2srv_sesssetup_callback(struct gensec_update_request *greq, void
}
req->session = smb_sess;
+ if (smb_sess->smb2_signing.required) {
+ /* activate smb2 signing on the session */
+ smb_sess->smb2_signing.active = true;
+ }
done:
io->smb2.out.uid = smb_sess->vuid;
failed:
@@ -182,7 +186,15 @@ static void smb2srv_sesssetup_backend(struct smb2srv_request *req, union smb_ses
This is deliberate as windows does not set it even when it does
set SMB2_NEGOTIATE_SIGNING_REQUIRED */
if (io->smb2.in.security_mode & SMB2_NEGOTIATE_SIGNING_REQUIRED) {
- req->smb_conn->doing_signing = true;
+ smb_sess->smb2_signing.required = true;
+ } else if (req->smb_conn->smb2_signing_required) {
+ /*
+ * if required signing was negotiates in SMB2 Negotiate
+ * then the client made an error not using it here
+ */
+ DEBUG(1, ("SMB2 signing required on the connection but not used on session\n"));
+ req->status = NT_STATUS_FOOBAR;
+ goto failed;
}
return;