]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/modrdn.c
Add debug msg if adding entry to logDB fails
[openldap] / servers / slapd / modrdn.c
index 986664d5f6160ce6142cedf3b5985d760043b57e..67340f2f5ef9bf28e5e374045f0568f725c86d9c 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2013 The OpenLDAP Foundation.
+ * Copyright 1998-2017 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -185,9 +185,14 @@ do_modrdn(
        op->o_bd = frontendDB;
        rs->sr_err = frontendDB->be_modrdn( op, rs );
 
+       if ( rs->sr_err == SLAPD_ASYNCOP ) {
+               /* skip cleanup */
+               return rs->sr_err;
+       }
 #ifdef LDAP_X_TXN
        if( rs->sr_err == LDAP_X_TXN_SPECIFY_OKAY ) {
                /* skip cleanup */
+               return rs->sr_err;
        }
 #endif
 
@@ -432,11 +437,22 @@ slap_modrdn2mods(
                        Debug( LDAP_DEBUG_TRACE,
                                "%s slap_modrdn2mods: %s: %s (new)\n",
                                op->o_log_prefix,
-                               rs->sr_text, 
+                               rs->sr_text,
                                new_rdn[ a_cnt ]->la_attr.bv_val );
                        goto done;              
                }
 
+               if ( !desc->ad_type->sat_equality ) {
+                       Debug( LDAP_DEBUG_TRACE,
+                               "%s slap_modrdn2mods: %s: %s (new)\n",
+                               op->o_log_prefix,
+                               rs->sr_text,
+                               new_rdn[ a_cnt ]->la_attr.bv_val );
+                       rs->sr_text = "naming attribute has no equality matching rule";
+                       rs->sr_err = LDAP_NAMING_VIOLATION;
+                       goto done;
+               }
+
                /* Apply modification */
                mod_tmp = ( Modifications * )ch_malloc( sizeof( Modifications ) );
                mod_tmp->sml_desc = desc;