acl-util.c revision b1d4f8e154bf61b5de1b27461ef8e9c8c5e838a1
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster This file is part of systemd.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Copyright 2011,2013 Lennart Poettering
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster systemd is free software; you can redistribute it and/or modify it
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster under the terms of the GNU Lesser General Public License as published by
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster the Free Software Foundation; either version 2.1 of the License, or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster (at your option) any later version.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster systemd is distributed in the hope that it will be useful, but
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster WITHOUT ANY WARRANTY; without even the implied warranty of
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Lesser General Public License for more details.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster You should have received a copy of the GNU Lesser General Public License
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster along with systemd; If not, see <http://www.gnu.org/licenses/>.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterint acl_find_uid(acl_t acl, uid_t uid, acl_entry_t *entry) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (r = acl_get_entry(acl, ACL_FIRST_ENTRY, &i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (r = acl_get_entry(*acl_p, ACL_FIRST_ENTRY, &i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster r = acl_get_entry(*acl_p, ACL_NEXT_ENTRY, &i)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterint add_base_acls_if_needed(acl_t *acl_p, const char *path) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster bool have_user_obj = false, have_group_obj = false, have_other = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (r = acl_get_entry(*acl_p, ACL_FIRST_ENTRY, &i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster r = acl_get_entry(*acl_p, ACL_NEXT_ENTRY, &i)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (have_user_obj && have_group_obj && have_other)
if (!basic)
return -errno;
return -errno;
return -errno;
return -errno;
return -errno;
bool ret = false;
if (!acl)
return -errno;
return -errno;
return -errno;
goto next;
if (!gid)
return -errno;
if (!ret_groups)
ret = true;
if (ret_groups) {
char *name;
if (!name)
return -ENOMEM;
next:
if (ret_groups) {
*ret_groups = g;
g = NULL;
return ret;
char **entry;
int r = -EINVAL;
if (!split)
return -ENOMEM;
r = strv_push(&d, p);
if (!strv_isempty(a)) {
if (!join)
return -ENOMEM;
if (!a_acl)
return -errno;
if (want_mask) {
if (!strv_isempty(d)) {
if (!join)
return -ENOMEM;
if (!d_acl)
return -errno;
if (want_mask) {
return -errno;
return -errno;
switch (tag_a) {
case ACL_USER_OBJ:
case ACL_GROUP_OBJ:
case ACL_MASK:
case ACL_OTHER:
case ACL_USER: {
if (!uid_a)
return -errno;
if (!uid_b)
return -errno;
case ACL_GROUP: {
if (!gid_a)
return -errno;
if (!gid_b)
return -errno;
acl_entry_t i;
*out = i;
return -errno;
acl_entry_t i;
if (!old)
return -errno;
acl_entry_t j;
return -errno;
if (acl_copy_entry(j, i) < 0)
return -errno;
return -errno;