[Patch] dosmode: Compare block devices to detect reparse points

Jeremy Allison jra at samba.org
Tue Dec 4 22:55:04 UTC 2018


On Tue, Dec 04, 2018 at 10:46:13PM +0000, Noel Power wrote:
> > 
> > We set it on MS-DFS links because we handle them the right way
> > in smbd on client query.
> I'll have to look into it but I don't see (like you said) any handling of
> FILE_OPEN_REPARSE_POINT for the tag IO_REPARSE_TAG_DFS So.. not sure which
> MS-DFS client queries you mean (but I know practically nothing about DFS)

Well you can't query IO_REPARSE_TAG_DFS over the network. Once it
hits an MS-DFS reparse point it returns the required error on
processing the pathname inside smbd - that's what I mean by
MS-DFS client queries :-).

> well we could handle FILE_OPEN_REPARSE_POINT at least for mountpoints (only
> if we have a config option for it set) iirc when opening a reparse point you
> just need to return the tag associated with the reparse point (in this case
> IO_REPARSE_TAG_MOUNT_POINT) if and only if the file

No, it's much nastier than that. Reparse points have a hideously
complex set of requirements (you can mkdir, turn into a reparse
point, open it, remove the reparse tag, turn it back into a directory
etc. etc. etc.). And that's just for directories. The same thing
happens for files. Plus if we transit a reparse point that's stored
on a directory in pathname processing we won't notice.

Once we start returning FILE_ATTRIBUTE_REPARSE_POINT we've opened
a hideous can of worms. That's why in my POSIX tree I restrict
allowing reparse points to zero-length files only, no directories,
on a POSIX open handle only.

You're planning to gung-ho add FILE_ATTRIBUTE_REPARSE_POINT to
a directory DOS attribute value. That's my nightmare :-). It
has *meaning* to a whole host of Windows apps you're not at
all prepared to cope with.

What will backup apps start to do then ? It's likely all
backup apps will now start failing against Samba servers
once they cross a mount point (hey, why can't I read the
reparse point data to backup - you told me it was a reparse
point ?).

> The client could only then get/set/delete the reparse point (but support for
> these is afaics optional) We probably really don't want a client to be able
> to create/delete/change an existing mount point on linux, it's possible but
> would we really want to do it ? For the get reparse point operation we could
> return some data (but that data probably would be useless to the client) So
> it's debatably how useful implementing anything other than a stub that
> returns STATUS_INVALID_DEVICE_REQUEST would be

If you start returning FILE_ATTRIBUTE_REPARSE_POINT on a directory,
you're promising a million things we're not prepared to support.

Don't do that.

Jeremy.



More information about the samba-technical mailing list