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 ) )
ContentRule *scr;
int code;
int op = 0;
+ char *oidm = NULL;
if ( cr->cr_names != NULL ) {
int i;
return SLAP_SCHERR_OIDM;
}
if ( oid != cr->cr_oid ) {
- ldap_memfree( cr->cr_oid );
+ oidm = cr->cr_oid;
cr->cr_oid = oid;
}
}
scr = (ContentRule *) ch_calloc( 1, sizeof(ContentRule) );
AC_MEMCPY( &scr->scr_crule, cr, sizeof(LDAPContentRule) );
+ scr->scr_oidmacro = oidm;
scr->scr_sclass = oc_find(cr->cr_oid);
if ( !scr->scr_sclass ) {
*err = cr->cr_oid;
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 );
/* count the result size */
i = 0;
- for ( cr=start; cr && cr!=end; cr=LDAP_STAILQ_NEXT(cr, scr_next)) {
+ for ( cr=start; cr; cr=LDAP_STAILQ_NEXT(cr, scr_next)) {
if ( sys && !(cr->scr_flags & SLAP_CR_HARDCODE)) continue;
i++;
+ if ( cr == end ) break;
}
if (!i) return;
ibuf[0] = '\0';
}
i = 0;
- for ( cr=start; cr && cr!=end; cr=LDAP_STAILQ_NEXT(cr, scr_next)) {
+ for ( cr=start; cr; cr=LDAP_STAILQ_NEXT(cr, scr_next)) {
+ LDAPContentRule lcr, *lcrp;
if ( sys && !(cr->scr_flags & SLAP_CR_HARDCODE)) continue;
- if ( ldap_contentrule2bv( &cr->scr_crule, &bv ) == NULL ) {
+ if ( cr->scr_oidmacro ) {
+ lcr = cr->scr_crule;
+ lcr.cr_oid = cr->scr_oidmacro;
+ lcrp = &lcr;
+ } else {
+ lcrp = &cr->scr_crule;
+ }
+ if ( ldap_contentrule2bv( lcrp, &bv ) == NULL ) {
ber_bvarray_free( bva );
}
if ( !sys ) {
- idx.bv_len = sprintf(idx.bv_val, "{%02d}", i);
+ idx.bv_len = sprintf(idx.bv_val, "{%d}", i);
}
bva[i].bv_len = idx.bv_len + bv.bv_len;
bva[i].bv_val = ch_malloc( bva[i].bv_len + 1 );
i++;
bva[i].bv_val = NULL;
ldap_memfree( bv.bv_val );
+ if ( cr == end ) break;
}
*res = bva;
}