X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=servers%2Fslapd%2Fback-monitor%2Finit.c;h=94ab4b675856db93e490f9e4c79fcda392f21731;hb=ad0858dea49bd3155d4ba210ee3afd923179f217;hp=0b9e500ca79d6c8ead5627ab343ab416890d9fae;hpb=0bff9e6eb7bd48d1b78b1aa57bd0850815ff0439;p=openldap diff --git a/servers/slapd/back-monitor/init.c b/servers/slapd/back-monitor/init.c index 0b9e500ca7..94ab4b6758 100644 --- a/servers/slapd/back-monitor/init.c +++ b/servers/slapd/back-monitor/init.c @@ -1,12 +1,9 @@ /* init.c - initialize monitor backend */ /* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* - * Copyright 2001 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file - * * Copyright 2001, Pierangelo Masarati, All rights reserved. * * This work has beed deveolped for the OpenLDAP Foundation @@ -46,6 +43,7 @@ * used by many functions to add description to entries */ AttributeDescription *monitor_ad_desc = NULL; +BackendDB *be_monitor = NULL; /* * subsystem data @@ -53,15 +51,15 @@ AttributeDescription *monitor_ad_desc = NULL; struct monitorsubsys monitor_subsys[] = { { SLAPD_MONITOR_LISTENER, SLAPD_MONITOR_LISTENER_NAME, - NULL, NULL, NULL, - MONITOR_F_NONE, - NULL, /* init */ + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, + MONITOR_F_PERSISTENT_CH, + monitor_subsys_listener_init, NULL, /* update */ NULL, /* create */ NULL /* modify */ }, { SLAPD_MONITOR_DATABASE, SLAPD_MONITOR_DATABASE_NAME, - NULL, NULL, NULL, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, MONITOR_F_PERSISTENT_CH, monitor_subsys_database_init, NULL, /* update */ @@ -69,7 +67,7 @@ struct monitorsubsys monitor_subsys[] = { NULL /* modify */ }, { SLAPD_MONITOR_BACKEND, SLAPD_MONITOR_BACKEND_NAME, - NULL, NULL, NULL, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, MONITOR_F_PERSISTENT_CH, monitor_subsys_backend_init, NULL, /* update */ @@ -77,7 +75,7 @@ struct monitorsubsys monitor_subsys[] = { NULL /* modify */ }, { SLAPD_MONITOR_THREAD, SLAPD_MONITOR_THREAD_NAME, - NULL, NULL, NULL, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, MONITOR_F_NONE, monitor_subsys_thread_init, monitor_subsys_thread_update, @@ -85,7 +83,7 @@ struct monitorsubsys monitor_subsys[] = { NULL /* modify */ }, { SLAPD_MONITOR_SASL, SLAPD_MONITOR_SASL_NAME, - NULL, NULL, NULL, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, MONITOR_F_NONE, NULL, /* init */ NULL, /* update */ @@ -93,7 +91,7 @@ struct monitorsubsys monitor_subsys[] = { NULL /* modify */ }, { SLAPD_MONITOR_TLS, SLAPD_MONITOR_TLS_NAME, - NULL, NULL, NULL, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, MONITOR_F_NONE, NULL, /* init */ NULL, /* update */ @@ -101,7 +99,7 @@ struct monitorsubsys monitor_subsys[] = { NULL /* modify */ }, { SLAPD_MONITOR_CONN, SLAPD_MONITOR_CONN_NAME, - NULL, NULL, NULL, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, MONITOR_F_VOLATILE_CH, monitor_subsys_conn_init, monitor_subsys_conn_update, @@ -109,7 +107,7 @@ struct monitorsubsys monitor_subsys[] = { NULL /* modify */ }, { SLAPD_MONITOR_READW, SLAPD_MONITOR_READW_NAME, - NULL, NULL, NULL, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, MONITOR_F_NONE, NULL, /* init */ monitor_subsys_readw_update, @@ -117,7 +115,7 @@ struct monitorsubsys monitor_subsys[] = { NULL /* modify */ }, { SLAPD_MONITOR_WRITEW, SLAPD_MONITOR_WRITEW_NAME, - NULL, NULL, NULL, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, MONITOR_F_NONE, NULL, /* init */ monitor_subsys_writew_update, @@ -125,7 +123,7 @@ struct monitorsubsys monitor_subsys[] = { NULL /* modify */ }, { SLAPD_MONITOR_LOG, SLAPD_MONITOR_LOG_NAME, - NULL, NULL, NULL, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, MONITOR_F_NONE, monitor_subsys_log_init, NULL, /* update */ @@ -133,20 +131,28 @@ struct monitorsubsys monitor_subsys[] = { monitor_subsys_log_modify }, { SLAPD_MONITOR_OPS, SLAPD_MONITOR_OPS_NAME, - NULL, NULL, NULL, - MONITOR_F_NONE, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, + MONITOR_F_PERSISTENT_CH, monitor_subsys_ops_init, monitor_subsys_ops_update, NULL, /* create */ NULL, /* modify */ }, { SLAPD_MONITOR_SENT, SLAPD_MONITOR_SENT_NAME, - NULL, NULL, NULL, - MONITOR_F_NONE, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, + MONITOR_F_PERSISTENT_CH, monitor_subsys_sent_init, monitor_subsys_sent_update, NULL, /* create */ NULL, /* modify */ + }, { + SLAPD_MONITOR_TIME, SLAPD_MONITOR_TIME_NAME, + { 0L, NULL }, { 0L, NULL }, { 0L, NULL }, + MONITOR_F_PERSISTENT_CH, + monitor_subsys_time_init, + monitor_subsys_time_update, + NULL, /* create */ + NULL, /* modify */ }, { -1, NULL } }; @@ -182,7 +188,7 @@ monitor_back_initialize( bi->bi_op_modrdn = 0; bi->bi_op_add = 0; bi->bi_op_delete = 0; - bi->bi_op_abandon = monitor_back_abandon; + bi->bi_op_abandon = 0; bi->bi_extended = 0; @@ -222,14 +228,12 @@ monitor_back_db_init( char buf[1024], *end_of_line; struct berval dn, *ndn; const char *text; - struct berval val, *bv[2] = { &val, NULL }; + struct berval bv[2]; /* * database monitor can be defined once only */ - static int monitor_defined = 0; - - if ( monitor_defined ) { + if ( be_monitor ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, "only one monitor backend is allowed\n" )); @@ -240,7 +244,10 @@ monitor_back_db_init( #endif return( -1 ); } - monitor_defined++; + be_monitor = be; + + /* indicate system schema supported */ + be->be_flags |= SLAP_BFLAG_MONITOR; ndn = NULL; dn.bv_val = SLAPD_MONITOR_DN; @@ -259,7 +266,7 @@ monitor_back_db_init( return -1; } - ber_bvecadd( &be->be_suffix, ber_bvdup( &dn ) ); + ber_bvecadd( &be->be_suffix, ber_dupbv( NULL, &dn ) ); ber_bvecadd( &be->be_nsuffix, ndn ); mi = ( struct monitorinfo * )ch_calloc( sizeof( struct monitorinfo ), 1 ); @@ -283,15 +290,15 @@ monitor_back_db_init( e_tmp = NULL; for ( i = 0; monitor_subsys[ i ].mss_name != NULL; i++ ) { int len = strlen( monitor_subsys[ i ].mss_name ); - struct berval dn, *pdn; + struct berval dn; int rc; dn.bv_len = len + sizeof( "cn=" ) - 1; dn.bv_val = ch_calloc( sizeof( char ), dn.bv_len + 1 ); strcpy( dn.bv_val, "cn=" ); strcat( dn.bv_val, monitor_subsys[ i ].mss_name ); - pdn = NULL; - rc = dnPretty( NULL, &dn, &pdn ); + rc = dnPretty2( NULL, &dn, &monitor_subsys[ i ].mss_rdn ); + free( dn.bv_val ); if ( rc != LDAP_SUCCESS ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, @@ -302,35 +309,16 @@ monitor_back_db_init( "monitor RDN \"%s\" is invalid\n", dn.bv_val, 0, 0 ); #endif - free( dn.bv_val ); return( -1 ); } - free( dn.bv_val ); - monitor_subsys[ i ].mss_rdn = pdn; dn.bv_len += sizeof( SLAPD_MONITOR_DN ); /* 1 for the , */ - dn.bv_val = ch_calloc( sizeof( char ), dn.bv_len + 1 ); - strcpy( dn.bv_val , monitor_subsys[ i ].mss_rdn->bv_val ); + dn.bv_val = ch_malloc( dn.bv_len + 1 ); + strcpy( dn.bv_val , monitor_subsys[ i ].mss_rdn.bv_val ); strcat( dn.bv_val, "," SLAPD_MONITOR_DN ); - pdn = NULL; - rc = dnPretty( NULL, &dn, &pdn ); - if ( rc != LDAP_SUCCESS ) { -#ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, - "monitor DN \"%s\" is invalid\n", - dn.bv_val )); -#else - Debug( LDAP_DEBUG_ANY, - "monitor DN \"%s\" is invalid\n", - dn.bv_val, 0, 0 ); -#endif - free( dn.bv_val ); - return( -1 ); - } - monitor_subsys[ i ].mss_dn = pdn; - - pdn = NULL; - dnNormalize( NULL, &dn, &pdn ); + rc = dnPrettyNormal( NULL, &dn, &monitor_subsys[ i ].mss_dn, + &monitor_subsys[ i ].mss_ndn ); + free( dn.bv_val ); if ( rc != LDAP_SUCCESS ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, @@ -341,23 +329,14 @@ monitor_back_db_init( "monitor DN \"%s\" is invalid\n", dn.bv_val, 0, 0 ); #endif - free( dn.bv_val ); return( -1 ); } - free( dn.bv_val ); - monitor_subsys[ i ].mss_ndn = pdn; snprintf( buf, sizeof( buf ), "dn: %s\n" - "objectClass: top\n" - "objectClass: LDAPsubEntry\n" -#ifdef SLAPD_MONITORSUBENTRY - "objectClass: monitorSubEntry\n" -#else /* !SLAPD_MONITORSUBENTRY */ - "objectClass: extensibleObject\n" -#endif /* !SLAPD_MONITORSUBENTRY */ + SLAPD_MONITOR_OBJECTCLASSES "cn: %s\n", - monitor_subsys[ i ].mss_dn->bv_val, + monitor_subsys[ i ].mss_dn.bv_val, monitor_subsys[ i ].mss_name ); e = str2entry( buf ); @@ -366,11 +345,11 @@ monitor_back_db_init( #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, "unable to create '%s' entry\n", - monitor_subsys[ i ].mss_dn->bv_val )); + monitor_subsys[ i ].mss_dn.bv_val )); #else Debug( LDAP_DEBUG_ANY, "unable to create '%s' entry\n", - monitor_subsys[ i ].mss_dn->bv_val, 0, 0 ); + monitor_subsys[ i ].mss_dn.bv_val, 0, 0 ); #endif return( -1 ); } @@ -386,11 +365,11 @@ monitor_back_db_init( #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, "unable to add entry '%s' to cache\n", - monitor_subsys[ i ].mss_dn->bv_val )); + monitor_subsys[ i ].mss_dn.bv_val )); #else Debug( LDAP_DEBUG_ANY, "unable to add entry '%s' to cache\n", - monitor_subsys[ i ].mss_dn->bv_val, 0, 0 ); + monitor_subsys[ i ].mss_dn.bv_val, 0, 0 ); #endif return -1; } @@ -404,12 +383,9 @@ monitor_back_db_init( snprintf( buf, sizeof( buf ), "dn: " SLAPD_MONITOR_DN "\n" "objectClass: top\n" - "objectClass: LDAPsubEntry\n" -#ifdef SLAPD_MONITORSUBENTRY - "objectClass: monitorSubEntry\n" -#else /* !SLAPD_MONITORSUBENTRY */ + "objectClass: monitor\n" "objectClass: extensibleObject\n" -#endif /* !SLAPD_MONITORSUBENTRY */ + "structuralObjectClass: monitor\n" "cn: Monitor" ); e = str2entry( buf ); @@ -425,12 +401,13 @@ monitor_back_db_init( #endif return( -1 ); } - val.bv_val = (char *) Versionstr; + bv[1].bv_val = NULL; + bv[0].bv_val = (char *) Versionstr; end_of_line = strchr( Versionstr, '\n' ); if ( end_of_line ) { - val.bv_len = end_of_line - Versionstr; + bv[0].bv_len = end_of_line - Versionstr; } else { - val.bv_len = strlen( Versionstr ); + bv[0].bv_len = strlen( Versionstr ); } if ( attr_merge( e, monitor_ad_desc, bv ) ) { #ifdef NEW_LOGGING @@ -478,13 +455,13 @@ monitor_back_open( BackendDB *be; struct monitorsubsys *ms; struct berval dn = { sizeof(SLAPD_MONITOR_DN)-1, SLAPD_MONITOR_DN }; - struct berval *ndn = NULL; + struct berval ndn; int rc; /* * adds the monitor backend */ - rc = dnNormalize( NULL, &dn, &ndn ); + rc = dnNormalize2( NULL, &dn, &ndn ); if( rc != LDAP_SUCCESS ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, @@ -497,8 +474,8 @@ monitor_back_open( return( -1 ); } - be = select_backend( ndn , 0, 0 ); - ber_bvfree( ndn ); + be = select_backend( &ndn , 0, 0 ); + free( ndn.bv_val ); if ( be == NULL ) { #ifdef NEW_LOGGING