svn commit: samba r11345 - in trunk/source/smbd: .

jra at samba.org jra at samba.org
Thu Oct 27 23:30:29 GMT 2005


Author: jra
Date: 2005-10-27 23:30:27 +0000 (Thu, 27 Oct 2005)
New Revision: 11345

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=11345

Log:
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.

Modified:
   trunk/source/smbd/close.c
   trunk/source/smbd/notify.c


Changeset:
Modified: trunk/source/smbd/close.c
===================================================================
--- trunk/source/smbd/close.c	2005-10-27 23:30:25 UTC (rev 11344)
+++ trunk/source/smbd/close.c	2005-10-27 23:30:27 UTC (rev 11345)
@@ -300,8 +300,6 @@
 	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,19 +318,8 @@
 
 	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);
 		DEBUG(5,("close_directory: %s. Delete on close was set - deleting directory %s.\n",
@@ -344,13 +331,15 @@
 		 */
 
 		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.
 	 */

Modified: trunk/source/smbd/notify.c
===================================================================
--- trunk/source/smbd/notify.c	2005-10-27 23:30:25 UTC (rev 11344)
+++ trunk/source/smbd/notify.c	2005-10-27 23:30:27 UTC (rev 11345)
@@ -82,13 +82,14 @@
  Delete entries by fnum from the change notify pending queue.
 *****************************************************************************/
 
-void remove_pending_change_notify_requests_by_fid(files_struct *fsp)
+void remove_pending_change_notify_requests_by_fid(files_struct *fsp, NTSTATUS status)
 {
 	struct change_notify *cnbp, *next;
 
 	for (cnbp=change_notify_list; cnbp; cnbp=next) {
 		next=cnbp->next;
 		if (cnbp->fsp->fnum == fsp->fnum) {
+			change_notify_reply_packet(cnbp->request_buf,status);
 			change_notify_remove(cnbp);
 		}
 	}
@@ -116,7 +117,7 @@
  Always send reply.
 *****************************************************************************/
 
-void remove_pending_change_notify_requests_by_filename(files_struct *fsp)
+void remove_pending_change_notify_requests_by_filename(files_struct *fsp, NTSTATUS status)
 {
 	struct change_notify *cnbp, *next;
 
@@ -127,7 +128,7 @@
 		 * the filename are identical.
 		 */
 		if((cnbp->fsp->conn == fsp->conn) && strequal(cnbp->fsp->fsp_name,fsp->fsp_name)) {
-			change_notify_reply_packet(cnbp->request_buf,NT_STATUS_CANCELLED);
+			change_notify_reply_packet(cnbp->request_buf,status);
 			change_notify_remove(cnbp);
 		}
 	}



More information about the samba-cvs mailing list