apple_security_framework_sys/
authorization.rs

1use std::os::raw::c_char;
2use std::os::raw::c_void;
3
4use core_foundation_sys::base::CFTypeRef;
5use core_foundation_sys::base::OSStatus;
6use core_foundation_sys::bundle::CFBundleRef;
7use core_foundation_sys::dictionary::CFDictionaryRef;
8use core_foundation_sys::string::CFStringRef;
9
10pub const errAuthorizationSuccess: OSStatus = 0;
11pub const errAuthorizationInvalidSet: OSStatus = -60001;
12pub const errAuthorizationInvalidRef: OSStatus = -60002;
13pub const errAuthorizationInvalidTag: OSStatus = -60003;
14pub const errAuthorizationInvalidPointer: OSStatus = -60004;
15pub const errAuthorizationDenied: OSStatus = -60005;
16pub const errAuthorizationCanceled: OSStatus = -60006;
17pub const errAuthorizationInteractionNotAllowed: OSStatus = -60007;
18pub const errAuthorizationInternal: OSStatus = -60008;
19pub const errAuthorizationExternalizeNotAllowed: OSStatus = -60009;
20pub const errAuthorizationInternalizeNotAllowed: OSStatus = -60010;
21pub const errAuthorizationInvalidFlags: OSStatus = -60011;
22pub const errAuthorizationToolExecuteFailure: OSStatus = -60031;
23pub const errAuthorizationToolEnvironmentError: OSStatus = -60032;
24pub const errAuthorizationBadAddress: OSStatus = -60033;
25
26pub type AuthorizationFlags = u32;
27pub const kAuthorizationFlagDefaults: AuthorizationFlags = 0;
28pub const kAuthorizationFlagInteractionAllowed: AuthorizationFlags = 1;
29pub const kAuthorizationFlagExtendRights: AuthorizationFlags = 2;
30pub const kAuthorizationFlagPartialRights: AuthorizationFlags = 4;
31pub const kAuthorizationFlagDestroyRights: AuthorizationFlags = 8;
32pub const kAuthorizationFlagPreAuthorize: AuthorizationFlags = 16;
33
34pub type AuthorizationRef = *mut c_void;
35pub type AuthorizationString = *const c_char;
36
37#[repr(C)]
38#[derive(Copy, Clone, Debug)]
39pub struct AuthorizationItem {
40    pub name: AuthorizationString,
41    pub valueLength: usize,
42    pub value: *mut c_void,
43    pub flags: u32,
44}
45
46#[repr(C)]
47#[derive(Copy, Clone, Debug)]
48pub struct AuthorizationItemSet {
49    pub count: u32,
50    pub items: *mut AuthorizationItem,
51}
52
53pub const kAuthorizationExternalFormLength: usize = 32;
54
55#[repr(C)]
56#[derive(Copy, Clone, Debug)]
57pub struct AuthorizationExternalForm {
58    pub bytes: [c_char; kAuthorizationExternalFormLength],
59}
60
61pub type AuthorizationRights = AuthorizationItemSet;
62pub type AuthorizationEnvironment = AuthorizationItemSet;
63
64pub type AuthorizationAsyncCallback =
65    unsafe extern "C" fn(err: OSStatus, blockAuthorizedRights: *mut AuthorizationRights);
66
67extern "C" {
68    pub fn AuthorizationCreate(
69        rights: *const AuthorizationRights,
70        environment: *const AuthorizationEnvironment,
71        flags: AuthorizationFlags,
72        authorization: *mut AuthorizationRef,
73    ) -> OSStatus;
74
75    pub fn AuthorizationFree(
76        authorization: AuthorizationRef,
77        flags: AuthorizationFlags,
78    ) -> OSStatus;
79
80    pub fn AuthorizationCopyRights(
81        authorization: AuthorizationRef,
82        rights: *const AuthorizationRights,
83        environment: *const AuthorizationEnvironment,
84        flags: AuthorizationFlags,
85        authorizedRights: *mut *mut AuthorizationRights,
86    ) -> OSStatus;
87
88    pub fn AuthorizationCopyRightsAsync(
89        authorization: AuthorizationRef,
90        rights: *const AuthorizationRights,
91        environment: *const AuthorizationEnvironment,
92        flags: AuthorizationFlags,
93        callbackBlock: AuthorizationAsyncCallback,
94    );
95
96    pub fn AuthorizationCopyInfo(
97        authorization: AuthorizationRef,
98        tag: AuthorizationString,
99        info: *mut *mut AuthorizationItemSet,
100    ) -> OSStatus;
101
102    pub fn AuthorizationMakeExternalForm(
103        authorization: AuthorizationRef,
104        extForm: *mut AuthorizationExternalForm,
105    ) -> OSStatus;
106
107    pub fn AuthorizationCreateFromExternalForm(
108        extForm: *const AuthorizationExternalForm,
109        authorization: *mut AuthorizationRef,
110    ) -> OSStatus;
111
112    pub fn AuthorizationFreeItemSet(set: *mut AuthorizationItemSet) -> OSStatus;
113
114    pub fn AuthorizationRightGet(
115        rightName: *const c_char,
116        rightDefinition: *mut CFDictionaryRef,
117    ) -> OSStatus;
118
119    pub fn AuthorizationRightSet(
120        authorization: AuthorizationRef,
121        rightName: *const c_char,
122        rightDefinition: CFTypeRef,
123        descriptionKey: CFStringRef,
124        bundle: CFBundleRef,
125        localeTableName: CFStringRef,
126    ) -> OSStatus;
127
128    pub fn AuthorizationRightRemove(
129        authorization: AuthorizationRef,
130        rightName: *const c_char,
131    ) -> OSStatus;
132
133    #[cfg(target_os = "macos")]
134    pub fn AuthorizationExecuteWithPrivileges(
135        authorization: AuthorizationRef,
136        pathToTool: *const c_char,
137        options: AuthorizationFlags,
138        arguments: *const *mut c_char,
139        communicationsPipe: *mut *mut libc::FILE,
140    ) -> OSStatus;
141
142    #[cfg(target_os = "macos")]
143    pub fn AuthorizationCopyPrivilegedReference(
144        authorization: *mut AuthorizationRef,
145        flags: AuthorizationFlags,
146    ) -> OSStatus;
147}