X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=servers%2Fslapd%2Fback-monitor%2Finit.c;h=6a68be5401009ac6a438dc61857ac1ad1d8e9f4c;hb=49bd9befa4c721b4b65c153be2b4bc7a2467df65;hp=4f0bab7dd64d65e23bef9e1bf5e26cab67306d36;hpb=fbba83b20f3a645b2dc19b8ec4a0026f71f5b15c;p=openldap diff --git a/servers/slapd/back-monitor/init.c b/servers/slapd/back-monitor/init.c index 4f0bab7dd6..6a68be5401 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-2003 The OpenLDAP Foundation. + * Copyright 2001-2004 The OpenLDAP Foundation. * Portions Copyright 2001-2003 Pierangelo Masarati. * All rights reserved. * @@ -55,7 +55,7 @@ struct monitorsubsys monitor_subsys[] = { monitor_subsys_database_init, NULL, /* update */ NULL, /* create */ - NULL /* modify */ + monitor_subsys_database_modify }, { SLAPD_MONITOR_BACKEND, SLAPD_MONITOR_BACKEND_NAME, BER_BVNULL, BER_BVNULL, BER_BVNULL, @@ -136,10 +136,18 @@ struct monitorsubsys monitor_subsys[] = { monitor_subsys_time_update, NULL, /* create */ NULL, /* modify */ + }, { + SLAPD_MONITOR_OVERLAY, SLAPD_MONITOR_OVERLAY_NAME, + BER_BVNULL, BER_BVNULL, BER_BVNULL, + MONITOR_F_PERSISTENT_CH, + monitor_subsys_overlay_init, + NULL, /* update */ + NULL, /* create */ + NULL, /* modify */ }, { -1, NULL } }; -#ifdef SLAPD_MONITOR_DYNAMIC +#if SLAPD_MONITOR == SLAPD_MOD_DYNAMIC int init_module( int argc, char *argv[] ) @@ -153,7 +161,7 @@ init_module( int argc, char *argv[] ) return 0; } -#endif /* SLAPD_MONITOR_DYNAMIC */ +#endif /* SLAPD_MONITOR */ int monitor_back_initialize( @@ -223,83 +231,11 @@ monitor_back_db_init( ) { struct monitorinfo *mi; - int rc; + int i, rc; struct berval dn, ndn; struct berval bv; + const char *text; - /* - * database monitor can be defined once only - */ - if ( be_monitor ) { -#ifdef NEW_LOGGING - LDAP_LOG( OPERATION, CRIT, - "only one monitor backend is allowed\n", 0, 0, 0); -#else - Debug( LDAP_DEBUG_ANY, - "only one monitor backend is allowed\n", 0, 0, 0 ); -#endif - return( -1 ); - } - be_monitor = be; - - /* indicate system schema supported */ - be->be_flags |= SLAP_BFLAG_MONITOR; - - dn.bv_val = SLAPD_MONITOR_DN; - dn.bv_len = sizeof( SLAPD_MONITOR_DN ) - 1; - - rc = dnNormalize( 0, NULL, NULL, &dn, &ndn, NULL ); - if( rc != LDAP_SUCCESS ) { -#ifdef NEW_LOGGING - LDAP_LOG( OPERATION, CRIT, - "unable to normalize monitor DN \"%s\"\n", - SLAPD_MONITOR_DN, 0, 0 ); -#else - Debug( LDAP_DEBUG_ANY, - "unable to normalize monitor DN \"%s\"\n", - SLAPD_MONITOR_DN, 0, 0 ); -#endif - return -1; - } - - ber_dupbv( &bv, &dn ); - ber_bvarray_add( &be->be_suffix, &bv ); - ber_bvarray_add( &be->be_nsuffix, &ndn ); - - mi = ( struct monitorinfo * )ch_calloc( sizeof( struct monitorinfo ), 1 ); - if ( mi == NULL ) { -#ifdef NEW_LOGGING - LDAP_LOG( OPERATION, CRIT, - "unable to initialize monitor backend\n", 0, 0, 0 ); -#else - Debug( LDAP_DEBUG_ANY, - "unable to initialize monitor backend\n", 0, 0, 0 ); -#endif - return -1; - } - - memset( mi, 0, sizeof( struct monitorinfo ) ); - - ldap_pvt_thread_mutex_init( &mi->mi_cache_mutex ); - - be->be_private = mi; - - return 0; -} - -int -monitor_back_db_open( - BackendDB *be -) -{ - struct monitorinfo *mi = (struct monitorinfo *)be->be_private; - struct monitorsubsys *ms; - Entry *e, *e_tmp; - struct monitorentrypriv *mp; - int i, k; - char buf[ BACKMONITOR_BUFSIZE ], *end_of_line; - const char *text; - struct berval bv; struct m_s { char *name; char *schema; @@ -321,8 +257,10 @@ monitor_back_db_open( "$ postalCode " #endif "$ seeAlso " + "$ labeledURI " "$ monitoredInfo " "$ managedInfo " + "$ monitorOverlay " ") )", SLAP_OC_OPERATIONAL|SLAP_OC_HIDE, offsetof(struct monitorinfo, mi_oc_monitor) }, { "monitorServer", "( 1.3.6.1.4.1.4203.666.3.7 " @@ -440,10 +378,31 @@ monitor_back_db_open( "NO-USER-MODIFICATION " "USAGE directoryOperation )", SLAP_AT_FINAL|SLAP_AT_HIDE, offsetof(struct monitorinfo, mi_ad_monitorTimestamp) }, + { "monitorOverlay", "( 1.3.6.1.4.1.4203.666.1.27 " + "NAME 'monitorOverlay' " + "DESC 'name of overlays defined for a give database' " + "SUP monitoredInfo " + "NO-USER-MODIFICATION " + "USAGE directoryOperation )", SLAP_AT_HIDE, + offsetof(struct monitorinfo, mi_ad_monitorOverlay) }, + { "readOnly", "( 1.3.6.1.4.1.4203.666.1.31 " + "NAME 'readOnly' " + "DESC 'read/write status of a given database' " + "EQUALITY booleanMatch " + "SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 " + "SINGLE-VALUE " + "USAGE directoryOperation )", SLAP_AT_HIDE, + offsetof(struct monitorinfo, mi_ad_readOnly) }, + { "restrictedOperation", "( 1.3.6.1.4.1.4203.666.1.32 " + "NAME 'restrictedOperation' " + "DESC 'name of restricted operation for a given database' " + "SUP managedInfo )", SLAP_AT_HIDE, + offsetof(struct monitorinfo, mi_ad_restrictedOperation ) }, #ifdef INTEGRATE_CORE_SCHEMA { NULL, NULL, 0, -1 }, /* description */ { NULL, NULL, 0, -1 }, /* seeAlso */ { NULL, NULL, 0, -1 }, /* l */ + { NULL, NULL, 0, -1 }, /* labeledURI */ #endif /* INTEGRATE_CORE_SCHEMA */ { NULL, NULL, 0, -1 } }, mat_core[] = { @@ -464,43 +423,72 @@ monitor_back_db_open( "DESC 'RFC2256: locality which this object resides in' " "SUP name )", 0, offsetof(struct monitorinfo, mi_ad_l) }, + { "labeledURI", "( 1.3.6.1.4.1.250.1.57 " + "NAME 'labeledURI' " + "DESC 'RFC2079: Uniform Resource Identifier with optional label' " + "EQUALITY caseExactMatch " + "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )", 0, + offsetof(struct monitorinfo, mi_ad_labeledURI) }, { NULL, NULL, 0, -1 } }; - struct tm *tms; -#ifdef HAVE_GMTIME_R - struct tm tm_buf; -#endif - static char tmbuf[ LDAP_LUTIL_GENTIME_BUFSIZE ]; - /* - * Start + * database monitor can be defined once only */ -#ifndef HAVE_GMTIME_R - ldap_pvt_thread_mutex_lock( &gmtime_mutex ); + if ( be_monitor ) { +#ifdef NEW_LOGGING + LDAP_LOG( OPERATION, CRIT, + "only one monitor backend is allowed\n", 0, 0, 0); +#else + Debug( LDAP_DEBUG_ANY, + "only one monitor backend is allowed\n", 0, 0, 0 ); #endif -#ifdef HACK_LOCAL_TIME -# ifdef HAVE_LOCALTIME_R - tms = localtime_r( &starttime, &tm_buf ); -# else - tms = localtime( &starttime ); -# endif /* HAVE_LOCALTIME_R */ - lutil_localtime( tmbuf, sizeof(tmbuf), tms, -timezone ); -#else /* !HACK_LOCAL_TIME */ -# ifdef HAVE_GMTIME_R - tms = gmtime_r( &starttime, &tm_buf ); -# else - tms = gmtime( &starttime ); -# endif /* HAVE_GMTIME_R */ - lutil_gentime( tmbuf, sizeof(tmbuf), tms ); -#endif /* !HACK_LOCAL_TIME */ -#ifndef HAVE_GMTIME_R - ldap_pvt_thread_mutex_unlock( &gmtime_mutex ); + return( -1 ); + } + be_monitor = be; + + /* indicate system schema supported */ + SLAP_BFLAGS(be) |= SLAP_BFLAG_MONITOR; + + dn.bv_val = SLAPD_MONITOR_DN; + dn.bv_len = sizeof( SLAPD_MONITOR_DN ) - 1; + + rc = dnNormalize( 0, NULL, NULL, &dn, &ndn, NULL ); + if( rc != LDAP_SUCCESS ) { +#ifdef NEW_LOGGING + LDAP_LOG( OPERATION, CRIT, + "unable to normalize monitor DN \"%s\"\n", + SLAPD_MONITOR_DN, 0, 0 ); +#else + Debug( LDAP_DEBUG_ANY, + "unable to normalize monitor DN \"%s\"\n", + SLAPD_MONITOR_DN, 0, 0 ); #endif + return -1; + } - mi->mi_startTime.bv_val = tmbuf; - mi->mi_startTime.bv_len = strlen( tmbuf ); + ber_dupbv( &bv, &dn ); + ber_bvarray_add( &be->be_suffix, &bv ); + ber_bvarray_add( &be->be_nsuffix, &ndn ); + + mi = ( struct monitorinfo * )ch_calloc( sizeof( struct monitorinfo ), 1 ); + if ( mi == NULL ) { +#ifdef NEW_LOGGING + LDAP_LOG( OPERATION, CRIT, + "unable to initialize monitor backend\n", 0, 0, 0 ); +#else + Debug( LDAP_DEBUG_ANY, + "unable to initialize monitor backend\n", 0, 0, 0 ); +#endif + return -1; + } + + memset( mi, 0, sizeof( struct monitorinfo ) ); + ldap_pvt_thread_mutex_init( &mi->mi_cache_mutex ); + + be->be_private = mi; + #ifdef INTEGRATE_CORE_SCHEMA /* prepare for schema integration */ for ( k = 0; mat[k].name != NULL; k++ ); @@ -675,6 +663,61 @@ monitor_back_db_open( ((ObjectClass **)&(((char *)mi)[moc[i].offset]))[0] = Oc; } + return 0; +} + +int +monitor_back_db_open( + BackendDB *be +) +{ + struct monitorinfo *mi = (struct monitorinfo *)be->be_private; + struct monitorsubsys *ms; + Entry *e, *e_tmp; + struct monitorentrypriv *mp; + int i; + char buf[ BACKMONITOR_BUFSIZE ], *end_of_line; + struct berval bv; + struct tm *tms; +#ifdef HAVE_GMTIME_R + struct tm tm_buf; +#endif + static char tmbuf[ LDAP_LUTIL_GENTIME_BUFSIZE ]; + + /* + * Start + */ +#ifndef HAVE_GMTIME_R + ldap_pvt_thread_mutex_lock( &gmtime_mutex ); +#endif +#ifdef HACK_LOCAL_TIME +# ifdef HAVE_LOCALTIME_R + tms = localtime_r( &starttime, &tm_buf ); +# else + tms = localtime( &starttime ); +# endif /* HAVE_LOCALTIME_R */ + lutil_localtime( tmbuf, sizeof(tmbuf), tms, -timezone ); +#else /* !HACK_LOCAL_TIME */ +# ifdef HAVE_GMTIME_R + tms = gmtime_r( &starttime, &tm_buf ); +# else + tms = gmtime( &starttime ); +# endif /* HAVE_GMTIME_R */ + lutil_gentime( tmbuf, sizeof(tmbuf), tms ); +#endif /* !HACK_LOCAL_TIME */ +#ifndef HAVE_GMTIME_R + ldap_pvt_thread_mutex_unlock( &gmtime_mutex ); +#endif + + mi->mi_startTime.bv_val = tmbuf; + mi->mi_startTime.bv_len = strlen( tmbuf ); + + if ( BER_BVISEMPTY( &be->be_rootdn ) ) { + BER_BVSTR( &mi->mi_creatorsName, SLAPD_ANONYMOUS ); + } else { + mi->mi_creatorsName = be->be_rootdn; + } + /* * Create all the subsystem specific entries */ @@ -728,12 +771,16 @@ monitor_back_db_open( "objectClass: %s\n" "structuralObjectClass: %s\n" "cn: %s\n" + "creatorsName: %s\n" + "modifiersName: %s\n" "createTimestamp: %s\n" "modifyTimestamp: %s\n", monitor_subsys[ i ].mss_dn.bv_val, mi->mi_oc_monitorContainer->soc_cname.bv_val, mi->mi_oc_monitorContainer->soc_cname.bv_val, monitor_subsys[ i ].mss_name, + mi->mi_creatorsName.bv_val, + mi->mi_creatorsName.bv_val, mi->mi_startTime.bv_val, mi->mi_startTime.bv_val ); @@ -789,6 +836,8 @@ monitor_back_db_open( "%s: createTimestamp reflects the time this server instance was created.\n" "%s: modifyTimestamp reflects the time this server instance was last accessed.\n" #endif + "creatorsName: %s\n" + "modifiersName: %s\n" "createTimestamp: %s\n" "modifyTimestamp: %s\n", SLAPD_MONITOR_DN, @@ -800,6 +849,8 @@ monitor_back_db_open( mi->mi_ad_description->ad_cname.bv_val, mi->mi_ad_description->ad_cname.bv_val, #endif + mi->mi_creatorsName.bv_val, + mi->mi_creatorsName.bv_val, mi->mi_startTime.bv_val, mi->mi_startTime.bv_val );