diff options
author | Andrew Tridgell <tridge@samba.org> | 2011-12-01 13:40:49 +1100 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2011-12-01 05:14:49 +0100 |
commit | 3c4af39aa506a25fc6d6753dbe34e4e1c0dd0b43 (patch) | |
tree | 7ac56983f5a5d2d2de177cc21f056270d892334c /source4/ntvfs/posix/pvfs_util.c | |
parent | d1274f7f6236b47a1c6aa1737b054ed521d31b67 (diff) | |
download | samba-3c4af39aa506a25fc6d6753dbe34e4e1c0dd0b43.tar.gz samba-3c4af39aa506a25fc6d6753dbe34e4e1c0dd0b43.tar.bz2 samba-3c4af39aa506a25fc6d6753dbe34e4e1c0dd0b43.zip |
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 <tridge@samba.org>
Autobuild-Date: Thu Dec 1 05:14:49 CET 2011 on sn-devel-104
Diffstat (limited to 'source4/ntvfs/posix/pvfs_util.c')
-rw-r--r-- | source4/ntvfs/posix/pvfs_util.c | 15 |
1 files changed, 8 insertions, 7 deletions
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; } |