From: Ralph Boehme Date: Thu, 7 Dec 2017 13:56:36 +0000 (+0100) Subject: vfs_fruit: factor out delete_invalid_meta_stream() from fruit_streaminfo_meta_stream() X-Git-Tag: samba-4.6.13~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c1e0396bcb1881967c5be82eb3e8101a81ed6829;p=thirdparty%2Fsamba.git vfs_fruit: factor out delete_invalid_meta_stream() from fruit_streaminfo_meta_stream() No change in behaviour, just some refactoring before adding more code to fruit_streaminfo_meta_stream() in the next commit. Bug: https://bugzilla.samba.org/show_bug.cgi?id=13181 Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison (backported from commit c41e1ea9247611473d30184efd953c61955ead15) --- diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c index f7e57d095c9..92e38fbc8a0 100644 --- a/source3/modules/vfs_fruit.c +++ b/source3/modules/vfs_fruit.c @@ -4717,38 +4717,17 @@ static int fruit_fstat(vfs_handle_struct *handle, files_struct *fsp, return rc; } -static NTSTATUS fruit_streaminfo_meta_stream( +static NTSTATUS delete_invalid_meta_stream( vfs_handle_struct *handle, - struct files_struct *fsp, const struct smb_filename *smb_fname, TALLOC_CTX *mem_ctx, unsigned int *pnum_streams, struct stream_struct **pstreams) { - struct stream_struct *stream = *pstreams; - unsigned int num_streams = *pnum_streams; struct smb_filename *sname = NULL; - int i; int ret; bool ok; - for (i = 0; i < num_streams; i++) { - if (strequal_m(stream[i].name, AFPINFO_STREAM)) { - break; - } - } - - if (i == num_streams) { - return NT_STATUS_OK; - } - - if (stream[i].size == AFP_INFO_SIZE) { - return NT_STATUS_OK; - } - - DBG_ERR("Removing invalid AFPINFO_STREAM size [%zd] from [%s]\n", - stream[i].size, smb_fname_str_dbg(smb_fname)); - ok = del_fruit_stream(mem_ctx, pnum_streams, pstreams, AFPINFO_STREAM); if (!ok) { return NT_STATUS_INTERNAL_ERROR; @@ -4772,6 +4751,39 @@ static NTSTATUS fruit_streaminfo_meta_stream( return NT_STATUS_OK; } +static NTSTATUS fruit_streaminfo_meta_stream( + vfs_handle_struct *handle, + struct files_struct *fsp, + const struct smb_filename *smb_fname, + TALLOC_CTX *mem_ctx, + unsigned int *pnum_streams, + struct stream_struct **pstreams) +{ + struct stream_struct *stream = *pstreams; + unsigned int num_streams = *pnum_streams; + int i; + + for (i = 0; i < num_streams; i++) { + if (strequal_m(stream[i].name, AFPINFO_STREAM)) { + break; + } + } + + if (i == num_streams) { + return NT_STATUS_OK; + } + + if (stream[i].size != AFP_INFO_SIZE) { + DBG_ERR("Removing invalid AFPINFO_STREAM size [%jd] from [%s]\n", + (intmax_t)stream[i].size, smb_fname_str_dbg(smb_fname)); + + return delete_invalid_meta_stream(handle, smb_fname, mem_ctx, + pnum_streams, pstreams); + } + + return NT_STATUS_OK; +} + static NTSTATUS fruit_streaminfo_meta_netatalk( vfs_handle_struct *handle, struct files_struct *fsp,