summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2023-04-14 17:22:18 +0200
committerJule Anger <janger@samba.org>2023-04-18 19:06:55 +0000
commit10ec0699aedd59e2ed957ecfeb96075ab9f66345 (patch)
treeb058b589839bf3b6cd13a34f352b52debd926583
parenta377bd611023ad75046e697804126b78e923d62b (diff)
downloadsamba-10ec0699aedd59e2ed957ecfeb96075ab9f66345.tar.gz
shadow_copy2: Fix stream open for streams_depot paths
streams_depot hands us absolute paths with : filename components instead of having set smb_fname_in->stream_name. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15358 Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Mon Apr 17 18:11:07 UTC 2023 on atb-devel-224 (cherry picked from commit 526f381f413d1cb5cde93b9542034f5ebfcfcc10) Autobuild-User(v4-18-test): Jule Anger <janger@samba.org> Autobuild-Date(v4-18-test): Tue Apr 18 19:06:55 UTC 2023 on atb-devel-224
-rw-r--r--selftest/knownfail.d/shadow_depot1
-rw-r--r--source3/modules/vfs_shadow_copy2.c25
2 files changed, 16 insertions, 10 deletions
diff --git a/selftest/knownfail.d/shadow_depot b/selftest/knownfail.d/shadow_depot
deleted file mode 100644
index 0dbf553a9ef..00000000000
--- a/selftest/knownfail.d/shadow_depot
+++ /dev/null
@@ -1 +0,0 @@
-^samba.tests.libsmb-basic.samba.tests.libsmb-basic.LibsmbTestCase.test_libsmb_shadow_depot\(fileserver_smb1\)
diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c
index 16e39c2f070..a2c9d3ce4c9 100644
--- a/source3/modules/vfs_shadow_copy2.c
+++ b/source3/modules/vfs_shadow_copy2.c
@@ -1522,15 +1522,22 @@ static struct smb_filename *shadow_copy2_openat_name(
if (fsp->base_fsp != NULL) {
struct smb_filename *base_fname = fsp->base_fsp->fsp_name;
- SMB_ASSERT(is_named_stream(smb_fname_in));
-
- result = synthetic_smb_fname(
- mem_ctx,
- base_fname->base_name,
- smb_fname_in->stream_name,
- &smb_fname_in->st,
- smb_fname_in->twrp,
- smb_fname_in->flags);
+ if (smb_fname_in->base_name[0] == '/') {
+ /*
+ * Special-case stream names from streams_depot
+ */
+ result = cp_smb_filename(mem_ctx, smb_fname_in);
+ } else {
+
+ SMB_ASSERT(is_named_stream(smb_fname_in));
+
+ result = synthetic_smb_fname(mem_ctx,
+ base_fname->base_name,
+ smb_fname_in->stream_name,
+ &smb_fname_in->st,
+ smb_fname_in->twrp,
+ smb_fname_in->flags);
+ }
} else {
result = full_path_from_dirfsp_atname(
mem_ctx, dirfsp, smb_fname_in);