X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/72a12576750f52947eb043106ba5c12c0d07decf..b1ab9ed8d0e0f1c3b66d7daa8fd5564444c56195:/libsecurity_transform/lib/SecExternalSourceTransform.cpp diff --git a/libsecurity_transform/lib/SecExternalSourceTransform.cpp b/libsecurity_transform/lib/SecExternalSourceTransform.cpp new file mode 100644 index 00000000..6a0b0824 --- /dev/null +++ b/libsecurity_transform/lib/SecExternalSourceTransform.cpp @@ -0,0 +1,41 @@ +/* + * SecExternalSourceTransform.cpp + * libsecurity_transform + * + * Created by J Osborne on 8/17/10. + * Copyright 2010 Apple. All rights reserved. + * + */ + +#include "SecTransform.h" +#include "SecCustomTransform.h" +#include "SecExternalSourceTransform.h" +#include + +CFStringRef external_source_name = CFSTR("com.apple.security.external_source"); + +static SecTransformInstanceBlock SecExternalSourceTransformCreateBlock(CFStringRef name, SecTransformRef newTransform, SecTransformImplementationRef ref) +{ + return Block_copy(^{ + SecTransformCustomSetAttribute(ref, kSecTransformInputAttributeName, kSecTransformMetaAttributeRequired, kCFBooleanFalse); + + SecTransformAttributeRef out = SecTranformCustomGetAttribute(ref, kSecTransformOutputAttributeName, kSecTransformMetaAttributeRef); + + SecTransformSetAttributeAction(ref, kSecTransformActionAttributeNotification, kSecTransformInputAttributeName, ^(SecTransformAttributeRef attribute, CFTypeRef value) { + SecTransformCustomSetAttribute(ref, out, kSecTransformMetaAttributeValue, value); + return (CFTypeRef)NULL; + }); + + return (CFErrorRef)NULL; + }); +} + +SecTransformRef SecExternalSourceTransformCreate(CFErrorRef* error) +{ + static dispatch_once_t once; + dispatch_once(&once, ^{ + SecTransformRegister(external_source_name, SecExternalSourceTransformCreateBlock, error); + }); + + return SecTransformCreate(external_source_name, error); +} \ No newline at end of file