plug leaks

This commit is contained in:
Howard Chu 2006-05-10 13:03:42 +00:00
parent ed25c75d60
commit f38bf4b362
2 changed files with 42 additions and 30 deletions

View File

@ -1161,6 +1161,7 @@ static int parseAssert (
rs->sr_err = get_filter( op, ber, (Filter **)&(op->o_assertion),
&rs->sr_text);
(void) ber_free( ber, 1 );
if( rs->sr_err != LDAP_SUCCESS ) {
if( rs->sr_err == SLAPD_DISCONNECT ) {
rs->sr_err = LDAP_PROTOCOL_ERROR;
@ -1223,26 +1224,28 @@ static int parsePreRead (
return LDAP_OTHER;
}
rs->sr_err = LDAP_SUCCESS;
siz = sizeof( AttributeName );
off = offsetof( AttributeName, an_name );
if ( ber_scanf( ber, "{M}", &an, &siz, off ) == LBER_ERROR ) {
rs->sr_text = "preread control: decoding error";
return LDAP_PROTOCOL_ERROR;
rs->sr_err = LDAP_PROTOCOL_ERROR;
goto done;
}
for( i=0; i<siz; i++ ) {
int rc = LDAP_SUCCESS;
const char *dummy = NULL;
an[i].an_desc = NULL;
an[i].an_oc = NULL;
an[i].an_oc_exclude = 0;
rc = slap_bv2ad( &an[i].an_name, &an[i].an_desc, &dummy );
if ( rc != LDAP_SUCCESS && ctrl->ldctl_iscritical ) {
rs->sr_err = slap_bv2ad( &an[i].an_name, &an[i].an_desc, &dummy );
if ( rs->sr_err != LDAP_SUCCESS && ctrl->ldctl_iscritical ) {
rs->sr_text = dummy
? dummy
: "postread control: unknown attributeType";
return rc;
goto done;
}
}
@ -1252,8 +1255,9 @@ static int parsePreRead (
op->o_preread_attrs = an;
rs->sr_err = LDAP_SUCCESS;
return LDAP_SUCCESS;
done:
(void) ber_free( ber, 1 );
return rs->sr_err;
}
static int parsePostRead (
@ -1288,26 +1292,27 @@ static int parsePostRead (
return LDAP_OTHER;
}
rs->sr_err = LDAP_SUCCESS;
siz = sizeof( AttributeName );
off = offsetof( AttributeName, an_name );
if ( ber_scanf( ber, "{M}", &an, &siz, off ) == LBER_ERROR ) {
rs->sr_text = "postread control: decoding error";
return LDAP_PROTOCOL_ERROR;
rs->sr_err = LDAP_PROTOCOL_ERROR;
goto done;
}
for( i=0; i<siz; i++ ) {
int rc = LDAP_SUCCESS;
const char *dummy = NULL;
an[i].an_desc = NULL;
an[i].an_oc = NULL;
an[i].an_oc_exclude = 0;
rc = slap_bv2ad( &an[i].an_name, &an[i].an_desc, &dummy );
if ( rc != LDAP_SUCCESS && ctrl->ldctl_iscritical ) {
rs->sr_err = slap_bv2ad( &an[i].an_name, &an[i].an_desc, &dummy );
if ( rs->sr_err != LDAP_SUCCESS && ctrl->ldctl_iscritical ) {
rs->sr_text = dummy
? dummy
: "postread control: unknown attributeType";
return rc;
goto done;
}
}
@ -1317,8 +1322,9 @@ static int parsePostRead (
op->o_postread_attrs = an;
rs->sr_err = LDAP_SUCCESS;
return LDAP_SUCCESS;
done:
(void) ber_free( ber, 1 );
return rs->sr_err;
}
static int parseValuesReturnFilter (
@ -1348,6 +1354,8 @@ static int parseValuesReturnFilter (
rs->sr_err = get_vrFilter( op, ber,
(ValuesReturnFilter **)&(op->o_vrFilter), &rs->sr_text);
(void) ber_free( ber, 1 );
if( rs->sr_err != LDAP_SUCCESS ) {
if( rs->sr_err == SLAPD_DISCONNECT ) {
rs->sr_err = LDAP_PROTOCOL_ERROR;
@ -1494,13 +1502,14 @@ static int parseSearchOptions (
return LDAP_OTHER;
}
if ( (tag = ber_scanf( ber, "{i}", &search_flags )) == LBER_ERROR ) {
tag = ber_scanf( ber, "{i}", &search_flags );
(void) ber_free( ber, 1 );
if ( tag == LBER_ERROR ) {
rs->sr_text = "searchOptions control decoding error";
return LDAP_PROTOCOL_ERROR;
}
(void) ber_free( ber, 1 );
if ( search_flags & LDAP_SEARCH_FLAG_DOMAIN_SCOPE ) {
if ( op->o_domain_scope != SLAP_CONTROL_NONE ) {
rs->sr_text = "searchOptions control specified multiple times "

View File

@ -235,15 +235,17 @@ root_dse_info(
/* FIXME: is this really needed? */
BER_BVSTR( &val, "top" );
if( attr_merge_one( e, ad_objectClass, &val, NULL ) ) {
fail:
entry_free( e );
return LDAP_OTHER;
}
BER_BVSTR( &val, "OpenLDAProotDSE" );
if( attr_merge_one( e, ad_objectClass, &val, NULL ) ) {
return LDAP_OTHER;
goto fail;
}
if( attr_merge_one( e, ad_structuralObjectClass, &val, NULL ) ) {
return LDAP_OTHER;
goto fail;
}
LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) {
@ -257,7 +259,7 @@ root_dse_info(
&be->be_suffix[0],
&be->be_nsuffix[0] ) )
{
return LDAP_OTHER;
goto fail;
}
continue;
}
@ -266,7 +268,7 @@ root_dse_info(
&be->be_suffix[0],
& be->be_nsuffix[0] ) )
{
return LDAP_OTHER;
goto fail;
}
continue;
}
@ -278,7 +280,7 @@ root_dse_info(
&be->be_suffix[j],
&be->be_nsuffix[0] ) )
{
return LDAP_OTHER;
goto fail;
}
}
}
@ -287,19 +289,19 @@ root_dse_info(
/* supportedControl */
if ( controls_root_dse_info( e ) != 0 ) {
return LDAP_OTHER;
goto fail;
}
/* supportedExtension */
if ( exop_root_dse_info( e ) != 0 ) {
return LDAP_OTHER;
goto fail;
}
#ifdef LDAP_SLAPI
/* netscape supportedExtension */
for ( i = 0; (bv = slapi_int_get_supported_extop(i)) != NULL; i++ ) {
if( attr_merge_one( e, ad_supportedExtension, bv, NULL ) ) {
return LDAP_OTHER;
goto fail;
}
}
#endif /* LDAP_SLAPI */
@ -310,7 +312,7 @@ root_dse_info(
}
if( attr_merge( e, ad_supportedFeatures, supportedFeatures, NULL ) ) {
return LDAP_OTHER;
goto fail;
}
/* supportedLDAPVersion */
@ -325,7 +327,7 @@ root_dse_info(
val.bv_val = buf;
val.bv_len = strlen( val.bv_val );
if( attr_merge_one( e, ad_supportedLDAPVersion, &val, NULL ) ) {
return LDAP_OTHER;
goto fail;
}
}
@ -337,7 +339,8 @@ root_dse_info(
val.bv_val = supportedSASLMechanisms[i];
val.bv_len = strlen( val.bv_val );
if( attr_merge_one( e, ad_supportedSASLMechanisms, &val, NULL ) ) {
return LDAP_OTHER;
ldap_charray_free( supportedSASLMechanisms );
goto fail;
}
}
ldap_charray_free( supportedSASLMechanisms );
@ -345,7 +348,7 @@ root_dse_info(
if ( default_referral != NULL ) {
if( attr_merge( e, ad_ref, default_referral, NULL /* FIXME */ ) ) {
return LDAP_OTHER;
goto fail;
}
}
@ -355,7 +358,7 @@ root_dse_info(
if( attr_merge( e, a->a_desc, a->a_vals,
(a->a_nvals == a->a_vals) ? NULL : a->a_nvals ) )
{
return LDAP_OTHER;
goto fail;
}
}
}