diff options
Diffstat (limited to 'source3/smbd/nttrans.c')
-rw-r--r-- | source3/smbd/nttrans.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index b970ffc05e..4f75b9f120 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -473,6 +473,7 @@ void reply_ntcreate_and_X(struct smb_request *req) struct timespec c_timespec; struct timespec a_timespec; struct timespec m_timespec; + struct timespec write_time_ts; NTSTATUS status; int oplock_request; uint8_t oplock_granted = NO_OPLOCK_RETURN; @@ -651,6 +652,14 @@ void reply_ntcreate_and_X(struct smb_request *req) } p += 4; + /* Deal with other possible opens having a modified + write time. JRA. */ + ZERO_STRUCT(write_time_ts); + get_file_infos(fsp->file_id, NULL, &write_time_ts); + if (!null_timespec(write_time_ts)) { + update_stat_ex_writetime(&smb_fname->st, write_time_ts); + } + /* Create time. */ c_timespec = smb_fname->st.st_ex_btime; a_timespec = smb_fname->st.st_ex_atime; @@ -908,6 +917,7 @@ static void call_nt_transact_create(connection_struct *conn, struct timespec c_timespec; struct timespec a_timespec; struct timespec m_timespec; + struct timespec write_time_ts; struct ea_list *ea_list = NULL; NTSTATUS status; size_t param_len; @@ -1133,6 +1143,14 @@ static void call_nt_transact_create(connection_struct *conn, } p += 8; + /* Deal with other possible opens having a modified + write time. JRA. */ + ZERO_STRUCT(write_time_ts); + get_file_infos(fsp->file_id, NULL, &write_time_ts); + if (!null_timespec(write_time_ts)) { + update_stat_ex_writetime(&smb_fname->st, write_time_ts); + } + /* Create time. */ c_timespec = smb_fname->st.st_ex_btime; a_timespec = smb_fname->st.st_ex_atime; |