]> git.saurik.com Git - apple/security.git/blob - AppleCSPDL/SSDatabase.h
Security-30.1.tar.gz
[apple/security.git] / AppleCSPDL / SSDatabase.h
1 /*
2 * Copyright (c) 2000-2001 Apple Computer, 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 // SSDatabase.h - Security Server database object
21 //
22 #ifndef _H_SSDATABASE_
23 #define _H_SSDATABASE_
24
25 #include <Security/dlclient.h>
26 #include <Security/SecurityServerClient.h>
27
28 class SSCSPDLSession;
29 class SSUniqueRecord;
30
31 //
32 // Protected please ignore this class unless subclassing SSDatabase.
33 //
34 class SSDatabaseImpl : public CssmClient::DbImpl
35 {
36 static const char *const DBBlobRelationName;
37 enum {
38 DBBlobRelationID = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 0x8000
39 };
40
41 public:
42 SSDatabaseImpl(SecurityServer::ClientSession &inClientSession,
43 const CssmClient::DL &dl,
44 const char *inDbName, const CSSM_NET_ADDRESS *inDbLocation);
45 virtual ~SSDatabaseImpl();
46
47 void create(const DLDbIdentifier &dlDbIdentifier);
48 void open(const DLDbIdentifier &dlDbIdentifier);
49 SSUniqueRecord insert(CSSM_DB_RECORDTYPE recordType,
50 const CSSM_DB_RECORD_ATTRIBUTE_DATA *attributes,
51 const CSSM_DATA *data, bool);
52
53 // Passthrough functions (only implemented by AppleCSPDL).
54 void lock();
55 void unlock();
56 void unlock(const CSSM_DATA &password);
57 void getSettings(uint32 &outIdleTimeout, bool &outLockOnSleep);
58 void setSettings(uint32 inIdleTimeout, bool inLockOnSleep);
59 bool isLocked();
60 void changePassphrase(const CSSM_ACCESS_CREDENTIALS *cred);
61
62 // DbUniqueRecordMaker
63 CssmClient::DbUniqueRecordImpl *newDbUniqueRecord();
64
65 // New methods not inherited from DbImpl
66 SecurityServer::DbHandle dbHandle();
67
68 private:
69 enum
70 {
71 kDefaultIdleTimeout = 5 * 60, // 5 minute default autolock time
72 kDefaultLockOnSleep = true
73 };
74
75 SecurityServer::ClientSession &mClientSession;
76 SecurityServer::DbHandle mSSDbHandle;
77 CssmClient::DbUniqueRecord mDbBlobId;
78 };
79
80
81 //
82 // SSDatabase -- A Security Server aware Db object.
83 //
84 class SSDatabase : public CssmClient::Db
85 {
86 public:
87 typedef SSDatabaseImpl Impl;
88
89 explicit SSDatabase(SSDatabaseImpl *impl) : CssmClient::Db(impl) {}
90 SSDatabase() : CssmClient::Db(NULL) {}
91 SSDatabase(SecurityServer::ClientSession &inClientSession,
92 const CssmClient::DL &dl,
93 const char *inDbName, const CSSM_NET_ADDRESS *inDbLocation)
94 : CssmClient::Db(new SSDatabaseImpl(inClientSession, dl, inDbName, inDbLocation)) {}
95
96 SSDatabaseImpl *operator ->() const { return &impl<SSDatabaseImpl>(); }
97 SSDatabaseImpl &operator *() const { return impl<SSDatabaseImpl>(); }
98
99 // For convinience only
100 SecurityServer::DbHandle dbHandle() { return (*this) ? (*this)->dbHandle() : SecurityServer::noDb; }
101 };
102
103
104 class SSUniqueRecordImpl : public CssmClient::DbUniqueRecordImpl
105 {
106 public:
107 SSUniqueRecordImpl(const SSDatabase &db);
108 virtual ~SSUniqueRecordImpl();
109
110 SSDatabase database() const;
111 };
112
113
114 class SSUniqueRecord : public CssmClient::DbUniqueRecord
115 {
116 public:
117 typedef SSUniqueRecordImpl Impl;
118
119 explicit SSUniqueRecord(SSUniqueRecordImpl *impl) : CssmClient::DbUniqueRecord(impl) {}
120 SSUniqueRecord() : CssmClient::DbUniqueRecord(NULL) {}
121 SSUniqueRecord(const SSDatabase &db) : CssmClient::DbUniqueRecord(new SSUniqueRecordImpl(db)) {}
122
123 SSUniqueRecordImpl *operator ->() const { return &impl<SSUniqueRecordImpl>(); }
124 SSUniqueRecordImpl &operator *() const { return impl<SSUniqueRecordImpl>(); }
125 };
126
127
128 #endif // _H_SSDATABASE_