summaryrefslogtreecommitdiff
path: root/source3/smbd/close.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2005-10-27 23:30:25 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:05:13 -0500
commitc0dad16e0ff95a800dfbe11ca3c6303d882687a9 (patch)
tree3afc606e14da0f86c12c645e65c0f3e4fd4da57b /source3/smbd/close.c
parent533da83852b13c2e008938a026f99937ef320f3c (diff)
downloadsamba-c0dad16e0ff95a800dfbe11ca3c6303d882687a9.tar.gz
samba-c0dad16e0ff95a800dfbe11ca3c6303d882687a9.tar.bz2
samba-c0dad16e0ff95a800dfbe11ca3c6303d882687a9.zip
r11344: I don't think share mode conflicts occur on deleting
a directory when you've got permissions. Need to write a smbtorture test for this. Jeremy. (This used to be commit e959a5be393eb59b8987eb6967a2ee5d11978f41)
Diffstat (limited to 'source3/smbd/close.c')
-rw-r--r--source3/smbd/close.c23
1 files changed, 6 insertions, 17 deletions
diff --git a/source3/smbd/close.c b/source3/smbd/close.c
index 44ab168a3a..fcea62e1aa 100644
--- a/source3/smbd/close.c
+++ b/source3/smbd/close.c
@@ -300,8 +300,6 @@ static int close_directory(files_struct *fsp, BOOL normal_close)
struct share_mode_lock *lck = 0;
BOOL delete_dir = False;
- remove_pending_change_notify_requests_by_fid(fsp);
-
/*
* NT can set delete_on_close of the last open
* reference to a directory also.
@@ -320,18 +318,7 @@ static int close_directory(files_struct *fsp, BOOL normal_close)
delete_dir = lck->delete_on_close;
- if (delete_dir) {
- int i;
- /* See if others still have the file open. If this is the
- * case, then don't delete */
- for (i=0; i<lck->num_share_modes; i++) {
- if (is_valid_share_mode_entry(&lck->share_modes[i])) {
- delete_dir = False;
- break;
- }
- }
- }
-
+ talloc_free(lck);
if (normal_close && delete_dir) {
BOOL ok = rmdir_internals(fsp->conn, fsp->fsp_name);
@@ -344,13 +331,15 @@ static int close_directory(files_struct *fsp, BOOL normal_close)
*/
if(ok) {
- remove_pending_change_notify_requests_by_filename(fsp);
+ remove_pending_change_notify_requests_by_fid(fsp, NT_STATUS_DELETE_PENDING);
+ remove_pending_change_notify_requests_by_filename(fsp, NT_STATUS_DELETE_PENDING);
+
}
process_pending_change_notify_queue((time_t)0);
+ } else {
+ remove_pending_change_notify_requests_by_fid(fsp, NT_STATUS_CANCELLED);
}
- talloc_free(lck);
-
/*
* Do the code common to files and directories.
*/