return status;
}
-static NTSTATUS zfsacl_get_nt_acl(struct vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- uint32_t security_info,
- TALLOC_CTX *mem_ctx,
- struct security_descriptor **ppdesc)
-{
- struct SMB4ACL_T *pacl;
- NTSTATUS status;
- struct zfsacl_config_data *config = NULL;
- SMB_VFS_HANDLE_GET_DATA(handle, config,
- struct zfsacl_config_data,
- return NT_STATUS_INTERNAL_ERROR);
-
- TALLOC_CTX *frame = talloc_stackframe();
-
- status = zfs_get_nt_acl_common(handle->conn, frame, smb_fname, &pacl, config);
- if (!NT_STATUS_IS_OK(status)) {
- TALLOC_FREE(frame);
- if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED)) {
- return status;
- }
-
- if (!VALID_STAT(smb_fname->st)) {
- DBG_ERR("No stat info for [%s]\n",
- smb_fname_str_dbg(smb_fname));
- return NT_STATUS_INTERNAL_ERROR;
- }
-
- status = make_default_filesystem_acl(mem_ctx,
- DEFAULT_ACL_POSIX,
- smb_fname->base_name,
- &smb_fname->st,
- ppdesc);
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
- (*ppdesc)->type |= SEC_DESC_DACL_PROTECTED;
- return NT_STATUS_OK;
- }
-
- status = smb_get_nt_acl_nfs4(handle->conn,
- smb_fname,
- NULL,
- security_info,
- mem_ctx,
- ppdesc,
- pacl);
- TALLOC_FREE(frame);
- return status;
-}
-
static NTSTATUS zfsacl_get_nt_acl_at(struct vfs_handle_struct *handle,
struct files_struct *dirfsp,
const struct smb_filename *smb_fname,
.sys_acl_set_fd_fn = zfsacl_fail__sys_acl_set_fd,
.sys_acl_delete_def_file_fn = zfsacl_fail__sys_acl_delete_def_file,
.fget_nt_acl_fn = zfsacl_fget_nt_acl,
- .get_nt_acl_fn = zfsacl_get_nt_acl,
.get_nt_acl_at_fn = zfsacl_get_nt_acl_at,
.fset_nt_acl_fn = zfsacl_fset_nt_acl,
};