1678
1679 /*
1680 * ace_trivial:
1681 * determine whether an ace_t acl is trivial
1682 *
1683 * Trivialness implies that the acl is composed of only
1684 * owner, group, everyone entries. ACL can't
1685 * have read_acl denied, and write_owner/write_acl/write_attributes
1686 * can only be owner@ entry.
1687 */
1688 int
1689 ace_trivial_common(void *acep, int aclcnt,
1690 uint64_t (*walk)(void *, uint64_t, int aclcnt,
1691 uint16_t *, uint16_t *, uint32_t *))
1692 {
1693 uint16_t flags;
1694 uint32_t mask;
1695 uint16_t type;
1696 uint64_t cookie = 0;
1697
1698 while (cookie = walk(acep, cookie, aclcnt, &flags, &type, &mask)) {
1699 switch (flags & ACE_TYPE_FLAGS) {
1700 case ACE_OWNER:
1701 case ACE_GROUP|ACE_IDENTIFIER_GROUP:
1702 case ACE_EVERYONE:
1703 break;
1704 default:
1705 return (1);
1706
1707 }
1708
1709 if (flags & (ACE_FILE_INHERIT_ACE|
1710 ACE_DIRECTORY_INHERIT_ACE|ACE_NO_PROPAGATE_INHERIT_ACE|
1711 ACE_INHERIT_ONLY_ACE))
1712 return (1);
1713
1714 /*
1715 * Special check for some special bits
1716 *
1717 * Don't allow anybody to deny reading basic
1718 * attributes or a files ACL.
|
1678
1679 /*
1680 * ace_trivial:
1681 * determine whether an ace_t acl is trivial
1682 *
1683 * Trivialness implies that the acl is composed of only
1684 * owner, group, everyone entries. ACL can't
1685 * have read_acl denied, and write_owner/write_acl/write_attributes
1686 * can only be owner@ entry.
1687 */
1688 int
1689 ace_trivial_common(void *acep, int aclcnt,
1690 uint64_t (*walk)(void *, uint64_t, int aclcnt,
1691 uint16_t *, uint16_t *, uint32_t *))
1692 {
1693 uint16_t flags;
1694 uint32_t mask;
1695 uint16_t type;
1696 uint64_t cookie = 0;
1697
1698 while ((cookie = walk(acep, cookie, aclcnt, &flags, &type, &mask))
1699 != NULL) {
1700 switch (flags & ACE_TYPE_FLAGS) {
1701 case ACE_OWNER:
1702 case ACE_GROUP|ACE_IDENTIFIER_GROUP:
1703 case ACE_EVERYONE:
1704 break;
1705 default:
1706 return (1);
1707
1708 }
1709
1710 if (flags & (ACE_FILE_INHERIT_ACE|
1711 ACE_DIRECTORY_INHERIT_ACE|ACE_NO_PROPAGATE_INHERIT_ACE|
1712 ACE_INHERIT_ONLY_ACE))
1713 return (1);
1714
1715 /*
1716 * Special check for some special bits
1717 *
1718 * Don't allow anybody to deny reading basic
1719 * attributes or a files ACL.
|