diff options
author | Jeremy Allison <jra@samba.org> | 2003-08-07 02:59:52 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2003-08-07 02:59:52 +0000 |
commit | 110abf10d208769bf6bcfc0604874cb1bed0406a (patch) | |
tree | 6d858a20f96b11318095705040bdf416fd2b0cd6 /source3/smbd | |
parent | 4461109416e8dc42903e6990306d059b8837dd8e (diff) | |
download | samba-110abf10d208769bf6bcfc0604874cb1bed0406a.tar.gz samba-110abf10d208769bf6bcfc0604874cb1bed0406a.tar.bz2 samba-110abf10d208769bf6bcfc0604874cb1bed0406a.zip |
Turns out I had my packet sequences wrong for oplock break code.
I was storing the mid of the oplock break - I should have been
storing the mid from the open. There are thus 2 types of deferred
packet sequence returns - ones that increment the sequence number
(returns from oplock causing opens) and ones that don't (change notify
returns etc). Running with signing forced on does lead to some
interesting tests :-).
Jeremy.
(This used to be commit 85907f02cec566502d9e4adabbd414020a26064d)
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/blocking.c | 2 | ||||
-rw-r--r-- | source3/smbd/notify.c | 2 | ||||
-rw-r--r-- | source3/smbd/oplock.c | 4 | ||||
-rw-r--r-- | source3/smbd/process.c | 11 |
4 files changed, 16 insertions, 3 deletions
diff --git a/source3/smbd/blocking.c b/source3/smbd/blocking.c index fed3a51b88..8fa2a6494e 100644 --- a/source3/smbd/blocking.c +++ b/source3/smbd/blocking.c @@ -148,7 +148,7 @@ for fnum = %d, name = %s\n", length, (int)blr->expire_time, lock_timeout, blr->fsp->fnum, blr->fsp->fsp_name )); /* Push the MID of this packet on the signing queue. */ - srv_defer_sign_response(SVAL(inbuf,smb_mid)); + srv_defer_sign_response(SVAL(inbuf,smb_mid), True); return True; } diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c index 9adf827c79..ca6f2b783f 100644 --- a/source3/smbd/notify.c +++ b/source3/smbd/notify.c @@ -199,7 +199,7 @@ BOOL change_notify_set(char *inbuf, files_struct *fsp, connection_struct *conn, DLIST_ADD(change_notify_list, cnbp); /* Push the MID of this packet on the signing queue. */ - srv_defer_sign_response(SVAL(inbuf,smb_mid)); + srv_defer_sign_response(SVAL(inbuf,smb_mid), True); return True; } diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c index 19e6956d9e..49a1b7d8cf 100644 --- a/source3/smbd/oplock.c +++ b/source3/smbd/oplock.c @@ -743,6 +743,10 @@ static BOOL oplock_break(SMB_DEV_T dev, SMB_INO_T inode, unsigned long file_id, /* Remember if we just sent a break to level II on this file. */ fsp->sent_oplock_break = using_levelII? LEVEL_II_BREAK_SENT:EXCLUSIVE_BREAK_SENT; + /* Ensure the reply for the open uses the correct sequence number. */ + /* This isn't a real deferred packet as it's response will also increment + * the sequence. */ + srv_defer_sign_response(get_current_mid(), False); /* Save the server smb signing state. */ sign_state = srv_oplock_set_signing(False); diff --git a/source3/smbd/process.c b/source3/smbd/process.c index dce1c4bc03..373c2f16ae 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -48,6 +48,15 @@ BOOL global_machine_password_needs_changing = False; extern int max_send; /**************************************************************************** + Function to return the current request mid from Inbuffer. +****************************************************************************/ + +uint16 get_current_mid(void) +{ + return SVAL(InBuffer,smb_mid); +} + +/**************************************************************************** structure to hold a linked list of queued messages. for processing. ****************************************************************************/ @@ -88,7 +97,7 @@ static BOOL push_message(ubi_slList *list_head, char *buf, int msg_len) ubi_slAddTail( list_head, msg); /* Push the MID of this packet on the signing queue. */ - srv_defer_sign_response(SVAL(buf,smb_mid)); + srv_defer_sign_response(SVAL(buf,smb_mid), True); return True; } |