2 * Copyright (c) 2002-2008, 2010-2015 Apple Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
25 * Modification History
27 * October 31, 2000 Allan Nathanson <ajn@apple.com>
32 #include <sys/types.h>
33 #include <sys/param.h>
37 #include <CoreFoundation/CFRuntime.h>
38 #include "dy_framework.h"
42 #pragma mark IOKit.framework APIs
46 static void *image
= NULL
;
48 const char *framework
= "/System/Library/Frameworks/IOKit.framework/IOKit";
50 const char *suffix
= getenv("DYLD_IMAGE_SUFFIX");
51 char path
[MAXPATHLEN
];
53 strlcpy(path
, framework
, sizeof(path
));
54 if (suffix
) strlcat(path
, suffix
, sizeof(path
));
55 if (0 <= stat(path
, &statbuf
)) {
56 image
= dlopen(path
, RTLD_LAZY
| RTLD_LOCAL
);
58 image
= dlopen(framework
, RTLD_LAZY
| RTLD_LOCAL
);
65 __private_extern__ CFMutableDictionaryRef
66 _IOBSDNameMatching(mach_port_t masterPort
, uint32_t options
, const char *bsdName
)
68 #undef IOBSDNameMatching
69 static typeof (IOBSDNameMatching
) *dyfunc
= NULL
;
71 void *image
= __loadIOKit();
72 if (image
) dyfunc
= dlsym(image
, "IOBSDNameMatching");
74 return dyfunc
? dyfunc(masterPort
, options
, bsdName
) : NULL
;
78 __private_extern__ io_object_t
79 _IOIteratorNext(io_iterator_t iterator
)
82 static typeof (IOIteratorNext
) *dyfunc
= NULL
;
84 void *image
= __loadIOKit();
85 if (image
) dyfunc
= dlsym(image
, "IOIteratorNext");
87 return dyfunc
? dyfunc(iterator
) : 0;
91 __private_extern__ kern_return_t
92 _IOMasterPort(mach_port_t bootstrapPort
, mach_port_t
*masterPort
)
95 static typeof (IOMasterPort
) *dyfunc
= NULL
;
97 void *image
= __loadIOKit();
98 if (image
) dyfunc
= dlsym(image
, "IOMasterPort");
100 return dyfunc
? dyfunc(bootstrapPort
, masterPort
) : KERN_FAILURE
;
104 __private_extern__ boolean_t
105 _IOObjectConformsTo(io_object_t object
, const io_name_t className
)
107 #undef IOObjectConformsTo
108 static typeof (IOObjectConformsTo
) *dyfunc
= NULL
;
110 void *image
= __loadIOKit();
111 if (image
) dyfunc
= dlsym(image
, "IOObjectConformsTo");
113 return dyfunc
? dyfunc(object
, className
) : FALSE
;
117 __private_extern__ boolean_t
118 _IOObjectGetClass(io_object_t object
, io_name_t className
)
120 #undef IOObjectGetClass
121 static typeof (IOObjectGetClass
) *dyfunc
= NULL
;
123 void *image
= __loadIOKit();
124 if (image
) dyfunc
= dlsym(image
, "IOObjectGetClass");
126 return dyfunc
? dyfunc(object
, className
) : FALSE
;
130 __private_extern__ kern_return_t
131 _IOObjectRelease(io_object_t object
)
133 #undef IOObjectRelease
134 static typeof (IOObjectRelease
) *dyfunc
= NULL
;
136 void *image
= __loadIOKit();
137 if (image
) dyfunc
= dlsym(image
, "IOObjectRelease");
139 return dyfunc
? dyfunc(object
) : KERN_FAILURE
;
143 #if !TARGET_OS_IPHONE
145 __private_extern__ IOReturn
146 _IOPMConnectionAcknowledgeEvent(IOPMConnection myConnection
, IOPMConnectionMessageToken token
)
148 #undef IOPMConnectionAcknowledgeEvent
149 static typeof (IOPMConnectionAcknowledgeEvent
) *dyfunc
= NULL
;
151 void *image
= __loadIOKit();
152 if (image
) dyfunc
= dlsym(image
, "IOPMConnectionAcknowledgeEvent");
154 return dyfunc
? dyfunc(myConnection
, token
) : kIOReturnError
;
158 __private_extern__ IOReturn
159 _IOPMConnectionCreate(CFStringRef myName
, IOPMCapabilityBits interests
, IOPMConnection
*newConnection
)
161 #undef IOPMConnectionCreate
162 static typeof (IOPMConnectionCreate
) *dyfunc
= NULL
;
164 void *image
= __loadIOKit();
165 if (image
) dyfunc
= dlsym(image
, "IOPMConnectionCreate");
167 return dyfunc
? dyfunc(myName
, interests
, newConnection
) : kIOReturnError
;
171 __private_extern__ IOPMCapabilityBits
172 _IOPMConnectionGetSystemCapabilities(void)
174 #undef IOPMConnectionGetSystemCapabilities
175 static typeof (IOPMConnectionGetSystemCapabilities
) *dyfunc
= NULL
;
177 void *image
= __loadIOKit();
178 if (image
) dyfunc
= dlsym(image
, "IOPMConnectionGetSystemCapabilities");
180 return dyfunc
? dyfunc() : kIOPMSleepWakeInterest
;
184 __private_extern__ IOReturn
185 _IOPMConnectionRelease(IOPMConnection myConnection
)
187 #undef IOPMConnectionRelease
188 static typeof (IOPMConnectionRelease
) *dyfunc
= NULL
;
190 void *image
= __loadIOKit();
191 if (image
) dyfunc
= dlsym(image
, "IOPMConnectionRelease");
193 return dyfunc
? dyfunc(myConnection
) : kIOReturnError
;
197 __private_extern__
void
198 _IOPMConnectionSetDispatchQueue(IOPMConnection myConnection
, dispatch_queue_t myQueue
)
200 #undef IOPMConnectionSetDispatchQueue
201 static typeof (IOPMConnectionSetDispatchQueue
) *dyfunc
= NULL
;
203 void *image
= __loadIOKit();
204 if (image
) dyfunc
= dlsym(image
, "IOPMConnectionSetDispatchQueue");
207 dyfunc(myConnection
, myQueue
);
213 __private_extern__ IOReturn
214 _IOPMConnectionSetNotification(IOPMConnection myConnection
, void *param
, IOPMEventHandlerType handler
)
216 #undef IOPMConnectionSetNotification
217 static typeof (IOPMConnectionSetNotification
) *dyfunc
= NULL
;
219 void *image
= __loadIOKit();
220 if (image
) dyfunc
= dlsym(image
, "IOPMConnectionSetNotification");
222 return dyfunc
? dyfunc(myConnection
, param
, handler
) : kIOReturnError
;
225 #endif // !TARGET_OS_IPHONE
228 __private_extern__ CFTypeRef
229 _IORegistryEntryCreateCFProperty(io_registry_entry_t entry
, CFStringRef key
, CFAllocatorRef allocator
, IOOptionBits options
)
231 #undef IORegistryEntryCreateCFProperty
232 static typeof (IORegistryEntryCreateCFProperty
) *dyfunc
= NULL
;
234 void *image
= __loadIOKit();
235 if (image
) dyfunc
= dlsym(image
, "IORegistryEntryCreateCFProperty");
237 return dyfunc
? dyfunc(entry
, key
, allocator
, options
) : NULL
;
241 __private_extern__ kern_return_t
242 _IORegistryEntryCreateCFProperties(io_registry_entry_t entry
, CFMutableDictionaryRef
*properties
, CFAllocatorRef allocator
, IOOptionBits options
)
244 #undef IORegistryEntryCreateCFProperties
245 static typeof (IORegistryEntryCreateCFProperties
) *dyfunc
= NULL
;
247 void *image
= __loadIOKit();
248 if (image
) dyfunc
= dlsym(image
, "IORegistryEntryCreateCFProperties");
250 return dyfunc
? dyfunc(entry
, properties
, allocator
, options
) : KERN_FAILURE
;
254 __private_extern__ kern_return_t
255 _IORegistryEntryCreateIterator(mach_port_t masterPort
, const io_name_t plane
, IOOptionBits options
, io_iterator_t
*iterator
)
257 #undef IORegistryEntryCreateIterator
258 static typeof (IORegistryEntryCreateIterator
) *dyfunc
= NULL
;
260 void *image
= __loadIOKit();
261 if (image
) dyfunc
= dlsym(image
, "IORegistryEntryCreateIterator");
263 return dyfunc
? dyfunc(masterPort
, plane
, options
, iterator
) : KERN_FAILURE
;
267 __private_extern__ kern_return_t
268 _IORegistryEntryGetLocationInPlane(io_registry_entry_t entry
, const io_name_t plane
, io_name_t location
)
270 #undef IORegistryEntryGetLocationInPlane
271 static typeof (IORegistryEntryGetLocationInPlane
) *dyfunc
= NULL
;
273 void *image
= __loadIOKit();
274 if (image
) dyfunc
= dlsym(image
, "IORegistryEntryGetLocationInPlane");
276 return dyfunc
? dyfunc(entry
, plane
, location
) : KERN_FAILURE
;
280 __private_extern__ kern_return_t
281 _IORegistryEntryGetName(io_registry_entry_t entry
, io_name_t name
)
283 #undef IORegistryEntryGetName
284 static typeof (IORegistryEntryGetName
) *dyfunc
= NULL
;
286 void *image
= __loadIOKit();
287 if (image
) dyfunc
= dlsym(image
, "IORegistryEntryGetName");
289 return dyfunc
? dyfunc(entry
, name
) : KERN_FAILURE
;
293 __private_extern__ kern_return_t
294 _IORegistryEntryGetNameInPlane(io_registry_entry_t entry
, const io_name_t plane
, io_name_t name
)
296 #undef IORegistryEntryGetNameInPlane
297 static typeof (IORegistryEntryGetNameInPlane
) *dyfunc
= NULL
;
299 void *image
= __loadIOKit();
300 if (image
) dyfunc
= dlsym(image
, "IORegistryEntryGetNameInPlane");
302 return dyfunc
? dyfunc(entry
, plane
, name
) : KERN_FAILURE
;
306 __private_extern__ kern_return_t
307 _IORegistryEntryGetParentEntry(io_registry_entry_t entry
, const io_name_t plane
, io_registry_entry_t
*parent
)
309 #undef IORegistryEntryGetParentEntry
310 static typeof (IORegistryEntryGetParentEntry
) *dyfunc
= NULL
;
312 void *image
= __loadIOKit();
313 if (image
) dyfunc
= dlsym(image
, "IORegistryEntryGetParentEntry");
315 return dyfunc
? dyfunc(entry
, plane
, parent
) : KERN_FAILURE
;
319 __private_extern__ kern_return_t
320 _IORegistryEntryGetPath(io_registry_entry_t entry
, const io_name_t plane
, io_string_t path
)
322 #undef IORegistryEntryGetPath
323 static typeof (IORegistryEntryGetPath
) *dyfunc
= NULL
;
325 void *image
= __loadIOKit();
326 if (image
) dyfunc
= dlsym(image
, "IORegistryEntryGetPath");
328 return dyfunc
? dyfunc(entry
, plane
, path
) : KERN_FAILURE
;
332 __private_extern__ kern_return_t
333 _IORegistryEntryGetRegistryEntryID(io_registry_entry_t entry
, uint64_t *entryID
)
335 #undef IORegistryEntryGetRegistryEntryID
336 static typeof (IORegistryEntryGetRegistryEntryID
) *dyfunc
= NULL
;
338 void *image
= __loadIOKit();
339 if (image
) dyfunc
= dlsym(image
, "IORegistryEntryGetRegistryEntryID");
341 return dyfunc
? dyfunc(entry
, entryID
) : KERN_FAILURE
;
345 __private_extern__ CFTypeRef
346 _IORegistryEntrySearchCFProperty(io_registry_entry_t entry
, const io_name_t plane
, CFStringRef key
, CFAllocatorRef allocator
, IOOptionBits options
)
348 #undef IORegistryEntrySearchCFProperty
349 static typeof (IORegistryEntrySearchCFProperty
) *dyfunc
= NULL
;
351 void *image
= __loadIOKit();
352 if (image
) dyfunc
= dlsym(image
, "IORegistryEntrySearchCFProperty");
354 return dyfunc
? dyfunc(entry
, plane
, key
, allocator
, options
) : NULL
;
358 __private_extern__ kern_return_t
359 _IOServiceGetMatchingServices(mach_port_t masterPort
, CFDictionaryRef matching
, io_iterator_t
*existing
)
361 #undef IOServiceGetMatchingServices
362 static typeof (IOServiceGetMatchingServices
) *dyfunc
= NULL
;
364 void *image
= __loadIOKit();
365 if (image
) dyfunc
= dlsym(image
, "IOServiceGetMatchingServices");
367 return dyfunc
? dyfunc(masterPort
, matching
, existing
) : KERN_FAILURE
;
371 __private_extern__ CFMutableDictionaryRef
372 _IOServiceMatching(const char *name
)
374 #undef IOServiceMatching
375 static typeof (IOServiceMatching
) *dyfunc
= NULL
;
377 void *image
= __loadIOKit();
378 if (image
) dyfunc
= dlsym(image
, "IOServiceMatching");
380 return dyfunc
? dyfunc(name
) : NULL
;
384 #pragma mark Security.framework APIs
387 __loadSecurity(void) {
388 static void *image
= NULL
;
390 const char *framework
= "/System/Library/Frameworks/Security.framework/Security";
392 const char *suffix
= getenv("DYLD_IMAGE_SUFFIX");
393 char path
[MAXPATHLEN
];
395 strlcpy(path
, framework
, sizeof(path
));
396 if (suffix
) strlcat(path
, suffix
, sizeof(path
));
397 if (0 <= stat(path
, &statbuf
)) {
398 image
= dlopen(path
, RTLD_LAZY
| RTLD_LOCAL
);
400 image
= dlopen(framework
, RTLD_LAZY
| RTLD_LOCAL
);
403 return (void *)image
;
406 #define SECURITY_FRAMEWORK_EXTERN(t, s) \
407 __private_extern__ t \
410 static t *dysym = NULL; \
412 void *image = __loadSecurity(); \
413 if (image) dysym = dlsym(image, #s ); \
415 return (dysym != NULL) ? *dysym : NULL; \
418 #if !TARGET_OS_IPHONE
419 SECURITY_FRAMEWORK_EXTERN(CFTypeRef
, kSecAttrService
)
420 SECURITY_FRAMEWORK_EXTERN(CFTypeRef
, kSecClass
)
421 SECURITY_FRAMEWORK_EXTERN(CFTypeRef
, kSecClassGenericPassword
)
422 SECURITY_FRAMEWORK_EXTERN(CFTypeRef
, kSecMatchLimit
)
423 SECURITY_FRAMEWORK_EXTERN(CFTypeRef
, kSecMatchLimitAll
)
424 SECURITY_FRAMEWORK_EXTERN(CFTypeRef
, kSecMatchSearchList
)
425 SECURITY_FRAMEWORK_EXTERN(CFTypeRef
, kSecReturnRef
)
426 SECURITY_FRAMEWORK_EXTERN(CFTypeRef
, kSecGuestAttributePid
)
427 SECURITY_FRAMEWORK_EXTERN(CFTypeRef
, kSecCodeInfoIdentifier
)
428 SECURITY_FRAMEWORK_EXTERN(CFTypeRef
, kSecCodeInfoUnique
)
430 __private_extern__ OSStatus
431 _AuthorizationMakeExternalForm(AuthorizationRef authorization
, AuthorizationExternalForm
*extForm
)
433 #undef AuthorizationMakeExternalForm
434 static typeof (AuthorizationMakeExternalForm
) *dyfunc
= NULL
;
436 void *image
= __loadSecurity();
437 if (image
) dyfunc
= dlsym(image
, "AuthorizationMakeExternalForm");
439 return dyfunc
? dyfunc(authorization
, extForm
) : -1;
442 __private_extern__ OSStatus
443 _SecAccessCreate(CFStringRef descriptor
, CFArrayRef trustedlist
, SecAccessRef
*accessRef
)
445 #undef SecAccessCreate
446 static typeof (SecAccessCreate
) *dyfunc
= NULL
;
448 void *image
= __loadSecurity();
449 if (image
) dyfunc
= dlsym(image
, "SecAccessCreate");
451 return dyfunc
? dyfunc(descriptor
, trustedlist
, accessRef
) : -1;
454 #if (__MAC_OS_X_VERSION_MIN_REQUIRED < 1070)
455 __private_extern__ OSStatus
456 _SecAccessCreateFromOwnerAndACL(const CSSM_ACL_OWNER_PROTOTYPE
*owner
, uint32 aclCount
, const CSSM_ACL_ENTRY_INFO
*acls
, SecAccessRef
*accessRef
)
458 #undef SecAccessCreateFromOwnerAndACL
459 static typeof (SecAccessCreateFromOwnerAndACL
) *dyfunc
= NULL
;
461 void *image
= __loadSecurity();
462 if (image
) dyfunc
= dlsym(image
, "SecAccessCreateFromOwnerAndACL");
464 return dyfunc
? dyfunc(owner
, aclCount
, acls
, accessRef
) : -1;
466 #else // (__MAC_OS_X_VERSION_MIN_REQUIRED < 1070)
467 __private_extern__ SecAccessRef
468 _SecAccessCreateWithOwnerAndACL(uid_t userId
, gid_t groupId
, SecAccessOwnerType ownerType
, CFArrayRef acls
, CFErrorRef
*error
)
470 #undef SecAccessCreateWithOwnerAndACL
471 static typeof (SecAccessCreateWithOwnerAndACL
) *dyfunc
= NULL
;
473 void *image
= __loadSecurity();
474 if (image
) dyfunc
= dlsym(image
, "SecAccessCreateWithOwnerAndACL");
476 return dyfunc
? dyfunc(userId
, groupId
, ownerType
, acls
, error
) : NULL
;
478 #endif // (__MAC_OS_X_VERSION_MIN_REQUIRED < 1070)
480 __private_extern__ OSStatus
481 _SecItemCopyMatching(CFDictionaryRef query
, CFTypeRef
*result
)
483 #undef SecItemCopyMatching
484 static typeof (SecItemCopyMatching
) *dyfunc
= NULL
;
486 void *image
= __loadSecurity();
487 if (image
) dyfunc
= dlsym(image
, "SecItemCopyMatching");
489 return dyfunc
? dyfunc(query
, result
) : -1;
492 __private_extern__ OSStatus
493 _SecKeychainCopyDomainDefault(SecPreferencesDomain domain
, SecKeychainRef
*keychain
)
495 #undef SecKeychainCopyDomainDefault
496 static typeof (SecKeychainCopyDomainDefault
) *dyfunc
= NULL
;
498 void *image
= __loadSecurity();
499 if (image
) dyfunc
= dlsym(image
, "SecKeychainCopyDomainDefault");
501 return dyfunc
? dyfunc(domain
, keychain
) : -1;
504 __private_extern__ OSStatus
505 _SecKeychainOpen(const char *pathName
, SecKeychainRef
*keychain
)
507 #undef SecKeychainOpen
508 static typeof (SecKeychainOpen
) *dyfunc
= NULL
;
510 void *image
= __loadSecurity();
511 if (image
) dyfunc
= dlsym(image
, "SecKeychainOpen");
513 return dyfunc
? dyfunc(pathName
, keychain
) : -1;
516 __private_extern__ OSStatus
517 _SecKeychainSetDomainDefault(SecPreferencesDomain domain
, SecKeychainRef keychain
)
519 #undef SecKeychainSetDomainDefault
520 static typeof (SecKeychainSetDomainDefault
) *dyfunc
= NULL
;
522 void *image
= __loadSecurity();
523 if (image
) dyfunc
= dlsym(image
, "SecKeychainSetDomainDefault");
525 return dyfunc
? dyfunc(domain
, keychain
) : -1;
528 __private_extern__ OSStatus
529 _SecKeychainItemCopyContent(SecKeychainItemRef itemRef
, SecItemClass
*itemClass
, SecKeychainAttributeList
*attrList
, UInt32
*length
, void **outData
)
531 #undef SecKeychainItemCopyContent
532 static typeof (SecKeychainItemCopyContent
) *dyfunc
= NULL
;
534 void *image
= __loadSecurity();
535 if (image
) dyfunc
= dlsym(image
, "SecKeychainItemCopyContent");
537 return dyfunc
? dyfunc(itemRef
, itemClass
, attrList
, length
, outData
) : -1;
540 __private_extern__ OSStatus
541 _SecKeychainItemCreateFromContent(SecItemClass itemClass
, SecKeychainAttributeList
*attrList
, UInt32 length
, const void *data
, SecKeychainRef keychainRef
, SecAccessRef initialAccess
, SecKeychainItemRef
*itemRef
)
543 #undef SecKeychainItemCreateFromContent
544 static typeof (SecKeychainItemCreateFromContent
) *dyfunc
= NULL
;
546 void *image
= __loadSecurity();
547 if (image
) dyfunc
= dlsym(image
, "SecKeychainItemCreateFromContent");
549 return dyfunc
? dyfunc(itemClass
, attrList
, length
, data
, keychainRef
, initialAccess
, itemRef
) : -1;
552 __private_extern__ OSStatus
553 _SecKeychainItemDelete(SecKeychainItemRef itemRef
)
555 #undef SecKeychainItemDelete
556 static typeof (SecKeychainItemDelete
) *dyfunc
= NULL
;
558 void *image
= __loadSecurity();
559 if (image
) dyfunc
= dlsym(image
, "SecKeychainItemDelete");
561 return dyfunc
? dyfunc(itemRef
) : -1;
564 __private_extern__ OSStatus
565 _SecKeychainItemFreeContent(SecKeychainAttributeList
*attrList
, void *data
)
567 #undef SecKeychainItemFreeContent
568 static typeof (SecKeychainItemFreeContent
) *dyfunc
= NULL
;
570 void *image
= __loadSecurity();
571 if (image
) dyfunc
= dlsym(image
, "SecKeychainItemFreeContent");
573 return dyfunc
? dyfunc(attrList
, data
) : -1;
576 __private_extern__ OSStatus
577 _SecKeychainItemModifyContent(SecKeychainItemRef itemRef
, const SecKeychainAttributeList
*attrList
, UInt32 length
, const void *data
)
579 #undef SecKeychainItemModifyContent
580 static typeof (SecKeychainItemModifyContent
) *dyfunc
= NULL
;
582 void *image
= __loadSecurity();
583 if (image
) dyfunc
= dlsym(image
, "SecKeychainItemModifyContent");
585 return dyfunc
? dyfunc(itemRef
, attrList
, length
, data
) : -1;
589 __private_extern__ OSStatus
590 _SecTrustedApplicationCreateFromPath(const char *path
, SecTrustedApplicationRef
*app
)
592 #undef SecTrustedApplicationCreateFromPath
593 static typeof (SecTrustedApplicationCreateFromPath
) *dyfunc
= NULL
;
595 void *image
= __loadSecurity();
596 if (image
) dyfunc
= dlsym(image
, "SecTrustedApplicationCreateFromPath");
598 return dyfunc
? dyfunc(path
, app
) : -1;
601 #else // TARGET_OS_IPHONE
603 SECURITY_FRAMEWORK_EXTERN(CFStringRef
, kSecPropertyKeyValue
)
604 SECURITY_FRAMEWORK_EXTERN(CFStringRef
, kSecPropertyKeyLabel
)
606 __private_extern__ CFArrayRef
607 _SecCertificateCopyProperties(SecCertificateRef certRef
)
609 #undef SecCertificateCopyProperties
610 static typeof (SecCertificateCopyProperties
) *dyfunc
= NULL
;
612 void *image
= __loadSecurity();
613 if (image
) dyfunc
= dlsym(image
, "SecCertificateCopyProperties");
615 return dyfunc
? dyfunc(certRef
) : NULL
;
618 #endif // TARGET_OS_IPHONE
620 __private_extern__ SecCertificateRef
621 _SecCertificateCreateWithData(CFAllocatorRef allocator
, CFDataRef data
)
623 #undef SecCertificateCreateWithData
624 static typeof (SecCertificateCreateWithData
) *dyfunc
= NULL
;
626 void *image
= __loadSecurity();
627 if (image
) dyfunc
= dlsym(image
, "SecCertificateCreateWithData");
629 return dyfunc
? dyfunc(allocator
, data
) : NULL
;