* fhandler.cc (fhandler_base::open): Open native symlinks with
FILE_OPEN_REPARSE_POINT flag. Fix typo in comment.
This commit is contained in:
parent
5b69737250
commit
f3257492c4
|
@ -1,3 +1,8 @@
|
|||
2007-10-18 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler.cc (fhandler_base::open): Open native symlinks with
|
||||
FILE_OPEN_REPARSE_POINT flag. Fix typo in comment.
|
||||
|
||||
2007-10-18 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* include/sys/param.h (MAXPATHLEN): Define as PATH_MAX.
|
||||
|
|
|
@ -542,7 +542,14 @@ fhandler_base::open (int flags, mode_t mode)
|
|||
if ((flags & O_EXCL) && (flags & O_CREAT))
|
||||
create_disposition = FILE_CREATE;
|
||||
|
||||
if (flags & O_CREAT && get_device () == FH_FS)
|
||||
if (get_device () == FH_FS)
|
||||
{
|
||||
/* Add the reparse point flag to native symlinks, otherwise we open the
|
||||
target, not the symlink. This would break lstat. */
|
||||
if (pc.is_rep_symlink ())
|
||||
create_options |= FILE_OPEN_REPARSE_POINT;
|
||||
|
||||
if (flags & O_CREAT)
|
||||
{
|
||||
file_attributes = FILE_ATTRIBUTE_NORMAL;
|
||||
/* If mode has no write bits set, we set the R/O attribute. */
|
||||
|
@ -564,7 +571,7 @@ fhandler_base::open (int flags, mode_t mode)
|
|||
but the actual owner on the Samba share is the SID of the Unix
|
||||
account. There's no transparent mapping between these accounts.
|
||||
And Samba has a strange behaviour when creating a file. Apparently
|
||||
it *first*( creates the file, *then* it looks if the security
|
||||
it *first* creates the file, *then* it looks if the security
|
||||
descriptor matches. The result is that the file gets created, but
|
||||
then NtCreateFile doesn't return a handle to the file and fails
|
||||
with STATUS_ACCESS_DENIED. Go figure! */
|
||||
|
@ -576,6 +583,7 @@ fhandler_base::open (int flags, mode_t mode)
|
|||
/* The file attributes are needed for later use in, e.g. fchmod. */
|
||||
pc.file_attributes (file_attributes);
|
||||
}
|
||||
}
|
||||
|
||||
status = NtCreateFile (&x, access, &attr, &io, NULL, file_attributes, shared,
|
||||
create_disposition, create_options, NULL, 0);
|
||||
|
|
Loading…
Reference in New Issue