r20542: Make close_remove_share_mode retun NTSTATUS. Not that anybody cares yet...
authorVolker Lendecke <vlendec@samba.org>
Fri, 5 Jan 2007 11:31:28 +0000 (11:31 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:16:55 +0000 (12:16 -0500)
source/smbd/close.c

index 7e912083137ad62fc84d7c44a0161d4f854116b5..fe5e5eccf2c5fa200a14289b6c2e456d78ff3cb4 100644 (file)
@@ -144,12 +144,14 @@ static void notify_deferred_opens(struct share_mode_lock *lck)
  Deal with removing a share mode on last close.
 ****************************************************************************/
 
-static int close_remove_share_mode(files_struct *fsp, enum file_close_type close_type)
+static NTSTATUS close_remove_share_mode(files_struct *fsp,
+                                       enum file_close_type close_type)
 {
        connection_struct *conn = fsp->conn;
        BOOL delete_file = False;
        struct share_mode_lock *lck;
        SMB_STRUCT_STAT sbuf;
+       NTSTATUS status = NT_STATUS_OK;
 
        /*
         * Lock the share entries, and determine if we should delete
@@ -162,7 +164,7 @@ static int close_remove_share_mode(files_struct *fsp, enum file_close_type close
        if (lck == NULL) {
                DEBUG(0, ("close_remove_share_mode: Could not get share mode "
                          "lock for file %s\n", fsp->fsp_name));
-               return EINVAL;
+               return NT_STATUS_INVALID_PARAMETER;
        }
 
        if (!del_share_mode(lck, fsp)) {
@@ -197,7 +199,7 @@ static int close_remove_share_mode(files_struct *fsp, enum file_close_type close
            || !delete_file
            || (lck->delete_token == NULL)) {
                TALLOC_FREE(lck);
-               return 0;
+               return NT_STATUS_OK;
        }
 
        /*
@@ -227,6 +229,9 @@ static int close_remove_share_mode(files_struct *fsp, enum file_close_type close
                DEBUG(5,("close_remove_share_mode: file %s. Delete on close "
                         "was set and stat failed with error %s\n",
                         fsp->fsp_name, strerror(errno) ));
+               /*
+                * Don't save the errno here, we ignore this error
+                */
                goto done;
        }
 
@@ -239,6 +244,9 @@ static int close_remove_share_mode(files_struct *fsp, enum file_close_type close
                         fsp->fsp_name,
                         (unsigned int)fsp->dev, (double)fsp->inode,
                         (unsigned int)sbuf.st_dev, (double)sbuf.st_ino ));
+               /*
+                * Don't save the errno here, we ignore this error
+                */
                goto done;
        }
 
@@ -254,9 +262,13 @@ static int close_remove_share_mode(files_struct *fsp, enum file_close_type close
                DEBUG(5,("close_remove_share_mode: file %s. Delete on close "
                         "was set and unlink failed with error %s\n",
                         fsp->fsp_name, strerror(errno) ));
+
+               status = map_nt_error_from_unix(errno);
                goto done;
        }
 
+       status = NT_STATUS_FILE_DELETED;
+
  done:
        /* unbecome user. */
        pop_sec_ctx();
@@ -264,7 +276,7 @@ static int close_remove_share_mode(files_struct *fsp, enum file_close_type close
        process_pending_change_notify_queue((time_t)0);
 
        TALLOC_FREE(lck);
-       return 0;
+       return status;
 }
 
 /****************************************************************************