int
bdb_compare(
- BackendDB *be,
- Connection *conn,
- Operation *op,
- const char *dn,
- const char *ndn,
+ BackendDB *be,
+ Connection *conn,
+ Operation *op,
+ const char *dn,
+ const char *ndn,
AttributeAssertion *ava
)
{
int manageDSAit = get_manageDSAit( op );
/* get entry */
- rc = dn2entry_r( be, NULL, ndn, &e, &matched );
+ rc = bdb_dn2entry( be, NULL, ndn, &e, &matched, 0 );
switch( rc ) {
case DB_NOTFOUND:
+ case 0:
break;
default:
rc = LDAP_OTHER;
if ( e == NULL ) {
char *matched_dn = NULL;
- struct berval **refs = NULL;
+ struct berval **refs;
if ( matched != NULL ) {
matched_dn = ch_strdup( matched->e_dn );
refs = is_entry_referral( matched )
- ? get_entry_referrals( be, conn, op, matched )
+ ? get_entry_referrals( be, conn, op, matched,
+ dn, LDAP_SCOPE_DEFAULT )
: NULL;
bdb_entry_return( be, matched );
+ matched = NULL;
+
} else {
- refs = default_referral;
+ refs = referral_rewrite( default_referral,
+ NULL, dn, LDAP_SCOPE_DEFAULT );
}
send_ldap_result( conn, op, rc = LDAP_REFERRAL,
matched_dn, NULL, refs, NULL );
- if( matched != NULL ) {
- ber_bvecfree( refs );
- free( matched_dn );
- }
+ ber_bvecfree( refs );
+ free( matched_dn );
goto done;
}
if (!manageDSAit && is_entry_referral( e ) ) {
/* entry is a referral, don't allow add */
struct berval **refs = get_entry_referrals( be,
- conn, op, e );
+ conn, op, e, dn, LDAP_SCOPE_DEFAULT );
Debug( LDAP_DEBUG_TRACE, "entry is referral\n", 0,
- 0, 0 );
+ 0, 0 );
send_ldap_result( conn, op, rc = LDAP_REFERRAL,
- e->e_dn, NULL, refs, NULL );
+ e->e_dn, NULL, refs, NULL );
ber_bvecfree( refs );
goto done;
{
rc = LDAP_COMPARE_FALSE;
- if ( value_find( ava->aa_desc, a->a_vals, ava->aa_value ) == 0 )
+ if ( value_find_ex( ava->aa_desc,
+ SLAP_MR_VALUE_IS_IN_MR_SYNTAX,
+ a->a_vals, ava->aa_value ) == 0 )
{
rc = LDAP_COMPARE_TRUE;
break;
done:
/* free entry */
- if( e != NULL ) bdb_entry_return( be, e );
+ if( e != NULL ) {
+ bdb_entry_return( be, e );
+ }
return rc;
-}
\ No newline at end of file
+}