]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/modrdn.c
silence warning
[openldap] / servers / slapd / modrdn.c
index b4f85f7e5583645a85c390ed0ff78db7f0f911cc..77eaa684d10cb4a14d341662f057994ed0caa652 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2010 The OpenLDAP Foundation.
+ * Copyright 1998-2011 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -392,7 +392,9 @@ slap_modrdn2mods(
        LDAPRDN         new_rdn = NULL;
 
        assert( !BER_BVISEMPTY( &op->oq_modrdn.rs_newrdn ) );
-       assert( !op->orr_deleteoldrdn || !BER_BVISEMPTY( &op->o_req_dn ) );
+
+       /* if requestDN is empty, silently reset deleteOldRDN */
+       if ( BER_BVISEMPTY( &op->o_req_dn ) ) op->orr_deleteoldrdn = 0;
 
        if ( ldap_bv2rdn_x( &op->oq_modrdn.rs_newrdn, &new_rdn,
                (char **)&rs->sr_text, LDAP_DN_FORMAT_LDAP, op->o_tmpmemctx ) ) {
@@ -401,7 +403,7 @@ slap_modrdn2mods(
                        "type(s)/value(s) of newrdn\n",
                        op->o_log_prefix, 0, 0 );
                rs->sr_err = LDAP_INVALID_DN_SYNTAX;
-               rs->sr_text = "unknown type(s) used in RDN";
+               rs->sr_text = "unknown type(s)/value(s) used in RDN";
                goto done;
        }
 
@@ -445,12 +447,19 @@ slap_modrdn2mods(
                mod_tmp->sml_values[1].bv_val = NULL;
                if( desc->ad_type->sat_equality->smr_normalize) {
                        mod_tmp->sml_nvalues = ( BerVarray )ch_malloc( 2 * sizeof( struct berval ) );
-                       (void) (*desc->ad_type->sat_equality->smr_normalize)(
+                       rs->sr_err = desc->ad_type->sat_equality->smr_normalize(
                                SLAP_MR_EQUALITY|SLAP_MR_VALUE_OF_ASSERTION_SYNTAX,
                                desc->ad_type->sat_syntax,
                                desc->ad_type->sat_equality,
                                &mod_tmp->sml_values[0],
                                &mod_tmp->sml_nvalues[0], NULL );
+                       if (rs->sr_err != LDAP_SUCCESS) {
+                               ch_free(mod_tmp->sml_nvalues);
+                               ch_free(mod_tmp->sml_values[0].bv_val);
+                               ch_free(mod_tmp->sml_values);
+                               ch_free(mod_tmp);
+                               goto done;
+                       }
                        mod_tmp->sml_nvalues[1].bv_val = NULL;
                } else {
                        mod_tmp->sml_nvalues = NULL;