]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/compare.c
Add comments
[openldap] / servers / slapd / compare.c
index 1823ec18bab3fb4affa914ebf042928da5ceed90..6c24393c00217d9100e7e5054a74207cd0913f13 100644 (file)
@@ -36,7 +36,6 @@ do_compare(
 )
 {
        Entry *entry = NULL;
-       Attribute       *a = NULL;
        char    *dn = NULL, *ndn=NULL;
        struct berval desc;
        struct berval value;
@@ -135,13 +134,13 @@ do_compare(
        rc = slap_bv2ad( &desc, &ava.aa_desc, &text );
        if( rc != LDAP_SUCCESS ) {
                send_ldap_result( conn, op, rc, NULL, text, NULL, NULL );
-               return rc;
+               goto cleanup;
        }
 
        rc = value_normalize( ava.aa_desc, SLAP_MR_EQUALITY, &value, &nvalue, &text );
        if( rc != LDAP_SUCCESS ) {
                send_ldap_result( conn, op, rc, NULL, text, NULL, NULL );
-               return rc;
+               goto cleanup;
        }
 
        ava.aa_value = nvalue;
@@ -224,8 +223,13 @@ do_compare(
         * if we don't hold it.
         */
        if ( (be = select_backend( ndn, manageDSAit )) == NULL ) {
+               struct berval **ref = referral_rewrite( default_referral,
+                       NULL, dn, LDAP_SCOPE_DEFAULT );
+
                send_ldap_result( conn, op, rc = LDAP_REFERRAL,
-                       NULL, NULL, default_referral, NULL );
+                       NULL, NULL, ref ? ref : default_referral, NULL );
+
+               ber_bvecfree( ref );
                rc = 0;
                goto cleanup;
        }
@@ -298,10 +302,7 @@ static int compare_entry(
        {
                rc = LDAP_COMPARE_FALSE;
 
-               if ( value_find_ex( ava->aa_desc,
-                       SLAP_MR_VALUE_IS_IN_MR_SYNTAX,
-                       a->a_vals, ava->aa_value ) == 0 )
-               {
+               if ( value_find( ava->aa_desc, a->a_vals, ava->aa_value ) == 0 ) {
                        rc = LDAP_COMPARE_TRUE;
                        break;
                }