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