/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2000-2014 The OpenLDAP Foundation.
+ * Copyright 2000-2018 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
int parent_is_glue = 0;
int parent_is_leaf = 0;
-#ifdef LDAP_X_TXN
- int settle = 0;
-#endif
-
Debug( LDAP_DEBUG_TRACE, "==>" LDAP_XSTRING(mdb_modrdn) "(%s,%s,%s)\n",
op->o_req_dn.bv_val,op->oq_modrdn.rs_newrdn.bv_val,
op->oq_modrdn.rs_newSup ? op->oq_modrdn.rs_newSup->bv_val : "NULL" );
#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;
rs->sr_err = LDAP_OTHER;
goto return_results;
}
- new_parent_dn = &np->e_name;
+ np_dn = &np->e_name;
} else {
np_dn = NULL;
"<=- " LDAP_XSTRING(mdb_modrdn)
": id2entry failed: %s (%d)\n",
mdb_strerror(rs->sr_err), rs->sr_err, 0 );
- rs->sr_err = LDAP_OTHER;
- 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;
}