From a11797cda2c1b81771edfdbd467ab36af121b6eb Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 27 May 2003 21:55:10 +0000 Subject: Correct (?) handling for VC = 0. Trying to fix XP logoff leaving resources around. Jeremy. (This used to be commit bf0916e1da442606311c74ac73ccec2e9710d663) --- source3/smbd/sesssetup.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'source3') diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index 64984d4809..15d816bd6d 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -493,6 +493,16 @@ static int reply_sesssetup_and_X_spnego(connection_struct *conn, char *inbuf, return ERROR_NT(NT_STATUS_LOGON_FAILURE); } +/**************************************************************************** + On new VC == 0, shutdown *all* old connections and users. +****************************************************************************/ + +static void setup_new_vc_session(void) +{ + DEBUG(2,("setup_new_vc_session: New VC == 0, closing all old resources.\n")); + conn_close_all(); + invalidate_all_vuids(); +} /**************************************************************************** reply to a session setup command @@ -541,6 +551,9 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf, return ERROR_NT(NT_STATUS_UNSUCCESSFUL); } + if (SVAL(inbuf,smb_vwv4) == 0) { + setup_new_vc_session(); + } return reply_sesssetup_and_X_spnego(conn, inbuf, outbuf, length, bufsize); } @@ -562,7 +575,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf, srvstr_pull_buf(inbuf, user, smb_buf(inbuf)+passlen1, sizeof(user), STR_TERMINATE); *domain = 0; - + } else { uint16 passlen1 = SVAL(inbuf,smb_vwv7); uint16 passlen2 = SVAL(inbuf,smb_vwv8); @@ -641,6 +654,10 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf, } + if (SVAL(inbuf,smb_vwv4) == 0) { + setup_new_vc_session(); + } + DEBUG(3,("sesssetupX:name=[%s]\\[%s]@[%s]\n", domain, user, get_remote_machine_name())); if (*user) { -- cgit