]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: libsmb: Change cli_smb2_qfileinfo_basic() and all users to return a uint32_t...
authorJeremy Allison <jra@samba.org>
Wed, 3 Jun 2020 18:57:39 +0000 (11:57 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 4 Jun 2020 17:11:37 +0000 (17:11 +0000)
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/libsmb/cli_smb2_fnum.c
source3/libsmb/cli_smb2_fnum.h
source3/libsmb/clirap.c

index 4ebd5c89054f3b7d1d7fe0f632625688cf821474..cd20deb6f95e86a7f3b196c47f8d60142acdd9db 100644 (file)
@@ -2012,7 +2012,7 @@ NTSTATUS cli_smb2_qpathinfo_alt_name(struct cli_state *cli,
 
 NTSTATUS cli_smb2_qfileinfo_basic(struct cli_state *cli,
                        uint16_t fnum,
-                       uint16_t *pattr,
+                       uint32_t *pattr,
                        off_t *size,
                        struct timespec *create_time,
                        struct timespec *access_time,
@@ -2074,8 +2074,7 @@ NTSTATUS cli_smb2_qfileinfo_basic(struct cli_state *cli,
                *change_time = interpret_long_date((const char *)outbuf.data + 0x18);
        }
        if (pattr) {
-               uint32_t attr = IVAL(outbuf.data, 0x20);
-               *pattr = (uint16_t)attr;
+               *pattr = IVAL(outbuf.data, 0x20);
        }
        if (size) {
                uint64_t file_size = BVAL(outbuf.data, 0x30);
@@ -2111,9 +2110,10 @@ NTSTATUS cli_smb2_getattrE(struct cli_state *cli,
        struct timespec access_time_ts;
        struct timespec write_time_ts;
        struct timespec change_time_ts;
+       uint32_t attr = 0;
        NTSTATUS status = cli_smb2_qfileinfo_basic(cli,
                                        fnum,
-                                       pattr,
+                                       &attr,
                                        size,
                                        NULL,
                                        &access_time_ts,
@@ -2136,6 +2136,9 @@ NTSTATUS cli_smb2_getattrE(struct cli_state *cli,
        if (write_time) {
                *write_time = write_time_ts.tv_sec;
        }
+       if (pattr != NULL) {
+               *pattr = attr;
+       }
        return NT_STATUS_OK;
 }
 
@@ -2225,6 +2228,7 @@ NTSTATUS cli_smb2_qpathinfo2(struct cli_state *cli,
        NTSTATUS status;
        struct smb2_hnd *ph = NULL;
        uint16_t fnum = 0xffff;
+       uint32_t attr = 0;
        TALLOC_CTX *frame = talloc_stackframe();
 
        if (smbXcli_conn_has_async_calls(cli->conn)) {
@@ -2258,7 +2262,7 @@ NTSTATUS cli_smb2_qpathinfo2(struct cli_state *cli,
 
        status = cli_smb2_qfileinfo_basic(cli,
                                        fnum,
-                                       pattr,
+                                       &attr,
                                        size,
                                        create_time,
                                        access_time,
@@ -2268,6 +2272,12 @@ NTSTATUS cli_smb2_qpathinfo2(struct cli_state *cli,
 
   fail:
 
+       if (NT_STATUS_IS_OK(status)) {
+               if (pattr != NULL) {
+                       *pattr = attr;
+               }
+       }
+
        if (fnum != 0xffff) {
                cli_smb2_close_fnum(cli, fnum);
        }
index f32caf133e038da64d055f4aa18712a3dd64209f..3e92166301824334eda7d0d21306c591639949e5 100644 (file)
@@ -157,7 +157,7 @@ NTSTATUS cli_smb2_query_info_fnum(
        DATA_BLOB *outbuf);
 NTSTATUS cli_smb2_qfileinfo_basic(struct cli_state *cli,
                        uint16_t fnum,
-                       uint16_t *pattr,
+                       uint32_t *pattr,
                        off_t *size,
                        struct timespec *create_time,
                        struct timespec *access_time,
index f9fb0eb31c6e1f38256c93c1dc283add7c6ba4e1..7ba0c90e418c91116a03b1465a3f5e3cce4bbad0 100644 (file)
@@ -1314,15 +1314,23 @@ NTSTATUS cli_qfileinfo_basic(struct cli_state *cli, uint16_t fnum,
        NTSTATUS status;
 
        if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
-               return cli_smb2_qfileinfo_basic(cli,
+               uint32_t attr = 0;
+               status = cli_smb2_qfileinfo_basic(cli,
                                                fnum,
-                                               pattr,
+                                               &attr,
                                                size,
                                                create_time,
                                                access_time,
                                                write_time,
                                                change_time,
                                                ino);
+               if (!NT_STATUS_IS_OK(status)) {
+                       return status;
+               }
+               if (pattr != NULL) {
+                       *pattr = attr;
+               }
+               return status;
        }
 
        /* if its a win95 server then fail this - win95 totally screws it