From 5a19269eeef2e1927af279be75af6e028d0af9a1 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 17 Sep 2008 13:45:10 -0700 Subject: [PATCH] Correctly get+set the NT ACL on a file. Now to make us check it on open.. Jeremy. (cherry picked from commit e60be05baff1a0d9f99cd2be8fbfd66e76893c1d) --- source/modules/vfs_acl_xattr.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/source/modules/vfs_acl_xattr.c b/source/modules/vfs_acl_xattr.c index ff0c2cbc89c..fd593107555 100644 --- a/source/modules/vfs_acl_xattr.c +++ b/source/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) )); -- 2.11.4.GIT