X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-bdb%2Fdelete.c;h=4687765c59bd8fd13917468fb42530753e9f1905;hb=0006ec0a46790567d3d49fcafce5ffaae08cdbf4;hp=0c1f352e1d1ab495fad178a6e8c99c79435a7adc;hpb=563736859c4f971ecab694b2c3f8cf0d1cc0dd7c;p=openldap diff --git a/servers/slapd/back-bdb/delete.c b/servers/slapd/back-bdb/delete.c index 0c1f352e1d..4687765c59 100644 --- a/servers/slapd/back-bdb/delete.c +++ b/servers/slapd/back-bdb/delete.c @@ -47,7 +47,7 @@ retry: /* transaction retry */ } Debug( LDAP_DEBUG_TRACE, "==> bdb_delete: retrying...\n", 0, 0, 0 ); - rc = txn_abort( ltid ); + rc = TXN_ABORT( ltid ); ltid = NULL; op->o_private = NULL; if( rc != 0 ) { @@ -58,23 +58,21 @@ retry: /* transaction retry */ ldap_pvt_thread_yield(); } - if( bdb->bi_txn ) { - /* begin transaction */ - rc = txn_begin( bdb->bi_dbenv, NULL, <id, - bdb->bi_db_opflags ); - text = NULL; - if( rc != 0 ) { - Debug( LDAP_DEBUG_TRACE, - "bdb_delete: txn_begin failed: %s (%d)\n", - db_strerror(rc), rc, 0 ); - rc = LDAP_OTHER; - text = "internal error"; - goto return_results; - } + /* begin transaction */ + rc = TXN_BEGIN( bdb->bi_dbenv, NULL, <id, + bdb->bi_db_opflags ); + text = NULL; + if( rc != 0 ) { + Debug( LDAP_DEBUG_TRACE, + "bdb_delete: txn_begin failed: %s (%d)\n", + db_strerror(rc), rc, 0 ); + rc = LDAP_OTHER; + text = "internal error"; + goto return_results; + } #if 0 - lockid = TXN_ID( ltid ); + lockid = TXN_ID( ltid ); #endif - } opinfo.boi_bdb = be; opinfo.boi_txn = ltid; @@ -122,7 +120,7 @@ retry: /* transaction retry */ /* check parent for "children" acl */ rc = access_allowed( be, conn, op, p, - children, NULL, ACL_WRITE ); + children, NULL, ACL_WRITE, NULL ); bdb_cache_return_entry_r(&bdb->bi_cache, p); p = NULL; @@ -150,7 +148,7 @@ retry: /* transaction retry */ /* check parent for "children" acl */ rc = access_allowed( be, conn, op, p, - children, NULL, ACL_WRITE ); + children, NULL, ACL_WRITE, NULL ); p = NULL; switch( opinfo.boi_err ) { @@ -235,8 +233,7 @@ retry: /* transaction retry */ } if ( !manageDSAit && is_entry_referral( e ) ) { - /* parent is a referral, don't allow add */ - /* parent is an alias, don't allow add */ + /* entry is a referral, don't allow delete */ BerVarray refs = get_entry_referrals( be, conn, op, e ); @@ -334,23 +331,27 @@ retry: /* transaction retry */ ldap_pvt_thread_mutex_unlock( &bdb->bi_lastid_mutex ); #endif - if( bdb->bi_txn ) { - rc = txn_commit( ltid, 0 ); + if( op->o_noop ) { + rc = TXN_ABORT( ltid ); + } else { + rc = TXN_COMMIT( ltid, 0 ); } ltid = NULL; op->o_private = NULL; if( rc != 0 ) { Debug( LDAP_DEBUG_TRACE, - "bdb_delete: txn_commit failed: %s (%d)\n", - db_strerror(rc), rc, 0 ); + "bdb_delete: txn_%s failed: %s (%d)\n", + op->o_noop ? "abort (no-op)" : "commit", + db_strerror(rc), rc ); rc = LDAP_OTHER; text = "commit failed"; } else { Debug( LDAP_DEBUG_TRACE, - "bdb_delete: deleted id=%08lx dn=\"%s\"\n", - e->e_id, e->e_dn, 0 ); + "bdb_delete: deleted%s id=%08lx dn=\"%s\"\n", + op->o_noop ? " (no-op)" : "", + e->e_id, e->e_dn ); rc = LDAP_SUCCESS; text = NULL; } @@ -371,7 +372,7 @@ done: } if( ltid != NULL ) { - txn_abort( ltid ); + TXN_ABORT( ltid ); op->o_private = NULL; }