]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/result.c
Fix prev commit, overlay config was broken
[openldap] / servers / slapd / result.c
index a9fae8697ea4af01c53655364ce2ae2ebc8c99f0..f1abb5110b8970cc2a1af9b83cdd7adf807beb4b 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2004 The OpenLDAP Foundation.
+ * Copyright 1998-2005 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -381,11 +381,15 @@ send_ldap_response(
        {
                if ( rs->sr_rspoid != NULL ) {
                        rc = ber_printf( ber, "ts",
-                               LDAP_TAG_EXOP_RES_OID, rs->sr_rspoid );
+                               rs->sr_type == REP_EXTENDED
+                                       ? LDAP_TAG_EXOP_RES_OID : LDAP_TAG_IM_RES_OID,
+                               rs->sr_rspoid );
                }
                if( rc != -1 && rs->sr_rspdata != NULL ) {
                        rc = ber_printf( ber, "tO",
-                               LDAP_TAG_EXOP_RES_VALUE, rs->sr_rspdata );
+                               rs->sr_type == REP_EXTENDED
+                                       ? LDAP_TAG_EXOP_RES_VALUE : LDAP_TAG_IM_RES_VALUE,
+                               rs->sr_rspdata );
                }
        }
 
@@ -447,10 +451,10 @@ send_ldap_response(
        }
 #endif /* LDAP_SLAPI */
 
-       ldap_pvt_thread_mutex_lock( &SLAPD_GLOBAL(counters).sc_sent_mutex );
-       ldap_pvt_mp_add_ulong( SLAPD_GLOBAL(counters).sc_pdu, 1 );
-       ldap_pvt_mp_add_ulong( SLAPD_GLOBAL(counters).sc_bytes, bytes );
-       ldap_pvt_thread_mutex_unlock( &SLAPD_GLOBAL(counters).sc_sent_mutex );
+       ldap_pvt_thread_mutex_lock( &slap_counters.sc_sent_mutex );
+       ldap_pvt_mp_add_ulong( slap_counters.sc_pdu, 1 );
+       ldap_pvt_mp_add_ulong( slap_counters.sc_bytes, (unsigned long)bytes );
+       ldap_pvt_thread_mutex_unlock( &slap_counters.sc_sent_mutex );
 
 cleanup:;
        /* Tell caller that we did this for real, as opposed to being
@@ -461,20 +465,18 @@ cleanup:;
 clean2:;
        if ( op->o_callback ) {
                int             first = 1;
-               slap_callback   *sc = op->o_callback,
-                               *sc_next = op->o_callback;
+               slap_callback   *sc = op->o_callback, *sc_next;
 
                for ( sc_next = op->o_callback; sc_next; op->o_callback = sc_next) {
                        sc_next = op->o_callback->sc_next;
                        if ( op->o_callback->sc_cleanup ) {
                                (void)op->o_callback->sc_cleanup( op, rs );
-                               if ( first && op->o_callback == NULL ) {
-                                       sc = NULL;
+                               if ( first && op->o_callback != sc ) {
+                                       sc = op->o_callback;
                                }
                        }
                        first = 0;
                }
-
                op->o_callback = sc;
        }
 
@@ -577,7 +579,7 @@ slap_send_ldap_result( Operation *op, SlapReply *rs )
         * should just set SLAPI_RESULT_CODE rather than sending a
         * result if they wish to change the result.
         */
-       if ( op->o_pb != NULL ) {
+       if ( op->o_callback == NULL && op->o_pb != NULL ) {
                slapi_int_pblock_set_operation( op->o_pb, op );
                slapi_pblock_set( op->o_pb, SLAPI_RESULT_CODE,
                        (void *)rs->sr_err );
@@ -1175,11 +1177,11 @@ slap_send_search_entry( Operation *op, SlapReply *rs )
                }
                rs->sr_nentries++;
 
-               ldap_pvt_thread_mutex_lock( &SLAPD_GLOBAL(counters).sc_sent_mutex );
-               ldap_pvt_mp_add_ulong( SLAPD_GLOBAL(counters).sc_bytes, bytes );
-               ldap_pvt_mp_add_ulong( SLAPD_GLOBAL(counters).sc_entries, 1 );
-               ldap_pvt_mp_add_ulong( SLAPD_GLOBAL(counters).sc_pdu, 1 );
-               ldap_pvt_thread_mutex_unlock( &SLAPD_GLOBAL(counters).sc_sent_mutex );
+               ldap_pvt_thread_mutex_lock( &slap_counters.sc_sent_mutex );
+               ldap_pvt_mp_add_ulong( slap_counters.sc_bytes, (unsigned long)bytes );
+               ldap_pvt_mp_add_ulong( slap_counters.sc_entries, 1 );
+               ldap_pvt_mp_add_ulong( slap_counters.sc_pdu, 1 );
+               ldap_pvt_thread_mutex_unlock( &slap_counters.sc_sent_mutex );
        }
 
        Statslog( LDAP_DEBUG_STATS2, "%s ENTRY dn=\"%s\"\n",
@@ -1193,20 +1195,18 @@ slap_send_search_entry( Operation *op, SlapReply *rs )
 error_return:;
        if ( op->o_callback ) {
                int             first = 1;
-               slap_callback   *sc = op->o_callback,
-                               *sc_next = op->o_callback;
+               slap_callback   *sc = op->o_callback, *sc_next;
 
                for ( sc_next = op->o_callback; sc_next; op->o_callback = sc_next) {
                        sc_next = op->o_callback->sc_next;
                        if ( op->o_callback->sc_cleanup ) {
                                (void)op->o_callback->sc_cleanup( op, rs );
-                               if ( first && op->o_callback == NULL ) {
-                                       sc = NULL;
+                               if ( first && op->o_callback != sc ) {
+                                       sc = op->o_callback;
                                }
                        }
                        first = 0;
                }
-
                op->o_callback = sc;
        }
 
@@ -1364,11 +1364,11 @@ slap_send_search_reference( Operation *op, SlapReply *rs )
        bytes = send_ldap_ber( op->o_conn, ber );
        ber_free_buf( ber );
 
-       ldap_pvt_thread_mutex_lock( &SLAPD_GLOBAL(counters).sc_sent_mutex );
-       ldap_pvt_mp_add_ulong( SLAPD_GLOBAL(counters).sc_bytes, bytes );
-       ldap_pvt_mp_add_ulong( SLAPD_GLOBAL(counters).sc_refs, 1 );
-       ldap_pvt_mp_add_ulong( SLAPD_GLOBAL(counters).sc_pdu, 1 );
-       ldap_pvt_thread_mutex_unlock( &SLAPD_GLOBAL(counters).sc_sent_mutex );
+       ldap_pvt_thread_mutex_lock( &slap_counters.sc_sent_mutex );
+       ldap_pvt_mp_add_ulong( slap_counters.sc_bytes, (unsigned long)bytes );
+       ldap_pvt_mp_add_ulong( slap_counters.sc_refs, 1 );
+       ldap_pvt_mp_add_ulong( slap_counters.sc_pdu, 1 );
+       ldap_pvt_thread_mutex_unlock( &slap_counters.sc_sent_mutex );
 #ifdef LDAP_CONNECTIONLESS
        }
 #endif
@@ -1382,20 +1382,18 @@ slap_send_search_reference( Operation *op, SlapReply *rs )
 rel:
        if ( op->o_callback ) {
                int             first = 1;
-               slap_callback   *sc = op->o_callback,
-                               *sc_next = op->o_callback;
+               slap_callback   *sc = op->o_callback, *sc_next;
 
                for ( sc_next = op->o_callback; sc_next; op->o_callback = sc_next) {
                        sc_next = op->o_callback->sc_next;
                        if ( op->o_callback->sc_cleanup ) {
                                (void)op->o_callback->sc_cleanup( op, rs );
-                               if ( first && op->o_callback == NULL ) {
-                                       sc = NULL;
+                               if ( first && op->o_callback != sc ) {
+                                       sc = op->o_callback;
                                }
                        }
                        first = 0;
                }
-
                op->o_callback = sc;
        }
 
@@ -1506,7 +1504,7 @@ int slap_read_controls(
                *ctrl = (LDAPControl *) slap_sl_calloc( 1, sizeof(LDAPControl), NULL );
        } else {
                /* retry: free previous try */
-               slap_sl_free( (*ctrl)->ldctl_value.bv_val, &op->o_tmpmemctx );
+               slap_sl_free( (*ctrl)->ldctl_value.bv_val, op->o_tmpmemctx );
        }
 
        **ctrl = c;