From 797cffb9b3eac5e58ebc360a75c4c9823e967924 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 12 Jan 2006 08:40:09 +0000 Subject: [PATCH] Add monitor_entry_stub() for creating entries. Fix conn peer/local mismatch. --- servers/slapd/back-monitor/back-monitor.h | 1 + servers/slapd/back-monitor/backend.c | 38 +-- servers/slapd/back-monitor/conn.c | 287 +++++++----------- servers/slapd/back-monitor/database.c | 82 ++--- servers/slapd/back-monitor/entry.c | 51 ++++ servers/slapd/back-monitor/init.c | 87 ++---- servers/slapd/back-monitor/listener.c | 38 +-- servers/slapd/back-monitor/operation.c | 34 +-- servers/slapd/back-monitor/overlay.c | 36 +-- .../slapd/back-monitor/proto-back-monitor.h | 10 + servers/slapd/back-monitor/rww.c | 24 +- servers/slapd/back-monitor/sent.c | 26 +- servers/slapd/back-monitor/thread.c | 78 ++--- servers/slapd/back-monitor/time.c | 53 +--- 14 files changed, 301 insertions(+), 544 deletions(-) diff --git a/servers/slapd/back-monitor/back-monitor.h b/servers/slapd/back-monitor/back-monitor.h index 32af66620a..058dceca16 100644 --- a/servers/slapd/back-monitor/back-monitor.h +++ b/servers/slapd/back-monitor/back-monitor.h @@ -83,6 +83,7 @@ typedef struct monitor_info_t { */ struct berval mi_startTime; /* don't free it! */ struct berval mi_creatorsName; /* don't free it! */ + struct berval mi_ncreatorsName; /* don't free it! */ /* * Specific schema entities diff --git a/servers/slapd/back-monitor/backend.c b/servers/slapd/back-monitor/backend.c index 89e346fc43..04c21f2734 100644 --- a/servers/slapd/back-monitor/backend.c +++ b/servers/slapd/back-monitor/backend.c @@ -79,32 +79,12 @@ monitor_subsys_backend_init( i++; - snprintf( buf, sizeof( buf ), - "dn: cn=Backend %d,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Backend %d\n" - "%s: %s\n" - "%s: %s\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - i, - ms->mss_dn.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - i, - mi->mi_ad_monitoredInfo->ad_cname.bv_val, - bi->bi_type, - mi->mi_ad_monitorRuntimeConfig->ad_cname.bv_val, - bi->bi_cf_ocs == NULL ? "FALSE" : "TRUE", - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + bv.bv_len = snprintf( buf, sizeof( buf ), "cn=Backend %d", i ); + bv.bv_val = buf; + + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); + if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_backend_init: " @@ -114,9 +94,15 @@ monitor_subsys_backend_init( } ber_str2bv( bi->bi_type, 0, 0, &bv ); + attr_merge_normalize_one( e, mi->mi_ad_monitoredInfo, + &bv, NULL ); attr_merge_normalize_one( e_backend, mi->mi_ad_monitoredInfo, &bv, NULL ); + attr_merge_normalize_one( e, mi->mi_ad_monitorRuntimeConfig, + bi->bi_cf_ocs == NULL ? (struct berval *)&slap_false_bv : + (struct berval *)&slap_true_bv, NULL ); + if ( bi->bi_controls ) { int j; diff --git a/servers/slapd/back-monitor/conn.c b/servers/slapd/back-monitor/conn.c index d8686e8ad0..24c68396eb 100644 --- a/servers/slapd/back-monitor/conn.c +++ b/servers/slapd/back-monitor/conn.c @@ -79,24 +79,10 @@ monitor_subsys_conn_init( /* * Total conns */ - snprintf( buf, sizeof( buf ), - "dn: cn=Total,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Total\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - ms->mss_dn.bv_val, - mi->mi_oc_monitorCounterObject->soc_cname.bv_val, - mi->mi_oc_monitorCounterObject->soc_cname.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); + BER_BVSTR( &bv, "cn=Total" ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitorCounterObject, mi, NULL, NULL ); - e = str2entry( buf ); if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_conn_init: " @@ -132,24 +118,10 @@ monitor_subsys_conn_init( /* * Current conns */ - snprintf( buf, sizeof( buf ), - "dn: cn=Current,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Current\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - ms->mss_dn.bv_val, - mi->mi_oc_monitorCounterObject->soc_cname.bv_val, - mi->mi_oc_monitorCounterObject->soc_cname.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + BER_BVSTR( &bv, "cn=Current" ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitorCounterObject, mi, NULL, NULL ); + if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_conn_init: " @@ -252,17 +224,20 @@ conn_create( monitor_subsys_t *ms ) { monitor_entry_t *mp; - struct tm *ltm; + struct tm *tm; char buf[ BACKMONITOR_BUFSIZE ]; char buf2[ LDAP_LUTIL_GENTIME_BUFSIZE ]; char buf3[ LDAP_LUTIL_GENTIME_BUFSIZE ]; + struct berval bv, ctmbv, mtmbv, bv2, bv3; + struct berval bv_unknown= BER_BVC("unknown"); + Entry *e; - struct tm *ctm; +#ifdef HACK_LOCAL_TIME char ctmbuf[ LDAP_LUTIL_GENTIME_BUFSIZE ]; - struct tm *mtm; char mtmbuf[ LDAP_LUTIL_GENTIME_BUFSIZE ]; +#endif #ifdef HAVE_GMTIME_R struct tm tm_buf; #endif /* HAVE_GMTIME_R */ @@ -273,67 +248,69 @@ conn_create( #ifndef HAVE_GMTIME_R ldap_pvt_thread_mutex_lock( &gmtime_mutex ); #endif + +#ifdef HAVE_GMTIME_R + tm = gmtime_r( &c->c_starttime, &tm_buf ); +#else + tm = gmtime( &c->c_starttime ); +#endif + bv2.bv_len = lutil_gentime( buf2, sizeof( buf2 ), tm ); + bv2.bv_val = buf2; #ifdef HACK_LOCAL_TIME # ifdef HAVE_LOCALTIME_R - ctm = localtime_r( &c->c_starttime, &tm_buf ); - lutil_localtime( ctmbuf, sizeof( ctmbuf ), ctm, -timezone ); - mtm = localtime_r( &c->c_activitytime, &tm_buf ); - lutil_localtime( mtmbuf, sizeof( mtmbuf ), mtm, -timezone ); + tm = localtime_r( &c->c_starttime, &tm_buf ); # else - ctm = localtime( &c->c_starttime ); - lutil_localtime( ctmbuf, sizeof( ctmbuf ), ctm, -timezone ); - mtm = localtime( &c->c_activitytime ); - lutil_localtime( mtmbuf, sizeof( mtmbuf ), mtm, -timezone ); -# endif /* HAVE_LOCALTIME_R */ + tm = localtime( &c->c_starttime ); +# endif + ctmbv.bv_len = lutil_localtime( ctmbuf, sizeof( ctmbuf ), tm, -timezone ); + ctmbv.bv_val = ctmbuf; #else /* !HACK_LOCAL_TIME */ -# ifdef HAVE_GMTIME_R - ctm = gmtime_r( &c->c_starttime, &tm_buf ); - lutil_gentime( ctmbuf, sizeof( ctmbuf ), ctm ); - mtm = gmtime_r( &c->c_activitytime, &tm_buf ); - lutil_gentime( mtmbuf, sizeof( mtmbuf ), mtm ); -# else - ctm = gmtime( &c->c_starttime ); - lutil_gentime( ctmbuf, sizeof( ctmbuf ), ctm ); - mtm = gmtime( &c->c_activitytime ); - lutil_gentime( mtmbuf, sizeof( mtmbuf ), mtm ); -# endif /* HAVE_GMTIME_R */ -#endif /* !HACK_LOCAL_TIME */ -#ifndef HAVE_GMTIME_R - ldap_pvt_thread_mutex_unlock( &gmtime_mutex ); -#endif - -#ifndef HAVE_GMTIME_R - ldap_pvt_thread_mutex_lock( &gmtime_mutex ); + ctmbv = bv2; #endif #ifdef HAVE_GMTIME_R - ltm = gmtime_r( &c->c_starttime, &tm_buf ); + tm = gmtime_r( &c->c_activitytime, &tm_buf ); #else - ltm = gmtime( &c->c_starttime ); + tm = gmtime( &c->c_activitytime ); #endif - lutil_gentime( buf2, sizeof( buf2 ), ltm ); - -#ifdef HAVE_GMTIME_R - ltm = gmtime_r( &c->c_activitytime, &tm_buf ); -#else - ltm = gmtime( &c->c_activitytime ); + bv3.bv_len = lutil_gentime( buf3, sizeof( buf3 ), tm ); + bv3.bv_val = buf3; +#ifdef HACK_LOCAL_TIME +# ifdef HAVE_LOCALTIME_R + tm = localtime_r( &c->c_activitytime, &tm_buf ); +# else + tm = localtime( &c->c_activitytime ); +# endif /* HAVE_LOCALTIME_R */ + mtmbv.bv_len = lutil_localtime( mtmbuf, sizeof( mtmbuf ), tm, -timezone ); + mtmbv.bv_val = mtmbuf; +#else /* !HACK_LOCAL_TIME */ + mtmbv = bv3; #endif - lutil_gentime( buf3, sizeof( buf3 ), ltm ); #ifndef HAVE_GMTIME_R ldap_pvt_thread_mutex_unlock( &gmtime_mutex ); -#endif /* HAVE_GMTIME_R */ +#endif - snprintf( buf, sizeof( buf ), - "dn: cn=Connection %ld,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Connection %ld\n" + bv.bv_len = snprintf( buf, sizeof( buf ), + "cn=Connection %ld", c->c_connid ); + bv.bv_val = buf; + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitorConnection, mi, &ctmbv, &mtmbv ); + + if ( e == NULL) { + Debug( LDAP_DEBUG_ANY, + "monitor_subsys_conn_create: " + "unable to create entry " + "\"cn=Connection %ld,%s\"\n", + c->c_connid, + ms->mss_dn.bv_val, 0 ); + return( -1 ); + } #ifdef MONITOR_LEGACY_CONN - /* NOTE: this will disappear, as the exploded data - * has been moved to dedicated attributes */ - "%s: " + /* NOTE: this will disappear, as the exploded data + * has been moved to dedicated attributes */ + bv.bv_len = snprintf( buf, sizeof( buf ), "%ld " ": %ld " ": %ld/%ld/%ld/%ld " @@ -345,44 +322,7 @@ conn_create( ": %s " ": %s " ": %s " - ": %s\n" -#endif /* MONITOR_LEGACY_CONN */ - - "%s: %lu\n" - "%s: %ld\n" - - "%s: %ld\n" - "%s: %ld\n" - "%s: %ld\n" - "%s: %ld\n" - - "%s: %ld\n" - "%s: %ld\n" - "%s: %ld\n" - - "%s: %s%s%s%s%s%s\n" - - "%s: %s\n" - - "%s: %s\n" - "%s: %s\n" - "%s: %s\n" - "%s: %s\n" - - "%s: %s\n" - "%s: %s\n" - - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - c->c_connid, ms->mss_dn.bv_val, - mi->mi_oc_monitorConnection->soc_cname.bv_val, - mi->mi_oc_monitorConnection->soc_cname.bv_val, - c->c_connid, - -#ifdef MONITOR_LEGACY_CONN - mi->mi_ad_monitoredInfo->ad_cname.bv_val, + ": %s", c->c_connid, (long) c->c_protocol, c->c_n_ops_received, c->c_n_ops_executing, @@ -406,72 +346,67 @@ conn_create( c->c_sock_name.bv_val, buf2, - buf3, + buf3 ); + attr_merge_one( e, mi->mi_ad_monitoredInfo, &bv, NULL ); #endif /* MONITOR_LEGACY_CONN */ - mi->mi_ad_monitorConnectionNumber->ad_cname.bv_val, - c->c_connid, - mi->mi_ad_monitorConnectionProtocol->ad_cname.bv_val, - (long)c->c_protocol, - - mi->mi_ad_monitorConnectionOpsReceived->ad_cname.bv_val, - c->c_n_ops_received, - mi->mi_ad_monitorConnectionOpsExecuting->ad_cname.bv_val, - c->c_n_ops_executing, - mi->mi_ad_monitorConnectionOpsPending->ad_cname.bv_val, - c->c_n_ops_pending, - mi->mi_ad_monitorConnectionOpsCompleted->ad_cname.bv_val, - c->c_n_ops_completed, - - mi->mi_ad_monitorConnectionGet->ad_cname.bv_val, - c->c_n_get, - mi->mi_ad_monitorConnectionRead->ad_cname.bv_val, - c->c_n_read, - mi->mi_ad_monitorConnectionWrite->ad_cname.bv_val, - c->c_n_write, - - mi->mi_ad_monitorConnectionMask->ad_cname.bv_val, + bv.bv_len = snprintf( buf, sizeof( buf ), "%lu", c->c_connid ); + attr_merge_one( e, mi->mi_ad_monitorConnectionNumber, &bv, NULL ); + + bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_protocol ); + attr_merge_one( e, mi->mi_ad_monitorConnectionProtocol, &bv, NULL ); + + bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_received ); + attr_merge_one( e, mi->mi_ad_monitorConnectionOpsReceived, &bv, NULL ); + + bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_executing ); + attr_merge_one( e, mi->mi_ad_monitorConnectionOpsExecuting, &bv, NULL ); + + bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_pending ); + attr_merge_one( e, mi->mi_ad_monitorConnectionOpsPending, &bv, NULL ); + + bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_completed ); + attr_merge_one( e, mi->mi_ad_monitorConnectionOpsCompleted, &bv, NULL ); + + bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_get ); + attr_merge_one( e, mi->mi_ad_monitorConnectionGet, &bv, NULL ); + + bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_read ); + attr_merge_one( e, mi->mi_ad_monitorConnectionRead, &bv, NULL ); + + bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_write ); + attr_merge_one( e, mi->mi_ad_monitorConnectionWrite, &bv, NULL ); + + bv.bv_len = snprintf( buf, sizeof( buf ), "%s%s%s%s%s%s", c->c_currentber ? "r" : "", c->c_writewaiter ? "w" : "", LDAP_STAILQ_EMPTY( &c->c_ops ) ? "" : "x", LDAP_STAILQ_EMPTY( &c->c_pending_ops ) ? "" : "p", connection_state2str( c->c_conn_state ), - c->c_sasl_bind_in_progress ? "S" : "", - - mi->mi_ad_monitorConnectionAuthzDN->ad_cname.bv_val, - c->c_dn.bv_len ? c->c_dn.bv_val : SLAPD_ANONYMOUS, + c->c_sasl_bind_in_progress ? "S" : "" ); + attr_merge_one( e, mi->mi_ad_monitorConnectionMask, &bv, NULL ); - /* NOTE: client connections leave the c_peer_* fields NULL */ - mi->mi_ad_monitorConnectionListener->ad_cname.bv_val, - c->c_listener_url.bv_val, - mi->mi_ad_monitorConnectionPeerDomain->ad_cname.bv_val, - BER_BVISNULL( &c->c_peer_domain ) ? "unknown" : c->c_peer_domain.bv_val, - mi->mi_ad_monitorConnectionLocalAddress->ad_cname.bv_val, - BER_BVISNULL( &c->c_peer_name ) ? "unknown" : c->c_peer_name.bv_val, - mi->mi_ad_monitorConnectionPeerAddress->ad_cname.bv_val, - c->c_sock_name.bv_val, + attr_merge_one( e, mi->mi_ad_monitorConnectionAuthzDN, + &c->c_dn, &c->c_ndn ); - mi->mi_ad_monitorConnectionStartTime->ad_cname.bv_val, - buf2, - mi->mi_ad_monitorConnectionActivityTime->ad_cname.bv_val, - buf3, + /* NOTE: client connections leave the c_peer_* fields NULL */ + attr_merge_one( e, mi->mi_ad_monitorConnectionListener, + &c->c_listener_url, NULL ); - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - ctmbuf, - mtmbuf ); - - e = str2entry( buf ); + attr_merge_one( e, mi->mi_ad_monitorConnectionPeerDomain, + BER_BVISNULL( &c->c_peer_domain ) ? &bv_unknown : &c->c_peer_domain, + NULL ); - if ( e == NULL) { - Debug( LDAP_DEBUG_ANY, - "monitor_subsys_conn_create: " - "unable to create entry " - "\"cn=Connection %ld,%s\" entry\n", - c->c_connid, - ms->mss_dn.bv_val, 0 ); - return( -1 ); - } + attr_merge_one( e, mi->mi_ad_monitorConnectionPeerAddress, + BER_BVISNULL( &c->c_peer_name ) ? &bv_unknown : &c->c_peer_name, + NULL ); + + attr_merge_one( e, mi->mi_ad_monitorConnectionLocalAddress, + &c->c_sock_name, NULL ); + + attr_merge_one( e, mi->mi_ad_monitorConnectionStartTime, &bv2, NULL ); + + attr_merge_one( e, mi->mi_ad_monitorConnectionActivityTime, &bv3, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { diff --git a/servers/slapd/back-monitor/database.c b/servers/slapd/back-monitor/database.c index 91747ab3e3..a5485577e6 100644 --- a/servers/slapd/back-monitor/database.c +++ b/servers/slapd/back-monitor/database.c @@ -186,6 +186,7 @@ monitor_subsys_database_init( slap_overinfo *oi = NULL; BackendInfo *bi, *bi2; Entry *e; + struct berval bv; i++; @@ -201,32 +202,12 @@ monitor_subsys_database_init( continue; } - snprintf( buf, sizeof( buf ), - "dn: cn=Database %d,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Database %d\n" - "%s: %s\n" - "%s: %s\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - i, - ms->mss_dn.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - i, - mi->mi_ad_monitoredInfo->ad_cname.bv_val, - bi->bi_type, - mi->mi_ad_monitorIsShadow->ad_cname.bv_val, - SLAP_SHADOW( be ) ? slap_true_bv.bv_val : slap_false_bv.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + bv.bv_len = snprintf( buf, sizeof( buf ), + "cn=Database %d", i ); + bv.bv_val = buf; + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); + if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_database_init: " @@ -234,7 +215,13 @@ monitor_subsys_database_init( i, ms->mss_dn.bv_val, 0 ); return( -1 ); } - + + ber_str2bv( bi->bi_type, 0, 0, &bv ); + attr_merge_one( e, mi->mi_ad_monitoredInfo, &bv, NULL ); + attr_merge_one( e, mi->mi_ad_monitorIsShadow, + SLAP_SHADOW( be ) ? (struct berval *)&slap_true_bv : + (struct berval *)&slap_false_bv, NULL ); + if ( SLAP_MONITOR( be ) ) { attr_merge( e, slap_schema.si_ad_monitorContext, be->be_suffix, be->be_nsuffix ); @@ -465,33 +452,12 @@ monitor_subsys_database_init( } assert( on2 != NULL ); - snprintf( buf, sizeof( buf ), - "dn: cn=Overlay %d,cn=Database %d,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Overlay %d\n" - "%s: %s\n" - "seeAlso: cn=Overlay %d,%s\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - o, - i, - ms->mss_dn.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - o, - mi->mi_ad_monitoredInfo->ad_cname.bv_val, - on->on_bi.bi_type, - j, - ms_overlay->mss_dn.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e_overlay = str2entry( buf ); + bv.bv_len = snprintf( buf, sizeof( buf ), "cn=Overlay %d", o ); + bv.bv_val = buf; + + e_overlay = monitor_entry_stub( &e->e_name, &e->e_nname, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); + if ( e_overlay == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_database_init: " @@ -500,6 +466,14 @@ monitor_subsys_database_init( o, i, ms->mss_dn.bv_val ); return( -1 ); } + ber_str2bv( on->on_bi.bi_type, 0, 0, &bv ); + attr_merge_one( e, mi->mi_ad_monitoredInfo, &bv, NULL ); + + bv.bv_len = snprintf( buf, sizeof( buf ), "cn=Overlay %d,%s", + j, ms_overlay->mss_dn.bv_val ); + bv.bv_val = buf; + attr_merge_normalize_one( e, slap_schema.si_ad_seeAlso, + &bv, NULL ); mp_overlay = monitor_entrypriv_create(); if ( mp_overlay == NULL ) { diff --git a/servers/slapd/back-monitor/entry.c b/servers/slapd/back-monitor/entry.c index 6901e4455e..6ccdb9abdb 100644 --- a/servers/slapd/back-monitor/entry.c +++ b/servers/slapd/back-monitor/entry.c @@ -165,3 +165,54 @@ monitor_entrypriv_create( void ) return mp; } + +Entry * +monitor_entry_stub( + struct berval *pdn, + struct berval *pndn, + struct berval *rdn, + ObjectClass *oc, + monitor_info_t *mi, + struct berval *create, + struct berval *modify +) +{ + AttributeDescription *nad = NULL; + Entry *e; + struct berval nat; + char *ptr; + const char *text; + int rc; + + nat = *rdn; + ptr = strchr( nat.bv_val, '=' ); + nat.bv_len = ptr - nat.bv_val; + rc = slap_bv2ad( &nat, &nad, &text ); + if ( rc ) + return NULL; + + e = ch_calloc( 1, sizeof( Entry )); + if ( e ) { + struct berval nrdn; + + rdnNormalize( 0, NULL, NULL, rdn, &nrdn, NULL ); + build_new_dn( &e->e_name, pdn, rdn, NULL ); + build_new_dn( &e->e_nname, pndn, &nrdn, NULL ); + nat.bv_val = ptr + 1; + nat.bv_len = rdn->bv_len - ( nat.bv_val - rdn->bv_val ); + attr_merge_normalize_one( e, slap_schema.si_ad_objectClass, + &oc->soc_cname, NULL ); + attr_merge_normalize_one( e, slap_schema.si_ad_structuralObjectClass, + &oc->soc_cname, NULL ); + attr_merge_normalize_one( e, nad, &nat, NULL ); + attr_merge_one( e, slap_schema.si_ad_creatorsName, &mi->mi_creatorsName, + &mi->mi_ncreatorsName ); + attr_merge_one( e, slap_schema.si_ad_modifiersName, &mi->mi_creatorsName, + &mi->mi_ncreatorsName ); + attr_merge_normalize_one( e, slap_schema.si_ad_createTimestamp, + create ? create : &mi->mi_startTime, NULL ); + attr_merge_normalize_one( e, slap_schema.si_ad_modifyTimestamp, + modify ? modify : &mi->mi_startTime, NULL ); + } + return e; +} diff --git a/servers/slapd/back-monitor/init.c b/servers/slapd/back-monitor/init.c index 736a6cfdb9..5e3c1db925 100644 --- a/servers/slapd/back-monitor/init.c +++ b/servers/slapd/back-monitor/init.c @@ -1496,16 +1496,21 @@ monitor_back_db_open( { monitor_info_t *mi = (monitor_info_t *)be->be_private; struct monitor_subsys_t **ms; - Entry *e, **ep; + Entry *e, **ep, *root; monitor_entry_t *mp; int i; - char buf[ BACKMONITOR_BUFSIZE ]; - struct berval bv; + struct berval bv, rdn = BER_BVC(SLAPD_MONITOR_DN); struct tm *tms; #ifdef HAVE_GMTIME_R struct tm tm_buf; #endif static char tmbuf[ LDAP_LUTIL_GENTIME_BUFSIZE ]; + struct berval desc[] = { + BER_BVC("This subtree contains monitoring/managing objects."), + BER_BVC("This object contains information about this server."), + BER_BVC("Most of the information is held in operational" + " attributes, which must be explicitly requested."), + BER_BVNULL }; assert( be_monitor != NULL ); if ( be != be_monitor ) { @@ -1542,35 +1547,18 @@ monitor_back_db_open( if ( BER_BVISEMPTY( &be->be_rootdn ) ) { BER_BVSTR( &mi->mi_creatorsName, SLAPD_ANONYMOUS ); + BER_BVSTR( &mi->mi_ncreatorsName, SLAPD_ANONYMOUS ); } else { mi->mi_creatorsName = be->be_rootdn; + mi->mi_ncreatorsName = be->be_rootndn; } /* * creates the "cn=Monitor" entry */ - snprintf( buf, sizeof( buf ), - "dn: %s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Monitor\n" - "description: This subtree contains monitoring/managing objects.\n" - "description: This object contains information about this server.\n" - "description: Most of the information is held in operational" - " attributes, which must be explicitly requested.\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - SLAPD_MONITOR_DN, - mi->mi_oc_monitorServer->soc_cname.bv_val, - mi->mi_oc_monitorServer->soc_cname.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + e = monitor_entry_stub( NULL, NULL, &rdn, mi->mi_oc_monitorServer, mi, + NULL, NULL ); + if ( e == NULL) { Debug( LDAP_DEBUG_ANY, "unable to create \"%s\" entry\n", @@ -1578,6 +1566,8 @@ monitor_back_db_open( return( -1 ); } + attr_merge_normalize( e, slap_schema.si_ad_description, desc, NULL ); + bv.bv_val = strchr( (char *) Versionstr, '$' ); if ( bv.bv_val != NULL ) { char *end; @@ -1623,6 +1613,7 @@ monitor_back_db_open( SLAPD_MONITOR_DN, 0, 0 ); return -1; } + root = e; /* * Create all the subsystem specific entries @@ -1645,46 +1636,18 @@ monitor_back_db_open( return( -1 ); } - dn.bv_len += sizeof( SLAPD_MONITOR_DN ); /* 1 for the , */ - 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 ); - rc = dnPrettyNormal( NULL, &dn, &monitor_subsys[ i ]->mss_dn, - &monitor_subsys[ i ]->mss_ndn, NULL ); - free( dn.bv_val ); - if ( rc != LDAP_SUCCESS ) { - Debug( LDAP_DEBUG_ANY, - "monitor DN \"%s\" is invalid\n", - dn.bv_val, 0, 0 ); - return( -1 ); - } + e = monitor_entry_stub( &root->e_name, &root->e_nname, + &monitor_subsys[ i ]->mss_rdn, mi->mi_oc_monitorContainer, mi, + NULL, NULL ); - snprintf( buf, sizeof( buf ), - "dn: %s\n" - "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 ); - - e = str2entry( buf ); - if ( e == NULL) { Debug( LDAP_DEBUG_ANY, "unable to create \"%s\" entry\n", monitor_subsys[ i ]->mss_dn.bv_val, 0, 0 ); return( -1 ); } + monitor_subsys[i]->mss_dn = e->e_name; + monitor_subsys[i]->mss_ndn = e->e_nname; if ( !BER_BVISNULL( &monitor_subsys[ i ]->mss_desc[ 0 ] ) ) { attr_merge_normalize( e, slap_schema.si_ad_description, @@ -1860,14 +1823,6 @@ monitor_back_db_destroy( if ( !BER_BVISNULL( &monitor_subsys[ i ]->mss_rdn ) ) { ch_free( monitor_subsys[ i ]->mss_rdn.bv_val ); } - - if ( !BER_BVISNULL( &monitor_subsys[ i ]->mss_dn ) ) { - ch_free( monitor_subsys[ i ]->mss_dn.bv_val ); - } - - if ( !BER_BVISNULL( &monitor_subsys[ i ]->mss_ndn ) ) { - ch_free( monitor_subsys[ i ]->mss_ndn.bv_val ); - } } ch_free( monitor_subsys ); diff --git a/servers/slapd/back-monitor/listener.c b/servers/slapd/back-monitor/listener.c index 90fb440c46..102d5c0d55 100644 --- a/servers/slapd/back-monitor/listener.c +++ b/servers/slapd/back-monitor/listener.c @@ -69,32 +69,14 @@ monitor_subsys_listener_init( for ( i = 0; l[ i ]; i++ ) { char buf[ BACKMONITOR_BUFSIZE ]; Entry *e; + struct berval bv; + + bv.bv_len = snprintf( buf, sizeof( buf ), + "cn=Listener %d", i ); + bv.bv_val = buf; + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); - snprintf( buf, sizeof( buf ), - "dn: cn=Listener %d,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Listener %d\n" - "%s: %s\n" - "labeledURI: %s\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - i, - ms->mss_dn.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - i, - mi->mi_ad_monitorConnectionLocalAddress->ad_cname.bv_val, - l[ i ]->sl_name.bv_val, - l[ i ]->sl_url.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_listener_init: " @@ -103,6 +85,12 @@ monitor_subsys_listener_init( return( -1 ); } + attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionLocalAddress, + &l[ i ]->sl_name, NULL ); + + attr_merge_normalize_one( e, slap_schema.si_ad_labeledURI, + &l[ i ]->sl_url, NULL ); + #ifdef HAVE_TLS if ( l[ i ]->sl_is_tls ) { struct berval bv; diff --git a/servers/slapd/back-monitor/operation.c b/servers/slapd/back-monitor/operation.c index 8488a49bcf..c9dbf3b627 100644 --- a/servers/slapd/back-monitor/operation.c +++ b/servers/slapd/back-monitor/operation.c @@ -97,34 +97,14 @@ monitor_subsys_ops_init( for ( i = 0; i < SLAP_OP_LAST; i++ ) { struct berval rdn; Entry *e; + struct berval bv; /* * Initiated ops */ - snprintf( buf, sizeof( buf ), - "dn: %s,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: %s\n" - "%s: 0\n" - "%s: 0\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - monitor_op[ i ].rdn.bv_val, - ms->mss_dn.bv_val, - mi->mi_oc_monitorOperation->soc_cname.bv_val, - mi->mi_oc_monitorOperation->soc_cname.bv_val, - &monitor_op[ i ].rdn.bv_val[ STRLENOF( "cn=" ) ], - mi->mi_ad_monitorOpInitiated->ad_cname.bv_val, - mi->mi_ad_monitorOpCompleted->ad_cname.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &monitor_op[i].rdn, + mi->mi_oc_monitorOperation, mi, NULL, NULL ); + if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_ops_init: " @@ -133,7 +113,11 @@ monitor_subsys_ops_init( ms->mss_ndn.bv_val, 0 ); return( -1 ); } - + + BER_BVSTR( &bv, "0" ); + attr_merge_one( e, mi->mi_ad_monitorOpInitiated, &bv, NULL ); + attr_merge_one( e, mi->mi_ad_monitorOpCompleted, &bv, NULL ); + /* steal normalized RDN */ dnRdn( &e->e_nname, &rdn ); ber_dupbv( &monitor_op[ i ].nrdn, &rdn ); diff --git a/servers/slapd/back-monitor/overlay.c b/servers/slapd/back-monitor/overlay.c index cb741f2fd0..5c6f100a86 100644 --- a/servers/slapd/back-monitor/overlay.c +++ b/servers/slapd/back-monitor/overlay.c @@ -75,32 +75,10 @@ monitor_subsys_overlay_init( Entry *e; BackendDB *be; - snprintf( buf, sizeof( buf ), - "dn: cn=Overlay %d,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Overlay %d\n" - "%s: %s\n" - "%s: %s\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - i, - ms->mss_dn.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - i, - mi->mi_ad_monitoredInfo->ad_cname.bv_val, - on->on_bi.bi_type, - mi->mi_ad_monitorRuntimeConfig->ad_cname.bv_val, - on->on_bi.bi_cf_ocs ? "TRUE" : "FALSE", - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + bv.bv_len = snprintf( buf, sizeof( buf ), "cn=Overlay %d", i ); + bv.bv_val = buf; + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_overlay_init: " @@ -108,8 +86,12 @@ monitor_subsys_overlay_init( i, ms->mss_ndn.bv_val, 0 ); return( -1 ); } - ber_str2bv( on->on_bi.bi_type, 0, 0, &bv ); + attr_merge_normalize_one( e, mi->mi_ad_monitoredInfo, &bv, NULL ); + attr_merge_normalize_one( e, mi->mi_ad_monitorRuntimeConfig, + on->on_bi.bi_cf_ocs ? (struct berval *)&slap_true_bv : + (struct berval *)&slap_false_bv, NULL ); + attr_merge_normalize_one( e_overlay, mi->mi_ad_monitoredInfo, &bv, NULL ); diff --git a/servers/slapd/back-monitor/proto-back-monitor.h b/servers/slapd/back-monitor/proto-back-monitor.h index 0c8fdafcff..ebe6a46c68 100644 --- a/servers/slapd/back-monitor/proto-back-monitor.h +++ b/servers/slapd/back-monitor/proto-back-monitor.h @@ -116,6 +116,16 @@ extern monitor_entry_t * monitor_entrypriv_create LDAP_P(( void )); +extern Entry * +monitor_entry_stub LDAP_P(( + struct berval *pdn, + struct berval *pndn, + struct berval *rdn, + ObjectClass *oc, + monitor_info_t *mi, + struct berval *create, + struct berval *modify)); + /* * init */ diff --git a/servers/slapd/back-monitor/rww.c b/servers/slapd/back-monitor/rww.c index 8037d9fda2..e8ae7bf617 100644 --- a/servers/slapd/back-monitor/rww.c +++ b/servers/slapd/back-monitor/rww.c @@ -90,26 +90,8 @@ monitor_subsys_rww_init( struct berval nrdn, bv; Entry *e; - snprintf( buf, sizeof( buf ), - "dn: %s,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: %s\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - monitor_rww[ i ].rdn.bv_val, - ms->mss_dn.bv_val, - mi->mi_oc_monitorCounterObject->soc_cname.bv_val, - mi->mi_oc_monitorCounterObject->soc_cname.bv_val, - &monitor_rww[ i ].rdn.bv_val[ STRLENOF( "cn=" ) ], - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &monitor_rww[i].rdn, + mi->mi_oc_monitorCounterObject, mi, NULL, NULL ); if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_rww_init: " @@ -123,7 +105,7 @@ monitor_subsys_rww_init( ber_dupbv( &monitor_rww[ i ].nrdn, &nrdn ); BER_BVSTR( &bv, "0" ); - attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv ); + attr_merge_normalize_one( e, mi->mi_ad_monitorCounter, &bv, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { diff --git a/servers/slapd/back-monitor/sent.c b/servers/slapd/back-monitor/sent.c index 3c36e6fc4e..23ed6419ca 100644 --- a/servers/slapd/back-monitor/sent.c +++ b/servers/slapd/back-monitor/sent.c @@ -93,26 +93,10 @@ monitor_subsys_sent_init( struct berval nrdn, bv; Entry *e; - snprintf( buf, sizeof( buf ), - "dn: %s,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: %s\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - monitor_sent[ i ].rdn.bv_val, - ms->mss_dn.bv_val, - mi->mi_oc_monitorCounterObject->soc_cname.bv_val, - mi->mi_oc_monitorCounterObject->soc_cname.bv_val, - &monitor_sent[ i ].rdn.bv_val[ STRLENOF( "cn=" ) ], - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, + &monitor_sent[i].rdn, mi->mi_oc_monitorCounterObject, + mi, NULL, NULL ); + if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_sent_init: " @@ -127,7 +111,7 @@ monitor_subsys_sent_init( ber_dupbv( &monitor_sent[ i ].nrdn, &nrdn ); BER_BVSTR( &bv, "0" ); - attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv ); + attr_merge_normalize_one( e, mi->mi_ad_monitorCounter, &bv, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { diff --git a/servers/slapd/back-monitor/thread.c b/servers/slapd/back-monitor/thread.c index 2e4ded4535..c66df017d6 100644 --- a/servers/slapd/back-monitor/thread.c +++ b/servers/slapd/back-monitor/thread.c @@ -48,6 +48,7 @@ monitor_subsys_thread_init( monitor_entry_t *mp; Entry *e, **ep, *e_thread; static char buf[ BACKMONITOR_BUFSIZE ]; + struct berval bv; ms->mss_update = monitor_subsys_thread_update; @@ -68,27 +69,9 @@ monitor_subsys_thread_init( /* * Max */ - snprintf( buf, sizeof( buf ), - "dn: cn=Max,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Max\n" - "%s: %d\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - ms->mss_dn.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_ad_monitoredInfo->ad_cname.bv_val, - connection_pool_max, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + BER_BVSTR( &bv, "cn=Max" ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_thread_init: " @@ -96,6 +79,9 @@ monitor_subsys_thread_init( ms->mss_ndn.bv_val, 0, 0 ); return( -1 ); } + bv.bv_len = snprintf( buf, sizeof( buf ), "%d", connection_pool_max ); + bv.bv_val = buf; + attr_merge_normalize_one( e, mi->mi_ad_monitoredInfo, &bv, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { @@ -120,26 +106,9 @@ monitor_subsys_thread_init( /* * Backload */ - snprintf( buf, sizeof( buf ), - "dn: cn=Backload,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Backload\n" - "%s: 0\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - ms->mss_dn.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_ad_monitoredInfo->ad_cname.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + BER_BVSTR( &bv, "cn=Backload" ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_thread_init: " @@ -147,6 +116,8 @@ monitor_subsys_thread_init( ms->mss_ndn.bv_val, 0, 0 ); return( -1 ); } + BER_BVSTR( &bv, "0" ); + attr_merge_normalize_one( e, mi->mi_ad_monitoredInfo, &bv, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { @@ -171,26 +142,9 @@ monitor_subsys_thread_init( /* * Runqueue runners */ - snprintf( buf, sizeof( buf ), - "dn: cn=Runqueue,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Runqueue\n" - "%s: 0\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - ms->mss_dn.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_ad_monitoredInfo->ad_cname.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + BER_BVSTR( &bv, "cn=Runqueue" ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_thread_init: " @@ -198,6 +152,8 @@ monitor_subsys_thread_init( ms->mss_ndn.bv_val, 0, 0 ); return( -1 ); } + BER_BVSTR( &bv, "0" ); + attr_merge_normalize_one( e, mi->mi_ad_monitoredInfo, &bv, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { diff --git a/servers/slapd/back-monitor/time.c b/servers/slapd/back-monitor/time.c index d62fbca983..c8588e8048 100644 --- a/servers/slapd/back-monitor/time.c +++ b/servers/slapd/back-monitor/time.c @@ -47,6 +47,7 @@ monitor_subsys_time_init( Entry *e, **ep, *e_time; monitor_entry_t *mp; char buf[ BACKMONITOR_BUFSIZE ]; + struct berval bv; assert( be != NULL ); @@ -67,27 +68,9 @@ monitor_subsys_time_init( mp->mp_children = NULL; ep = &mp->mp_children; - snprintf( buf, sizeof( buf ), - "dn: cn=Start,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Start\n" - "%s: %s\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - ms->mss_dn.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_ad_monitorTimestamp->ad_cname.bv_val, - mi->mi_startTime.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + BER_BVSTR( &bv, "cn=Start" ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_time_init: " @@ -95,6 +78,8 @@ monitor_subsys_time_init( ms->mss_ndn.bv_val, 0, 0 ); return( -1 ); } + attr_merge_normalize_one( e, mi->mi_ad_monitorTimestamp, + &mi->mi_startTime, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { @@ -119,27 +104,9 @@ monitor_subsys_time_init( /* * Current */ - snprintf( buf, sizeof( buf ), - "dn: cn=Current,%s\n" - "objectClass: %s\n" - "structuralObjectClass: %s\n" - "cn: Current\n" - "%s: %s\n" - "creatorsName: %s\n" - "modifiersName: %s\n" - "createTimestamp: %s\n" - "modifyTimestamp: %s\n", - ms->mss_dn.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_oc_monitoredObject->soc_cname.bv_val, - mi->mi_ad_monitorTimestamp->ad_cname.bv_val, - mi->mi_startTime.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_creatorsName.bv_val, - mi->mi_startTime.bv_val, - mi->mi_startTime.bv_val ); - - e = str2entry( buf ); + BER_BVSTR( &bv, "cn=Current" ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_time_init: " @@ -147,6 +114,8 @@ monitor_subsys_time_init( ms->mss_ndn.bv_val, 0, 0 ); return( -1 ); } + attr_merge_normalize_one( e, mi->mi_ad_monitorTimestamp, + &mi->mi_startTime, NULL ); mp = monitor_entrypriv_create(); if ( mp == NULL ) { -- 2.39.5