X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-sql%2Fapi.c;h=4525f2a90dc721deeff913d2a069348e9cef0fd2;hb=810a8f0d06ac65d8f3f635edd9b4cb62b4d1e0d3;hp=d5730d826b7f68b99baef3a2ed5d589d0bf48e91;hpb=2d88c1b826797b30500c7d0b3d4e8219277dfacc;p=openldap diff --git a/servers/slapd/back-sql/api.c b/servers/slapd/back-sql/api.c index d5730d826b..4525f2a90d 100644 --- a/servers/slapd/back-sql/api.c +++ b/servers/slapd/back-sql/api.c @@ -1,7 +1,8 @@ /* This work is part of OpenLDAP Software . * - * Copyright 1999-2004 The OpenLDAP Foundation. + * Copyright 1999-2006 The OpenLDAP Foundation. * Portions Copyright 1999 Dmitry Kovalev. + * Portions Copyright 2004 Pierangelo Masarati. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -14,7 +15,8 @@ */ /* ACKNOWLEDGEMENTS: * This work was initially developed by Dmitry Kovalev for inclusion - * by OpenLDAP Software. + * by OpenLDAP Software. Additional significant contributors include + * Pierangelo Masarati. */ #include "portable.h" @@ -29,12 +31,12 @@ static backsql_api *backsqlapi; int -backsql_api_config( backsql_info *bi, const char *name ) +backsql_api_config( backsql_info *bi, const char *name, int argc, char *argv[] ) { backsql_api *ba; - assert( bi ); - assert( name ); + assert( bi != NULL ); + assert( name != NULL ); for ( ba = backsqlapi; ba; ba = ba->ba_next ) { if ( strcasecmp( name, ba->ba_name ) == 0 ) { @@ -42,6 +44,14 @@ backsql_api_config( backsql_info *bi, const char *name ) ba2 = ch_malloc( sizeof( backsql_api ) ); *ba2 = *ba; + + if ( ba2->ba_config ) { + if ( ( *ba2->ba_config )( ba2, argc, argv ) ) { + ch_free( ba2 ); + return 1; + } + } + ba2->ba_next = bi->sql_api; bi->sql_api = ba2; return 0; @@ -51,12 +61,35 @@ backsql_api_config( backsql_info *bi, const char *name ) return 1; } +int +backsql_api_destroy( backsql_info *bi ) +{ + backsql_api *ba; + + assert( bi != NULL ); + + ba = bi->sql_api; + + if ( ba == NULL ) { + return 0; + } + + for ( ; ba; ba = ba->ba_next ) { + if ( ba->ba_destroy ) { + (void)( *ba->ba_destroy )( ba ); + } + } + + return 0; +} + int backsql_api_register( backsql_api *ba ) { backsql_api *ba2; - assert( ba ); + assert( ba != NULL ); + assert( ba->ba_private == NULL ); if ( ba->ba_name == NULL ) { fprintf( stderr, "API module has no name\n" );