struct berval vtmp;
int freeval = 0;
- ldap_back_map( &dc->rwmap->rwm_at, &ad->ad_cname, mapped_attr, remap );
+ ldap_back_map( &dc->target->mt_rwmap.rwm_at, &ad->ad_cname, mapped_attr, remap );
if ( BER_BVISNULL( mapped_attr ) || BER_BVISEMPTY( mapped_attr ) ) {
/*
* FIXME: are we sure we need to search oc_map if at_map fails?
*/
- ldap_back_map( &dc->rwmap->rwm_oc, &ad->ad_cname, mapped_attr, remap );
+ ldap_back_map( &dc->target->mt_rwmap.rwm_oc, &ad->ad_cname, mapped_attr, remap );
if ( BER_BVISNULL( mapped_attr ) || BER_BVISEMPTY( mapped_attr ) ) {
*mapped_attr = ad->ad_cname;
}
}
} else if ( ad == slap_schema.si_ad_objectClass || ad == slap_schema.si_ad_structuralObjectClass ) {
- ldap_back_map( &dc->rwmap->rwm_oc, value, &vtmp, remap );
+ ldap_back_map( &dc->target->mt_rwmap.rwm_oc, value, &vtmp, remap );
if ( BER_BVISNULL( &vtmp ) || BER_BVISEMPTY( &vtmp ) ) {
vtmp = *value;
}
ber_len_t len;
if ( f == NULL ) {
- ber_str2bv( "No filter!", sizeof("No filter!")-1, 1, fstr );
+ ber_str2bv( "No filter!", STRLENOF( "No filter!" ), 1, fstr );
return -1;
}
break;
- case LDAP_FILTER_EXT: {
+ case LDAP_FILTER_EXT:
if ( f->f_mr_desc ) {
if ( map_attr_value( dc, f->f_mr_desc, &atmp,
&f->f_mr_value, &vtmp, remap ) )
!BER_BVISEMPTY( &f->f_mr_rule_text ) ? f->f_mr_rule_text.bv_val : "",
vtmp.bv_val );
ber_memfree( vtmp.bv_val );
- } break;
+ break;
+
+ case SLAPD_FILTER_COMPUTED: {
+ struct berval bv;
- case SLAPD_FILTER_COMPUTED:
switch ( f->f_result ) {
case LDAP_COMPARE_FALSE:
- ber_str2bv( "(?=false)", STRLENOF( "(?=false)" ), 1, fstr );
+ if ( dc->target->mt_flags & LDAP_BACK_F_SUPPORT_T_F ) {
+ BER_BVSTR( &bv, "(|)" );
+ break;
+ }
+ /* fallthru */
+
+ /* FIXME: treat UNDEFINED as FALSE */
+ case SLAPD_COMPARE_UNDEFINED:
+ /* better than nothing... */
+ BER_BVSTR( &bv, "(!(objectClass=*))" );
break;
+
case LDAP_COMPARE_TRUE:
- ber_str2bv( "(?=true)", STRLENOF( "(?=true)" ), 1, fstr );
- break;
- case SLAPD_COMPARE_UNDEFINED:
- ber_str2bv( "(?=undefined)", STRLENOF( "(?=undefined)" ), 1, fstr );
+ if ( dc->target->mt_flags & LDAP_BACK_F_SUPPORT_T_F ) {
+ BER_BVSTR( &bv, "(&)" );
+ break;
+ }
+
+ /* better than nothing... */
+ BER_BVSTR( &bv, "(objectClass=*)" );
break;
+
default:
- ber_str2bv( "(?=error)", STRLENOF( "(?=error)" ), 1, fstr );
+ BER_BVSTR( &bv, "(?=error)" );
break;
}
- break;
+
+ ber_dupbv( fstr, &bv );
+ } break;
default:
ber_str2bv( "(?=unknown)", STRLENOF( "(?=unknown)" ), 1, fstr );
int rc;
dncookie fdc;
struct berval ftmp;
+ static char *dmy = "";
rc = ldap_back_int_filter_map_rewrite( dc, f, fstr, remap );
fdc.ctx = "searchFilter";
- switch ( rewrite_session( fdc.rwmap->rwm_rw, fdc.ctx,
- ( !BER_BVISEMPTY( &ftmp ) ? ftmp.bv_val : "" ),
+ switch ( rewrite_session( fdc.target->mt_rwmap.rwm_rw, fdc.ctx,
+ ( !BER_BVISEMPTY( &ftmp ) ? ftmp.bv_val : dmy ),
fdc.conn, &fstr->bv_val ) )
{
case REWRITE_REGEXEC_OK:
rc = LDAP_OTHER;
break;
}
+
+ if ( fstr->bv_val == dmy ) {
+ BER_BVZERO( fstr );
+ }
#endif /* ENABLE_REWRITE */
return rc;