apple_security/
access_control.rs1use std::ptr::{self, null};
4
5use core_foundation::base::{TCFType, CFOptionFlags, kCFAllocatorDefault};
6use apple_security_sys::access_control::{SecAccessControlGetTypeID, SecAccessControlCreateWithFlags};
7use apple_security_sys::base::{SecAccessControlRef, errSecParam};
8use crate::base::{Error, Result};
9
10declare_TCFType! {
11 SecAccessControl, SecAccessControlRef
13}
14impl_TCFType!(
15 SecAccessControl,
16 SecAccessControlRef,
17 SecAccessControlGetTypeID
18);
19
20unsafe impl Sync for SecAccessControl {}
21unsafe impl Send for SecAccessControl {}
22
23impl SecAccessControl {
24 pub fn create_with_flags(flags: CFOptionFlags) -> Result<Self> {
26 unsafe {
27 let access_control = SecAccessControlCreateWithFlags(
28 kCFAllocatorDefault,
29 null(),
30 flags,
31 ptr::null_mut(),
32 );
33 if access_control.is_null() {
34 Err(Error::from_code(errSecParam))
35 } else {
36 Ok(Self::wrap_under_create_rule(access_control))
37 }
38 }
39 }
40}