OSDN Git Service

* fhandler_disk_file.cc (fhandler_disk_file::facl): If file can't be
authorcorinna <corinna>
Mon, 30 Jul 2007 10:58:16 +0000 (10:58 +0000)
committercorinna <corinna>
Mon, 30 Jul 2007 10:58:16 +0000 (10:58 +0000)
opened for reading the ACLs, fall back to faking them.
* sec_acl.cc (acl_worker): Handle non-existing files.
* security.cc (get_file_attribute): Return ILLEGAL_UID/ILLEGAL_GID
as owner/group for non-readable ACLs on file systems supporting them.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_disk_file.cc
winsup/cygwin/sec_acl.cc
winsup/cygwin/security.cc

index 85f3303..9235005 100644 (file)
@@ -1,5 +1,13 @@
 2007-07-30  Corinna Vinschen  <corinna@vinschen.de>
 
+       * fhandler_disk_file.cc (fhandler_disk_file::facl): If file can't be
+       opened for reading the ACLs, fall back to faking them.
+       * sec_acl.cc (acl_worker): Handle non-existing files.
+       * security.cc (get_file_attribute): Return ILLEGAL_UID/ILLEGAL_GID
+       as owner/group for non-readable ACLs on file systems supporting them.
+
+2007-07-30  Corinna Vinschen  <corinna@vinschen.de>
+
        * syscalls.cc (stat_worker): Don't call build_fh_pc with invalid pc.
 
 2007-07-29  Christopher Faylor  <me+cygwin@cgf.cx>
index 46b178f..a5a7c4b 100644 (file)
@@ -841,6 +841,7 @@ fhandler_disk_file::facl (int cmd, int nentries, __aclent32_t *aclbufp)
 
   if (!pc.has_acls () || !allow_ntsec)
     {
+cant_access_acl:
       switch (cmd)
        {
          struct __stat64 st;
@@ -895,9 +896,13 @@ fhandler_disk_file::facl (int cmd, int nentries, __aclent32_t *aclbufp)
     {
       if (!get_handle ())
        {
-         query_open (cmd == SETACL ? query_write_control : query_read_attributes);
+         query_open (cmd == SETACL ? query_write_control : query_read_control);
          if (!(oret = open (O_BINARY, 0)))
-           return -1;
+           {
+             if (cmd == GETACL || cmd == GETACLCNT)
+               goto cant_access_acl;
+             return -1;
+           }
        }
       switch (cmd)
        {
index 54d443b..a0c248f 100644 (file)
@@ -407,6 +407,8 @@ acl_worker (const char *path, int cmd, int nentries, __aclent32_t *aclbufp,
       debug_printf ("got %d error from build_fh_name", fh->error ());
       set_errno (fh->error ());
     }
+  else if (!fh->exists ())
+    set_errno (ENOENT);
   else
     res = fh->facl (cmd, nentries, aclbufp);
 
index 5740446..daf2861 100644 (file)
@@ -336,6 +336,15 @@ get_file_attribute (HANDLE handle, path_conv &pc,
          get_info_from_sd (sd, attribute, uidret, gidret);
          return 0;
        }
+      else
+        {
+         if (uidret)
+           *uidret = ILLEGAL_UID;
+         if (gidret)
+           *gidret = ILLEGAL_GID;
+
+         return -1;
+       }
     }
 
   if (uidret)