2 * Copyright (c) 2000-2001,2011,2014 Apple Inc. All Rights Reserved.
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
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.
20 // SSDLSession.h - DL session for security server CSP/DL.
22 #ifndef _H_SSDLSESSION
23 #define _H_SSDLSESSION
25 #include <security_cdsa_plugin/DLsession.h>
27 #include "SSDatabase.h"
32 class SSDLSession
: public DLPluginSession
35 SSCSPDLSession
&mSSCSPDLSession
;
37 SSDLSession(CSSM_MODULE_HANDLE handle
,
39 const CSSM_VERSION
&version
,
41 CSSM_SERVICE_TYPE subserviceType
,
42 CSSM_ATTACH_FLAGS attachFlags
,
43 const CSSM_UPCALLS
&upcalls
,
44 DatabaseManager
&databaseManager
,
45 SSCSPDLSession
&ssCSPDLSession
);
48 SecurityServer::ClientSession
&clientSession()
49 { return mClientSession
; }
50 void GetDbNames(CSSM_NAME_LIST_PTR
&NameList
);
51 void FreeNameList(CSSM_NAME_LIST
&NameList
);
52 void DbDelete(const char *DbName
,
53 const CSSM_NET_ADDRESS
*DbLocation
,
54 const AccessCredentials
*AccessCred
);
55 void DbCreate(const char *DbName
,
56 const CSSM_NET_ADDRESS
*DbLocation
,
57 const CSSM_DBINFO
&DBInfo
,
58 CSSM_DB_ACCESS_TYPE AccessRequest
,
59 const CSSM_RESOURCE_CONTROL_CONTEXT
*CredAndAclEntry
,
60 const void *OpenParameters
,
61 CSSM_DB_HANDLE
&DbHandle
);
62 void CreateWithBlob(const char *DbName
,
63 const CSSM_NET_ADDRESS
*DbLocation
,
64 const CSSM_DBINFO
&DBInfo
,
65 CSSM_DB_ACCESS_TYPE AccessRequest
,
66 const void *OpenParameters
,
67 const CSSM_DATA
&blob
,
68 CSSM_DB_HANDLE
&DbHandle
);
69 void DbOpen(const char *DbName
,
70 const CSSM_NET_ADDRESS
*DbLocation
,
71 CSSM_DB_ACCESS_TYPE AccessRequest
,
72 const AccessCredentials
*AccessCred
,
73 const void *OpenParameters
,
74 CSSM_DB_HANDLE
&DbHandle
);
75 void DbClose(CSSM_DB_HANDLE DBHandle
);
76 void CreateRelation(CSSM_DB_HANDLE DBHandle
,
77 CSSM_DB_RECORDTYPE RelationID
,
78 const char *RelationName
,
79 uint32 NumberOfAttributes
,
80 const CSSM_DB_SCHEMA_ATTRIBUTE_INFO
*pAttributeInfo
,
81 uint32 NumberOfIndexes
,
82 const CSSM_DB_SCHEMA_INDEX_INFO
&pIndexInfo
);
83 void DestroyRelation(CSSM_DB_HANDLE DBHandle
,
84 CSSM_DB_RECORDTYPE RelationID
);
86 void Authenticate(CSSM_DB_HANDLE DBHandle
,
87 CSSM_DB_ACCESS_TYPE AccessRequest
,
88 const AccessCredentials
&AccessCred
);
89 void GetDbAcl(CSSM_DB_HANDLE DBHandle
,
90 const CSSM_STRING
*SelectionTag
,
91 uint32
&NumberOfAclInfos
,
92 CSSM_ACL_ENTRY_INFO_PTR
&AclInfos
);
93 void ChangeDbAcl(CSSM_DB_HANDLE DBHandle
,
94 const AccessCredentials
&AccessCred
,
95 const CSSM_ACL_EDIT
&AclEdit
);
96 void GetDbOwner(CSSM_DB_HANDLE DBHandle
,
97 CSSM_ACL_OWNER_PROTOTYPE
&Owner
);
98 void ChangeDbOwner(CSSM_DB_HANDLE DBHandle
,
99 const AccessCredentials
&AccessCred
,
100 const CSSM_ACL_OWNER_PROTOTYPE
&NewOwner
);
101 void GetDbNameFromHandle(CSSM_DB_HANDLE DBHandle
,
103 void DataInsert(CSSM_DB_HANDLE DBHandle
,
104 CSSM_DB_RECORDTYPE RecordType
,
105 const CSSM_DB_RECORD_ATTRIBUTE_DATA
*Attributes
,
106 const CssmData
*Data
,
107 CSSM_DB_UNIQUE_RECORD_PTR
&UniqueId
);
108 void DataDelete(CSSM_DB_HANDLE DBHandle
,
109 const CSSM_DB_UNIQUE_RECORD
&UniqueRecordIdentifier
);
110 void DataModify(CSSM_DB_HANDLE DBHandle
,
111 CSSM_DB_RECORDTYPE RecordType
,
112 CSSM_DB_UNIQUE_RECORD
&UniqueRecordIdentifier
,
113 const CSSM_DB_RECORD_ATTRIBUTE_DATA
*AttributesToBeModified
,
114 const CssmData
*DataToBeModified
,
115 CSSM_DB_MODIFY_MODE ModifyMode
);
116 CSSM_HANDLE
DataGetFirst(CSSM_DB_HANDLE DBHandle
,
117 const CssmQuery
*Query
,
118 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes
,
120 CSSM_DB_UNIQUE_RECORD_PTR
&UniqueId
);
121 bool DataGetNext(CSSM_DB_HANDLE DBHandle
,
122 CSSM_HANDLE ResultsHandle
,
123 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes
,
125 CSSM_DB_UNIQUE_RECORD_PTR
&UniqueId
);
126 void DataAbortQuery(CSSM_DB_HANDLE DBHandle
,
127 CSSM_HANDLE ResultsHandle
);
128 void DataGetFromUniqueRecordId(CSSM_DB_HANDLE DBHandle
,
129 const CSSM_DB_UNIQUE_RECORD
&UniqueRecord
,
130 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes
,
132 void FreeUniqueRecord(CSSM_DB_HANDLE DBHandle
,
133 CSSM_DB_UNIQUE_RECORD
&UniqueRecord
);
134 void PassThrough(CSSM_DB_HANDLE DBHandle
,
135 uint32 PassThroughId
,
136 const void *InputParams
,
137 void **OutputParams
);
139 Allocator
&allocator() { return *static_cast<DatabaseSession
*>(this); }
141 SSDatabase
findDbHandle(CSSM_DB_HANDLE inDbHandle
);
143 CSSM_DB_HANDLE
makeDbHandle(SSDatabase
&inDb
);
144 SSDatabase
killDbHandle(CSSM_DB_HANDLE inDbHandle
);
146 CSSM_DB_ATTRIBUTE_DATA_PTR
reconstructRecordFromBlob (const CSSM_DATA
& blob
,
147 CssmDataContainer
&recordData
,
148 uint32
&numAttributes
);
150 void getWrappedAttributesAndData (SSDatabase
&db
,
151 CSSM_DB_RECORDTYPE recordType
,
152 CSSM_DB_UNIQUE_RECORD_PTR recordPtr
,
153 CssmDataContainer
&output
,
154 CSSM_DATA
*blobData
);
156 void unwrapAttributesAndData (uint32
&numAttributes
,
157 CSSM_DB_ATTRIBUTE_DATA_PTR
&attributes
,
161 void cleanupAttributes (uint32 numAttributes
, CSSM_DB_ATTRIBUTE_DATA_PTR attributes
);
163 void getUniqueIdForSymmetricKey (SSDatabase
&db
, CSSM_DATA
&label
,
164 CSSM_DB_UNIQUE_RECORD_PTR
&uniqueRecord
);
166 void getCorrespondingSymmetricKey (SSDatabase
&db
, CSSM_DATA
& label
, CssmDataContainer
&key
);
168 void doGetWithoutEncryption (SSDatabase
&db
, const void* inInputParams
, void **outOutputParams
);
169 void doModifyWithoutEncryption (SSDatabase
&db
, const void* inInputParams
, void **outOutputParams
);
170 void doInsertWithoutEncryption (SSDatabase
&db
, const void* inInputParams
, void** outOutputParams
);
171 void doConvertRecordIdentifier (SSDatabase
&db
, const void* inInputParams
, void **outOutputParams
);
174 typedef map
<CSSM_DB_HANDLE
, SSDatabase
> DbHandleMap
;
175 DbHandleMap mDbHandleMap
;
177 CSSM_DB_UNIQUE_RECORD_PTR
makeSSUniqueRecord(SSUniqueRecord
&uniqueId
);
178 SSUniqueRecord
killSSUniqueRecord(CSSM_DB_UNIQUE_RECORD
&inUniqueRecord
);
179 SSUniqueRecord
findSSUniqueRecord(const CSSM_DB_UNIQUE_RECORD
&inUniqueRecord
);
181 CSSM_DB_UNIQUE_RECORD_PTR
createUniqueRecord(CSSM_HANDLE ref
);
182 CSSM_HANDLE
parseUniqueRecord(const CSSM_DB_UNIQUE_RECORD
&inUniqueRecord
);
183 void freeUniqueRecord(CSSM_DB_UNIQUE_RECORD
&inUniqueRecord
);
185 Mutex mSSUniqueRecordLock
;
186 typedef map
<CSSM_HANDLE
, SSUniqueRecord
> SSUniqueRecordMap
;
187 SSUniqueRecordMap mSSUniqueRecordMap
;
190 SecurityServer::ClientSession mClientSession
;
194 #endif // _H_SSDLSESSION