cb_init.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /** BEGIN COPYRIGHT BLOCK
  2. * Copyright 2001 Sun Microsystems, Inc.
  3. * Portions copyright 1999, 2001-2003 Netscape Communications Corporation.
  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_calloc( 1,strlen(PLUGIN_BASE_DN)+strlen(CB_PLUGIN_NAME)+5);
  38. sprintf(cb->pluginDN,"cn=%s,%s",CB_PLUGIN_NAME,PLUGIN_BASE_DN);
  39. cb->configDN=slapi_ch_calloc( 1,strlen(cb->pluginDN)+11);
  40. sprintf(cb->configDN,"cn=config,%s",cb->pluginDN);
  41. /* Set backend callback functions */
  42. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION, SLAPI_PLUGIN_VERSION_03 );
  43. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION, (void *)&chainingdbdesc );
  44. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_SEARCH_FN,
  45. (void *) chainingdb_build_candidate_list );
  46. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_FN,
  47. (void *) chainingdb_next_search_entry );
  48. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_START_FN,
  49. (void *) chainingdb_start ) ;
  50. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_BIND_FN,
  51. (void *) chainingdb_bind ) ;
  52. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ADD_FN,
  53. (void *) chaining_back_add );
  54. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_DELETE_FN,
  55. (void *) chaining_back_delete );
  56. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_COMPARE_FN,
  57. (void *) chaining_back_compare );
  58. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_MODIFY_FN,
  59. (void *) chaining_back_modify );
  60. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_MODRDN_FN,
  61. (void *) chaining_back_modrdn );
  62. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ABANDON_FN,
  63. (void *) chaining_back_abandon );
  64. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_SIZE_FN,
  65. (void *) cb_db_size );
  66. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_CLOSE_FN,
  67. (void *) cb_back_close );
  68. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_CLEANUP_FN,
  69. (void *) cb_back_cleanup );
  70. /****
  71. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ENTRY_RELEASE_FN,
  72. (void *) chaining_back_entry_release );
  73. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_INIT_INSTANCE_FN,
  74. (void *) chaining_back_init);
  75. rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_TEST_FN,
  76. (void *) cb_back_test );
  77. ****/
  78. /*
  79. ** The following callbacks are not implemented
  80. ** by the chaining backend
  81. ** - SLAPI_PLUGIN_DB_FLUSH_FN
  82. ** - SLAPI_PLUGIN_DB_SEQ_FN
  83. ** - SLAPI_PLUGIN_DB_RMDB_FN
  84. ** - SLAPI_PLUGIN_DB_DB2INDEX_FN
  85. ** - SLAPI_PLUGIN_DB_LDIF2DB_FN
  86. ** - SLAPI_PLUGIN_DB_DB2LDIF_FN
  87. ** - SLAPI_PLUGIN_DB_ARCHIVE2DB_FN
  88. ** - SLAPI_PLUGIN_DB_DB2ARCHIVE_FN
  89. ** - SLAPI_PLUGIN_DB_BEGIN_FN
  90. ** - SLAPI_PLUGIN_DB_COMMIT_FN
  91. ** - SLAPI_PLUGIN_DB_ABORT_FN
  92. ** - SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_EXT_FN
  93. */
  94. if ( rc != 0 ) {
  95. slapi_log_error( SLAPI_LOG_FATAL, CB_PLUGIN_SUBSYSTEM, "chaining_back_init failed\n");
  96. return( -1 );
  97. }
  98. cb_set_backend_type(cb);
  99. return (0);
  100. }