acl_entry.c revision 192586
174667Sjedgar/*
290781Sjedgar * Copyright (c) 2001-2002 Chris D. Faulhaber
374667Sjedgar * All rights reserved.
474667Sjedgar *
574667Sjedgar * Redistribution and use in source and binary forms, with or without
674667Sjedgar * modification, are permitted provided that the following conditions
774667Sjedgar * are met:
874667Sjedgar * 1. Redistributions of source code must retain the above copyright
974667Sjedgar *    notice, this list of conditions and the following disclaimer.
1074667Sjedgar * 2. Redistributions in binary form must reproduce the above copyright
1174667Sjedgar *    notice, this list of conditions and the following disclaimer in the
1274667Sjedgar *    documentation and/or other materials provided with the distribution.
1374667Sjedgar *
1474667Sjedgar * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1574667Sjedgar * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1674667Sjedgar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1774667Sjedgar * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1874667Sjedgar * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1974667Sjedgar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2074667Sjedgar * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2174667Sjedgar * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2274667Sjedgar * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2374667Sjedgar * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2474667Sjedgar * SUCH DAMAGE.
2574667Sjedgar */
2674667Sjedgar
2792986Sobrien#include <sys/cdefs.h>
2892986Sobrien__FBSDID("$FreeBSD: head/lib/libc/posix1e/acl_entry.c 192586 2009-05-22 15:56:43Z trasz $");
2992986Sobrien
3074667Sjedgar#include <sys/types.h>
3175185Stmm#include "namespace.h"
3274667Sjedgar#include <sys/acl.h>
3375185Stmm#include "un-namespace.h"
3474667Sjedgar
3574667Sjedgar#include <errno.h>
3674667Sjedgar#include <stdlib.h>
3774667Sjedgar
3875928Sjedgar/*
3975928Sjedgar * acl_create_entry() (23.4.7): create a new ACL entry in the ACL pointed
4075928Sjedgar * to by acl_p.
4175928Sjedgar */
4274667Sjedgarint
4374667Sjedgaracl_create_entry(acl_t *acl_p, acl_entry_t *entry_p)
4474667Sjedgar{
4575928Sjedgar	struct acl *acl_int;
4674667Sjedgar
4790781Sjedgar	if (acl_p == NULL) {
4874667Sjedgar		errno = EINVAL;
4990781Sjedgar		return (-1);
5074667Sjedgar	}
5174667Sjedgar
5275928Sjedgar	acl_int = &(*acl_p)->ats_acl;
5374667Sjedgar
5475928Sjedgar	if ((acl_int->acl_cnt >= ACL_MAX_ENTRIES) || (acl_int->acl_cnt < 0)) {
5575928Sjedgar		errno = EINVAL;
5690781Sjedgar		return (-1);
5775928Sjedgar	}
5874667Sjedgar
5975928Sjedgar	*entry_p = &acl_int->acl_entry[acl_int->acl_cnt++];
6075928Sjedgar
6174667Sjedgar	(**entry_p).ae_tag  = ACL_UNDEFINED_TAG;
6274667Sjedgar	(**entry_p).ae_id   = ACL_UNDEFINED_ID;
6374667Sjedgar	(**entry_p).ae_perm = ACL_PERM_NONE;
64192586Strasz	(**entry_p).ae_entry_type = 0;
65192586Strasz	(**entry_p).ae_flags = 0;
6674667Sjedgar
6775928Sjedgar	(*acl_p)->ats_cur_entry = 0;
6875928Sjedgar
6990781Sjedgar	return (0);
7074667Sjedgar}
7174667Sjedgar
7275928Sjedgar/*
7375928Sjedgar * acl_get_entry() (23.4.14): returns an ACL entry from an ACL
7475928Sjedgar * indicated by entry_id.
7575928Sjedgar */
7674667Sjedgarint
7774667Sjedgaracl_get_entry(acl_t acl, int entry_id, acl_entry_t *entry_p)
7874667Sjedgar{
7975928Sjedgar	struct acl *acl_int;
8074667Sjedgar
8190781Sjedgar	if (acl == NULL) {
8275928Sjedgar		errno = EINVAL;
8390781Sjedgar		return (-1);
8475928Sjedgar	}
8575928Sjedgar	acl_int = &acl->ats_acl;
8675928Sjedgar
8775928Sjedgar	switch(entry_id) {
8875928Sjedgar	case ACL_FIRST_ENTRY:
8975928Sjedgar		acl->ats_cur_entry = 0;
9075928Sjedgar		/* PASSTHROUGH */
9175928Sjedgar	case ACL_NEXT_ENTRY:
9275928Sjedgar		if (acl->ats_cur_entry >= acl->ats_acl.acl_cnt)
9375928Sjedgar			return 0;
9475928Sjedgar		*entry_p = &acl_int->acl_entry[acl->ats_cur_entry++];
9590781Sjedgar		return (1);
9675928Sjedgar	}
9775928Sjedgar
9875928Sjedgar	errno = EINVAL;
9990781Sjedgar	return (-1);
10074667Sjedgar}
101