]> git.sur5r.net Git - openldap/commitdiff
plug leaks
authorHoward Chu <hyc@openldap.org>
Wed, 10 May 2006 13:03:42 +0000 (13:03 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 10 May 2006 13:03:42 +0000 (13:03 +0000)
servers/slapd/controls.c
servers/slapd/root_dse.c

index 26e2461515939dc580e2309ae1f4929c81475776..6c610008843c31b338fc641248afa79b879c20a7 100644 (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 "
index 356cbc78a68182b7c59ac41ae7c6bc2bcf4ca2fd..9be7f5399b90334ee92b748060d27f65ecbd1110 100644 (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;
                        }
                }
        }