]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_cdsa_utilities/lib/Schema.m4
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_cdsa_utilities / lib / Schema.m4
diff --git a/Security/libsecurity_cdsa_utilities/lib/Schema.m4 b/Security/libsecurity_cdsa_utilities/lib/Schema.m4
new file mode 100644 (file)
index 0000000..5bc9248
--- /dev/null
@@ -0,0 +1,471 @@
+divert(-1)
+changecom(/*, */)
+/*
+ * Copyright (c) 2000-2002 Apple 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<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)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 <security_cdsa_utilities/Schema.h>'
+
+`#include <Security/SecCertificate.h>'
+`#include <Security/SecTrustPriv.h>'
+`#include <Security/SecKeychainItemPriv.h>'
+`#include <Security/cssmapple.h>'
+`#include <security_utilities/errors.h>'
+
+`#pragma clang diagnostic push'
+`#pragma clang diagnostic ignored "-Wunused-const-variable"'
+
+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 'ashp': 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 'ashp';
+    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
+
+`#pragma clang diagnostic pop'