diff --git a/CHANGES b/CHANGES index 7ed7308b70ad0dff6da23c9d52f6f51767906c43..2eb1186921e764e2fab1c37316d228389ea36511 100644 --- a/CHANGES +++ b/CHANGES @@ -24,6 +24,7 @@ OpenLDAP 2.4.12 Engineering Fixed slapo-constraint string termination (ITS#5609) Fixed slapo-memberof internal operations DN (ITS#5622) Fixed slapo-pcache attrset crash (ITS#5665) + Fixed slapo-pcache caching with invalid schema (ITS#5680) Fixed slapo-rwm callback cleanup (ITS#5601) Fixed slapo-rwm attr mapping and merging (ITS#5624) Fixed slapo-rwm objectClass filtering (ITS#5647) diff --git a/servers/slapd/overlays/pcache.c b/servers/slapd/overlays/pcache.c index d73835662f6ef19f95a83e2907bc633721b65e0c..22b8355865071a9f1ba995656a1cb6415b219054 100644 --- a/servers/slapd/overlays/pcache.c +++ b/servers/slapd/overlays/pcache.c @@ -1961,6 +1961,14 @@ pcache_op_cleanup( Operation *op, SlapReply *rs ) { * limit, empty the chain and ignore the rest. */ if ( !si->over ) { + /* check if the entry contains undefined + * attributes/objectClasses (ITS#5680) */ + if ( test_filter( op, rs->sr_entry, si->query.filter ) != LDAP_COMPARE_TRUE ) { + Debug( pcache_debug, "%s: query not cacheable because of schema issues in DN \"%s\"\n", + op->o_log_prefix, rs->sr_entry->e_name.bv_val, 0 ); + goto over; + } + if ( si->count < si->max ) { si->count++; e = entry_dup( rs->sr_entry ); @@ -1969,6 +1977,7 @@ pcache_op_cleanup( Operation *op, SlapReply *rs ) { si->tail = e; } else { +over:; si->over = 1; si->count = 0; for (;si->head; si->head=e) {