]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/proto-bdb.h
Mem context tweaks for bdb_dn2idl
[openldap] / servers / slapd / back-bdb / proto-bdb.h
1 /* $OpenLDAP$ */
2 /*
3  * Copyright 2000-2003 The OpenLDAP Foundation, All Rights Reserved.
4  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5  */
6
7 #ifndef _PROTO_BDB_H
8 #define _PROTO_BDB_H
9
10 LDAP_BEGIN_DECL
11
12 /*
13  * alias.c
14  */
15 Entry *bdb_deref_internal_r LDAP_P((
16         BackendDB *be,
17         Entry *e,
18         struct berval *dn,
19         int *err,
20         Entry **matched,
21         const char **text ));
22
23 #define deref_entry_r( be, e, err, matched, text ) \
24         bdb_deref_internal_r( be, e, NULL, err, matched, text )
25 #define deref_dn_r( be, dn, err, matched, text ) \
26         bdb_deref_internal_r( be, NULL, dn, err, matched, text)
27
28 /*
29  * attr.c
30  */
31
32 void bdb_attr_mask( struct bdb_info *bdb,
33         AttributeDescription *desc,
34         slap_mask_t *indexmask );
35
36 int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb,
37         const char *fname, int lineno,
38         int argc, char **argv ));
39
40 void bdb_attr_index_destroy LDAP_P(( Avlnode *tree ));
41
42 /*
43  * dbcache.c
44  */
45 int
46 bdb_db_cache(
47     Backend     *be,
48     DB_TXN *tid,
49     const char *name,
50         DB **db );
51
52 /*
53  * dn2entry.c
54  */
55 int bdb_dn2entry LDAP_P(( BackendDB *be, DB_TXN *tid,
56         struct berval *dn, EntryInfo **e, int matched,
57         u_int32_t locker, DB_LOCK *lock, void *ctx));
58
59 /*
60  * dn2id.c
61  */
62 int bdb_dn2id(
63         BackendDB *be,
64         DB_TXN *tid,
65         struct berval *dn,
66         EntryInfo *ei,
67         void *ctx );
68
69 int bdb_dn2id_add(
70         BackendDB *be,
71         DB_TXN *tid,
72         EntryInfo *eip,
73         Entry *e,
74         void *ctx );
75
76 int bdb_dn2id_delete(
77         BackendDB *be,
78         DB_TXN *tid,
79         EntryInfo *eip,
80         Entry *e,
81         void *ctx );
82
83 int bdb_dn2id_children(
84         Operation *op,
85         DB_TXN *tid,
86         Entry *e );
87
88 int
89 bdb_dn2idl(
90         BackendDB       *be,
91         struct berval   *dn,
92         int prefix,
93         ID *ids,
94         void *ctx );
95
96 /*
97  * entry.c
98  */
99 int bdb_entry_return( Entry *e );
100 BI_entry_release_rw bdb_entry_release;
101 BI_entry_get_rw bdb_entry_get;
102
103 /*
104  * error.c
105  */
106 void bdb_errcall( const char *pfx, char * msg );
107
108 /*
109  * filterentry.c
110  */
111 int bdb_filter_candidates(
112         Operation *op,
113         Filter  *f,
114         ID *ids,
115         ID *tmp,
116         ID *stack );
117
118 /*
119  * id2entry.c
120  */
121 int bdb_id2entry_add(
122         BackendDB *be,
123         DB_TXN *tid,
124         Entry *e );
125
126 int bdb_id2entry_update(
127         BackendDB *be,
128         DB_TXN *tid,
129         Entry *e );
130
131 int bdb_id2entry_delete(
132         BackendDB *be,
133         DB_TXN *tid,
134         Entry *e);
135
136 int bdb_id2entry(
137         BackendDB *be,
138         DB_TXN *tid,
139         ID id,
140         Entry **e);
141
142 void bdb_entry_free ( Entry *e );
143
144 /*
145  * idl.c
146  */
147 #ifdef SLAP_IDL_CACHE
148 int bdb_idl_entry_cmp( const void*, const void* );
149
150 int bdb_idl_cache_get(
151         struct bdb_info *bdb,
152         DB *db,
153         DBT *key,
154         ID *ids );
155
156 void
157 bdb_idl_cache_put(
158         struct bdb_info *bdb,
159         DB              *db,
160         DBT             *key,
161         ID              *ids,
162         int             rc );
163
164 void
165 bdb_idl_cache_del(
166         struct bdb_info *bdb,
167         DB              *db,
168         DBT             *key );
169 #endif
170
171 unsigned bdb_idl_search( ID *ids, ID id );
172
173 int bdb_bt_compare(
174         DB *db,
175         const DBT *a,
176         const DBT *b );
177
178 int bdb_idl_fetch_key(
179         BackendDB *be,
180         DB *db,
181         DB_TXN *txn,
182         DBT *key,
183         ID *ids );
184
185 int bdb_idl_insert( ID *ids, ID id );
186
187 int bdb_idl_insert_key(
188         BackendDB *be,
189         DB *db,
190         DB_TXN *txn,
191         DBT *key,
192         ID id );
193
194 int bdb_idl_delete_key(
195         BackendDB *be,
196         DB *db,
197         DB_TXN *txn,
198         DBT *key,
199         ID id );
200
201 #if 0
202 int
203 bdb_idl_notin(
204     ID  *a,
205     ID  *b,
206         ID      *ids );
207 #endif
208
209 int
210 bdb_idl_intersection(
211         ID *a,
212         ID *b );
213
214 int
215 bdb_idl_union(
216         ID *a,
217         ID *b );
218
219 ID bdb_idl_first( ID *ids, ID *cursor );
220 ID bdb_idl_next( ID *ids, ID *cursor );
221
222
223 /*
224  * index.c
225  */
226 extern int
227 bdb_index_is_indexed LDAP_P((
228         Backend *be,
229         AttributeDescription *desc ));
230
231 extern int
232 bdb_index_param LDAP_P((
233         Backend *be,
234         AttributeDescription *desc,
235         int ftype,
236         DB **db,
237         slap_mask_t *mask,
238         struct berval *prefix ));
239
240 extern int
241 bdb_index_values LDAP_P((
242         Operation *op,
243         DB_TXN *txn,
244         AttributeDescription *desc,
245         BerVarray vals,
246         ID id,
247         int opid ));
248
249 int bdb_index_entry LDAP_P(( Operation *op, DB_TXN *t, int r, Entry *e ));
250
251 #define bdb_index_entry_add(be,t,e) \
252         bdb_index_entry((be),(t),SLAP_INDEX_ADD_OP,(e))
253 #define bdb_index_entry_del(be,t,e) \
254         bdb_index_entry((be),(t),SLAP_INDEX_DELETE_OP,(e))
255
256 /*
257  * init.c
258  */
259 extern struct berval bdb_uuid;
260
261 /*
262  * key.c
263  */
264 extern int
265 bdb_key_read(
266     Backend     *be,
267         DB *db,
268         DB_TXN *txn,
269     struct berval *k,
270         ID *ids );
271
272 extern int
273 bdb_key_change(
274     Backend      *be,
275     DB *db,
276         DB_TXN *txn,
277     struct berval *k,
278     ID id,
279     int op );
280         
281 /*
282  * nextid.c
283  */
284 int bdb_next_id( BackendDB *be, DB_TXN *tid, ID *id );
285 int bdb_last_id( BackendDB *be, DB_TXN *tid );
286
287 /*
288  * modify.c
289  */
290 int bdb_modify_internal(
291         Operation *op,
292         DB_TXN *tid,
293         Modifications *modlist,
294         Entry *e,
295         const char **text,
296         char *textbuf,
297         size_t textlen );
298
299 /*
300  * passwd.c
301  */
302 BI_op_extended bdb_exop_passwd;
303
304
305 /*
306  * cache.c
307  */
308
309 #define bdb_cache_entryinfo_lock(e) \
310         ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex )
311 #define bdb_cache_entryinfo_unlock(e) \
312         ldap_pvt_thread_mutex_unlock( &(e)->bei_kids_mutex )
313
314 #if 0
315 void bdb_cache_return_entry_rw( DB_ENV *env, Cache *cache, Entry *e,
316         int rw, DB_LOCK *lock );
317 #else
318 #define bdb_cache_return_entry_rw( env, cache, e, rw, lock ) \
319         bdb_cache_entry_db_unlock( env, lock )
320 #define bdb_cache_return_entry( env, lock ) \
321         bdb_cache_entry_db_unlock( env, lock )
322 #endif
323 #define bdb_cache_return_entry_r(env, c, e, l) \
324         bdb_cache_return_entry_rw((env), (c), (e), 0, (l))
325 #define bdb_cache_return_entry_w(env, c, e, l) \
326         bdb_cache_return_entry_rw((env), (c), (e), 1, (l))
327 #if 0
328 void bdb_unlocked_cache_return_entry_rw( Cache *cache, Entry *e, int rw );
329 #else
330 #define bdb_unlocked_cache_return_entry_rw( a, b, c )
331 #endif
332 #define bdb_unlocked_cache_return_entry_r( c, e ) \
333         bdb_unlocked_cache_return_entry_rw((c), (e), 0)
334 #define bdb_unlocked_cache_return_entry_w( c, e ) \
335         bdb_unlocked_cache_return_entry_rw((c), (e), 1)
336
337 int bdb_cache_children(
338         Operation *op,
339         DB_TXN *txn,
340         Entry *e
341 );
342 int bdb_cache_add(
343         struct bdb_info *bdb,
344         EntryInfo *pei,
345         Entry   *e,
346         struct berval *nrdn,
347         u_int32_t locker
348 );
349 int bdb_cache_modrdn(
350         Entry   *e,
351         struct berval *nrdn,
352         Entry   *new,
353         EntryInfo *ein,
354         DB_ENV *env,
355         u_int32_t locker,
356         DB_LOCK *lock
357 );
358 int bdb_cache_modify(
359         Entry *e,
360         Attribute *newAttrs,
361         DB_ENV *env,
362         u_int32_t locker,
363         DB_LOCK *lock
364 );
365 int bdb_cache_update_entry(
366        Cache   *cache,
367        Entry   *e
368 );
369 int bdb_cache_find_entry_ndn2id(
370         Backend *be,
371         DB_TXN  *txn,
372         struct berval   *ndn,
373         EntryInfo       **res,
374         u_int32_t       locker,
375         void    *ctx
376 );
377 int bdb_cache_find_entry_id(
378         Backend *be,
379         DB_TXN  *tid,
380         ID              id,
381         EntryInfo **eip,
382         int     islocked,
383         u_int32_t       locker,
384         DB_LOCK         *lock,
385         void    *ctx
386 );
387 int bdb_cache_delete_entry(
388         Cache   *cache,
389         Entry   *e,
390         DB_ENV  *env,
391         u_int32_t locker,
392         DB_LOCK *lock
393 );
394 void bdb_cache_release_all( Cache *cache );
395
396 /*
397  * lcup.c
398  */
399
400 BI_op_abandon bdb_abandon;
401
402 BI_op_cancel bdb_cancel;
403
404 #if defined(LDAP_CLIENT_UPDATE) || defined(LDAP_SYNC)
405 int bdb_do_search(
406         Operation       *op,
407         SlapReply       *rs,
408         Operation       *ps_op,
409         Entry           *entry,
410         int             psearch_type
411 );
412 #define bdb_psearch(op, rs, sop, e, ps_type)    bdb_do_search(op, rs, sop, e, ps_type)
413 #endif
414
415 /*
416  * search.c
417  */
418
419 #ifdef LDAP_CLIENT_UPDATE
420 int
421 bdb_build_lcup_update_ctrl(
422         Operation       *op,
423         SlapReply       *rs,
424         Entry           *e,
425         int             entry_count,
426         LDAPControl     **ctrls,
427         int             num_ctrls,
428         struct berval   *latest_entrycsn_bv,
429         int             isdeleted       );
430
431 int
432 bdb_build_lcup_done_ctrl(
433         Operation       *op,
434         SlapReply       *rs,
435         LDAPControl     **ctrls,
436         int             num_ctrls,
437         struct berval   *latest_entrycsn_bv     );
438 #endif
439
440 #ifdef LDAP_SYNC
441 int
442 bdb_build_sync_state_ctrl(
443         Operation       *op,
444         SlapReply       *rs,
445         Entry           *e,
446         int             entry_sync_state,
447         LDAPControl     **ctrls,
448         int             num_ctrls,
449         int             send_cookie,
450         struct berval   *latest_entrycsn_bv     );
451
452 int
453 bdb_build_sync_done_ctrl(
454         Operation       *op,
455         SlapReply       *rs,
456         LDAPControl     **ctrls,
457         int             num_ctrls,
458         int             send_cookie,
459         struct berval   *latest_entrycsn_bv     );
460
461 int
462 bdb_send_ldap_intermediate(
463         Operation   *op,
464         SlapReply       *rs,
465         int         state,
466         struct berval *cookie );
467 #endif
468
469 #ifdef BDB_REUSE_LOCKERS
470
471 int bdb_locker_id( Operation *op, DB_ENV *env, int *locker );
472
473 #endif
474
475 #ifdef HAVE_EBCDIC
476 char *ebcdic_dberror( int rc );
477
478 #define db_strerror(x)  ebcdic_dberror(x)
479 #endif
480
481 LDAP_END_DECL
482
483 #endif /* _PROTO_BDB_H */