proto-back-ldbm.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. /** BEGIN COPYRIGHT BLOCK
  2. * This Program is free software; you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation; version 2 of the License.
  5. *
  6. * This Program is distributed in the hope that it will be useful, but WITHOUT
  7. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  8. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  9. *
  10. * You should have received a copy of the GNU General Public License along with
  11. * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
  12. * Place, Suite 330, Boston, MA 02111-1307 USA.
  13. *
  14. * In addition, as a special exception, Red Hat, Inc. gives You the additional
  15. * right to link the code of this Program with code not covered under the GNU
  16. * General Public License ("Non-GPL Code") and to distribute linked combinations
  17. * including the two, subject to the limitations in this paragraph. Non-GPL Code
  18. * permitted under this exception must only link to the code of this Program
  19. * through those well defined interfaces identified in the file named EXCEPTION
  20. * found in the source code files (the "Approved Interfaces"). The files of
  21. * Non-GPL Code may instantiate templates or use macros or inline functions from
  22. * the Approved Interfaces without causing the resulting work to be covered by
  23. * the GNU General Public License. Only Red Hat, Inc. may make changes or
  24. * additions to the list of Approved Interfaces. You must obey the GNU General
  25. * Public License in all respects for all of the Program code and other code used
  26. * in conjunction with the Program except the Non-GPL Code covered by this
  27. * exception. If you modify this file, you may extend this exception to your
  28. * version of the file, but you are not obligated to do so. If you do not wish to
  29. * provide this exception without modification, you must delete this exception
  30. * statement from your version and license this file solely under the GPL without
  31. * exception.
  32. *
  33. *
  34. * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
  35. * Copyright (C) 2005 Red Hat, Inc.
  36. * All rights reserved.
  37. * END COPYRIGHT BLOCK **/
  38. #ifdef HAVE_CONFIG_H
  39. # include <config.h>
  40. #endif
  41. #ifndef _PROTO_BACK_LDBM
  42. #define _PROTO_BACK_LDBM
  43. /*
  44. * attr.c
  45. */
  46. struct attrinfo * attrinfo_new();
  47. void attrinfo_delete(struct attrinfo **pp);
  48. void ainfo_get( backend *be, char *type, struct attrinfo **at );
  49. void attr_masks( backend *be, char *type, int *indexmask,
  50. int *syntaxmask );
  51. void attr_masks_ex( backend *be, char *type, int *indexmask,
  52. int *syntaxmask, struct attrinfo **at );
  53. void attr_index_config( backend *be, char *fname, int lineno,
  54. int argc, char **argv, int init );
  55. int ldbm_compute_init();
  56. void attrinfo_deletetree(ldbm_instance *inst);
  57. void attr_create_empty(backend *be,char *type,struct attrinfo **ai);
  58. /*
  59. * cache.c
  60. */
  61. int cache_init(struct cache *cache, size_t maxsize, long maxentries);
  62. void cache_clear(struct cache *cache);
  63. void cache_destroy_please(struct cache *cache);
  64. void cache_set_max_size(struct cache *cache, size_t bytes);
  65. void cache_set_max_entries(struct cache *cache, long entries);
  66. size_t cache_get_max_size(struct cache *cache);
  67. long cache_get_max_entries(struct cache *cache);
  68. void cache_get_stats(struct cache *cache, PRUint64 *hits, PRUint64 *tries,
  69. long *entries,long *maxentries,
  70. size_t *size, size_t *maxsize);
  71. void cache_debug_hash(struct cache *cache, char **out);
  72. int cache_remove(struct cache *cache, struct backentry *e);
  73. void cache_return(struct cache *cache, struct backentry **bep);
  74. struct backentry *cache_find_dn(struct cache *cache, const char *dn, unsigned long ndnlen);
  75. struct backentry *cache_find_id(struct cache *cache, ID id);
  76. struct backentry *cache_find_uuid(struct cache *cache, const char *uuid);
  77. int cache_add(struct cache *cache, struct backentry *e,
  78. struct backentry **alt);
  79. int cache_add_tentative(struct cache *cache, struct backentry *e,
  80. struct backentry **alt);
  81. int cache_lock_entry(struct cache *cache, struct backentry *e);
  82. void cache_unlock_entry(struct cache *cache, struct backentry *e);
  83. int cache_replace(struct cache *cache, struct backentry *olde,
  84. struct backentry *newe);
  85. Hashtable *new_hash(u_long size, u_long offset, HashFn hfn,
  86. HashTestFn tfn);
  87. int add_hash(Hashtable *ht, void *key, size_t keylen, void *entry,
  88. void **alt);
  89. int find_hash(Hashtable *ht, const void *key, size_t keylen, void **entry);
  90. int remove_hash(Hashtable *ht, const void *key, size_t keylen);
  91. /*
  92. * dblayer.c
  93. */
  94. int dblayer_init(struct ldbminfo *li);
  95. int dblayer_terminate(struct ldbminfo *li);
  96. int dblayer_start(struct ldbminfo *li, int dbmode);
  97. int dblayer_flush(struct ldbminfo *li );
  98. int dblayer_close(struct ldbminfo *li, int dbmode );
  99. void dblayer_pre_close(struct ldbminfo *li);
  100. int dblayer_post_close(struct ldbminfo *li, int dbmode );
  101. int dblayer_instance_close(backend *be);
  102. int dblayer_get_index_file(backend *be,struct attrinfo *a, DB** ppDB, int create);
  103. int dblayer_release_index_file(backend *be,struct attrinfo *a, DB* pDB);
  104. int dblayer_erase_index_file(backend *be, struct attrinfo *a, int no_force_chkpt);
  105. int dblayer_erase_index_file_nolock(backend *be, struct attrinfo *a, int no_force_chkpt);
  106. int dblayer_get_id2entry(backend *be, DB **ppDB);
  107. int dblayer_release_id2entry(backend *be, DB *pDB);
  108. int dblayer_get_aux_id2entry(backend *be, DB **ppDB, DB_ENV **ppEnv);
  109. int dblayer_release_aux_id2entry(backend *be, DB *pDB, DB_ENV *pEnv);
  110. int dblayer_txn_init(struct ldbminfo *li, back_txn *txn);
  111. int dblayer_txn_begin(struct ldbminfo *li,back_txnid parent_txn, back_txn *txn);
  112. int dblayer_txn_commit(struct ldbminfo *li, back_txn *txn);
  113. int dblayer_txn_abort(struct ldbminfo *li, back_txn *txn);
  114. int dblayer_read_txn_abort(struct ldbminfo *li, back_txn *txn);
  115. int dblayer_read_txn_begin(struct ldbminfo *li,back_txnid parent_txn, back_txn *txn);
  116. int dblayer_read_txn_commit(struct ldbminfo *li, back_txn *txn);
  117. size_t dblayer_get_optimal_block_size(struct ldbminfo *li);
  118. void dblayer_unlock_backend(backend *be);
  119. void dblayer_lock_backend(backend *be);
  120. int dblayer_plugin_begin(Slapi_PBlock *pb);
  121. int dblayer_plugin_commit(Slapi_PBlock *pb);
  122. int dblayer_plugin_abort(Slapi_PBlock *pb);
  123. int dblayer_memp_stat(struct ldbminfo *li, DB_MPOOL_STAT **gsp,DB_MPOOL_FSTAT ***fsp);
  124. int dblayer_memp_stat_instance(ldbm_instance *inst, DB_MPOOL_STAT **gsp, DB_MPOOL_FSTAT ***fsp);
  125. int dblayer_backup(struct ldbminfo *li, char *destination_directory,
  126. Slapi_Task *task);
  127. int dblayer_restore(struct ldbminfo *li, char* source_directory, Slapi_Task *task, char *bename);
  128. int dblayer_copy_directory(struct ldbminfo *li, Slapi_Task *task,
  129. char *instance_dir, char *destination_dir,
  130. int restore, int *cnt, int instance_dir_flag,
  131. int indexonly, int resetlsns);
  132. int dblayer_copyfile(char* source, char * destination, int overwrite, int mode);
  133. int dblayer_delete_instance_dir(backend *be);
  134. int dblayer_delete_database(struct ldbminfo *li);
  135. int dblayer_database_size(struct ldbminfo *li, unsigned int *size);
  136. int dblayer_terminate(struct ldbminfo *li);
  137. int dblayer_close_indexes(backend *be);
  138. int dblayer_open_file(backend *be, char* indexname, int create, struct attrinfo *ai, DB **ppDB);
  139. int dblayer_close_file(DB *db);
  140. void dblayer_sys_pages(size_t *pagesize, size_t *pages, size_t *procpages, size_t *availpages);
  141. int dblayer_is_cachesize_sane(size_t *cachesize);
  142. void dblayer_remember_disk_filled(struct ldbminfo *li);
  143. int dblayer_open_huge_file(const char *path, int oflag, int mode);
  144. int dblayer_instance_start(backend *be, int normal_mode);
  145. int dblayer_make_new_instance_data_dir(backend *be);
  146. int dblayer_get_instance_data_dir(backend *be);
  147. char *dblayer_strerror(int error);
  148. PRInt64 db_atol(char *str, int *err);
  149. PRInt64 db_atoi(char *str, int *err);
  150. unsigned long db_strtoul(const char *str, int *err);
  151. int dblayer_set_batch_transactions(void *arg, void *value, char *errorbuf, int phase, int apply);
  152. void *dblayer_get_batch_transactions(void *arg);
  153. int dblayer_in_import(ldbm_instance *inst);
  154. int dblayer_update_db_ext(ldbm_instance *inst, char *oldext, char *newext);
  155. void dblayer_set_recovery_required(struct ldbminfo *li);
  156. char *dblayer_get_home_dir(struct ldbminfo *li, int *dbhome);
  157. char *dblayer_get_full_inst_dir(struct ldbminfo *li, ldbm_instance *inst,
  158. char *buf, int buflen);
  159. void autosize_import_cache(struct ldbminfo *li);
  160. int dblayer_db_uses_locking(DB_ENV *db_env);
  161. int dblayer_db_uses_transactions(DB_ENV *db_env);
  162. int dblayer_db_uses_mpool(DB_ENV *db_env);
  163. int dblayer_db_uses_logging(DB_ENV *db_env);
  164. int dblayer_bt_compare(DB *db, const DBT *dbt1, const DBT *dbt2);
  165. /*
  166. * dn2entry.c
  167. */
  168. struct backentry *dn2entry(Slapi_Backend *be, const Slapi_DN *sdn, back_txn *txn, int *err);
  169. struct backentry *dn2entry_or_ancestor(Slapi_Backend *be, const Slapi_DN *sdn, Slapi_DN *ancestor, back_txn *txn, int *err);
  170. struct backentry *dn2ancestor(Slapi_Backend *be,const Slapi_DN *sdn,Slapi_DN *ancestordn,back_txn *txn,int *err);
  171. int get_copy_of_entry(Slapi_PBlock *pb, const entry_address *addr, back_txn *txn, int plock_parameter, int must_exist);
  172. void done_with_pblock_entry(Slapi_PBlock *pb, int plock_parameter);
  173. /*
  174. * uniqueid2entry.c
  175. */
  176. struct backentry * uniqueid2entry(backend *be, const char *uniqueid,
  177. back_txn *txn, int *err);
  178. /*
  179. * filterindex.c
  180. */
  181. IDList * filter_candidates( Slapi_PBlock *pb, backend *be, const char *base, Slapi_Filter *f, Slapi_Filter *nextf, int range, int *err );
  182. /*
  183. * findentry.c
  184. */
  185. struct backentry * find_entry2modify( Slapi_PBlock *pb, Slapi_Backend *be, const entry_address *addr, back_txn *txn );
  186. struct backentry * find_entry( Slapi_PBlock *pb, Slapi_Backend *be, const entry_address *addr, back_txn *txn );
  187. struct backentry * find_entry2modify_only( Slapi_PBlock *pb, Slapi_Backend *be, const entry_address *addr, back_txn *txn);
  188. struct backentry * find_entry_only( Slapi_PBlock *pb, Slapi_Backend *be, const entry_address *addr, back_txn *txn);
  189. int check_entry_for_referral(Slapi_PBlock *pb, Slapi_Entry *entry, char *matched, const char *callingfn);
  190. /*
  191. * haschildren.c
  192. */
  193. int has_children( struct ldbminfo *li, struct backentry *p, back_txn *txn, int *err );
  194. /*
  195. * id2entry.c
  196. */
  197. int id2entry_add( backend *be, struct backentry *e, back_txn *txn );
  198. int id2entry_add_ext( backend *be, struct backentry *e, back_txn *txn, int encrypt );
  199. int id2entry_delete( backend *be, struct backentry *e, back_txn *txn );
  200. struct backentry * id2entry( backend *be, ID id, back_txn *txn, int *err );
  201. /*
  202. * idl.c
  203. */
  204. IDList * idl_alloc( NIDS nids );
  205. void idl_free( IDList *idl );
  206. NIDS idl_length(IDList *idl);
  207. int idl_is_allids(IDList *idl);
  208. int idl_append( IDList *idl, ID id);
  209. void idl_insert(IDList **idl, ID id);
  210. /*
  211. * idl_delete - delete an id from an id list.
  212. * returns 0 id deleted
  213. * 1 id deleted, first id in block has changed
  214. * 2 id deleted, block is empty
  215. * 3 id not there
  216. * 4 cannot delete from allids block
  217. */
  218. int idl_delete( IDList **idl, ID id );
  219. IDList * idl_allids( backend *be );
  220. IDList * idl_fetch( backend *be, DB* db, DBT *key, DB_TXN *txn, struct attrinfo *a, int *err );
  221. int idl_insert_key( backend *be, DB* db, DBT *key, ID id, DB_TXN *txn, struct attrinfo *a,int *disposition );
  222. int idl_delete_key( backend *be, DB *db, DBT *key, ID id, DB_TXN *txn, struct attrinfo *a );
  223. IDList * idl_intersection( backend *be, IDList *a, IDList *b );
  224. IDList * idl_union( backend *be, IDList *a, IDList *b );
  225. int idl_notin( backend *be, IDList *a, IDList *b , IDList **new_result);
  226. ID idl_firstid( IDList *idl );
  227. ID idl_nextid( IDList *idl, ID id );
  228. int idl_init_private(backend *be, struct attrinfo *a);
  229. int idl_release_private(struct attrinfo *a);
  230. idl_iterator idl_iterator_init(const IDList *idl);
  231. idl_iterator idl_iterator_increment(idl_iterator *i);
  232. idl_iterator idl_iterator_decrement(idl_iterator *i);
  233. ID idl_iterator_dereference(idl_iterator i, const IDList *idl);
  234. ID idl_iterator_dereference_increment(idl_iterator *i, const IDList *idl);
  235. size_t idl_sizeof(IDList *idl);
  236. int idl_store_block(backend *be,DB *db,DBT *key,IDList *idl,DB_TXN *txn,struct attrinfo *a);
  237. void idl_set_tune(int val);
  238. int idl_get_tune();
  239. size_t idl_get_allidslimit(struct attrinfo *a);
  240. int idl_get_idl_new();
  241. int idl_new_compare_dups(
  242. #if 1000*DB_VERSION_MAJOR + 100*DB_VERSION_MINOR >= 3200
  243. DB *db,
  244. #endif
  245. const DBT *a,
  246. const DBT *b
  247. );
  248. /*
  249. * index.c
  250. */
  251. int index_addordel_entry( backend *be, struct backentry *e, int flags, back_txn *txn );
  252. int index_add_mods( backend *be, const LDAPMod**mods, struct backentry *olde, struct backentry *newe, back_txn *txn );
  253. int index_addordel_string(backend *be, const char *type, const char *s, ID id, int flags, back_txn *txn);
  254. int index_addordel_values_sv( backend *be, const char *type, Slapi_Value **vals, Slapi_Value **evals, ID id, int flags, back_txn *txn );
  255. int index_addordel_values_ext_sv( backend *be, const char *type, Slapi_Value **vals, Slapi_Value **evals, ID id, int flags, back_txn *txn,int *idl_disposition, void *buffer_handle );
  256. int id_array_init(Id_Array *new_guy, int size);
  257. IDList* index_read( backend *be, char *type, const char* indextype, const struct berval* val, back_txn *txn, int *err );
  258. IDList* index_read_ext( backend *be, char *type, const char* indextype, const struct berval* val, back_txn *txn, int *err, int *unindexed );
  259. IDList* index_range_read( Slapi_PBlock *pb, backend *be, char *type, const char* indextype, int ftype, struct berval* val, struct berval* nextval, int range, back_txn *txn, int *err );
  260. const char *encode( const struct berval* data, char buf[BUFSIZ] );
  261. extern const char* indextype_PRESENCE;
  262. extern const char* indextype_EQUALITY;
  263. extern const char* indextype_APPROX;
  264. extern const char* indextype_SUB;
  265. int index_buffer_init(size_t size,int flags,void **h);
  266. int index_buffer_flush(void *h,backend *be, DB_TXN *txn,struct attrinfo *a);
  267. int index_buffer_terminate(void *h);
  268. /*
  269. * instance.c
  270. */
  271. int ldbm_instance_create(backend *be, char *name);
  272. int ldbm_instance_create_default_indexes(backend *be);
  273. int ldbm_instance_start(backend *be);
  274. int ldbm_instance_stop(backend *be);
  275. int ldbm_instance_startall(struct ldbminfo *li);
  276. int ldbm_instance_stopall(struct ldbminfo *li);
  277. ldbm_instance *ldbm_instance_find_by_name(struct ldbminfo *li, char *name);
  278. int ldbm_instance_destroy(ldbm_instance *inst);
  279. /*
  280. * ldif2ldbm.c
  281. */
  282. int import_subcount_mother_init(import_subcount_stuff *mothers,ID parent_id, size_t count);
  283. int import_subcount_mother_count(import_subcount_stuff *mothers,ID parent_id);
  284. void import_subcount_stuff_init(import_subcount_stuff *stuff);
  285. void import_subcount_stuff_term(import_subcount_stuff *stuff);
  286. int update_subordinatecounts(backend *be,import_subcount_stuff *mothers, DB_TXN *txn);
  287. void import_configure_index_buffer_size(size_t size);
  288. size_t import_get_index_buffer_size();
  289. int ldbm_back_fetch_incl_excl(Slapi_PBlock *pb, char ***include,
  290. char ***exclude);
  291. void ldbm_back_free_incl_excl(char **include, char **exclude);
  292. int ldbm_back_ok_to_dump(const char *dn, char **include, char **exclude);
  293. int ldbm_back_wire_import(Slapi_PBlock *pb);
  294. void *factory_constructor(void *object, void *parent);
  295. void factory_destructor(void *extension, void *object, void *parent);
  296. /*
  297. * modify.c
  298. */
  299. int modify_update_all(backend *be, Slapi_PBlock *pb,modify_context *mc,back_txn *txn);
  300. void modify_init(modify_context *mc,struct backentry *old_entry);
  301. int modify_apply_mods(modify_context *mc, Slapi_Mods *smods);
  302. int modify_term(modify_context *mc,backend *be);
  303. int modify_switch_entries(modify_context *mc,backend *be);
  304. /*
  305. * add.c
  306. */
  307. void add_update_entry_operational_attributes(struct backentry *ep, ID pid);
  308. void add_update_entrydn_operational_attributes(struct backentry *ep);
  309. /*
  310. * misc.c
  311. */
  312. void ldbm_nasty(const char* str, int c, int err);
  313. void ldbm_log_access_message(Slapi_PBlock *pblock,char *string);
  314. int return_on_disk_full(struct ldbminfo *li);
  315. int ldbm_attribute_always_indexed(const char *attrtype);
  316. void ldbm_destroy_instance_name(struct ldbminfo *li);
  317. char *compute_entry_tombstone_dn(const char *entrydn, const char *uniqueid);
  318. int instance_set_busy(ldbm_instance *inst);
  319. int instance_set_busy_and_readonly(ldbm_instance *inst);
  320. void instance_set_not_busy(ldbm_instance *inst);
  321. void allinstance_set_busy(struct ldbminfo *li);
  322. void allinstance_set_not_busy(struct ldbminfo *li);
  323. int is_anyinstance_busy(struct ldbminfo *li);
  324. int ldbm_delete_dirs(char *path);
  325. int mkdir_p(char *dir, unsigned int mode);
  326. int is_fullpath(char *path);
  327. char get_sep(char *path);
  328. /*
  329. * nextid.c
  330. */
  331. ID next_id( backend *be );
  332. void next_id_return( backend *be, ID id );
  333. ID next_id_get( backend *be );
  334. void id_internal_to_stored(ID,char*);
  335. ID id_stored_to_internal(char*);
  336. #if 0
  337. int write_dbversion( ldbm_instance *inst );
  338. #endif
  339. void get_ids_from_disk(backend *be);
  340. void get_both_ids( struct ldbminfo *li, ID *nextid, ID *nextid2index );
  341. /*
  342. * backentry.c
  343. */
  344. struct backentry *backentry_init( Slapi_Entry *e );
  345. struct backentry *backentry_alloc();
  346. void backentry_free( struct backentry **bep );
  347. struct backentry *backentry_dup( struct backentry * );
  348. void backentry_clear_entry( struct backentry * );
  349. char *backentry_get_ndn(const struct backentry *e);
  350. const Slapi_DN *backentry_get_sdn(const struct backentry *e);
  351. /*
  352. * parents.c
  353. */
  354. int parent_update_on_childchange(modify_context *mc,int op, size_t *numofchildren);
  355. /*
  356. * perfctrs.c
  357. */
  358. void perfctrs_wait(size_t milliseconds,perfctrs_private *priv,DB_ENV *db_env);
  359. void perfctrs_init(struct ldbminfo *li,perfctrs_private **priv);
  360. void perfctrs_terminate(perfctrs_private **priv, DB_ENV *db_env);
  361. void perfctrs_as_entry( Slapi_Entry *e, perfctrs_private *priv, DB_ENV *db_env );
  362. /*
  363. * rmdb.c
  364. */
  365. int ldbm_back_rmdb( Slapi_PBlock *pb );
  366. /*
  367. * sort.c
  368. */
  369. /*
  370. * Definitions for sort spec object
  371. */
  372. struct sort_spec_thing
  373. {
  374. char *type;
  375. char *matchrule; /* Matching rule string */
  376. int order; /* 0 == ascending, 1 == decending */
  377. struct sort_spec_thing *next; /* Link to the next one */
  378. Slapi_PBlock *mr_pb; /* For matchrule indexing */
  379. value_compare_fn_type compare_fn; /* For non-matchrule indexing */
  380. };
  381. typedef struct sort_spec_thing sort_spec_thing;
  382. typedef struct sort_spec_thing sort_spec;
  383. void sort_spec_free(sort_spec *s);
  384. int sort_candidates(backend *be, int lookthrough_limit, time_t time_up, Slapi_PBlock *pb, IDList *candidates, sort_spec_thing *sort_spec, char **sort_error_type) ;
  385. int make_sort_response_control ( Slapi_PBlock *pb, int code, char *error_type);
  386. int parse_sort_spec(struct berval *sort_spec_ber, sort_spec **ps);
  387. struct berval* attr_value_lowest(struct berval **values, value_compare_fn_type compare_fn);
  388. int sort_attr_compare(struct berval ** value_a, struct berval ** value_b, value_compare_fn_type compare_fn);
  389. void sort_log_access(Slapi_PBlock *pb,sort_spec_thing *s,IDList *candidates);
  390. /*
  391. * dbsize.c
  392. */
  393. int ldbm_db_size( Slapi_PBlock *pb );
  394. /*
  395. * external functions
  396. */
  397. int ldbm_back_bind( Slapi_PBlock *pb );
  398. int ldbm_back_unbind( Slapi_PBlock *pb );
  399. int ldbm_back_search( Slapi_PBlock *pb );
  400. int ldbm_back_compare( Slapi_PBlock *pb );
  401. int ldbm_back_modify( Slapi_PBlock *pb );
  402. int ldbm_back_modrdn( Slapi_PBlock *pb );
  403. int ldbm_back_add( Slapi_PBlock *pb );
  404. int ldbm_back_delete( Slapi_PBlock *pb );
  405. int ldbm_back_abandon( Slapi_PBlock *pb );
  406. int ldbm_back_config( Slapi_PBlock *pb );
  407. int ldbm_back_close( Slapi_PBlock *pb );
  408. int ldbm_back_cleanup( Slapi_PBlock *pb );
  409. void ldbm_back_instance_set_destructor(void **arg);
  410. int ldbm_back_flush( Slapi_PBlock *pb );
  411. int ldbm_back_start( Slapi_PBlock *pb );
  412. int ldbm_back_seq( Slapi_PBlock *pb );
  413. int ldbm_back_ldif2ldbm( Slapi_PBlock *pb );
  414. int ldbm_back_ldbm2ldif( Slapi_PBlock *pb );
  415. int ldbm_back_ldbm2ldifalt( Slapi_PBlock *pb );
  416. int ldbm_back_ldbm2index( Slapi_PBlock *pb );
  417. int ldbm_back_archive2ldbm( Slapi_PBlock *pb );
  418. int ldbm_back_ldbm2archive( Slapi_PBlock *pb );
  419. int ldbm_back_upgradedb( Slapi_PBlock *pb );
  420. int ldbm_back_dbverify( Slapi_PBlock *pb );
  421. int ldbm_back_next_search_entry( Slapi_PBlock *pb );
  422. int ldbm_back_next_search_entry_ext( Slapi_PBlock *pb, int use_extension );
  423. int ldbm_back_db_test( Slapi_PBlock *pb );
  424. int ldbm_back_entry_release( Slapi_PBlock *pb, void *backend_info_ptr );
  425. void ldbm_back_search_results_release( void **search_results );
  426. int ldbm_back_init( Slapi_PBlock *pb );
  427. void ldbm_back_prev_search_results( Slapi_PBlock *pb );
  428. /*
  429. * monitor.c
  430. */
  431. int ldbm_back_monitor_search(Slapi_PBlock *pb, Slapi_Entry* e,
  432. Slapi_Entry* entryAfter, int *returncode, char *returntext, void *arg);
  433. int ldbm_back_monitor_instance_search(Slapi_PBlock *pb, Slapi_Entry *e,
  434. Slapi_Entry *entryAfter, int *returncode, char *returntext, void *arg);
  435. int ldbm_back_dbmonitor_search(Slapi_PBlock *pb, Slapi_Entry *e,
  436. Slapi_Entry *entryAfter, int *returncode, char *returntext, void *arg);
  437. /*
  438. * vlv.c
  439. */
  440. struct vlv_request
  441. {
  442. ber_int_t beforeCount;
  443. ber_int_t afterCount;
  444. ber_tag_t tag;
  445. ber_int_t index;
  446. ber_int_t contentCount;
  447. struct berval value;
  448. };
  449. struct vlv_response
  450. {
  451. ber_int_t targetPosition;
  452. ber_int_t contentCount;
  453. ber_int_t result;
  454. };
  455. int vlv_init(ldbm_instance *inst);
  456. int vlv_remove_callbacks(ldbm_instance *inst);
  457. const Slapi_Entry **vlv_get_search_entries();
  458. struct vlvIndex* vlv_find_searchname(const char * name, backend *be);
  459. struct vlvIndex* vlv_find_indexname(const char * name, backend *be);
  460. char *vlv_getindexnames();
  461. int vlv_search_build_candidate_list(Slapi_PBlock *pb, const Slapi_DN *base, int *rc, const sort_spec* sort_control,
  462. const struct vlv_request *vlv_request_control, IDList** candidates, struct vlv_response *vlv_response_control);
  463. int vlv_update_index(struct vlvIndex* p, back_txn *txn, struct ldbminfo *li, Slapi_PBlock *pb, struct backentry* oldEntry, struct backentry* newEntry);
  464. int vlv_update_all_indexes(back_txn *txn, backend *be, Slapi_PBlock *pb, struct backentry* oldEntry, struct backentry* newEntry);
  465. int vlv_filter_candidates(backend *be, Slapi_PBlock *pb, const IDList *candidates, const Slapi_DN *base, int scope, Slapi_Filter *filter, IDList** filteredCandidates,int lookthrough_limit, time_t time_up);
  466. int vlv_trim_candidates(backend *be, const IDList *candidates, const sort_spec* sort_control, const struct vlv_request *vlv_request_control, IDList** filteredCandidates,struct vlv_response *pResponse);
  467. int vlv_parse_request_control(backend *be, struct berval *vlv_spec_ber, struct vlv_request* vlvp);
  468. int vlv_make_response_control(Slapi_PBlock *pb, const struct vlv_response* vlvp);
  469. void vlv_getindices(IFP callback_fn,void *param, backend *be);
  470. void vlv_print_access_log(Slapi_PBlock *pb,struct vlv_request* vlvi, struct vlv_response *vlvo);
  471. void vlv_grok_new_import_entry(const struct backentry *e, backend *be);
  472. IDList *vlv_find_index_by_filter(struct backend *be, const char *base,
  473. Slapi_Filter *f);
  474. int vlv_delete_search_entry(Slapi_PBlock *pb, Slapi_Entry* e, ldbm_instance *inst);
  475. void vlv_acquire_lock(backend *be);
  476. void vlv_release_lock(backend *be);
  477. int vlv_isvlv(char *filename);
  478. /*
  479. * Indexfile.c
  480. */
  481. int indexfile_delete_all_keys(backend *be,char* type,back_txn *txn);
  482. int indexfile_primary_modifyall(backend *be, LDAPMod **mods_to_perform,char **indexes_to_update,back_txn *txn);
  483. /*
  484. * bedse.c
  485. */
  486. #if 0
  487. int bedse_init();
  488. int bedse_search(Slapi_PBlock *pb);
  489. struct dse_callback *bedse_register_callback(int operation, const Slapi_DN *base, int scope, const char *filter, int (*fn)(Slapi_PBlock *,Slapi_Entry *,Slapi_Entry *,int*,char*,void *), void *fn_arg);
  490. void bedse_remove_callback(int operation, const Slapi_DN *base, int scope, const char *filter, int (*fn)(Slapi_PBlock *,Slapi_Entry *,Slapi_Entry *,int*,char*,void *));
  491. int bedse_add_index_entry(int argc, char **argv);
  492. #endif
  493. /*
  494. * ldbm_search.c
  495. */
  496. Slapi_Filter* create_onelevel_filter(Slapi_Filter* filter, const struct backentry *e, int managedsait, Slapi_Filter** fid2kids, Slapi_Filter** focref, Slapi_Filter** fand, Slapi_Filter** forr);
  497. Slapi_Filter* create_subtree_filter(Slapi_Filter* filter, int managedsait, Slapi_Filter** focref, Slapi_Filter** forr);
  498. IDList* subtree_candidates(Slapi_PBlock *pb, backend *be, const char *base, const struct backentry *e, Slapi_Filter *filter, int managedsait, int *allids_before_scopingp, int *err);
  499. void search_set_tune(struct ldbminfo *li,int val);
  500. int search_get_tune(struct ldbminfo *li);
  501. int compute_lookthrough_limit( Slapi_PBlock *pb, struct ldbminfo *li );
  502. /*
  503. * matchrule.c
  504. */
  505. int create_matchrule_indexer(Slapi_PBlock **pb,char* matchrule,char* type);
  506. int destroy_matchrule_indexer(Slapi_PBlock *pb);
  507. int matchrule_values_to_keys(Slapi_PBlock *pb,struct berval **input_values,struct berval ***output_values);
  508. int matchrule_values_to_keys_sv(Slapi_PBlock *pb,Slapi_Value **input_values, Slapi_Value ***output_values);
  509. /*
  510. * upgrade.c
  511. */
  512. int check_db_version(struct ldbminfo *li, int *action);
  513. int check_db_inst_version(ldbm_instance *inst);
  514. int adjust_idl_switch(char *ldbmversion, struct ldbminfo *li);
  515. int ldbm_upgrade(ldbm_instance *inst, int action);
  516. int lookup_dbversion(char *dbversion, int flag);
  517. /*
  518. * init.c
  519. */
  520. int ldbm_attribute_always_indexed(const char *attrtype);
  521. /*
  522. * dbversion.c
  523. */
  524. int dbversion_write(struct ldbminfo *li, const char *dir, const char *dversion);
  525. int dbversion_read(struct ldbminfo *li, const char *directory,
  526. char **ldbmversion, char **dataversion);
  527. int dbversion_exists(struct ldbminfo *li, const char *directory);
  528. /*
  529. * config_ldbm.c
  530. */
  531. int ldbm_config_load_dse_info(struct ldbminfo *li);
  532. void ldbm_config_setup_default(struct ldbminfo *li);
  533. void ldbm_config_internal_set(struct ldbminfo *li, char *attrname, char *value);
  534. void ldbm_instance_config_internal_set(ldbm_instance *inst, char *attrname, char *value);
  535. void ldbm_instance_config_setup_default(ldbm_instance *inst);
  536. int ldbm_instance_postadd_instance_entry_callback(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* entryAfter, int *returncode, char *returntext, void *arg);
  537. int ldbm_instance_add_instance_entry_callback(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* entryAfter, int *returncode, char *returntext, void *arg);
  538. int ldbm_instance_delete_instance_entry_callback(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* entryAfter, int *returncode, char *returntext, void *arg);
  539. int ldbm_instance_post_delete_instance_entry_callback(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* entryAfter, int *returncode, char *returntext, void *arg);
  540. /* Index config functions */
  541. int ldbm_index_init_entry_callback(Slapi_PBlock *pb, Slapi_Entry* e, Slapi_Entry* entryAfter, int *returncode, char *returntext, void *arg);
  542. int ldbm_instance_index_config_add_callback(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int *returncode, char *returntext, void *arg);
  543. int ldbm_instance_index_config_delete_callback(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int *returncode, char *returntext, void *arg);
  544. int ldbm_instance_index_config_modify_callback(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry *entryAfter, int *returncode, char *returntext, void *arg);
  545. /* Attribute Encryption config functions */
  546. int ldbm_attrcrypt_init_entry_callback(Slapi_PBlock *pb, Slapi_Entry* e, Slapi_Entry* entryAfter, int *returncode, char *returntext, void *arg);
  547. int ldbm_instance_attrcrypt_config_add_callback(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int *returncode, char *returntext, void *arg);
  548. int ldbm_instance_attrcrypt_config_delete_callback(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int *returncode, char *returntext, void *arg);
  549. int ldbm_instance_attrcrypt_config_modify_callback(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry *entryAfter, int *returncode, char *returntext, void *arg);
  550. void replace_ldbm_config_value(char *conftype, char *val, struct ldbminfo *li);
  551. /*
  552. * ancestorid.c
  553. */
  554. int ldbm_ancestorid_create_index(backend *be);
  555. int ldbm_ancestorid_index_entry(backend *be, struct backentry *e, int flags, back_txn *txn);
  556. int ldbm_ancestorid_read(backend *be, back_txn *txn, ID id, IDList **idl);
  557. int ldbm_ancestorid_move_subtree(
  558. backend *be,
  559. const Slapi_DN *olddn,
  560. const Slapi_DN *newdn,
  561. ID id,
  562. IDList *subtree_idl,
  563. back_txn *txn
  564. );
  565. #endif
  566. /*
  567. * import-threads.c
  568. */
  569. int dse_conf_backup(struct ldbminfo *li, char *destination_directory);
  570. int dse_conf_verify(struct ldbminfo *li, char *src_dir, char *bename);
  571. /*
  572. * ldbm_attrcrypt.c
  573. */
  574. int attrcrypt_decrypt_entry(backend *be, struct backentry *e);
  575. int attrcrypt_encrypt_entry_inplace(backend *be, const struct backentry *inout);
  576. int attrcrypt_encrypt_entry(backend *be, const struct backentry *in, struct backentry **out);
  577. int attrcrypt_encrypt_index_key(backend *be, struct attrinfo *ai, const struct berval *in, struct berval **out);
  578. int attrcrypt_init(ldbm_instance *li);
  579. /*
  580. * ldbm_usn.c
  581. */
  582. void ldbm_usn_init(struct ldbminfo *li);
  583. int ldbm_usn_enabled(backend *be);
  584. int ldbm_set_last_usn(Slapi_Backend *be);