s3:smbd: use smbXsrv_session_logoff() in reply_ulogoff()
authorStefan Metzmacher <metze@samba.org>
Tue, 22 May 2012 14:28:00 +0000 (16:28 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 1 Jun 2012 09:53:50 +0000 (11:53 +0200)
metze

source3/smbd/reply.c

index b230c1f03b0ca9939914ef6e59b4f487b40961f1..33b16f5fab75bd1a481acd2d648322d2b06cc9d7 100644 (file)
@@ -2100,6 +2100,7 @@ void reply_ulogoffX(struct smb_request *req)
        struct smbd_server_connection *sconn = req->sconn;
        user_struct *vuser;
        struct smbXsrv_session *session = NULL;
+       NTSTATUS status;
 
        START_PROFILE(SMBulogoffX);
 
@@ -2115,14 +2116,26 @@ void reply_ulogoffX(struct smb_request *req)
                return;
        }
 
-       /* in user level security we are supposed to close any files
-               open by this user */
-       if (vuser != NULL) {
-               file_close_user(sconn, req->vuid);
-               session = vuser->session;
+       session = vuser->session;
+       vuser = NULL;
+
+       /*
+        * TODO: cancel all outstanding requests on the session
+        */
+       status = smbXsrv_session_logoff(session);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0, ("reply_ulogoff: "
+                         "smbXsrv_session_logoff() failed: %s\n",
+                         nt_errstr(status)));
+               /*
+                * If we hit this case, there is something completely
+                * wrong, so we better disconnect the transport connection.
+                */
+               END_PROFILE(SMBulogoffX);
+               exit_server(__location__ ": smbXsrv_session_logoff failed");
+               return;
        }
 
-       invalidate_vuid(sconn, req->vuid);
        TALLOC_FREE(session);
 
        reply_outbuf(req, 2, 0);