use core_foundation_sys::base::CFTypeRef; use core_foundation_sys::base::OSStatus; use core_foundation_sys::bundle::CFBundleRef; use core_foundation_sys::dictionary::CFDictionaryRef; use core_foundation_sys::string::CFStringRef; use std::os::raw::{c_char, c_void}; pub const errAuthorizationSuccess: OSStatus = 0; pub const errAuthorizationInvalidSet: OSStatus = -60001; pub const errAuthorizationInvalidRef: OSStatus = -60002; pub const errAuthorizationInvalidTag: OSStatus = -60003; pub const errAuthorizationInvalidPointer: OSStatus = -60004; pub const errAuthorizationDenied: OSStatus = -60005; pub const errAuthorizationCanceled: OSStatus = -60006; pub const errAuthorizationInteractionNotAllowed: OSStatus = -60007; pub const errAuthorizationInternal: OSStatus = -60008; pub const errAuthorizationExternalizeNotAllowed: OSStatus = -60009; pub const errAuthorizationInternalizeNotAllowed: OSStatus = -60010; pub const errAuthorizationInvalidFlags: OSStatus = -60011; pub const errAuthorizationToolExecuteFailure: OSStatus = -60031; pub const errAuthorizationToolEnvironmentError: OSStatus = -60032; pub const errAuthorizationBadAddress: OSStatus = -60033; pub type AuthorizationFlags = u32; pub const kAuthorizationFlagDefaults: AuthorizationFlags = 0; pub const kAuthorizationFlagInteractionAllowed: AuthorizationFlags = 1; pub const kAuthorizationFlagExtendRights: AuthorizationFlags = 2; pub const kAuthorizationFlagPartialRights: AuthorizationFlags = 4; pub const kAuthorizationFlagDestroyRights: AuthorizationFlags = 8; pub const kAuthorizationFlagPreAuthorize: AuthorizationFlags = 16; pub type AuthorizationRef = *mut c_void; pub type AuthorizationString = *const c_char; #[repr(C)] #[derive(Copy, Clone, Debug)] pub struct AuthorizationItem { pub name: AuthorizationString, pub valueLength: usize, pub value: *mut c_void, pub flags: u32, } #[repr(C)] #[derive(Copy, Clone, Debug)] pub struct AuthorizationItemSet { pub count: u32, pub items: *mut AuthorizationItem, } pub const kAuthorizationExternalFormLength: usize = 32; #[repr(C)] #[derive(Copy, Clone, Debug)] pub struct AuthorizationExternalForm { pub bytes: [c_char; kAuthorizationExternalFormLength], } pub type AuthorizationRights = AuthorizationItemSet; pub type AuthorizationEnvironment = AuthorizationItemSet; pub type AuthorizationAsyncCallback = unsafe extern "C" fn(err: OSStatus, blockAuthorizedRights: *mut AuthorizationRights); extern "C" { pub fn AuthorizationCreate( rights: *const AuthorizationRights, environment: *const AuthorizationEnvironment, flags: AuthorizationFlags, authorization: *mut AuthorizationRef, ) -> OSStatus; pub fn AuthorizationFree( authorization: AuthorizationRef, flags: AuthorizationFlags, ) -> OSStatus; pub fn AuthorizationCopyRights( authorization: AuthorizationRef, rights: *const AuthorizationRights, environment: *const AuthorizationEnvironment, flags: AuthorizationFlags, authorizedRights: *mut *mut AuthorizationRights, ) -> OSStatus; pub fn AuthorizationCopyRightsAsync( authorization: AuthorizationRef, rights: *const AuthorizationRights, environment: *const AuthorizationEnvironment, flags: AuthorizationFlags, callbackBlock: AuthorizationAsyncCallback, ); pub fn AuthorizationCopyInfo( authorization: AuthorizationRef, tag: AuthorizationString, info: *mut *mut AuthorizationItemSet, ) -> OSStatus; pub fn AuthorizationMakeExternalForm( authorization: AuthorizationRef, extForm: *mut AuthorizationExternalForm, ) -> OSStatus; pub fn AuthorizationCreateFromExternalForm( extForm: *const AuthorizationExternalForm, authorization: *mut AuthorizationRef, ) -> OSStatus; pub fn AuthorizationFreeItemSet(set: *mut AuthorizationItemSet) -> OSStatus; pub fn AuthorizationRightGet( rightName: *const c_char, rightDefinition: *mut CFDictionaryRef, ) -> OSStatus; pub fn AuthorizationRightSet( authorization: AuthorizationRef, rightName: *const c_char, rightDefinition: CFTypeRef, descriptionKey: CFStringRef, bundle: CFBundleRef, localeTableName: CFStringRef, ) -> OSStatus; pub fn AuthorizationRightRemove( authorization: AuthorizationRef, rightName: *const c_char, ) -> OSStatus; #[cfg(target_os = "macos")] pub fn AuthorizationExecuteWithPrivileges( authorization: AuthorizationRef, pathToTool: *const c_char, options: AuthorizationFlags, arguments: *const *mut c_char, communicationsPipe: *mut *mut libc::FILE, ) -> OSStatus; #[cfg(target_os = "macos")] pub fn AuthorizationCopyPrivilegedReference( authorization: *mut AuthorizationRef, flags: AuthorizationFlags, ) -> OSStatus; }