]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/proto-bdb.h
Fix ITS#3424
[openldap] / servers / slapd / back-bdb / proto-bdb.h
1 /* $OpenLDAP$ */
2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
3  *
4  * Copyright 2000-2004 The OpenLDAP Foundation.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted only as authorized by the OpenLDAP
9  * Public License.
10  *
11  * A copy of this license is available in the file LICENSE in the
12  * top-level directory of the distribution or, alternatively, at
13  * <http://www.OpenLDAP.org/license.html>.
14  */
15
16 #ifndef _PROTO_BDB_H
17 #define _PROTO_BDB_H
18
19 LDAP_BEGIN_DECL
20
21 #ifdef BDB_HIER
22 #define BDB_SYMBOL(x)   LDAP_CONCAT(hdb_,x)
23 #define BDB_UCTYPE      "HDB"
24 #else
25 #define BDB_SYMBOL(x)   LDAP_CONCAT(bdb_,x)
26 #define BDB_UCTYPE      "BDB"
27 #endif
28
29 /*
30  * attr.c
31  */
32
33 #define bdb_attr_mask                           BDB_SYMBOL(attr_mask)
34 #define bdb_attr_index_config           BDB_SYMBOL(attr_index_config)
35 #define bdb_attr_index_destroy          BDB_SYMBOL(attr_index_destroy)
36
37 void bdb_attr_mask( struct bdb_info *bdb,
38         AttributeDescription *desc,
39         slap_mask_t *indexmask );
40
41 int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb,
42         const char *fname, int lineno,
43         int argc, char **argv ));
44
45 void bdb_attr_index_destroy LDAP_P(( Avlnode *tree ));
46
47 /*
48  * ctxcsn.c
49  */
50 #define bdb_csn_commit                          BDB_SYMBOL(csn_commit)
51 #define bdb_get_commit_csn                      BDB_SYMBOL(get_commit_csn)
52
53 int bdb_csn_commit LDAP_P(( Operation *op, SlapReply *rs, DB_TXN *tid,
54                                                 EntryInfo *ei, EntryInfo **suffix_ei, Entry **ctxcsn_e,
55                                                 int *ctxcsn_added, u_int32_t locker ));
56
57 int bdb_get_commit_csn LDAP_P(( Operation *op, SlapReply *rs,
58                                                 struct berval **search_context_csn,
59                                                 u_int32_t locker, DB_LOCK *ctxcsn_lock ));
60
61 /*
62  * dbcache.c
63  */
64 #define bdb_db_cache                            BDB_SYMBOL(db_cache)
65
66 int
67 bdb_db_cache(
68     Backend     *be,
69     const char *name,
70         DB **db );
71
72 /*
73  * dn2entry.c
74  */
75 #define bdb_dn2entry                            BDB_SYMBOL(dn2entry)
76
77 int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid,
78         struct berval *dn, EntryInfo **e, int matched,
79         u_int32_t locker, DB_LOCK *lock ));
80
81 /*
82  * dn2id.c
83  */
84 #define bdb_dn2id                                       BDB_SYMBOL(dn2id)
85 #define bdb_dn2id_add                           BDB_SYMBOL(dn2id_add)
86 #define bdb_dn2id_delete                        BDB_SYMBOL(dn2id_delete)
87 #define bdb_dn2id_children                      BDB_SYMBOL(dn2id_children)
88 #define bdb_dn2idl                                      BDB_SYMBOL(dn2idl)
89
90 int bdb_dn2id(
91         Operation *op,
92         DB_TXN *tid,
93         struct berval *dn,
94         EntryInfo *ei );
95
96 int bdb_dn2id_add(
97         Operation *op,
98         DB_TXN *tid,
99         EntryInfo *eip,
100         Entry *e );
101
102 int bdb_dn2id_delete(
103         Operation *op,
104         DB_TXN *tid,
105         EntryInfo *eip,
106         Entry *e );
107
108 int bdb_dn2id_children(
109         Operation *op,
110         DB_TXN *tid,
111         Entry *e );
112
113 int bdb_dn2idl(
114         Operation *op,
115         Entry *e,
116         ID *ids,
117         ID *stack );
118
119 #ifdef BDB_HIER
120 #define bdb_dn2id_parent                        BDB_SYMBOL(dn2id_parent)
121 #define bdb_dup_compare                         BDB_SYMBOL(dup_compare)
122 #define bdb_fix_dn                                      BDB_SYMBOL(fix_dn)
123
124 int bdb_dn2id_parent(
125         Operation *op,
126         DB_TXN *txn,
127         EntryInfo *ei,
128         ID *idp );
129
130 int bdb_dup_compare(
131         DB *db,
132         const DBT *usrkey,
133         const DBT *curkey );
134
135 int bdb_fix_dn( Entry *e, int checkit );
136 #endif
137
138
139 /*
140  * error.c
141  */
142 #define bdb_errcall                                     BDB_SYMBOL(errcall)
143
144 #if DB_VERSION_FULL < 0x04030000
145 void bdb_errcall( const char *pfx, char * msg );
146 #else
147 void bdb_errcall( const DB_ENV *env, const char *pfx, const char * msg );
148 #endif
149
150 #ifdef HAVE_EBCDIC
151 #define ebcdic_dberror                          BDB_SYMBOL(ebcdic_dberror)
152
153 char *ebcdic_dberror( int rc );
154 #define db_strerror(x)  ebcdic_dberror(x)
155 #endif
156
157 /*
158  * filterentry.c
159  */
160 #define bdb_filter_candidates           BDB_SYMBOL(filter_candidates)
161
162 int bdb_filter_candidates(
163         Operation *op,
164         Filter  *f,
165         ID *ids,
166         ID *tmp,
167         ID *stack );
168
169 /*
170  * id2entry.c
171  */
172 #define bdb_id2entry                            BDB_SYMBOL(id2entry)
173 #define bdb_id2entry_add                        BDB_SYMBOL(id2entry_add)
174 #define bdb_id2entry_update                     BDB_SYMBOL(id2entry_update)
175 #define bdb_id2entry_delete                     BDB_SYMBOL(id2entry_delete)
176
177 int bdb_id2entry_add(
178         BackendDB *be,
179         DB_TXN *tid,
180         Entry *e );
181
182 int bdb_id2entry_update(
183         BackendDB *be,
184         DB_TXN *tid,
185         Entry *e );
186
187 int bdb_id2entry_delete(
188         BackendDB *be,
189         DB_TXN *tid,
190         Entry *e);
191
192 int bdb_id2entry(
193         BackendDB *be,
194         DB_TXN *tid,
195         ID id,
196         Entry **e);
197
198 #define bdb_entry_free                          BDB_SYMBOL(entry_free)
199 #define bdb_entry_return                        BDB_SYMBOL(entry_return)
200 #define bdb_entry_release                       BDB_SYMBOL(entry_release)
201 #define bdb_entry_get                           BDB_SYMBOL(entry_get)
202
203 void bdb_entry_free ( Entry *e );
204 int bdb_entry_return( Entry *e );
205 BI_entry_release_rw bdb_entry_release;
206 BI_entry_get_rw bdb_entry_get;
207
208
209 /*
210  * idl.c
211  */
212
213 #define bdb_idl_cache_get                       BDB_SYMBOL(idl_cache_get)
214 #define bdb_idl_cache_put                       BDB_SYMBOL(idl_cache_put)
215 #define bdb_idl_cache_del                       BDB_SYMBOL(idl_cache_del)
216
217 int bdb_idl_cache_get(
218         struct bdb_info *bdb,
219         DB *db,
220         DBT *key,
221         ID *ids );
222
223 void
224 bdb_idl_cache_put(
225         struct bdb_info *bdb,
226         DB              *db,
227         DBT             *key,
228         ID              *ids,
229         int             rc );
230
231 void
232 bdb_idl_cache_del(
233         struct bdb_info *bdb,
234         DB              *db,
235         DBT             *key );
236
237 #define bdb_idl_first                           BDB_SYMBOL(idl_first)
238 #define bdb_idl_next                            BDB_SYMBOL(idl_next)
239 #define bdb_idl_search                          BDB_SYMBOL(idl_search)
240 #define bdb_idl_insert                          BDB_SYMBOL(idl_insert)
241 #define bdb_idl_intersection            BDB_SYMBOL(idl_intersection)
242 #define bdb_idl_union                           BDB_SYMBOL(idl_union)
243
244 #define bdb_idl_fetch_key                       BDB_SYMBOL(idl_fetch_key)
245 #define bdb_idl_insert_key                      BDB_SYMBOL(idl_insert_key)
246 #define bdb_idl_delete_key                      BDB_SYMBOL(idl_delete_key)
247
248 unsigned bdb_idl_search( ID *ids, ID id );
249
250 int bdb_idl_fetch_key(
251         BackendDB       *be,
252         DB                      *db,
253         DB_TXN          *tid,
254         DBT                     *key,
255         ID                      *ids,
256         DBC                     **saved_cursor,
257         int                     get_flag );
258
259 int bdb_idl_insert( ID *ids, ID id );
260
261 int bdb_idl_insert_key(
262         BackendDB *be,
263         DB *db,
264         DB_TXN *txn,
265         DBT *key,
266         ID id );
267
268 int bdb_idl_delete_key(
269         BackendDB *be,
270         DB *db,
271         DB_TXN *txn,
272         DBT *key,
273         ID id );
274
275 int
276 bdb_idl_intersection(
277         ID *a,
278         ID *b );
279
280 int
281 bdb_idl_union(
282         ID *a,
283         ID *b );
284
285 ID bdb_idl_first( ID *ids, ID *cursor );
286 ID bdb_idl_next( ID *ids, ID *cursor );
287
288
289 #define bdb_bt_compare                          BDB_SYMBOL(bt_compare)
290
291 int bdb_bt_compare(
292         DB *db,
293         const DBT *a,
294         const DBT *b );
295
296
297 /*
298  * index.c
299  */
300 #define bdb_index_is_indexed            BDB_SYMBOL(index_is_indexed)
301 #define bdb_index_param                         BDB_SYMBOL(index_param)
302 #define bdb_index_values                        BDB_SYMBOL(index_values)
303 #define bdb_index_entry                         BDB_SYMBOL(index_entry)
304
305 extern int
306 bdb_index_is_indexed LDAP_P((
307         Backend *be,
308         AttributeDescription *desc ));
309
310 extern int
311 bdb_index_param LDAP_P((
312         Backend *be,
313         AttributeDescription *desc,
314         int ftype,
315         DB **db,
316         slap_mask_t *mask,
317         struct berval *prefix ));
318
319 extern int
320 bdb_index_values LDAP_P((
321         Operation *op,
322         DB_TXN *txn,
323         AttributeDescription *desc,
324         BerVarray vals,
325         ID id,
326         int opid ));
327
328 int bdb_index_entry LDAP_P(( Operation *op, DB_TXN *t, int r, Entry *e ));
329
330 #define bdb_index_entry_add(op,t,e) \
331         bdb_index_entry((op),(t),SLAP_INDEX_ADD_OP,(e))
332 #define bdb_index_entry_del(op,t,e) \
333         bdb_index_entry((op),(t),SLAP_INDEX_DELETE_OP,(e))
334
335 /*
336  * init.c
337  */
338 #define bdb_uuid                                        BDB_SYMBOL(uuid)
339
340 extern struct berval bdb_uuid;
341
342 /*
343  * key.c
344  */
345 #define bdb_key_read                            BDB_SYMBOL(key_read)
346 #define bdb_key_change                          BDB_SYMBOL(key_change)
347
348 extern int
349 bdb_key_read(
350     Backend     *be,
351         DB *db,
352         DB_TXN *txn,
353     struct berval *k,
354         ID *ids,
355     DBC **saved_cursor,
356         int get_flags );
357
358 extern int
359 bdb_key_change(
360     Backend      *be,
361     DB *db,
362         DB_TXN *txn,
363     struct berval *k,
364     ID id,
365     int op );
366         
367 /*
368  * nextid.c
369  */
370 #define bdb_next_id                                     BDB_SYMBOL(next_id)
371 #define bdb_last_id                                     BDB_SYMBOL(last_id)
372
373 int bdb_next_id( BackendDB *be, DB_TXN *tid, ID *id );
374 int bdb_last_id( BackendDB *be, DB_TXN *tid );
375
376 /*
377  * modify.c
378  */
379 #define bdb_modify_internal                     BDB_SYMBOL(modify_internal)
380
381 int bdb_modify_internal(
382         Operation *op,
383         DB_TXN *tid,
384         Modifications *modlist,
385         Entry *e,
386         const char **text,
387         char *textbuf,
388         size_t textlen );
389
390
391 /*
392  * cache.c
393  */
394 #define bdb_cache_entry_db_unlock       BDB_SYMBOL(cache_entry_db_unlock)
395
396 #define bdb_cache_entryinfo_lock(e) \
397         ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex )
398 #define bdb_cache_entryinfo_unlock(e) \
399         ldap_pvt_thread_mutex_unlock( &(e)->bei_kids_mutex )
400
401 /* What a mess. Hopefully the current cache scheme will stabilize
402  * and we can trim out all of this stuff.
403  */
404 #if 0
405 void bdb_cache_return_entry_rw( DB_ENV *env, Cache *cache, Entry *e,
406         int rw, DB_LOCK *lock );
407 #else
408 #define bdb_cache_return_entry_rw( env, cache, e, rw, lock ) \
409         bdb_cache_entry_db_unlock( env, lock )
410 #define bdb_cache_return_entry( env, lock ) \
411         bdb_cache_entry_db_unlock( env, lock )
412 #endif
413 #define bdb_cache_return_entry_r(env, c, e, l) \
414         bdb_cache_return_entry_rw((env), (c), (e), 0, (l))
415 #define bdb_cache_return_entry_w(env, c, e, l) \
416         bdb_cache_return_entry_rw((env), (c), (e), 1, (l))
417 #if 0
418 void bdb_unlocked_cache_return_entry_rw( Cache *cache, Entry *e, int rw );
419 #else
420 #define bdb_unlocked_cache_return_entry_rw( a, b, c )
421 #endif
422 #define bdb_unlocked_cache_return_entry_r( c, e ) \
423         bdb_unlocked_cache_return_entry_rw((c), (e), 0)
424 #define bdb_unlocked_cache_return_entry_w( c, e ) \
425         bdb_unlocked_cache_return_entry_rw((c), (e), 1)
426
427 #define bdb_cache_add                           BDB_SYMBOL(cache_add)
428 #define bdb_cache_children                      BDB_SYMBOL(cache_children)
429 #define bdb_cache_delete                        BDB_SYMBOL(cache_delete)
430 #define bdb_cache_delete_cleanup                BDB_SYMBOL(cache_delete_cleanup)
431 #define bdb_cache_find_id                       BDB_SYMBOL(cache_find_id)
432 #define bdb_cache_find_info                     BDB_SYMBOL(cache_find_info)
433 #define bdb_cache_find_ndn                      BDB_SYMBOL(cache_find_ndn)
434 #define bdb_cache_modify                        BDB_SYMBOL(cache_modify)
435 #define bdb_cache_modrdn                        BDB_SYMBOL(cache_modrdn)
436 #define bdb_cache_release_all           BDB_SYMBOL(cache_release_all)
437 #define bdb_cache_delete_entry          BDB_SYMBOL(cache_delete_entry)
438
439 int bdb_cache_children(
440         Operation *op,
441         DB_TXN *txn,
442         Entry *e
443 );
444 int bdb_cache_add(
445         struct bdb_info *bdb,
446         EntryInfo *pei,
447         Entry   *e,
448         struct berval *nrdn,
449         u_int32_t locker
450 );
451 int bdb_cache_modrdn(
452         Entry   *e,
453         struct berval *nrdn,
454         Entry   *new,
455         EntryInfo *ein,
456         DB_ENV *env,
457         u_int32_t locker,
458         DB_LOCK *lock
459 );
460 int bdb_cache_modify(
461         Entry *e,
462         Attribute *newAttrs,
463         DB_ENV *env,
464         u_int32_t locker,
465         DB_LOCK *lock
466 );
467 int bdb_cache_find_ndn(
468         Operation *op,
469         DB_TXN  *txn,
470         struct berval   *ndn,
471         EntryInfo       **res
472 );
473 EntryInfo * bdb_cache_find_info(
474         struct bdb_info *bdb,
475         ID id
476 );
477 int bdb_cache_find_id(
478         Operation *op,
479         DB_TXN  *tid,
480         ID              id,
481         EntryInfo **eip,
482         int     islocked,
483         u_int32_t       locker,
484         DB_LOCK         *lock
485 );
486 int bdb_cache_delete(
487         Cache   *cache,
488         Entry   *e,
489         DB_ENV  *env,
490         u_int32_t locker,
491         DB_LOCK *lock
492 );
493 void bdb_cache_delete_cleanup(
494         Cache   *cache,
495         EntryInfo *ei
496 );
497 void bdb_cache_release_all( Cache *cache );
498 void bdb_cache_delete_entry(
499         struct bdb_info *bdb,
500         EntryInfo *ei,
501         u_int32_t locker,
502         DB_LOCK *lock
503 );
504
505 #ifdef BDB_HIER
506 int hdb_cache_load(
507         struct bdb_info *bdb,
508         EntryInfo *ei,
509         EntryInfo **res
510 );
511 #endif
512
513 #define bdb_cache_entry_db_relock               BDB_SYMBOL(cache_entry_db_relock)
514 int bdb_cache_entry_db_relock(
515         DB_ENV *env,
516         u_int32_t locker,
517         EntryInfo *ei,
518         int rw,
519         int tryOnly,
520         DB_LOCK *lock );
521
522 int bdb_cache_entry_db_unlock(
523         DB_ENV *env,
524         DB_LOCK *lock );
525
526 #ifdef BDB_REUSE_LOCKERS
527
528 #define bdb_locker_id                           BDB_SYMBOL(locker_id)
529 int bdb_locker_id( Operation *op, DB_ENV *env, int *locker );
530
531 #define LOCK_ID_FREE(env, locker)
532 #define LOCK_ID(env, locker)    bdb_locker_id(op, env, locker)
533
534 #else
535
536 #define LOCK_ID_FREE(env, locker)       XLOCK_ID_FREE(env, locker)
537 #define LOCK_ID(env, locker)            XLOCK_ID(env, locker)
538
539 #endif
540
541 /*
542  * search.c
543  */
544
545 #define bdb_abandon                                     BDB_SYMBOL(abandon)
546 #define bdb_cancel                                      BDB_SYMBOL(cancel)
547 #define bdb_do_search                           BDB_SYMBOL(do_search)
548 #define bdb_psearch                             BDB_SYMBOL(psearch)
549
550 BI_op_abandon bdb_abandon;
551 BI_op_cancel bdb_cancel;
552
553 int bdb_psearch(
554         Operation       *op,
555         SlapReply       *rs,
556         Operation       *ps_op,
557         Entry           *entry,
558         int             psearch_type
559 );
560
561 int bdb_do_search(
562         Operation       *op,
563         SlapReply       *rs,
564         Operation       *ps_op,
565         Entry           *entry,
566         int             psearch_type
567 );
568
569 /*
570  * trans.c
571  */
572 #define bdb_trans_backoff                       BDB_SYMBOL(trans_backoff)
573
574 void
575 bdb_trans_backoff( int num_retries );
576
577 /*
578  * former external.h
579  */
580
581 #define bdb_back_initialize             BDB_SYMBOL(back_initialize)
582 #define bdb_db_config                   BDB_SYMBOL(db_config)
583 #define bdb_add                         BDB_SYMBOL(add)
584 #define bdb_bind                        BDB_SYMBOL(bind)
585 #define bdb_compare                     BDB_SYMBOL(compare)
586 #define bdb_delete                      BDB_SYMBOL(delete)
587 #define bdb_modify                      BDB_SYMBOL(modify)
588 #define bdb_modrdn                      BDB_SYMBOL(modrdn)
589 #define bdb_search                      BDB_SYMBOL(search)
590 #define bdb_extended                    BDB_SYMBOL(extended)
591 #define bdb_referrals                   BDB_SYMBOL(referrals)
592 #define bdb_operational                 BDB_SYMBOL(operational)
593 #define bdb_hasSubordinates             BDB_SYMBOL(hasSubordinates)
594 #define bdb_tool_entry_open             BDB_SYMBOL(tool_entry_open)
595 #define bdb_tool_entry_close            BDB_SYMBOL(tool_entry_close)
596 #define bdb_tool_entry_next             BDB_SYMBOL(tool_entry_next)
597 #define bdb_tool_entry_get              BDB_SYMBOL(tool_entry_get)
598 #define bdb_tool_entry_put              BDB_SYMBOL(tool_entry_put)
599 #define bdb_tool_entry_reindex          BDB_SYMBOL(tool_entry_reindex)
600 #define bdb_tool_dn2id_get              BDB_SYMBOL(tool_dn2id_get)
601 #define bdb_tool_id2entry_get           BDB_SYMBOL(tool_id2entry_get)
602 #define bdb_tool_entry_modify           BDB_SYMBOL(tool_entry_modify)
603
604 extern BI_init                          bdb_back_initialize;
605
606 extern BI_db_config                     bdb_db_config;
607
608 extern BI_op_add                        bdb_add;
609 extern BI_op_bind                       bdb_bind;
610 extern BI_op_compare                    bdb_compare;
611 extern BI_op_delete                     bdb_delete;
612 extern BI_op_modify                     bdb_modify;
613 extern BI_op_modrdn                     bdb_modrdn;
614 extern BI_op_search                     bdb_search;
615 extern BI_op_extended                   bdb_extended;
616
617 extern BI_chk_referrals                 bdb_referrals;
618
619 extern BI_operational                   bdb_operational;
620
621 extern BI_has_subordinates              bdb_hasSubordinates;
622
623 /* tools.c */
624 extern BI_tool_entry_open               bdb_tool_entry_open;
625 extern BI_tool_entry_close              bdb_tool_entry_close;
626 extern BI_tool_entry_next               bdb_tool_entry_next;
627 extern BI_tool_entry_get                bdb_tool_entry_get;
628 extern BI_tool_entry_put                bdb_tool_entry_put;
629 extern BI_tool_entry_reindex            bdb_tool_entry_reindex;
630 extern BI_tool_dn2id_get                bdb_tool_dn2id_get;
631 extern BI_tool_id2entry_get             bdb_tool_id2entry_get;
632 extern BI_tool_entry_modify             bdb_tool_entry_modify;
633
634 LDAP_END_DECL
635
636 #endif /* _PROTO_BDB_H */