X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-monitor%2Finit.c;h=2b836820ec643b5abf89796ad8227bf217d15162;hb=9f2c72e5fb97a023fba73c375ff2eba343a66a3e;hp=c2b0b7ef23626d1479c011362d8a31c2b5ac0451;hpb=334099c0db09f03e71e97721d3728a87acc97bc3;p=openldap diff --git a/servers/slapd/back-monitor/init.c b/servers/slapd/back-monitor/init.c index c2b0b7ef23..2b836820ec 100644 --- a/servers/slapd/back-monitor/init.c +++ b/servers/slapd/back-monitor/init.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2001-2011 The OpenLDAP Foundation. + * Copyright 2001-2012 The OpenLDAP Foundation. * Portions Copyright 2001-2003 Pierangelo Masarati. * All rights reserved. * @@ -64,7 +64,11 @@ static const monitor_extra_t monitor_extra = { monitor_back_unregister_entry, monitor_back_unregister_entry_parent, monitor_back_unregister_entry_attrs, - monitor_back_unregister_entry_callback + monitor_back_unregister_entry_callback, + + monitor_back_entry_stub, + monitor_back_entrypriv_create, + monitor_back_register_subsys_late }; @@ -280,6 +284,7 @@ enum { LIMBO_DATABASE, LIMBO_OVERLAY_INFO, LIMBO_OVERLAY, + LIMBO_SUBSYS, LIMBO_LAST }; @@ -307,6 +312,46 @@ monitor_back_is_configured( void ) return be_monitor != NULL; } +int +monitor_back_register_subsys_late( + monitor_subsys_t *ms ) +{ + entry_limbo_t **elpp, el = { 0 }; + monitor_info_t *mi; + + if ( be_monitor == NULL ) { + Debug( LDAP_DEBUG_ANY, + "monitor_back_register_subsys_late: " + "monitor database not configured.\n", + 0, 0, 0 ); + return -1; + } + + /* everyting is ready, can register already */ + if ( monitor_subsys_is_opened() ) { + return monitor_back_register_subsys( ms ); + } + + mi = ( monitor_info_t * )be_monitor->be_private; + + + el.el_type = LIMBO_SUBSYS; + + el.el_mss = ms; + + for ( elpp = &mi->mi_entry_limbo; + *elpp; + elpp = &(*elpp)->el_next ) + /* go to last */; + + *elpp = (entry_limbo_t *)ch_malloc( sizeof( entry_limbo_t ) ); + + el.el_next = NULL; + **elpp = el; + + return 0; +} + int monitor_back_register_backend( BackendInfo *bi ) @@ -941,6 +986,10 @@ monitor_back_register_entry_attrs( monitor_info_t *mi; struct berval ndn = BER_BVNULL; char *fname = ( a == NULL ? "callback" : "attrs" ); + struct berval empty_bv = BER_BVC(""); + + if ( nbase == NULL ) nbase = &empty_bv; + if ( filter == NULL ) filter = &empty_bv; if ( be_monitor == NULL ) { char buf[ SLAP_TEXT_BUFLEN ]; @@ -2237,7 +2286,7 @@ monitor_back_db_open( /* * creates the "cn=Monitor" entry */ - e = monitor_entry_stub( NULL, NULL, &rdn, mi->mi_oc_monitorServer, mi, + e = monitor_entry_stub( NULL, NULL, &rdn, mi->mi_oc_monitorServer, NULL, NULL ); if ( e == NULL) { @@ -2318,7 +2367,7 @@ monitor_back_db_open( } e = monitor_entry_stub( &root->e_name, &root->e_nname, - &monitor_subsys[ i ]->mss_rdn, mi->mi_oc_monitorContainer, mi, + &monitor_subsys[ i ]->mss_rdn, mi->mi_oc_monitorContainer, NULL, NULL ); if ( e == NULL) { @@ -2433,6 +2482,10 @@ monitor_back_db_open( rc = monitor_back_register_overlay( el->el_be, el->el_on, el->el_ndn ); break; + case LIMBO_SUBSYS: + rc = monitor_back_register_subsys( el->el_mss ); + break; + default: assert( 0 ); }