return status;
}
+static NTSTATUS um_get_nt_acl_at(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 **ppdesc)
+{
+ NTSTATUS status;
+ char *client_path = NULL;
+ struct smb_filename *client_smb_fname = NULL;
+ bool ok;
+ int ret;
+
+ DBG_DEBUG("Entering um_get_nt_acl_at\n");
+
+ ok = is_in_media_files(smb_fname->base_name);
+ if (!ok) {
+ return SMB_VFS_NEXT_GET_NT_ACL_AT(handle,
+ dirfsp,
+ smb_fname,
+ security_info,
+ mem_ctx,
+ ppdesc);
+ }
+
+ ret = alloc_get_client_path(handle,
+ talloc_tos(),
+ smb_fname->base_name,
+ &client_path);
+ if (ret != 0) {
+ status = map_nt_error_from_unix(errno);
+ goto err;
+ }
+
+ client_smb_fname = synthetic_smb_fname(talloc_tos(),
+ client_path,
+ NULL,
+ NULL,
+ smb_fname->twrp,
+ smb_fname->flags);
+ if (client_smb_fname == NULL) {
+ TALLOC_FREE(client_path);
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ status = SMB_VFS_NEXT_GET_NT_ACL_AT(handle,
+ dirfsp,
+ client_smb_fname,
+ security_info,
+ mem_ctx,
+ ppdesc);
+err:
+ TALLOC_FREE(client_smb_fname);
+ TALLOC_FREE(client_path);
+ return status;
+}
+
static SMB_ACL_T um_sys_acl_get_file(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
SMB_ACL_TYPE_T type,
/* NT ACL operations. */
.get_nt_acl_fn = um_get_nt_acl,
+ .get_nt_acl_at_fn = um_get_nt_acl_at,
/* POSIX ACL operations. */