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 ) {
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,
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
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;
}