]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapmodify.c
ITS#7256 Set backend for operation.
[openldap] / servers / slapd / slapmodify.c
index 4639baac676d28f3ba9f8d296e5f76bd618404d7..b71f4ee17280186f9f498c1363456c16f14b0c32 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-2014 The OpenLDAP Foundation.
  * Portions Copyright 1998-2003 Kurt D. Zeilenga.
  * Portions Copyright 2003 IBM Corporation.
  * All rights reserved.
@@ -74,6 +74,7 @@ slapmodify( int argc, char **argv )
        memset( &opbuf, 0, sizeof(opbuf) );
        op = &opbuf.ob_op;
        op->o_hdr = &opbuf.ob_hdr;
+       op->o_bd = be;
 
        if ( !be->be_entry_open ||
                !be->be_entry_close ||
@@ -178,8 +179,15 @@ slapmodify( int argc, char **argv )
                        request = "modify";
                        break;
 
-               case LDAP_REQ_MODRDN:
                case LDAP_REQ_DELETE:
+                       if ( be->be_entry_delete )
+                       {
+                               request = "delete";
+                               break;
+                       }
+                       /* backend does not support delete, fallthrough */
+
+               case LDAP_REQ_MODRDN:
                        fprintf( stderr, "%s: request 0x%lx not supported (line=%lu)\n",
                                progname, (unsigned long)lr.lr_op, lineno );
                        rc = EXIT_FAILURE;
@@ -187,11 +195,8 @@ slapmodify( int argc, char **argv )
                        goto done;
 
                default:
-                       fprintf( stderr, "%s: unknown request 0x%lx (line=%lu)\n",
-                               progname, (unsigned long)lr.lr_op, lineno );
-                       rc = EXIT_FAILURE;
-                       if( continuemode ) continue;
-                       goto done;
+                       /* record skipped e.g. version: or comment or something we don't handle yet */
+                       continue;
                }
 
                local_rc = dnNormalize( 0, NULL, NULL, &lr.lr_dn, &ndn, NULL );
@@ -554,15 +559,21 @@ slapmodify( int argc, char **argv )
                        switch ( lr.lr_op ) {
                        case LDAP_REQ_ADD:
                                id = be->be_entry_put( be, e, &bvtext );
+                               rc = (id == NOID);
                                break;
 
                        case LDAP_REQ_MODIFY:
                                id = be->be_entry_modify( be, e, &bvtext );
+                               rc = (id == NOID);
+                               break;
+
+                       case LDAP_REQ_DELETE:
+                               rc = be->be_entry_delete( be, id, &bvtext );
                                break;
 
                        }
 
-                       if( id == NOID ) {
+                       if( rc != LDAP_SUCCESS ) {
                                fprintf( stderr, "%s: could not %s entry dn=\"%s\" "
                                        "(line=%lu): %s\n", progname, request, e->e_dn,
                                        lineno, bvtext.bv_val );