From: Jeremy Allison Date: Wed, 3 Jun 2020 19:54:10 +0000 (-0700) Subject: s3: libsmb: Change cli_qfileinfo_basic() to return 32-bit attributes. X-Git-Tag: ldb-2.2.0~211 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b34107f98cae1807b0dcacab9788d14e98c4f95d;p=thirdparty%2Fsamba.git s3: libsmb: Change cli_qfileinfo_basic() to return 32-bit attributes. Fix all callers. Signed-off-by: Jeremy Allison Reviewed-by: Volker Lendecke --- diff --git a/source3/client/client.c b/source3/client/client.c index d64423bc078..fe6a06c9cbd 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -1121,7 +1121,7 @@ static int do_get(const char *rname, const char *lname_in, bool reget) uint16_t fnum; bool newhandle = false; struct timespec tp_start; - uint16_t attr; + uint32_t attr; off_t size; off_t start = 0; off_t nread = 0; @@ -1186,7 +1186,8 @@ static int do_get(const char *rname, const char *lname_in, bool reget) status = cli_qfileinfo_basic(targetcli, fnum, &attr, &size, NULL, NULL, NULL, NULL, NULL); if (!NT_STATUS_IS_OK(status)) { - status = cli_getattrE(targetcli, fnum, &attr, &size, NULL, NULL, + uint16_t sattr = 0; + status = cli_getattrE(targetcli, fnum, &sattr, &size, NULL, NULL, NULL); if(!NT_STATUS_IS_OK(status)) { d_printf("getattrib: %s\n", nt_errstr(status)); @@ -1195,6 +1196,7 @@ static int do_get(const char *rname, const char *lname_in, bool reget) } return 1; } + attr = sattr; } DEBUG(1,("getting file %s of size %.0f as %s ", diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c index 06954b0e69e..d5baf59c115 100644 --- a/source3/libsmb/clirap.c +++ b/source3/libsmb/clirap.c @@ -1310,7 +1310,7 @@ NTSTATUS cli_qfilename(struct cli_state *cli, uint16_t fnum, ****************************************************************************/ NTSTATUS cli_qfileinfo_basic(struct cli_state *cli, uint16_t fnum, - uint16_t *pattr, off_t *size, + uint32_t *pattr, off_t *size, struct timespec *create_time, struct timespec *access_time, struct timespec *write_time, @@ -1322,23 +1322,15 @@ NTSTATUS cli_qfileinfo_basic(struct cli_state *cli, uint16_t fnum, NTSTATUS status; if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) { - uint32_t attr = 0; - status = cli_smb2_qfileinfo_basic(cli, + return cli_smb2_qfileinfo_basic(cli, fnum, - &attr, + pattr, 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 diff --git a/source3/libsmb/clirap.h b/source3/libsmb/clirap.h index aca0e78be3a..f7c059aeaf3 100644 --- a/source3/libsmb/clirap.h +++ b/source3/libsmb/clirap.h @@ -126,7 +126,7 @@ bool parse_streams_blob(TALLOC_CTX *mem_ctx, const uint8_t *rdata, NTSTATUS cli_qfilename(struct cli_state *cli, uint16_t fnum, TALLOC_CTX *mem_ctx, char **name); NTSTATUS cli_qfileinfo_basic(struct cli_state *cli, uint16_t fnum, - uint16_t *pattr, off_t *size, + uint32_t *pattr, off_t *size, struct timespec *create_time, struct timespec *access_time, struct timespec *write_time, diff --git a/source3/libsmb/libsmb_stat.c b/source3/libsmb/libsmb_stat.c index 02d1b423b4a..70023fa4c23 100644 --- a/source3/libsmb/libsmb_stat.c +++ b/source3/libsmb/libsmb_stat.c @@ -232,7 +232,7 @@ SMBC_fstat_ctx(SMBCCTX *context, struct timespec access_time_ts; struct timespec write_time_ts; off_t size; - uint16_t attr; + uint32_t attr; char *server = NULL; char *share = NULL; char *user = NULL; @@ -299,8 +299,9 @@ SMBC_fstat_ctx(SMBCCTX *context, &change_time_ts, &ino))) { time_t change_time, access_time, write_time; + uint16_t sattr = 0; - if (!NT_STATUS_IS_OK(cli_getattrE(targetcli, file->cli_fd, &attr, &size, + if (!NT_STATUS_IS_OK(cli_getattrE(targetcli, file->cli_fd, &sattr, &size, &change_time, &access_time, &write_time))) { errno = EINVAL; TALLOC_FREE(frame); @@ -309,6 +310,7 @@ SMBC_fstat_ctx(SMBCCTX *context, change_time_ts = convert_time_t_to_timespec(change_time); access_time_ts = convert_time_t_to_timespec(access_time); write_time_ts = convert_time_t_to_timespec(write_time); + attr = sattr; } setup_stat(st,