From: Noel Power Date: Tue, 27 Apr 2021 15:57:57 +0000 (+0100) Subject: s3: VFS: streams_xattr: Add impl for SMB_VFS_FSTREAMINFO X-Git-Tag: tevent-0.11.0~925 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a8eb80a5788b1eaafb14e54045a132c03036cfae;p=thirdparty%2Fsamba.git s3: VFS: streams_xattr: Add impl for SMB_VFS_FSTREAMINFO Signed-off-by: Noel Power Reviewed-by: Jeremy Allison --- diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c index 78a2baf40d5..5fdd1bec773 100644 --- a/source3/modules/vfs_streams_xattr.c +++ b/source3/modules/vfs_streams_xattr.c @@ -886,6 +886,47 @@ static NTSTATUS streams_xattr_streaminfo(vfs_handle_struct *handle, pstreams); } +static NTSTATUS streams_xattr_fstreaminfo(vfs_handle_struct *handle, + struct files_struct *fsp, + TALLOC_CTX *mem_ctx, + unsigned int *pnum_streams, + struct stream_struct **pstreams) +{ + NTSTATUS status; + struct streaminfo_state state; + + state.streams = *pstreams; + state.num_streams = *pnum_streams; + state.mem_ctx = mem_ctx; + state.handle = handle; + state.status = NT_STATUS_OK; + + status = walk_xattr_streams(handle, + fsp, + fsp->fsp_name, + collect_one_stream, + &state); + + if (!NT_STATUS_IS_OK(status)) { + TALLOC_FREE(state.streams); + return status; + } + + if (!NT_STATUS_IS_OK(state.status)) { + TALLOC_FREE(state.streams); + return state.status; + } + + *pnum_streams = state.num_streams; + *pstreams = state.streams; + + return SMB_VFS_NEXT_FSTREAMINFO(handle, + fsp, + mem_ctx, + pnum_streams, + pstreams); +} + static uint32_t streams_xattr_fs_capabilities(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res) { @@ -1609,6 +1650,7 @@ static struct vfs_fn_pointers vfs_streams_xattr_fns = { .ftruncate_fn = streams_xattr_ftruncate, .fallocate_fn = streams_xattr_fallocate, .streaminfo_fn = streams_xattr_streaminfo, + .fstreaminfo_fn = streams_xattr_fstreaminfo, .fsync_send_fn = streams_xattr_fsync_send, .fsync_recv_fn = streams_xattr_fsync_recv,