[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