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_open.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'source4/ntvfs/posix/pvfs_open.c') diff --git a/source4/ntvfs/posix/pvfs_open.c b/source4/ntvfs/posix/pvfs_open.c index c0f55e8e73..a095f74633 100644 --- a/source4/ntvfs/posix/pvfs_open.c +++ b/source4/ntvfs/posix/pvfs_open.c @@ -73,7 +73,7 @@ static int pvfs_dir_handle_destructor(struct pvfs_file_handle *h) DEBUG(0,("Warning: xattr unlink hook failed for '%s' - %s\n", delete_path, nt_errstr(status))); } - if (pvfs_sys_rmdir(h->pvfs, delete_path) != 0) { + if (pvfs_sys_rmdir(h->pvfs, delete_path, h->name->allow_override) != 0) { DEBUG(0,("pvfs_dir_handle_destructor: failed to rmdir '%s' - %s\n", delete_path, strerror(errno))); } @@ -344,7 +344,7 @@ static NTSTATUS pvfs_open_directory(struct pvfs_state *pvfs, uint32_t attrib = io->generic.in.file_attr | FILE_ATTRIBUTE_DIRECTORY; mode_t mode = pvfs_fileperms(pvfs, attrib); - if (pvfs_sys_mkdir(pvfs, name->full_name, mode) == -1) { + if (pvfs_sys_mkdir(pvfs, name->full_name, mode, name->allow_override) == -1) { return pvfs_map_errno(pvfs,errno); } @@ -432,7 +432,7 @@ static NTSTATUS pvfs_open_directory(struct pvfs_state *pvfs, return NT_STATUS_OK; cleanup_delete: - pvfs_sys_rmdir(pvfs, name->full_name); + pvfs_sys_rmdir(pvfs, name->full_name, name->allow_override); return status; } @@ -514,7 +514,7 @@ static int pvfs_handle_destructor(struct pvfs_file_handle *h) DEBUG(0,("Warning: xattr unlink hook failed for '%s' - %s\n", delete_path, nt_errstr(status))); } - if (pvfs_sys_unlink(h->pvfs, delete_path) != 0) { + if (pvfs_sys_unlink(h->pvfs, delete_path, h->name->allow_override) != 0) { DEBUG(0,("pvfs_close: failed to delete '%s' - %s\n", delete_path, strerror(errno))); } else { @@ -677,7 +677,7 @@ static NTSTATUS pvfs_create_file(struct pvfs_state *pvfs, mode = pvfs_fileperms(pvfs, attrib); /* create the file */ - fd = pvfs_sys_open(pvfs, name->full_name, flags | O_CREAT | O_EXCL| O_NONBLOCK, mode); + fd = pvfs_sys_open(pvfs, name->full_name, flags | O_CREAT | O_EXCL| O_NONBLOCK, mode, name->allow_override); if (fd == -1) { return pvfs_map_errno(pvfs, errno); } @@ -856,7 +856,7 @@ static NTSTATUS pvfs_create_file(struct pvfs_state *pvfs, cleanup_delete: close(fd); - pvfs_sys_unlink(pvfs, name->full_name); + pvfs_sys_unlink(pvfs, name->full_name, name->allow_override); return status; } @@ -1549,7 +1549,7 @@ NTSTATUS pvfs_open(struct ntvfs_module_context *ntvfs, } /* do the actual open */ - fd = pvfs_sys_open(pvfs, f->handle->name->full_name, flags | O_NONBLOCK, 0); + fd = pvfs_sys_open(pvfs, f->handle->name->full_name, flags | O_NONBLOCK, 0, name->allow_override); if (fd == -1) { status = pvfs_map_errno(f->pvfs, errno); @@ -1635,7 +1635,7 @@ NTSTATUS pvfs_open(struct ntvfs_module_context *ntvfs, mode_t mode = pvfs_fileperms(pvfs, attrib); if (f->handle->name->st.st_mode != mode && f->handle->name->dos.attrib != attrib && - pvfs_sys_fchmod(pvfs, fd, mode) == -1) { + pvfs_sys_fchmod(pvfs, fd, mode, name->allow_override) == -1) { talloc_free(lck); return pvfs_map_errno(pvfs, errno); } -- cgit