fix cloak behavior; plug leak (ITS#6762)

This commit is contained in:
Pierangelo Masarati 2011-01-04 13:08:28 +00:00
parent 565110b249
commit e26b196f69

View File

@ -25,8 +25,8 @@
#include <stdio.h>
#include <ac/string.h>
#include <ac/socket.h>
#include "ac/string.h"
#include "ac/socket.h"
#include "lutil.h"
#include "slap.h"
@ -159,7 +159,7 @@ cloak_cfgen( ConfigArgs *c )
ci_next = *cip;
}
*cip = (cloak_info_t *)ch_calloc( 1, sizeof( cloak_info_t ) );
*cip = (cloak_info_t *)SLAP_CALLOC( 1, sizeof( cloak_info_t ) );
(*cip)->ci_oc = oc;
(*cip)->ci_ad = ad;
(*cip)->ci_next = ci_next;
@ -177,7 +177,7 @@ cloak_cfgen( ConfigArgs *c )
}
static int
cloak_search_cb( Operation *op, SlapReply *rs )
cloak_search_response_cb( Operation *op, SlapReply *rs )
{
slap_callback *sc;
cloak_info_t *ci;
@ -187,7 +187,6 @@ cloak_search_cb( Operation *op, SlapReply *rs )
assert( op && op->o_callback && rs );
if ( rs->sr_type != REP_SEARCH || !rs->sr_entry ) {
slap_freeself_cb( op, rs );
return ( SLAP_CB_CONTINUE );
}
@ -235,7 +234,7 @@ cloak_search_cb( Operation *op, SlapReply *rs )
if ( a->a_desc != ci->ci_ad )
continue;
Debug( LDAP_DEBUG_TRACE, "cloak_search_cb: cloak %s\n",
Debug( LDAP_DEBUG_TRACE, "cloak_search_response_cb: cloak %s\n",
a->a_desc->ad_cname.bv_val,
0, 0 );
@ -252,6 +251,16 @@ cloak_search_cb( Operation *op, SlapReply *rs )
return ( SLAP_CB_CONTINUE );
}
static int
cloak_search_cleanup_cb( Operation *op, SlapReply *rs )
{
if ( rs->sr_type == REP_RESULT || rs->sr_err != LDAP_SUCCESS ) {
slap_freeself_cb( op, rs );
}
return SLAP_CB_CONTINUE;
}
static int
cloak_search( Operation *op, SlapReply *rs )
{
@ -265,8 +274,8 @@ cloak_search( Operation *op, SlapReply *rs )
return SLAP_CB_CONTINUE;
sc = op->o_tmpcalloc( 1, sizeof( *sc ), op->o_tmpmemctx );
sc->sc_response = cloak_search_cb;
sc->sc_cleanup = slap_freeself_cb;
sc->sc_response = cloak_search_response_cb;
sc->sc_cleanup = cloak_search_cleanup_cb;
sc->sc_next = op->o_callback;
sc->sc_private = ci;
op->o_callback = sc;
@ -288,6 +297,25 @@ static ConfigTable cloakcfg[] = {
{ NULL, NULL, 0, 0, 0, ARG_IGNORED }
};
static int
cloak_db_destroy(
BackendDB *be,
ConfigReply *cr )
{
slap_overinst *on = (slap_overinst *)be->bd_info;
cloak_info_t *ci = (cloak_info_t *)on->on_bi.bi_private;
for ( ; ci; ) {
cloak_info_t *tmp = ci;
ci = ci->ci_next;
SLAP_FREE( tmp );
}
on->on_bi.bi_private = NULL;
return 0;
}
static ConfigOCs cloakocs[] = {
{ "( OLcfgCtOc:4.1 "
"NAME 'olcCloakConfig' "
@ -305,6 +333,7 @@ int
cloak_initialize( void ) {
int rc;
cloak_ovl.on_bi.bi_type = "cloak";
cloak_ovl.on_bi.bi_db_destroy = cloak_db_destroy;
cloak_ovl.on_bi.bi_op_search = cloak_search;
cloak_ovl.on_bi.bi_cf_ocs = cloakocs;