]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: VFS: vfs4acl_xattr: Add nfs4acl_xattr_get_nt_acl_at().
authorJeremy Allison <jra@samba.org>
Mon, 13 Apr 2020 21:04:28 +0000 (14:04 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 7 May 2020 19:27:35 +0000 (19:27 +0000)
Not yet used.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/modules/vfs_nfs4acl_xattr.c

index f8cbe7964d14b0d396122f8aa17f9d9e2a7edad6..5c80d1b03265a1f9bdb5a102ced514f3ea47d1a5 100644 (file)
@@ -297,6 +297,44 @@ static NTSTATUS nfs4acl_xattr_get_nt_acl(struct vfs_handle_struct *handle,
        return status;
 }
 
+static NTSTATUS nfs4acl_xattr_get_nt_acl_at(struct vfs_handle_struct *handle,
+                               struct files_struct *dirfsp,
+                               const struct smb_filename *smb_fname,
+                               uint32_t security_info,
+                               TALLOC_CTX *mem_ctx,
+                               struct security_descriptor **sd)
+{
+       struct SMB4ACL_T *smb4acl = NULL;
+       TALLOC_CTX *frame = talloc_stackframe();
+       DATA_BLOB blob;
+       NTSTATUS status;
+
+       SMB_ASSERT(dirfsp == handle->conn->cwd_fsp);
+
+       status = nfs4acl_get_blob(handle, NULL, smb_fname, frame, &blob);
+       if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND)) {
+               TALLOC_FREE(frame);
+               return nfs4acl_xattr_default_sd(
+                       handle, smb_fname, mem_ctx, sd);
+       }
+       if (!NT_STATUS_IS_OK(status)) {
+               TALLOC_FREE(frame);
+               return status;
+       }
+
+       status = nfs4acl_blob_to_smb4(handle, &blob, frame, &smb4acl);
+       if (!NT_STATUS_IS_OK(status)) {
+               TALLOC_FREE(frame);
+               return status;
+       }
+
+       status = smb_get_nt_acl_nfs4(handle->conn, smb_fname, NULL,
+                                    security_info, mem_ctx, sd,
+                                    smb4acl);
+       TALLOC_FREE(frame);
+       return status;
+}
+
 static bool nfs4acl_smb4acl_set_fn(vfs_handle_struct *handle,
                                   files_struct *fsp,
                                   struct SMB4ACL_T *smb4acl)
@@ -658,6 +696,7 @@ static struct vfs_fn_pointers nfs4acl_xattr_fns = {
        .connect_fn = nfs4acl_connect,
        .fget_nt_acl_fn = nfs4acl_xattr_fget_nt_acl,
        .get_nt_acl_fn = nfs4acl_xattr_get_nt_acl,
+       .get_nt_acl_at_fn = nfs4acl_xattr_get_nt_acl_at,
        .fset_nt_acl_fn = nfs4acl_xattr_fset_nt_acl,
 
        .sys_acl_get_file_fn = nfs4acl_xattr_fail__sys_acl_get_file,