[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Fri Dec 16 08:43:01 UTC 2022


The branch, master has been updated
       via  89828c64c9a libsmb: Simplify clistr_is_previous_version_path()
       via  833cb4cb812 libsmb: Slightly simplify cli_smb2_create_fnum_send()
       via  c64c8af6d4b libsmb: Use clistr_smb2_extract_snapshot_token() in cli_smb2_create_fnum_send()
       via  157a79f0ca4 s3: lib: Add new clistr_smb2_extract_snapshot_token() function.
       via  fdc6449a3fd s3: smbd: Make extract_snapshot_token() a wrapper for extract_snapshot_token_internal().
       via  96d68c6b8ae libsmb: Make a r/w copy of fname in cli_smb2_create_fnum_send()
      from  9189bd9c9c1 build: Convert winexe to use enabled= in wscript

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


- Log -----------------------------------------------------------------
commit 89828c64c9a8114bb5f596bc007a7c126e803d80
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 15 19:14:48 2022 +0100

    libsmb: Simplify clistr_is_previous_version_path()
    
    Nobody looks at the out params anymore
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Volker Lendecke <vl at samba.org>
    Autobuild-Date(master): Fri Dec 16 08:42:18 UTC 2022 on sn-devel-184

commit 833cb4cb8126dcbee914551bcd2e852cec67786c
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 15 19:10:09 2022 +0100

    libsmb: Slightly simplify cli_smb2_create_fnum_send()
    
    We can now write to fname directly.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit c64c8af6d4b121b0fa7ebe13b5c7c28ee9cc8053
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Dec 15 13:32:35 2022 -0800

    libsmb: Use clistr_smb2_extract_snapshot_token() in cli_smb2_create_fnum_send()
    
    Now that fname is writable, we can avoid a bit of complexity with
    clistr_smb2_extract_snapshot_token()
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Signed-off-by: Jeremy Allison <jra at samba.org>

commit 157a79f0ca45a19db0826a7b49ab0582e8191a68
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Dec 15 13:26:49 2022 -0800

    s3: lib: Add new clistr_smb2_extract_snapshot_token() function.
    
    Strips @GMT from client pathnames for SMB2 (uses '\\' separator).
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Volker Lendecke <vl at samba.org>

commit fdc6449a3fdfb342184d6a30f22d8cf9cf708841
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Dec 15 13:24:12 2022 -0800

    s3: smbd: Make extract_snapshot_token() a wrapper for extract_snapshot_token_internal().
    
    Allows us to pass in path separator from a new function without
    changing existing calling code.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Volker Lendecke <vl at samba.org>

commit 96d68c6b8aef33d6a227f3b52c241140cc0e8246
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 15 18:54:58 2022 +0100

    libsmb: Make a r/w copy of fname in cli_smb2_create_fnum_send()
    
    We're messing with this in 2 places in this routine and have to make a
    copy in both places. Make this writable, so we don't have to make a
    copy further down.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 source3/lib/util_path.c        | 34 ++++++++++++++-------------------
 source3/lib/util_path.h        |  6 ++----
 source3/libsmb/cli_smb2_fnum.c | 43 ++++++++++++++----------------------------
 source3/libsmb/clifile.c       | 28 +++++++++++++--------------
 source3/libsmb/clilist.c       |  4 ++--
 5 files changed, 46 insertions(+), 69 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/lib/util_path.c b/source3/lib/util_path.c
index 5a94b391dd6..9c9c6eb5807 100644
--- a/source3/lib/util_path.c
+++ b/source3/lib/util_path.c
@@ -260,10 +260,7 @@ static bool find_snapshot_token(
 	return true;
 }
 
-bool clistr_is_previous_version_path(const char *path,
-				     const char **startp,
-				     const char **endp,
-				     NTTIME *ptwrp)
+bool clistr_is_previous_version_path(const char *path)
 {
 	const char *start = NULL;
 	const char *next = NULL;
@@ -271,30 +268,17 @@ bool clistr_is_previous_version_path(const char *path,
 	bool ok;
 
 	ok = find_snapshot_token(path, '\\', &start, &next, &twrp);
-	if (!ok) {
-		return false;
-	}
-
-	if (startp != NULL) {
-		*startp = start;
-	}
-	if (endp != NULL) {
-		*endp = next;
-	}
-	if (ptwrp != NULL) {
-		*ptwrp = twrp;
-	}
-	return true;
+	return ok;
 }
 
-bool extract_snapshot_token(char *fname, NTTIME *twrp)
+static bool extract_snapshot_token_internal(char *fname, NTTIME *twrp, char sep)
 {
 	const char *start = NULL;
 	const char *next = NULL;
 	size_t remaining;
 	bool found;
 
-	found = find_snapshot_token(fname, '/', &start, &next, twrp);
+	found = find_snapshot_token(fname, sep, &start, &next, twrp);
 	if (!found) {
 		return false;
 	}
@@ -305,6 +289,16 @@ bool extract_snapshot_token(char *fname, NTTIME *twrp)
 	return true;
 }
 
+bool extract_snapshot_token(char *fname, NTTIME *twrp)
+{
+	return extract_snapshot_token_internal(fname, twrp, '/');
+}
+
+bool clistr_smb2_extract_snapshot_token(char *fname, NTTIME *twrp)
+{
+	return extract_snapshot_token_internal(fname, twrp, '\\');
+}
+
 /*
  * Take two absolute paths, figure out if "subdir" is a proper
  * subdirectory of "parent". Return the component relative to the
diff --git a/source3/lib/util_path.h b/source3/lib/util_path.h
index 5b0a1f13e38..9dcc1dd23ca 100644
--- a/source3/lib/util_path.h
+++ b/source3/lib/util_path.h
@@ -45,10 +45,8 @@ char *state_path(TALLOC_CTX *mem_ctx, const char *name);
 char *cache_path(TALLOC_CTX *mem_ctx, const char *name);
 char *canonicalize_absolute_path(TALLOC_CTX *ctx, const char *abs_path);
 bool extract_snapshot_token(char *fname, NTTIME *twrp);
-bool clistr_is_previous_version_path(const char *path,
-				     const char **startp,
-				     const char **endp,
-				     NTTIME *ptwrp);
+bool clistr_smb2_extract_snapshot_token(char *fname, NTTIME *twrp);
+bool clistr_is_previous_version_path(const char *path);
 bool subdir_of(const char *parent,
 	       size_t parent_len,
 	       const char *subdir,
diff --git a/source3/libsmb/cli_smb2_fnum.c b/source3/libsmb/cli_smb2_fnum.c
index bb99201bb61..734c24531d9 100644
--- a/source3/libsmb/cli_smb2_fnum.c
+++ b/source3/libsmb/cli_smb2_fnum.c
@@ -158,9 +158,9 @@ static uint8_t flags_to_smb2_oplock(uint32_t create_flags)
  if this hasn't already been done.
 ***************************************************************/
 
-static const char *smb2_dfs_share_path(TALLOC_CTX *ctx,
-				       struct cli_state *cli,
-				       const char *path)
+static char *smb2_dfs_share_path(TALLOC_CTX *ctx,
+				 struct cli_state *cli,
+				 char *path)
 {
 	bool is_dfs = smbXcli_conn_dfs_supported(cli->conn) &&
 			smbXcli_tcon_is_dfs_share(cli->smb2.tcon);
@@ -210,7 +210,7 @@ struct tevent_req *cli_smb2_create_fnum_send(
 	TALLOC_CTX *mem_ctx,
 	struct tevent_context *ev,
 	struct cli_state *cli,
-	const char *fname,
+	const char *fname_in,
 	uint32_t create_flags,
 	uint32_t impersonation_level,
 	uint32_t desired_access,
@@ -222,9 +222,9 @@ struct tevent_req *cli_smb2_create_fnum_send(
 {
 	struct tevent_req *req, *subreq;
 	struct cli_smb2_create_fnum_state *state;
+	char *fname = NULL;
 	size_t fname_len = 0;
-	const char *startp = NULL;
-	const char *endp = NULL;
+	bool have_twrp;
 	NTTIME ntt;
 	NTSTATUS status;
 
@@ -235,28 +235,18 @@ struct tevent_req *cli_smb2_create_fnum_send(
 	}
 	state->cli = cli;
 
+	fname = talloc_strdup(state, fname_in);
+	if (tevent_req_nomem(fname, req)) {
+		return tevent_req_post(req, ev);
+	}
+
 	if (cli->backup_intent) {
 		create_options |= FILE_OPEN_FOR_BACKUP_INTENT;
 	}
 
 	/* Check for @GMT- paths. Remove the @GMT and turn into TWrp if so. */
-	fname_len = strlen(fname);
-	if (clistr_is_previous_version_path(fname, &startp, &endp, &ntt)) {
-		size_t len_before_gmt = startp - fname;
-		size_t len_after_gmt = fname + fname_len - endp;
-
-		char *new_fname = talloc_array(state, char,
-				len_before_gmt + len_after_gmt + 1);
-
-		if (tevent_req_nomem(new_fname, req)) {
-			return tevent_req_post(req, ev);
-		}
-
-		memcpy(new_fname, fname, len_before_gmt);
-		memcpy(new_fname + len_before_gmt, endp, len_after_gmt + 1);
-		fname = new_fname;
-		fname_len = len_before_gmt + len_after_gmt;
-
+	have_twrp = clistr_smb2_extract_snapshot_token(fname, &ntt);
+	if (have_twrp) {
 		status = smb2_create_blob_add(
 			state,
 			&state->in_cblobs,
@@ -298,12 +288,7 @@ struct tevent_req *cli_smb2_create_fnum_send(
 
 	/* Or end in a '\' */
 	if (fname_len > 0 && fname[fname_len-1] == '\\') {
-		char *new_fname = talloc_strdup(state, fname);
-		if (tevent_req_nomem(new_fname, req)) {
-			return tevent_req_post(req, ev);
-		}
-		new_fname[fname_len-1] = '\0';
-		fname = new_fname;
+		fname[fname_len-1] = '\0';
 	}
 
 	subreq = smb2cli_create_send(state, ev,
diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c
index 91bb1095643..13619c74209 100644
--- a/source3/libsmb/clifile.c
+++ b/source3/libsmb/clifile.c
@@ -79,7 +79,7 @@ struct tevent_req *cli_setpathinfo_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(path, NULL, NULL, NULL) &&
+	if (clistr_is_previous_version_path(path) &&
 			!INFO_LEVEL_IS_UNIX(level)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
@@ -1332,7 +1332,7 @@ static struct tevent_req *cli_cifs_rename_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(fname_src, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(fname_src)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -1558,7 +1558,7 @@ static struct tevent_req *cli_ntrename_internal_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(fname_src, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(fname_src)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -2009,7 +2009,7 @@ struct tevent_req *cli_unlink_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(fname, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(fname)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -2141,7 +2141,7 @@ struct tevent_req *cli_mkdir_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(dname, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(dname)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -2280,7 +2280,7 @@ struct tevent_req *cli_rmdir_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(dname, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(dname)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -2549,7 +2549,7 @@ static struct tevent_req *cli_ntcreate1_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(fname, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(fname)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -2896,7 +2896,7 @@ struct tevent_req *cli_nttrans_create_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(fname, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(fname)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -3136,7 +3136,7 @@ struct tevent_req *cli_openx_create(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(fname, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(fname)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -4363,7 +4363,7 @@ struct tevent_req *cli_getatr_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(fname, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(fname)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -4676,7 +4676,7 @@ struct tevent_req *cli_setatr_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(fname, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(fname)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -4836,7 +4836,7 @@ struct tevent_req *cli_chkpath_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(fname, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(fname)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -5182,7 +5182,7 @@ struct tevent_req *cli_ctemp_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(path, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(path)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -6574,7 +6574,7 @@ struct tevent_req *cli_qpathinfo_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(fname, NULL, NULL, NULL) &&
+	if (clistr_is_previous_version_path(fname) &&
 			!INFO_LEVEL_IS_UNIX(level)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c
index c41ba93cd25..903c5d22777 100644
--- a/source3/libsmb/clilist.c
+++ b/source3/libsmb/clilist.c
@@ -700,7 +700,7 @@ static struct tevent_req *cli_list_trans_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	if (clistr_is_previous_version_path(state->mask, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(state->mask)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 
@@ -901,7 +901,7 @@ static void cli_list_trans_done(struct tevent_req *subreq)
 	}
 	param_len = talloc_get_size(state->param);
 
-	if (clistr_is_previous_version_path(state->mask, NULL, NULL, NULL)) {
+	if (clistr_is_previous_version_path(state->mask)) {
 		additional_flags2 = FLAGS2_REPARSE_PATH;
 	}
 


-- 
Samba Shared Repository



More information about the samba-cvs mailing list