X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/80e2389990082500d76eb566d4946be3e786c3ef..d8f41ccd20de16f8ebe2ccc84d47bf1cb2b26bbb:/libsecurity_cdsa_plugin/lib/Database.h diff --git a/libsecurity_cdsa_plugin/lib/Database.h b/libsecurity_cdsa_plugin/lib/Database.h deleted file mode 100644 index 52753ae3..00000000 --- a/libsecurity_cdsa_plugin/lib/Database.h +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright (c) 2000-2004 Apple Computer, 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. - */ - - -#ifndef _DATABASE_H_ -#define _DATABASE_H_ 1 - -#include -#include -#include -#include -#include -#include - - -// @@@ Should not use using in headers. -using namespace std; - -namespace Security -{ - -class Database; -class DatabaseFactory; -class DatabaseSession; -class DbContext; - -/* DatabaseManager class. */ -class DatabaseManager -{ - NOCOPY(DatabaseManager) -public: - DatabaseManager (); - virtual ~DatabaseManager (); - - // Create and return a new DbContext instance which is owned by us and must be discared by calling dbClose. - virtual DbContext &dbOpen(DatabaseSession &inDatabaseSession, - const DbName &inDbName, - CSSM_DB_ACCESS_TYPE inAccessRequest, - const AccessCredentials *inAccessCred, - const void *inOpenParameters); - virtual DbContext &dbCreate(DatabaseSession &inDatabaseSession, - const DbName &inDbName, - const CSSM_DBINFO &inDBInfo, - CSSM_DB_ACCESS_TYPE inAccessRequest, - const CSSM_RESOURCE_CONTROL_CONTEXT *inCredAndAclEntry, - const void *inOpenParameters); - - // Delete a DbContext instance created by calling dbOpen or dbCreate. - virtual void dbClose(DbContext &inDbContext); - - // Delete a database. - virtual void dbDelete(DatabaseSession &inDatabaseSession, - const DbName &inDbName, - const AccessCredentials *inAccessCred); - - // List all available databases. - virtual CSSM_NAME_LIST_PTR getDbNames(DatabaseSession &inDatabaseSession); - virtual void freeNameList(DatabaseSession &inDatabaseSession, - CSSM_NAME_LIST &inNameList); -protected: - virtual void removeIfUnused(Database &inDatabase); - virtual Database *get (const DbName &inDbName); // Get existing instance or make a new one. - virtual Database *make (const DbName &inDbName) = 0; // Create a new database instance subclass must implement. -private: - typedef map DatabaseMap; - DatabaseMap mDatabaseMap; - Mutex mDatabaseMapLock; -}; - - -/* Database is an abstract class. Each Database subclass should implement all the - pure virtual methods listed below. The constructor for a particular Database - subclass should create the Database object. A subsequent call to dBOpen or - dBCreate should be is made. This returns a DbContext. All other methods take - a DbContext as an argument. - */ -class Database -{ -public: - virtual void - dbCreate (DbContext &inDbContext, const CSSM_DBINFO &inDBInfo, - const CSSM_ACL_ENTRY_INPUT *inInitialAclEntry) = 0; - - // Don't override this method in subclasses. - virtual DbContext & - _dbCreate(DatabaseSession &inDatabaseSession, - const CSSM_DBINFO &inDBInfo, - CSSM_DB_ACCESS_TYPE inAccessRequest, - const CSSM_RESOURCE_CONTROL_CONTEXT *inCredAndAclEntry, - const void *inOpenParameters); - - virtual void - dbOpen (DbContext &inDbContext) = 0; - - // Don't override this method in subclasses. - virtual DbContext & - _dbOpen (DatabaseSession &inDatabaseSession, - CSSM_DB_ACCESS_TYPE inAccessRequest, - const AccessCredentials *inAccessCred, - const void *inOpenParameters); - - virtual void - dbClose () = 0; - - // Don't override this method in subclasses. - virtual void - _dbClose (DbContext &dbContext); - - virtual void - dbDelete(DatabaseSession &inDatabaseSession, - const AccessCredentials *inAccessCred) = 0; - - virtual void - createRelation (DbContext &dbContext, - CSSM_DB_RECORDTYPE inRelationID, - const char *inRelationName, - uint32 inNumberOfAttributes, - const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *inAttributeInfo, - uint32 inNumberOfIndexes, - const CSSM_DB_SCHEMA_INDEX_INFO &inIndexInfo) = 0; - - virtual void - destroyRelation (DbContext &dbContext, - CSSM_DB_RECORDTYPE inRelationID) = 0; - - virtual void - authenticate(DbContext &dbContext, - CSSM_DB_ACCESS_TYPE inAccessRequest, - const AccessCredentials &inAccessCred) = 0; - - virtual void - getDbAcl(DbContext &dbContext, - const CSSM_STRING *inSelectionTag, - uint32 &outNumberOfAclInfos, - CSSM_ACL_ENTRY_INFO_PTR &outAclInfos) = 0; - - virtual void - changeDbAcl(DbContext &dbContext, - const AccessCredentials &inAccessCred, - const CSSM_ACL_EDIT &inAclEdit) = 0; - - virtual void - getDbOwner(DbContext &dbContext, CSSM_ACL_OWNER_PROTOTYPE &outOwner) = 0; - - virtual void - changeDbOwner(DbContext &dbContext, - const AccessCredentials &inAccessCred, - const CSSM_ACL_OWNER_PROTOTYPE &inNewOwner) = 0; - - virtual char * - getDbNameFromHandle (const DbContext &dbContext) const = 0; - - virtual CSSM_DB_UNIQUE_RECORD_PTR - dataInsert (DbContext &dbContext, - CSSM_DB_RECORDTYPE RecordType, - const CSSM_DB_RECORD_ATTRIBUTE_DATA *inAttributes, - const CssmData *inData) = 0; - - virtual void - dataDelete (DbContext &dbContext, - const CSSM_DB_UNIQUE_RECORD &inUniqueRecordIdentifier) = 0; - - virtual void - dataModify (DbContext &dbContext, - CSSM_DB_RECORDTYPE RecordType, - CSSM_DB_UNIQUE_RECORD &inoutUniqueRecordIdentifier, - const CSSM_DB_RECORD_ATTRIBUTE_DATA *inAttributesToBeModified, - const CssmData *inDataToBeModified, - CSSM_DB_MODIFY_MODE ModifyMode) = 0; - - virtual CSSM_HANDLE - dataGetFirst (DbContext &dbContext, - const CssmQuery *inQuery, - CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR inoutAttributes, - CssmData *inoutData, - CSSM_DB_UNIQUE_RECORD_PTR &outUniqueRecord) = 0; - - virtual bool - dataGetNext (DbContext &dbContext, - CSSM_HANDLE inResultsHandle, - CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR inoutAttributes, - CssmData *inoutData, - CSSM_DB_UNIQUE_RECORD_PTR &outUniqueRecord) = 0; - - virtual void - dataAbortQuery (DbContext &dbContext, - CSSM_HANDLE inResultsHandle) = 0; - - virtual void - dataGetFromUniqueRecordId (DbContext &dbContext, - const CSSM_DB_UNIQUE_RECORD &inUniqueRecord, - CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR inoutAttributes, - CssmData *inoutData) = 0; - - virtual void - freeUniqueRecord (DbContext &dbContext, - CSSM_DB_UNIQUE_RECORD &inUniqueRecord) = 0; - - virtual void - passThrough(DbContext &dbContext, - uint32 passThroughId, - const void *inputParams, - void **outputParams) = 0; - - Database (const DbName &inDbName); - virtual ~Database (); - - virtual bool hasDbContexts(); - - // XXX @@@ Think about consequences of race conditions between DbOpen/DbCreate/DbDelete/DbClose - // on databases with the same name at the same time. - //virtual DbContext &insertDbContext(); - //virtual void removeDbContext(DbContext &inDbContext); - - const DbName mDbName; -protected: - // Subclasses must implement this method. - virtual DbContext *makeDbContext(DatabaseSession &inDatabaseSession, - CSSM_DB_ACCESS_TYPE inAccessRequest, - const AccessCredentials *inAccessCred, - const void *inOpenParameters) = 0; -private: - typedef set DbContextSet; - DbContextSet mDbContextSet; - Mutex mDbContextSetLock; -}; - -} // end namespace Security - -#ifdef _CPP_DATABASE -# pragma export off -#endif - -#endif //_DATABASE_H_