]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: libsmb: Change cli_qpathinfo2() and async versions to return a 32-bit attribute.
authorJeremy Allison <jra@samba.org>
Wed, 3 Jun 2020 20:28:04 +0000 (13:28 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 4 Jun 2020 17:11:38 +0000 (17:11 +0000)
Fix all callers.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/libsmb/clirap.c
source3/libsmb/clirap.h
source3/libsmb/libsmb_file.c

index d5baf59c1156339c7e0a57745154b2aae5bf5059..8e4d31e0ae8c4cb9b7612260cffc7aa9f70177bf 100644 (file)
@@ -958,7 +958,7 @@ NTSTATUS cli_qpathinfo2_recv(struct tevent_req *req,
                             struct timespec *access_time,
                             struct timespec *write_time,
                             struct timespec *change_time,
-                            off_t *size, uint16_t *pattr,
+                            off_t *size, uint32_t *pattr,
                             SMB_INO_T *ino)
 {
        struct cli_qpathinfo2_state *state = tevent_req_data(
@@ -982,7 +982,8 @@ NTSTATUS cli_qpathinfo2_recv(struct tevent_req *req,
                *change_time = interpret_long_date((char *)state->data+24);
        }
        if (pattr) {
-               *pattr = SVAL(state->data, 32);
+               /* SMB_QUERY_FILE_ALL_INFO returns 32-bit attributes. */
+               *pattr = IVAL(state->data, 32);
        }
        if (size) {
                 *size = IVAL2_TO_SMB_BIG_UINT(state->data,48);
@@ -1006,7 +1007,7 @@ NTSTATUS cli_qpathinfo2(struct cli_state *cli, const char *fname,
                        struct timespec *access_time,
                        struct timespec *write_time,
                        struct timespec *change_time,
-                       off_t *size, uint16_t *pattr,
+                       off_t *size, uint32_t *pattr,
                        SMB_INO_T *ino)
 {
        TALLOC_CTX *frame = NULL;
@@ -1015,23 +1016,15 @@ NTSTATUS cli_qpathinfo2(struct cli_state *cli, const char *fname,
        NTSTATUS status = NT_STATUS_NO_MEMORY;
 
        if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
-               uint32_t attr = 0;
-               status = cli_smb2_qpathinfo2(cli,
+               return cli_smb2_qpathinfo2(cli,
                                        fname,
                                        create_time,
                                        access_time,
                                        write_time,
                                        change_time,
                                        size,
-                                       &attr,
+                                       pattr,
                                        ino);
-               if (!NT_STATUS_IS_OK(status)) {
-                       return status;
-               }
-               if (pattr != NULL) {
-                       *pattr = attr;
-               }
-               return status;
        }
 
        frame = talloc_stackframe();
@@ -1601,9 +1594,16 @@ NTSTATUS cli_qpathinfo3(struct cli_state *cli, const char *fname,
        uint64_t pos;
 
        if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
-               return cli_qpathinfo2(cli, fname,
+               status = cli_qpathinfo2(cli, fname,
                                      create_time, access_time, write_time, change_time,
-                                     size, pattr, ino);
+                                     size, &attr, ino);
+               if (!NT_STATUS_IS_OK(status)) {
+                       return status;
+               }
+               if (pattr != NULL) {
+                       *pattr = attr;
+               }
+               return status;
        }
 
        if (create_time || access_time || write_time || change_time || pattr) {
index f7c059aeaf3e3aadf1372a328e6a1544aba79600..e64fc2bc61f160af15b9d90f03a2f1ea98cb7e55 100644 (file)
@@ -91,14 +91,14 @@ NTSTATUS cli_qpathinfo2_recv(struct tevent_req *req,
                             struct timespec *access_time,
                             struct timespec *write_time,
                             struct timespec *change_time,
-                            off_t *size, uint16_t *pattr,
+                            off_t *size, uint32_t *pattr,
                             SMB_INO_T *ino);
 NTSTATUS cli_qpathinfo2(struct cli_state *cli, const char *fname,
                        struct timespec *create_time,
                        struct timespec *access_time,
                        struct timespec *write_time,
                        struct timespec *change_time,
-                       off_t *size, uint16_t *pattr,
+                       off_t *size, uint32_t *pattr,
                        SMB_INO_T *ino);
 NTSTATUS cli_qpathinfo3(struct cli_state *cli, const char *fname,
                        struct timespec *create_time,
index 5b868c21954d0c4eb52bb92574205d001786eea7..14474ea316f4b8a0d1426dca0395c92f3f0167dc 100644 (file)
@@ -509,9 +509,10 @@ SMBC_getatr(SMBCCTX * context,
                                        &write_time_ts,
                                        &change_time_ts,
                                        &size,
-                                       &sattr,
+                                       &attr,
                                        &ino);
                if (NT_STATUS_IS_OK(status)) {
+                       sattr = attr;
                        goto setup_stat;
                }
         }