mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 00:29:35 -05:00
implement search timeout when the remote server does not respond in the specified timeout
This commit is contained in:
parent
5a228fa87a
commit
cf226fb029
2 changed files with 22 additions and 5 deletions
|
|
@ -973,10 +973,8 @@ meta_back_db_config(
|
|||
t = &tv[ SLAP_OP_MODIFY ];
|
||||
} else if ( strncasecmp( argv[ c ], "compare", len ) == 0 ) {
|
||||
t = &tv[ SLAP_OP_COMPARE ];
|
||||
#if 0 /* uses timelimit instead */
|
||||
} else if ( strncasecmp( argv[ c ], "search", len ) == 0 ) {
|
||||
t = &tv[ SLAP_OP_SEARCH ];
|
||||
#endif
|
||||
/* abandon makes little sense */
|
||||
#if 0 /* not implemented yet */
|
||||
} else if ( strncasecmp( argv[ c ], "extended", len ) == 0 ) {
|
||||
|
|
|
|||
|
|
@ -665,7 +665,8 @@ meta_back_search( Operation *op, SlapReply *rs )
|
|||
metaconn_t *mc;
|
||||
struct timeval save_tv = { 0, 0 },
|
||||
tv;
|
||||
time_t stoptime = (time_t)-1;
|
||||
time_t stoptime = (time_t)(-1),
|
||||
lastres_time = slap_get_time();
|
||||
int rc = 0, sres = LDAP_SUCCESS;
|
||||
char *matched = NULL;
|
||||
int last = 0, ncandidates = 0,
|
||||
|
|
@ -861,6 +862,22 @@ getconn:;
|
|||
int gotit = 0,
|
||||
doabandon = 0,
|
||||
alreadybound = ncandidates;
|
||||
time_t curr_time = 0;
|
||||
|
||||
/* check timeout */
|
||||
if ( mi->mi_timeout[ SLAP_OP_SEARCH ]
|
||||
&& lastres_time > 0
|
||||
&& ( slap_get_time() - lastres_time ) > mi->mi_timeout[ SLAP_OP_SEARCH ] )
|
||||
{
|
||||
doabandon = 1;
|
||||
rs->sr_text = "Operation timed out";
|
||||
rc = rs->sr_err = LDAP_ADMINLIMIT_EXCEEDED;
|
||||
savepriv = op->o_private;
|
||||
op->o_private = (void *)i;
|
||||
send_ldap_result( op, rs );
|
||||
op->o_private = savepriv;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
/* check time limit */
|
||||
if ( op->ors_tlimit != SLAP_NO_LIMIT
|
||||
|
|
@ -1072,9 +1089,11 @@ really_bad:;
|
|||
continue;
|
||||
|
||||
default:
|
||||
lastres_time = slap_get_time();
|
||||
|
||||
/* only touch when activity actually took place... */
|
||||
if ( mi->mi_idle_timeout != 0 && msc->msc_time < op->o_time ) {
|
||||
msc->msc_time = op->o_time;
|
||||
if ( mi->mi_idle_timeout != 0 && msc->msc_time < lastres_time ) {
|
||||
msc->msc_time = lastres_time;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue