[PATCH] smbd: Fix snapshot query on shares with DFS enabled
Christof Schmitt
cs at samba.org
Tue Aug 16 22:39:44 UTC 2016
On Tue, Aug 16, 2016 at 09:59:35AM -0700, Jeremy Allison wrote:
> On Mon, Aug 15, 2016 at 04:25:10PM -0700, Christof Schmitt wrote:
> > On Fri, Aug 12, 2016 at 04:51:35PM -0700, Jeremy Allison wrote:
> > > On Fri, Aug 12, 2016 at 03:59:27PM -0700, Christof Schmitt wrote:
> > > > From 3a33435fc3d61605c75ed3f3b87612fbe729b553 Mon Sep 17 00:00:00 2001
> > > > From: Christof Schmitt <cs at samba.org>
> > > > Date: Fri, 12 Aug 2016 14:59:07 -0700
> > > > Subject: [PATCH] smbd: Fix snapshot query on shares with DFS enabled
> > > >
> > > > When DFS is enabled (host msdfs = yes and msdfs root = yes), then SMB
> > > > clients send create requests in the format \hostname\service\path.
> > > > Putting the GMT tag as first element breaks the DFS parsing and results
> > > > in OBJECT_NOT_FOUND for snapshotted files. Fix this by appending the
> > > > GMT tag to the end of the path.
> > >
> > > Great catch ! Pushed with additional comment:
> > >
> > > BUG: https://bugzilla.samba.org/show_bug.cgi?id=12150
> > >
> > > as we're going to need this backported.
> >
> > I just came across one more thing: The test is on a system with the
> > shadowcopy2 module enabled. While the patches fixes the problem for
> > directories, there seems to be an issue when a SMB client is explicitly
> > asking for older versions of a file. It looks like shadowcopy leaves a
> > trailing slash from the GMT tag removal:
> >
> > (test is a file, not a directory)
> >
> > [2016/08/15 16:12:36.178799, 10, pid=13125, effective(12000500, 12000513), real(12000500, 0)] ../source3/modules/vfs_shadow_copy2.c:245(shadow_copy2_strip_snapshot)
> > ../source3/modules/vfs_shadow_copy2.c:245: enter path 'test/@GMT-2016.08.12-19.56.11'
> > [2016/08/15 16:12:36.178814, 10, pid=13125, effective(12000500, 12000513), real(12000500, 0)] ../source3/modules/vfs_shadow_copy2.c:462(shadow_copy2_do_convert)
> > converting 'test/'
> > [2016/08/15 16:12:36.178837, 10, pid=13125, effective(12000500, 12000513), real(12000500, 0)] ../source3/modules/vfs_shadow_copy2.c:604(shadow_copy2_do_convert)
> > Trying[snapdirseverywhere] /fs1/smbexport1/test/.snapshots/@GMT-2016.08.12-19.56.11/: -1 (Not a directory)
> > [2016/08/15 16:12:36.178860, 10, pid=13125, effective(12000500, 12000513), real(12000500, 0)] ../source3/modules/vfs_shadow_copy2.c:604(shadow_copy2_do_convert)
> > Trying[snapdirseverywhere] /fs1/smbexport1/.snapshots/@GMT-2016.08.12-19.56.11/test/: -1 (No such file or directory)
> > [2016/08/15 16:12:36.178886, 10, pid=13125, effective(12000500, 12000513), real(12000500, 0)] ../source3/modules/vfs_shadow_copy2.c:604(shadow_copy2_do_convert)
> > Trying[snapdirseverywhere] /fs1/.snapshots/@GMT-2016.08.12-19.56.11/smbexport1/test/: -1 (Not a directory)
> >
> > I will try to take a closer look tomorrow, maybe that can be easily
> > handled in the shadowcopy2 module. The backport should probably wait
> > until this is resolved
>
> I think this should fix it - can you test ?
Yes, this works.
Reviewed-by: Christof Schmitt <cs at samba.org>
>
> I'll work on a regression test now.
>
> Thanks,
>
> Jeremy.
> From 3b54af0e18172e4b3aae294df0edfe97e572a480 Mon Sep 17 00:00:00 2001
> From: Jeremy Allison <jra at samba.org>
> Date: Tue, 16 Aug 2016 09:41:43 -0700
> Subject: [PATCH 1/2] s3: vfs: shadow_copy2: Re-use an existing variable
> already set to the right value (p - name).
>
> BUG: https://bugzilla.samba.org/show_bug.cgi?id=12150
>
> Signed-off-by: Jeremy Allison <jra at samba.org>
> ---
> source3/modules/vfs_shadow_copy2.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c
> index bda934e..b1aae1e 100644
> --- a/source3/modules/vfs_shadow_copy2.c
> +++ b/source3/modules/vfs_shadow_copy2.c
> @@ -486,7 +486,8 @@ static bool shadow_copy2_strip_snapshot(TALLOC_CTX *mem_ctx,
> * with a path prefix.
> */
> if (pstripped != NULL) {
> - stripped = talloc_strndup(mem_ctx, name, p - name);
> + stripped = talloc_strndup(mem_ctx, name,
> + len_before_gmt);
> if (stripped == NULL) {
> return false;
> }
> --
> 2.8.0.rc3.226.g39d4020
>
>
> From 3b14aa977d069479ceadd912ca4c109887849f20 Mon Sep 17 00:00:00 2001
> From: Jeremy Allison <jra at samba.org>
> Date: Tue, 16 Aug 2016 09:43:37 -0700
> Subject: [PATCH 2/2] s3: vfs: shadow_copy2. Remove any trailing slash when
> stripping @GMT-YYYY... from the end of a path.
>
> BUG: https://bugzilla.samba.org/show_bug.cgi?id=12150
>
> Signed-off-by: Jeremy Allison <jra at samba.org>
> ---
> source3/modules/vfs_shadow_copy2.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c
> index b1aae1e..4ac16d3 100644
> --- a/source3/modules/vfs_shadow_copy2.c
> +++ b/source3/modules/vfs_shadow_copy2.c
> @@ -486,6 +486,13 @@ static bool shadow_copy2_strip_snapshot(TALLOC_CTX *mem_ctx,
> * with a path prefix.
> */
> if (pstripped != NULL) {
> + if (len_before_gmt > 0) {
> + /*
> + * There is a slash before
> + * the @GMT-. Remove it.
> + */
> + len_before_gmt -= 1;
> + }
> stripped = talloc_strndup(mem_ctx, name,
> len_before_gmt);
> if (stripped == NULL) {
> --
> 2.8.0.rc3.226.g39d4020
>
More information about the samba-technical
mailing list