]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9426 dynlist: don't add unexpanded groups at end of search
authorHoward Chu <hyc@openldap.org>
Tue, 15 Dec 2020 22:55:47 +0000 (22:55 +0000)
committerHoward Chu <hyc@openldap.org>
Tue, 15 Dec 2020 22:55:47 +0000 (22:55 +0000)
if pagedResults is in use

doc/man/man5/slapo-dynlist.5
servers/slapd/overlays/dynlist.c

index a6f2d6af1606532d6ea9aee74951aa9d5da08207..ad73e327bd5e920d5c050902780564edcae1a6f8 100644 (file)
@@ -263,6 +263,11 @@ The
 .BR slapo\-dynlist (5)
 overlay supports dynamic configuration via
 .BR back-config .
+
+.SH BUGS
+Filtering on dynamic groups may return incomplete results if the
+search operation uses the \fIpagedResults\fP control.
+
 .SH ACKNOWLEDGEMENTS
 .P
 This module was written in 2004 by Pierangelo Masarati for SysNet s.n.c.
index 9519f971995062b1e484a0bc1bf4271afc0ac052..309c9bbf504b58b881e320100b5d3153c7c3f5e1 100644 (file)
@@ -350,6 +350,7 @@ dynlist_urlmembers( Operation *op, dynlist_name_t *dyn, slap_callback *sc )
        o.ors_tlimit = SLAP_NO_LIMIT;
        o.ors_slimit = SLAP_NO_LIMIT;
        o.ors_attrs = NULL;
+       memset( o.o_ctrlflag, 0, sizeof( o.o_ctrlflag ));
        o.o_callback = sc;
 
        for (i=0; i<dyn->dy_numuris; i++) {
@@ -547,6 +548,7 @@ dynlist_prepare_entry( Operation *op, SlapReply *rs, dynlist_info_t *dli, dynlis
        o.ors_limit = NULL;
        o.ors_tlimit = SLAP_NO_LIMIT;
        o.ors_slimit = SLAP_NO_LIMIT;
+       memset( o.o_ctrlflag, 0, sizeof( o.o_ctrlflag ));
 
        for ( url = a->a_nvals; !BER_BVISNULL( url ); url++ ) {
                LDAPURLDesc     *lud = NULL;
@@ -1534,6 +1536,9 @@ dynlist_search2resp( Operation *op, SlapReply *rs )
                SlapReply r = *rs;
                Filter *f = ds->ds_origfilter ? ds->ds_origfilter : op->ors_filter;
 
+               if ( get_pagedresults( op ) > SLAP_CONTROL_IGNORED )
+                       return SLAP_CB_CONTINUE;
+
                /* Check for any unexpanded dynamic group entries that weren't picked up
                 * by the original search filter.
                 */
@@ -1677,6 +1682,7 @@ dynlist_search( Operation *op, SlapReply *rs )
        sc->sc_private = (void *)(sc+1);
        ds = sc->sc_private;
 
+       memset( o.o_ctrlflag, 0, sizeof( o.o_ctrlflag ));
        o.o_managedsait = SLAP_CONTROL_CRITICAL;
 
        /* Are we using memberOf, and does it affect this request? */