X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-monitor%2Finit.c;h=6a68be5401009ac6a438dc61857ac1ad1d8e9f4c;hb=49bd9befa4c721b4b65c153be2b4bc7a2467df65;hp=6173c12949a43fa90a258415105a776ffc32eed1;hpb=6daaf8824415ceddc0cb570e980e84a10482a5d3;p=openldap diff --git a/servers/slapd/back-monitor/init.c b/servers/slapd/back-monitor/init.c index 6173c12949..6a68be5401 100644 --- a/servers/slapd/back-monitor/init.c +++ b/servers/slapd/back-monitor/init.c @@ -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, @@ -231,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 */ - 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; - } - - 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; @@ -457,6 +385,19 @@ monitor_back_db_open( "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 */ @@ -491,40 +432,63 @@ monitor_back_db_open( { 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++ ); @@ -699,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 */ @@ -752,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 ); @@ -813,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, @@ -824,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 );