コード例 #1
0
ファイル: sync_refresh.c プロジェクト: Firstyear/ds
int
sync_register_operation_extension(void)
{
	return slapi_register_object_extension(SYNC_PLUGIN_SUBSYSTEM,
                                           SLAPI_EXT_OPERATION, 
                                           sync_operation_extension_ctor,
                                           sync_operation_extension_dtor,
                                           &sync_extension_type,
                                           &sync_extension_handle);
}
コード例 #2
0
ファイル: init.c プロジェクト: leto/389-ds
int 
ldbm_back_init( Slapi_PBlock *pb )
{
	struct ldbminfo	*li;
	int		rc;
	struct slapdplugin *p;
	static int interface_published = 0;

	LDAPDebug( LDAP_DEBUG_TRACE, "=> ldbm_back_init\n", 0, 0, 0 );

   	slapi_pblock_get(pb, SLAPI_PLUGIN, &p);
	
	/* allocate backend-specific stuff */
	li = (struct ldbminfo *) slapi_ch_calloc( 1, sizeof(struct ldbminfo) );
	
	/* Record the identity of the ldbm plugin.  The plugin 
	 * identity is used during internal ops. */
	slapi_pblock_get(pb, SLAPI_PLUGIN_IDENTITY, &(li->li_identity));

	/* keep a pointer back to the plugin */
	li->li_plugin = p;
	
	/* set shutdown flag to zero.*/
	li->li_shutdown = 0;

	/* Initialize the set of instances. */
	li->li_instance_set = objset_new(&ldbm_back_instance_set_destructor);
	
	/* initialize dblayer  */
	if (dblayer_init(li)) {
		LDAPDebug( LDAP_DEBUG_ANY, "ldbm_back_init: dblayer_init failed\n",0, 0, 0 );
		goto fail;
	}

	/* Fill in the fields of the ldbminfo and the dblayer_private
	 * structures with some default values */
	ldbm_config_setup_default(li);

        /* ask the factory to give us space in the Connection object
         * (only bulk import uses this)
         */
        if (slapi_register_object_extension(p->plg_name, SLAPI_EXT_CONNECTION,
            factory_constructor, factory_destructor,
            &li->li_bulk_import_object, &li->li_bulk_import_handle) != 0) {
            LDAPDebug(LDAP_DEBUG_ANY, "ldbm_back_init: "
                      "slapi_register_object_extension failed.\n", 0, 0, 0);
            goto fail;
        }

	/* add some private attributes */
	rc = ldbm_back_add_schema( pb );

	/* set plugin private pointer and initialize locks, etc. */
	rc = slapi_pblock_set( pb, SLAPI_PLUGIN_PRIVATE, (void *) li );
	
	if ((li->li_dbcache_mutex = PR_NewLock()) == NULL ) {
            LDAPDebug( LDAP_DEBUG_ANY, "ldbm_back_init: PR_NewLock failed\n",
		0, 0, 0 );
            goto fail;
        }

	if ((li->li_shutdown_mutex = PR_NewLock()) == NULL ) {
            LDAPDebug( LDAP_DEBUG_ANY, "ldbm_back_init: PR_NewLock failed\n",
		0, 0, 0 );
            goto fail;
        }

	if ((li->li_config_mutex = PR_NewLock()) == NULL ) {
            LDAPDebug( LDAP_DEBUG_ANY, "ldbm_back_init: PR_NewLock failed\n",
		0, 0, 0 );
            goto fail;
        }

	if ((li->li_dbcache_cv = PR_NewCondVar( li->li_dbcache_mutex )) == NULL ) {
            LDAPDebug( LDAP_DEBUG_ANY, "ldbm_back_init: PR_NewCondVar failed\n", 0, 0, 0 );
            goto fail;
        }

	/* set all of the necessary database plugin callback functions */
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION,
	    (void *) SLAPI_PLUGIN_VERSION_03 );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DESCRIPTION,
	    (void *)&pdesc );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_BIND_FN, 
	    (void *) ldbm_back_bind );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_UNBIND_FN, 
	    (void *) ldbm_back_unbind );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_SEARCH_FN, 
	    (void *) ldbm_back_search );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_FN,
	    (void *) ldbm_back_next_search_entry );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_EXT_FN,
	    (void *) ldbm_back_next_search_entry_ext );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_PREV_SEARCH_RESULTS_FN,
	    (void *) ldbm_back_prev_search_results );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ENTRY_RELEASE_FN,
	    (void *) ldbm_back_entry_release );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_SEARCH_RESULTS_RELEASE_FN,
	    (void *) ldbm_back_search_results_release );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_COMPARE_FN, 
	    (void *) ldbm_back_compare );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_MODIFY_FN, 
	    (void *) ldbm_back_modify );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_MODRDN_FN, 
	    (void *) ldbm_back_modrdn );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ADD_FN, 
	    (void *) ldbm_back_add );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_DELETE_FN, 
	    (void *) ldbm_back_delete );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ABANDON_FN, 
	    (void *) ldbm_back_abandon );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_CLOSE_FN, 
	    (void *) ldbm_back_close );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_CLEANUP_FN, 
	    (void *) ldbm_back_cleanup );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_FLUSH_FN, 
	    (void *) ldbm_back_flush );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_START_FN, 
	    (void *) ldbm_back_start );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_SEQ_FN, 
	    (void *) ldbm_back_seq );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_RMDB_FN,
	    (void *) ldbm_back_rmdb );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_LDIF2DB_FN,
	    (void *) ldbm_back_ldif2ldbm );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_DB2LDIF_FN,
	    (void *) ldbm_back_ldbm2ldif );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_DB2INDEX_FN,
	    (void *) ldbm_back_ldbm2index );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ARCHIVE2DB_FN,
	    (void *) ldbm_back_archive2ldbm );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_DB2ARCHIVE_FN,
	    (void *) ldbm_back_ldbm2archive );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_UPGRADEDB_FN,
	    (void *) ldbm_back_upgradedb );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_UPGRADEDNFORMAT_FN,
	    (void *) ldbm_back_upgradednformat );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_DBVERIFY_FN,
	    (void *) ldbm_back_dbverify );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_BEGIN_FN,
	    (void *) dblayer_plugin_begin );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_COMMIT_FN,
	    (void *) dblayer_plugin_commit );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ABORT_FN,
	    (void *) dblayer_plugin_abort );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_SIZE_FN,
	    (void *) ldbm_db_size );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_INIT_INSTANCE_FN,
	    (void *) ldbm_back_init ); /* register itself so that the secon instance
                                          can be initialized */
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_WIRE_IMPORT_FN,
	    (void *) ldbm_back_wire_import );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_ADD_SCHEMA_FN,
	    (void *) ldbm_back_add_schema );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_GET_INFO_FN,
	    (void *) ldbm_back_get_info );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_SET_INFO_FN,
	    (void *) ldbm_back_set_info );
	rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_CTRL_INFO_FN,
	    (void *) ldbm_back_ctrl_info );

	if ( rc != 0 ) {
		LDAPDebug( LDAP_DEBUG_ANY, "ldbm_back_init failed\n", 0, 0, 0 );
		goto fail;
	}
	
	/* register the IDL interface with the API broker */
	if(!interface_published)
	{
		IDL_api[0] = 0;
		IDL_api[1] = (void *)idl_alloc;
		IDL_api[2] = (void *)idl_insert;

		if( slapi_apib_register(IDL_v1_0_GUID, IDL_api) )
		{
			LDAPDebug( LDAP_DEBUG_ANY, "ldbm_back_init: failed to publish IDL interface\n", 0, 0, 0);
			goto fail;
		}

		interface_published = 1;
	}

	LDAPDebug( LDAP_DEBUG_TRACE, "<= ldbm_back_init\n", 0, 0, 0 );

	return( 0 );

fail:
	dblayer_terminate( li );
	slapi_ch_free((void **)&li);
	slapi_pblock_set( pb, SLAPI_PLUGIN_PRIVATE, NULL );
	return( -1 );
}