X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-sql%2Finit.c;h=a8fc074795cff9ec07f85f39addc72dbc797227a;hb=5487575086d2060ab05a408543ff07be31b400a8;hp=a2e6f5948f84548b6ba6650ad9e6a237db37e665;hpb=125059ccb553b071f0c1fef349e66040e8090123;p=openldap diff --git a/servers/slapd/back-sql/init.c b/servers/slapd/back-sql/init.c index a2e6f5948f..a8fc074795 100644 --- a/servers/slapd/back-sql/init.c +++ b/servers/slapd/back-sql/init.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1999-2005 The OpenLDAP Foundation. + * Copyright 1999-2006 The OpenLDAP Foundation. * Portions Copyright 1999 Dmitry Kovalev. * Portions Copyright 2002 Pierangelo Masarati. * All rights reserved. @@ -97,17 +97,23 @@ backsql_db_init( BackendDB *bd ) { backsql_info *bi; + int rc = 0; Debug( LDAP_DEBUG_TRACE, "==>backsql_db_init()\n", 0, 0, 0 ); - bi = (backsql_info *)ch_malloc( sizeof( backsql_info ) ); - memset( bi, '\0', sizeof( backsql_info ) ); + + bi = (backsql_info *)ch_calloc( 1, sizeof( backsql_info ) ); ldap_pvt_thread_mutex_init( &bi->sql_dbconn_mutex ); ldap_pvt_thread_mutex_init( &bi->sql_schema_mutex ); - backsql_init_db_env( bi ); + + if ( backsql_init_db_env( bi ) != SQL_SUCCESS ) { + rc = -1; + } bd->be_private = bi; + Debug( LDAP_DEBUG_TRACE, "<==backsql_db_init()\n", 0, 0, 0 ); - return 0; + + return rc; } int @@ -218,8 +224,8 @@ backsql_db_open( SQLHDBC dbh = SQL_NULL_HDBC; struct berbuf bb = BB_NULL; - char opbuf[ OPERATION_BUFFER_SIZE ]; - Operation* op = (Operation *)opbuf; + OperationBuffer opbuf; + Operation* op = (Operation *) &opbuf; Debug( LDAP_DEBUG_TRACE, "==>backsql_db_open(): " "testing RDBMS connection\n", 0, 0, 0 ); @@ -329,7 +335,7 @@ backsql_db_open( * UPPER(ldap_entries.dn) LIKE UPPER(CONCAT('%',?)) */ - backsql_strfcat( &bb, "blbbb", + backsql_strfcat_x( &bb, NULL, "blbbb", &bi->sql_upper_func, (ber_len_t)STRLENOF( "(ldap_entries.dn) LIKE " ), "(ldap_entries.dn) LIKE ", @@ -343,7 +349,7 @@ backsql_db_open( * ldap_entries.dn LIKE CONCAT('%',?) */ - backsql_strfcat( &bb, "lb", + backsql_strfcat_x( &bb, NULL, "lb", (ber_len_t)STRLENOF( "ldap_entries.dn LIKE " ), "ldap_entries.dn LIKE ", &concat ); @@ -367,7 +373,7 @@ backsql_db_open( * UPPER(ldap_entries.dn) LIKE UPPER(CONCAT('%,',?)) */ - backsql_strfcat( &bb, "blbl", + backsql_strfcat_x( &bb, NULL, "blbl", &bi->sql_upper_func, (ber_len_t)STRLENOF( "(ldap_entries.dn)=" ), "(ldap_entries.dn)=", @@ -380,7 +386,7 @@ backsql_db_open( * ldap_entries.dn LIKE CONCAT('%,',?) */ - backsql_strfcat( &bb, "l", + backsql_strfcat_x( &bb, NULL, "l", (ber_len_t)STRLENOF( "ldap_entries.dn=?" ), "ldap_entries.dn=?"); } @@ -491,20 +497,20 @@ backsql_db_open( if ( bi->sql_id_query == NULL ) { /* no custom id_query provided */ if ( bi->sql_upper_func.bv_val == NULL ) { - backsql_strcat( &bb, backsql_id_query, "dn=?", NULL ); + backsql_strcat_x( &bb, NULL, backsql_id_query, "dn=?", NULL ); } else { if ( BACKSQL_HAS_LDAPINFO_DN_RU( bi ) ) { - backsql_strcat( &bb, backsql_id_query, + backsql_strcat_x( &bb, NULL, backsql_id_query, "dn_ru=?", NULL ); } else { if ( BACKSQL_USE_REVERSE_DN( bi ) ) { - backsql_strfcat( &bb, "sbl", + backsql_strfcat_x( &bb, NULL, "sbl", backsql_id_query, &bi->sql_upper_func, (ber_len_t)STRLENOF( "(dn)=?" ), "(dn)=?" ); } else { - backsql_strfcat( &bb, "sblbcb", + backsql_strfcat_x( &bb, NULL, "sblbcb", backsql_id_query, &bi->sql_upper_func, (ber_len_t)STRLENOF( "(dn)=" ), "(dn)=", @@ -522,7 +528,7 @@ backsql_db_open( */ BER_BVZERO( &bb.bb_val ); bb.bb_len = 0; - backsql_strfcat( &bb, "sbsb", + backsql_strfcat_x( &bb, NULL, "sbsb", "SELECT COUNT(distinct subordinates.id) " "FROM ldap_entries,ldap_entries ", &bi->sql_aliasing, "subordinates " @@ -535,7 +541,7 @@ backsql_db_open( */ BER_BVZERO( &bb.bb_val ); bb.bb_len = 0; - backsql_strfcat( &bb, "sbbsbsbbsb", + backsql_strfcat_x( &bb, NULL, "sbbsbsbbsb", " ", &bi->sql_aliasing, &bi->sql_aliasing_quote, "objectClass", &bi->sql_aliasing_quote, ",ldap_entries.dn ", &bi->sql_aliasing, @@ -561,18 +567,22 @@ int backsql_db_close( BackendDB *bd ) { + backsql_info *bi = (backsql_info*)bd->be_private; + Debug( LDAP_DEBUG_TRACE, "==>backsql_db_close()\n", 0, 0, 0 ); + + backsql_conn_destroy( bi ); + Debug( LDAP_DEBUG_TRACE, "<==backsql_db_close()\n", 0, 0, 0 ); + return 0; } int backsql_connection_destroy( Backend *bd, Connection *c ) { - backsql_info *bi = (backsql_info*)bd->be_private; - - char opbuf[ OPERATION_BUFFER_SIZE ]; - Operation* op = (Operation *)opbuf; + OperationBuffer opbuf; + Operation* op = (Operation *) &opbuf; op->o_hdr = (Opheader *)&op[ 1 ]; op->o_connid = c->c_connid;