1/* 2 * Copyright (c) 2004,2008,2011 Apple Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 25// 26// SDDLSession.h - DL session for security server CSP/DL. 27// 28#ifndef _H_SDDLSESSION 29#define _H_SDDLSESSION 30 31#include <security_cdsa_plugin/DLsession.h> 32#include <security_cdsa_utilities/u32handleobject.h> 33#include <securityd_client/ssclient.h> 34 35class SDCSPDLPlugin; 36class SDCSPDLSession; 37 38class SDDLSession : public DLPluginSession 39{ 40public: 41 SDCSPDLSession &mSDCSPDLSession; 42 43 SDDLSession(CSSM_MODULE_HANDLE handle, 44 SDCSPDLPlugin &plug, 45 const CSSM_VERSION &version, 46 uint32 subserviceId, 47 CSSM_SERVICE_TYPE subserviceType, 48 CSSM_ATTACH_FLAGS attachFlags, 49 const CSSM_UPCALLS &upcalls, 50 DatabaseManager &databaseManager, 51 SDCSPDLSession &ssCSPDLSession); 52 ~SDDLSession(); 53 54 SecurityServer::ClientSession &clientSession() 55 { return mClientSession; } 56 void GetDbNames(CSSM_NAME_LIST_PTR &NameList); 57 void FreeNameList(CSSM_NAME_LIST &NameList); 58 void DbDelete(const char *DbName, 59 const CSSM_NET_ADDRESS *DbLocation, 60 const AccessCredentials *AccessCred); 61 void DbCreate(const char *DbName, 62 const CSSM_NET_ADDRESS *DbLocation, 63 const CSSM_DBINFO &DBInfo, 64 CSSM_DB_ACCESS_TYPE AccessRequest, 65 const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry, 66 const void *OpenParameters, 67 CSSM_DB_HANDLE &DbHandle); 68 void DbOpen(const char *DbName, 69 const CSSM_NET_ADDRESS *DbLocation, 70 CSSM_DB_ACCESS_TYPE AccessRequest, 71 const AccessCredentials *AccessCred, 72 const void *OpenParameters, 73 CSSM_DB_HANDLE &DbHandle); 74 void DbClose(CSSM_DB_HANDLE DBHandle); 75 void CreateRelation(CSSM_DB_HANDLE DBHandle, 76 CSSM_DB_RECORDTYPE RelationID, 77 const char *RelationName, 78 uint32 NumberOfAttributes, 79 const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *pAttributeInfo, 80 uint32 NumberOfIndexes, 81 const CSSM_DB_SCHEMA_INDEX_INFO &pIndexInfo); 82 void DestroyRelation(CSSM_DB_HANDLE DBHandle, 83 CSSM_DB_RECORDTYPE RelationID); 84 85 void Authenticate(CSSM_DB_HANDLE DBHandle, 86 CSSM_DB_ACCESS_TYPE AccessRequest, 87 const AccessCredentials &AccessCred); 88 void GetDbAcl(CSSM_DB_HANDLE DBHandle, 89 const CSSM_STRING *SelectionTag, 90 uint32 &NumberOfAclInfos, 91 CSSM_ACL_ENTRY_INFO_PTR &AclInfos); 92 void ChangeDbAcl(CSSM_DB_HANDLE DBHandle, 93 const AccessCredentials &AccessCred, 94 const CSSM_ACL_EDIT &AclEdit); 95 void GetDbOwner(CSSM_DB_HANDLE DBHandle, 96 CSSM_ACL_OWNER_PROTOTYPE &Owner); 97 void ChangeDbOwner(CSSM_DB_HANDLE DBHandle, 98 const AccessCredentials &AccessCred, 99 const CSSM_ACL_OWNER_PROTOTYPE &NewOwner); 100 void GetDbNameFromHandle(CSSM_DB_HANDLE DBHandle, 101 char **DbName); 102 void DataInsert(CSSM_DB_HANDLE DBHandle, 103 CSSM_DB_RECORDTYPE RecordType, 104 const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes, 105 const CssmData *Data, 106 CSSM_DB_UNIQUE_RECORD_PTR &UniqueId); 107 void DataDelete(CSSM_DB_HANDLE DBHandle, 108 const CSSM_DB_UNIQUE_RECORD &UniqueRecordIdentifier); 109 void DataModify(CSSM_DB_HANDLE DBHandle, 110 CSSM_DB_RECORDTYPE RecordType, 111 CSSM_DB_UNIQUE_RECORD &UniqueRecordIdentifier, 112 const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified, 113 const CssmData *DataToBeModified, 114 CSSM_DB_MODIFY_MODE ModifyMode); 115 CSSM_HANDLE DataGetFirst(CSSM_DB_HANDLE DBHandle, 116 const CssmQuery *Query, 117 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes, 118 CssmData *Data, 119 CSSM_DB_UNIQUE_RECORD_PTR &UniqueId); 120 bool DataGetNext(CSSM_DB_HANDLE DBHandle, 121 CSSM_HANDLE ResultsHandle, 122 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes, 123 CssmData *Data, 124 CSSM_DB_UNIQUE_RECORD_PTR &UniqueId); 125 void DataAbortQuery(CSSM_DB_HANDLE DBHandle, 126 CSSM_HANDLE ResultsHandle); 127 void DataGetFromUniqueRecordId(CSSM_DB_HANDLE DBHandle, 128 const CSSM_DB_UNIQUE_RECORD &UniqueRecord, 129 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes, 130 CssmData *Data); 131 void FreeUniqueRecord(CSSM_DB_HANDLE DBHandle, 132 CSSM_DB_UNIQUE_RECORD &UniqueRecord); 133 void PassThrough(CSSM_DB_HANDLE DBHandle, 134 uint32 PassThroughId, 135 const void *InputParams, 136 void **OutputParams); 137 138 Allocator &allocator() { return *static_cast<DatabaseSession *>(this); } 139 140protected: 141 void postGetRecord(SecurityServer::RecordHandle record, U32HandleObject::Handle resultsHandle, 142 CSSM_DB_HANDLE db, 143 CssmDbRecordAttributeData *pAttributes, 144 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR inoutAttributes, 145 CssmData *inoutData, SecurityServer::KeyHandle hKey); 146 147 CSSM_DB_UNIQUE_RECORD_PTR makeDbUniqueRecord(SecurityServer::RecordHandle recordHandle); 148 CSSM_HANDLE findDbUniqueRecord(const CSSM_DB_UNIQUE_RECORD &inUniqueRecord); 149 void freeDbUniqueRecord(CSSM_DB_UNIQUE_RECORD &inUniqueRecord); 150 151 SecurityServer::ClientSession mClientSession; 152 //SecurityServer::AttachmentHandle mAttachment; 153}; 154 155 156#endif // _H_SDDLSESSION 157