try to fix SMB_ASSERT(got_token)... TODO
authorStefan Metzmacher <metze@samba.org>
Fri, 1 Jun 2012 10:52:16 +0000 (12:52 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 1 Jun 2012 10:52:16 +0000 (12:52 +0200)
source3/smbd/close.c

index 4b7f6945107cd28d4cf50194b623c3e68067cd42..bdd177cca8f38eb43347cf9ed48eb437f85138da 100644 (file)
@@ -385,12 +385,6 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
                }
        }
 
-       if (!del_share_mode(lck, fsp)) {
-               DEBUG(0, ("close_remove_share_mode: Could not delete share "
-                         "entry for file %s\n",
-                         fsp_str_dbg(fsp)));
-       }
-
        if (fsp->initial_delete_on_close &&
                        !is_delete_on_close_set(lck, fsp->name_hash)) {
                bool became_user = False;
@@ -420,6 +414,9 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
                   POSIX delete now. */
                for (i=0; i<lck->data->num_share_modes; i++) {
                        struct share_mode_entry *e = &lck->data->share_modes[i];
+
+                       //TODO: continue if our own entry...
+
                        if (is_valid_share_mode_entry(e) &&
                                        e->name_hash == fsp->name_hash) {
                                if (fsp->posix_open && (e->flags & SHARE_MODE_FLAG_POSIX_OPEN)) {
@@ -445,6 +442,12 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
 
        if (!(close_type == NORMAL_CLOSE || close_type == SHUTDOWN_CLOSE) ||
                        !delete_file) {
+               if (!del_share_mode(lck, fsp)) {
+                       DEBUG(0, ("close_remove_share_mode: Could not delete share "
+                                 "entry for file %s\n",
+                                 fsp_str_dbg(fsp)));
+               }
+
                TALLOC_FREE(lck);
                return NT_STATUS_OK;
        }
@@ -564,6 +567,14 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
                pop_sec_ctx();
        }
 
+       if (delete_file) {
+               if (!del_share_mode(lck, fsp)) {
+                       DEBUG(0, ("close_remove_share_mode: Could not delete share "
+                                 "entry for file %s\n",
+                                 fsp_str_dbg(fsp)));
+               }
+       }
+
        TALLOC_FREE(lck);
 
        if (delete_file) {