From 9afd4c055814ddcb51ba9cc0e99250e5ded852cf Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Thu, 9 Feb 2023 21:47:15 +0100 Subject: [PATCH] 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 --- winsup/cygwin/fhandler/disk_file.cc | 3 ++- winsup/cygwin/release/3.4.6 | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) 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