/* 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. <ando@sys-net.it>
*
* This work has beed deveolped for the OpenLDAP Foundation
* used by many functions to add description to entries
*/
AttributeDescription *monitor_ad_desc = NULL;
+BackendDB *be_monitor = NULL;
/*
* subsystem data
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 */
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 */
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,
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 */
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 */
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,
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,
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,
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 */
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 }
};
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" ));
#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;
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 );
}
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 );
rc = dnPrettyNormal( NULL, &dn, &monitor_subsys[ i ].mss_dn,
&monitor_subsys[ i ].mss_ndn );
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 );
#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 );
}
#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;
}
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 );
#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