]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9818 Duplicate substring filters correctly
authorOndřej Kuzník <ondra@mistotebe.net>
Mon, 11 Apr 2022 15:57:59 +0000 (16:57 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 12 Apr 2022 17:01:43 +0000 (17:01 +0000)
servers/slapd/overlays/translucent.c
tests/scripts/test034-translucent

index 1e4e33879cecac379dbb0e3764743df18b5a058d..a034a5859a8d222fda1f037277321ac9c663d215 100644 (file)
@@ -999,7 +999,6 @@ trans_filter_dup(Operation *op, Filter *f, AttributeName *an)
        case LDAP_FILTER_GE:
        case LDAP_FILTER_LE:
        case LDAP_FILTER_APPROX:
-       case LDAP_FILTER_SUBSTRINGS:
        case LDAP_FILTER_EXT:
                if ( !f->f_av_desc || ad_inlist( f->f_av_desc, an )) {
                        AttributeAssertion *nava;
@@ -1016,6 +1015,29 @@ trans_filter_dup(Operation *op, Filter *f, AttributeName *an)
                }
                break;
 
+       case LDAP_FILTER_SUBSTRINGS:
+               if ( !f->f_av_desc || ad_inlist( f->f_av_desc, an )) {
+                       SubstringsAssertion *nsub;
+
+                       n = op->o_tmpalloc( sizeof(Filter), op->o_tmpmemctx );
+                       n->f_choice = f->f_choice;
+
+                       nsub = op->o_tmpalloc( sizeof(SubstringsAssertion), op->o_tmpmemctx );
+                       *nsub = *f->f_sub;
+                       n->f_sub = nsub;
+
+                       if ( !BER_BVISNULL( &f->f_sub_initial ))
+                               ber_dupbv_x( &n->f_sub_initial, &f->f_sub_initial, op->o_tmpmemctx );
+
+                       ber_bvarray_dup_x( &n->f_sub_any, f->f_sub_any, op->o_tmpmemctx );
+
+                       if ( !BER_BVISNULL( &f->f_sub_final ))
+                               ber_dupbv_x( &n->f_sub_final, &f->f_sub_final, op->o_tmpmemctx );
+
+                       n->f_next = NULL;
+               }
+               break;
+
        case LDAP_FILTER_AND:
        case LDAP_FILTER_OR:
        case LDAP_FILTER_NOT: {
index 511ebeddcdca46a6ef020d1bb6962d6a083081e2..8b834d989c2453c491e80ed93385d2ba86e996ef 100755 (executable)
@@ -755,6 +755,14 @@ if test -z "$ATTR" ; then
        exit 1
 fi
 
+$LDAPSEARCH -H $URI2 -b "o=translucent" "(employeeType=consult*)" > $SEARCHOUT 2>&1
+ATTR=`grep dn: $SEARCHOUT` > $NOWHERE 2>&1
+if test -z "$ATTR" ; then
+       echo "got no result, should have found entry"
+       test $KILLSERVERS != no && kill -HUP $KILLPIDS
+       exit 1
+fi
+
 echo "Testing search: unconfigured remote filter..."
 $LDAPSEARCH -H $URI2 -b "o=translucent" "(|(employeeType=foo)(carlicense=right))" > $SEARCHOUT 2>&1