mds_standard.cpp
1 /* 2 * Copyright (c) 2000-2004,2011,2014 Apple Inc. All Rights Reserved. 3 * 4 * The contents of this file constitute Original Code as defined in and are 5 * subject to the Apple Public Source License Version 1.2 (the 'License'). 6 * You may not use this file except in compliance with the License. Please obtain 7 * a copy of the License at http://www.apple.com/publicsource and read it before 8 * using this file. 9 * 10 * This Original Code and all software distributed under the License are 11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS 12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT 13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the 15 * specific language governing rights and limitations under the License. 16 */ 17 18 19 // 20 // mds_standard - standard-defined MDS record types 21 // 22 #include <security_cdsa_client/mds_standard.h> 23 #include <security_cdsa_client/dlquery.h> 24 25 26 namespace Security { 27 namespace MDSClient { 28 29 30 // 31 // CDSA Common relation (one record per module) 32 // 33 static const char * const commonAttributes[] = { 34 "ModuleID", 35 "ModuleName", 36 "Path", 37 "Desc", 38 "DynamicFlag", 39 "MultiThreadFlag", 40 "ServiceMask", 41 NULL 42 }; 43 Common::Common() : Record(commonAttributes) { } 44 45 string Common::moduleID() const { return mAttributes[0]; } 46 string Common::moduleName() const { return mAttributes[1]; } 47 string Common::path() const { return mAttributes[2]; } 48 string Common::description() const { return mAttributes[3]; } 49 bool Common::dynamic() const { return mAttributes[4]; } 50 bool Common::singleThreaded() const { return !mAttributes[5]; } 51 CSSM_SERVICE_MASK Common::serviceMask() const { return mAttributes[6]; } 52 53 54 // 55 // Common::Carrier draws in the Common fields for anything with 56 // a ModuleID attribute (which must be the first attribute listed) 57 // 58 Common::Carrier::~Carrier() { } 59 60 Common &Common::Carrier::common() const 61 { 62 if (!mCommon) { 63 const CssmDbRecordAttributeData &attrs 64 = dynamic_cast<const Record *>(this)->attributes(); 65 RefPointer<Common> rpc; 66 rpc = Table<Common>(mds()).fetch( 67 Attribute("ModuleID") == string(attrs[0]), 68 CSSMERR_DL_ENDOFDATA); 69 mCommon = rpc; 70 } 71 return *mCommon; 72 } 73 74 75 // 76 // Attributes that are common to all primary relations 77 // 78 static const char * const primaryAttributes[] = { 79 "ModuleID", 80 "SSID", 81 "ModuleName", 82 "ProductVersion", 83 "Vendor", 84 NULL 85 }; 86 PrimaryRecord::PrimaryRecord(const char * const * names) 87 : Record(primaryAttributes) 88 { 89 addAttributes(names); 90 } 91 92 string PrimaryRecord::moduleID() const { return mAttributes[0]; } 93 uint32 PrimaryRecord::subserviceID() const { return mAttributes[1]; } 94 string PrimaryRecord::moduleName() const { return mAttributes[2]; } 95 string PrimaryRecord::productVersion() const { return mAttributes[3]; } 96 string PrimaryRecord::vendor() const { return mAttributes[4]; } 97 98 99 // 100 // CSP Primary relation (one record per CSP SSID) 101 // 102 static const char * const cspAttributes[] = { 103 // up to Vendor is handled by PrimaryRecord 104 "CspType", 105 "CspFlags", 106 NULL 107 }; 108 CSP::CSP() : PrimaryRecord(cspAttributes) { } 109 110 uint32 CSP::cspType() const { return mAttributes[5]; } 111 CSSM_CSP_FLAGS CSP::cspFlags() const { return mAttributes[6]; } 112 113 114 // 115 // CSP capabilities relation 116 // 117 static const char * const capAttributes[] = { 118 "ModuleID", 119 "SSID", 120 "ContextType", 121 "AlgType", 122 "GroupId", 123 "AttributeType", 124 "Description", 125 NULL 126 }; 127 CSPCapabilities::CSPCapabilities() : Record(capAttributes) { } 128 129 string CSPCapabilities::moduleID() const { return mAttributes[0]; } 130 uint32 CSPCapabilities::subserviceID() const { return mAttributes[1]; } 131 uint32 CSPCapabilities::contextType() const { return mAttributes[2]; } 132 uint32 CSPCapabilities::algorithm() const { return mAttributes[3]; } 133 uint32 CSPCapabilities::group() const { return mAttributes[4]; } 134 uint32 CSPCapabilities::attribute() const { return mAttributes[5]; } 135 string CSPCapabilities::description() const { return mAttributes[6]; } 136 137 138 // 139 // CSP SmartcardInfo relation (one record per smartcard token present) 140 // 141 static const char * const scAttributes[] = { 142 "ModuleID", 143 "SSID", 144 "ScDesc", 145 "ScVendor", 146 "ScVersion", 147 "ScFirmwareVersion", 148 "ScFlags", 149 "ScCustomFlags", 150 "ScSerialNumber", 151 NULL 152 }; 153 SmartcardInfo::SmartcardInfo() : Record(scAttributes) { } 154 155 string SmartcardInfo::moduleID() const { return mAttributes[0]; } 156 uint32 SmartcardInfo::subserviceID() const { return mAttributes[1]; } 157 string SmartcardInfo::description() const { return mAttributes[2]; } 158 string SmartcardInfo::vendor() const { return mAttributes[3]; } 159 string SmartcardInfo::version() const { return mAttributes[4]; } 160 string SmartcardInfo::firmware() const { return mAttributes[5]; } 161 CSSM_SC_FLAGS SmartcardInfo::flags() const { return mAttributes[6]; } 162 CSSM_SC_FLAGS SmartcardInfo::customFlags() const { return mAttributes[7]; } 163 string SmartcardInfo::serial() const { return mAttributes[8]; } 164 165 166 // 167 // DL Primary relation (one record per DL SSID) 168 // 169 static const char * const dlAttributes[] = { 170 // up to Vendor is handled by PrimaryRecord 171 "DLType", 172 "QueryLimitsFlag", 173 NULL 174 }; 175 DL::DL() : PrimaryRecord(dlAttributes) { } 176 177 uint32 DL::dlType() const { return mAttributes[5]; } 178 uint32 DL::queryLimits() const { return mAttributes[6]; } 179 180 181 // 182 // CL Primary relation (one record per CL SSID) 183 // 184 static const char * const clAttributes[] = { 185 // up to Vendor is handled by PrimaryRecord 186 "CertTypeFormat", 187 "CrlTypeFormat", 188 NULL 189 }; 190 CL::CL() : PrimaryRecord(clAttributes) { } 191 192 uint32 CL::certTypeFormat() const { return mAttributes[5]; } 193 uint32 CL::crlTypeFormat() const { return mAttributes[6]; } 194 195 196 // 197 // TP Primary relation (one record per TP SSID) 198 // 199 static const char * const tpAttributes[] = { 200 // up to Vendor is handled by PrimaryRecord 201 "CertTypeFormat", 202 NULL 203 }; 204 TP::TP() : PrimaryRecord(tpAttributes) { } 205 206 uint32 TP::certTypeFormat() const { return mAttributes[5]; } 207 208 209 // 210 // TP Policy-OIDS relation (one record per supported policy and TP) 211 // 212 static const char * const policyAttributes[] = { 213 "ModuleID", 214 "SSID", 215 "OID", 216 "Value", 217 NULL 218 }; 219 PolicyOids::PolicyOids() : Record(policyAttributes) { } 220 221 string PolicyOids::moduleID() const { return mAttributes[0]; } 222 uint32 PolicyOids::subserviceID() const { return mAttributes[1]; } 223 CssmData PolicyOids::oid() const { return mAttributes[2]; } 224 CssmData PolicyOids::value() const { return mAttributes[3]; } 225 226 227 } // end namespace MDSClient 228 } // end namespace Security