[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Apr 6 17:10:02 UTC 2022


The branch, master has been updated
       via  a27bbfc8a96 streams_depot: Simplify stream_dir()
       via  d79194b2586 streams_depot: Only create the subdirectories with O_CREAT
       via  7ad4047b602 streams_depot: Pass base_sbuf to stream_smb_fname()
       via  f1765f91b01 s3: smbget: Fix auth_fn, order of //server/share parameters is mixed in prompt.
      from  39f70481bbd WHATSNEW: Document some CTDB changes

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


- Log -----------------------------------------------------------------
commit a27bbfc8a961968976649aa4db71b37a0db98b38
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Apr 5 15:32:08 2022 +0200

    streams_depot: Simplify stream_dir()
    
    The only place where we could have entered the mark_valid() code path
    is via openat(). In openat(":stream") with O_CREAT fsp->base_fsp() is
    fully opened from within create_file_unixpath(). Change
    streams_depot_openat() to call the FSETXATTR from mark_file_valid()
    directly. This means we don't need the expensive synthetic_pathref()
    call from stream_dir() anymore.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Wed Apr  6 17:09:59 UTC 2022 on sn-devel-184

commit d79194b2586c3435f11d650d8b4694b928dbf525
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Apr 5 16:58:41 2022 +0200

    streams_depot: Only create the subdirectories with O_CREAT
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 7ad4047b602a977e3df126b36d92ab344d95d110
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Apr 5 16:08:43 2022 +0200

    streams_depot: Pass base_sbuf to stream_smb_fname()
    
    In streams_depot_openat() we're sure to have a valid base_fsp with a
    valid stat around. We don't need the additional SMB_VFS_NEXT_STAT() in
    stream_dir() in this case.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit f1765f91b015d64122e74c01c7c6d0984cc7af87
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Apr 5 13:24:19 2022 -0700

    s3: smbget: Fix auth_fn, order of //server/share parameters is mixed in prompt.
    
    Found by <voetelink at nrg.eu>
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14831
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

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

Summary of changes:
 source3/modules/vfs_streams_depot.c | 103 +++++++++++++++++-------------------
 source3/utils/smbget.c              |   2 +-
 2 files changed, 50 insertions(+), 55 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_streams_depot.c b/source3/modules/vfs_streams_depot.c
index cc2d25a36f6..107543f6bbc 100644
--- a/source3/modules/vfs_streams_depot.c
+++ b/source3/modules/vfs_streams_depot.c
@@ -110,25 +110,6 @@ static bool file_is_valid(vfs_handle_struct *handle,
 	return true;
 }
 
-static bool mark_file_valid(vfs_handle_struct *handle,
-				const struct smb_filename *smb_fname)
-{
-	char buf = '1';
-	int ret;
-
-	DEBUG(10, ("marking file %s as valid\n", smb_fname->base_name));
-
-	ret = SMB_VFS_FSETXATTR(smb_fname->fsp, SAMBA_XATTR_MARKER,
-				    &buf, sizeof(buf), 0);
-
-	if (ret == -1) {
-		DEBUG(10, ("SETXATTR failed: %s\n", strerror(errno)));
-		return false;
-	}
-
-	return true;
-}
-
 /*
  * Return the root of the stream directory. Can be
  * external to the share definition but by default
@@ -183,8 +164,6 @@ static char *stream_dir(vfs_handle_struct *handle,
 	char *rootdir = NULL;
 	struct smb_filename *rootdir_fname = NULL;
 	struct smb_filename *tmp_fname = NULL;
-	struct smb_filename *tmpref = NULL;
-	const struct smb_filename *pathref = NULL;
 	int ret;
 
 	check_valid = lp_parm_bool(SNUM(handle->conn),
@@ -424,27 +403,7 @@ static char *stream_dir(vfs_handle_struct *handle,
 	if ((ret != 0) && (errno != EEXIST)) {
 		goto fail;
 	}
-	pathref = smb_fname;
-	if (smb_fname->fsp == NULL) {
-		NTSTATUS status;
-		status = synthetic_pathref(talloc_tos(),
-					handle->conn->cwd_fsp,
-					smb_fname->base_name,
-					NULL,
-					NULL,
-					smb_fname->twrp,
-					smb_fname->flags,
-					&tmpref);
-		if (!NT_STATUS_IS_OK(status)) {
-			goto fail;
-		}
-		pathref = tmpref;
-	}
-	if (check_valid && !mark_file_valid(handle, pathref)) {
-		goto fail;
-	}
 
-	TALLOC_FREE(tmpref);
 	TALLOC_FREE(rootdir_fname);
 	TALLOC_FREE(rootdir);
 	TALLOC_FREE(tmp_fname);
@@ -452,7 +411,6 @@ static char *stream_dir(vfs_handle_struct *handle,
 	return result;
 
  fail:
-	TALLOC_FREE(tmpref);
 	TALLOC_FREE(rootdir_fname);
 	TALLOC_FREE(rootdir);
 	TALLOC_FREE(tmp_fname);
@@ -465,6 +423,7 @@ static char *stream_dir(vfs_handle_struct *handle,
  * stream.
  */
 static NTSTATUS stream_smb_fname(vfs_handle_struct *handle,
+				 const struct stat_ex *base_sbuf,
 				 const struct smb_filename *smb_fname,
 				 struct smb_filename **smb_fname_out,
 				 bool create_dir)
@@ -483,7 +442,7 @@ static NTSTATUS stream_smb_fname(vfs_handle_struct *handle,
 		}
 	}
 
-	dirname = stream_dir(handle, smb_fname, NULL, create_dir);
+	dirname = stream_dir(handle, smb_fname, base_sbuf, create_dir);
 
 	if (dirname == NULL) {
 		status = map_nt_error_from_unix(errno);
@@ -653,8 +612,8 @@ static int streams_depot_stat(vfs_handle_struct *handle,
 	}
 
 	/* Stat the actual stream now. */
-	status = stream_smb_fname(handle, smb_fname, &smb_fname_stream,
-				  false);
+	status = stream_smb_fname(
+		handle, NULL, smb_fname, &smb_fname_stream, false);
 	if (!NT_STATUS_IS_OK(status)) {
 		ret = -1;
 		errno = map_errno_from_nt_status(status);
@@ -687,8 +646,8 @@ static int streams_depot_lstat(vfs_handle_struct *handle,
 	}
 
 	/* Stat the actual stream now. */
-	status = stream_smb_fname(handle, smb_fname, &smb_fname_stream,
-				  false);
+	status = stream_smb_fname(
+		handle, NULL, smb_fname, &smb_fname_stream, false);
 	if (!NT_STATUS_IS_OK(status)) {
 		ret = -1;
 		errno = map_errno_from_nt_status(status);
@@ -712,6 +671,7 @@ static int streams_depot_openat(struct vfs_handle_struct *handle,
 	struct smb_filename *smb_fname_stream = NULL;
 	struct files_struct *fspcwd = NULL;
 	NTSTATUS status;
+	bool create_it;
 	int ret = -1;
 
 	if (!is_named_stream(smb_fname)) {
@@ -726,14 +686,49 @@ static int streams_depot_openat(struct vfs_handle_struct *handle,
 	SMB_ASSERT(fsp_is_alternate_stream(fsp));
 	SMB_ASSERT(VALID_STAT(fsp->base_fsp->fsp_name->st));
 
+	create_it = (mode & O_CREAT);
+
 	/* Determine the stream name, and then open it. */
-	status = stream_smb_fname(handle, smb_fname, &smb_fname_stream, true);
+	status = stream_smb_fname(
+		handle,
+		&fsp->base_fsp->fsp_name->st,
+		fsp->fsp_name,
+		&smb_fname_stream,
+		create_it);
 	if (!NT_STATUS_IS_OK(status)) {
 		ret = -1;
 		errno = map_errno_from_nt_status(status);
 		goto done;
 	}
 
+	if (create_it) {
+		bool check_valid = lp_parm_bool(
+			SNUM(handle->conn),
+			"streams_depot",
+			"check_valid",
+			true);
+
+		if (check_valid) {
+			char buf = '1';
+
+			DBG_DEBUG("marking file %s as valid\n",
+				  fsp->base_fsp->fsp_name->base_name);
+
+			ret = SMB_VFS_FSETXATTR(
+				fsp->base_fsp,
+				SAMBA_XATTR_MARKER,
+				&buf,
+				sizeof(buf),
+				0);
+
+			if (ret == -1) {
+				DBG_DEBUG("FSETXATTR failed: %s\n",
+					  strerror(errno));
+				return -1;
+			}
+		}
+	}
+
 	status = vfs_at_fspcwd(talloc_tos(), handle->conn, &fspcwd);
 	if (!NT_STATUS_IS_OK(status)) {
 		ret = -1;
@@ -778,8 +773,8 @@ static int streams_depot_unlink_internal(vfs_handle_struct *handle,
 		struct smb_filename *smb_fname_stream = NULL;
 		NTSTATUS status;
 
-		status = stream_smb_fname(handle, full_fname, &smb_fname_stream,
-					  false);
+		status = stream_smb_fname(
+			handle, NULL, full_fname, &smb_fname_stream, false);
 		TALLOC_FREE(full_fname);
 		if (!NT_STATUS_IS_OK(status)) {
 			errno = map_errno_from_nt_status(status);
@@ -1014,15 +1009,15 @@ static int streams_depot_renameat(vfs_handle_struct *handle,
 		goto done;
 	}
 
-	status = stream_smb_fname(handle, full_src, &smb_fname_src_stream,
-				  false);
+	status = stream_smb_fname(
+		handle, NULL, full_src, &smb_fname_src_stream, false);
 	if (!NT_STATUS_IS_OK(status)) {
 		errno = map_errno_from_nt_status(status);
 		goto done;
 	}
 
-	status = stream_smb_fname(handle, full_dst,
-				  &smb_fname_dst_stream, false);
+	status = stream_smb_fname(
+		handle, NULL, full_dst, &smb_fname_dst_stream, false);
 	if (!NT_STATUS_IS_OK(status)) {
 		errno = map_errno_from_nt_status(status);
 		goto done;
diff --git a/source3/utils/smbget.c b/source3/utils/smbget.c
index 19958f35afa..3e7c5687d83 100644
--- a/source3/utils/smbget.c
+++ b/source3/utils/smbget.c
@@ -129,7 +129,7 @@ static void get_auth_data(const char *srv, const char *shr, char *wg, int wglen,
 
 		rc = asprintf(&prompt,
 			      "Password for [%s] connecting to //%s/%s: ",
-			      un, shr, srv);
+			      un, srv, shr);
 		if (rc == -1) {
 			return;
 		}


-- 
Samba Shared Repository



More information about the samba-cvs mailing list