1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00

s3:smbd:durable: factor stat checks out into vfs_default_durable_reconnect_check_stat()

This makes vfs_default_durable_reconnect() simpler to read
and it reduces code duplication in the failure case handling.

Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>

Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Thu Oct 25 23:03:13 CEST 2012 on sn-devel-104
This commit is contained in:
Michael Adam 2012-10-23 13:00:02 +02:00 committed by Jeremy Allison
parent a2d53262e8
commit 52ace6767f

View File

@ -298,6 +298,263 @@ NTSTATUS vfs_default_durable_disconnect(struct files_struct *fsp,
return NT_STATUS_OK;
}
/**
* Check whether a cookie-stored struct info is the same
* as a given SMB_STRUCT_STAT, as coming with the fsp.
*/
static bool vfs_default_durable_reconnect_check_stat(
struct vfs_default_durable_stat *cookie_st,
SMB_STRUCT_STAT *fsp_st,
const char *name)
{
int ret;
if (cookie_st->st_ex_dev != fsp_st->st_ex_dev) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_dev",
(unsigned long long)cookie_st->st_ex_dev,
(unsigned long long)fsp_st->st_ex_dev));
return false;
}
if (cookie_st->st_ex_ino != fsp_st->st_ex_ino) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_ino",
(unsigned long long)cookie_st->st_ex_ino,
(unsigned long long)fsp_st->st_ex_ino));
return false;
}
if (cookie_st->st_ex_mode != fsp_st->st_ex_mode) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_mode",
(unsigned long long)cookie_st->st_ex_mode,
(unsigned long long)fsp_st->st_ex_mode));
return false;
}
if (cookie_st->st_ex_nlink != fsp_st->st_ex_nlink) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_nlink",
(unsigned long long)cookie_st->st_ex_nlink,
(unsigned long long)fsp_st->st_ex_nlink));
return false;
}
if (cookie_st->st_ex_uid != fsp_st->st_ex_uid) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_uid",
(unsigned long long)cookie_st->st_ex_uid,
(unsigned long long)fsp_st->st_ex_uid));
return false;
}
if (cookie_st->st_ex_gid != fsp_st->st_ex_gid) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_gid",
(unsigned long long)cookie_st->st_ex_gid,
(unsigned long long)fsp_st->st_ex_gid));
return false;
}
if (cookie_st->st_ex_rdev != fsp_st->st_ex_rdev) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_rdev",
(unsigned long long)cookie_st->st_ex_rdev,
(unsigned long long)fsp_st->st_ex_rdev));
return false;
}
if (cookie_st->st_ex_size != fsp_st->st_ex_size) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_size",
(unsigned long long)cookie_st->st_ex_size,
(unsigned long long)fsp_st->st_ex_size));
return false;
}
ret = timespec_compare(&cookie_st->st_ex_atime,
&fsp_st->st_ex_atime);
if (ret != 0) {
struct timeval tc, ts;
tc = convert_timespec_to_timeval(cookie_st->st_ex_atime);
ts = convert_timespec_to_timeval(fsp_st->st_ex_atime);
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:'%s' != stat:'%s', "
"denying durable reconnect\n",
name,
"st_ex_atime",
timeval_string(talloc_tos(), &tc, true),
timeval_string(talloc_tos(), &ts, true)));
return false;
}
ret = timespec_compare(&cookie_st->st_ex_mtime,
&fsp_st->st_ex_mtime);
if (ret != 0) {
struct timeval tc, ts;
tc = convert_timespec_to_timeval(cookie_st->st_ex_mtime);
ts = convert_timespec_to_timeval(fsp_st->st_ex_mtime);
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:'%s' != stat:'%s', "
"denying durable reconnect\n",
name,
"st_ex_mtime",
timeval_string(talloc_tos(), &tc, true),
timeval_string(talloc_tos(), &ts, true)));
return false;
}
ret = timespec_compare(&cookie_st->st_ex_ctime,
&fsp_st->st_ex_ctime);
if (ret != 0) {
struct timeval tc, ts;
tc = convert_timespec_to_timeval(cookie_st->st_ex_ctime);
ts = convert_timespec_to_timeval(fsp_st->st_ex_ctime);
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:'%s' != stat:'%s', "
"denying durable reconnect\n",
name,
"st_ex_ctime",
timeval_string(talloc_tos(), &tc, true),
timeval_string(talloc_tos(), &ts, true)));
return false;
}
ret = timespec_compare(&cookie_st->st_ex_btime,
&fsp_st->st_ex_btime);
if (ret != 0) {
struct timeval tc, ts;
tc = convert_timespec_to_timeval(cookie_st->st_ex_btime);
ts = convert_timespec_to_timeval(fsp_st->st_ex_btime);
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:'%s' != stat:'%s', "
"denying durable reconnect\n",
name,
"st_ex_btime",
timeval_string(talloc_tos(), &tc, true),
timeval_string(talloc_tos(), &ts, true)));
return false;
}
if (cookie_st->st_ex_calculated_birthtime !=
fsp_st->st_ex_calculated_birthtime)
{
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_calculated_birthtime",
(unsigned long long)cookie_st->st_ex_calculated_birthtime,
(unsigned long long)fsp_st->st_ex_calculated_birthtime));
return false;
}
if (cookie_st->st_ex_blksize != fsp_st->st_ex_blksize) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_blksize",
(unsigned long long)cookie_st->st_ex_blksize,
(unsigned long long)fsp_st->st_ex_blksize));
return false;
}
if (cookie_st->st_ex_blocks != fsp_st->st_ex_blocks) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_blocks",
(unsigned long long)cookie_st->st_ex_blocks,
(unsigned long long)fsp_st->st_ex_blocks));
return false;
}
if (cookie_st->st_ex_flags != fsp_st->st_ex_flags) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_flags",
(unsigned long long)cookie_st->st_ex_flags,
(unsigned long long)fsp_st->st_ex_flags));
return false;
}
if (cookie_st->st_ex_mask != fsp_st->st_ex_mask) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"st_ex_mask",
(unsigned long long)cookie_st->st_ex_mask,
(unsigned long long)fsp_st->st_ex_mask));
return false;
}
if (cookie_st->vfs_private != fsp_st->vfs_private) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
name,
"vfs_private",
(unsigned long long)cookie_st->vfs_private,
(unsigned long long)fsp_st->vfs_private));
return false;
}
return true;
}
NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
struct smb_request *smb1req,
struct smbXsrv_open *op,
@ -613,398 +870,10 @@ NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_dev != fsp->fsp_name->st.st_ex_dev) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_dev",
(unsigned long long)cookie.stat_info.st_ex_dev,
(unsigned long long)fsp->fsp_name->st.st_ex_dev));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_ino != fsp->fsp_name->st.st_ex_ino) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_ino",
(unsigned long long)cookie.stat_info.st_ex_ino,
(unsigned long long)fsp->fsp_name->st.st_ex_ino));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_mode != fsp->fsp_name->st.st_ex_mode) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_mode",
(unsigned long long)cookie.stat_info.st_ex_mode,
(unsigned long long)fsp->fsp_name->st.st_ex_mode));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_nlink != fsp->fsp_name->st.st_ex_nlink) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_nlink",
(unsigned long long)cookie.stat_info.st_ex_nlink,
(unsigned long long)fsp->fsp_name->st.st_ex_nlink));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_uid != fsp->fsp_name->st.st_ex_uid) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_uid",
(unsigned long long)cookie.stat_info.st_ex_uid,
(unsigned long long)fsp->fsp_name->st.st_ex_uid));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_gid != fsp->fsp_name->st.st_ex_gid) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_gid",
(unsigned long long)cookie.stat_info.st_ex_gid,
(unsigned long long)fsp->fsp_name->st.st_ex_gid));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_rdev != fsp->fsp_name->st.st_ex_rdev) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_rdev",
(unsigned long long)cookie.stat_info.st_ex_rdev,
(unsigned long long)fsp->fsp_name->st.st_ex_rdev));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_size != fsp->fsp_name->st.st_ex_size) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_size",
(unsigned long long)cookie.stat_info.st_ex_size,
(unsigned long long)fsp->fsp_name->st.st_ex_size));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
ret = timespec_compare(&cookie.stat_info.st_ex_atime,
&fsp->fsp_name->st.st_ex_atime);
if (ret != 0) {
struct timeval tc, ts;
tc = convert_timespec_to_timeval(cookie.stat_info.st_ex_atime);
ts = convert_timespec_to_timeval(fsp->fsp_name->st.st_ex_atime);
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:'%s' != stat:'%s', "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_atime",
timeval_string(talloc_tos(), &tc, true),
timeval_string(talloc_tos(), &ts, true)));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
ret = timespec_compare(&cookie.stat_info.st_ex_mtime,
&fsp->fsp_name->st.st_ex_mtime);
if (ret != 0) {
struct timeval tc, ts;
tc = convert_timespec_to_timeval(cookie.stat_info.st_ex_mtime);
ts = convert_timespec_to_timeval(fsp->fsp_name->st.st_ex_mtime);
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:'%s' != stat:'%s', "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_mtime",
timeval_string(talloc_tos(), &tc, true),
timeval_string(talloc_tos(), &ts, true)));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
ret = timespec_compare(&cookie.stat_info.st_ex_ctime,
&fsp->fsp_name->st.st_ex_ctime);
if (ret != 0) {
struct timeval tc, ts;
tc = convert_timespec_to_timeval(cookie.stat_info.st_ex_ctime);
ts = convert_timespec_to_timeval(fsp->fsp_name->st.st_ex_ctime);
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:'%s' != stat:'%s', "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_ctime",
timeval_string(talloc_tos(), &tc, true),
timeval_string(talloc_tos(), &ts, true)));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
ret = timespec_compare(&cookie.stat_info.st_ex_btime,
&fsp->fsp_name->st.st_ex_btime);
if (ret != 0) {
struct timeval tc, ts;
tc = convert_timespec_to_timeval(cookie.stat_info.st_ex_btime);
ts = convert_timespec_to_timeval(fsp->fsp_name->st.st_ex_btime);
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:'%s' != stat:'%s', "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_btime",
timeval_string(talloc_tos(), &tc, true),
timeval_string(talloc_tos(), &ts, true)));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_calculated_birthtime !=
fsp->fsp_name->st.st_ex_calculated_birthtime)
{
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_calculated_birthtime",
(unsigned long long)cookie.stat_info.st_ex_calculated_birthtime,
(unsigned long long)fsp->fsp_name->st.st_ex_calculated_birthtime));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_blksize != fsp->fsp_name->st.st_ex_blksize) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_blksize",
(unsigned long long)cookie.stat_info.st_ex_blksize,
(unsigned long long)fsp->fsp_name->st.st_ex_blksize));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_blocks != fsp->fsp_name->st.st_ex_blocks) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_blocks",
(unsigned long long)cookie.stat_info.st_ex_blocks,
(unsigned long long)fsp->fsp_name->st.st_ex_blocks));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_flags != fsp->fsp_name->st.st_ex_flags) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_flags",
(unsigned long long)cookie.stat_info.st_ex_flags,
(unsigned long long)fsp->fsp_name->st.st_ex_flags));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.st_ex_mask != fsp->fsp_name->st.st_ex_mask) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"st_ex_mask",
(unsigned long long)cookie.stat_info.st_ex_mask,
(unsigned long long)fsp->fsp_name->st.st_ex_mask));
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "
"SMB_VFS_CLOSE failed (%s) - leaking file "
"descriptor\n", strerror(errno)));
}
TALLOC_FREE(lck);
op->compat = NULL;
fsp_free(fsp);
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
if (cookie.stat_info.vfs_private != fsp->fsp_name->st.vfs_private) {
DEBUG(1, ("vfs_default_durable_reconnect (%s): "
"stat_ex.%s differs: "
"cookie:%llu != stat:%llu, "
"denying durable reconnect\n",
fsp_str_dbg(fsp),
"vfs_private",
(unsigned long long)cookie.stat_info.vfs_private,
(unsigned long long)fsp->fsp_name->st.vfs_private));
ok = vfs_default_durable_reconnect_check_stat(&cookie.stat_info,
&fsp->fsp_name->st,
fsp_str_dbg(fsp));
if (!ok) {
ret = SMB_VFS_CLOSE(fsp);
if (ret == -1) {
DEBUG(0, ("vfs_default_durable_reconnect: "