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:
parent
6e13dbddae
commit
480695cd72
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user