summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorRalph Boehme <slow@samba.org>2018-10-20 23:50:32 +0200
committerKarolin Seeger <kseeger@samba.org>2018-11-06 09:10:25 +0100
commitcbbd530968bf68195450bb74339f50a0440e8dae (patch)
treeb457eedaa8193cdf974d5c72650dc8e1ec67bc28 /source3
parent80c95670e21f08da555f2ee1bd236a5fb8aca7ac (diff)
downloadsamba-cbbd530968bf68195450bb74339f50a0440e8dae.tar.gz
vfs_fruit: don't check for delete-on-close on the FinderInfo stream
macOS SMB server doesn't filter out the FinderInfo stream if it has delete-on-close set. Bug: https://bugzilla.samba.org/show_bug.cgi?id=13646 Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> (cherry picked from commit d8c1bb52018289878b9397d513ebbae63933a05f)
Diffstat (limited to 'source3')
-rw-r--r--source3/modules/vfs_fruit.c73
1 files changed, 1 insertions, 72 deletions
diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c
index c459046a7e1..a4594c33567 100644
--- a/source3/modules/vfs_fruit.c
+++ b/source3/modules/vfs_fruit.c
@@ -5382,16 +5382,7 @@ static NTSTATUS fruit_streaminfo_meta_stream(
{
struct stream_struct *stream = *pstreams;
unsigned int num_streams = *pnum_streams;
- struct smb_filename *sname = NULL;
- char *full_name = NULL;
- uint32_t name_hash;
- struct share_mode_lock *lck = NULL;
- struct file_id id = {0};
- bool delete_on_close_set;
int i;
- int ret;
- NTSTATUS status;
- bool ok;
for (i = 0; i < num_streams; i++) {
if (strequal_m(stream[i].name, AFPINFO_STREAM)) {
@@ -5415,70 +5406,8 @@ static NTSTATUS fruit_streaminfo_meta_stream(
stream[i].size);
}
- /*
- * Now check if there's a delete-on-close pending on the stream. If so,
- * hide the stream. This behaviour was verified against a macOS 10.12
- * SMB server.
- */
- sname = synthetic_smb_fname(talloc_tos(),
- smb_fname->base_name,
- AFPINFO_STREAM_NAME,
- NULL, 0);
- if (sname == NULL) {
- status = NT_STATUS_NO_MEMORY;
- goto out;
- }
-
- ret = fruit_stat_base(handle, sname, false);
- if (ret != 0) {
- status = map_nt_error_from_unix(errno);
- goto out;
- }
-
- sname->st.st_ex_ino = fruit_inode(&sname->st, AFPINFO_STREAM);
-
- id = SMB_VFS_NEXT_FILE_ID_CREATE(handle, &sname->st);
-
- lck = get_existing_share_mode_lock(talloc_tos(), id);
- if (lck == NULL) {
- status = NT_STATUS_OK;
- goto out;
- }
-
- full_name = talloc_asprintf(talloc_tos(),
- "%s%s",
- sname->base_name,
- AFPINFO_STREAM);
- if (full_name == NULL) {
- status = NT_STATUS_NO_MEMORY;
- goto out;
- }
-
- status = file_name_hash(handle->conn, full_name, &name_hash);
- if (!NT_STATUS_IS_OK(status)) {
- goto out;
- }
-
- delete_on_close_set = is_delete_on_close_set(lck, name_hash);
- if (delete_on_close_set) {
- ok = del_fruit_stream(mem_ctx,
- pnum_streams,
- pstreams,
- AFPINFO_STREAM);
- if (!ok) {
- status = NT_STATUS_INTERNAL_ERROR;
- goto out;
- }
- }
-
- status = NT_STATUS_OK;
-
-out:
- TALLOC_FREE(sname);
- TALLOC_FREE(lck);
- TALLOC_FREE(full_name);
- return status;
+ return NT_STATUS_OK;
}
static NTSTATUS fruit_streaminfo_meta_netatalk(