X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmain.c;h=53ccf4004767eb5ddae2d1dc302e5ad64165d870;hb=7f54a89f32c34ec0e109ef3ca41c36545fe42b7c;hp=81f545eda96e59ebfe6eab9f823e54c422a4c6d2;hpb=8befe70f3f2bd90337d66b13fdf8f1677a5e0bc9;p=openldap diff --git a/servers/slapd/main.c b/servers/slapd/main.c index 81f545eda9..53ccf40047 100644 --- a/servers/slapd/main.c +++ b/servers/slapd/main.c @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ #include "portable.h" @@ -15,8 +15,11 @@ #include #include +#include "ldap_pvt.h" + #include "slap.h" #include "lutil.h" +#include "ldif.h" #ifdef LDAP_SIGCHLD static RETSIGTYPE wait4child( int sig ); @@ -24,13 +27,7 @@ static RETSIGTYPE wait4child( int sig ); #ifdef HAVE_NT_SERVICE_MANAGER #define MAIN_RETURN(x) return -struct sockaddr_in bind_addr; - -/* in nt_main.c */ -LDAP_LUTIL_V(SERVICE_STATUS) SLAPDServiceStatus; -LDAP_LUTIL_V(SERVICE_STATUS_HANDLE) hSLAPDServiceStatus; -extern ldap_pvt_thread_cond_t started_event, stopped_event; -extern int is_NT_Service; +static struct sockaddr_in bind_addr; void CommenceStartupProcessing( LPCTSTR serverName, void(*stopper)(int)); @@ -69,14 +66,14 @@ const char Versionstr[] = #define DEFAULT_SYSLOG_USER LOG_LOCAL4 typedef struct _str2intDispatch { - char *stringVal; - int abbr; - int intVal; + char *stringVal; + int abbr; + int intVal; } STRDISP, *STRDISP_P; /* table to compute syslog-options to integer */ -static STRDISP syslog_types[] = { +static STRDISP syslog_types[] = { { "LOCAL0", sizeof("LOCAL0"), LOG_LOCAL0 }, { "LOCAL1", sizeof("LOCAL1"), LOG_LOCAL1 }, { "LOCAL2", sizeof("LOCAL2"), LOG_LOCAL2 }, @@ -90,7 +87,7 @@ static STRDISP syslog_types[] = { static int cnvt_str2int( char *, STRDISP_P, int ); -#endif /* LOG_LOCAL4 */ +#endif /* LOG_LOCAL4 */ static void @@ -126,7 +123,7 @@ int main( int argc, char **argv ) #endif { int i, no_detach = 0; - int rc; + int rc = 1; char *urls = NULL; #if defined(HAVE_SETUID) && defined(HAVE_SETGID) char *username = NULL; @@ -136,16 +133,19 @@ int main( int argc, char **argv ) char *sandbox = NULL; #endif #ifdef LOG_LOCAL4 - int syslogUser = DEFAULT_SYSLOG_USER; + int syslogUser = DEFAULT_SYSLOG_USER; #endif + + int g_argc = argc; + char **g_argv = argv; #ifdef HAVE_NT_SERVICE_MANAGER char *configfile = ".\\slapd.conf"; #else char *configfile = SLAPD_DEFAULT_CONFIGFILE; #endif - char *serverName = NULL; - int serverMode = SLAP_SERVER_MODE; + char *serverName = NULL; + int serverMode = SLAP_SERVER_MODE; #ifdef CSRIMALLOC FILE *leakfile; @@ -154,8 +154,6 @@ int main( int argc, char **argv ) } #endif - g_argc = argc; - g_argv = argv; #ifdef HAVE_NT_SERVICE_MANAGER { @@ -175,7 +173,12 @@ int main( int argc, char **argv ) if ( i != NULL ) { slap_debug = *i; +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_INFO, + "main: new debug level from registry is: %d\n", slap_debug )); +#else Debug( LDAP_DEBUG_ANY, "new debug level from registry is: %d\n", slap_debug, 0, 0 ); +#endif } newUrls = (char *) getRegParam(regService, "Urls"); @@ -185,15 +188,27 @@ int main( int argc, char **argv ) ch_free(urls); urls = ch_strdup(newUrls); +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_INFO, + "main: new urls from registry: %s\n", urls )); +#else Debug(LDAP_DEBUG_ANY, "new urls from registry: %s\n", urls, 0, 0); +#endif + } newConfigFile = (char*)getRegParam( regService, "ConfigFile" ); if ( newConfigFile != NULL ) { configfile = newConfigFile; +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_INFO, + "main: new config file from registry is: %s\n", configfile )); +#else Debug ( LDAP_DEBUG_ANY, "new config file from registry is: %s\n", configfile, 0, 0 ); +#endif + } } #endif @@ -214,7 +229,7 @@ int main( int argc, char **argv ) case 'h': /* listen URLs */ if ( urls != NULL ) free( urls ); urls = ch_strdup( optarg ); - break; + break; case 'd': /* set debug level and 'do not detach' flag */ no_detach = 1; @@ -275,7 +290,7 @@ int main( int argc, char **argv ) } #ifdef NEW_LOGGING - lutil_log_initialize( argc, argv ); + lutil_log_initialize( argc, argv ); #endif lutil_set_debug_level( "slapd", slap_debug ); @@ -283,13 +298,19 @@ int main( int argc, char **argv ) ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, &slap_debug); ldif_debug = slap_debug; +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_INFO, + "%s", Versionstr )); +#else Debug( LDAP_DEBUG_TRACE, "%s", Versionstr, 0, 0 ); +#endif + if( serverName == NULL ) { if ( (serverName = strrchr( argv[0], *LDAP_DIRSEP )) == NULL ) { - serverName = ch_strdup( argv[0] ); + serverName = argv[0]; } else { - serverName = ch_strdup( serverName + 1 ); + serverName = serverName + 1; } } @@ -342,10 +363,16 @@ int main( int argc, char **argv ) goto destroy; } - if ( schema_init( ) != 0 ) { + if ( slap_schema_init( ) != 0 ) { +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, + "main: schema initialization error\n" )); +#else Debug( LDAP_DEBUG_ANY, "schema initialization error\n", 0, 0, 0 ); +#endif + goto destroy; } @@ -355,17 +382,57 @@ int main( int argc, char **argv ) goto destroy; } - if ( schema_prep( ) != 0 ) { + if ( glue_sub_init( ) != 0 ) { +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, + "main: subordinate config error\n")); +#else + Debug( LDAP_DEBUG_ANY, + "subordinate config error\n", + 0, 0, 0 ); +#endif + goto destroy; + } + + if ( slap_schema_check( ) != 0 ) { +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, + "main: schema prep error\n")); +#else Debug( LDAP_DEBUG_ANY, "schema prep error\n", 0, 0, 0 ); +#endif + goto destroy; } #ifdef HAVE_TLS rc = ldap_pvt_tls_init(); + if( rc != 0) { +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, + "main: tls init failed: %d\n", rc )); +#else + Debug( LDAP_DEBUG_ANY, + "main: TLS init failed: %d\n", + 0, 0, 0 ); +#endif + rc = 1; + SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 ); + goto destroy; + } - if (rc || ldap_pvt_tls_init_def_ctx() != 0) { + rc = ldap_pvt_tls_init_def_ctx(); + if( rc != 0) { +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, + "main: tls init def ctx failed: %d\n", rc )); +#else + Debug( LDAP_DEBUG_ANY, + "main: TLS init def ctx failed: %d\n", + 0, 0, 0 ); +#endif rc = 1; SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 ); goto destroy; @@ -408,7 +475,13 @@ int main( int argc, char **argv ) { FILE *fp; +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_INFO, + "main: slapd starting.\n" )); +#else Debug( LDAP_DEBUG_ANY, "slapd starting\n", 0, 0, 0 ); +#endif + if (( slapd_pid_file != NULL ) && (( fp = fopen( slapd_pid_file, "w" )) != NULL )) @@ -461,7 +534,13 @@ stop: LogSlapdStoppedEvent( serverName ); #endif +#ifdef NEW_LOGGING + LDAP_LOG(( "operation", LDAP_LEVEL_CRIT, + "main: slapd stopped.\n" )); +#else Debug( LDAP_DEBUG_ANY, "slapd stopped.\n", 0, 0, 0 ); +#endif + #ifdef HAVE_NT_SERVICE_MANAGER ReportSlapdShutdownComplete(); @@ -472,6 +551,14 @@ stop: #endif slapd_daemon_destroy(); + schema_destroy(); + +#ifdef HAVE_TLS + ldap_pvt_tls_destroy(); +#endif + + config_destroy(); + #ifdef CSRIMALLOC mal_dumpleaktrace( leakfile ); #endif @@ -520,20 +607,20 @@ wait4child( int sig ) static int cnvt_str2int( char *stringVal, STRDISP_P dispatcher, int defaultVal ) { - int retVal = defaultVal; + int retVal = defaultVal; STRDISP_P disp; for (disp = dispatcher; disp->stringVal; disp++) { - if (!strncasecmp (stringVal, disp->stringVal, disp->abbr)) { + if (!strncasecmp (stringVal, disp->stringVal, disp->abbr)) { - retVal = disp->intVal; - break; + retVal = disp->intVal; + break; - } + } } return (retVal); } -#endif /* LOG_LOCAL4 */ +#endif /* LOG_LOCAL4 */