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