cb_init.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /** BEGIN COPYRIGHT BLOCK
  2. * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
  3. * Copyright (C) 2005 Red Hat, Inc.
  4. * All rights reserved.
  5. * END COPYRIGHT BLOCK **/
  6. #include "cb.h"
  7. Slapi_PluginDesc chainingdbdesc = { CB_PLUGIN_NAME,
  8. PLUGIN_MAGIC_VENDOR_STR,
  9. PRODUCTTEXT,
  10. CB_PLUGIN_DESCRIPTION };
  11. static cb_backend * cb_backend_type=NULL;
  12. cb_backend * cb_get_backend_type() {
  13. return cb_backend_type;
  14. }
  15. static void cb_set_backend_type(cb_backend * cb) {
  16. cb_backend_type=cb;
  17. }
  18. /* Initialization function */
  19. #ifdef _WIN32
  20. __declspec(dllexport)
  21. #endif
  22. int
  23. chaining_back_init( Slapi_PBlock *pb )
  24. {
  25. int rc=0;
  26. cb_backend *cb;
  27. struct slapdplugin *p;
  28. cb = (cb_backend *) slapi_ch_calloc( 1, sizeof(cb_backend));
  29. /* Record the identity of the chaining plugin. used during internal ops.*/
  30. slapi_pblock_get(pb, SLAPI_PLUGIN_IDENTITY, &(cb->identity));
  31. /* keep a pointer back to the plugin */
  32. slapi_pblock_get(pb, SLAPI_PLUGIN, &p);
  33. cb->plugin = p;
  34. /* Initialize misc. fields */
  35. cb->config.rwl_config_lock = PR_NewRWLock(PR_RWLOCK_RANK_NONE, "chaining_db");
  36. rc = slapi_pblock_set( pb, SLAPI_PLUGIN_PRIVATE, (void *) cb );
  37. cb->pluginDN=slapi_ch_smprintf("cn=%s,%s",CB_PLUGIN_NAME,PLUGIN_BASE_DN);
  38. cb->configDN=slapi_ch_smprintf("cn=config,%s",cb->pluginDN);
  39. /* Set backend callback functions */
  40. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION, SLAPI_PLUGIN_VERSION_03 );
  41. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION, (void *)&chainingdbdesc );
  42. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_SEARCH_FN,
  43. (void *) chainingdb_build_candidate_list );
  44. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_FN,
  45. (void *) chainingdb_next_search_entry );
  46. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_START_FN,
  47. (void *) chainingdb_start ) ;
  48. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_BIND_FN,
  49. (void *) chainingdb_bind ) ;
  50. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ADD_FN,
  51. (void *) chaining_back_add );
  52. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_DELETE_FN,
  53. (void *) chaining_back_delete );
  54. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_COMPARE_FN,
  55. (void *) chaining_back_compare );
  56. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_MODIFY_FN,
  57. (void *) chaining_back_modify );
  58. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_MODRDN_FN,
  59. (void *) chaining_back_modrdn );
  60. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ABANDON_FN,
  61. (void *) chaining_back_abandon );
  62. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_SIZE_FN,
  63. (void *) cb_db_size );
  64. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_CLOSE_FN,
  65. (void *) cb_back_close );
  66. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_CLEANUP_FN,
  67. (void *) cb_back_cleanup );
  68. /****
  69. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ENTRY_RELEASE_FN,
  70. (void *) chaining_back_entry_release );
  71. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_INIT_INSTANCE_FN,
  72. (void *) chaining_back_init);
  73. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_TEST_FN,
  74. (void *) cb_back_test );
  75. ****/
  76. /*
  77. ** The following callbacks are not implemented
  78. ** by the chaining backend
  79. ** - SLAPI_PLUGIN_DB_FLUSH_FN
  80. ** - SLAPI_PLUGIN_DB_SEQ_FN
  81. ** - SLAPI_PLUGIN_DB_RMDB_FN
  82. ** - SLAPI_PLUGIN_DB_DB2INDEX_FN
  83. ** - SLAPI_PLUGIN_DB_LDIF2DB_FN
  84. ** - SLAPI_PLUGIN_DB_DB2LDIF_FN
  85. ** - SLAPI_PLUGIN_DB_ARCHIVE2DB_FN
  86. ** - SLAPI_PLUGIN_DB_DB2ARCHIVE_FN
  87. ** - SLAPI_PLUGIN_DB_BEGIN_FN
  88. ** - SLAPI_PLUGIN_DB_COMMIT_FN
  89. ** - SLAPI_PLUGIN_DB_ABORT_FN
  90. ** - SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_EXT_FN
  91. */
  92. if ( rc != 0 ) {
  93. slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM, "chaining_back_init failed\n");
  94. return( -1 );
  95. }
  96. cb_set_backend_type(cb);
  97. return (0);
  98. }