]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-sql/search.c
fix access checking; fix operational attrs addition
[openldap] / servers / slapd / back-sql / search.c
index 4c7326a8a000cecf01fdcf954be30513d7b8247f..44b061777238892f449427af4bef90033241171c 100644 (file)
@@ -109,8 +109,6 @@ backsql_init_search(
        backsql_srch_info       *bsi, 
        struct berval           *nbase, 
        int                     scope, 
-       int                     slimit,
-       int                     tlimit,
        time_t                  stoptime, 
        Filter                  *filter, 
        SQLHDBC                 dbh,
@@ -127,8 +125,6 @@ backsql_init_search(
        BER_BVZERO( &bsi->bsi_base_id.eid_dn );
        BER_BVZERO( &bsi->bsi_base_id.eid_ndn );
        bsi->bsi_scope = scope;
-       bsi->bsi_slimit = slimit;
-       bsi->bsi_tlimit = tlimit;
        bsi->bsi_filter = filter;
        bsi->bsi_dbh = dbh;
        bsi->bsi_op = op;
@@ -1827,7 +1823,6 @@ backsql_search( Operation *op, SlapReply *rs )
        bsi.bsi_e = &base_entry;
        rs->sr_err = backsql_init_search( &bsi, &op->o_req_ndn,
                        op->ors_scope,
-                       op->ors_slimit, op->ors_tlimit,
                        stoptime, op->ors_filter,
                        dbh, op, rs, op->ors_attrs,
                        ( BACKSQL_ISF_MATCHED | BACKSQL_ISF_GET_ENTRY ) );
@@ -1848,6 +1843,10 @@ backsql_search( Operation *op, SlapReply *rs )
                        }
                        break;
                }
+
+               /* an entry was created; free it */
+               entry_clean( bsi.bsi_e );
+
                /* fall thru */
 
        default:
@@ -1868,8 +1867,13 @@ backsql_search( Operation *op, SlapReply *rs )
 #endif /* SLAP_ACL_HONOR_DISCLOSE */
 
                send_ldap_result( op, rs );
-               goto done;
 
+               if ( rs->sr_ref ) {
+                       ber_bvarray_free( rs->sr_ref );
+                       rs->sr_ref = NULL;
+               }
+
+               goto done;
        }
 #ifdef SLAP_ACL_HONOR_DISCLOSE
        /* NOTE: __NEW__ "search" access is required
@@ -1945,6 +1949,7 @@ backsql_search( Operation *op, SlapReply *rs )
 
                /* check for abandon */
                if ( op->o_abandon ) {
+                       eid = bsi.bsi_id_list;
                        rs->sr_err = SLAPD_ABANDON;
                        goto send_results;
                }
@@ -2078,7 +2083,6 @@ backsql_search( Operation *op, SlapReply *rs )
                                rc = backsql_init_search( &bsi2,
                                                &e->e_nname,
                                                LDAP_SCOPE_BASE, 
-                                               SLAP_NO_LIMIT, SLAP_NO_LIMIT,
                                                (time_t)(-1), NULL,
                                                dbh, op, rs, NULL,
                                                BACKSQL_ISF_GET_ENTRY );
@@ -2216,9 +2220,7 @@ next_entry:;
                }
 
 next_entry2:;
-               if ( op->ors_slimit != SLAP_NO_LIMIT
-                               && rs->sr_nentries >= op->ors_slimit )
-               {
+               if ( --op->ors_slimit == -1 ) {
                        rs->sr_err = LDAP_SIZELIMIT_EXCEEDED;
                        goto send_results;
                }
@@ -2334,7 +2336,6 @@ backsql_entry_get(
        rc = backsql_init_search( &bsi,
                        ndn,
                        LDAP_SCOPE_BASE, 
-                       SLAP_NO_LIMIT, SLAP_NO_LIMIT,
                        (time_t)(-1), NULL,
                        dbh, op, &rs, at ? anlist : NULL,
                        BACKSQL_ISF_GET_ENTRY );