]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9353 fix monitor_back_register_database for empty suffix DB
authorHoward Chu <hyc@openldap.org>
Sun, 20 Sep 2020 15:27:34 +0000 (16:27 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 21 Sep 2020 15:34:37 +0000 (15:34 +0000)
Use the correct database entry instead of the frontendDB entry

servers/slapd/back-monitor/back-monitor.h
servers/slapd/back-monitor/database.c

index b206ee9d5e6361fda5e37aa8f5b2f84174a9317f..839757679d6cd71cc9226ced272bcddd6cb4cdf2 100644 (file)
@@ -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 */
index 4db7d46388353682411fc6eee3e04679ee43324d..c1285067e1ed87b430fc5a87e3569ce94286e959 100644 (file)
@@ -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;
        }