1/* 2 * Copyright (c) 2004, 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24#include <sys/appleapiopts.h> 25#include <sys/types.h> 26#include <sys/acl.h> 27#include <errno.h> 28#include <stdlib.h> 29#include <string.h> 30 31#include "aclvar.h" 32 33#if __DARWIN_ACL_ENTRY_INHERITED != KAUTH_ACE_INHERITED 34# error __DARWIN_ACL_ENTRY_INHERITED != KAUTH_ACE_INHERITED 35#endif 36#if __DARWIN_ACL_ENTRY_FILE_INHERIT != KAUTH_ACE_FILE_INHERIT 37# error __DARWIN_ACL_ENTRY_FILE_INHERIT != KAUTH_ACE_FILE_INHERIT 38#endif 39#if __DARWIN_ACL_ENTRY_DIRECTORY_INHERIT != KAUTH_ACE_DIRECTORY_INHERIT 40# error __DARWIN_ACL_ENTRY_DIRECTORY_INHERIT != KAUTH_ACE_DIRECTORY_INHERIT 41#endif 42#if __DARWIN_ACL_ENTRY_LIMIT_INHERIT != KAUTH_ACE_LIMIT_INHERIT 43# error __DARWIN_ACL_ENTRY_LIMIT_INHERIT != KAUTH_ACE_LIMIT_INHERIT 44#endif 45#if __DARWIN_ACL_ENTRY_ONLY_INHERIT != KAUTH_ACE_ONLY_INHERIT 46# error __DARWIN_ACL_ENTRY_ONLY_INHERIT != KAUTH_ACE_ONLY_INHERIT 47#endif 48#if __DARWIN_ACL_FLAG_NO_INHERIT != KAUTH_ACL_NO_INHERIT 49# error __DARWIN_ACL_FLAG_NO_INHERIT != KAUTH_ACL_NO_INHERIT 50#endif 51 52int 53acl_add_flag_np(acl_flagset_t flags, acl_flag_t flag) 54{ 55 /* XXX validate flags */ 56 /* XXX validate flag */ 57 58 flags->af_flags |= flag; 59 return(0); 60} 61 62int 63acl_clear_flags_np(acl_flagset_t flags) 64{ 65 /* XXX validate flags */ 66 67 flags->af_flags = 0; 68 return(0); 69} 70 71int 72acl_delete_flag_np(acl_flagset_t flags, acl_flag_t flag) 73{ 74 /* XXX validate flags */ 75 /* XXX validate flag */ 76 77 flags->af_flags &= ~flag; 78 return(0); 79} 80 81int 82acl_get_flag_np(acl_flagset_t flagset, acl_flag_t flag) 83{ 84 /* XXX validate flags */ 85 /* XXX validate flag */ 86 87 return((flag & flagset->af_flags) ? 1 : 0); 88} 89 90int 91acl_get_flagset_np(void *obj, acl_flagset_t *flagset_p) 92{ 93 struct _acl *ap = (struct _acl *)obj; 94 struct _acl_entry *ep = (struct _acl_entry *)obj; 95 96 if (_ACL_VALID_ACL(ap)) { 97 *flagset_p = (acl_flagset_t)&ap->a_flags; 98 } else if (_ACL_VALID_ENTRY(ep)) { 99 *flagset_p = (acl_flagset_t)&ep->ae_flags; 100 } else { 101 errno = EINVAL; 102 return(-1); 103 } 104 return(0); 105} 106 107int 108acl_set_flagset_np(void *obj, acl_flagset_t flagset) 109{ 110 struct _acl *ap = (struct _acl *)obj; 111 struct _acl_entry *ep = (struct _acl_entry *)obj; 112 113 if (_ACL_VALID_ACL(ap)) { 114 ap->a_flags = flagset->af_flags; 115 } else if (_ACL_VALID_ENTRY(ep)) { 116 ep->ae_flags = flagset->af_flags; 117 } else { 118 errno = EINVAL; 119 return(-1); 120 } 121 122 return(0); 123} 124