mirror of
https://github.com/samba-team/samba.git
synced 2025-01-08 21:18:16 +03:00
s3: VFS: streams_xattr: Add the same accommodation to streams_xattr_unlinkat() as used in streams_xattr_renameat().
vfs_fruit passes a synthetic filename here where smb_fname->fsp==NULL when configured to use "fruit:resource = stream" so we need to use synthetic_pathref() to get an fsp on the smb_fname->base_name in order to call SMB_VFS_FREMOVEXATTR(). This is the same change we already use in streams_xattr_renameat() and streams_xattr_stat(), the other pathname operations we implement here. Remove knownfail. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15099 Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Noel Power <npower@samba.org> Autobuild-User(master): Noel Power <npower@samba.org> Autobuild-Date(master): Mon Jun 20 14:24:20 UTC 2022 on sn-devel-184
This commit is contained in:
parent
238b2cbb8f
commit
808a7b8b76
@ -1 +0,0 @@
|
||||
^samba3.blackbox.fruit.resource_stream.resource_stream\(fileserver\)
|
@ -479,6 +479,8 @@ static int streams_xattr_unlinkat(vfs_handle_struct *handle,
|
||||
NTSTATUS status;
|
||||
int ret = -1;
|
||||
char *xattr_name = NULL;
|
||||
struct smb_filename *pathref = NULL;
|
||||
struct files_struct *fsp = smb_fname->fsp;
|
||||
|
||||
if (!is_named_stream(smb_fname)) {
|
||||
return SMB_VFS_NEXT_UNLINKAT(handle,
|
||||
@ -497,10 +499,26 @@ static int streams_xattr_unlinkat(vfs_handle_struct *handle,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
SMB_ASSERT(smb_fname->fsp != NULL);
|
||||
SMB_ASSERT(fsp_is_alternate_stream(smb_fname->fsp));
|
||||
if (fsp == NULL) {
|
||||
status = synthetic_pathref(talloc_tos(),
|
||||
handle->conn->cwd_fsp,
|
||||
smb_fname->base_name,
|
||||
NULL,
|
||||
NULL,
|
||||
smb_fname->twrp,
|
||||
smb_fname->flags,
|
||||
&pathref);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
errno = ENOENT;
|
||||
goto fail;
|
||||
}
|
||||
fsp = pathref->fsp;
|
||||
} else {
|
||||
SMB_ASSERT(fsp_is_alternate_stream(smb_fname->fsp));
|
||||
fsp = fsp->base_fsp;
|
||||
}
|
||||
|
||||
ret = SMB_VFS_FREMOVEXATTR(smb_fname->fsp->base_fsp, xattr_name);
|
||||
ret = SMB_VFS_FREMOVEXATTR(fsp, xattr_name);
|
||||
|
||||
if ((ret == -1) && (errno == ENOATTR)) {
|
||||
errno = ENOENT;
|
||||
@ -511,6 +529,7 @@ static int streams_xattr_unlinkat(vfs_handle_struct *handle,
|
||||
|
||||
fail:
|
||||
TALLOC_FREE(xattr_name);
|
||||
TALLOC_FREE(pathref);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user