acl_init.c revision 192586
1191783Srmacklem/*-
2191783Srmacklem * Copyright (c) 1999, 2000, 2001 Robert N. M. Watson
3191783Srmacklem * All rights reserved.
4191783Srmacklem *
5191783Srmacklem * Redistribution and use in source and binary forms, with or without
6191783Srmacklem * modification, are permitted provided that the following conditions
7191783Srmacklem * are met:
8191783Srmacklem * 1. Redistributions of source code must retain the above copyright
9191783Srmacklem *    notice, this list of conditions and the following disclaimer.
10191783Srmacklem * 2. Redistributions in binary form must reproduce the above copyright
11191783Srmacklem *    notice, this list of conditions and the following disclaimer in the
12191783Srmacklem *    documentation and/or other materials provided with the distribution.
13191783Srmacklem *
14191783Srmacklem * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15191783Srmacklem * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16191783Srmacklem * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17191783Srmacklem * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18191783Srmacklem * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19191783Srmacklem * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20191783Srmacklem * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21191783Srmacklem * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22191783Srmacklem * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23191783Srmacklem * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24191783Srmacklem * SUCH DAMAGE.
25191783Srmacklem */
26191783Srmacklem/*
27191783Srmacklem * acl_init -- return a fresh acl structure
28191783Srmacklem * acl_dup -- duplicate an acl and return the new copy
29191783Srmacklem */
30191783Srmacklem
31191783Srmacklem#include <sys/cdefs.h>
32191783Srmacklem__FBSDID("$FreeBSD: head/lib/libc/posix1e/acl_init.c 192586 2009-05-22 15:56:43Z trasz $");
33191783Srmacklem
34191783Srmacklem#include <sys/types.h>
35191783Srmacklem#include "namespace.h"
36191783Srmacklem#include <sys/acl.h>
37224778Srwatson#include "un-namespace.h"
38224778Srwatson#include <errno.h>
39191783Srmacklem#include <stdlib.h>
40191783Srmacklem#include <string.h>
41191783Srmacklem
42191783Srmacklemacl_t
43191783Srmacklemacl_init(int count)
44191783Srmacklem{
45191783Srmacklem	acl_t acl;
46214255Srmacklem
47191783Srmacklem	if (count > ACL_MAX_ENTRIES) {
48192503Srmacklem		errno = ENOMEM;
49192503Srmacklem		return (NULL);
50191783Srmacklem	}
51219028Snetchild	if (count < 0) {
52219028Snetchild		errno = EINVAL;
53191783Srmacklem		return (NULL);
54191783Srmacklem	}
55191783Srmacklem
56191783Srmacklem	acl = malloc(sizeof(struct acl_t_struct));
57191783Srmacklem	if (acl != NULL) {
58191783Srmacklem		bzero(acl, sizeof(struct acl_t_struct));
59220530Srmacklem		acl->ats_acl.acl_maxcnt = ACL_MAX_ENTRIES;
60191783Srmacklem	}
61191783Srmacklem
62191783Srmacklem	return (acl);
63191783Srmacklem}
64191783Srmacklem
65191783Srmacklemacl_t
66217432Srmacklemacl_dup(acl_t acl)
67217432Srmacklem{
68217432Srmacklem	acl_t	acl_new;
69217432Srmacklem
70192503Srmacklem	acl_new = acl_init(ACL_MAX_ENTRIES);
71191783Srmacklem	if (acl_new != NULL) {
72192255Srmacklem		*acl_new = *acl;
73192255Srmacklem		acl->ats_cur_entry = 0;
74191783Srmacklem		acl_new->ats_cur_entry = 0;
75220645Srmacklem	}
76191783Srmacklem
77191783Srmacklem	return (acl_new);
78191783Srmacklem}
79192255Srmacklem