s3: libsmb: Change size of finfo->attr to uint32_t.
authorJeremy Allison <jra@samba.org>
Wed, 3 Jun 2020 17:48:10 +0000 (10:48 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 4 Jun 2020 17:11:37 +0000 (17:11 +0000)
That's what modern servers return.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
examples/fuse/clifuse.c
source3/include/client.h
source3/libsmb/cli_smb2_fnum.c
source3/libsmb/clilist.c

index 1a8d3d4c0942c56a698808eea4084eb655336fbd..f75a9f5a2d792858614e713d558a47804a651ab9 100644 (file)
@@ -496,7 +496,7 @@ static NTSTATUS parse_finfo_id_both_directory_info(uint8_t *dir_data,
        finfo->mtime_ts = interpret_long_date((const char *)dir_data + 24);
        finfo->ctime_ts = interpret_long_date((const char *)dir_data + 32);
        finfo->size = IVAL2_TO_SMB_BIG_UINT(dir_data + 40, 0);
-       finfo->attr = (uint16_t)IVAL(dir_data + 56, 0);
+       finfo->attr = IVAL(dir_data + 56, 0);
        namelen = IVAL(dir_data + 60,0);
        if (namelen > (dir_data_length - 104)) {
                return NT_STATUS_INFO_LENGTH_MISMATCH;
index 56d368e65827b3ef07a2719e20f38887cb28df41..6a3b1b02ff37ee1d6ec1b907e04d20e545942a40 100644 (file)
@@ -100,7 +100,7 @@ struct cli_state {
 struct file_info {
        uint64_t size;
        uint64_t allocated_size;
-       uint16_t attr;
+       uint32_t attr;
        uid_t uid;
        gid_t gid;
        uint64_t ino;
index 994b94802d87a4d0a2353490eb1b6d75a7d3cf47..f1409de7bae079fef1abde67351d01b1d90006ff 100644 (file)
@@ -1199,8 +1199,7 @@ 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);
-       /* NB. We need to enlarge finfo->attr to be 32-bits. */
-       finfo->attr = (uint16_t)IVAL(dir_data + 56, 0);
+       finfo->attr = 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)) {
@@ -1419,8 +1418,8 @@ NTSTATUS cli_smb2_list(struct cli_state *cli,
                                goto fail;
                        }
 
-                       if (dir_check_ftype((uint32_t)finfo->attr,
-                                       (uint32_t)attribute)) {
+                       if (dir_check_ftype(
+                                   finfo->attr, (uint32_t)attribute)) {
                                /*
                                 * Only process if attributes match.
                                 * On SMB1 server does this, so on
index db5f4bfadd3ac0e5746acc69a945cdd46ed01162..b2327ed97ad98ed413d961a7ebb55ab60524aeff 100644 (file)
@@ -257,8 +257,7 @@ static size_t interpret_long_filename(TALLOC_CTX *ctx,
                        finfo->size = IVAL2_TO_SMB_BIG_UINT(p,0);
                        p += 8;
                        p += 8; /* alloc size */
-                       /* NB. We need to enlarge finfo->attr to be 32-bits. */
-                       finfo->attr = (uint16_t)IVAL(p,0);
+                       finfo->attr = IVAL(p,0);
                        p += 4;
                        namelen = IVAL(p,0);
                        p += 4;