[PATCH] smbd: Fix snapshot query on shares with DFS enabled
Christof Schmitt
cs at samba.org
Mon Aug 15 23:25:10 UTC 2016
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
Christof
>
> > Signed-off-by: Christof Schmitt <cs at samba.org>
> > ---
> > source3/smbd/smb2_create.c | 6 +++---
> > 1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
> > index 4c1b81d..75da8a1 100644
> > --- a/source3/smbd/smb2_create.c
> > +++ b/source3/smbd/smb2_create.c
> > @@ -913,14 +913,14 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
> >
> > TALLOC_FREE(fname);
> > fname = talloc_asprintf(state,
> > - "@GMT-%04u.%02u.%02u-%02u.%02u.%02u\\%s",
> > + "%s\\@GMT-%04u.%02u.%02u-%02u.%02u.%02u",
> > + in_name,
> > tm->tm_year + 1900,
> > tm->tm_mon + 1,
> > tm->tm_mday,
> > tm->tm_hour,
> > tm->tm_min,
> > - tm->tm_sec,
> > - in_name);
> > + tm->tm_sec);
> > if (tevent_req_nomem(fname, req)) {
> > return tevent_req_post(req, ev);
> > }
> > --
> > 1.8.3.1
> >
More information about the samba-technical
mailing list