From e07454fa891fe4d17b05d4fd87340f420b77911f Mon Sep 17 00:00:00 2001
From: Howard Chu <hyc@openldap.org>
Date: Sun, 20 Sep 2020 16:27:34 +0100
Subject: [PATCH] ITS#9353 fix monitor_back_register_database for empty suffix
 DB

Use the correct database entry instead of the frontendDB entry
---
 servers/slapd/back-monitor/back-monitor.h |  1 +
 servers/slapd/back-monitor/database.c     | 27 +++++------------------
 2 files changed, 6 insertions(+), 22 deletions(-)

diff --git a/servers/slapd/back-monitor/back-monitor.h b/servers/slapd/back-monitor/back-monitor.h
index b206ee9d5e..839757679d 100644
--- a/servers/slapd/back-monitor/back-monitor.h
+++ b/servers/slapd/back-monitor/back-monitor.h
@@ -72,6 +72,7 @@ typedef struct monitor_entry_t {
 /* NOTE: flags with 0xF0000000U mask are reserved for subsystem internals */
 
 	struct monitor_callback_t	*mp_cb;		/* callback sequence */
+	void		*mp_private;
 } monitor_entry_t;
 
 struct entry_limbo_t;			/* in init.c */
diff --git a/servers/slapd/back-monitor/database.c b/servers/slapd/back-monitor/database.c
index 4db7d46388..c1285067e1 100644
--- a/servers/slapd/back-monitor/database.c
+++ b/servers/slapd/back-monitor/database.c
@@ -345,6 +345,7 @@ monitor_subsys_database_init_one(
 	mp->mp_info = ms;
 	mp->mp_flags = ms->mss_flags
 		| MONITOR_F_SUB;
+	mp->mp_private = be;
 
 	if ( monitor_cache_add( mi, e ) ) {
 		Debug( LDAP_DEBUG_ANY,
@@ -446,31 +447,13 @@ monitor_back_register_database_and_overlay(
 
 	mp = ( monitor_entry_t * )e_database->e_private;
 	for ( i = -1, ep = &mp->mp_children; *ep; i++ ) {
-		Attribute	*a;
-
-		a = attr_find( (*ep)->e_attrs, slap_schema.si_ad_namingContexts );
-		if ( a ) {
-			int		j, k;
-
-			/* FIXME: RFC 4512 defines namingContexts without an
-			 *        equality matching rule, making comparisons
-			 *        like this one tricky.  We use a_vals and
-			 *        be_suffix instead for now.
-			 */
-			for ( j = 0; !BER_BVISNULL( &a->a_vals[ j ] ); j++ ) {
-				for ( k = 0; !BER_BVISNULL( &be->be_suffix[ k ] ); k++ ) {
-					if ( dn_match( &a->a_vals[ j ],
-					               &be->be_suffix[ k ] ) ) {
-						rc = 0;
-						goto done;
-					}
-				}
-			}
-		}
-
 		mp = ( monitor_entry_t * )(*ep)->e_private;
 
 		assert( mp != NULL );
+		if ( mp->mp_private == be->bd_self ) {
+			rc = 0;
+			goto done;
+		}
 		ep = &mp->mp_next;
 	}
 
-- 
GitLab