*/
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
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: "
}
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;
/*
* 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: "
/*
* 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: "
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 */
#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 "
": %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,
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 ) {
slap_overinfo *oi = NULL;
BackendInfo *bi, *bi2;
Entry *e;
+ struct berval bv;
i++;
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: "
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 );
}
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: "
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 ) {
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;
+}
{
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 ) {
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",
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;
SLAPD_MONITOR_DN, 0, 0 );
return -1;
}
+ root = e;
/*
* Create all the subsystem specific entries
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,
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 );
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: "
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;
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: "
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 );
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: "
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 );
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
*/
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: "
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 ) {
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: "
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 ) {
monitor_entry_t *mp;
Entry *e, **ep, *e_thread;
static char buf[ BACKMONITOR_BUFSIZE ];
+ struct berval bv;
ms->mss_update = monitor_subsys_thread_update;
/*
* 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: "
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 ) {
/*
* 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: "
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 ) {
/*
* 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: "
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 ) {
Entry *e, **ep, *e_time;
monitor_entry_t *mp;
char buf[ BACKMONITOR_BUFSIZE ];
+ struct berval bv;
assert( be != NULL );
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: "
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 ) {
/*
* 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: "
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 ) {