mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-18 11:05:48 +08:00
don't send error when going to retry (alternative fix to ITS#5854)
This commit is contained in:
parent
416a544a9e
commit
5a50733e39
@ -393,6 +393,8 @@ typedef struct ldapinfo_t {
|
||||
time_t li_timeout[ SLAP_OP_LAST ];
|
||||
} ldapinfo_t;
|
||||
|
||||
#define LDAP_ERR_OK(err) ((err) == LDAP_SUCCESS || (err) == LDAP_COMPARE_FALSE || (err) == LDAP_COMPARE_TRUE)
|
||||
|
||||
typedef enum ldap_back_send_t {
|
||||
LDAP_BACK_DONTSEND = 0x00,
|
||||
LDAP_BACK_SENDOK = 0x01,
|
||||
|
@ -1637,8 +1637,6 @@ ldap_back_op_result(
|
||||
char **refs = NULL;
|
||||
LDAPControl **ctrls = NULL;
|
||||
|
||||
#define ERR_OK(err) ((err) == LDAP_SUCCESS || (err) == LDAP_COMPARE_FALSE || (err) == LDAP_COMPARE_TRUE)
|
||||
|
||||
rs->sr_text = NULL;
|
||||
rs->sr_matched = NULL;
|
||||
rs->sr_ref = NULL;
|
||||
@ -1647,7 +1645,7 @@ ldap_back_op_result(
|
||||
/* if the error recorded in the reply corresponds
|
||||
* to a successful state, get the error from the
|
||||
* remote server response */
|
||||
if ( ERR_OK( rs->sr_err ) ) {
|
||||
if ( LDAP_ERR_OK( rs->sr_err ) ) {
|
||||
int rc;
|
||||
struct timeval tv;
|
||||
LDAPMessage *res = NULL;
|
||||
@ -1800,7 +1798,7 @@ retry:;
|
||||
/* if the error in the reply structure is not
|
||||
* LDAP_SUCCESS, try to map it from client
|
||||
* to server error */
|
||||
if ( !ERR_OK( rs->sr_err ) ) {
|
||||
if ( !LDAP_ERR_OK( rs->sr_err ) ) {
|
||||
rs->sr_err = slap_map_api2result( rs );
|
||||
|
||||
/* internal ops ( op->o_conn == NULL )
|
||||
@ -1825,8 +1823,8 @@ retry:;
|
||||
}
|
||||
|
||||
} else if ( op->o_conn &&
|
||||
( ( ( sendok & LDAP_BACK_SENDOK ) && ERR_OK( rs->sr_err ) )
|
||||
|| ( ( sendok & LDAP_BACK_SENDERR ) && rs->sr_err != LDAP_SUCCESS ) ) )
|
||||
( ( ( sendok & LDAP_BACK_SENDOK ) && LDAP_ERR_OK( rs->sr_err ) )
|
||||
|| ( ( sendok & LDAP_BACK_SENDERR ) && !LDAP_ERR_OK( rs->sr_err ) ) ) )
|
||||
{
|
||||
send_ldap_result( op, rs );
|
||||
}
|
||||
@ -1859,7 +1857,7 @@ retry:;
|
||||
rs->sr_ctrls = NULL;
|
||||
}
|
||||
|
||||
return( ERR_OK( rs->sr_err ) ? LDAP_SUCCESS : rs->sr_err );
|
||||
return( LDAP_ERR_OK( rs->sr_err ) ? LDAP_SUCCESS : rs->sr_err );
|
||||
}
|
||||
|
||||
/* return true if bound, false if failed */
|
||||
|
@ -45,7 +45,7 @@ meta_back_add( Operation *op, SlapReply *rs )
|
||||
struct berval mdn = BER_BVNULL, mapped;
|
||||
dncookie dc;
|
||||
int msgid;
|
||||
int do_retry = 1;
|
||||
ldap_back_send_t retrying = LDAP_BACK_RETRYING;
|
||||
LDAPControl **ctrls = NULL;
|
||||
|
||||
Debug(LDAP_DEBUG_ARGS, "==> meta_back_add: %s\n",
|
||||
@ -178,9 +178,9 @@ retry:;
|
||||
rs->sr_err = ldap_add_ext( mc->mc_conns[ candidate ].msc_ld, mdn.bv_val,
|
||||
attrs, ctrls, NULL, &msgid );
|
||||
rs->sr_err = meta_back_op_result( mc, op, rs, candidate, msgid,
|
||||
mt->mt_timeout[ SLAP_OP_ADD ], LDAP_BACK_SENDRESULT );
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE && do_retry ) {
|
||||
do_retry = 0;
|
||||
mt->mt_timeout[ SLAP_OP_ADD ], ( LDAP_BACK_SENDRESULT | retrying ) );
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE && retrying ) {
|
||||
retrying &= ~LDAP_BACK_RETRYING;
|
||||
if ( meta_back_retry( op, rs, &mc, candidate, LDAP_BACK_SENDERR ) ) {
|
||||
/* if the identity changed, there might be need to re-authz */
|
||||
(void)mi->mi_ldap_extra->controls_free( op, rs, &ctrls );
|
||||
|
@ -953,9 +953,7 @@ meta_back_op_result(
|
||||
metatarget_t *mt = mi->mi_targets[ candidate ];
|
||||
metasingleconn_t *msc = &mc->mc_conns[ candidate ];
|
||||
|
||||
#define ERR_OK(err) ((err) == LDAP_SUCCESS || (err) == LDAP_COMPARE_FALSE || (err) == LDAP_COMPARE_TRUE)
|
||||
|
||||
if ( ERR_OK( rs->sr_err ) ) {
|
||||
if ( LDAP_ERR_OK( rs->sr_err ) ) {
|
||||
int rc;
|
||||
struct timeval tv;
|
||||
LDAPMessage *res = NULL;
|
||||
@ -1087,7 +1085,7 @@ retry:;
|
||||
/* if the error in the reply structure is not
|
||||
* LDAP_SUCCESS, try to map it from client
|
||||
* to server error */
|
||||
if ( !ERR_OK( rs->sr_err ) ) {
|
||||
if ( !LDAP_ERR_OK( rs->sr_err ) ) {
|
||||
rs->sr_err = slap_map_api2result( rs );
|
||||
|
||||
/* internal ops ( op->o_conn == NULL )
|
||||
@ -1206,9 +1204,17 @@ retry:;
|
||||
rs->sr_matched = matched;
|
||||
}
|
||||
|
||||
if ( op->o_conn &&
|
||||
( ( sendok & LDAP_BACK_SENDOK )
|
||||
|| ( ( sendok & LDAP_BACK_SENDERR ) && rs->sr_err != LDAP_SUCCESS ) ) )
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE ) {
|
||||
if ( !( sendok & LDAP_BACK_RETRYING ) ) {
|
||||
if ( op->o_conn && ( sendok & LDAP_BACK_SENDERR ) ) {
|
||||
if ( rs->sr_text == NULL ) rs->sr_text = "Proxy operation retry failed";
|
||||
send_ldap_result( op, rs );
|
||||
}
|
||||
}
|
||||
|
||||
} else if ( op->o_conn &&
|
||||
( ( ( sendok & LDAP_BACK_SENDOK ) && LDAP_ERR_OK( rs->sr_err ) )
|
||||
|| ( ( sendok & LDAP_BACK_SENDERR ) && !LDAP_ERR_OK( rs->sr_err ) ) ) )
|
||||
{
|
||||
send_ldap_result( op, rs );
|
||||
}
|
||||
@ -1235,7 +1241,7 @@ retry:;
|
||||
rs->sr_ref = save_ref;
|
||||
rs->sr_ctrls = save_ctrls;
|
||||
|
||||
return( ERR_OK( rs->sr_err ) ? LDAP_SUCCESS : rs->sr_err );
|
||||
return( LDAP_ERR_OK( rs->sr_err ) ? LDAP_SUCCESS : rs->sr_err );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -44,7 +44,7 @@ meta_back_compare( Operation *op, SlapReply *rs )
|
||||
struct berval mapped_attr = op->orc_ava->aa_desc->ad_cname;
|
||||
struct berval mapped_value = op->orc_ava->aa_value;
|
||||
int msgid;
|
||||
int do_retry = 1;
|
||||
ldap_back_send_t retrying = LDAP_BACK_RETRYING;
|
||||
LDAPControl **ctrls = NULL;
|
||||
|
||||
mc = meta_back_getconn( op, rs, &candidate, LDAP_BACK_SENDERR );
|
||||
@ -124,9 +124,9 @@ retry:;
|
||||
ctrls, NULL, &msgid );
|
||||
|
||||
rs->sr_err = meta_back_op_result( mc, op, rs, candidate, msgid,
|
||||
mt->mt_timeout[ SLAP_OP_COMPARE ], LDAP_BACK_SENDRESULT );
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE && do_retry ) {
|
||||
do_retry = 0;
|
||||
mt->mt_timeout[ SLAP_OP_COMPARE ], ( LDAP_BACK_SENDRESULT | retrying ) );
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE && retrying ) {
|
||||
retrying &= ~LDAP_BACK_RETRYING;
|
||||
if ( meta_back_retry( op, rs, &mc, candidate, LDAP_BACK_SENDERR ) ) {
|
||||
/* if the identity changed, there might be need to re-authz */
|
||||
(void)mi->mi_ldap_extra->controls_free( op, rs, &ctrls );
|
||||
|
@ -41,7 +41,7 @@ meta_back_delete( Operation *op, SlapReply *rs )
|
||||
struct berval mdn = BER_BVNULL;
|
||||
dncookie dc;
|
||||
int msgid;
|
||||
int do_retry = 1;
|
||||
ldap_back_send_t retrying = LDAP_BACK_RETRYING;
|
||||
LDAPControl **ctrls = NULL;
|
||||
|
||||
mc = meta_back_getconn( op, rs, &candidate, LDAP_BACK_SENDERR );
|
||||
@ -76,9 +76,9 @@ retry:;
|
||||
rs->sr_err = ldap_delete_ext( mc->mc_conns[ candidate ].msc_ld,
|
||||
mdn.bv_val, ctrls, NULL, &msgid );
|
||||
rs->sr_err = meta_back_op_result( mc, op, rs, candidate, msgid,
|
||||
mt->mt_timeout[ SLAP_OP_DELETE ], LDAP_BACK_SENDRESULT );
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE && do_retry ) {
|
||||
do_retry = 0;
|
||||
mt->mt_timeout[ SLAP_OP_DELETE ], ( LDAP_BACK_SENDRESULT | retrying ) );
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE && retrying ) {
|
||||
retrying &= ~LDAP_BACK_RETRYING;
|
||||
if ( meta_back_retry( op, rs, &mc, candidate, LDAP_BACK_SENDERR ) ) {
|
||||
/* if the identity changed, there might be need to re-authz */
|
||||
(void)mi->mi_ldap_extra->controls_free( op, rs, &ctrls );
|
||||
|
@ -47,7 +47,7 @@ meta_back_modify( Operation *op, SlapReply *rs )
|
||||
struct berval mapped;
|
||||
dncookie dc;
|
||||
int msgid;
|
||||
int do_retry = 1;
|
||||
ldap_back_send_t retrying = LDAP_BACK_RETRYING;
|
||||
LDAPControl **ctrls = NULL;
|
||||
|
||||
mc = meta_back_getconn( op, rs, &candidate, LDAP_BACK_SENDERR );
|
||||
@ -187,9 +187,9 @@ retry:;
|
||||
rs->sr_err = ldap_modify_ext( mc->mc_conns[ candidate ].msc_ld, mdn.bv_val,
|
||||
modv, ctrls, NULL, &msgid );
|
||||
rs->sr_err = meta_back_op_result( mc, op, rs, candidate, msgid,
|
||||
mt->mt_timeout[ SLAP_OP_MODIFY ], LDAP_BACK_SENDRESULT );
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE && do_retry ) {
|
||||
do_retry = 0;
|
||||
mt->mt_timeout[ SLAP_OP_MODIFY ], ( LDAP_BACK_SENDRESULT | retrying ) );
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE && retrying ) {
|
||||
retrying &= ~LDAP_BACK_RETRYING;
|
||||
if ( meta_back_retry( op, rs, &mc, candidate, LDAP_BACK_SENDERR ) ) {
|
||||
/* if the identity changed, there might be need to re-authz */
|
||||
(void)mi->mi_ldap_extra->controls_free( op, rs, &ctrls );
|
||||
|
@ -42,7 +42,7 @@ meta_back_modrdn( Operation *op, SlapReply *rs )
|
||||
mnewSuperior = BER_BVNULL;
|
||||
dncookie dc;
|
||||
int msgid;
|
||||
int do_retry = 1;
|
||||
ldap_back_send_t retrying = LDAP_BACK_RETRYING;
|
||||
LDAPControl **ctrls = NULL;
|
||||
struct berval newrdn = BER_BVNULL;
|
||||
|
||||
@ -139,9 +139,9 @@ retry:;
|
||||
mnewSuperior.bv_val, op->orr_deleteoldrdn,
|
||||
ctrls, NULL, &msgid );
|
||||
rs->sr_err = meta_back_op_result( mc, op, rs, candidate, msgid,
|
||||
mt->mt_timeout[ SLAP_OP_MODRDN ], LDAP_BACK_SENDRESULT );
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE && do_retry ) {
|
||||
do_retry = 0;
|
||||
mt->mt_timeout[ SLAP_OP_MODRDN ], ( LDAP_BACK_SENDRESULT | retrying ) );
|
||||
if ( rs->sr_err == LDAP_UNAVAILABLE && retrying ) {
|
||||
retrying &= ~LDAP_BACK_RETRYING;
|
||||
if ( meta_back_retry( op, rs, &mc, candidate, LDAP_BACK_SENDERR ) ) {
|
||||
/* if the identity changed, there might be need to re-authz */
|
||||
(void)mi->mi_ldap_extra->controls_free( op, rs, &ctrls );
|
||||
|
Loading…
Reference in New Issue
Block a user