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