OSDN Git Service

* fhandler_disk_file.cc (fhandler_base::fstat_helper): Drop all "other"
authorcorinna <corinna>
Sun, 8 Nov 2009 19:22:28 +0000 (19:22 +0000)
committercorinna <corinna>
Sun, 8 Nov 2009 19:22:28 +0000 (19:22 +0000)
permissions from st_mode, if the reading the file's security descriptor
failed.  Explain why.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_disk_file.cc

index 703a3ee..02e6166 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-08  Corinna Vinschen  <corinna@vinschen.de>
+
+       * fhandler_disk_file.cc (fhandler_base::fstat_helper): Drop all "other"
+       permissions from st_mode, if the reading the file's security descriptor
+       failed.  Explain why.
+
 2009-11-06  Corinna Vinschen  <corinna@vinschen.de>
 
        * globals.cc (ro_u_scr): New R/O unicode string.
index 44e03d3..e570004 100644 (file)
@@ -670,6 +670,12 @@ fhandler_base::fstat_helper (struct __stat64 *buf,
 
       /* This fakes the permissions of all files to match the current umask. */
       buf->st_mode &= ~(cygheap->umask);
+      /* If the FS supports ACLs, we're here because we couldn't even open
+        the file for READ_CONTROL access.  Chances are high that the file's
+        security descriptor has no ACE for "Everyone", so we should not fake
+        any access for "others". */
+      if (has_acls ())
+       buf->st_mode &= ~(S_IROTH | S_IWOTH | S_IXOTH);
     }
 
  done: