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,
*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);
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,
if (write_time) {
*write_time = write_time_ts.tv_sec;
}
+ if (pattr != NULL) {
+ *pattr = attr;
+ }
return NT_STATUS_OK;
}
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)) {
status = cli_smb2_qfileinfo_basic(cli,
fnum,
- pattr,
+ &attr,
size,
create_time,
access_time,
fail:
+ if (NT_STATUS_IS_OK(status)) {
+ if (pattr != NULL) {
+ *pattr = attr;
+ }
+ }
+
if (fnum != 0xffff) {
cli_smb2_close_fnum(cli, 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,
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