MDSDatabase.cpp
1 /* 2 * Copyright (c) 2000-2001,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 #include "MDSDatabase.h" 20 #include "MDSSchema.h" 21 22 #include <security_cdsa_plugin/DbContext.h> 23 #include <Security/mds_schema.h> 24 #include <Security/cssmerr.h> 25 26 // 27 // MDSDatabaseManager 28 // 29 30 Database *MDSDatabaseManager::make (const DbName &inDbName) 31 { 32 return new MDSDatabase(inDbName, mTableNames); 33 } 34 35 // 36 // MDSDatabase 37 // 38 39 MDSDatabase::MDSDatabase (const DbName &inDbName, const AppleDatabaseTableName *tableNames) 40 : AppleDatabase(inDbName, tableNames) 41 { 42 } 43 44 MDSDatabase::~MDSDatabase () 45 { 46 } 47 48 DbContext * 49 MDSDatabase::makeDbContext (DatabaseSession &inDatabaseSession, 50 CSSM_DB_ACCESS_TYPE inAccessRequest, 51 const AccessCredentials *inAccessCred, 52 const void *inOpenParameters) 53 { 54 return new DbContext (*this, inDatabaseSession, inAccessRequest, 55 inAccessCred); 56 } 57 58 void 59 MDSDatabase::dbOpen (DbContext &inDbContext) 60 { 61 // XXX Do something more... 62 } 63 64 void 65 MDSDatabase::dbClose () 66 { 67 // XXX Do something more... 68 } 69 70 // Creating and destroying relations is not exposed as part of the 71 // MDS interface, so these two methods should never be called. 72 73 void 74 MDSDatabase::createRelation(DbContext &dbContext, 75 CSSM_DB_RECORDTYPE inRelationID, 76 const char *inRelationName, 77 uint32 inNumberOfAttributes, 78 const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *inAttributeInfo, 79 uint32 inNumberOfIndexes, 80 const CSSM_DB_SCHEMA_INDEX_INFO &inIndexInfo) 81 { 82 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 83 } 84 85 void 86 MDSDatabase::destroyRelation(DbContext &dbContext, 87 CSSM_DB_RECORDTYPE inRelationID) 88 { 89 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 90 } 91 92 char * 93 MDSDatabase::getDbNameFromHandle (const DbContext &dbContext) const 94 { 95 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 96 } 97 98 CSSM_DB_UNIQUE_RECORD_PTR 99 MDSDatabase::dataInsert (DbContext &dbContext, 100 CSSM_DB_RECORDTYPE RecordType, 101 const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes, 102 const CssmData *Data) 103 { 104 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 105 } 106 107 void 108 MDSDatabase::dataDelete (DbContext &dbContext, 109 const CSSM_DB_UNIQUE_RECORD &UniqueRecordIdentifier) 110 { 111 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 112 } 113 114 void 115 MDSDatabase::dataModify (DbContext &dbContext, 116 CSSM_DB_RECORDTYPE RecordType, 117 CSSM_DB_UNIQUE_RECORD &UniqueRecordIdentifier, 118 const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified, 119 const CssmData *DataToBeModified, 120 CSSM_DB_MODIFY_MODE ModifyMode) 121 { 122 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 123 } 124 125 CSSM_HANDLE 126 MDSDatabase::dataGetFirst (DbContext &dbContext, 127 const CssmQuery *Query, 128 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes, 129 CssmData *Data, 130 CSSM_DB_UNIQUE_RECORD_PTR &UniqueRecordIdentifier) 131 { 132 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 133 } 134 135 bool 136 MDSDatabase::dataGetNext (DbContext &dbContext, 137 CSSM_HANDLE ResultsHandle, 138 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes, 139 CssmData *Data, 140 CSSM_DB_UNIQUE_RECORD_PTR &UniqueRecordIdentifier) 141 { 142 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 143 } 144 145 void 146 MDSDatabase::dataAbortQuery (DbContext &dbContext, 147 CSSM_HANDLE ResultsHandle) 148 { 149 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 150 } 151 152 void 153 MDSDatabase::dataGetFromUniqueRecordId (DbContext &dbContext, 154 const CSSM_DB_UNIQUE_RECORD &UniqueRecord, 155 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes, 156 CssmData *Data) 157 { 158 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 159 } 160 161 void 162 MDSDatabase::freeUniqueRecord (DbContext &dbContext, 163 CSSM_DB_UNIQUE_RECORD &UniqueRecord) 164 { 165 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 166 } 167 168 // Functions that MDS does not support but we must implement to satisfy Database. 169 void 170 MDSDatabase::dbCreate (DbContext &inDbContext, const CSSM_DBINFO &inDBInfo, 171 const CSSM_ACL_ENTRY_INPUT *inInitialAclEntry) 172 { 173 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 174 } 175 176 void 177 MDSDatabase::dbDelete (DatabaseSession &inDatabaseSession, 178 const AccessCredentials *inAccessCred) 179 { 180 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 181 } 182 183 void 184 MDSDatabase::authenticate(DbContext &dbContext, 185 CSSM_DB_ACCESS_TYPE inAccessRequest, 186 const AccessCredentials &inAccessCred) 187 { 188 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 189 } 190 191 void 192 MDSDatabase::getDbAcl(DbContext &dbContext, 193 const CSSM_STRING *inSelectionTag, 194 uint32 &outNumberOfAclInfos, 195 CSSM_ACL_ENTRY_INFO_PTR &outAclInfos) 196 { 197 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 198 } 199 200 void 201 MDSDatabase::changeDbAcl(DbContext &dbContext, 202 const AccessCredentials &inAccessCred, 203 const CSSM_ACL_EDIT &inAclEdit) 204 { 205 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 206 } 207 208 void 209 MDSDatabase::getDbOwner(DbContext &dbContext, CSSM_ACL_OWNER_PROTOTYPE &outOwner) 210 { 211 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 212 } 213 214 void 215 MDSDatabase::changeDbOwner(DbContext &dbContext, 216 const AccessCredentials &inAccessCred, 217 const CSSM_ACL_OWNER_PROTOTYPE &inNewOwner) 218 { 219 CssmError ::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); 220 }