X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foverlays%2Fsssvlv.c;h=543d00f2c180b2354878121e1c73fa572d46342a;hb=b8bbe985b8a3f03c0531744d6ddcd2ee43a9db1e;hp=69b202bb4231f064d8d31193c8f372261d320ec7;hpb=ae24a1a6ac91f5313de91618abe03683798035fe;p=openldap diff --git a/servers/slapd/overlays/sssvlv.c b/servers/slapd/overlays/sssvlv.c index 69b202bb42..543d00f2c1 100644 --- a/servers/slapd/overlays/sssvlv.c +++ b/servers/slapd/overlays/sssvlv.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2009-2011 The OpenLDAP Foundation. + * Copyright 2009-2012 The OpenLDAP Foundation. * Portions copyright 2009 Symas Corporation. * All rights reserved. * @@ -436,6 +436,8 @@ static void send_list( Entry *e; LDAPControl *ctrls[2]; + rs->sr_attrs = op->ors_attrs; + /* FIXME: it may be better to just flatten the tree into * an array before doing all of this... */ @@ -515,8 +517,10 @@ range_err: } cur_node = tavl_find3( so->so_tree, sn, node_cmp, &j ); /* didn't find >= match */ - if ( j > 0 ) - cur_node = NULL; + if ( j > 0 ) { + if ( cur_node ) + cur_node = tavl_next( cur_node, TAVL_DIR_RIGHT ); + } op->o_tmpfree( sn, op->o_tmpmemctx ); if ( !cur_node ) { @@ -534,7 +538,7 @@ range_err: } for (i=0; tmp_node != cur_node; tmp_node = tavl_next( tmp_node, dir ), i++); - so->so_vlv_target = i; + so->so_vlv_target = (dir == TAVL_DIR_RIGHT) ? i+1 : so->so_nentries - i; } if ( bv.bv_val != vc->vc_value.bv_val ) op->o_tmpfree( bv.bv_val, op->o_tmpmemctx ); @@ -584,6 +588,8 @@ static void send_page( Operation *op, SlapReply *rs, sort_op *so ) Entry *e; int rc; + rs->sr_attrs = op->ors_attrs; + while ( cur_node && rs->sr_nentries < so->so_page_size ) { sort_node *sn = cur_node->avl_data;