[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Oct 25 15:04:02 MDT 2012


The branch, master has been updated
       via  52ace67 s3:smbd:durable: factor stat checks out into vfs_default_durable_reconnect_check_stat()
      from  a2d5326 python-ntacls: Cope with ACL revision 4

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 52ace6767fddb389e3393c4b19685e59782c6a90
Author: Michael Adam <obnox at samba.org>
Date:   Tue Oct 23 13:00:02 2012 +0200

    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 at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Oct 25 23:03:13 CEST 2012 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/durable.c |  653 +++++++++++++++++++-----------------------------
 1 files changed, 261 insertions(+), 392 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/durable.c b/source3/smbd/durable.c
index 4c6ff67..5d276f3 100644
--- a/source3/smbd/durable.c
+++ b/source3/smbd/durable.c
@@ -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);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list