X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-meta%2Fmap.c;h=87ca4b903175cdae6c7750b8098848d40bea291b;hb=52165180f7713b5fdebef933a9dca8842daa2e2a;hp=29a1ade97f8a47e41cc0c2379ff9755622258ada;hpb=4d9750afb5eb7c76ec07e064174d53c9de303dd7;p=openldap diff --git a/servers/slapd/back-meta/map.c b/servers/slapd/back-meta/map.c index 29a1ade97f..87ca4b9031 100644 --- a/servers/slapd/back-meta/map.c +++ b/servers/slapd/back-meta/map.c @@ -483,43 +483,40 @@ ldap_back_int_filter_map_rewrite( ber_memfree( vtmp.bv_val ); break; - case SLAPD_FILTER_COMPUTED: + case SLAPD_FILTER_COMPUTED: { + struct berval bv; + switch ( f->f_result ) { case LDAP_COMPARE_FALSE: if ( dc->target->mt_flags & LDAP_BACK_F_SUPPORT_T_F ) { - ber_str2bv( "(|)", STRLENOF( "(|)" ), 1, fstr ); - - } else { -#if 0 - ber_str2bv( "(?=false)", STRLENOF( "(?=false)" ), 1, fstr ); -#endif - /* better than nothing... */ - ber_str2bv( "(!(objectClass=*))", STRLENOF( "(!(objectClass=*))" ), 1, fstr ); + 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: if ( dc->target->mt_flags & LDAP_BACK_F_SUPPORT_T_F ) { - ber_str2bv( "(&)", STRLENOF( "(&)" ), 1, fstr ); - - } else { -#if 0 - ber_str2bv( "(?=true)", STRLENOF( "(?=true)" ), 1, fstr ); -#endif - /* better than nothing... */ - ber_str2bv( "(objectClass=*)", STRLENOF( "(objectClass=*)" ), 1, fstr ); + BER_BVSTR( &bv, "(&)" ); + break; } - break; - case SLAPD_COMPARE_UNDEFINED: - ber_str2bv( "(?=undefined)", STRLENOF( "(?=undefined)" ), 1, fstr ); + /* 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 ); @@ -539,6 +536,7 @@ ldap_back_filter_map_rewrite( int rc; dncookie fdc; struct berval ftmp; + static char *dmy = ""; rc = ldap_back_int_filter_map_rewrite( dc, f, fstr, remap ); @@ -553,7 +551,7 @@ ldap_back_filter_map_rewrite( fdc.ctx = "searchFilter"; switch ( rewrite_session( fdc.target->mt_rwmap.rwm_rw, fdc.ctx, - ( !BER_BVISEMPTY( &ftmp ) ? ftmp.bv_val : "" ), + ( !BER_BVISEMPTY( &ftmp ) ? ftmp.bv_val : dmy ), fdc.conn, &fstr->bv_val ) ) { case REWRITE_REGEXEC_OK: @@ -586,6 +584,10 @@ ldap_back_filter_map_rewrite( rc = LDAP_OTHER; break; } + + if ( fstr->bv_val == dmy ) { + BER_BVZERO( fstr ); + } #endif /* ENABLE_REWRITE */ return rc;