X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ndb%2Fdelete.cpp;h=7200f60349f51b3c37c9477cf613e92efece7a2b;hb=76c6c8e5b7f7731440872010b895cd30c8076b59;hp=6c969abe3f7173575d68cb992321ef0a4db882c9;hpb=da6fdf70a41dbc800c61e9e8bc0f5373753fb362;p=openldap diff --git a/servers/slapd/back-ndb/delete.cpp b/servers/slapd/back-ndb/delete.cpp index 6c969abe3f..7200f60349 100644 --- a/servers/slapd/back-ndb/delete.cpp +++ b/servers/slapd/back-ndb/delete.cpp @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2008 The OpenLDAP Foundation. + * Copyright 2008-2011 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -58,7 +58,7 @@ ndb_back_delete( Operation *op, SlapReply *rs ) /* allocate CSN */ if ( BER_BVISNULL( &op->o_csn ) ) { struct berval csn; - char csnbuf[LDAP_LUTIL_CSNSTR_BUFSIZE]; + char csnbuf[LDAP_PVT_CSNSTR_BUFSIZE]; csn.bv_val = csnbuf; csn.bv_len = sizeof(csnbuf); @@ -110,7 +110,7 @@ retry: /* transaction retry */ } /* get entry */ - rs->sr_err = ndb_entry_get_info( op->o_bd, &NA, 1, &matched ); + rs->sr_err = ndb_entry_get_info( op, &NA, 1, &matched ); switch( rs->sr_err ) { case 0: case LDAP_NO_SUCH_OBJECT: @@ -137,6 +137,8 @@ retry: /* transaction retry */ if ( rs->sr_err == LDAP_NO_SUCH_OBJECT ) { rs->sr_matched = matched.bv_val; + if ( NA.ocs ) + ndb_check_referral( op, rs, &NA ); } else { rs->sr_matched = p.e_name.bv_val; rs->sr_err = LDAP_NO_SUCH_OBJECT; @@ -157,7 +159,7 @@ retry: /* transaction retry */ goto return_results; } - rs->sr_err = ndb_entry_get_data( op->o_bd, &NA, 1 ); + rs->sr_err = ndb_entry_get_data( op, &NA, 1 ); rs->sr_err = access_allowed( op, &e, entry, NULL, ACL_WDEL, NULL ); @@ -256,13 +258,15 @@ retry: /* transaction retry */ } if( op->o_noop ) { - if (( rs->sr_err=NA.txn->execute( Rollback )) != 0 ) { + if (( rs->sr_err=NA.txn->execute( NdbTransaction::Rollback, + NdbOperation::AbortOnError, 1 )) != 0 ) { rs->sr_text = "txn (no-op) failed"; } else { rs->sr_err = LDAP_X_NO_OPERATION; } } else { - if(( rs->sr_err=NA.txn->execute( Commit )) != 0 ) { + if (( rs->sr_err=NA.txn->execute( NdbTransaction::Commit, + NdbOperation::AbortOnError, 1 )) != 0 ) { rs->sr_text = "txn_commit failed"; } else { rs->sr_err = LDAP_SUCCESS; @@ -292,7 +296,7 @@ retry: /* transaction retry */ return_results: if ( NA.ocs ) { - ber_bvarray_free( NA.ocs ); + ber_bvarray_free_x( NA.ocs, op->o_tmpmemctx ); NA.ocs = NULL; }