Mercurial > trustbridge > nss-cmake-static
comparison nss/lib/softoken/legacydb/lgdb.h @ 3:150b72113545
Add DBM and legacydb support
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Tue, 05 Aug 2014 18:32:02 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:a945361df361 | 3:150b72113545 |
---|---|
1 /* This Source Code Form is subject to the terms of the Mozilla Public | |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
4 /* | |
5 * Internal data structures and functions used by pkcs11.c | |
6 */ | |
7 #ifndef _LGDB_H_ | |
8 #define _LGDB_H_ 1 | |
9 | |
10 #include "nssilock.h" | |
11 #include "seccomon.h" | |
12 #include "secoidt.h" | |
13 #include "lowkeyti.h" | |
14 #include "pkcs11t.h" | |
15 #include "sdb.h" | |
16 #include "cdbhdl.h" | |
17 | |
18 | |
19 #define MULTIACCESS "multiaccess:" | |
20 | |
21 | |
22 /* path stuff (was machine dependent) used by dbinit.c and pk11db.c */ | |
23 #define PATH_SEPARATOR "/" | |
24 #define SECMOD_DB "secmod.db" | |
25 #define CERT_DB_FMT "%scert%s.db" | |
26 #define KEY_DB_FMT "%skey%s.db" | |
27 | |
28 SEC_BEGIN_PROTOS | |
29 | |
30 | |
31 /* internal utility functions used by pkcs11.c */ | |
32 extern const CK_ATTRIBUTE *lg_FindAttribute(CK_ATTRIBUTE_TYPE type, | |
33 const CK_ATTRIBUTE *templ, CK_ULONG count); | |
34 extern CK_RV lg_Attribute2SecItem(PLArenaPool *,CK_ATTRIBUTE_TYPE type, | |
35 const CK_ATTRIBUTE *templ, CK_ULONG count, | |
36 SECItem *item); | |
37 extern CK_RV lg_Attribute2SSecItem(PLArenaPool *,CK_ATTRIBUTE_TYPE type, | |
38 const CK_ATTRIBUTE *templ, CK_ULONG count, | |
39 SECItem *item); | |
40 extern CK_RV lg_PrivAttr2SecItem(PLArenaPool *,CK_ATTRIBUTE_TYPE type, | |
41 const CK_ATTRIBUTE *templ, CK_ULONG count, | |
42 SECItem *item, SDB *sdbpw); | |
43 extern CK_RV lg_PrivAttr2SSecItem(PLArenaPool *,CK_ATTRIBUTE_TYPE type, | |
44 const CK_ATTRIBUTE *templ, CK_ULONG count, | |
45 SECItem *item, SDB *sdbpw); | |
46 extern CK_RV lg_GetULongAttribute(CK_ATTRIBUTE_TYPE type, | |
47 const CK_ATTRIBUTE *templ, CK_ULONG count, | |
48 CK_ULONG *out); | |
49 extern PRBool lg_hasAttribute(CK_ATTRIBUTE_TYPE type, | |
50 const CK_ATTRIBUTE *templ, CK_ULONG count); | |
51 extern PRBool lg_isTrue(CK_ATTRIBUTE_TYPE type, | |
52 const CK_ATTRIBUTE *templ, CK_ULONG count); | |
53 extern PRBool lg_isSensitive(CK_ATTRIBUTE_TYPE type, CK_OBJECT_CLASS inClass); | |
54 extern char *lg_getString(CK_ATTRIBUTE_TYPE type, | |
55 const CK_ATTRIBUTE *templ, CK_ULONG count); | |
56 extern unsigned int lg_MapTrust(CK_TRUST trust, PRBool clientAuth); | |
57 | |
58 /* clear out all the existing object ID to database key mappings. | |
59 * used to reinit a token */ | |
60 extern CK_RV lg_ClearTokenKeyHashTable(SDB *sdb); | |
61 | |
62 | |
63 extern void lg_FreeSearch(SDBFind *search); | |
64 | |
65 NSSLOWCERTCertDBHandle *lg_getCertDB(SDB *sdb); | |
66 NSSLOWKEYDBHandle *lg_getKeyDB(SDB *sdb); | |
67 | |
68 const char *lg_EvaluateConfigDir(const char *configdir, char **domain); | |
69 | |
70 | |
71 /* | |
72 * object handle modifiers | |
73 */ | |
74 #define LG_TOKEN_MASK 0xc0000000L | |
75 #define LG_TOKEN_TYPE_MASK 0x38000000L | |
76 #define LG_TOKEN_TYPE_SHIFT 27 | |
77 /* keydb (high bit == 0) */ | |
78 #define LG_TOKEN_TYPE_PRIV 0x08000000L | |
79 #define LG_TOKEN_TYPE_PUB 0x10000000L | |
80 #define LG_TOKEN_TYPE_KEY 0x18000000L | |
81 /* certdb (high bit == 1) */ | |
82 #define LG_TOKEN_TYPE_TRUST 0x20000000L | |
83 #define LG_TOKEN_TYPE_CRL 0x28000000L | |
84 #define LG_TOKEN_TYPE_SMIME 0x30000000L | |
85 #define LG_TOKEN_TYPE_CERT 0x38000000L | |
86 | |
87 #define LG_TOKEN_KRL_HANDLE (LG_TOKEN_TYPE_CRL|1) | |
88 | |
89 #define LG_SEARCH_BLOCK_SIZE 10 | |
90 #define LG_BUF_SPACE 50 | |
91 #define LG_STRICT PR_FALSE | |
92 | |
93 /* | |
94 * token object utilities | |
95 */ | |
96 void lg_addHandle(SDBFind *search, CK_OBJECT_HANDLE handle); | |
97 PRBool lg_poisonHandle(SDB *sdb, SECItem *dbkey, CK_OBJECT_HANDLE handle); | |
98 PRBool lg_tokenMatch(SDB *sdb, const SECItem *dbKey, CK_OBJECT_HANDLE class, | |
99 const CK_ATTRIBUTE *templ, CK_ULONG count); | |
100 const SECItem *lg_lookupTokenKeyByHandle(SDB *sdb, CK_OBJECT_HANDLE handle); | |
101 CK_OBJECT_HANDLE lg_mkHandle(SDB *sdb, SECItem *dbKey, CK_OBJECT_HANDLE class); | |
102 SECStatus lg_deleteTokenKeyByHandle(SDB *sdb, CK_OBJECT_HANDLE handle); | |
103 | |
104 SECStatus lg_util_encrypt(PLArenaPool *arena, SDB *sdbpw, | |
105 SECItem *plainText, SECItem **cipherText); | |
106 SECStatus lg_util_decrypt(SDB *sdbpw, | |
107 SECItem *cipherText, SECItem **plainText); | |
108 PLHashTable *lg_GetHashTable(SDB *sdb); | |
109 void lg_DBLock(SDB *sdb); | |
110 void lg_DBUnlock(SDB *sdb); | |
111 | |
112 typedef void (*LGFreeFunc)(void *); | |
113 | |
114 | |
115 /* | |
116 * database functions | |
117 */ | |
118 | |
119 /* lg_FindObjectsInit initializes a search for token and session objects | |
120 * that match a template. */ | |
121 CK_RV lg_FindObjectsInit(SDB *sdb, const CK_ATTRIBUTE *pTemplate, | |
122 CK_ULONG ulCount, SDBFind **search); | |
123 /* lg_FindObjects continues a search for token and session objects | |
124 * that match a template, obtaining additional object handles. */ | |
125 CK_RV lg_FindObjects(SDB *sdb, SDBFind *search, | |
126 CK_OBJECT_HANDLE *phObject,CK_ULONG ulMaxObjectCount, | |
127 CK_ULONG *pulObjectCount); | |
128 | |
129 /* lg_FindObjectsFinal finishes a search for token and session objects. */ | |
130 CK_RV lg_FindObjectsFinal(SDB* lgdb, SDBFind *search); | |
131 | |
132 /* lg_CreateObject parses the template and create an object stored in the | |
133 * DB that reflects the object specified in the template. */ | |
134 CK_RV lg_CreateObject(SDB *sdb, CK_OBJECT_HANDLE *handle, | |
135 const CK_ATTRIBUTE *templ, CK_ULONG count); | |
136 | |
137 CK_RV lg_GetAttributeValue(SDB *sdb, CK_OBJECT_HANDLE object_id, | |
138 CK_ATTRIBUTE *template, CK_ULONG count); | |
139 CK_RV lg_SetAttributeValue(SDB *sdb, CK_OBJECT_HANDLE object_id, | |
140 const CK_ATTRIBUTE *template, CK_ULONG count); | |
141 CK_RV lg_DestroyObject(SDB *sdb, CK_OBJECT_HANDLE object_id); | |
142 | |
143 CK_RV lg_Close(SDB *sdb); | |
144 CK_RV lg_Reset(SDB *sdb); | |
145 | |
146 /* | |
147 * The old database doesn't share and doesn't support | |
148 * transactions. | |
149 */ | |
150 CK_RV lg_Begin(SDB *sdb); | |
151 CK_RV lg_Commit(SDB *sdb); | |
152 CK_RV lg_Abort(SDB *sdb); | |
153 CK_RV lg_GetMetaData(SDB *sdb, const char *id, SECItem *item1, SECItem *item2); | |
154 CK_RV lg_PutMetaData(SDB *sdb, const char *id, | |
155 const SECItem *item1, const SECItem *item2); | |
156 | |
157 SEC_END_PROTOS | |
158 | |
159 #ifndef XP_UNIX | |
160 | |
161 #define NO_FORK_CHECK | |
162 | |
163 #endif | |
164 | |
165 #ifndef NO_FORK_CHECK | |
166 | |
167 extern PRBool lg_parentForkedAfterC_Initialize; | |
168 #define SKIP_AFTER_FORK(x) if (!lg_parentForkedAfterC_Initialize) x | |
169 | |
170 #else | |
171 | |
172 #define SKIP_AFTER_FORK(x) x | |
173 | |
174 #endif /* NO_FORK_CHECK */ | |
175 | |
176 #endif /* _LGDB_H_ */ | |
177 |