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)define(`class', $1)divert(0)// $1 password attributes
static const CSSM_DB_ATTRIBUTE_INFO $1Attributes[] =
{
divert(1)// $1 password indices
static const CSSM_DB_INDEX_INFO $1Indices[] =
{')
define(`endClass',
`divert(0)};
divert(1)` // Unique (primary) index'
undivert(3)
` // Secondary indices'
undivert(4)};
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) {
CSSM_DB_INDEX_UNIQUE,
CSSM_DB_INDEX_ON_ATTRIBUTE,
attributeBody($*)
},
')ifelse(index(`$1',`I'),-1,`',
`divert(4) {
CSSM_DB_INDEX_NONUNIQUE,
CSSM_DB_INDEX_ON_ATTRIBUTE,
attributeBody($*)
},
')divert(2)`divert(0)attributeBody($*),define(`arrayIndex', incr(arrayIndex))')
define(`attrInfo',
`{
$1,
sizeof($2Attributes) / sizeof(CSSM_DB_ATTRIBUTE_INFO),
const_cast<CSSM_DB_ATTRIBUTE_INFO_PTR>($2Attributes)
}')
define(`indexInfo',
`{
$1,
sizeof($2Indices) / sizeof(CSSM_DB_INDEX_INFO),
const_cast<CSSM_DB_INDEX_INFO_PTR>($2Indices)
}')
define(`parseInfo',
`{
CSSM_DB_RECORDTYPE_APP_DEFINED_START,
{
{0,0,0,{0}},
{0,0},
0,
0
}
}')
define(`startNewClass',
`define(`indexIndex', 0)define(`class', $1)divert(2)// $1 attributes
const CSSM_DB_SCHEMA_ATTRIBUTE_INFO $1SchemaAttributeList[] =
{
divert(3)// $1 indices
const CSSM_DB_SCHEMA_INDEX_INFO $1SchemaIndexList[] =
{')
define(`endNewClass',
`divert(2)};
const uint32 class()SchemaAttributeCount = sizeof(class()SchemaAttributeList) / sizeof(CSSM_DB_SCHEMA_ATTRIBUTE_INFO);
divert(3)` // Unique (primary) index'
undivert(5)
` // Secondary indices'
undivert(6)};
const uint32 class()SchemaIndexCount = sizeof(class()SchemaIndexList) / sizeof(CSSM_DB_SCHEMA_INDEX_INFO);
undivert(4)divert(0)undivert(2)undivert(3)
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) { $3, $4, { $5, $6 }, CSSM_DB_ATTRIBUTE_FORMAT_$7 },
divert(-1)
ifelse(index(`$1',`S'),-1,`',
`divert(4)simpleNewAttribute($*)
divert(-1)')
ifelse(index(`$1',`U'),-1,`',
`divert(5) { $3, 0, CSSM_DB_INDEX_UNIQUE, CSSM_DB_INDEX_ON_ATTRIBUTE },
divert(-1)')ifelse(index(`$1',`I'),-1,`',
`define(`indexIndex', incr(indexIndex))divert(6) { $3, indexIndex(), CSSM_DB_INDEX_NONUNIQUE, CSSM_DB_INDEX_ON_ATTRIBUTE },
divert(-1)')')
/* Start of actual output */
divert(0)/*
* Generated by m4 from Schema.m4 please do not edit this file.
*/
`
`````
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<CSSM_DB_PARSING_MODULE_INFO_PTR>(ParseInfos),
const_cast<CSSM_DB_RECORD_ATTRIBUTE_INFO_PTR>(Attributes),
const_cast<CSSM_DB_RECORD_INDEX_INFO_PTR>(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