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