summaryrefslogtreecommitdiff
path: root/source3/smbd/smb2_break.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2012-08-22 10:33:07 +0200
committerStefan Metzmacher <metze@samba.org>2012-08-23 10:01:14 +0200
commit069db9b630b19835e8a008b50c0bed4d7245bf51 (patch)
tree6bda1f4e48526b4b4d507235a3df7c0b1f4ee706 /source3/smbd/smb2_break.c
parent54dfd08cb2970fcf2ad915f1ac0caec626cdd44e (diff)
downloadsamba-069db9b630b19835e8a008b50c0bed4d7245bf51.tar.gz
samba-069db9b630b19835e8a008b50c0bed4d7245bf51.tar.bz2
samba-069db9b630b19835e8a008b50c0bed4d7245bf51.zip
s3:smb2_break: encrypt OPLOCK BREAK notifications
metze Autobuild-User(master): Stefan Metzmacher <metze@samba.org> Autobuild-Date(master): Thu Aug 23 10:01:14 CEST 2012 on sn-devel-104
Diffstat (limited to 'source3/smbd/smb2_break.c')
-rw-r--r--source3/smbd/smb2_break.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/source3/smbd/smb2_break.c b/source3/smbd/smb2_break.c
index 8143b8b976..8db9e6ddec 100644
--- a/source3/smbd/smb2_break.c
+++ b/source3/smbd/smb2_break.c
@@ -235,6 +235,26 @@ void send_break_message_smb2(files_struct *fsp, int level)
SMB2_OPLOCK_LEVEL_II :
SMB2_OPLOCK_LEVEL_NONE;
NTSTATUS status;
+ struct smbXsrv_session *session = NULL;
+ struct timeval tv = timeval_current();
+ NTTIME now = timeval_to_nttime(&tv);
+
+ status = smb2srv_session_lookup(fsp->conn->sconn->conn,
+ fsp->vuid,
+ now,
+ &session);
+ if (NT_STATUS_EQUAL(status, NT_STATUS_USER_SESSION_DELETED) ||
+ (session == NULL))
+ {
+
+ DEBUG(10,("send_break_message_smb2: skip oplock break "
+ "for file %s, %s, smb2 level %u session %llu not found\n",
+ fsp_str_dbg(fsp),
+ fsp_fnum_dbg(fsp),
+ (unsigned int)smb2_oplock_level,
+ (unsigned long long)fsp->vuid));
+ return;
+ }
DEBUG(10,("send_break_message_smb2: sending oplock break "
"for file %s, %s, smb2 level %u\n",
@@ -243,9 +263,10 @@ void send_break_message_smb2(files_struct *fsp, int level)
(unsigned int)smb2_oplock_level ));
status = smbd_smb2_send_oplock_break(fsp->conn->sconn,
- fsp->op->global->open_persistent_id,
- fsp->op->global->open_volatile_id,
- smb2_oplock_level);
+ session,
+ fsp->conn->tcon,
+ fsp->op,
+ smb2_oplock_level);
if (!NT_STATUS_IS_OK(status)) {
smbd_server_connection_terminate(fsp->conn->sconn,
nt_errstr(status));