]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-sql/delete.c
re-fix previus commit the other way 'round (rids are < 1000)
[openldap] / servers / slapd / back-sql / delete.c
index 2d920a4656d7aaf4dbaaba7caa2cf8bfaa5eb38a..2bfddfda6cefb22a0ebafe900391aa60c402ae71 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2005 The OpenLDAP Foundation.
+ * Copyright 1999-2007 The OpenLDAP Foundation.
  * Portions Copyright 1999 Dmitry Kovalev.
  * Portions Copyright 2002 Pierangelo Masarati.
  * All rights reserved.
@@ -217,10 +217,10 @@ backsql_delete( Operation *op, SlapReply *rs )
        /*
         * Get the parent
         */
+       e_id = bsi.bsi_base_id;
        if ( !be_issuffix( op->o_bd, &op->o_req_ndn ) ) {
                dnParent( &op->o_req_ndn, &pdn );
                bsi.bsi_e = &p;
-               e_id = bsi.bsi_base_id;
                rs->sr_err = backsql_init_search( &bsi, &pdn,
                                LDAP_SCOPE_BASE, 
                                (time_t)(-1), NULL, dbh, op, rs,
@@ -441,6 +441,7 @@ backsql_delete( Operation *op, SlapReply *rs )
                SQLUSMALLINT    CompletionType = SQL_ROLLBACK;
        
                if ( rs->sr_err == LDAP_SUCCESS && !op->o_noop ) {
+                       assert( e == NULL );
                        CompletionType = SQL_COMMIT;
                }
 
@@ -448,7 +449,6 @@ backsql_delete( Operation *op, SlapReply *rs )
        }
 
 done:;
-#ifdef SLAP_ACL_HONOR_DISCLOSE
        if ( e != NULL ) {
                if ( !access_allowed( op, e, slap_schema.si_ad_entry, NULL,
                                        ACL_DISCLOSE, NULL ) )
@@ -462,7 +462,10 @@ done:;
                        }
                }
        }
-#endif /* SLAP_ACL_HONOR_DISCLOSE */
+
+       if ( op->o_noop && rs->sr_err == LDAP_SUCCESS ) {
+               rs->sr_err = LDAP_X_NO_OPERATION;
+       }
 
        send_ldap_result( op, rs );
 
@@ -480,6 +483,11 @@ done:;
                backsql_entry_clean( op, &p );
        }
 
+       if ( rs->sr_ref ) {
+               ber_bvarray_free( rs->sr_ref );
+               rs->sr_ref = NULL;
+       }
+
        return rs->sr_err;
 }