/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2000-2006 The OpenLDAP Foundation.
+ * Copyright 2000-2007 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
#include "../back-monitor/back-monitor.h"
+#include "config.h"
+
static ObjectClass *oc_olmBDBDatabase;
static AttributeDescription *ad_olmBDBEntryCache,
"DESC 'Number of items in Entry Cache' "
"SUP monitorCounter "
"NO-USER-MODIFICATION "
- "USAGE directoryOperation )",
+ "USAGE dSAOperation )",
&ad_olmBDBEntryCache },
{ "( olmBDBAttributes:2 "
"DESC 'Number of items in EntryInfo Cache' "
"SUP monitorCounter "
"NO-USER-MODIFICATION "
- "USAGE directoryOperation )",
+ "USAGE dSAOperation )",
&ad_olmBDBEntryInfo },
{ "( olmBDBAttributes:3 "
"DESC 'Number of items in IDL Cache' "
"SUP monitorCounter "
"NO-USER-MODIFICATION "
- "USAGE directoryOperation )",
+ "USAGE dSAOperation )",
&ad_olmBDBIDLCache },
{ "( olmBDBAttributes:4 "
"where the database environment resides' "
"SUP monitoredInfo "
"NO-USER-MODIFICATION "
- "USAGE directoryOperation )",
+ "USAGE dSAOperation )",
&ad_olmDbDirectory },
{ NULL }
return SLAP_CB_CONTINUE;
}
+#if 0 /* uncomment if required */
static int
bdb_monitor_modify(
Operation *op,
{
return SLAP_CB_CONTINUE;
}
+#endif
static int
bdb_monitor_free(
Entry *e,
- void *priv )
+ void **priv )
{
struct berval values[ 2 ];
Modification mod = { 0 };
int i, rc;
/* NOTE: if slap_shutdown != 0, priv might have already been freed */
+ *priv = NULL;
/* Remove objectClass */
mod.sm_op = LDAP_MOD_DELETE;
return SLAP_CB_CONTINUE;
}
+#define bdb_monitor_initialize BDB_SYMBOL(monitor_initialize)
+
/*
* call from within bdb_initialize()
*/
bdb_monitor_initialize( void )
{
int i, code;
+ ConfigArgs c;
+ char *argv[ 3 ];
static int bdb_monitor_initialized = 0;
/* register schema here */
+ argv[ 0 ] = "back-bdb/back-hdb monitor";
+ c.argv = argv;
+ c.argc = 3;
+ c.fname = argv[0];
+
for ( i = 0; s_oid[ i ].name; i++ ) {
- char *argv[ 3 ];
-
- argv[ 0 ] = "back-bdb/back-hdb monitor";
+ c.lineno = i;
argv[ 1 ] = s_oid[ i ].name;
argv[ 2 ] = s_oid[ i ].oid;
- if ( parse_oidm( argv[ 0 ], i, 3, argv, 0, NULL ) != 0 ) {
+ if ( parse_oidm( &c, 0, NULL ) != 0 ) {
Debug( LDAP_DEBUG_ANY,
"bdb_monitor_initialize: unable to add "
"objectIdentifier \"%s=%s\"\n",
int
bdb_monitor_db_init( BackendDB *be )
{
+ struct bdb_info *bdb = (struct bdb_info *) be->be_private;
+
if ( bdb_monitor_initialize() == LDAP_SUCCESS ) {
/* monitoring in back-bdb is on by default */
SLAP_DBFLAGS( be ) |= SLAP_DBFLAG_MONITORING;
}
+ bdb->bi_monitor.bdm_scope = -1;
+
return 0;
}
return 0;
}
- bdb->bi_monitor.bdm_scope = LDAP_SCOPE_SUBORDINATE;
+ if ( bdb->bi_monitor.bdm_scope == -1 ) {
+ bdb->bi_monitor.bdm_scope = LDAP_SCOPE_ONELEVEL;
+ }
base = &bdb->bi_monitor.bdm_nbase;
BER_BVSTR( base, "cn=databases,cn=monitor" );
filter = &bdb->bi_monitor.bdm_filter;
} else {
ldap_bv2escaped_filter_value( &be->be_nsuffix[ 0 ], &suffix );
}
-
- filter->bv_len = STRLENOF( "(&(monitoredInfo=" )
- + strlen( be->bd_info->bi_type )
- + STRLENOF( ")(namingContexts:distinguishedNameMatch:=" )
- + suffix.bv_len + STRLENOF( "))" );
- ptr = filter->bv_val = ch_malloc( filter->bv_len + 1 );
- ptr = lutil_strcopy( ptr, "(&(monitoredInfo=" );
- ptr = lutil_strcopy( ptr, be->bd_info->bi_type );
- ptr = lutil_strcopy( ptr, ")(namingContexts:distinguishedNameMatch:=" );
- ptr = lutil_strncopy( ptr, suffix.bv_val, suffix.bv_len );
- ptr = lutil_strcopy( ptr, "))" );
+
+ if ( BER_BVISEMPTY( &suffix ) ) {
+ /* frontend also has empty suffix, sigh! */
+ filter->bv_len = STRLENOF( "(&(namingContexts:distinguishedNameMatch:=" )
+ + suffix.bv_len + STRLENOF( ")(!(cn=frontend)))" );
+ ptr = filter->bv_val = ch_malloc( filter->bv_len + 1 );
+ ptr = lutil_strcopy( ptr, "(&(namingContexts:distinguishedNameMatch:=" );
+ ptr = lutil_strncopy( ptr, suffix.bv_val, suffix.bv_len );
+ ptr = lutil_strcopy( ptr, ")(!(cn=frontend)))" );
+
+ } else {
+ /* just look for the naming context */
+ filter->bv_len = STRLENOF( "(namingContexts:distinguishedNameMatch:=" )
+ + suffix.bv_len + STRLENOF( ")" );
+ ptr = filter->bv_val = ch_malloc( filter->bv_len + 1 );
+ ptr = lutil_strcopy( ptr, "(namingContexts:distinguishedNameMatch:=" );
+ ptr = lutil_strncopy( ptr, suffix.bv_val, suffix.bv_len );
+ ptr = lutil_strcopy( ptr, ")" );
+ }
ptr[ 0 ] = '\0';
assert( filter->bv_len == ptr - filter->bv_val );
cb->mc_private = (void *)bdb;
rc = mbe->register_entry_attrs( NULL, a, cb,
- base, LDAP_SCOPE_SUBORDINATE, filter );
+ base, bdb->bi_monitor.bdm_scope, filter );
cleanup:;
if ( rc != 0 ) {