X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-mdb%2Fmodify.c;h=35682cefe8845fc70feb065fac23c440b95be3c5;hb=d490fd9f794be8866605998e7eff5add81f13ac9;hp=c08e95cc695e3828c7a734ac194eff8b76bf1432;hpb=eb5faf59284a79c1496535e05ac8385f906e2f06;p=openldap diff --git a/servers/slapd/back-mdb/modify.c b/servers/slapd/back-mdb/modify.c index c08e95cc69..35682cefe8 100644 --- a/servers/slapd/back-mdb/modify.c +++ b/servers/slapd/back-mdb/modify.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2000-2014 The OpenLDAP Foundation. + * Copyright 2000-2015 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -459,49 +459,12 @@ mdb_modify( Operation *op, SlapReply *rs ) LDAPControl *ctrls[SLAP_MAX_RESPONSE_CONTROLS]; int num_ctrls = 0; -#ifdef LDAP_X_TXN - int settle = 0; -#endif - Debug( LDAP_DEBUG_ARGS, LDAP_XSTRING(mdb_modify) ": %s\n", op->o_req_dn.bv_val, 0, 0 ); #ifdef LDAP_X_TXN - if( op->o_txnSpec ) { - /* acquire connection lock */ - ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex ); - if( op->o_conn->c_txn == CONN_TXN_INACTIVE ) { - rs->sr_text = "invalid transaction identifier"; - rs->sr_err = LDAP_X_TXN_ID_INVALID; - goto txnReturn; - } else if( op->o_conn->c_txn == CONN_TXN_SETTLE ) { - settle=1; - goto txnReturn; - } - - if( op->o_conn->c_txn_backend == NULL ) { - op->o_conn->c_txn_backend = op->o_bd; - - } else if( op->o_conn->c_txn_backend != op->o_bd ) { - rs->sr_text = "transaction cannot span multiple database contexts"; - rs->sr_err = LDAP_AFFECTS_MULTIPLE_DSAS; - goto txnReturn; - } - - /* insert operation into transaction */ - - rs->sr_text = "transaction specified"; - rs->sr_err = LDAP_X_TXN_SPECIFY_OKAY; - -txnReturn: - /* release connection lock */ - ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex ); - - if( !settle ) { - send_ldap_result( op, rs ); - return rs->sr_err; - } - } + if( op->o_txnSpec && txn_preop( op, rs )) + return rs->sr_err; #endif ctrls[num_ctrls] = NULL; @@ -638,7 +601,12 @@ txnReturn: Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(mdb_modify) ": id2entry update failed " "(%d)\n", rs->sr_err, 0, 0 ); - rs->sr_text = "entry update failed"; + if ( rs->sr_err == LDAP_ADMINLIMIT_EXCEEDED ) { + rs->sr_text = "entry too big"; + } else { + rs->sr_err = LDAP_OTHER; + rs->sr_text = "entry update failed"; + } goto return_results; }