]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-mdb/modrdn.c
Happy New Year
[openldap] / servers / slapd / back-mdb / modrdn.c
index 2aa545d2421dbdec5d7daeace1a22d083e47b548..d9a880f0aff68742f45fbee1203098c4c59e22b5 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2000-2013 The OpenLDAP Foundation.
+ * Copyright 2000-2018 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -55,50 +55,13 @@ mdb_modrdn( Operation       *op, SlapReply *rs )
        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;
@@ -383,7 +346,7 @@ txnReturn:
                                rs->sr_err = LDAP_OTHER;
                                goto return_results;
                        }
-                       new_parent_dn = &np->e_name;
+                       np_dn = &np->e_name;
 
                } else {
                        np_dn = NULL;
@@ -524,8 +487,12 @@ txnReturn:
                        "<=- " 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;
        }