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