From 3c4af39aa506a25fc6d6753dbe34e4e1c0dd0b43 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 1 Dec 2011 13:40:49 +1100 Subject: s4-ntvfs: added allow_override check based on use of NT ACL This disables the posix permission override if the calculated permissions did not come from a NT ACL. Autobuild-User: Andrew Tridgell Autobuild-Date: Thu Dec 1 05:14:49 CET 2011 on sn-devel-104 --- source4/ntvfs/posix/pvfs_util.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'source4/ntvfs/posix/pvfs_util.c') diff --git a/source4/ntvfs/posix/pvfs_util.c b/source4/ntvfs/posix/pvfs_util.c index c6c6eaa13c..6afb928d73 100644 --- a/source4/ntvfs/posix/pvfs_util.c +++ b/source4/ntvfs/posix/pvfs_util.c @@ -90,7 +90,8 @@ uint32_t pvfs_attrib_normalise(uint32_t attrib, mode_t mode) */ NTSTATUS pvfs_copy_file(struct pvfs_state *pvfs, struct pvfs_filename *name1, - struct pvfs_filename *name2) + struct pvfs_filename *name2, + bool allow_override) { int fd1, fd2; mode_t mode; @@ -102,13 +103,13 @@ NTSTATUS pvfs_copy_file(struct pvfs_state *pvfs, return NT_STATUS_NO_MEMORY; } - fd1 = pvfs_sys_open(pvfs, name1->full_name, O_RDONLY, 0); + fd1 = pvfs_sys_open(pvfs, name1->full_name, O_RDONLY, 0, allow_override); if (fd1 == -1) { talloc_free(buf); return pvfs_map_errno(pvfs, errno); } - fd2 = pvfs_sys_open(pvfs, name2->full_name, O_CREAT|O_EXCL|O_WRONLY, 0); + fd2 = pvfs_sys_open(pvfs, name2->full_name, O_CREAT|O_EXCL|O_WRONLY, 0, allow_override); if (fd2 == -1) { close(fd1); talloc_free(buf); @@ -133,7 +134,7 @@ NTSTATUS pvfs_copy_file(struct pvfs_state *pvfs, close(fd1); close(fd2); talloc_free(buf); - pvfs_sys_unlink(pvfs, name2->full_name); + pvfs_sys_unlink(pvfs, name2->full_name, allow_override); if (ret2 == -1) { return pvfs_map_errno(pvfs, errno); } @@ -145,10 +146,10 @@ NTSTATUS pvfs_copy_file(struct pvfs_state *pvfs, close(fd1); mode = pvfs_fileperms(pvfs, name1->dos.attrib); - if (pvfs_sys_fchmod(pvfs, fd2, mode) == -1) { + if (pvfs_sys_fchmod(pvfs, fd2, mode, allow_override) == -1) { status = pvfs_map_errno(pvfs, errno); close(fd2); - pvfs_sys_unlink(pvfs, name2->full_name); + pvfs_sys_unlink(pvfs, name2->full_name, allow_override); return status; } @@ -158,7 +159,7 @@ NTSTATUS pvfs_copy_file(struct pvfs_state *pvfs, status = pvfs_dosattrib_save(pvfs, name2, fd2); if (!NT_STATUS_IS_OK(status)) { close(fd2); - pvfs_sys_unlink(pvfs, name2->full_name); + pvfs_sys_unlink(pvfs, name2->full_name, allow_override); return status; } -- cgit