summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2003-05-27 21:55:39 +0000
committerJeremy Allison <jra@samba.org>2003-05-27 21:55:39 +0000
commitbefa2a42192a09da912ce7bbfea727c25b27e124 (patch)
treebaecc4b285cf62a81d067834d8279b7e424d87b3 /source3/smbd
parentd9e59358f73382fb1c53820c656d9bc86112ed1e (diff)
downloadsamba-befa2a42192a09da912ce7bbfea727c25b27e124.tar.gz
samba-befa2a42192a09da912ce7bbfea727c25b27e124.tar.bz2
samba-befa2a42192a09da912ce7bbfea727c25b27e124.zip
Correct (?) handling for VC = 0. Trying to fix XP logoff leaving resources
around. Jeremy. (This used to be commit 870e111facb4abb01dd1d92739346d764eff056c)
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/sesssetup.c19
1 files changed, 18 insertions, 1 deletions
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) {