From: Christof Schmitt Date: Wed, 10 Jan 2018 22:56:08 +0000 (-0700) Subject: Remove file system sharemode before calling unlink X-Git-Tag: tevent-0.9.36~309 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e77f8e4628ba868f09cbcf2970caac6c69fe080c;p=thirdparty%2Fsamba.git 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 Reviewed-by: Jeremy Allison Autobuild-User(master): Christof Schmitt Autobuild-Date(master): Wed Jan 17 01:31:53 CET 2018 on sn-devel-144 --- diff --git a/source3/smbd/close.c b/source3/smbd/close.c index 095feecf204..2f6cc4f0aad 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) { /*