* fhandler_disk_file.cc (fhandler_base::fstat_helper): Don't remove

write bits for directories with R/O attribute.
	(fhandler_base::fhaccess): Don't shortcircuit R/O attribute with W_OK
	scenarios for directories.
This commit is contained in:
Corinna Vinschen 2007-10-30 12:32:16 +00:00
parent 2b50cd503e
commit 101f07b907
3 changed files with 11 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2007-10-30 Corinna Vinschen <corinna@vinschen.de>
* fhandler_disk_file.cc (fhandler_base::fstat_helper): Don't remove
write bits for directories with R/O attribute.
(fhandler_base::fhaccess): Don't shortcircuit R/O attribute with W_OK
scenarios for directories.
2007-10-22 Corinna Vinschen <corinna@vinschen.de> 2007-10-22 Corinna Vinschen <corinna@vinschen.de>
* cygheap.h (struct cwdstuff): Drop hash member. Drop get_hash, * cygheap.h (struct cwdstuff): Drop hash member. Drop get_hash,

View File

@ -376,7 +376,8 @@ fhandler_base::fhaccess (int flags)
if (is_fs_special ()) if (is_fs_special ())
/* short circuit */; /* short circuit */;
else if (has_attribute (FILE_ATTRIBUTE_READONLY) && (flags & W_OK)) else if (has_attribute (FILE_ATTRIBUTE_READONLY) && (flags & W_OK)
&& !pc.isdir ())
goto eaccess_done; goto eaccess_done;
else if (has_acls () && allow_ntsec) else if (has_acls () && allow_ntsec)
{ {

View File

@ -535,7 +535,7 @@ fhandler_base::fstat_helper (struct __stat64 *buf,
{ {
/* If read-only attribute is set, modify ntsec return value */ /* If read-only attribute is set, modify ntsec return value */
if (::has_attribute (dwFileAttributes, FILE_ATTRIBUTE_READONLY) if (::has_attribute (dwFileAttributes, FILE_ATTRIBUTE_READONLY)
&& !pc.issymlink ()) && !pc.isdir () && !pc.issymlink ())
buf->st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH); buf->st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
if (buf->st_mode & S_IFMT) if (buf->st_mode & S_IFMT)
@ -554,7 +554,7 @@ fhandler_base::fstat_helper (struct __stat64 *buf,
buf->st_mode |= STD_RBITS; buf->st_mode |= STD_RBITS;
if (!::has_attribute (dwFileAttributes, FILE_ATTRIBUTE_READONLY) if (!::has_attribute (dwFileAttributes, FILE_ATTRIBUTE_READONLY)
&& !pc.issymlink ()) && !pc.isdir () && !pc.issymlink ())
buf->st_mode |= STD_WBITS; buf->st_mode |= STD_WBITS;
/* | S_IWGRP | S_IWOTH; we don't give write to group etc */ /* | S_IWGRP | S_IWOTH; we don't give write to group etc */