s4-ntvfs: added allow_override check based on use of NT ACL
[ira/wip.git] / source4 / ntvfs / posix / pvfs_open.c
index c0f55e8e73ceda6d59a87844e9f9f6cdc83277d8..a095f746331adca236e69caae9d1d8afe06d471e 100644 (file)
@@ -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);
                }