X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-bdb%2Fattr.c;h=15a28a91ba2bf6b9363365a168195811061c4a00;hb=0af1940f3fb59fe57b2281ef253fe1341c505c2c;hp=a98dbb7558f28d1e62478450762f0f78fc691a5f;hpb=f5b9ff7940245da236a391019394598198074780;p=openldap diff --git a/servers/slapd/back-bdb/attr.c b/servers/slapd/back-bdb/attr.c index a98dbb7558..15a28a91ba 100644 --- a/servers/slapd/back-bdb/attr.c +++ b/servers/slapd/back-bdb/attr.c @@ -94,7 +94,7 @@ bdb_attr_index_config( int argc, char **argv ) { - int rc; + int rc = 0; int i; slap_mask_t mask; char **attrs; @@ -116,7 +116,8 @@ bdb_attr_index_config( fprintf( stderr, "%s: line %d: " "no indexes specified: %s\n", fname, lineno, argv[1] ); - return LDAP_PARAM_ERROR; + rc = LDAP_PARAM_ERROR; + goto done; } } @@ -134,7 +135,8 @@ bdb_attr_index_config( fprintf( stderr, "%s: line %d: " "index type \"%s\" undefined\n", fname, lineno, indexes[i] ); - return LDAP_PARAM_ERROR; + rc = LDAP_PARAM_ERROR; + goto done; } mask |= index; @@ -145,7 +147,8 @@ bdb_attr_index_config( fprintf( stderr, "%s: line %d: " "no indexes selected\n", fname, lineno ); - return LDAP_PARAM_ERROR; + rc = LDAP_PARAM_ERROR; + goto done; } for ( i = 0; attrs[i] != NULL; i++ ) { @@ -169,7 +172,7 @@ bdb_attr_index_config( fprintf( stderr, "%s: line %d: " "index component reference\"%s\" undefined\n", fname, lineno, attrs[i] ); - return rc; + goto done; } cr->cr_indexmask = mask; /* @@ -179,11 +182,6 @@ bdb_attr_index_config( } else { cr = NULL; } -#endif - a = (AttrInfo *) ch_malloc( sizeof(AttrInfo) ); - -#ifdef LDAP_COMP_MATCH - a->ai_cr = NULL; #endif ad = NULL; rc = slap_str2ad( attrs[i], &ad, &text ); @@ -192,14 +190,15 @@ bdb_attr_index_config( fprintf( stderr, "%s: line %d: " "index attribute \"%s\" undefined\n", fname, lineno, attrs[i] ); - return rc; + goto done; } if( slap_ad_is_binary( ad ) ) { fprintf( stderr, "%s: line %d: " "index of attribute \"%s\" disallowed\n", fname, lineno, attrs[i] ); - return LDAP_UNWILLING_TO_PERFORM; + rc = LDAP_UNWILLING_TO_PERFORM; + goto done; } if( IS_SLAP_INDEX( mask, SLAP_INDEX_APPROX ) && !( @@ -210,7 +209,8 @@ bdb_attr_index_config( fprintf( stderr, "%s: line %d: " "approx index of attribute \"%s\" disallowed\n", fname, lineno, attrs[i] ); - return LDAP_INAPPROPRIATE_MATCHING; + rc = LDAP_INAPPROPRIATE_MATCHING; + goto done; } if( IS_SLAP_INDEX( mask, SLAP_INDEX_EQUALITY ) && !( @@ -221,7 +221,8 @@ bdb_attr_index_config( fprintf( stderr, "%s: line %d: " "equality index of attribute \"%s\" disallowed\n", fname, lineno, attrs[i] ); - return LDAP_INAPPROPRIATE_MATCHING; + rc = LDAP_INAPPROPRIATE_MATCHING; + goto done; } if( IS_SLAP_INDEX( mask, SLAP_INDEX_SUBSTR ) && !( @@ -232,12 +233,18 @@ bdb_attr_index_config( fprintf( stderr, "%s: line %d: " "substr index of attribute \"%s\" disallowed\n", fname, lineno, attrs[i] ); - return LDAP_INAPPROPRIATE_MATCHING; + rc = LDAP_INAPPROPRIATE_MATCHING; + goto done; } Debug( LDAP_DEBUG_CONFIG, "index %s 0x%04lx\n", ad->ad_cname.bv_val, mask, 0 ); + a = (AttrInfo *) ch_malloc( sizeof(AttrInfo) ); + +#ifdef LDAP_COMP_MATCH + a->ai_cr = NULL; +#endif a->ai_desc = ad; if ( bdb->bi_flags & BDB_IS_OPEN ) { @@ -260,14 +267,16 @@ bdb_attr_index_config( rc = insert_component_reference( cr, &a_cr->ai_cr ); if ( rc != LDAP_SUCCESS) { fprintf( stderr, " error during inserting component reference in %s ", attrs[i]); - return LDAP_PARAM_ERROR; + rc = LDAP_PARAM_ERROR; + goto done; } continue; } else { rc = insert_component_reference( cr, &a->ai_cr ); if ( rc != LDAP_SUCCESS) { fprintf( stderr, " error during inserting component reference in %s ", attrs[i]); - return LDAP_PARAM_ERROR; + rc = LDAP_PARAM_ERROR; + goto done; } } } @@ -289,14 +298,16 @@ bdb_attr_index_config( "%s: line %d: duplicate index definition for attr \"%s\".\n", fname, lineno, attrs[i] ); - return LDAP_PARAM_ERROR; + rc = LDAP_PARAM_ERROR; + goto done; } } +done: ldap_charray_free( attrs ); if ( indexes != NULL ) ldap_charray_free( indexes ); - return LDAP_SUCCESS; + return rc; } static int