1 /* $NetBSD: proto-mdb.h,v 1.2 2020/08/11 13:15:40 christos Exp $ */ 2 3 /* $OpenLDAP$ */ 4 /* This work is part of OpenLDAP Software <http://www.openldap.org/>. 5 * 6 * Copyright 2000-2020 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_MDB_H 19 #define _PROTO_MDB_H 20 21 LDAP_BEGIN_DECL 22 23 #define MDB_UCTYPE "MDB" 24 25 /* 26 * attr.c 27 */ 28 29 AttrInfo *mdb_attr_mask( struct mdb_info *mdb, 30 AttributeDescription *desc ); 31 32 void mdb_attr_flush( struct mdb_info *mdb ); 33 34 int mdb_attr_slot( struct mdb_info *mdb, 35 AttributeDescription *desc, int *insert ); 36 37 int mdb_attr_dbs_open( BackendDB *be, MDB_txn *txn, struct config_reply_s *cr ); 38 void mdb_attr_dbs_close( struct mdb_info *mdb ); 39 40 int mdb_attr_index_config LDAP_P(( struct mdb_info *mdb, 41 const char *fname, int lineno, 42 int argc, char **argv, struct config_reply_s *cr )); 43 44 void mdb_attr_index_unparse LDAP_P(( struct mdb_info *mdb, BerVarray *bva )); 45 void mdb_attr_index_destroy LDAP_P(( struct mdb_info *mdb )); 46 void mdb_attr_index_free LDAP_P(( struct mdb_info *mdb, 47 AttributeDescription *ad )); 48 49 void mdb_attr_info_free( AttrInfo *ai ); 50 51 int mdb_ad_read( struct mdb_info *mdb, MDB_txn *txn ); 52 int mdb_ad_get( struct mdb_info *mdb, MDB_txn *txn, AttributeDescription *ad ); 53 void mdb_ad_unwind( struct mdb_info *mdb, int prev_ads ); 54 55 /* 56 * config.c 57 */ 58 59 int mdb_back_init_cf( BackendInfo *bi ); 60 61 /* 62 * dn2entry.c 63 */ 64 65 int mdb_dn2entry LDAP_P(( Operation *op, MDB_txn *tid, MDB_cursor *mc, 66 struct berval *dn, Entry **e, ID *nsubs, int matched )); 67 68 /* 69 * dn2id.c 70 */ 71 72 int mdb_dn2id( 73 Operation *op, 74 MDB_txn *txn, 75 MDB_cursor *mc, 76 struct berval *ndn, 77 ID *id, 78 ID *nsubs, 79 struct berval *matched, 80 struct berval *nmatched ); 81 82 int mdb_dn2id_add( 83 Operation *op, 84 MDB_cursor *mcp, 85 MDB_cursor *mcd, 86 ID pid, 87 ID nsubs, 88 int upsub, 89 Entry *e ); 90 91 int mdb_dn2id_delete( 92 Operation *op, 93 MDB_cursor *mc, 94 ID id, 95 ID nsubs ); 96 97 int mdb_dn2id_children( 98 Operation *op, 99 MDB_txn *tid, 100 Entry *e ); 101 102 int mdb_dn2sups ( 103 Operation *op, 104 MDB_txn *tid, 105 struct berval *dn, 106 ID *sups 107 ); 108 109 int mdb_dn2idl( 110 Operation *op, 111 MDB_txn *txn, 112 struct berval *ndn, 113 ID eid, 114 ID *ids, 115 ID *stack ); 116 117 int mdb_dn2id_parent( 118 Operation *op, 119 MDB_txn *txn, 120 ID eid, 121 ID *idp ); 122 123 int mdb_id2name( 124 Operation *op, 125 MDB_txn *txn, 126 MDB_cursor **cursp, 127 ID eid, 128 struct berval *name, 129 struct berval *nname); 130 131 int mdb_idscope( 132 Operation *op, 133 MDB_txn *txn, 134 ID base, 135 ID *ids, 136 ID *res ); 137 138 struct IdScopes; 139 140 int mdb_idscopes( 141 Operation *op, 142 struct IdScopes *isc ); 143 144 int mdb_idscopechk( 145 Operation *op, 146 struct IdScopes *isc ); 147 148 int mdb_dn2id_walk( 149 Operation *op, 150 struct IdScopes *isc ); 151 152 void mdb_dn2id_wrestore( 153 Operation *op, 154 struct IdScopes *isc ); 155 156 MDB_cmp_func mdb_dup_compare; 157 158 /* 159 * filterentry.c 160 */ 161 162 int mdb_filter_candidates( 163 Operation *op, 164 MDB_txn *txn, 165 Filter *f, 166 ID *ids, 167 ID *tmp, 168 ID *stack ); 169 170 /* 171 * id2entry.c 172 */ 173 174 int mdb_id2entry_add( 175 Operation *op, 176 MDB_txn *tid, 177 MDB_cursor *mc, 178 Entry *e ); 179 180 int mdb_id2entry_update( 181 Operation *op, 182 MDB_txn *tid, 183 MDB_cursor *mc, 184 Entry *e ); 185 186 int mdb_id2entry_delete( 187 BackendDB *be, 188 MDB_txn *tid, 189 Entry *e); 190 191 int mdb_id2entry( 192 Operation *op, 193 MDB_cursor *mc, 194 ID id, 195 Entry **e); 196 197 int mdb_id2edata( 198 Operation *op, 199 MDB_cursor *mc, 200 ID id, 201 MDB_val *data); 202 203 int mdb_entry_return( Operation *op, Entry *e ); 204 BI_entry_release_rw mdb_entry_release; 205 BI_entry_get_rw mdb_entry_get; 206 207 int mdb_entry_decode( Operation *op, MDB_txn *txn, MDB_val *data, Entry **e ); 208 209 void mdb_reader_flush( MDB_env *env ); 210 int mdb_opinfo_get( Operation *op, struct mdb_info *mdb, int rdonly, mdb_op_info **moi ); 211 212 /* 213 * idl.c 214 */ 215 216 unsigned mdb_idl_search( ID *ids, ID id ); 217 218 int mdb_idl_fetch_key( 219 BackendDB *be, 220 MDB_txn *txn, 221 MDB_dbi dbi, 222 MDB_val *key, 223 ID *ids, 224 MDB_cursor **saved_cursor, 225 int get_flag ); 226 227 int mdb_idl_insert( ID *ids, ID id ); 228 229 typedef int (mdb_idl_keyfunc)( 230 BackendDB *be, 231 MDB_cursor *mc, 232 struct berval *key, 233 ID id ); 234 235 mdb_idl_keyfunc mdb_idl_insert_keys; 236 mdb_idl_keyfunc mdb_idl_delete_keys; 237 238 int 239 mdb_idl_intersection( 240 ID *a, 241 ID *b ); 242 243 int 244 mdb_idl_union( 245 ID *a, 246 ID *b ); 247 248 ID mdb_idl_first( ID *ids, ID *cursor ); 249 ID mdb_idl_next( ID *ids, ID *cursor ); 250 251 void mdb_idl_sort( ID *ids, ID *tmp ); 252 int mdb_idl_append( ID *a, ID *b ); 253 int mdb_idl_append_one( ID *ids, ID id ); 254 255 256 /* 257 * index.c 258 */ 259 260 extern AttrInfo * 261 mdb_index_mask LDAP_P(( 262 Backend *be, 263 AttributeDescription *desc, 264 struct berval *name )); 265 266 extern int 267 mdb_index_param LDAP_P(( 268 Backend *be, 269 AttributeDescription *desc, 270 int ftype, 271 MDB_dbi *dbi, 272 slap_mask_t *mask, 273 struct berval *prefix )); 274 275 extern int 276 mdb_index_values LDAP_P(( 277 Operation *op, 278 MDB_txn *txn, 279 AttributeDescription *desc, 280 BerVarray vals, 281 ID id, 282 int opid )); 283 284 extern int 285 mdb_index_recset LDAP_P(( 286 struct mdb_info *mdb, 287 Attribute *a, 288 AttributeType *type, 289 struct berval *tags, 290 IndexRec *ir )); 291 292 extern int 293 mdb_index_recrun LDAP_P(( 294 Operation *op, 295 MDB_txn *txn, 296 struct mdb_info *mdb, 297 IndexRec *ir, 298 ID id, 299 int base )); 300 301 int mdb_index_entry LDAP_P(( Operation *op, MDB_txn *t, int r, Entry *e )); 302 303 #define mdb_index_entry_add(op,t,e) \ 304 mdb_index_entry((op),(t),SLAP_INDEX_ADD_OP,(e)) 305 #define mdb_index_entry_del(op,t,e) \ 306 mdb_index_entry((op),(t),SLAP_INDEX_DELETE_OP,(e)) 307 308 /* 309 * key.c 310 */ 311 312 extern int 313 mdb_key_read( 314 Backend *be, 315 MDB_txn *txn, 316 MDB_dbi dbi, 317 struct berval *k, 318 ID *ids, 319 MDB_cursor **saved_cursor, 320 int get_flags ); 321 322 /* 323 * nextid.c 324 */ 325 326 int mdb_next_id( BackendDB *be, MDB_cursor *mc, ID *id ); 327 328 /* 329 * modify.c 330 */ 331 332 int mdb_modify_internal( 333 Operation *op, 334 MDB_txn *tid, 335 Modifications *modlist, 336 Entry *e, 337 const char **text, 338 char *textbuf, 339 size_t textlen ); 340 341 /* 342 * monitor.c 343 */ 344 345 int mdb_monitor_db_init( BackendDB *be ); 346 int mdb_monitor_db_open( BackendDB *be ); 347 int mdb_monitor_db_close( BackendDB *be ); 348 int mdb_monitor_db_destroy( BackendDB *be ); 349 350 #ifdef MDB_MONITOR_IDX 351 int 352 mdb_monitor_idx_add( 353 struct mdb_info *mdb, 354 AttributeDescription *desc, 355 slap_mask_t type ); 356 #endif /* MDB_MONITOR_IDX */ 357 358 /* 359 * former external.h 360 */ 361 362 extern BI_init mdb_back_initialize; 363 364 extern BI_db_config mdb_db_config; 365 366 extern BI_op_add mdb_add; 367 extern BI_op_bind mdb_bind; 368 extern BI_op_compare mdb_compare; 369 extern BI_op_delete mdb_delete; 370 extern BI_op_modify mdb_modify; 371 extern BI_op_modrdn mdb_modrdn; 372 extern BI_op_search mdb_search; 373 extern BI_op_extended mdb_extended; 374 375 extern BI_chk_referrals mdb_referrals; 376 377 extern BI_operational mdb_operational; 378 379 extern BI_has_subordinates mdb_hasSubordinates; 380 381 /* tools.c */ 382 extern BI_tool_entry_open mdb_tool_entry_open; 383 extern BI_tool_entry_close mdb_tool_entry_close; 384 extern BI_tool_entry_first_x mdb_tool_entry_first_x; 385 extern BI_tool_entry_next mdb_tool_entry_next; 386 extern BI_tool_entry_get mdb_tool_entry_get; 387 extern BI_tool_entry_put mdb_tool_entry_put; 388 extern BI_tool_entry_reindex mdb_tool_entry_reindex; 389 extern BI_tool_dn2id_get mdb_tool_dn2id_get; 390 extern BI_tool_entry_modify mdb_tool_entry_modify; 391 392 extern mdb_idl_keyfunc mdb_tool_idl_add; 393 394 LDAP_END_DECL 395 396 #endif /* _PROTO_MDB_H */ 397