diff options
author | Jeremy Allison <jra@samba.org> | 2020-06-03 11:57:39 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2020-06-04 17:11:37 +0000 |
commit | 054ff63a249c304b452fc555951a5276a0946489 (patch) | |
tree | 5d72fce527e80d9a0654271f051f834812923c78 /source3 | |
parent | bac7442a6e8d40e6ef84af5207e0b5fef7fe3fe9 (diff) | |
download | samba-054ff63a249c304b452fc555951a5276a0946489.tar.gz |
s3: libsmb: Change cli_smb2_qfileinfo_basic() and all users to return a uint32_t attribute.
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Diffstat (limited to 'source3')
-rw-r--r-- | source3/libsmb/cli_smb2_fnum.c | 20 | ||||
-rw-r--r-- | source3/libsmb/cli_smb2_fnum.h | 2 | ||||
-rw-r--r-- | source3/libsmb/clirap.c | 12 |
3 files changed, 26 insertions, 8 deletions
diff --git a/source3/libsmb/cli_smb2_fnum.c b/source3/libsmb/cli_smb2_fnum.c index 4ebd5c89054..cd20deb6f95 100644 --- a/source3/libsmb/cli_smb2_fnum.c +++ b/source3/libsmb/cli_smb2_fnum.c @@ -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); } diff --git a/source3/libsmb/cli_smb2_fnum.h b/source3/libsmb/cli_smb2_fnum.h index f32caf133e0..3e921663018 100644 --- a/source3/libsmb/cli_smb2_fnum.h +++ b/source3/libsmb/cli_smb2_fnum.h @@ -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, diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c index f9fb0eb31c6..7ba0c90e418 100644 --- a/source3/libsmb/clirap.c +++ b/source3/libsmb/clirap.c @@ -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 |