X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/72a12576750f52947eb043106ba5c12c0d07decf..b1ab9ed8d0e0f1c3b66d7daa8fd5564444c56195:/libsecurity_cdsa_utilities/lib/Schema.m4 diff --git a/libsecurity_cdsa_utilities/lib/Schema.m4 b/libsecurity_cdsa_utilities/lib/Schema.m4 new file mode 100644 index 00000000..b611e62d --- /dev/null +++ b/libsecurity_cdsa_utilities/lib/Schema.m4 @@ -0,0 +1,466 @@ +divert(-1) +changecom(/*, */) +/* + * Copyright (c) 2000-2002 Apple Computer, Inc. All Rights Reserved. + * + * The contents of this file constitute Original Code as defined in and are + * subject to the Apple Public Source License Version 1.2 (the 'License'). + * You may not use this file except in compliance with the License. Please obtain + * a copy of the License at http://www.apple.com/publicsource and read it before + * using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS + * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT + * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the + * specific language governing rights and limitations under the License. + */ + +define(`startClass', +`define(`arrayIndex', 0)dnl +define(`class', $1)dnl +divert(0)dnl +// $1 password attributes +static const CSSM_DB_ATTRIBUTE_INFO $1Attributes[] = +{ +divert(1)dnl +// $1 password indices +static const CSSM_DB_INDEX_INFO $1Indices[] = +{') + +define(`endClass', +`divert(0)dnl +}; + +divert(1)dnl +` // Unique (primary) index' +undivert(3) +` // Secondary indices' +undivert(4)dnl +}; + +divert(-1)') + +define(`attributeBody', +` { +ifelse(index(`$1',`s'),-1, +` CSSM_DB_ATTRIBUTE_NAME_AS_INTEGER, + {(char *)((uint64_t)$3<<32|$3)},', +` CSSM_DB_ATTRIBUTE_NAME_AS_STRING, + {$4},') + CSSM_DB_ATTRIBUTE_FORMAT_$7 + }') + +define(`simpleAttribute', +`const CSSM_DB_ATTRIBUTE_INFO $2 = +attributeBody($*); +') + +define(`attribute', +`ifelse(index(`$1',`U'),-1,`', +`divert(3)dnl + { + CSSM_DB_INDEX_UNIQUE, + CSSM_DB_INDEX_ON_ATTRIBUTE, +attributeBody($*) + }, +')dnl +ifelse(index(`$1',`I'),-1,`', +`divert(4)dnl + { + CSSM_DB_INDEX_NONUNIQUE, + CSSM_DB_INDEX_ON_ATTRIBUTE, +attributeBody($*) + }, +')dnl +divert(2)dnl +dnl const CSSM_DB_ATTRIBUTE_INFO &`k'class()$2 = class()Attributes[arrayIndex()]; +`#define k'class()$2 class()Attributes[arrayIndex()]; +divert(0)dnl +attributeBody($*),dnl +define(`arrayIndex', incr(arrayIndex))dnl +') + +define(`attrInfo', +`{ + $1, + sizeof($2Attributes) / sizeof(CSSM_DB_ATTRIBUTE_INFO), + const_cast($2Attributes) + }') + +define(`indexInfo', +`{ + $1, + sizeof($2Indices) / sizeof(CSSM_DB_INDEX_INFO), + const_cast($2Indices) + }') + +define(`parseInfo', +`{ + CSSM_DB_RECORDTYPE_APP_DEFINED_START, + { + {0,0,0,{0}}, + {0,0}, + 0, + 0 + } + }') + +define(`startNewClass', +`define(`indexIndex', 0)dnl +define(`class', $1)dnl +divert(2)dnl +// $1 attributes +const CSSM_DB_SCHEMA_ATTRIBUTE_INFO $1SchemaAttributeList[] = +{ +divert(3)dnl +// $1 indices +const CSSM_DB_SCHEMA_INDEX_INFO $1SchemaIndexList[] = +{') + +define(`endNewClass', +`divert(2)dnl +}; + +const uint32 class()SchemaAttributeCount = sizeof(class()SchemaAttributeList) / sizeof(CSSM_DB_SCHEMA_ATTRIBUTE_INFO); + +divert(3)dnl +` // Unique (primary) index' +undivert(5) +` // Secondary indices' +undivert(6)dnl +}; + +const uint32 class()SchemaIndexCount = sizeof(class()SchemaIndexList) / sizeof(CSSM_DB_SCHEMA_INDEX_INFO); + +undivert(4)dnl +divert(0)dnl +undivert(2)dnl +undivert(3)dnl') + +define(`newAttributeBody', +`{ +ifelse(index(`$1',`s'),-1, +` CSSM_DB_ATTRIBUTE_NAME_AS_INTEGER, + {(char *)((uint64_t)$3<<32|$3)},', +` CSSM_DB_ATTRIBUTE_NAME_AS_STRING, + {$4},') + CSSM_DB_ATTRIBUTE_FORMAT_$7 +}') + +define(`simpleNewAttribute', +`const CSSM_DB_ATTRIBUTE_INFO `k'class()$2 = +newAttributeBody($*); +') + +define(`newAttribute', +`divert(2)dnl + { $3, $4, { $5, $6 }, CSSM_DB_ATTRIBUTE_FORMAT_$7 }, +divert(-1) +ifelse(index(`$1',`S'),-1,`', +`divert(4)dnl +simpleNewAttribute($*) +divert(-1)')dnl + +ifelse(index(`$1',`U'),-1,`', +`divert(5)dnl + { $3, 0, CSSM_DB_INDEX_UNIQUE, CSSM_DB_INDEX_ON_ATTRIBUTE }, +divert(-1)')dnl +ifelse(index(`$1',`I'),-1,`', +`define(`indexIndex', incr(indexIndex))dnl +divert(6)dnl + { $3, indexIndex(), CSSM_DB_INDEX_NONUNIQUE, CSSM_DB_INDEX_ON_ATTRIBUTE }, +divert(-1)')') + +/* Start of actual output */ +divert(0)dnl +/* + * Generated by m4 from Schema.m4 please do not edit this file. + */ + +`#include ' + +`#include ' +`#include ' +`#include ' +`#include ' +`#include ' + +namespace Security { + +namespace KeychainCore { + +namespace Schema { + +// Meta attributes +simpleAttribute(` s', RelationID, 0, (char*) "RelationID", 0, NULL, UINT32) +simpleAttribute(` s', RelationName, 1, (char*) "RelationName", 0, NULL, STRING) +simpleAttribute(` s', AttributeID, 1, (char*) "AttributeID", 0, NULL, UINT32) +simpleAttribute(` s', AttributeNameFormat, 2, (char*) "AttributeNameFormat", 0, NULL, UINT32) +simpleAttribute(` s', AttributeName, 3, (char*) "AttributeName", 0, NULL, STRING) +simpleAttribute(` s', AttributeNameID, 4, (char*) "AttributeNameID", 0, NULL, BLOB) +simpleAttribute(` s', AttributeFormat, 5, (char*) "AttributeFormat", 0, NULL, UINT32) +simpleAttribute(` s', IndexType, 3, (char*) "IndexType", 0, NULL, UINT32) + +divert(-1) +startClass(Generic) +attribute(` i', CreationDate, kSecCreationDateItemAttr, (char*) "CreationDate", 0, NULL, TIME_DATE) +attribute(` i', ModDate, kSecModDateItemAttr, (char*) "ModDate", 0, NULL, TIME_DATE) +attribute(` i', Description, kSecDescriptionItemAttr, (char*) "Description", 0, NULL, BLOB) +attribute(` i', Comment, kSecCommentItemAttr, (char*) "Comment", 0, NULL, BLOB) +attribute(` i', Creator, kSecCreatorItemAttr, (char*) "Creator", 0, NULL, UINT32) +attribute(` i', Type, kSecTypeItemAttr, (char*) "Type", 0, NULL, UINT32) +attribute(` i', ScriptCode, kSecScriptCodeItemAttr, (char*) "ScriptCode", 0, NULL, SINT32) +attribute(` s', PrintName, kSecLabelItemAttr, (char*) "PrintName", 0, NULL, BLOB) +attribute(` s', Alias, kSecAlias, (char*) "Alias", 0, NULL, BLOB) +attribute(` i', Invisible, kSecInvisibleItemAttr, (char*) "Invisible", 0, NULL, SINT32) +attribute(` i', Negative, kSecNegativeItemAttr, (char*) "Negative", 0, NULL, SINT32) +attribute(` i', CustomIcon, kSecCustomIconItemAttr, (char*) "CustomIcon", 0, NULL, SINT32) +attribute(` i', Protected, kSecProtectedDataItemAttr, (char*) "Protected", 0, NULL, BLOB) +attribute(`UIi', Account, kSecAccountItemAttr, (char*) "Account", 0, NULL, BLOB) +attribute(`UIi', Service, kSecServiceItemAttr, (char*) "Service", 0, NULL, BLOB) +attribute(` i', Generic, kSecGenericItemAttr, (char*) "Generic", 0, NULL, BLOB) +endClass() + +startClass(Appleshare) +attribute(` i', CreationDate, kSecCreationDateItemAttr, (char*) "CreationDate", 0, NULL, TIME_DATE) +attribute(` i', ModDate, kSecModDateItemAttr, (char*) "ModDate", 0, NULL, TIME_DATE) +attribute(` i', Description, kSecDescriptionItemAttr, (char*) "Description", 0, NULL, BLOB) +attribute(` i', Comment, kSecCommentItemAttr, (char*) "Comment", 0, NULL, BLOB) +attribute(` i', Creator, kSecCreatorItemAttr, (char*) "Creator", 0, NULL, UINT32) +attribute(` i', Type, kSecTypeItemAttr, (char*) "Type", 0, NULL, UINT32) +attribute(` i', ScriptCode, kSecScriptCodeItemAttr, (char*) "ScriptCode", 0, NULL, SINT32) +attribute(` s', PrintName, kSecLabelItemAttr, (char*) "PrintName", 0, NULL, BLOB) +attribute(` s', Alias, kSecAlias, (char*) "Alias", 0, NULL, BLOB) +attribute(` i', Invisible, kSecInvisibleItemAttr, (char*) "Invisible", 0, NULL, SINT32) +attribute(` i', Negative, kSecNegativeItemAttr, (char*) "Negative", 0, NULL, SINT32) +attribute(` i', CustomIcon, kSecCustomIconItemAttr, (char*) "CustomIcon", 0, NULL, SINT32) +attribute(` i', Protected, kSecProtectedDataItemAttr, (char*) "Protected", 0, NULL, BLOB) +attribute(`UIi', Account, kSecAccountItemAttr, (char*) "Account", 0, NULL, BLOB) +attribute(`UIi', Volume, kSecVolumeItemAttr, (char*) "Volume", 0, NULL, BLOB) +attribute(` i', Server, kSecServerItemAttr, (char*) "Server", 0, NULL, BLOB) +attribute(` i', Protocol, kSecProtocolItemAttr, (char*) "Protocol", 0, NULL, UINT32) +attribute(`UIi', Address, kSecAddressItemAttr, (char*) "Address", 0, NULL, BLOB) +attribute(`UIi', Signature, kSecSignatureItemAttr, (char*) "Signature", 0, NULL, BLOB) +endClass() + +startClass(Internet) +attribute(` i', CreationDate, kSecCreationDateItemAttr, (char*) "CreationDate", 0, NULL, TIME_DATE) +attribute(` i', ModDate, kSecModDateItemAttr, (char*) "ModDate", 0, NULL, TIME_DATE) +attribute(` i', Description, kSecDescriptionItemAttr, (char*) "Description", 0, NULL, BLOB) +attribute(` i', Comment, kSecCommentItemAttr, (char*) "Comment", 0, NULL, BLOB) +attribute(` i', Creator, kSecCreatorItemAttr, (char*) "Creator", 0, NULL, UINT32) +attribute(` i', Type, kSecTypeItemAttr, (char*) "Type", 0, NULL, UINT32) +attribute(` i', ScriptCode, kSecScriptCodeItemAttr, (char*) "ScriptCode", 0, NULL, SINT32) +attribute(` s', PrintName, kSecLabelItemAttr, (char*) "PrintName", 0, NULL, BLOB) +attribute(` s', Alias, kSecAlias, (char*) "Alias", 0, NULL, BLOB) +attribute(` i', Invisible, kSecInvisibleItemAttr, (char*) "Invisible", 0, NULL, SINT32) +attribute(` i', Negative, kSecNegativeItemAttr, (char*) "Negative", 0, NULL, SINT32) +attribute(` i', CustomIcon, kSecCustomIconItemAttr, (char*) "CustomIcon", 0, NULL, SINT32) +attribute(` i', Protected, kSecProtectedDataItemAttr, (char*) "Protected", 0, NULL, BLOB) +attribute(`UIi', Account, kSecAccountItemAttr, (char*) "Account", 0, NULL, BLOB) +attribute(`UIi', SecurityDomain, kSecSecurityDomainItemAttr, (char*) "SecurityDomain", 0, NULL, BLOB) +attribute(`UIi', Server, kSecServerItemAttr, (char*) "Server", 0, NULL, BLOB) +attribute(`UIi', Protocol, kSecProtocolItemAttr, (char*) "Protocol", 0, NULL, UINT32) +attribute(`UIi', AuthType, kSecAuthenticationTypeItemAttr, (char*) "AuthType", 0, NULL, BLOB) +attribute(`UIi', Port, kSecPortItemAttr, (char*) "Port", 0, NULL, UINT32) +attribute(`UIi', Path, kSecPathItemAttr, (char*) "Path", 0, NULL, BLOB) +endClass() + +startNewClass(X509Certificate) +newAttribute(`UISs', CertType, kSecCertTypeItemAttr, (char*) "CertType", 0, NULL, UINT32) +newAttribute(` Ss', CertEncoding, kSecCertEncodingItemAttr, (char*) "CertEncoding", 0, NULL, UINT32) +newAttribute(` Ss', PrintName, kSecLabelItemAttr, (char*) "PrintName", 0, NULL, BLOB) +newAttribute(` ISs', Alias, kSecAlias, (char*) "Alias", 0, NULL, BLOB) +newAttribute(` ISs', Subject, kSecSubjectItemAttr, (char*) "Subject", 0, NULL, BLOB) +newAttribute(`UISs', Issuer, kSecIssuerItemAttr, (char*) "Issuer", 0, NULL, BLOB) +newAttribute(`UISs', SerialNumber, kSecSerialNumberItemAttr, (char*) "SerialNumber", 0, NULL, BLOB) +newAttribute(` ISs', SubjectKeyIdentifier, kSecSubjectKeyIdentifierItemAttr, (char*) "SubjectKeyIdentifier", 0, NULL, BLOB) +newAttribute(` ISs', PublicKeyHash, kSecPublicKeyHashItemAttr, (char*) "PublicKeyHash", 0, NULL, BLOB) +endNewClass() + +startNewClass(X509Crl) +newAttribute(`UISs', CrlType, kSecCrlType, (char*) "CrlType", 0, NULL, UINT32) +newAttribute(` Ss', CrlEncoding, kSecCrlEncodingItemAttr, (char*) "CrlEncoding", 0, NULL, UINT32) +newAttribute(` Ss', PrintName, kSecLabelItemAttr, (char*) "PrintName", 0, NULL, BLOB) +newAttribute(` Ss', Alias, kSecAlias, (char*) "Alias", 0, NULL, BLOB) +newAttribute(`UISs', Issuer, kSecIssuerItemAttr, (char*) "Issuer", 0, NULL, BLOB) +newAttribute(`UISs', ThisUpdate, kSecThisUpdateItemAttr, (char*) "ThisUpdate", 0, NULL, BLOB) +newAttribute(`UISs', NextUpdate, kSecNextUpdateItemAttr, (char*) "NextUpdate", 0, NULL, BLOB) +newAttribute(` Ss', URI, kSecUriItemAttr, (char*) "URI", 0, NULL, BLOB) +newAttribute(` ISs', CrlNumber, kSecCrlNumberItemAttr, (char*) "CrlNumber", 0, NULL, UINT32) +newAttribute(` ISs', DeltaCrlNumber, kSecDeltaCrlNumberItemAttr, (char*) "DeltaCrlNumber", 0, NULL, UINT32) +endNewClass() + +startNewClass(UserTrust) +newAttribute(`UISs', TrustedCertificate, kSecTrustCertAttr, (char*) "TrustedCertificate", 0, NULL, BLOB) +newAttribute(`UISs', TrustedPolicy, kSecTrustPolicyAttr, (char*) "TrustedPolicy", 0, NULL, BLOB) +newAttribute(` Ss', PrintName, kSecLabelItemAttr, (char*) "PrintName", 0, NULL, BLOB) +endNewClass() + +startNewClass(UnlockReferral) +newAttribute(`UISs', Type, kSecReferralTypeAttr, (char*) "Type", 0, NULL, UINT32) +newAttribute(`UISs', DbName, kSecReferralDbNameAttr, (char*) "DbName", 0, NULL, STRING) +newAttribute(`UISs', DbNetname, kSecReferralDbNetnameAttr, (char*) "DbNetname", 0, NULL, BLOB) +newAttribute(`UISs', DbGuid, kSecReferralDbGuidAttr, (char*) "DbGuid", 0, NULL, BLOB) +newAttribute(`UISs', DbSSID, kSecReferralDbSSIDAttr, (char*) "DbSSID", 0, NULL, UINT32) +newAttribute(`UISs', DbSSType, kSecReferralDbSSTypeAttr, (char*) "DbSSType", 0, NULL, UINT32) +newAttribute(` ISs', KeyLabel, kSecReferralKeyLabelAttr, (char*) "KeyLabel", 0, NULL, BLOB) +newAttribute(` ISs', KeyAppTag, kSecReferralKeyAppTagAttr, (char*) "KeyAppTag", 0, NULL, BLOB) +newAttribute(` Ss', PrintName, kSecLabelItemAttr, (char*) "PrintName", 0, NULL, BLOB) +newAttribute(` Ss', Alias, kSecAlias, (char*) "Alias", 0, NULL, BLOB) +endNewClass() + +// Extended Attribute +startNewClass(ExtendedAttribute) +newAttribute(`UISs', RecordType, kExtendedAttrRecordTypeAttr, (char*) "RecordType", 0, NULL, UINT32) +newAttribute(`UISs', ItemID, kExtendedAttrItemIDAttr, (char*) "ItemID", 0, NULL, BLOB) +newAttribute(`UISs', AttributeName, kExtendedAttrAttributeNameAttr, (char*) "AttributeName", 0, NULL, BLOB) +newAttribute(` Ss', ModDate, kSecModDateItemAttr, (char*) "ModDate", 0, NULL, TIME_DATE) +newAttribute(` Ss', AttributeValue, kExtendedAttrAttributeValueAttr, (char*) "AttributeValue", 0, NULL, BLOB) +endNewClass() + +divert(3) +static const CSSM_DB_RECORD_ATTRIBUTE_INFO Attributes[] = +{ + attrInfo(CSSM_DL_DB_RECORD_GENERIC_PASSWORD, Generic), + attrInfo(CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD, Appleshare), + attrInfo(CSSM_DL_DB_RECORD_INTERNET_PASSWORD, Internet) +}; + +static const CSSM_DB_RECORD_INDEX_INFO Indices[] = +{ + indexInfo(CSSM_DL_DB_RECORD_GENERIC_PASSWORD, Generic), + indexInfo(CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD, Appleshare), + indexInfo(CSSM_DL_DB_RECORD_INTERNET_PASSWORD, Internet) +}; + +static const CSSM_DB_PARSING_MODULE_INFO ParseInfos[] = +{ + parseInfo(), + parseInfo(), + parseInfo() +}; + +// +// Public stuff +// +const CSSM_DBINFO DBInfo = +{ + sizeof(Attributes) / sizeof(CSSM_DB_RECORD_ATTRIBUTE_INFO), + const_cast(ParseInfos), + const_cast(Attributes), + const_cast(Indices), + CSSM_TRUE, + NULL, + NULL +}; + +// +// Schema methods +// +CSSM_DB_RECORDTYPE +recordTypeFor(SecItemClass itemClass) +{ + switch (itemClass) + { + case kSecGenericPasswordItemClass: return CSSM_DL_DB_RECORD_GENERIC_PASSWORD; + case kSecInternetPasswordItemClass: return CSSM_DL_DB_RECORD_INTERNET_PASSWORD; + case kSecAppleSharePasswordItemClass: return CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD; + default: return CSSM_DB_RECORDTYPE(itemClass); + } +} + +SecItemClass +itemClassFor(CSSM_DB_RECORDTYPE recordType) +{ + switch (recordType) + { + case CSSM_DL_DB_RECORD_GENERIC_PASSWORD: return kSecGenericPasswordItemClass; + case CSSM_DL_DB_RECORD_INTERNET_PASSWORD: return kSecInternetPasswordItemClass; + case CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD: return kSecAppleSharePasswordItemClass; + default: return SecItemClass(recordType); + } +} + +const CSSM_DB_ATTRIBUTE_INFO & +attributeInfo(SecKeychainAttrType attrType) +{ + switch (attrType) + { + case kSecCreationDateItemAttr: return kGenericCreationDate; + case kSecModDateItemAttr: return kGenericModDate; + case kSecDescriptionItemAttr: return kGenericDescription; + case kSecCommentItemAttr: return kGenericComment; + case kSecCreatorItemAttr: return kGenericCreator; + case kSecTypeItemAttr: return kGenericType; + case kSecScriptCodeItemAttr: return kGenericScriptCode; + case kSecLabelItemAttr: return kGenericPrintName; + case kSecAlias: return kGenericAlias; + case kSecInvisibleItemAttr: return kGenericInvisible; + case kSecNegativeItemAttr: return kGenericNegative; + case kSecCustomIconItemAttr: return kGenericCustomIcon; + /* Unique Generic password attributes */ + case kSecAccountItemAttr: return kGenericAccount; + case kSecServiceItemAttr: return kGenericService; + case kSecGenericItemAttr: return kGenericGeneric; + /* Unique Appleshare password attributes */ + case kSecVolumeItemAttr: return kAppleshareVolume; + case kSecAddressItemAttr: return kAppleshareAddress; + case kSecSignatureItemAttr: return kAppleshareSignature; + /* Unique AppleShare and Internet attributes */ + case kSecServerItemAttr: return kAppleshareServer; + case kSecProtocolItemAttr: return kAppleshareProtocol; + /* Unique Internet password attributes */ + case kSecSecurityDomainItemAttr: return kInternetSecurityDomain; + case kSecAuthenticationTypeItemAttr: return kInternetAuthType; + case kSecPortItemAttr: return kInternetPort; + case kSecPathItemAttr: return kInternetPath; + /* Unique Certificate attributes */ + case kSecCertTypeItemAttr: return kX509CertificateCertType; + case kSecCertEncodingItemAttr: return kX509CertificateCertEncoding; + case kSecSubjectItemAttr: return kX509CertificateSubject; + case kSecIssuerItemAttr: return kX509CertificateIssuer; + case kSecSerialNumberItemAttr: return kX509CertificateSerialNumber; + case kSecSubjectKeyIdentifierItemAttr: return kX509CertificateSubjectKeyIdentifier; + case kSecPublicKeyHashItemAttr: return kX509CertificatePublicKeyHash; + /* Unique UserTrust attributes */ + case kSecTrustCertAttr: return kUserTrustTrustedCertificate; + case kSecTrustPolicyAttr: return kUserTrustTrustedPolicy; + /* Unique UnlockReferral attributes */ + case kSecReferralTypeAttr: return kUnlockReferralType; + case kSecReferralDbNameAttr: return kUnlockReferralDbName; + case kSecReferralDbGuidAttr: return kUnlockReferralDbGuid; + case kSecReferralDbSSIDAttr: return kUnlockReferralDbSSID; + case kSecReferralDbSSTypeAttr: return kUnlockReferralDbSSType; + case kSecReferralDbNetnameAttr: return kUnlockReferralDbNetname; + case kSecReferralKeyLabelAttr: return kUnlockReferralKeyLabel; + case kSecReferralKeyAppTagAttr: return kUnlockReferralKeyAppTag; + /* Unique ExtendedAttribute attributes */ + case kExtendedAttrRecordTypeAttr: return kExtendedAttributeRecordType; + case kExtendedAttrItemIDAttr: return kExtendedAttributeItemID; + case kExtendedAttrAttributeNameAttr: return kExtendedAttributeAttributeName; + case kExtendedAttrAttributeValueAttr: return kExtendedAttributeAttributeValue; + /* ??? */ + case kSecProtectedDataItemAttr: return kGenericProtected; + default: + { + if (attrType == 7) + { + return kGenericPrintName; + } + else if (attrType == 8) + { + return kGenericAlias; + } + MacOSError::throwMe(errSecNoSuchAttr); + } + } +} + +} // end namespace Schema + +} // end namespace KeychainCore + +} // end namespace Security