]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9880 slapo-accesslog: fix reqStart ordering filter
authorHoward Chu <hyc@openldap.org>
Tue, 22 Nov 2022 19:46:21 +0000 (19:46 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 9 Jan 2023 18:38:15 +0000 (18:38 +0000)
Same as ITS#9358 but for ordering matching rule, not just equality

servers/slapd/at.c
servers/slapd/overlays/accesslog.c

index 63a9e9c4518c45eb6155c8560870460a1d54fc0a..99efba65d80bafdd83c4e2b4095bcb0b53b6d9f9 100644 (file)
@@ -274,6 +274,17 @@ at_clean( AttributeType *a )
                }
        }
 
+       if ( a->sat_ordering ) {
+               MatchingRule    *mr;
+
+               mr = mr_find( a->sat_ordering->smr_oid );
+               assert( mr != NULL );
+               if ( mr != a->sat_ordering ) {
+                       ch_free( a->sat_ordering );
+                       a->sat_ordering = NULL;
+               }
+       }
+
        assert( a->sat_syntax != NULL );
        if ( a->sat_syntax != NULL ) {
                Syntax          *syn;
index cbdaa53b51b98869c8d5e19c5dc32f8f12ec0151..772b584917d381a7ef205f18525c59ee51de3fd6 100644 (file)
@@ -2668,7 +2668,7 @@ int accesslog_initialize()
 {
        int i, rc;
        Syntax *rdnTimestampSyntax;
-       MatchingRule *rdnTimestampMatch;
+       MatchingRule *rdnTimestampMatch, *rdnTimestampOrdering;
 
        accesslog.on_bi.bi_type = "accesslog";
        accesslog.on_bi.bi_db_init = accesslog_db_init;
@@ -2732,21 +2732,26 @@ int accesslog_initialize()
 
        /* Inject custom normalizer for reqStart/reqEnd */
        rdnTimestampMatch = ch_malloc( sizeof( MatchingRule ));
+       rdnTimestampOrdering = ch_malloc( sizeof( MatchingRule ));
        rdnTimestampSyntax = ch_malloc( sizeof( Syntax ));
        *rdnTimestampMatch = *ad_reqStart->ad_type->sat_equality;
        rdnTimestampMatch->smr_normalize = rdnTimestampNormalize;
+       *rdnTimestampOrdering = *ad_reqStart->ad_type->sat_ordering;
+       rdnTimestampOrdering->smr_normalize = rdnTimestampNormalize;
        *rdnTimestampSyntax = *ad_reqStart->ad_type->sat_syntax;
        rdnTimestampSyntax->ssyn_validate = rdnTimestampValidate;
        ad_reqStart->ad_type->sat_equality = rdnTimestampMatch;
+       ad_reqStart->ad_type->sat_ordering = rdnTimestampOrdering;
        ad_reqStart->ad_type->sat_syntax = rdnTimestampSyntax;
 
        rdnTimestampMatch = ch_malloc( sizeof( MatchingRule ));
+       rdnTimestampOrdering = ch_malloc( sizeof( MatchingRule ));
        rdnTimestampSyntax = ch_malloc( sizeof( Syntax ));
        *rdnTimestampMatch = *ad_reqStart->ad_type->sat_equality;
-       rdnTimestampMatch->smr_normalize = rdnTimestampNormalize;
+       *rdnTimestampOrdering = *ad_reqStart->ad_type->sat_ordering;
        *rdnTimestampSyntax = *ad_reqStart->ad_type->sat_syntax;
-       rdnTimestampSyntax->ssyn_validate = rdnTimestampValidate;
        ad_reqEnd->ad_type->sat_equality = rdnTimestampMatch;
+       ad_reqEnd->ad_type->sat_ordering = rdnTimestampOrdering;
        ad_reqEnd->ad_type->sat_syntax = rdnTimestampSyntax;
 
        for ( i=0; locs[i].ot; i++ ) {