1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-28 01:58:17 +03:00

vfs_fruit: let fruit_pwrite_meta_stream also ftruncate empty FinderInfo

fruit_streaminfo currently filters out the FinderInfo stream is
delete-on-close is set. We set it here internally, but the client may
also set it over SMB. Turns out that the macOS SMB server does NOT
filter out FinderInfo stream with delete-on-close set, so we must change
the way filtering is done in fruit_streaminfo.

Filtering is now done based on the FinderInfo stream being 0-bytes large which
is why I'm adding the ftruncate here.

No idea why the tests that check the filtering passed the commits
leading up to this one, but if you revert this commit after applying the
whole patchset, the "delete AFP_AfpInfo by writing all 0" test will fail.

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>
This commit is contained in:
Ralph Boehme 2018-10-20 23:40:14 +02:00 committed by Jeremy Allison
parent 6e13dbddae
commit 480695cd72

View File

@ -4554,23 +4554,29 @@ static ssize_t fruit_pwrite_meta_stream(vfs_handle_struct *handle,
return -1;
}
nwritten = SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
if (nwritten != n) {
return -1;
}
if (ai_empty_finderinfo(ai)) {
ret = SMB_VFS_NEXT_FTRUNCATE(handle, fsp, 0);
if (ret != 0) {
DBG_ERR("SMB_VFS_NEXT_FTRUNCATE on [%s] failed\n",
fsp_str_dbg(fsp));
return -1;
}
if (!ai_empty_finderinfo(ai)) {
return n;
}
ok = set_delete_on_close(
ok = set_delete_on_close(
fsp,
true,
handle->conn->session_info->security_token,
handle->conn->session_info->unix_token);
if (!ok) {
DBG_ERR("set_delete_on_close on [%s] failed\n",
fsp_str_dbg(fsp));
if (!ok) {
DBG_ERR("set_delete_on_close on [%s] failed\n",
fsp_str_dbg(fsp));
return -1;
}
return n;
}
nwritten = SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
if (nwritten != n) {
return -1;
}