/* pointer to link list of extended objects */
static ExtendedOp *pGExtendedOps = NULL;
-/* global plugins not associated with a specific backend */
-static Slapi_PBlock *pGPlugins = NULL;
/*********************************************************************
* Function Name: plugin_pblock_new
}
av2 = ldap_charray_dup( argv );
- if ( !av2 ) {
+ if ( av2 == NULL ) {
rc = LDAP_NO_MEMORY;
goto done;
}
goto done;
}
- rc = slapi_int_load_plugin( pPlugin, path, initfunc, TRUE, NULL, &hdLoadHandle );
+ rc = slapi_int_load_plugin( pPlugin, path, initfunc, 1, NULL, &hdLoadHandle );
if ( rc != 0 ) {
goto done;
}
if ( rc != 0 && pPlugin != NULL ) {
slapi_pblock_destroy( pPlugin );
pPlugin = NULL;
- if ( av2 ) {
+ if ( av2 != NULL ) {
ldap_charray_free( av2 );
}
}
Slapi_PBlock *pSavePB;
int rc = LDAP_SUCCESS;
- pTmpPB = ( be == NULL ) ? pGPlugins : (Slapi_PBlock *)(be->be_pb);
+ assert( be != NULL );
+ pTmpPB = SLAPI_BACKEND_PBLOCK( be );
if ( pTmpPB == NULL ) {
- if ( be != NULL )
- be->be_pb = (void *)pPB;
- else
- pGPlugins = pPB;
+ SLAPI_BACKEND_PBLOCK( be ) = pPB;
} else {
while ( pTmpPB != NULL && rc == LDAP_SUCCESS ) {
pSavePB = pTmpPB;
- rc = slapi_pblock_get( pTmpPB, SLAPI_IBM_PBLOCK,
- &pTmpPB );
- if ( rc != LDAP_SUCCESS ) {
- rc = LDAP_OTHER;
- }
+ rc = slapi_pblock_get( pTmpPB, SLAPI_IBM_PBLOCK, &pTmpPB );
}
if ( rc == LDAP_SUCCESS ) {
- rc = slapi_pblock_set( pSavePB, SLAPI_IBM_PBLOCK,
- (void *)pPB );
- if ( rc != LDAP_SUCCESS ) {
- rc = LDAP_OTHER;
- }
+ rc = slapi_pblock_set( pSavePB, SLAPI_IBM_PBLOCK, (void *)pPB );
}
}
- return rc;
+ return ( rc != LDAP_SUCCESS ) ? LDAP_OTHER : LDAP_SUCCESS;
}
/*********************************************************************
int numPB = 0;
int rc = LDAP_SUCCESS;
- assert( ppFuncPtrs );
-
- /*
- * First, count the plugins associated with a specific
- * backend.
- */
- if ( be != NULL ) {
- pCurrentPB = (Slapi_PBlock *)be->be_pb;
-
- while ( pCurrentPB != NULL && rc == LDAP_SUCCESS ) {
- rc = slapi_pblock_get( pCurrentPB, functype, &FuncPtr );
- if ( rc == LDAP_SUCCESS ) {
- if ( FuncPtr != NULL ) {
- numPB++;
- }
- rc = slapi_pblock_get( pCurrentPB,
- SLAPI_IBM_PBLOCK, &pCurrentPB );
- }
- }
- }
+ assert( ppFuncPtrs != NULL );
- if ( rc != LDAP_SUCCESS ) {
+ if ( be == NULL ) {
goto done;
}
- /*
- * Then, count the global plugins.
- */
- pCurrentPB = pGPlugins;
+ pCurrentPB = SLAPI_BACKEND_PBLOCK( be );
- while ( pCurrentPB != NULL && rc == LDAP_SUCCESS ) {
+ while ( pCurrentPB != NULL && rc == LDAP_SUCCESS ) {
rc = slapi_pblock_get( pCurrentPB, functype, &FuncPtr );
if ( rc == LDAP_SUCCESS ) {
if ( FuncPtr != NULL ) {
numPB++;
}
rc = slapi_pblock_get( pCurrentPB,
- SLAPI_IBM_PBLOCK, &pCurrentPB );
+ SLAPI_IBM_PBLOCK, &pCurrentPB );
}
}
- if ( rc != LDAP_SUCCESS ) {
- goto done;
- }
-
if ( numPB == 0 ) {
*ppFuncPtrs = NULL;
rc = LDAP_SUCCESS;
goto done;
}
- if ( be != NULL ) {
- pCurrentPB = (Slapi_PBlock *)be->be_pb;
-
- while ( pCurrentPB != NULL && rc == LDAP_SUCCESS ) {
- rc = slapi_pblock_get( pCurrentPB, functype, &FuncPtr );
- if ( rc == LDAP_SUCCESS ) {
- if ( FuncPtr != NULL ) {
- *pTmpFuncPtr = FuncPtr;
- pTmpFuncPtr++;
- }
- rc = slapi_pblock_get( pCurrentPB,
- SLAPI_IBM_PBLOCK, &pCurrentPB );
- }
- }
- }
-
- pCurrentPB = pGPlugins;
+ pCurrentPB = SLAPI_BACKEND_PBLOCK( be );
while ( pCurrentPB != NULL && rc == LDAP_SUCCESS ) {
rc = slapi_pblock_get( pCurrentPB, functype, &FuncPtr );
SLAPI_IBM_PBLOCK, &pCurrentPB );
}
}
- *pTmpFuncPtr = NULL ;
+
+ *pTmpFuncPtr = NULL;
+
done:
if ( rc != LDAP_SUCCESS && *ppFuncPtrs != NULL ) {
int rc = LDAP_SUCCESS;
SLAPI_FUNC fpInitFunc = NULL;
- assert( pLdHandle );
+ assert( pLdHandle != NULL );
if ( lt_dlinit() ) {
return LDAP_LOCAL_ERROR;
return LDAP_LOCAL_ERROR;
}
- if ( doInit == TRUE ) {
+ if ( doInit ) {
rc = ( *fpInitFunc )( pPlugin );
if ( rc != LDAP_SUCCESS ) {
lt_dlclose( *pLdHandle );
fname, lineno );
return 1;
}
+
+ /* automatically instantiate overlay if necessary */
+ if ( !overlay_is_inst( be, SLAPI_OVERLAY_NAME ) ) {
+ if ( overlay_config( be, SLAPI_OVERLAY_NAME ) != 0 ) {
+ fprintf( stderr, "Failed to instantiate SLAPI overlay\n");
+ return -1;
+ }
+ }
if ( strcasecmp( argv[1], "preoperation" ) == 0 ) {
iType = SLAPI_PLUGIN_PREOPERATION;
)
{
Slapi_PBlock *pp;
- int i, j, rc;
+ int i, j;
char **argv, ibuf[32], *ptr;
struct berval idx, bv;
*out = NULL;
idx.bv_val = ibuf;
i = 0;
- for ( pp=be->be_pb; pp; slapi_pblock_get( pp, SLAPI_IBM_PBLOCK, &pp ) ) {
+
+ for ( pp = SLAPI_BACKEND_PBLOCK( be );
+ pp != NULL;
+ slapi_pblock_get( pp, SLAPI_IBM_PBLOCK, &pp ) )
+ {
slapi_pblock_get( pp, SLAPI_X_CONFIG_ARGV, &argv );
+ if ( argv == NULL ) /* could be dynamic plugin */
+ continue;
idx.bv_len = sprintf( idx.bv_val, "{%d}", i );
bv.bv_len = idx.bv_len;
for (j=1; argv[j]; j++) {
return -1;
}
- return 0;
+ return slapi_int_overlay_init();
}
-