diff options
author | Jeremy Allison <jra@samba.org> | 2004-06-11 23:54:52 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:51:56 -0500 |
commit | 58686e844f30e0c1712ec87d7f1b3e743d09be96 (patch) | |
tree | 0a12d81b1d2df90220b001e4f49b38f795d02042 /source3/smbd | |
parent | fddef6fc201ed127eaac737e725d1c2dd8c6926e (diff) | |
download | samba-58686e844f30e0c1712ec87d7f1b3e743d09be96.tar.gz samba-58686e844f30e0c1712ec87d7f1b3e743d09be96.tar.bz2 samba-58686e844f30e0c1712ec87d7f1b3e743d09be96.zip |
r1117: Doh ! Remember to turn off signing when sending a "break to level II" oplock
message, or we mess up the signing sequence number.... Also improve sign error
reporting. Also when deferring an open that had been deferred due to an oplock
break, don't re-add the mid to the pending sign queue or we increment the sequence
number twice and mess up signing again...
I can now bounce between 2 WinXP/Win2003 boxes opening Excel spreadsheets with
signing turned on and get correct "file in use" messages.
Jeremy.
(This used to be commit 1745ce4e2cf7fcb4c27c077973258d157cd241b1)
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/oplock.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c index c34fa60954..1ffc798b1f 100644 --- a/source3/smbd/oplock.c +++ b/source3/smbd/oplock.c @@ -616,6 +616,8 @@ BOOL oplock_break_level2(files_struct *fsp, BOOL local_request, int token) */ if (global_client_caps & CAP_LEVEL_II_OPLOCKS) { + BOOL sign_state; + /* * If we are sending an oplock break due to an SMB sent * by our own client we ensure that we wait at leat @@ -627,10 +629,16 @@ BOOL oplock_break_level2(files_struct *fsp, BOOL local_request, int token) wait_before_sending_break(local_request); /* Prepare the SMBlockingX message. */ - prepare_break_message( outbuf, fsp, False); + + /* Save the server smb signing state. */ + sign_state = srv_oplock_set_signing(False); + if (!send_smb(smbd_server_fd(), outbuf)) exit_server("oplock_break_level2: send_smb failed."); + + /* Restore the sign state to what it was. */ + srv_oplock_set_signing(sign_state); } /* |