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 #ifndef CKDBM_H
6 #define CKDBM_H
7 
8 #include "nssckmdt.h"
9 #include "nssckfw.h"
10 
11 /*
12  * I'm including this for access to the arena functions.
13  * Looks like we should publish that API.
14  */
15 #ifndef BASE_H
16 #include "base.h"
17 #endif /* BASE_H */
18 
19 /*
20  * This is where the Netscape extensions live, at least for now.
21  */
22 #ifndef CKT_H
23 #include "ckt.h"
24 #endif /* CKT_H */
25 
26 #include "mcom_db.h"
27 
28 NSS_EXTERN_DATA NSSCKMDInstance nss_dbm_mdInstance;
29 
30 typedef struct nss_dbm_db_struct nss_dbm_db_t;
31 struct nss_dbm_db_struct {
32     DB *db;
33     NSSCKFWMutex *crustylock;
34 };
35 
36 typedef struct nss_dbm_dbt_struct nss_dbm_dbt_t;
37 struct nss_dbm_dbt_struct {
38     DBT dbt;
39     nss_dbm_db_t *my_db;
40 };
41 
42 typedef struct nss_dbm_instance_struct nss_dbm_instance_t;
43 struct nss_dbm_instance_struct {
44     NSSArena *arena;
45     CK_ULONG nSlots;
46     char **filenames;
47     int *flags; /* e.g. O_RDONLY, O_RDWR */
48 };
49 
50 typedef struct nss_dbm_slot_struct nss_dbm_slot_t;
51 struct nss_dbm_slot_struct {
52     nss_dbm_instance_t *instance;
53     char *filename;
54     int flags;
55     nss_dbm_db_t *token_db;
56 };
57 
58 typedef struct nss_dbm_token_struct nss_dbm_token_t;
59 struct nss_dbm_token_struct {
60     NSSArena *arena;
61     nss_dbm_slot_t *slot;
62     nss_dbm_db_t *session_db;
63     NSSUTF8 *label;
64 };
65 
66 struct nss_dbm_dbt_node {
67     struct nss_dbm_dbt_node *next;
68     nss_dbm_dbt_t *dbt;
69 };
70 
71 typedef struct nss_dbm_session_struct nss_dbm_session_t;
72 struct nss_dbm_session_struct {
73     NSSArena *arena;
74     nss_dbm_token_t *token;
75     CK_ULONG deviceError;
76     struct nss_dbm_dbt_node *session_objects;
77     NSSCKFWMutex *list_lock;
78 };
79 
80 typedef struct nss_dbm_object_struct nss_dbm_object_t;
81 struct nss_dbm_object_struct {
82     NSSArena *arena; /* token or session */
83     nss_dbm_dbt_t *handle;
84 };
85 
86 typedef struct nss_dbm_find_struct nss_dbm_find_t;
87 struct nss_dbm_find_struct {
88     NSSArena *arena;
89     struct nss_dbm_dbt_node *found;
90     NSSCKFWMutex *list_lock;
91 };
92 
93 NSS_EXTERN NSSCKMDSlot *
94 nss_dbm_mdSlot_factory(
95     nss_dbm_instance_t *instance,
96     char *filename,
97     int flags,
98     CK_RV *pError);
99 
100 NSS_EXTERN NSSCKMDToken *
101 nss_dbm_mdToken_factory(
102     nss_dbm_slot_t *slot,
103     CK_RV *pError);
104 
105 NSS_EXTERN NSSCKMDSession *
106 nss_dbm_mdSession_factory(
107     nss_dbm_token_t *token,
108     NSSCKFWSession *fwSession,
109     NSSCKFWInstance *fwInstance,
110     CK_BBOOL rw,
111     CK_RV *pError);
112 
113 NSS_EXTERN NSSCKMDObject *
114 nss_dbm_mdObject_factory(
115     nss_dbm_object_t *object,
116     CK_RV *pError);
117 
118 NSS_EXTERN NSSCKMDFindObjects *
119 nss_dbm_mdFindObjects_factory(
120     nss_dbm_find_t *find,
121     CK_RV *pError);
122 
123 NSS_EXTERN nss_dbm_db_t *
124 nss_dbm_db_open(
125     NSSArena *arena,
126     NSSCKFWInstance *fwInstance,
127     char *filename,
128     int flags,
129     CK_RV *pError);
130 
131 NSS_EXTERN void
132 nss_dbm_db_close(
133     nss_dbm_db_t *db);
134 
135 NSS_EXTERN CK_VERSION
136 nss_dbm_db_get_format_version(
137     nss_dbm_db_t *db);
138 
139 NSS_EXTERN CK_RV
140 nss_dbm_db_set_label(
141     nss_dbm_db_t *db,
142     NSSUTF8 *label);
143 
144 NSS_EXTERN NSSUTF8 *
145 nss_dbm_db_get_label(
146     nss_dbm_db_t *db,
147     NSSArena *arena,
148     CK_RV *pError);
149 
150 NSS_EXTERN CK_RV
151 nss_dbm_db_delete_object(
152     nss_dbm_dbt_t *dbt);
153 
154 NSS_EXTERN nss_dbm_dbt_t *
155 nss_dbm_db_create_object(
156     NSSArena *arena,
157     nss_dbm_db_t *db,
158     CK_ATTRIBUTE_PTR pTemplate,
159     CK_ULONG ulAttributeCount,
160     CK_RV *pError,
161     CK_ULONG *pdbrv);
162 
163 NSS_EXTERN CK_RV
164 nss_dbm_db_find_objects(
165     nss_dbm_find_t *find,
166     nss_dbm_db_t *db,
167     CK_ATTRIBUTE_PTR pTemplate,
168     CK_ULONG ulAttributeCount,
169     CK_ULONG *pdbrv);
170 
171 NSS_EXTERN CK_BBOOL
172 nss_dbm_db_object_still_exists(
173     nss_dbm_dbt_t *dbt);
174 
175 NSS_EXTERN CK_ULONG
176 nss_dbm_db_get_object_attribute_count(
177     nss_dbm_dbt_t *dbt,
178     CK_RV *pError,
179     CK_ULONG *pdbrv);
180 
181 NSS_EXTERN CK_RV
182 nss_dbm_db_get_object_attribute_types(
183     nss_dbm_dbt_t *dbt,
184     CK_ATTRIBUTE_TYPE_PTR typeArray,
185     CK_ULONG ulCount,
186     CK_ULONG *pdbrv);
187 
188 NSS_EXTERN CK_ULONG
189 nss_dbm_db_get_object_attribute_size(
190     nss_dbm_dbt_t *dbt,
191     CK_ATTRIBUTE_TYPE type,
192     CK_RV *pError,
193     CK_ULONG *pdbrv);
194 
195 NSS_EXTERN NSSItem *
196 nss_dbm_db_get_object_attribute(
197     nss_dbm_dbt_t *dbt,
198     NSSArena *arena,
199     CK_ATTRIBUTE_TYPE type,
200     CK_RV *pError,
201     CK_ULONG *pdbrv);
202 
203 NSS_EXTERN CK_RV
204 nss_dbm_db_set_object_attribute(
205     nss_dbm_dbt_t *dbt,
206     CK_ATTRIBUTE_TYPE type,
207     NSSItem *value,
208     CK_ULONG *pdbrv);
209 
210 #endif /* CKDBM_H */
211