X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-sql%2Fapi.c;h=6f87973d8a8f230a00c52c07a506a00c8f08c8ec;hb=d377f353b7053bbe17afa8d97e2eacf810ec3086;hp=78b8f151c7ae8a8b545596dd7b19c72f7892316d;hpb=dc0eacd40b625258355eea866d62188e5aa7ce3b;p=openldap diff --git a/servers/slapd/back-sql/api.c b/servers/slapd/back-sql/api.c index 78b8f151c7..6f87973d8a 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-2005 The OpenLDAP Foundation. + * Copyright 1999-2012 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,21 @@ 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_argc = argc; + if ( argc ) { + int i; + ba2->ba_argv = ch_malloc( argc * sizeof(char *)); + for ( i=0; iba_argv[i] = ch_strdup( argv[i] ); + } + } + ba2->ba_next = bi->sql_api; bi->sql_api = ba2; return 0; @@ -51,12 +68,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" );