/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2005 The OpenLDAP Foundation.
+ * Copyright 1998-2006 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
cir->cir_name.bv_len = strlen( scr->scr_oid );
cir->cir_cr = scr;
- assert( cir->cir_name.bv_val );
- assert( cir->cir_cr );
+ assert( cir->cir_name.bv_val != NULL );
+ assert( cir->cir_cr != NULL );
if ( avl_insert( &cr_index, (caddr_t) cir,
cr_index_cmp, avl_dup_error ) )
cir->cir_name.bv_len = strlen( *names );
cir->cir_cr = scr;
- assert( cir->cir_name.bv_val );
- assert( cir->cir_cr );
+ assert( cir->cir_name.bv_val != NULL );
+ assert( cir->cir_cr != NULL );
if ( avl_insert( &cr_index, (caddr_t) cir,
cr_index_cmp, avl_dup_error ) )
scr->scr_sclass = oc_find(cr->cr_oid);
if ( !scr->scr_sclass ) {
*err = cr->cr_oid;
- return SLAP_SCHERR_CLASS_NOT_FOUND;
+ code = SLAP_SCHERR_CLASS_NOT_FOUND;
+ goto fail;
}
/* check object class usage */
if( scr->scr_sclass->soc_kind != LDAP_SCHEMA_STRUCTURAL )
{
*err = cr->cr_oid;
- return SLAP_SCHERR_CR_BAD_STRUCT;
+ code = SLAP_SCHERR_CR_BAD_STRUCT;
+ goto fail;
}
if( scr->scr_sclass->soc_flags & SLAP_OC_OPERATIONAL ) op++;
code = cr_add_auxiliaries( scr, &op, err );
- if ( code != 0 ) return code;
+ if ( code != 0 ) goto fail;
code = cr_create_required( scr, &op, err );
- if ( code != 0 ) return code;
+ if ( code != 0 ) goto fail;
code = cr_create_allowed( scr, &op, err );
- if ( code != 0 ) return code;
+ if ( code != 0 ) goto fail;
code = cr_create_precluded( scr, &op, err );
- if ( code != 0 ) return code;
+ if ( code != 0 ) goto fail;
if( user && op ) {
- return SLAP_SCHERR_CR_BAD_AUX;
+ code = SLAP_SCHERR_CR_BAD_AUX;
+ goto fail;
}
code = cr_insert(scr,err);
if ( code == 0 && rscr )
*rscr = scr;
return code;
+fail:
+ ch_free( scr );
+ return code;
}
void
ContentRule *cr;
int i, num;
struct berval bv, *bva = NULL, idx;
- char ibuf[32], *ptr;
+ char ibuf[32];
if ( !start )
start = LDAP_STAILQ_FIRST( &cr_list );