> Don't send HTML emails to the ITS.Apologies.
> 
> I'm unable to reproduce the error you're talking about. Please provide a 
> config that demonstrates the error, and the complete ldapsearch command 
> invocation.
The original submission contained the ldapsearch command:
ldapsearch -h localhost -x -b "..........." -D ".........." -w ....  -E
\!sss=mail:caseIgnoreIA5Match -E \!vlv=0/10/0/10

(I just suppressed the bind dn, base dn and password)
The important aspect of the search command is that it is doing a 
server-sidesort on the mail attribute, is asking for a virtual list view, but 
is letting the size default to zero (which should mean unlimited).
> 
> Your patch cannot be correct since limits_check() is already called by the 
> frontend at the beginning of every search operation.

Not in my experience. 
As far as I can see limits_check() is called only in fe_op_search() in 
search.c, and when debugging I found that fe_op_search() was being called from 
overlay_op_walk() in backover.c.

When the ldapsearch command is run, it sends a search request to slapd, which 
returns the first 11 records found, in order of the mail attribute. Then 
ldapsearch prompts  
 Press [before/after(/offset/count|:value)] Enter for the next window.
and on hitting enter ldapsearch sends the next request to slapd. This time the 
request gets handled by sssvlv_op_search() before fe_op_search() is called, 
because there is an active session.
int overlay_op_walk(    Operation *op,  SlapReply *rs,  slap_operation_t which, 
slap_overinfo *oi,      slap_overinst *on){     BI_op_bind **func;      int rc 
= SLAP_CB_CONTINUE;
        for (; on; on=on->on_next ) {           func = &on->on_bi.bi_op_bind;   
        if ( func[which] ) {                    op->o_bd->bd_info = 
(BackendInfo *)on;                  rc = func[which]( op, rs ); /* <--- 
sssvlv_op_search() called here */                   if ( rc != SLAP_CB_CONTINUE 
) break;            }       }       if ( rc == SLAP_CB_BYPASS )             rc 
= SLAP_CB_CONTINUE;
        func = &oi->oi_orig->bi_op_bind;        if ( func[which] && rc == 
SLAP_CB_CONTINUE ) {          op->o_bd->bd_info = oi->oi_orig;                
rc = func[which]( op, rs ); /* <--- fe_op_search() called here */       }
Chris                                     


Reply via email to