]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_cdsa_client/lib/mds_standard.cpp
Security-57336.1.9.tar.gz
[apple/security.git] / OSX / libsecurity_cdsa_client / lib / mds_standard.cpp
diff --git a/OSX/libsecurity_cdsa_client/lib/mds_standard.cpp b/OSX/libsecurity_cdsa_client/lib/mds_standard.cpp
new file mode 100644 (file)
index 0000000..8d70915
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2000-2004,2011,2014 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.
+ */
+
+
+//
+// mds_standard - standard-defined MDS record types
+//
+#include <security_cdsa_client/mds_standard.h>
+#include <security_cdsa_client/dlquery.h>
+
+
+namespace Security {
+namespace MDSClient {
+
+
+//
+// CDSA Common relation (one record per module)
+//
+static const char * const commonAttributes[] = {
+       "ModuleID",
+       "ModuleName",
+       "Path",
+       "Desc",
+       "DynamicFlag",
+       "MultiThreadFlag",
+       "ServiceMask",
+       NULL
+};
+Common::Common() : Record(commonAttributes) { }
+
+string Common::moduleID() const                                        { return mAttributes[0]; }
+string Common::moduleName() const                              { return mAttributes[1]; }
+string Common::path() const                                            { return mAttributes[2]; }
+string Common::description() const                             { return mAttributes[3]; }
+bool Common::dynamic() const                                   { return mAttributes[4]; }
+bool Common::singleThreaded() const                            { return !mAttributes[5]; }
+CSSM_SERVICE_MASK Common::serviceMask() const   { return mAttributes[6]; }
+
+
+//
+// Common::Carrier draws in the Common fields for anything with
+// a ModuleID attribute (which must be the first attribute listed)
+//
+Common::Carrier::~Carrier() { }
+
+Common &Common::Carrier::common() const
+{
+       if (!mCommon) {
+               const CssmDbRecordAttributeData &attrs
+                       = dynamic_cast<const Record *>(this)->attributes();
+               RefPointer<Common> rpc;
+               rpc = Table<Common>(mds()).fetch(
+                       Attribute("ModuleID") == string(attrs[0]),
+                       CSSMERR_DL_ENDOFDATA);
+               mCommon = rpc;
+       }
+       return *mCommon;
+}
+
+
+//
+// Attributes that are common to all primary relations
+//
+static const char * const primaryAttributes[] = {
+    "ModuleID",
+       "SSID",
+       "ModuleName",
+       "ProductVersion",
+       "Vendor",
+       NULL
+};
+PrimaryRecord::PrimaryRecord(const char * const * names)
+       : Record(primaryAttributes)
+{
+       addAttributes(names);
+}
+
+string PrimaryRecord::moduleID() const                 { return mAttributes[0]; }
+uint32 PrimaryRecord::subserviceID() const             { return mAttributes[1]; }
+string PrimaryRecord::moduleName() const               { return mAttributes[2]; }
+string PrimaryRecord::productVersion() const   { return mAttributes[3]; }
+string PrimaryRecord::vendor() const                   { return mAttributes[4]; }
+
+
+//
+// CSP Primary relation (one record per CSP SSID)
+//
+static const char * const cspAttributes[] = {
+       // up to Vendor is handled by PrimaryRecord
+       "CspType",
+       "CspFlags",
+       NULL
+};
+CSP::CSP() : PrimaryRecord(cspAttributes) { }
+
+uint32 CSP::cspType() const                                            { return mAttributes[5]; }
+CSSM_CSP_FLAGS CSP::cspFlags() const                   { return mAttributes[6]; }
+
+
+//
+// CSP capabilities relation
+//
+static const char * const capAttributes[] = {
+       "ModuleID",
+       "SSID",
+       "ContextType",
+       "AlgType",
+       "GroupId",
+       "AttributeType",
+       "Description",
+       NULL
+};
+CSPCapabilities::CSPCapabilities() : Record(capAttributes) { }
+
+string CSPCapabilities::moduleID() const               { return mAttributes[0]; }
+uint32 CSPCapabilities::subserviceID() const   { return mAttributes[1]; }
+uint32 CSPCapabilities::contextType() const            { return mAttributes[2]; }
+uint32 CSPCapabilities::algorithm() const              { return mAttributes[3]; }
+uint32 CSPCapabilities::group() const                  { return mAttributes[4]; }
+uint32 CSPCapabilities::attribute() const              { return mAttributes[5]; }
+string CSPCapabilities::description() const            { return mAttributes[6]; }
+
+
+//
+// CSP SmartcardInfo relation (one record per smartcard token present)
+//
+static const char * const scAttributes[] = {
+    "ModuleID",
+       "SSID",
+       "ScDesc",
+       "ScVendor",
+       "ScVersion",
+       "ScFirmwareVersion",
+       "ScFlags",
+       "ScCustomFlags",
+       "ScSerialNumber",
+       NULL
+};
+SmartcardInfo::SmartcardInfo() : Record(scAttributes) { }
+
+string SmartcardInfo::moduleID() const                 { return mAttributes[0]; }
+uint32 SmartcardInfo::subserviceID() const             { return mAttributes[1]; }
+string SmartcardInfo::description() const              { return mAttributes[2]; }
+string SmartcardInfo::vendor() const                   { return mAttributes[3]; }
+string SmartcardInfo::version() const                  { return mAttributes[4]; }
+string SmartcardInfo::firmware() const                 { return mAttributes[5]; }
+CSSM_SC_FLAGS SmartcardInfo::flags() const             { return mAttributes[6]; }
+CSSM_SC_FLAGS SmartcardInfo::customFlags() const { return mAttributes[7]; }
+string SmartcardInfo::serial() const                   { return mAttributes[8]; }
+
+
+//
+// DL Primary relation (one record per DL SSID)
+//
+static const char * const dlAttributes[] = {
+       // up to Vendor is handled by PrimaryRecord
+       "DLType",
+       "QueryLimitsFlag",
+       NULL
+};
+DL::DL() : PrimaryRecord(dlAttributes) { }
+
+uint32 DL::dlType() const                                              { return mAttributes[5]; }
+uint32 DL::queryLimits() const                                 { return mAttributes[6]; }
+
+
+//
+// CL Primary relation (one record per CL SSID)
+//
+static const char * const clAttributes[] = {
+       // up to Vendor is handled by PrimaryRecord
+       "CertTypeFormat",
+       "CrlTypeFormat",
+       NULL
+};
+CL::CL() : PrimaryRecord(clAttributes) { }
+
+uint32 CL::certTypeFormat() const                              { return mAttributes[5]; }
+uint32 CL::crlTypeFormat() const                               { return mAttributes[6]; }
+
+
+//
+// TP Primary relation (one record per TP SSID)
+//
+static const char * const tpAttributes[] = {
+       // up to Vendor is handled by PrimaryRecord
+       "CertTypeFormat",
+       NULL
+};
+TP::TP() : PrimaryRecord(tpAttributes) { }
+
+uint32 TP::certTypeFormat() const                              { return mAttributes[5]; }
+
+
+//
+// TP Policy-OIDS relation (one record per supported policy and TP)
+//
+static const char * const policyAttributes[] = {
+    "ModuleID",
+       "SSID",
+       "OID",
+       "Value",
+       NULL
+};
+PolicyOids::PolicyOids() : Record(policyAttributes) { }
+
+string PolicyOids::moduleID() const                    { return mAttributes[0]; }
+uint32 PolicyOids::subserviceID() const                { return mAttributes[1]; }
+CssmData PolicyOids::oid() const                       { return mAttributes[2]; }
+CssmData PolicyOids::value() const                     { return mAttributes[3]; }
+
+
+} // end namespace MDSClient
+} // end namespace Security