summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalph Boehme <slow@samba.org>2019-09-09 08:08:06 +0200
committerRalph Boehme <slow@samba.org>2019-09-10 20:22:21 +0000
commit95655fe683d499d93f3844ed72ad332ef64adb96 (patch)
tree0fb2a75a94101082203e08cd40481877a0533d98
parente00e78cfeda99bd5374eff8fb4ba84873e4e46b7 (diff)
downloadsamba-95655fe683d499d93f3844ed72ad332ef64adb96.tar.gz
vfs: restore stat fields in vfs_stat_fsp()
This ensures we preserve btime, itime and File-ID. As the Durable Handles code calls vfs_stat_fsp() in the DH disconnect function, previously the btime was lost and NOT stored in the cookie. With this change the cookie will store the correct btime (and iflags), which requires us to call dos_mode() in the reconnect function to ensure we pass vfs_default_durable_reconnect_check_stat(). BUG: https://bugzilla.samba.org/show_bug.cgi?id=14121 Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org> Autobuild-User(master): Ralph Böhme <slow@samba.org> Autobuild-Date(master): Tue Sep 10 20:22:21 UTC 2019 on sn-devel-184
-rw-r--r--selftest/knownfail.d/samba3.smb2.create1
-rw-r--r--source3/smbd/durable.c2
-rw-r--r--source3/smbd/vfs.c2
3 files changed, 4 insertions, 1 deletions
diff --git a/selftest/knownfail.d/samba3.smb2.create b/selftest/knownfail.d/samba3.smb2.create
deleted file mode 100644
index 89455dacdf0..00000000000
--- a/selftest/knownfail.d/samba3.smb2.create
+++ /dev/null
@@ -1 +0,0 @@
-^samba3.smb2.fileid.fileid\(nt4_dc\)
diff --git a/source3/smbd/durable.c b/source3/smbd/durable.c
index db02c229edd..a42c201b81b 100644
--- a/source3/smbd/durable.c
+++ b/source3/smbd/durable.c
@@ -841,6 +841,8 @@ NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
+ (void)dos_mode(fsp->conn, fsp->fsp_name);
+
ok = vfs_default_durable_reconnect_check_stat(&cookie.stat_info,
&fsp->fsp_name->st,
fsp_str_dbg(fsp));
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c
index c08c7302a24..a131b3303d5 100644
--- a/source3/smbd/vfs.c
+++ b/source3/smbd/vfs.c
@@ -1413,6 +1413,7 @@ int vfs_stat_smb_basename(struct connection_struct *conn,
NTSTATUS vfs_stat_fsp(files_struct *fsp)
{
int ret;
+ struct stat_ex saved_stat = fsp->fsp_name->st;
if(fsp->fh->fd == -1) {
if (fsp->posix_flags & FSP_POSIX_FLAGS_OPEN) {
@@ -1426,6 +1427,7 @@ NTSTATUS vfs_stat_fsp(files_struct *fsp)
if (ret == -1) {
return map_nt_error_from_unix(errno);
}
+ update_stat_ex_from_saved_stat(&fsp->fsp_name->st, &saved_stat);
return NT_STATUS_OK;
}