mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-19 04:49:25 +08:00
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 <corinna@vinschen.de>
This commit is contained in:
parent
283583c5f2
commit
9afd4c0558
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user