From af8488c37d79aa125fc1b8a0244e22695823dca6 Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Mon, 1 Oct 2001 22:11:37 +0000 Subject: [PATCH] fix result bug; add hooks for error selection based on priority (now the last one is selected) --- servers/slapd/back-meta/bind.c | 64 ++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/servers/slapd/back-meta/bind.c b/servers/slapd/back-meta/bind.c index cc9fc94b88..aca04ac11e 100644 --- a/servers/slapd/back-meta/bind.c +++ b/servers/slapd/back-meta/bind.c @@ -359,6 +359,8 @@ meta_back_op_result( struct metaconn *lc, Operation *op ) { int i, rerr = LDAP_SUCCESS; struct metasingleconn **lsc; + char *rmsg = NULL; + char *rmatch = NULL; for ( i = 0, lsc = lc->conns; lsc[ 0 ] != NULL; ++i, ++lsc ) { int err = LDAP_SUCCESS; @@ -379,39 +381,47 @@ meta_back_op_result( struct metaconn *lc, Operation *op ) LDAP_OPT_MATCHED_DN, &match ); err = ldap_back_map_result( err ); - rerr = err; - } - - /* - * FIXME: need to rewrite "match" (need rwinfo) - */ - send_ldap_result( lc->conn, op, err, match, msg, NULL, NULL ); - #ifdef NEW_LOGGING - LDAP_LOG(( "backend", LDAP_DEBUG_NOTICE, - "meta_back_op_result: target" - " <%d> sending msg \"%s\"" - " (matched \"%s\")\n", - i, ( msg ? msg : "" ), - ( match ? match : "" ) )); + LDAP_LOG(( "backend", LDAP_DEBUG_NOTICE, + "meta_back_op_result: target" + " <%d> sending msg \"%s\"" + " (matched \"%s\")\n", + i, ( msg ? msg : "" ), + ( match ? match : "" ) )); #else /* !NEW_LOGGING */ - Debug(LDAP_DEBUG_ANY, - "==> meta_back_op_result: target" - " <%d> sending msg \"%s\"" - " (matched \"%s\")\n", - i, ( msg ? msg : "" ), - ( match ? match : "" ) ); + Debug(LDAP_DEBUG_ANY, + "==> meta_back_op_result: target" + " <%d> sending msg \"%s\"" + " (matched \"%s\")\n", + i, ( msg ? msg : "" ), + ( match ? match : "" ) ); #endif /* !NEW_LOGGING */ - /* better test the pointers before freeing? */ - if ( match ) { - free( match ); - } - if ( msg ) { - free( msg ); + /* + * FIXME: need to rewrite "match" (need rwinfo) + */ + switch ( err ) { + default: + rerr = err; + rmsg = msg; + msg = NULL; + rmatch = match; + match = NULL; + break; + } + + /* better test the pointers before freeing? */ + if ( match ) { + free( match ); + } + if ( msg ) { + free( msg ); + } } } - return ( rerr == LDAP_SUCCESS ) ? 0 : -1; + send_ldap_result( lc->conn, op, rerr, rmatch, rmsg, NULL, NULL ); + + return ( ( rerr == LDAP_SUCCESS ) ? 0 : -1 ); } -- 2.39.5