mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
vfs_fruit: resource fork open request with flags=O_CREAT|O_RDONLY
When receiving an SMB create request with read-only access mode and open_if disposition, we end of calling the open() function with flags=O_CREAT|O_RDONLY for the ._ AppleDouble file. If the file doesn't exist, ie there's currently no rsrc stream, we create it but then we fail to write the AppleDouble header into the file due to the O_RDONLY open mode, leaving a 0 byte size ._ file. Running this create requests against macOS SMB server yields an interesting result: it returns NT_STATUS_OBJECT_NAME_NOT_FOUND even though create dispotion is open_if. Another instance where the macOS SMB server just exposes FSA behaviour (ie HFS+) and we have to adapt to be compatible. Bug: https://bugzilla.samba.org/show_bug.cgi?id=12565 Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
parent
baa3e71f79
commit
a36de8b81a
@ -2970,6 +2970,20 @@ static int fruit_open_rsrc(vfs_handle_struct *handle,
|
||||
SMB_VFS_HANDLE_GET_DATA(handle, config,
|
||||
struct fruit_config_data, return -1);
|
||||
|
||||
if (((flags & O_ACCMODE) == O_RDONLY)
|
||||
&& (flags & O_CREAT)
|
||||
&& !VALID_STAT(fsp->fsp_name->st))
|
||||
{
|
||||
/*
|
||||
* This means the stream doesn't exist. macOS SMB server fails
|
||||
* this with NT_STATUS_OBJECT_NAME_NOT_FOUND, so must we. Cf bug
|
||||
* 12565 and the test for this combination in
|
||||
* test_rfork_create().
|
||||
*/
|
||||
errno = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (config->rsrc) {
|
||||
case FRUIT_RSRC_STREAM:
|
||||
fd = SMB_VFS_NEXT_OPEN(handle, smb_fname, fsp, flags, mode);
|
||||
|
Loading…
Reference in New Issue
Block a user