]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-sql/search.c
re-fix previus commit the other way 'round (rids are < 1000)
[openldap] / servers / slapd / back-sql / search.c
index c1ea9952f50bf8243805aebeda74817a9570ffc2..b9d9365034b735526651ffff4ebd15cb70c633e1 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2006 The OpenLDAP Foundation.
+ * Copyright 1999-2007 The OpenLDAP Foundation.
  * Portions Copyright 1999 Dmitry Kovalev.
  * Portions Copyright 2002 Pierangelo Masarati.
  * Portions Copyright 2004 Mark Adamson.
@@ -314,9 +314,7 @@ backsql_init_search(
                                }
 
                        } else {
-                               rs->sr_ref = referral_rewrite( default_referral,
-                                               NULL, &op->o_req_dn, scope );
-                               rc = rs->sr_err = LDAP_REFERRAL;
+                               rs->sr_err = rc;
                        }
                }
        }
@@ -654,9 +652,35 @@ backsql_process_filter( backsql_srch_info *bsi, Filter *f )
 
        Debug( LDAP_DEBUG_TRACE, "==>backsql_process_filter()\n", 0, 0, 0 );
        if ( f->f_choice == SLAPD_FILTER_COMPUTED ) {
+               struct berval   flt;
+               char            *msg = NULL;
+
+               switch ( f->f_result ) {
+               case LDAP_COMPARE_TRUE:
+                       BER_BVSTR( &flt, "10=10" );
+                       msg = "TRUE";
+                       break;
+
+               case LDAP_COMPARE_FALSE:
+                       BER_BVSTR( &flt, "11=0" );
+                       msg = "FALSE";
+                       break;
+
+               case SLAPD_COMPARE_UNDEFINED:
+                       BER_BVSTR( &flt, "12=0" );
+                       msg = "UNDEFINED";
+                       break;
+
+               default:
+                       rc = -1;
+                       goto done;
+               }
+
                Debug( LDAP_DEBUG_TRACE, "backsql_process_filter(): "
-                       "invalid filter\n", 0, 0, 0 );
-               rc = -1;
+                       "filter computed (%s)\n", msg, 0, 0 );
+               backsql_strfcat_x( &bsi->bsi_flt_where,
+                               bsi->bsi_op->o_tmpmemctx, "b", &flt );
+               rc = 1;
                goto done;
        }
 
@@ -2374,20 +2398,23 @@ send_results:;
        if ( op->o_sync ) {
                Operation       op2 = *op;
                SlapReply       rs2 = { 0 };
-               Entry           e = { 0 };
+               Entry           *e = entry_alloc();
                slap_callback   cb = { 0 };
 
                op2.o_tag = LDAP_REQ_ADD;
                op2.o_bd = select_backend( &op->o_bd->be_nsuffix[0], 0, 0 );
-               op2.ora_e = &e;
+               op2.ora_e = e;
                op2.o_callback = &cb;
 
-               e.e_name = op->o_bd->be_suffix[0];
-               e.e_nname = op->o_bd->be_nsuffix[0];
+               ber_dupbv( &e->e_name, op->o_bd->be_suffix );
+               ber_dupbv( &e->e_nname, op->o_bd->be_nsuffix );
 
                cb.sc_response = slap_null_cb;
 
                op2.o_bd->be_add( &op2, &rs2 );
+
+               if ( op2.ora_e == e )
+                       entry_free( e );
        }
 #endif /* BACKSQL_SYNCPROV */
 
@@ -2445,7 +2472,7 @@ backsql_entry_get(
                BER_BVZERO( &anlist[ 1 ].an_name );
        }
 
-       bsi.bsi_e = ch_malloc( sizeof( Entry ) );
+       bsi.bsi_e = entry_alloc();
        rc = backsql_init_search( &bsi,
                        ndn,
                        LDAP_SCOPE_BASE,