summaryrefslogtreecommitdiffstats
path: root/vendor/security-framework/src/access_control.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
commitd1b2d29528b7794b41e66fc2136e395a02f8529b (patch)
treea4a17504b260206dec3cf55b2dca82929a348ac2 /vendor/security-framework/src/access_control.rs
parentReleasing progress-linux version 1.72.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-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.rs40
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))
+ }
+ }
+ }
+}