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;
/* 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;
}