From: Corinna Vinschen Date: Thu, 9 Feb 2023 20:47:15 +0000 (+0100) Subject: Cygwin: chmod: don't drop default ACEs from directory ACLs X-Git-Tag: cygwin-3.4.6~1 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=b66979e1523eea3fbcec9b831442881571b83242;p=newlib-cygwin.git Cygwin: chmod: don't drop default ACEs from directory ACLs commit bc444e5aa4ca introduced a call to get_posix_access() with a NULL pointer for the mode_t parameter because the value is not needed later on... entirely ignoring the fact that the mode_t bits are checked for the object being a directory. In turn, the get_posix_access() call never checked for default ACEs and returned only the standard ACEs. Thus, every chmod call on a directory dropped the default ACEs from its permissions, as well as the default NULL deny-ACE used to store specific bits. It got also impossible to set the sgid bit on directories. Fixes: bc444e5aa4ca ("Reapply POSIX ACL changes.") Signed-off-by: Corinna Vinschen --- diff --git a/winsup/cygwin/fhandler/disk_file.cc b/winsup/cygwin/fhandler/disk_file.cc index 6eb466e9c..15dc24ffe 100644 --- a/winsup/cygwin/fhandler/disk_file.cc +++ b/winsup/cygwin/fhandler/disk_file.cc @@ -764,11 +764,12 @@ fhandler_disk_file::fchmod (mode_t mode) aclent_t *aclp; bool standard_acl = false; int nentries, idx; + mode_t attr = pc.isdir () ? S_IFDIR : 0; if (!get_file_sd (get_handle (), pc, sd, false)) { aclp = (aclent_t *) tp.c_get (); - if ((nentries = get_posix_access (sd, NULL, &uid, &gid, + if ((nentries = get_posix_access (sd, &attr, &uid, &gid, aclp, MAX_ACL_ENTRIES, &standard_acl)) >= 0) { diff --git a/winsup/cygwin/release/3.4.6 b/winsup/cygwin/release/3.4.6 index f9288dc79..ccc168a95 100644 --- a/winsup/cygwin/release/3.4.6 +++ b/winsup/cygwin/release/3.4.6 @@ -9,3 +9,6 @@ Addresses: https://cygwin.com/pipermail/cygwin/2023-January/252928.html Create directories with correctly umask-filtered default ACEs. Addresses: https://cygwin.com/pipermail/cygwin/2023-February/253037.html + +Don't accidentally drop the default ACEs when chmod'ing directories. +Addresses: https://cygwin.com/pipermail/cygwin/2023-February/253037.html