s3:smbd: use smbXsrv_tcon_disconnect() in smbd_smb2_request_process_tdis()
authorMichael Adam <obnox@samba.org>
Tue, 22 May 2012 11:48:28 +0000 (13:48 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 1 Jun 2012 09:53:45 +0000 (11:53 +0200)
This removes a direct use of close_cnum()

Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>

source3/smbd/smb2_tcon.c

index 9de91603c6c82e22a1969c7a73efb9001a4e6e0a..86444a96cde491222a2925e2e8b7d0e44345bf3e 100644 (file)
@@ -371,7 +371,6 @@ NTSTATUS smbd_smb2_request_process_tdis(struct smbd_smb2_request *req)
 {
        NTSTATUS status;
        DATA_BLOB outbody;
-       struct connection_struct *compat_conn = req->tcon->compat;
 
        status = smbd_smb2_request_verify_sizes(req, 0x04);
        if (!NT_STATUS_IS_OK(status)) {
@@ -380,11 +379,19 @@ NTSTATUS smbd_smb2_request_process_tdis(struct smbd_smb2_request *req)
 
        /*
         * TODO: cancel all outstanding requests on the tcon
-        *       and delete all file handles.
         */
-       set_current_service(compat_conn, 0, true);
-       close_cnum(compat_conn, compat_conn->vuid);
-       req->tcon->compat = NULL;
+       status = smbXsrv_tcon_disconnect(req->tcon);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0, ("smbd_smb2_request_process_tdis: "
+                         "smbXsrv_tcon_disconnect() failed: %s\n",
+                         nt_errstr(status)));
+               /*
+                * If we hit this case, there is something completely
+                * wrong, so we better disconnect the transport connection.
+                */
+               return status;
+       }
+
        TALLOC_FREE(req->tcon);
 
        outbody = data_blob_talloc(req->out.vector, NULL, 0x04);