diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c index c0fc468cdfb..5b695a1d6e3 100644 --- a/source3/smbd/dosmode.c +++ b/source3/smbd/dosmode.c @@ -1292,6 +1292,10 @@ struct timespec get_create_timespec(connection_struct *conn, struct files_struct *fsp, const struct smb_filename *smb_fname) { + if (fsp != NULL) { + struct files_struct *meta_fsp = metadata_fsp(fsp); + return meta_fsp->fsp_name->st.st_ex_btime; + } return smb_fname->st.st_ex_btime; } diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index a34b9083352..3f984036ba3 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -1303,37 +1303,11 @@ NTSTATUS vfs_fget_dos_attributes(struct files_struct *fsp, NTSTATUS status; /* - * First make sure to pass the base_fsp to the VFS + * Make sure to pass the base_fsp to the VFS */ status = SMB_VFS_FGET_DOS_ATTRIBUTES( fsp->conn, metadata_fsp(fsp), dosmode); - if (!NT_STATUS_IS_OK(status)) { - return status; - } - - /* - * If this isn't a stream fsp we're done, ... - */ - if (!fsp_is_alternate_stream(fsp)) { - return NT_STATUS_OK; - } - - /* - * ...otherwise the VFS might have updated the btime, propagate the - * btime from the base_fsp to the stream fsp. - */ - - if (fsp->base_fsp->fsp_name->st.st_ex_iflags & ST_EX_IFLAG_CALCULATED_BTIME) { - /* - * Not a value from backend storage, ignore it - */ - return NT_STATUS_OK; - } - - update_stat_ex_create_time(&fsp->fsp_name->st, - fsp->base_fsp->fsp_name->st.st_ex_btime); - - return NT_STATUS_OK; + return status; } static struct smb_vfs_deny_state *smb_vfs_deny_global;