}
/* FIXME: I don't think this is needed any more... */
- rc = slap_str2ad( "objectClass", &mapping->m_src_ad, &text );
+ rc = slap_str2ad( "objectClass", &mapping[0].m_src_ad, &text );
if ( rc != LDAP_SUCCESS ) {
return rc;
}
- mapping->m_dst_ad = mapping->m_src_ad;
- ber_dupbv( &mapping->m_dst, &mapping->m_src_ad->ad_cname );
- ber_dupbv( &mapping->m_dst, &mapping->m_src );
+ mapping[0].m_dst_ad = mapping[0].m_src_ad;
+ ber_dupbv( &mapping[0].m_src, &mapping[0].m_src_ad->ad_cname );
+ ber_dupbv( &mapping[0].m_dst, &mapping[0].m_src );
- mapping[1].m_src = mapping->m_src;
- mapping[1].m_dst = mapping->m_dst;
+ mapping[1].m_src = mapping[0].m_src;
+ mapping[1].m_dst = mapping[0].m_dst;
+ mapping[1].m_src_ad = mapping[0].m_src_ad;
+ mapping[1].m_dst_ad = mapping[1].m_src_ad;
- avl_insert( &lm->map, (caddr_t)mapping,
+ avl_insert( &lm->map, (caddr_t)&mapping[0],
rwm_mapping_cmp, rwm_mapping_dup );
avl_insert( &lm->remap, (caddr_t)&mapping[1],
rwm_mapping_cmp, rwm_mapping_dup );
static int
rwm_int_filter_map_rewrite(
+ Operation *op,
dncookie *dc,
Filter *f,
struct berval *fstr )
Filter *p;
struct berval atmp,
vtmp,
- tmp;
+ *tmp;
static struct berval
/* better than nothing... */
ber_bvfalse = BER_BVC( "(!(objectClass=*))" ),
if ( f == NULL ) {
ber_dupbv( fstr, &ber_bvnone );
- return -1;
+ return LDAP_OTHER;
}
switch ( f->f_choice ) {
if ( map_attr_value( dc, &f->f_av_desc, &atmp,
&f->f_av_value, &vtmp, RWM_MAP ) )
{
- return -1;
+ goto computed;
}
fstr->bv_len = atmp.bv_len + vtmp.bv_len + STRLENOF( "(=)" );
if ( map_attr_value( dc, &f->f_av_desc, &atmp,
&f->f_av_value, &vtmp, RWM_MAP ) )
{
- return -1;
+ goto computed;
}
fstr->bv_len = atmp.bv_len + vtmp.bv_len + STRLENOF( "(>=)" );
if ( map_attr_value( dc, &f->f_av_desc, &atmp,
&f->f_av_value, &vtmp, RWM_MAP ) )
{
- return -1;
+ goto computed;
}
fstr->bv_len = atmp.bv_len + vtmp.bv_len + STRLENOF( "(<=)" );
if ( map_attr_value( dc, &f->f_av_desc, &atmp,
&f->f_av_value, &vtmp, RWM_MAP ) )
{
- return -1;
+ goto computed;
}
fstr->bv_len = atmp.bv_len + vtmp.bv_len + STRLENOF( "(~=)" );
if ( map_attr_value( dc, &f->f_sub_desc, &atmp,
NULL, NULL, RWM_MAP ) )
{
- return -1;
+ goto computed;
}
/* cannot be a DN ... */
if ( map_attr_value( dc, &f->f_desc, &atmp,
NULL, NULL, RWM_MAP ) )
{
- return -1;
+ goto computed;
}
fstr->bv_len = atmp.bv_len + STRLENOF( "(=*)" );
f->f_choice == LDAP_FILTER_OR ? '|' : '!' );
for ( p = f->f_list; p != NULL; p = p->f_next ) {
+ int rc;
+
len = fstr->bv_len;
- if ( rwm_int_filter_map_rewrite( dc, p, &vtmp ) )
- {
- return -1;
+ rc = rwm_int_filter_map_rewrite( op, dc, p, &vtmp );
+ if ( rc != LDAP_SUCCESS ) {
+ return rc;
}
fstr->bv_len += vtmp.bv_len;
if ( map_attr_value( dc, &f->f_mr_desc, &atmp,
&f->f_mr_value, &vtmp, RWM_MAP ) )
{
- return -1;
+ goto computed;
}
} else {
break;
}
+ case 0:
+computed:;
+ filter_free_x( op, f );
+ f->f_choice = SLAPD_FILTER_COMPUTED;
+ f->f_result = SLAPD_COMPARE_UNDEFINED;
+ /* fallthru */
+
case SLAPD_FILTER_COMPUTED:
switch ( f->f_result ) {
case LDAP_COMPARE_FALSE:
+ /* FIXME: treat UNDEFINED as FALSE */
+ case SLAPD_COMPARE_UNDEFINED:
if ( dc->rwmap->rwm_flags & RWM_F_SUPPORT_T_F ) {
- tmp = ber_bvtf_false;
+ tmp = &ber_bvtf_false;
break;
}
- /* fallthru */
-
- case SLAPD_COMPARE_UNDEFINED:
- tmp = ber_bvfalse;
+ tmp = &ber_bvfalse;
break;
case LDAP_COMPARE_TRUE:
if ( dc->rwmap->rwm_flags & RWM_F_SUPPORT_T_F ) {
- tmp = ber_bvtf_true;
- } else {
- tmp = ber_bvtrue;
+ tmp = &ber_bvtf_true;
+ break;
}
+ tmp = &ber_bvtrue;
break;
default:
- tmp = ber_bverror;
+ tmp = &ber_bverror;
break;
}
- ber_dupbv( fstr, &tmp );
+ ber_dupbv( fstr, tmp );
break;
default:
break;
}
- return 0;
+ return LDAP_SUCCESS;
}
int
rwm_filter_map_rewrite(
+ Operation *op,
dncookie *dc,
Filter *f,
struct berval *fstr )
dncookie fdc;
struct berval ftmp;
- rc = rwm_int_filter_map_rewrite( dc, f, fstr );
+ rc = rwm_int_filter_map_rewrite( op, dc, f, fstr );
#ifdef ENABLE_REWRITE
- if ( rc != LDAP_SUCCESS ) {
+ if ( rc != 0 ) {
return rc;
}
rc = LDAP_OTHER;
break;
}
-
#endif /* ENABLE_REWRITE */
+
return rc;
}