]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/init.c
fix previous commit (ITS#5819)
[openldap] / servers / slapd / init.c
index 5666a49b992bbeb4cf802fc0ff2742ddee95fd16..73e42250679fc54d1fd3c91ff4d21baa1a16710f 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2007 The OpenLDAP Foundation.
+ * Copyright 1998-2008 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -67,7 +67,7 @@ int                   connection_pool_max = SLAP_MAX_WORKER_THREADS;
 int            slap_tool_thread_max = 1;
 ldap_pvt_thread_mutex_t        gmtime_mutex;
 
-slap_counters_t                        slap_counters;
+slap_counters_t                        slap_counters, *slap_counters_list;
 
 static const char* slap_name = NULL;
 int slapMode = SLAP_UNDEFINED_MODE;
@@ -76,7 +76,6 @@ int
 slap_init( int mode, const char *name )
 {
        int rc;
-       int i;
 
        assert( mode );
 
@@ -112,6 +111,14 @@ slap_init( int mode, const char *name )
                return 1;
        }
 
+       if ( filter_init() != 0 ) {
+               slap_debug |= LDAP_DEBUG_NONE;
+               Debug( LDAP_DEBUG_ANY,
+                   "%s: filter_init failed\n",
+                   name, 0, 0 );
+               return 1;
+       }
+
        if ( entry_init() != 0 ) {
                slap_debug |= LDAP_DEBUG_NONE;
                Debug( LDAP_DEBUG_ANY,
@@ -136,27 +143,12 @@ slap_init( int mode, const char *name )
                ldap_pvt_thread_pool_init( &connection_pool,
                                connection_pool_max, 0);
 
-               ldap_pvt_thread_mutex_init( &slap_counters.sc_sent_mutex );
-               ldap_pvt_thread_mutex_init( &slap_counters.sc_ops_mutex );
-               ldap_pvt_mp_init( slap_counters.sc_bytes );
-               ldap_pvt_mp_init( slap_counters.sc_pdu );
-               ldap_pvt_mp_init( slap_counters.sc_entries );
-               ldap_pvt_mp_init( slap_counters.sc_refs );
-
-               ldap_pvt_mp_init( slap_counters.sc_ops_initiated );
-               ldap_pvt_mp_init( slap_counters.sc_ops_completed );
+               slap_counters_init( &slap_counters );
 
                ldap_pvt_thread_mutex_init( &slapd_rq.rq_mutex );
                LDAP_STAILQ_INIT( &slapd_rq.task_list );
                LDAP_STAILQ_INIT( &slapd_rq.run_list );
 
-#ifdef SLAPD_MONITOR
-               for ( i = 0; i < SLAP_OP_LAST; i++ ) {
-                       ldap_pvt_mp_init( slap_counters.sc_ops_initiated_[ i ] );
-                       ldap_pvt_mp_init( slap_counters.sc_ops_completed_[ i ] );
-               }
-#endif /* SLAPD_MONITOR */
-
                ldap_pvt_thread_mutex_init( &gmtime_mutex );
                slap_passwd_init();
 
@@ -187,16 +179,6 @@ slap_init( int mode, const char *name )
                return 1;
        }
 
-#ifdef HAVE_TLS
-       /* Library defaults to full certificate checking. This is correct when
-        * a client is verifying a server because all servers should have a
-        * valid cert. But few clients have valid certs, so we want our default
-        * to be no checking. The config file can override this as usual.
-        */
-       rc = 0;
-       (void) ldap_pvt_tls_set_option( NULL, LDAP_OPT_X_TLS_REQUIRE_CERT, &rc );
-#endif
-
        if ( frontend_init() ) {
                slap_debug |= LDAP_DEBUG_NONE;
                Debug( LDAP_DEBUG_ANY,
@@ -256,7 +238,6 @@ int slap_shutdown( Backend *be )
 int slap_destroy(void)
 {
        int rc;
-       int i;
 
        Debug( LDAP_DEBUG_TRACE,
                "%s destroy: freeing system resources.\n",
@@ -280,24 +261,8 @@ int slap_destroy(void)
 
        switch ( slapMode & SLAP_MODE ) {
        case SLAP_SERVER_MODE:
-
        case SLAP_TOOL_MODE:
-
-               ldap_pvt_thread_mutex_destroy( &slap_counters.sc_sent_mutex );
-               ldap_pvt_thread_mutex_destroy( &slap_counters.sc_ops_mutex );
-               ldap_pvt_mp_clear( slap_counters.sc_bytes );
-               ldap_pvt_mp_clear( slap_counters.sc_pdu );
-               ldap_pvt_mp_clear( slap_counters.sc_entries );
-               ldap_pvt_mp_clear( slap_counters.sc_refs );
-               ldap_pvt_mp_clear( slap_counters.sc_ops_initiated );
-               ldap_pvt_mp_clear( slap_counters.sc_ops_completed );
-
-#ifdef SLAPD_MONITOR
-               for ( i = 0; i < SLAP_OP_LAST; i++ ) {
-                       ldap_pvt_mp_clear( slap_counters.sc_ops_initiated_[ i ] );
-                       ldap_pvt_mp_clear( slap_counters.sc_ops_completed_[ i ] );
-               }
-#endif /* SLAPD_MONITOR */
+               slap_counters_destroy( &slap_counters );
                break;
 
        default:
@@ -316,3 +281,46 @@ int slap_destroy(void)
        /* should destroy the above mutex */
        return rc;
 }
+
+void slap_counters_init( slap_counters_t *sc )
+{
+       int i;
+
+       ldap_pvt_thread_mutex_init( &sc->sc_mutex );
+       ldap_pvt_mp_init( sc->sc_bytes );
+       ldap_pvt_mp_init( sc->sc_pdu );
+       ldap_pvt_mp_init( sc->sc_entries );
+       ldap_pvt_mp_init( sc->sc_refs );
+
+       ldap_pvt_mp_init( sc->sc_ops_initiated );
+       ldap_pvt_mp_init( sc->sc_ops_completed );
+
+#ifdef SLAPD_MONITOR
+       for ( i = 0; i < SLAP_OP_LAST; i++ ) {
+               ldap_pvt_mp_init( sc->sc_ops_initiated_[ i ] );
+               ldap_pvt_mp_init( sc->sc_ops_completed_[ i ] );
+       }
+#endif /* SLAPD_MONITOR */
+}
+
+void slap_counters_destroy( slap_counters_t *sc )
+{
+       int i;
+
+       ldap_pvt_thread_mutex_destroy( &sc->sc_mutex );
+       ldap_pvt_mp_clear( sc->sc_bytes );
+       ldap_pvt_mp_clear( sc->sc_pdu );
+       ldap_pvt_mp_clear( sc->sc_entries );
+       ldap_pvt_mp_clear( sc->sc_refs );
+
+       ldap_pvt_mp_clear( sc->sc_ops_initiated );
+       ldap_pvt_mp_clear( sc->sc_ops_completed );
+
+#ifdef SLAPD_MONITOR
+       for ( i = 0; i < SLAP_OP_LAST; i++ ) {
+               ldap_pvt_mp_clear( sc->sc_ops_initiated_[ i ] );
+               ldap_pvt_mp_clear( sc->sc_ops_completed_[ i ] );
+       }
+#endif /* SLAPD_MONITOR */
+}
+