4 * Copyright (c) 2000-2002 Apple Computer, Inc. All Rights Reserved.
6 * The contents of this file constitute Original Code as defined in and are
7 * subject to the Apple Public Source License Version 1.2 (the 'License').
8 * You may not use this file except in compliance with the License. Please obtain
9 * a copy of the License at http://www.apple.com/publicsource and read it before
12 * This Original Code and all software distributed under the License are
13 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
14 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
15 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
16 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
17 * specific language governing rights and limitations under the License.
21 `define(`arrayIndex', 0)dnl
22 define(`class', $1)dnl
24 // $1 password attributes
25 static const CSSM_DB_ATTRIBUTE_INFO $1Attributes[] =
28 // $1 password indices
29 static const CSSM_DB_INDEX_INFO $1Indices[] =
37 ` // Unique (primary) index'
39 ` // Secondary indices'
45 define(`attributeBody',
47 ifelse(index(`$1',`s'),-1,
48 ` CSSM_DB_ATTRIBUTE_NAME_AS_INTEGER,
50 ` CSSM_DB_ATTRIBUTE_NAME_AS_STRING,
52 CSSM_DB_ATTRIBUTE_FORMAT_$7
55 define(`simpleAttribute',
56 `const CSSM_DB_ATTRIBUTE_INFO $2 =
61 `ifelse(index(`$1',`U'),-1,`',
65 CSSM_DB_INDEX_ON_ATTRIBUTE,
69 ifelse(index(`$1',`I'),-1,`',
72 CSSM_DB_INDEX_NONUNIQUE,
73 CSSM_DB_INDEX_ON_ATTRIBUTE,
78 dnl const CSSM_DB_ATTRIBUTE_INFO &`k'class()$2 = class()Attributes[arrayIndex()];
79 `#define k'class()$2 class()Attributes[arrayIndex()];
82 define(`arrayIndex', incr(arrayIndex))dnl
88 sizeof($2Attributes) / sizeof(CSSM_DB_ATTRIBUTE_INFO),
89 const_cast<CSSM_DB_ATTRIBUTE_INFO_PTR>($2Attributes)
95 sizeof($2Indices) / sizeof(CSSM_DB_INDEX_INFO),
96 const_cast<CSSM_DB_INDEX_INFO_PTR>($2Indices)
101 CSSM_DB_RECORDTYPE_APP_DEFINED_START,
110 define(`startNewClass',
111 `define(`indexIndex', 0)dnl
112 define(`class', $1)dnl
115 const CSSM_DB_SCHEMA_ATTRIBUTE_INFO $1SchemaAttributeList[] =
119 const CSSM_DB_SCHEMA_INDEX_INFO $1SchemaIndexList[] =
122 define(`endNewClass',
126 const uint32 class()SchemaAttributeCount = sizeof(class()SchemaAttributeList) / sizeof(CSSM_DB_SCHEMA_ATTRIBUTE_INFO);
129 ` // Unique (primary) index'
131 ` // Secondary indices'
135 const uint32 class()SchemaIndexCount = sizeof(class()SchemaIndexList) / sizeof(CSSM_DB_SCHEMA_INDEX_INFO);
142 define(`newAttributeBody',
144 ifelse(index(`$1',`s'),-1,
145 ` CSSM_DB_ATTRIBUTE_NAME_AS_INTEGER,
147 ` CSSM_DB_ATTRIBUTE_NAME_AS_STRING,
149 CSSM_DB_ATTRIBUTE_FORMAT_$7
152 define(`simpleNewAttribute',
153 `const CSSM_DB_ATTRIBUTE_INFO `k'class()$2 =
154 newAttributeBody($*);
157 define(`newAttribute',
159 { $3, $4, { $5, $6 }, CSSM_DB_ATTRIBUTE_FORMAT_$7 },
161 ifelse(index(`$1',`S'),-1,`',
163 simpleNewAttribute($*)
166 ifelse(index(`$1',`U'),-1,`',
168 { $3, 0, CSSM_DB_INDEX_UNIQUE, CSSM_DB_INDEX_ON_ATTRIBUTE },
170 ifelse(index(`$1',`I'),-1,`',
171 `define(`indexIndex', incr(indexIndex))dnl
173 { $3, indexIndex(), CSSM_DB_INDEX_NONUNIQUE, CSSM_DB_INDEX_ON_ATTRIBUTE },
176 /* Start of actual output */
179 * Generated by m4 from Schema.m4 please do not edit this file.
182 `#include <Security/Schema.h>'
184 `#include <Security/SecCertificate.h>'
185 `#include <Security/TrustItem.h>'
186 `#include <Security/SecKeychainAPIPriv.h>'
187 `#include <Security/cssmapple.h>'
188 `#include <Security/utilities.h>'
192 namespace KeychainCore {
197 simpleAttribute(` s', RelationID, 0, "RelationID", 0, NULL, UINT32)
198 simpleAttribute(` s', RelationName, 1, "RelationName", 0, NULL, STRING)
199 simpleAttribute(` s', AttributeID, 1, "AttributeID", 0, NULL, UINT32)
200 simpleAttribute(` s', AttributeNameFormat, 2, "AttributeNameFormat", 0, NULL, UINT32)
201 simpleAttribute(` s', AttributeName, 3, "AttributeName", 0, NULL, STRING)
202 simpleAttribute(` s', AttributeNameID, 4, "AttributeNameID", 0, NULL, BLOB)
203 simpleAttribute(` s', AttributeFormat, 5, "AttributeFormat", 0, NULL, UINT32)
204 simpleAttribute(` s', IndexType, 3, "IndexType", 0, NULL, UINT32)
208 attribute(` i', CreationDate, kSecCreationDateItemAttr, "CreationDate", 0, NULL, TIME_DATE)
209 attribute(` i', ModDate, kSecModDateItemAttr, "ModDate", 0, NULL, TIME_DATE)
210 attribute(` i', Description, kSecDescriptionItemAttr, "Description", 0, NULL, BLOB)
211 attribute(` i', Comment, kSecCommentItemAttr, "Comment", 0, NULL, BLOB)
212 attribute(` i', Creator, kSecCreatorItemAttr, "Creator", 0, NULL, UINT32)
213 attribute(` i', Type, kSecTypeItemAttr, "Type", 0, NULL, UINT32)
214 attribute(` i', ScriptCode, kSecScriptCodeItemAttr, "ScriptCode", 0, NULL, SINT32)
215 attribute(` s', PrintName, kSecLabelItemAttr, "PrintName", 0, NULL, BLOB)
216 attribute(` s', Alias, kSecAliasItemAttr, "Alias", 0, NULL, BLOB)
217 attribute(` i', Invisible, kSecInvisibleItemAttr, "Invisible", 0, NULL, SINT32)
218 attribute(` i', Negative, kSecNegativeItemAttr, "Negative", 0, NULL, SINT32)
219 attribute(` i', CustomIcon, kSecCustomIconItemAttr, "CustomIcon", 0, NULL, SINT32)
220 attribute(` i', Protected, kSecProtectedDataItemAttr, "Protected", 0, NULL, BLOB)
221 attribute(`UIi', Account, kSecAccountItemAttr, "Account", 0, NULL, BLOB)
222 attribute(`UIi', Service, kSecServiceItemAttr, "Service", 0, NULL, BLOB)
223 attribute(` i', Generic, kSecGenericItemAttr, "Generic", 0, NULL, BLOB)
226 startClass(Appleshare)
227 attribute(` i', CreationDate, kSecCreationDateItemAttr, "CreationDate", 0, NULL, TIME_DATE)
228 attribute(` i', ModDate, kSecModDateItemAttr, "ModDate", 0, NULL, TIME_DATE)
229 attribute(` i', Description, kSecDescriptionItemAttr, "Description", 0, NULL, BLOB)
230 attribute(` i', Comment, kSecCommentItemAttr, "Comment", 0, NULL, BLOB)
231 attribute(` i', Creator, kSecCreatorItemAttr, "Creator", 0, NULL, UINT32)
232 attribute(` i', Type, kSecTypeItemAttr, "Type", 0, NULL, UINT32)
233 attribute(` i', ScriptCode, kSecScriptCodeItemAttr, "ScriptCode", 0, NULL, SINT32)
234 attribute(` s', PrintName, kSecLabelItemAttr, "PrintName", 0, NULL, BLOB)
235 attribute(` s', Alias, kSecAliasItemAttr, "Alias", 0, NULL, BLOB)
236 attribute(` i', Invisible, kSecInvisibleItemAttr, "Invisible", 0, NULL, SINT32)
237 attribute(` i', Negative, kSecNegativeItemAttr, "Negative", 0, NULL, SINT32)
238 attribute(` i', CustomIcon, kSecCustomIconItemAttr, "CustomIcon", 0, NULL, SINT32)
239 attribute(` i', Protected, kSecProtectedDataItemAttr, "Protected", 0, NULL, BLOB)
240 attribute(`UIi', Account, kSecAccountItemAttr, "Account", 0, NULL, BLOB)
241 attribute(`UIi', Volume, kSecVolumeItemAttr, "Volume", 0, NULL, BLOB)
242 attribute(` i', Server, kSecServerItemAttr, "Server", 0, NULL, BLOB)
243 attribute(` i', Protocol, kSecProtocolItemAttr, "Protocol", 0, NULL, UINT32)
244 attribute(`UIi', Address, kSecAddressItemAttr, "Address", 0, NULL, BLOB)
245 attribute(`UIi', Signature, kSecSignatureItemAttr, "Signature", 0, NULL, BLOB)
249 attribute(` i', CreationDate, kSecCreationDateItemAttr, "CreationDate", 0, NULL, TIME_DATE)
250 attribute(` i', ModDate, kSecModDateItemAttr, "ModDate", 0, NULL, TIME_DATE)
251 attribute(` i', Description, kSecDescriptionItemAttr, "Description", 0, NULL, BLOB)
252 attribute(` i', Comment, kSecCommentItemAttr, "Comment", 0, NULL, BLOB)
253 attribute(` i', Creator, kSecCreatorItemAttr, "Creator", 0, NULL, UINT32)
254 attribute(` i', Type, kSecTypeItemAttr, "Type", 0, NULL, UINT32)
255 attribute(` i', ScriptCode, kSecScriptCodeItemAttr, "ScriptCode", 0, NULL, SINT32)
256 attribute(` s', PrintName, kSecLabelItemAttr, "PrintName", 0, NULL, BLOB)
257 attribute(` s', Alias, kSecAliasItemAttr, "Alias", 0, NULL, BLOB)
258 attribute(` i', Invisible, kSecInvisibleItemAttr, "Invisible", 0, NULL, SINT32)
259 attribute(` i', Negative, kSecNegativeItemAttr, "Negative", 0, NULL, SINT32)
260 attribute(` i', CustomIcon, kSecCustomIconItemAttr, "CustomIcon", 0, NULL, SINT32)
261 attribute(` i', Protected, kSecProtectedDataItemAttr, "Protected", 0, NULL, BLOB)
262 attribute(`UIi', Account, kSecAccountItemAttr, "Account", 0, NULL, BLOB)
263 attribute(`UIi', SecurityDomain, kSecSecurityDomainItemAttr, "SecurityDomain", 0, NULL, BLOB)
264 attribute(`UIi', Server, kSecServerItemAttr, "Server", 0, NULL, BLOB)
265 attribute(`UIi', Protocol, kSecProtocolItemAttr, "Protocol", 0, NULL, UINT32)
266 attribute(`UIi', AuthType, kSecAuthenticationTypeItemAttr, "AuthType", 0, NULL, BLOB)
267 attribute(`UIi', Port, kSecPortItemAttr, "Port", 0, NULL, UINT32)
268 attribute(`UIi', Path, kSecPathItemAttr, "Path", 0, NULL, BLOB)
271 startNewClass(X509Certificate)
272 newAttribute(`UISs', CertType, kSecCertTypeItemAttr, "CertType", 0, NULL, UINT32)
273 newAttribute(` Ss', CertEncoding, kSecCertEncodingItemAttr, "CertEncoding", 0, NULL, UINT32)
274 newAttribute(` Ss', PrintName, kSecLabelItemAttr, "PrintName", 0, NULL, BLOB)
275 newAttribute(` ISs', Alias, kSecAliasItemAttr, "Alias", 0, NULL, BLOB)
276 newAttribute(` ISs', Subject, kSecSubjectItemAttr, "Subject", 0, NULL, BLOB)
277 newAttribute(`UISs', Issuer, kSecIssuerItemAttr, "Issuer", 0, NULL, BLOB)
278 newAttribute(`UISs', SerialNumber, kSecSerialNumberItemAttr, "SerialNumber", 0, NULL, BLOB)
279 newAttribute(` ISs', SubjectKeyIdentifier, kSecSubjectKeyIdentifierItemAttr, "SubjectKeyIdentifier", 0, NULL, BLOB)
280 newAttribute(` ISs', PublicKeyHash, kSecPublicKeyHashItemAttr, "PublicKeyHash", 0, NULL, BLOB)
283 startNewClass(X509Crl)
284 newAttribute(`UISs', CrlType, kSecCrlTypeItemAttr, "CrlType", 0, NULL, UINT32)
285 newAttribute(` Ss', CrlEncoding, kSecCrlEncodingItemAttr, "CrlEncoding", 0, NULL, UINT32)
286 newAttribute(` Ss', PrintName, kSecLabelItemAttr, "PrintName", 0, NULL, BLOB)
287 newAttribute(` Ss', Alias, kSecAliasItemAttr, "Alias", 0, NULL, BLOB)
288 newAttribute(`UISs', Issuer, kSecIssuerItemAttr, "Issuer", 0, NULL, BLOB)
289 newAttribute(`UISs', ThisUpdate, kSecThisUpdateItemAttr, "ThisUpdate", 0, NULL, BLOB)
290 newAttribute(`UISs', NextUpdate, kSecNextUpdateItemAttr, "NextUpdate", 0, NULL, BLOB)
291 newAttribute(` Ss', URI, kSecUriItemAttr, "URI", 0, NULL, BLOB)
292 newAttribute(` ISs', CrlNumber, kSecCrlNumberItemAttr, "CrlNumber", 0, NULL, UINT32)
293 newAttribute(` ISs', DeltaCrlNumber, kSecDeltaCrlNumberItemAttr, "DeltaCrlNumber", 0, NULL, UINT32)
296 startNewClass(UserTrust)
297 newAttribute(`UISs', TrustedCertificate, kSecTrustCertAttr, "TrustedCertificate", 0, NULL, BLOB)
298 newAttribute(`UISs', TrustedPolicy, kSecTrustPolicyAttr, "TrustedPolicy", 0, NULL, BLOB)
299 newAttribute(` Ss', PrintName, kSecLabelItemAttr, "PrintName", 0, NULL, BLOB)
304 static const CSSM_DB_RECORD_ATTRIBUTE_INFO Attributes[] =
306 attrInfo(CSSM_DL_DB_RECORD_GENERIC_PASSWORD, Generic),
307 attrInfo(CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD, Appleshare),
308 attrInfo(CSSM_DL_DB_RECORD_INTERNET_PASSWORD, Internet)
311 static const CSSM_DB_RECORD_INDEX_INFO Indices[] =
313 indexInfo(CSSM_DL_DB_RECORD_GENERIC_PASSWORD, Generic),
314 indexInfo(CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD, Appleshare),
315 indexInfo(CSSM_DL_DB_RECORD_INTERNET_PASSWORD, Internet)
318 static const CSSM_DB_PARSING_MODULE_INFO ParseInfos[] =
328 const CSSM_DBINFO DBInfo =
330 sizeof(Attributes) / sizeof(CSSM_DB_RECORD_ATTRIBUTE_INFO),
331 const_cast<CSSM_DB_PARSING_MODULE_INFO_PTR>(ParseInfos),
332 const_cast<CSSM_DB_RECORD_ATTRIBUTE_INFO_PTR>(Attributes),
333 const_cast<CSSM_DB_RECORD_INDEX_INFO_PTR>(Indices),
343 recordTypeFor(SecItemClass itemClass)
347 case kSecGenericPasswordItemClass: return CSSM_DL_DB_RECORD_GENERIC_PASSWORD;
348 case kSecInternetPasswordItemClass: return CSSM_DL_DB_RECORD_INTERNET_PASSWORD;
349 case kSecAppleSharePasswordItemClass: return CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD;
350 default: return CSSM_DB_RECORDTYPE(itemClass);
355 itemClassFor(CSSM_DB_RECORDTYPE recordType)
359 case CSSM_DL_DB_RECORD_GENERIC_PASSWORD: return kSecGenericPasswordItemClass;
360 case CSSM_DL_DB_RECORD_INTERNET_PASSWORD: return kSecInternetPasswordItemClass;
361 case CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD: return kSecAppleSharePasswordItemClass;
362 default: return SecItemClass(recordType);
366 const CSSM_DB_ATTRIBUTE_INFO &
367 attributeInfo(SecKeychainAttrType attrType)
371 case kSecCreationDateItemAttr: return kGenericCreationDate;
372 case kSecModDateItemAttr: return kGenericModDate;
373 case kSecDescriptionItemAttr: return kGenericDescription;
374 case kSecCommentItemAttr: return kGenericComment;
375 case kSecCreatorItemAttr: return kGenericCreator;
376 case kSecTypeItemAttr: return kGenericType;
377 case kSecScriptCodeItemAttr: return kGenericScriptCode;
378 case kSecLabelItemAttr: return kGenericPrintName;
379 case kSecAliasItemAttr: return kGenericAlias;
380 case kSecInvisibleItemAttr: return kGenericInvisible;
381 case kSecNegativeItemAttr: return kGenericNegative;
382 case kSecCustomIconItemAttr: return kGenericCustomIcon;
383 /* Unique Generic password attributes */
384 case kSecAccountItemAttr: return kGenericAccount;
385 case kSecServiceItemAttr: return kGenericService;
386 case kSecGenericItemAttr: return kGenericGeneric;
387 /* Unique Appleshare password attributes */
388 case kSecVolumeItemAttr: return kAppleshareVolume;
389 case kSecAddressItemAttr: return kAppleshareAddress;
390 case kSecSignatureItemAttr: return kAppleshareSignature;
391 /* Unique AppleShare and Internet attributes */
392 case kSecServerItemAttr: return kAppleshareServer;
393 case kSecProtocolItemAttr: return kAppleshareProtocol;
394 /* Unique Internet password attributes */
395 case kSecSecurityDomainItemAttr: return kInternetSecurityDomain;
396 case kSecAuthenticationTypeItemAttr: return kInternetAuthType;
397 case kSecPortItemAttr: return kInternetPort;
398 case kSecPathItemAttr: return kInternetPath;
399 /* Unique Certificate attributes */
400 case kSecCertTypeItemAttr: return kX509CertificateCertType;
401 case kSecCertEncodingItemAttr: return kX509CertificateCertEncoding;
402 case kSecSubjectItemAttr: return kX509CertificateSubject;
403 case kSecIssuerItemAttr: return kX509CertificateIssuer;
404 case kSecSerialNumberItemAttr: return kX509CertificateSerialNumber;
405 case kSecSubjectKeyIdentifierItemAttr: return kX509CertificateSubjectKeyIdentifier;
406 case kSecPublicKeyHashItemAttr: return kX509CertificatePublicKeyHash;
407 /* Unique UserTrust attributes */
408 case kSecTrustCertAttr: return kUserTrustTrustedCertificate;
409 case kSecTrustPolicyAttr: return kUserTrustTrustedPolicy;
410 default: MacOSError::throwMe(errSecNoSuchAttr); // @@@ Not really but whatever.
414 } // end namespace Schema
416 } // end namespace KeychainCore
418 } // end namespace Security