From 0379d9c151359f0f74cbe7883e73a87b7d96d48d Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 17 Sep 2008 13:44:29 -0700 Subject: Correctly get+set the NT ACL on a file. Now to make us check it on open.. Jeremy. --- source3/modules/vfs_acl_xattr.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'source3/modules/vfs_acl_xattr.c') diff --git a/source3/modules/vfs_acl_xattr.c b/source3/modules/vfs_acl_xattr.c index ff0c2cbc89..fd59310755 100644 --- a/source3/modules/vfs_acl_xattr.c +++ b/source3/modules/vfs_acl_xattr.c @@ -103,7 +103,7 @@ static NTSTATUS get_acl_blob(TALLOC_CTX *ctx, val = tmp; become_root(); - if (fsp) { + if (fsp && fsp->fh->fd != -1) { sizeret = SMB_VFS_FGETXATTR(fsp, XATTR_NTACL_NAME, val, size); } else { sizeret = SMB_VFS_GETXATTR(handle->conn, name, @@ -263,16 +263,25 @@ static NTSTATUS store_acl_blob(files_struct *fsp, int ret; int saved_errno; + DEBUG(10,("store_acl_blob: storing blob length %u on file %s\n", + (unsigned int)pblob->length, fsp->fsp_name)); + become_root(); - ret = SMB_VFS_FSETXATTR(fsp, XATTR_NTACL_NAME, + if (fsp->fh->fd != -1) { + ret = SMB_VFS_FSETXATTR(fsp, XATTR_NTACL_NAME, pblob->data, pblob->length, 0); + } else { + ret = SMB_VFS_SETXATTR(fsp->conn, fsp->fsp_name, + XATTR_NTACL_NAME, + pblob->data, pblob->length, 0); + } if (ret) { saved_errno = errno; } unbecome_root(); if (ret) { errno = saved_errno; - DEBUG(5, ("store_acl_blob: fsetxattr failed for file %s " + DEBUG(5, ("store_acl_blob: setting attr failed for file %s" "with error %s\n", fsp->fsp_name, strerror(errno) )); -- cgit