X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=servers%2Fslapd%2Fslapmodify.c;h=b71f4ee17280186f9f498c1363456c16f14b0c32;hb=304c0cbbffd0087b9a7bfc06ba810fd089b810bc;hp=878188eb1a92835333411ad3be1a7a86d14ed2d1;hpb=5c878c1bf24e0f2b558cbbe59ffebe53819e49ed;p=openldap diff --git a/servers/slapd/slapmodify.c b/servers/slapd/slapmodify.c index 878188eb1a..b71f4ee172 100644 --- a/servers/slapd/slapmodify.c +++ b/servers/slapd/slapmodify.c @@ -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 );