]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapmodify.c
ITS#8789 avoid unnecessary writes of context entry
[openldap] / servers / slapd / slapmodify.c
index 5ceec3e210b6facf9d3704eef318a04e6bbb8320..9230d236a0f5a49f7235a49694257e58425567af 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2015 The OpenLDAP Foundation.
+ * Copyright 1998-2017 The OpenLDAP Foundation.
  * Portions Copyright 1998-2003 Kurt D. Zeilenga.
  * Portions Copyright 2003 IBM Corporation.
  * All rights reserved.
@@ -190,7 +190,7 @@ slapmodify( int argc, char **argv )
                                request = "delete";
                                break;
                        }
-                       /* backend does not support delete, fallthrough */
+                       /* backend does not support delete, fallthru */
 
                case LDAP_REQ_MODRDN:
                        fprintf( stderr, "%s: request 0x%lx not supported (line=%lu)\n",
@@ -285,7 +285,9 @@ slapmodify( int argc, char **argv )
                                rc = (id == NOID);
                                if ( rc == LDAP_SUCCESS && lr.lr_op != LDAP_REQ_DELETE ) {
                                        e_orig = be->be_entry_get( be, id );
-                                       e = entry_dup( e_orig );
+                                       if ( e_orig )
+                                               e = entry_dup( e_orig );
+                                       rc = (e == NULL);
                                }
                                break;
                }
@@ -564,15 +566,14 @@ slapmodify( int argc, char **argv )
                                break;
 
                        case LDAP_REQ_DELETE:
-                               rc = be->be_entry_delete( be, id, &bvtext );
-                               e_orig = NULL;
+                               rc = be->be_entry_delete( be, &ndn, &bvtext );
                                break;
 
                        }
 
                        if( rc != LDAP_SUCCESS ) {
                                fprintf( stderr, "%s: could not %s entry dn=\"%s\" "
-                                       "(line=%lu): %s\n", progname, request, e->e_dn,
+                                       "(line=%lu): %s\n", progname, request, ndn.bv_val,
                                        lineno, bvtext.bv_val );
                                rc = EXIT_FAILURE;
                                goto cleanup;
@@ -582,11 +583,11 @@ slapmodify( int argc, char **argv )
 
                        if ( verbose )
                                fprintf( stderr, "%s: \"%s\" (%08lx)\n",
-                                       request, e->e_dn, (long) id );
+                                       request, ndn.bv_val, (long) id );
                } else {
                        if ( verbose )
                                fprintf( stderr, "%s: \"%s\"\n",
-                                       request, e->e_dn );
+                                       request, ndn.bv_val );
                }
 
 cleanup:;