diff --git a/source3/include/vfs.h b/source3/include/vfs.h index 185bc76..0c0a04b 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -655,6 +655,12 @@ int smb_vfs_call_chflags(struct vfs_handle_struct *handle, const char *path, unsigned int flags); struct file_id smb_vfs_call_file_id_create(struct vfs_handle_struct *handle, const SMB_STRUCT_STAT *sbuf); +NTSTATUS smb_vfs_call_streaminfo_start(struct vfs_handle_struct *handle, + struct files_struct *fsp, + const char *fname, + TALLOC_CTX *mem_ctx, + unsigned int *num_streams, + struct stream_struct **streams); NTSTATUS smb_vfs_call_streaminfo(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *fname, diff --git a/source3/include/vfs_macros.h b/source3/include/vfs_macros.h index d04be9b..bbd12a5 100644 --- a/source3/include/vfs_macros.h +++ b/source3/include/vfs_macros.h @@ -320,7 +320,7 @@ smb_vfs_call_file_id_create((handle)->next, (sbuf)) #define SMB_VFS_STREAMINFO(conn, fsp, fname, mem_ctx, num_streams, streams) \ - smb_vfs_call_streaminfo((conn)->vfs_handles, (fsp), (fname), (mem_ctx), (num_streams), (streams)) + smb_vfs_call_streaminfo_start((conn)->vfs_handles, (fsp), (fname), (mem_ctx), (num_streams), (streams)) #define SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx, num_streams, streams) \ smb_vfs_call_streaminfo((handle)->next, (fsp), (fname), (mem_ctx), (num_streams), (streams)) diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c index 34e01b0..e3cc822 100644 --- a/source3/modules/vfs_streams_xattr.c +++ b/source3/modules/vfs_streams_xattr.c @@ -810,8 +810,8 @@ static NTSTATUS streams_xattr_streaminfo(vfs_handle_struct *handle, return map_nt_error_from_unix(errno); } - state.streams = NULL; - state.num_streams = 0; + state.streams = *pstreams; + state.num_streams = *pnum_streams; if (!S_ISDIR(sbuf.st_ex_mode)) { if (!add_one_stream(mem_ctx, diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index 35a8331..cd02954 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -1665,6 +1665,20 @@ struct file_id smb_vfs_call_file_id_create(struct vfs_handle_struct *handle, return handle->fns->file_id_create(handle, sbuf); } +NTSTATUS smb_vfs_call_streaminfo_start(struct vfs_handle_struct *handle, + struct files_struct *fsp, + const char *fname, + TALLOC_CTX *mem_ctx, + unsigned int *num_streams, + struct stream_struct **streams) +{ + VFS_FIND(streaminfo); + *num_streams = 0; + *streams = NULL; + return handle->fns->streaminfo(handle, fsp, fname, mem_ctx, + num_streams, streams); +} + NTSTATUS smb_vfs_call_streaminfo(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *fname,