return NT_STATUS_OK;
}
-/***************************************************************
- Wrapper that allows SMB2 to get pathname attributes.
- Synchronous only.
-***************************************************************/
-
-NTSTATUS cli_smb2_getatr(struct cli_state *cli,
- const char *name,
- uint32_t *pattr,
- off_t *size,
- time_t *write_time)
-{
- NTSTATUS status;
- uint16_t fnum = 0xffff;
- struct timespec write_time_ts;
- TALLOC_CTX *frame = talloc_stackframe();
-
- if (smbXcli_conn_has_async_calls(cli->conn)) {
- /*
- * Can't use sync call while an async call is in flight
- */
- status = NT_STATUS_INVALID_PARAMETER;
- goto fail;
- }
-
- status = get_fnum_from_path(cli,
- name,
- FILE_READ_ATTRIBUTES,
- &fnum);
-
- if (!NT_STATUS_IS_OK(status)) {
- goto fail;
- }
-
- status = cli_qfileinfo_basic(
- cli,
- fnum,
- pattr,
- size,
- NULL, /* create_time */
- NULL, /* access_time */
- &write_time_ts,
- NULL, /* change_time */
- NULL); /* ino */
- if (!NT_STATUS_IS_OK(status)) {
- goto fail;
- }
- if (write_time != NULL) {
- *write_time = write_time_ts.tv_sec;
- }
-
- fail:
-
- if (fnum != 0xffff) {
- cli_smb2_close_fnum(cli, fnum);
- }
-
- cli->raw_status = status;
-
- TALLOC_FREE(frame);
- return status;
-}
-
/***************************************************************
Wrapper that allows SMB2 to set SMB_FILE_BASIC_INFORMATION on
a pathname.
NTSTATUS status = NT_STATUS_OK;
if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
- return cli_smb2_getatr(cli,
- fname,
- pattr,
- size,
- write_time);
+ struct stat_ex sbuf = {
+ .st_ex_nlink = 0,
+ };
+ uint32_t attr;
+
+ status = cli_smb2_qpathinfo_basic(cli, fname, &sbuf, &attr);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+
+ if (pattr != NULL) {
+ *pattr = attr;
+ }
+ if (size != NULL) {
+ *size = sbuf.st_ex_size;
+ }
+ if (write_time != NULL) {
+ *write_time = sbuf.st_ex_mtime.tv_sec;
+ }
+ return NT_STATUS_OK;
}
frame = talloc_stackframe();