]> git.sur5r.net Git - openldap/commitdiff
import remaining part of error mapping (ITS#4419)
authorPierangelo Masarati <ando@openldap.org>
Wed, 5 Apr 2006 23:27:52 +0000 (23:27 +0000)
committerPierangelo Masarati <ando@openldap.org>
Wed, 5 Apr 2006 23:27:52 +0000 (23:27 +0000)
servers/slapd/back-meta/add.c
servers/slapd/back-meta/delete.c

index 03187a90e6e7cc75ebfa960f5aafb27f28cd5582..2b089583742fc88de2ad7b87d6acd7c4e9588099 100644 (file)
@@ -45,6 +45,7 @@ meta_back_add( Operation *op, SlapReply *rs )
        dncookie        dc;
        int             msgid;
        int             do_retry = 1;
+       int             maperr = 1;
 
        Debug(LDAP_DEBUG_ARGS, "==> meta_back_add: %s\n",
                        op->o_req_dn.bv_val, 0, 0 );
@@ -186,20 +187,19 @@ retry:;
                }
 
                rs->sr_err = LDAP_OTHER;
+               maperr = 0;
                rc = ldap_result( mc->mc_conns[ candidate ].msc_ld,
                        msgid, LDAP_MSG_ALL, tvp, &res );
                switch ( rc ) {
                case -1:
-                       send_ldap_result( op, rs );
-                       goto cleanup;
+                       break;
 
                case 0:
                        ldap_abandon_ext( mc->mc_conns[ candidate ].msc_ld,
                                msgid, NULL, NULL );
                        rs->sr_err = op->o_protocol >= LDAP_VERSION3 ?
                                LDAP_ADMINLIMIT_EXCEEDED : LDAP_OPERATIONS_ERROR;
-                       send_ldap_result( op, rs );
-                       goto cleanup;
+                       break;
 
                case LDAP_RES_ADD:
                        rc = ldap_parse_result( mc->mc_conns[ candidate ].msc_ld,
@@ -207,6 +207,7 @@ retry:;
                        if ( rc != LDAP_SUCCESS ) {
                                rs->sr_err = rc;
                        }
+                       maperr = 1;
                        break;
 
                default:
@@ -215,7 +216,12 @@ retry:;
                }
        }
 
-       (void)meta_back_op_result( mc, op, rs, candidate );
+       if ( maperr ) {
+               rs->sr_err = meta_back_op_result( mc, op, rs, candidate );
+
+       } else {
+               send_ldap_result( op, rs );
+       }
 
 cleanup:;
        for ( --i; i >= 0; --i ) {
index d904efb90327c21a14f7737747eca732e6706a3e..d9461ac4e4d16aea618571e337c77235e5e42b2b 100644 (file)
@@ -41,6 +41,7 @@ meta_back_delete( Operation *op, SlapReply *rs )
        dncookie        dc;
        int             msgid;
        int             do_retry = 1;
+       int             maperr = 1;
 
        mc = meta_back_getconn( op, rs, &candidate, LDAP_BACK_SENDERR );
        if ( !mc || !meta_back_dobind( op, rs, mc, LDAP_BACK_SENDERR ) ) {
@@ -84,21 +85,20 @@ retry:;
                }
 
                rs->sr_err = LDAP_OTHER;
+               maperr = 0;
                rc = ldap_result( mc->mc_conns[ candidate ].msc_ld,
                        msgid, LDAP_MSG_ALL, tvp, &res );
                switch ( rc ) {
                case -1:
                        rs->sr_err = LDAP_OTHER;
-                       send_ldap_result( op, rs );
-                       goto cleanup;
+                       break;
 
                case 0:
                        ldap_abandon_ext( mc->mc_conns[ candidate ].msc_ld,
                                msgid, NULL, NULL );
                        rs->sr_err = op->o_protocol >= LDAP_VERSION3 ?
                                LDAP_ADMINLIMIT_EXCEEDED : LDAP_OPERATIONS_ERROR;
-                       send_ldap_result( op, rs );
-                       goto cleanup;
+                       break;
 
                case LDAP_RES_DELETE:
                        rc = ldap_parse_result( mc->mc_conns[ candidate ].msc_ld,
@@ -106,6 +106,7 @@ retry:;
                        if ( rc != LDAP_SUCCESS ) {
                                rs->sr_err = rc;
                        }
+                       maperr = 1;
                        break;
 
                default:
@@ -114,7 +115,12 @@ retry:;
                }
        }
 
-       rs->sr_err = meta_back_op_result( mc, op, rs, candidate );
+       if ( maperr ) {
+               rs->sr_err = meta_back_op_result( mc, op, rs, candidate );
+
+       } else {
+               send_ldap_result( op, rs );
+       }
 
 cleanup:;
        if ( mdn.bv_val != op->o_req_dn.bv_val ) {