summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2020-06-03 11:57:39 -0700
committerJeremy Allison <jra@samba.org>2020-06-04 17:11:37 +0000
commit054ff63a249c304b452fc555951a5276a0946489 (patch)
tree5d72fce527e80d9a0654271f051f834812923c78 /source3
parentbac7442a6e8d40e6ef84af5207e0b5fef7fe3fe9 (diff)
downloadsamba-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.c20
-rw-r--r--source3/libsmb/cli_smb2_fnum.h2
-rw-r--r--source3/libsmb/clirap.c12
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