/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2006 The OpenLDAP Foundation.
+ * Copyright 1998-2007 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
return SLAP_CB_CONTINUE;
}
-int slap_replog_cb( Operation *op, SlapReply *rs )
-{
- if ( rs->sr_err == LDAP_SUCCESS ) {
- replog( op );
- }
- return SLAP_CB_CONTINUE;
-}
-
static char *v2ref( BerVarray ref, const char *text )
{
size_t len = 0, i = 0;
break;
}
- err = errno;
+ err = sock_errno();
/*
* we got an error. if it's ewouldblock, we need to
if( rc == -1 ) return rc;
}
-#ifdef LDAP_DEVEL
+#ifdef SLAP_SORTED_RESULTS
/* this is a hack to avoid having to modify op->s_ctrls */
if( o->o_sortedresults ) {
BerElementBuffer berbuf;
{
int rc;
-#ifdef LDAP_DEVEL
slap_callback *sc = op->o_callback, **scp;
rc = SLAP_CB_CONTINUE;
}
op->o_callback = sc;
-#else /* ! LDAP_DEVEL */
- slap_callback *sc = op->o_callback, **sc_prev = &sc, *sc_next;
-
- rc = SLAP_CB_CONTINUE;
- 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_response ) {
- slap_callback *sc2 = op->o_callback;
- rc = op->o_callback->sc_response( op, rs );
- if ( op->o_callback != sc2 ) {
- *sc_prev = op->o_callback;
- }
- if ( rc != SLAP_CB_CONTINUE || !op->o_callback ) break;
- if ( op->o_callback != sc2 ) continue;
- }
- sc_prev = &op->o_callback->sc_next;
- }
-
- op->o_callback = sc;
-#endif /* ! LDAP_DEVEL */
-
return rc;
}
Operation *op,
SlapReply *rs )
{
-#ifdef LDAP_DEVEL
slap_callback *sc = op->o_callback, **scp;
for ( scp = ≻ *scp; ) {
}
op->o_callback = sc;
-#else /* ! LDAP_DEVEL */
- slap_callback *sc = op->o_callback, **sc_prev = &sc, *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 ) {
- slap_callback *sc2 = op->o_callback;
- (void)op->o_callback->sc_cleanup( op, rs );
- if ( op->o_callback != sc2 ) {
- *sc_prev = op->o_callback;
- }
- if ( !op->o_callback ) break;
- if ( op->o_callback != sc2 ) continue;
- }
- sc_prev = &op->o_callback->sc_next;
- }
-
- op->o_callback = sc;
-#endif /* ! LDAP_DEVEL */
-
return LDAP_SUCCESS;
}
bytes = send_ldap_ber( op->o_conn, ber );
ber_free_buf( ber );
- 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 );
+ if ( bytes < 0 ) {
+ rc = LDAP_UNAVAILABLE;
+ } else {
+ 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
continue;
}
- while ( isspace( c[ 0 ] ) ) c++;
+ while ( isspace( (unsigned char) c[ 0 ] ) ) c++;
if ( c[ 0 ] == '\0' ) {
Debug( LDAP_DEBUG_ANY, "str2result (%s) missing or empty value\n",
s, 0, 0 );
continue;
}
- while ( isspace( next[ 0 ] ) ) next++;
+ while ( isspace( (unsigned char) next[ 0 ] ) ) next++;
if ( next[ 0 ] != '\0' ) {
Debug( LDAP_DEBUG_ANY, "str2result (%s) extra cruft after value\n",
s, 0, 0 );
op->o_preread_attrs : op->o_postread_attrs;
bv.bv_len = entry_flatsize( rs->sr_entry, 0 );
- bv.bv_val = op->o_tmpalloc(bv.bv_len, op->o_tmpmemctx );
+ bv.bv_val = op->o_tmpalloc( bv.bv_len, op->o_tmpmemctx );
ber_init2( ber, &bv, LBER_USE_DER );
ber_set_option( ber, LBER_OPT_BER_MEMCTX, &op->o_tmpmemctx );
/* create new operation */
myop = *op;
- myop.o_bd = NULL;
+ /* FIXME: o_bd needed for ACL */
+ myop.o_bd = op->o_bd;
myop.o_res_ber = ber;
myop.o_callback = NULL;
myop.ors_slimit = 1;