[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