]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/proto-bdb.h
18a5e304d79ec68b0a613c07cdc18a0a312d87b7
[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 #ifdef BDB_HIER
13 #define BDB_SYMBOL(x)   LDAP_CONCAT(hdb_,x)
14 #else
15 #define BDB_SYMBOL(x)   LDAP_CONCAT(bdb_,x)
16 #endif
17
18 /*
19  * attr.c
20  */
21
22 #define bdb_attr_mask                           BDB_SYMBOL(attr_mask)
23 #define bdb_attr_index_config           BDB_SYMBOL(attr_index_config)
24 #define bdb_attr_index_destroy          BDB_SYMBOL(attr_index_destroy)
25
26 void bdb_attr_mask( struct bdb_info *bdb,
27         AttributeDescription *desc,
28         slap_mask_t *indexmask );
29
30 int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb,
31         const char *fname, int lineno,
32         int argc, char **argv ));
33
34 void bdb_attr_index_destroy LDAP_P(( Avlnode *tree ));
35
36 /*
37  * ctxcsn.c
38  */
39 #define bdb_csn_commit                          BDB_SYMBOL(csn_commit)
40
41 int bdb_csn_commit LDAP_P(( Operation *op, SlapReply *rs, DB_TXN *tid,
42                                                 EntryInfo *ei, EntryInfo **suffix_ei, Entry **ctxcsn_e,
43                                                 int *ctxcsn_added, u_int32_t locker ));
44
45 /*
46  * dbcache.c
47  */
48 #define bdb_db_cache                            BDB_SYMBOL(db_cache)
49
50 int
51 bdb_db_cache(
52     Backend     *be,
53     DB_TXN *tid,
54     const char *name,
55         DB **db );
56
57 /*
58  * dn2entry.c
59  */
60 #define bdb_dn2entry                            BDB_SYMBOL(dn2entry)
61
62 int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid,
63         struct berval *dn, EntryInfo **e, int matched,
64         u_int32_t locker, DB_LOCK *lock ));
65
66 /*
67  * dn2id.c
68  */
69 #define bdb_dn2id                                       BDB_SYMBOL(dn2id)
70 #define bdb_dn2id_add                           BDB_SYMBOL(dn2id_add)
71 #define bdb_dn2id_delete                        BDB_SYMBOL(dn2id_delete)
72 #define bdb_dn2id_children                      BDB_SYMBOL(dn2id_children)
73 #define bdb_dn2idl                                      BDB_SYMBOL(dn2idl)
74
75 int bdb_dn2id(
76         Operation *op,
77         DB_TXN *tid,
78         struct berval *dn,
79         EntryInfo *ei );
80
81 int bdb_dn2id_add(
82         Operation *op,
83         DB_TXN *tid,
84         EntryInfo *eip,
85         Entry *e );
86
87 int bdb_dn2id_delete(
88         Operation *op,
89         DB_TXN *tid,
90         EntryInfo *eip,
91         Entry *e );
92
93 int bdb_dn2id_children(
94         Operation *op,
95         DB_TXN *tid,
96         Entry *e );
97
98 int bdb_dn2idl(
99         Operation *op,
100         Entry *e,
101         ID *ids,
102         ID *stack );
103
104 #ifdef BDB_HIER
105 #define bdb_dn2id_parent                        BDB_SYMBOL(dn2id_parent)
106 #define bdb_dup_compare                         BDB_SYMBOL(dup_compare)
107 #define bdb_fix_dn                                      BDB_SYMBOL(fix_dn)
108
109 int bdb_dn2id_parent(
110         Operation *op,
111         DB_TXN *txn,
112         EntryInfo *ei,
113         ID *idp );
114
115 int bdb_dup_compare(
116         DB *db,
117         const DBT *usrkey,
118         const DBT *curkey );
119
120 int bdb_fix_dn( Entry *e, int checkit );
121 #endif
122
123
124 /*
125  * error.c
126  */
127 #define bdb_errcall                                     BDB_SYMBOL(errcall)
128
129 void bdb_errcall( const char *pfx, char * msg );
130
131 #ifdef HAVE_EBCDIC
132 #define ebcdic_dberror                          BDB_SYMBOL(ebcdic_dberror)
133
134 char *ebcdic_dberror( int rc );
135 #define db_strerror(x)  ebcdic_dberror(x)
136 #endif
137
138 /*
139  * filterentry.c
140  */
141 #define bdb_filter_candidates           BDB_SYMBOL(filter_candidates)
142
143 int bdb_filter_candidates(
144         Operation *op,
145         Filter  *f,
146         ID *ids,
147         ID *tmp,
148         ID *stack );
149
150 /*
151  * id2entry.c
152  */
153 #define bdb_id2entry                            BDB_SYMBOL(id2entry)
154 #define bdb_id2entry_add                        BDB_SYMBOL(id2entry_add)
155 #define bdb_id2entry_update                     BDB_SYMBOL(id2entry_update)
156 #define bdb_id2entry_delete                     BDB_SYMBOL(id2entry_delete)
157
158 int bdb_id2entry_add(
159         BackendDB *be,
160         DB_TXN *tid,
161         Entry *e );
162
163 int bdb_id2entry_update(
164         BackendDB *be,
165         DB_TXN *tid,
166         Entry *e );
167
168 int bdb_id2entry_delete(
169         BackendDB *be,
170         DB_TXN *tid,
171         Entry *e);
172
173 int bdb_id2entry(
174         BackendDB *be,
175         DB_TXN *tid,
176         ID id,
177         Entry **e);
178
179 #define bdb_entry_free                          BDB_SYMBOL(entry_free)
180 #define bdb_entry_return                        BDB_SYMBOL(entry_return)
181 #define bdb_entry_release                       BDB_SYMBOL(entry_release)
182 #define bdb_entry_get                           BDB_SYMBOL(entry_get)
183
184 void bdb_entry_free ( Entry *e );
185 int bdb_entry_return( Entry *e );
186 BI_entry_release_rw bdb_entry_release;
187 BI_entry_get_rw bdb_entry_get;
188
189
190 /*
191  * idl.c
192  */
193 #ifdef SLAP_IDL_CACHE
194
195 #define bdb_idl_cache_get                       BDB_SYMBOL(idl_cache_get)
196 #define bdb_idl_cache_put                       BDB_SYMBOL(idl_cache_put)
197 #define bdb_idl_cache_del                       BDB_SYMBOL(idl_cache_del)
198
199 int bdb_idl_cache_get(
200         struct bdb_info *bdb,
201         DB *db,
202         DBT *key,
203         ID *ids );
204
205 void
206 bdb_idl_cache_put(
207         struct bdb_info *bdb,
208         DB              *db,
209         DBT             *key,
210         ID              *ids,
211         int             rc );
212
213 void
214 bdb_idl_cache_del(
215         struct bdb_info *bdb,
216         DB              *db,
217         DBT             *key );
218 #endif
219
220 #define bdb_idl_first                           BDB_SYMBOL(idl_first)
221 #define bdb_idl_next                            BDB_SYMBOL(idl_next)
222 #define bdb_idl_search                          BDB_SYMBOL(idl_search)
223 #define bdb_idl_insert                          BDB_SYMBOL(idl_insert)
224 #define bdb_idl_intersection            BDB_SYMBOL(idl_intersection)
225 #define bdb_idl_union                           BDB_SYMBOL(idl_union)
226
227 #define bdb_idl_fetch_key                       BDB_SYMBOL(idl_fetch_key)
228 #define bdb_idl_insert_key                      BDB_SYMBOL(idl_insert_key)
229 #define bdb_idl_delete_key                      BDB_SYMBOL(idl_delete_key)
230
231 unsigned bdb_idl_search( ID *ids, ID id );
232
233 int bdb_idl_fetch_key(
234         BackendDB *be,
235         DB *db,
236         DB_TXN *txn,
237         DBT *key,
238         ID *ids );
239
240 int bdb_idl_insert( ID *ids, ID id );
241
242 int bdb_idl_insert_key(
243         BackendDB *be,
244         DB *db,
245         DB_TXN *txn,
246         DBT *key,
247         ID id );
248
249 int bdb_idl_delete_key(
250         BackendDB *be,
251         DB *db,
252         DB_TXN *txn,
253         DBT *key,
254         ID id );
255
256 int
257 bdb_idl_intersection(
258         ID *a,
259         ID *b );
260
261 int
262 bdb_idl_union(
263         ID *a,
264         ID *b );
265
266 ID bdb_idl_first( ID *ids, ID *cursor );
267 ID bdb_idl_next( ID *ids, ID *cursor );
268
269
270 #define bdb_bt_compare                          BDB_SYMBOL(bt_compare)
271
272 int bdb_bt_compare(
273         DB *db,
274         const DBT *a,
275         const DBT *b );
276
277
278 /*
279  * index.c
280  */
281 #define bdb_index_is_indexed            BDB_SYMBOL(index_is_indexed)
282 #define bdb_index_param                         BDB_SYMBOL(index_param)
283 #define bdb_index_values                        BDB_SYMBOL(index_values)
284 #define bdb_index_entry                         BDB_SYMBOL(index_entry)
285
286 extern int
287 bdb_index_is_indexed LDAP_P((
288         Backend *be,
289         AttributeDescription *desc ));
290
291 extern int
292 bdb_index_param LDAP_P((
293         Backend *be,
294         AttributeDescription *desc,
295         int ftype,
296         DB **db,
297         slap_mask_t *mask,
298         struct berval *prefix ));
299
300 extern int
301 bdb_index_values LDAP_P((
302         Operation *op,
303         DB_TXN *txn,
304         AttributeDescription *desc,
305         BerVarray vals,
306         BerVarray xvals,
307         ID id,
308         int opid ));
309
310 int bdb_index_entry LDAP_P(( Operation *op, DB_TXN *t, int r, Entry *e ));
311
312 #define bdb_index_entry_add(be,t,e) \
313         bdb_index_entry((be),(t),SLAP_INDEX_ADD_OP,(e))
314 #define bdb_index_entry_del(be,t,e) \
315         bdb_index_entry((be),(t),SLAP_INDEX_DELETE_OP,(e))
316
317 /*
318  * init.c
319  */
320 #define bdb_uuid                                        BDB_SYMBOL(uuid)
321
322 extern struct berval bdb_uuid;
323
324 /*
325  * key.c
326  */
327 #define bdb_key_read                            BDB_SYMBOL(key_read)
328 #define bdb_key_change                          BDB_SYMBOL(key_change)
329
330 extern int
331 bdb_key_read(
332     Backend     *be,
333         DB *db,
334         DB_TXN *txn,
335     struct berval *k,
336         ID *ids );
337
338 extern int
339 bdb_key_change(
340     Backend      *be,
341     DB *db,
342         DB_TXN *txn,
343     struct berval *k,
344     ID id,
345     int op );
346         
347 /*
348  * nextid.c
349  */
350 #define bdb_next_id                                     BDB_SYMBOL(next_id)
351 #define bdb_last_id                                     BDB_SYMBOL(last_id)
352
353 int bdb_next_id( BackendDB *be, DB_TXN *tid, ID *id );
354 int bdb_last_id( BackendDB *be, DB_TXN *tid );
355
356 /*
357  * modify.c
358  */
359 #define bdb_modify_internal                     BDB_SYMBOL(modify_internal)
360
361 int bdb_modify_internal(
362         Operation *op,
363         DB_TXN *tid,
364         Modifications *modlist,
365         Entry *e,
366         const char **text,
367         char *textbuf,
368         size_t textlen );
369
370 /*
371  * passwd.c
372  */
373 #define bdb_exop_passwd                         BDB_SYMBOL(exop_passwd)
374
375 BI_op_extended bdb_exop_passwd;
376
377
378 /*
379  * cache.c
380  */
381 #define bdb_cache_entry_db_unlock       BDB_SYMBOL(cache_entry_db_unlock)
382
383 #define bdb_cache_entryinfo_lock(e) \
384         ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex )
385 #define bdb_cache_entryinfo_unlock(e) \
386         ldap_pvt_thread_mutex_unlock( &(e)->bei_kids_mutex )
387
388 /* What a mess. Hopefully the current cache scheme will stabilize
389  * and we can trim out all of this stuff.
390  */
391 #if 0
392 void bdb_cache_return_entry_rw( DB_ENV *env, Cache *cache, Entry *e,
393         int rw, DB_LOCK *lock );
394 #else
395 #define bdb_cache_return_entry_rw( env, cache, e, rw, lock ) \
396         bdb_cache_entry_db_unlock( env, lock )
397 #define bdb_cache_return_entry( env, lock ) \
398         bdb_cache_entry_db_unlock( env, lock )
399 #endif
400 #define bdb_cache_return_entry_r(env, c, e, l) \
401         bdb_cache_return_entry_rw((env), (c), (e), 0, (l))
402 #define bdb_cache_return_entry_w(env, c, e, l) \
403         bdb_cache_return_entry_rw((env), (c), (e), 1, (l))
404 #if 0
405 void bdb_unlocked_cache_return_entry_rw( Cache *cache, Entry *e, int rw );
406 #else
407 #define bdb_unlocked_cache_return_entry_rw( a, b, c )
408 #endif
409 #define bdb_unlocked_cache_return_entry_r( c, e ) \
410         bdb_unlocked_cache_return_entry_rw((c), (e), 0)
411 #define bdb_unlocked_cache_return_entry_w( c, e ) \
412         bdb_unlocked_cache_return_entry_rw((c), (e), 1)
413
414 #define bdb_cache_add                           BDB_SYMBOL(cache_add)
415 #define bdb_cache_children                      BDB_SYMBOL(cache_children)
416 #define bdb_cache_delete                        BDB_SYMBOL(cache_delete)
417 #define bdb_cache_delete_cleanup                BDB_SYMBOL(cache_delete_cleanup)
418 #define bdb_cache_find_id                       BDB_SYMBOL(cache_find_id)
419 #define bdb_cache_find_ndn                      BDB_SYMBOL(cache_find_ndn)
420 #define bdb_cache_modify                        BDB_SYMBOL(cache_modify)
421 #define bdb_cache_modrdn                        BDB_SYMBOL(cache_modrdn)
422 #define bdb_cache_release_all           BDB_SYMBOL(cache_release_all)
423
424 int bdb_cache_children(
425         Operation *op,
426         DB_TXN *txn,
427         Entry *e
428 );
429 int bdb_cache_add(
430         struct bdb_info *bdb,
431         EntryInfo *pei,
432         Entry   *e,
433         struct berval *nrdn,
434         u_int32_t locker
435 );
436 int bdb_cache_modrdn(
437         Entry   *e,
438         struct berval *nrdn,
439         Entry   *new,
440         EntryInfo *ein,
441         DB_ENV *env,
442         u_int32_t locker,
443         DB_LOCK *lock
444 );
445 int bdb_cache_modify(
446         Entry *e,
447         Attribute *newAttrs,
448         DB_ENV *env,
449         u_int32_t locker,
450         DB_LOCK *lock
451 );
452 int bdb_cache_find_ndn(
453         Operation *op,
454         DB_TXN  *txn,
455         struct berval   *ndn,
456         EntryInfo       **res,
457         u_int32_t       locker
458 );
459 int bdb_cache_find_id(
460         Operation *op,
461         DB_TXN  *tid,
462         ID              id,
463         EntryInfo **eip,
464         int     islocked,
465         u_int32_t       locker,
466         DB_LOCK         *lock
467 );
468 int bdb_cache_delete(
469         Cache   *cache,
470         Entry   *e,
471         DB_ENV  *env,
472         u_int32_t locker,
473         DB_LOCK *lock
474 );
475 void bdb_cache_delete_cleanup(
476         Entry   *e
477 );
478 void bdb_cache_release_all( Cache *cache );
479
480 #define bdb_cache_entry_db_relock               BDB_SYMBOL(cache_entry_db_relock)
481 int bdb_cache_entry_db_relock(
482         DB_ENV *env,
483         u_int32_t locker,
484         EntryInfo *ei,
485         int rw,
486         int tryOnly,
487         DB_LOCK *lock );
488
489 #ifdef BDB_REUSE_LOCKERS
490
491 #define bdb_locker_id                           BDB_SYMBOL(locker_id)
492 int bdb_locker_id( Operation *op, DB_ENV *env, int *locker );
493
494 #define LOCK_ID_FREE(env, locker)
495 #define LOCK_ID(env, locker)    bdb_locker_id(op, env, locker)
496
497 #else
498
499 #define LOCK_ID_FREE(env, locker)       XLOCK_ID_FREE(env, locker)
500 #define LOCK_ID(env, locker)            XLOCK_ID(env, locker)
501
502 #endif
503
504 /*
505  * search.c
506  */
507
508 #define bdb_abandon                                     BDB_SYMBOL(abandon)
509 #define bdb_cancel                                      BDB_SYMBOL(cancel)
510 #define bdb_do_search                           BDB_SYMBOL(do_search)
511
512 BI_op_abandon bdb_abandon;
513 BI_op_cancel bdb_cancel;
514
515 int bdb_do_search(
516         Operation       *op,
517         SlapReply       *rs,
518         Operation       *ps_op,
519         Entry           *entry,
520         int             psearch_type
521 );
522 #define bdb_psearch(op, rs, sop, e, ps_type)    bdb_do_search(op, rs, sop, e, ps_type)
523
524 #define bdb_build_sync_state_ctrl       BDB_SYMBOL(build_sync_state_ctrl)
525 #define bdb_build_sync_done_ctrl        BDB_SYMBOL(build_sync_done_ctrl)
526 #define bdb_send_ldap_intermediate      BDB_SYMBOL(send_ldap_intermediate)
527
528 int
529 bdb_build_sync_state_ctrl(
530         Operation       *op,
531         SlapReply               *rs,
532         Entry           *e,
533         int             entry_sync_state,
534         LDAPControl     **ctrls,
535         int             num_ctrls,
536         int             send_cookie,
537         struct berval   *csn     );
538
539 int
540 bdb_build_sync_done_ctrl(
541         Operation       *op,
542         SlapReply       *rs,
543         LDAPControl     **ctrls,
544         int             num_ctrls,
545         int             send_cookie,
546         struct berval   *latest_entrycsn_bv     );
547
548 int
549 bdb_send_ldap_intermediate(
550         Operation   *op,
551         SlapReply       *rs,
552         int         state,
553         struct berval *cookie );
554
555 /*
556  * trans.c
557  */
558 #define bdb_trans_backoff                       BDB_SYMBOL(trans_backoff)
559
560 void
561 bdb_trans_backoff( int num_retries );
562
563 LDAP_END_DECL
564
565 #endif /* _PROTO_BDB_H */