From 6bcc8fd7b1406ec6b5240f1137e0907b28da4f87 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Sun, 7 Jan 2007 12:44:10 +0000 Subject: * security.h (setacl): Add parameter for writability flag. * sec_acl.cc (setacl): Ditto. Set to true if any ACE with write permissions is created. * fhandler_disk_file.cc (fhandler_disk_file::facl): Reset FILE_ATTRIBUTE_READONLY if ACL contains an ACE with write permissions. --- winsup/cygwin/sec_acl.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'winsup/cygwin/sec_acl.cc') diff --git a/winsup/cygwin/sec_acl.cc b/winsup/cygwin/sec_acl.cc index 85f02013c..87c6428fe 100644 --- a/winsup/cygwin/sec_acl.cc +++ b/winsup/cygwin/sec_acl.cc @@ -1,6 +1,6 @@ /* sec_acl.cc: Sun compatible ACL functions. - Copyright 2000, 2001, 2002, 2003, 2004 Red Hat, Inc. + Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. Written by Corinna Vinschen @@ -44,7 +44,8 @@ searchace (__aclent32_t *aclp, int nentries, int type, __uid32_t id = ILLEGAL_UI } int -setacl (HANDLE handle, const char *file, int nentries, __aclent32_t *aclbufp) +setacl (HANDLE handle, const char *file, int nentries, __aclent32_t *aclbufp, + bool &writable) { security_descriptor sd_ret; @@ -108,6 +109,9 @@ setacl (HANDLE handle, const char *file, int nentries, __aclent32_t *aclbufp) __seterrno (); return -1; } + + writable = false; + for (int i = 0; i < nentries; ++i) { DWORD allow; @@ -119,7 +123,10 @@ setacl (HANDLE handle, const char *file, int nentries, __aclent32_t *aclbufp) if (aclbufp[i].a_perm & S_IROTH) allow |= FILE_GENERIC_READ; if (aclbufp[i].a_perm & S_IWOTH) - allow |= STANDARD_RIGHTS_WRITE | FILE_GENERIC_WRITE; + { + allow |= STANDARD_RIGHTS_WRITE | FILE_GENERIC_WRITE; + writable = true; + } if (aclbufp[i].a_perm & S_IXOTH) allow |= FILE_GENERIC_EXECUTE; if ((aclbufp[i].a_perm & (S_IWOTH | S_IXOTH)) == (S_IWOTH | S_IXOTH)) -- cgit v1.2.3