The Samba-Bugzilla – Attachment 10757 Details for
Bug 11104
SMB2/SMB3 close response does not include attributes when requested
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Raw patch for 4.2.0/master
look (text/plain), 3.69 KB, created by
Jeremy Allison
on 2015-02-20 01:12:54 UTC
(
hide
)
Description:
Raw patch for 4.2.0/master
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2015-02-20 01:12:54 UTC
Size:
3.69 KB
patch
obsolete
>diff --git a/source3/smbd/smb2_close.c b/source3/smbd/smb2_close.c >index 996ad5d..e922e23 100644 >--- a/source3/smbd/smb2_close.c >+++ b/source3/smbd/smb2_close.c >@@ -149,6 +149,48 @@ static void smbd_smb2_request_close_done(struct tevent_req *subreq) > } > } > >+static void setup_close_full_information(connection_struct *conn, >+ struct smb_filename *smb_fname, >+ bool posix_open, >+ struct timespec *out_creation_ts, >+ struct timespec *out_last_access_ts, >+ struct timespec *out_last_write_ts, >+ struct timespec *out_change_ts, >+ uint16_t *out_flags, >+ uint64_t *out_allocation_size, >+ uint64_t *out_end_of_file, >+ uint32_t *out_file_attributes) >+{ >+ int ret; >+ if (posix_open) { >+ ret = SMB_VFS_LSTAT(conn, smb_fname); >+ } else { >+ ret = SMB_VFS_STAT(conn, smb_fname); >+ } >+ if (ret != 0) { >+ return; >+ } >+ >+ *out_flags = SMB2_CLOSE_FLAGS_FULL_INFORMATION; >+ *out_file_attributes = dos_mode(conn, smb_fname); >+ *out_last_write_ts = smb_fname->st.st_ex_mtime; >+ *out_last_access_ts = smb_fname->st.st_ex_atime; >+ *out_creation_ts = get_create_timespec(conn, NULL, smb_fname); >+ *out_change_ts = get_change_timespec(conn, NULL, smb_fname); >+ >+ if (lp_dos_filetime_resolution(SNUM(conn))) { >+ dos_filetime_timespec(out_creation_ts); >+ dos_filetime_timespec(out_last_write_ts); >+ dos_filetime_timespec(out_last_access_ts); >+ dos_filetime_timespec(out_change_ts); >+ } >+ if (!(*out_file_attributes & FILE_ATTRIBUTE_DIRECTORY)) { >+ *out_end_of_file = get_file_size_stat(&smb_fname->st); >+ } >+ >+ *out_allocation_size = SMB_VFS_GET_ALLOC_SIZE(conn, NULL, &smb_fname->st); >+} >+ > static NTSTATUS smbd_smb2_close(struct smbd_smb2_request *req, > struct files_struct *fsp, > uint16_t in_flags, >@@ -195,6 +237,26 @@ static NTSTATUS smbd_smb2_close(struct smbd_smb2_request *req, > return NT_STATUS_NO_MEMORY; > } > >+ if ((in_flags & SMB2_CLOSE_FLAGS_FULL_INFORMATION) && >+ (fsp->initial_delete_on_close || fsp->delete_on_close)) { >+ /* >+ * We might be deleting the file. Ensure we >+ * return valid data from before the file got >+ * removed. >+ */ >+ setup_close_full_information(conn, >+ smb_fname, >+ posix_open, >+ out_creation_ts, >+ out_last_access_ts, >+ out_last_write_ts, >+ out_change_ts, >+ &flags, >+ &allocation_size, >+ &file_size, >+ &dos_attrs); >+ } >+ > status = close_file(smbreq, fsp, NORMAL_CLOSE); > if (!NT_STATUS_IS_OK(status)) { > DEBUG(5,("smbd_smb2_close: close_file[%s]: %s\n", >@@ -203,32 +265,17 @@ static NTSTATUS smbd_smb2_close(struct smbd_smb2_request *req, > } > > if (in_flags & SMB2_CLOSE_FLAGS_FULL_INFORMATION) { >- int ret; >- if (posix_open) { >- ret = SMB_VFS_LSTAT(conn, smb_fname); >- } else { >- ret = SMB_VFS_STAT(conn, smb_fname); >- } >- if (ret == 0) { >- flags = SMB2_CLOSE_FLAGS_FULL_INFORMATION; >- dos_attrs = dos_mode(conn, smb_fname); >- *out_last_write_ts = smb_fname->st.st_ex_mtime; >- *out_last_access_ts = smb_fname->st.st_ex_atime; >- *out_creation_ts = get_create_timespec(conn, NULL, smb_fname); >- *out_change_ts = get_change_timespec(conn, NULL, smb_fname); >- >- if (lp_dos_filetime_resolution(SNUM(conn))) { >- dos_filetime_timespec(out_creation_ts); >- dos_filetime_timespec(out_last_write_ts); >- dos_filetime_timespec(out_last_access_ts); >- dos_filetime_timespec(out_change_ts); >- } >- if (!(dos_attrs & FILE_ATTRIBUTE_DIRECTORY)) { >- file_size = get_file_size_stat(&smb_fname->st); >- } >- >- allocation_size = SMB_VFS_GET_ALLOC_SIZE(conn, NULL, &smb_fname->st); >- } >+ setup_close_full_information(conn, >+ smb_fname, >+ posix_open, >+ out_creation_ts, >+ out_last_access_ts, >+ out_last_write_ts, >+ out_change_ts, >+ &flags, >+ &allocation_size, >+ &file_size, >+ &dos_attrs); > } > > *out_flags = flags;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 11104
:
10747
|
10748
|
10753
|
10757
|
10758
|
10761