diff options
-rw-r--r-- | selftest/knownfail.d/shadow_depot | 1 | ||||
-rw-r--r-- | source3/modules/vfs_shadow_copy2.c | 25 |
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); |