Skip to main content

security_framework_sys/
authorization.rs

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