diff options
author | Jeremy Allison <jra@samba.org> | 2005-10-27 23:30:25 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:05:13 -0500 |
commit | c0dad16e0ff95a800dfbe11ca3c6303d882687a9 (patch) | |
tree | 3afc606e14da0f86c12c645e65c0f3e4fd4da57b /source3/smbd/close.c | |
parent | 533da83852b13c2e008938a026f99937ef320f3c (diff) | |
download | samba-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.c | 23 |
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. */ |