diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2015-12-24 00:48:20 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2015-12-24 00:48:20 +0100 |
commit | ed3c07215c35ea2a3ebd2f830095bd86fc9b9408 (patch) | |
tree | 077b738a63f63797b2e94ea31a97e205255a62ba /winsup/cygwin/sec_acl.cc | |
parent | 7a1ac642f6b9506d781c64a61e393c252b559a08 (diff) | |
download | cygnal-ed3c07215c35ea2a3ebd2f830095bd86fc9b9408.tar.gz cygnal-ed3c07215c35ea2a3ebd2f830095bd86fc9b9408.tar.bz2 cygnal-ed3c07215c35ea2a3ebd2f830095bd86fc9b9408.zip |
aclsort: Honor calclass argument and allow recalculating ACL mask.
* sec_acl.cc (__aclcalcmask): New function to recalculate ACL masks.
(aclsort32): Honor calclass argument.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/sec_acl.cc')
-rw-r--r-- | winsup/cygwin/sec_acl.cc | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/winsup/cygwin/sec_acl.cc b/winsup/cygwin/sec_acl.cc index 614bc50a5..63257ffcf 100644 --- a/winsup/cygwin/sec_acl.cc +++ b/winsup/cygwin/sec_acl.cc @@ -1295,6 +1295,24 @@ aclcheck32 (aclent_t *aclbufp, int nentries, int *which) return 0; } +void +__aclcalcmask (aclent_t *aclbufp, int nentries) +{ + acl_perm_t mask = 0; + int mask_idx = -1; + + for (int idx = 0; idx < nentries; ++idx) + { + if (aclbufp[idx].a_type == CLASS_OBJ) + mask_idx = idx; + else if (aclbufp[idx].a_type + & (USER | GROUP_OBJ | GROUP)) + mask |= aclbufp[idx].a_perm; + } + if (mask_idx != -1) + aclbufp[mask_idx].a_perm = mask; +} + static int acecmp (const void *a1, const void *a2) { @@ -1307,7 +1325,7 @@ acecmp (const void *a1, const void *a2) } extern "C" int -aclsort32 (int nentries, int, aclent_t *aclbufp) +aclsort32 (int nentries, int calclass, aclent_t *aclbufp) { if (aclcheck32 (aclbufp, nentries, NULL)) { @@ -1320,6 +1338,8 @@ aclsort32 (int nentries, int, aclent_t *aclbufp) return -1; } qsort ((void *) aclbufp, nentries, sizeof (aclent_t), acecmp); + if (calclass) + __aclcalcmask (aclbufp, nentries); return 0; } |