diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:59:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:59:35 +0000 |
commit | d1b2d29528b7794b41e66fc2136e395a02f8529b (patch) | |
tree | a4a17504b260206dec3cf55b2dca82929a348ac2 /vendor/security-framework/src/access_control.rs | |
parent | Releasing progress-linux version 1.72.1+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.tar.xz rustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.zip |
Merging upstream version 1.73.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/security-framework/src/access_control.rs')
-rw-r--r-- | vendor/security-framework/src/access_control.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/vendor/security-framework/src/access_control.rs b/vendor/security-framework/src/access_control.rs new file mode 100644 index 000000000..15a6d700d --- /dev/null +++ b/vendor/security-framework/src/access_control.rs @@ -0,0 +1,40 @@ +//! Access Control support. + +use std::ptr::{self, null}; + +use core_foundation::base::{TCFType, CFOptionFlags, kCFAllocatorDefault}; +use security_framework_sys::access_control::{SecAccessControlGetTypeID, SecAccessControlCreateWithFlags}; +use security_framework_sys::base::{SecAccessControlRef, errSecParam}; +use crate::base::{Error, Result}; + +declare_TCFType! { + /// A type representing sec access control settings. + SecAccessControl, SecAccessControlRef +} +impl_TCFType!( + SecAccessControl, + SecAccessControlRef, + SecAccessControlGetTypeID +); + +unsafe impl Sync for SecAccessControl {} +unsafe impl Send for SecAccessControl {} + +impl SecAccessControl { + /// Create `AccessControl` object from flags + pub fn create_with_flags(flags: CFOptionFlags) -> Result<Self> { + unsafe { + let access_control = SecAccessControlCreateWithFlags( + kCFAllocatorDefault, + null(), + flags, + ptr::null_mut(), + ); + if access_control.is_null() { + Err(Error::from_code(errSecParam)) + } else { + Ok(Self::wrap_under_create_rule(access_control)) + } + } + } +} |