]> git.sur5r.net Git - openldap/commitdiff
Fix do/don't send result logic
authorHoward Chu <hyc@openldap.org>
Wed, 19 Feb 2003 00:01:22 +0000 (00:01 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 19 Feb 2003 00:01:22 +0000 (00:01 +0000)
servers/slapd/back-ldap/add.c
servers/slapd/back-ldap/back-ldap.h
servers/slapd/back-ldap/bind.c
servers/slapd/back-ldap/compare.c
servers/slapd/back-ldap/delete.c
servers/slapd/back-ldap/modify.c
servers/slapd/back-ldap/modrdn.c
servers/slapd/back-ldap/search.c

index 2b02a50ba33bd59c925231d61e4b83a54d3271f5..4b03b68d582cc2569098721ee7719d276b40da15 100644 (file)
@@ -187,7 +187,7 @@ ldap_back_add(
                free( mdn.bv_val );
        }
        
-       return( ldap_back_op_result( li, lc, conn, op, msgid, j ) );
+       return( ldap_back_op_result( li, lc, conn, op, msgid, j, 1 ) );
 }
 
 #ifdef ENABLE_REWRITE
index d2dc6c9f192a1dc3f413db10ff663f67b94d8f27..921d7be53e87e935e51942e758c66893d1822b29 100644 (file)
@@ -95,8 +95,8 @@ struct ldapconn *ldap_back_getconn(struct ldapinfo *li, struct slap_conn *conn,
        struct slap_op *op);
 int ldap_back_dobind(struct ldapinfo *li, struct ldapconn *lc, Connection *conn, Operation *op);
 int ldap_back_map_result(int err);
-int ldap_back_op_result(struct ldapinfo *li, struct ldapconn *lc, Connection *conn, Operation *op,
-       ber_int_t msgid, int rc);
+int ldap_back_op_result(struct ldapinfo *li, struct ldapconn *lc,
+       Connection *conn, Operation *op, ber_int_t msgid, int rc, int sendok);
 int    back_ldap_LTX_init_module(int argc, char *argv[]);
 
 void ldap_back_dn_massage(struct ldapinfo *li, struct berval *dn,
index fe6b6e6c039009037cf5326d9b3afe01076e0316..1e4ad1b770311a86638d3b3a4f456d507fb1a747 100644 (file)
@@ -116,7 +116,7 @@ ldap_back_bind(
        /* method is always LDAP_AUTH_SIMPLE if we got here */
        rc = ldap_sasl_bind(lc->ld, mdn.bv_val, LDAP_SASL_SIMPLE,
                cred, op->o_ctrls, NULL, &msgid);
-       rc = ldap_back_op_result( li, lc, conn, op, msgid, rc );
+       rc = ldap_back_op_result( li, lc, conn, op, msgid, rc, 1 );
        if (rc == LDAP_SUCCESS) {
                lc->bound = 1;
                if ( mdn.bv_val != dn->bv_val ) {
@@ -419,7 +419,7 @@ ldap_back_dobind( struct ldapinfo *li, struct ldapconn *lc, Connection *conn, Op
        if ( !lc->bound ) {
                rc = ldap_sasl_bind(lc->ld, lc->bound_dn.bv_val,
                        LDAP_SASL_SIMPLE, &lc->cred, NULL, NULL, &msgid);
-               rc = ldap_back_op_result( li, lc, conn, op, msgid, rc );
+               rc = ldap_back_op_result( li, lc, conn, op, msgid, rc, 0 );
                if (rc == LDAP_SUCCESS) {
                        lc->bound = 1;
                }
@@ -493,10 +493,11 @@ ldap_back_map_result(int err)
 
 int
 ldap_back_op_result(struct ldapinfo *li, struct ldapconn *lc,
-       Connection *conn, Operation *op, ber_int_t msgid, int err)
+       Connection *conn, Operation *op, ber_int_t msgid, int err, int sendok)
 {
        char *msg = NULL;
        char *match = NULL;
+       char *mmatch = NULL;
        LDAPMessage *res;
        int rc;
 
@@ -514,7 +515,6 @@ ldap_back_op_result(struct ldapinfo *li, struct ldapconn *lc,
 
                /* internal ops must not reply to client */
                if ( conn && !op->o_do_not_cache ) {
-                       char *mmatch = NULL;
 #ifdef ENABLE_REWRITE
                        if (match) {
                                
@@ -535,10 +535,12 @@ ldap_back_op_result(struct ldapinfo *li, struct ldapconn *lc,
                                mmatch = mdn.bv_val;
                        }
 #endif
-                       send_ldap_result( conn, op, err, mmatch, msg, NULL, NULL );
-                       if (mmatch != match) free(mmatch);
                }
        }
+       if (sendok || err != LDAP_SUCCESS) {
+               send_ldap_result( conn, op, err, mmatch, msg, NULL, NULL );
+       }
+       if (mmatch != match) free(mmatch);
        if ( match ) free( match );
        if ( msg ) free( msg );
        return( (err==LDAP_SUCCESS) ? 0 : -1 );
index 348736f2f1e42206db0b4b7c035eccd7d98b29bf..e16253057e177b5b36be52a2269f136f78f67179 100644 (file)
@@ -124,5 +124,5 @@ ldap_back_compare(
                free( mdn.bv_val );
        }
        
-       return( ldap_back_op_result( li, lc, conn, op, msgid, rc ) );
+       return( ldap_back_op_result( li, lc, conn, op, msgid, rc, 1 ) );
 }
index a2e737f7a8653b77d5ad1bea3dfa69a522e19a36..fb642b78178c0408b23a490630fa374bb978e8a7 100644 (file)
@@ -105,5 +105,5 @@ ldap_back_delete(
                free( mdn.bv_val );
        }
        
-       return( ldap_back_op_result( li, lc, conn, op, msgid, rc ) );
+       return( ldap_back_op_result( li, lc, conn, op, msgid, rc, 1 ) );
 }
index 83de06937a9649a6b36c769203731c32df2fec52..dc10dfe4615d2d214f561a2452762098dc323cf3 100644 (file)
@@ -171,6 +171,6 @@ cleanup:;
                ch_free(modv[i]->mod_bvalues);
        ch_free(mods);
        ch_free(modv);
-       return( ldap_back_op_result( li, lc, conn, op, msgid, rc ));
+       return( ldap_back_op_result( li, lc, conn, op, msgid, rc, 1 ));
 }
 
index 447122920acb13635140f76e8ca45e648add81c3..31739cec7a0cbf9588eb4ebc7edad3276466c51b 100644 (file)
@@ -159,5 +159,5 @@ ldap_back_modrdn(
                free( mnewSuperior.bv_val );
        }
        
-       return( ldap_back_op_result( li, lc, conn, op, msgid, rc ) );
+       return( ldap_back_op_result( li, lc, conn, op, msgid, rc, 1 ) );
 }
index 3db899345584c37cc45aca93ea936dc895f8ec1c..404f9e37e2da6cdac5e63f45d9fc8a7983eed3a5 100644 (file)
@@ -265,7 +265,7 @@ ldap_back_search(
                        : NULL, slimit, &msgid);
        if ( rc != LDAP_SUCCESS ) {
 fail:;
-               rc = ldap_back_op_result(li, lc, conn, op, msgid, rc);
+               rc = ldap_back_op_result(li, lc, conn, op, msgid, rc, 0);
                goto finish;
        }