From: Jeremy Allison Date: Mon, 1 Jun 2020 20:55:10 +0000 (-0700) Subject: s3: libsmb: Info level SMB2_FIND_ID_BOTH_DIRECTORY_INFO encodes attibutes as a uint32... X-Git-Tag: ldb-2.2.0~239 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3063e1601ad9e2536651a75a47ebf4921ffddbdc;p=thirdparty%2Fsamba.git s3: libsmb: Info level SMB2_FIND_ID_BOTH_DIRECTORY_INFO encodes attibutes as a uint32, not a uint8. Fix the SMB2 parsing code. Cast to a uint16_t for now after pulling the information as finfo->mode is currently only 16 bits. We will need this to detect FILE_ATTRIBUTE_REPARSE_POINT in a later commit. Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- diff --git a/source3/libsmb/cli_smb2_fnum.c b/source3/libsmb/cli_smb2_fnum.c index c1c755a97ea..46a4ae95977 100644 --- a/source3/libsmb/cli_smb2_fnum.c +++ b/source3/libsmb/cli_smb2_fnum.c @@ -1199,7 +1199,8 @@ static NTSTATUS parse_finfo_id_both_directory_info(const uint8_t *dir_data, finfo->ctime_ts = interpret_long_date((const char *)dir_data + 32); finfo->size = IVAL2_TO_SMB_BIG_UINT(dir_data + 40, 0); finfo->allocated_size = IVAL2_TO_SMB_BIG_UINT(dir_data + 48, 0); - finfo->mode = CVAL(dir_data + 56, 0); + /* NB. We need to enlarge finfo->mode to be 32-bits. */ + finfo->mode = (uint16_t)IVAL(dir_data + 56, 0); finfo->ino = IVAL2_TO_SMB_BIG_UINT(dir_data + 96, 0); namelen = IVAL(dir_data + 60,0); if (namelen > (dir_data_length - 104)) {