Fix bug #7033 - SMBrmdir call always returns true, even on failure to delete a directory.
authorJeremy Allison <jra@samba.org>
Wed, 13 Jan 2010 00:55:31 +0000 (16:55 -0800)
committerJeremy Allison <jra@samba.org>
Wed, 13 Jan 2010 00:55:31 +0000 (16:55 -0800)
Argh. Missed the second (and essential) part of the fix for the above :-(.

Jeremy

source3/smbd/close.c

index e81a2fdff6369bc7841fb69615fb48c637f87290..ca1ac47fa02ce5de6d6f95a3386600121c30c73a 100644 (file)
@@ -926,6 +926,7 @@ static NTSTATUS close_directory(struct smb_request *req, files_struct *fsp,
        struct share_mode_lock *lck = NULL;
        bool delete_dir = False;
        NTSTATUS status = NT_STATUS_OK;
+       NTSTATUS status1 = NT_STATUS_OK;
 
        /*
         * NT can set delete_on_close of the last open
@@ -1025,9 +1026,9 @@ static NTSTATUS close_directory(struct smb_request *req, files_struct *fsp,
                        fsp, NT_STATUS_OK);
        }
 
-       status = fd_close(fsp);
+       status1 = fd_close(fsp);
 
-       if (!NT_STATUS_IS_OK(status)) {
+       if (!NT_STATUS_IS_OK(status1)) {
                DEBUG(0, ("Could not close dir! fname=%s, fd=%d, err=%d=%s\n",
                          fsp_str_dbg(fsp), fsp->fh->fd, errno,
                          strerror(errno)));
@@ -1045,6 +1046,9 @@ static NTSTATUS close_directory(struct smb_request *req, files_struct *fsp,
 
  out:
        TALLOC_FREE(lck);
+       if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(status1)) {
+               status = status1;
+       }
        return status;
 }