[SCM] Samba Shared Repository - branch master updated

Christof Schmitt cs at samba.org
Wed Jan 17 00:32:02 UTC 2018


The branch, master has been updated
       via  e77f8e4 Remove file system sharemode before calling unlink
      from  8224a3d packaging: fix default systemd-dir path.

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit e77f8e4628ba868f09cbcf2970caac6c69fe080c
Author: Christof Schmitt <cs at samba.org>
Date:   Wed Jan 10 15:56:08 2018 -0700

    Remove file system sharemode before calling unlink
    
    GPFS implements the DENY_DELETE sharemode, which prevents unlink() from
    deleting the file.. This causes the problem that deleting a file through
    "delete on close" fails, as the code in close.c first calls unlink() and
    only later removes the file system sharemode.
    
    Fix this by removing the file system sharemode before calling unlink().
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13217
    
    Signed-off-by: Christof Schmitt <cs at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Christof Schmitt <cs at samba.org>
    Autobuild-Date(master): Wed Jan 17 01:31:53 CET 2018 on sn-devel-144

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/close.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/close.c b/source3/smbd/close.c
index 095feec..2f6cc4f 100644
--- a/source3/smbd/close.c
+++ b/source3/smbd/close.c
@@ -446,6 +446,22 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
 		}
 	}
 
+	if (fsp->kernel_share_modes_taken) {
+		int ret_flock;
+
+		/*
+		 * A file system sharemode could block the unlink;
+		 * remove filesystem sharemodes first.
+		 */
+		ret_flock = SMB_VFS_KERNEL_FLOCK(fsp, 0, 0);
+		if (ret_flock == -1) {
+			DBG_INFO("removing kernel flock for %s failed: %s\n",
+				  fsp_str_dbg(fsp), strerror(errno));
+		}
+
+		fsp->kernel_share_modes_taken = false;
+	}
+
 
 	if (SMB_VFS_UNLINK(conn, fsp->fsp_name) != 0) {
 		/*


-- 
Samba Shared Repository



More information about the samba-cvs mailing list