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