X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmain.c;h=b32e60e4d26383194db389118be898394d22d1ad;hb=4f302fd19714591bd94bbf2a160dd8ecc704d693;hp=1096af18fcc3fcd49e88408538b7de54ddf8a478;hpb=f07015dad2d6ccdbe5b8360bfbc601b13baae894;p=openldap diff --git a/servers/slapd/main.c b/servers/slapd/main.c index 1096af18fc..b32e60e4d2 100644 --- a/servers/slapd/main.c +++ b/servers/slapd/main.c @@ -261,14 +261,15 @@ int main( int argc, char **argv ) struct sync_cookie *scp = NULL; struct sync_cookie *scp_entry = NULL; + char *serverNamePrefix = ""; + size_t l; + #ifdef CSRIMALLOC FILE *leakfile; if( ( leakfile = fopen( "slapd.leak", "w" )) == NULL ) { leakfile = stderr; } #endif - char *serverNamePrefix = ""; - size_t l; slap_sl_mem_init(); @@ -331,7 +332,7 @@ int main( int argc, char **argv ) #endif while ( (i = getopt( argc, argv, - "c:d:f:F:h:n:o:s:StT:V" + "c:d:f:F:h:n:o:s:tT:V" #if LDAP_PF_INET6 "46" #endif @@ -604,60 +605,12 @@ unhandled_option:; lutil_passwd_init(); slap_op_init(); -#ifdef SLAPD_MODULES - if ( module_init() != 0 ) { - rc = 1; - SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 17 ); - goto destroy; - } -#endif - - if ( slap_schema_init( ) != 0 ) { - Debug( LDAP_DEBUG_ANY, - "schema initialization error\n", - 0, 0, 0 ); - - goto destroy; - } - - if ( slap_init( serverMode, serverName ) != 0 ) { - rc = 1; + rc = slap_init( serverMode, serverName ); + if ( rc ) { SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 18 ); goto destroy; } - if ( slap_controls_init( ) != 0 ) { - Debug( LDAP_DEBUG_ANY, - "controls initialization error\n", - 0, 0, 0 ); - - goto destroy; - } - -#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() ) { - goto destroy; - } - - if ( overlay_init() ) { - goto destroy; - } - -#ifdef SLAP_DYNACL - if ( acl_init() ) { - goto destroy; - } -#endif /* SLAP_DYNACL */ - if ( read_config( configfile, configdir ) != 0 ) { rc = 1; SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 19 ); @@ -679,6 +632,14 @@ unhandled_option:; } } + if ( glue_sub_attach( ) != 0 ) { + Debug( LDAP_DEBUG_ANY, + "subordinate config error\n", + 0, 0, 0 ); + + goto destroy; + } + if ( slap_schema_check( ) != 0 ) { Debug( LDAP_DEBUG_ANY, "schema prep error\n", @@ -708,7 +669,12 @@ unhandled_option:; ldap_pvt_tls_set_option( NULL, LDAP_OPT_X_TLS_CTX, NULL ); rc = ldap_pvt_tls_init_def_ctx(); - if( rc != 0) { + if( rc == 0 ) { + ldap_pvt_tls_get_option( NULL, LDAP_OPT_X_TLS_CTX, &slap_tls_ctx ); + /* Restore previous ctx */ + ldap_pvt_tls_set_option( NULL, LDAP_OPT_X_TLS_CTX, def_ctx ); + load_extop( &slap_EXOP_START_TLS, 0, starttls_extop ); + } else if ( rc != LDAP_NOT_SUPPORTED ) { Debug( LDAP_DEBUG_ANY, "main: TLS init def ctx failed: %d\n", rc, 0, 0 ); @@ -716,10 +682,6 @@ unhandled_option:; SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 ); goto destroy; } - /* Retrieve slapd's own ctx */ - ldap_pvt_tls_get_option( NULL, LDAP_OPT_X_TLS_CTX, &slap_tls_ctx ); - /* Restore previous ctx */ - ldap_pvt_tls_set_option( NULL, LDAP_OPT_X_TLS_CTX, def_ctx ); } #endif @@ -759,7 +721,7 @@ unhandled_option:; */ time( &starttime ); - if ( slap_startup( NULL ) != 0 ) { + if ( slap_startup( NULL ) != 0 ) { rc = 1; SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 21 ); goto shutdown; @@ -767,33 +729,51 @@ unhandled_option:; Debug( LDAP_DEBUG_ANY, "slapd starting\n", 0, 0, 0 ); - if ( slapd_pid_file != NULL ) { FILE *fp = fopen( slapd_pid_file, "w" ); - if( fp != NULL ) { - fprintf( fp, "%d\n", (int) getpid() ); - fclose( fp ); + if ( fp == NULL ) { + int save_errno = errno; - } else { - free(slapd_pid_file); + Debug( LDAP_DEBUG_ANY, "unable to open pid file " + "\"%s\": %d (%s)\n", + slapd_pid_file, + save_errno, strerror( save_errno ) ); + + free( slapd_pid_file ); slapd_pid_file = NULL; + + rc = 1; + goto shutdown; } + + fprintf( fp, "%d\n", (int) getpid() ); + fclose( fp ); } if ( slapd_args_file != NULL ) { FILE *fp = fopen( slapd_args_file, "w" ); - if( fp != NULL ) { - for ( i = 0; i < g_argc; i++ ) { - fprintf( fp, "%s ", g_argv[i] ); - } - fprintf( fp, "\n" ); - fclose( fp ); - } else { - free(slapd_args_file); + if ( fp == NULL ) { + int save_errno = errno; + + Debug( LDAP_DEBUG_ANY, "unable to open args file " + "\"%s\": %d (%s)\n", + slapd_args_file, + save_errno, strerror( save_errno ) ); + + free( slapd_args_file ); slapd_args_file = NULL; + + rc = 1; + goto shutdown; + } + + for ( i = 0; i < g_argc; i++ ) { + fprintf( fp, "%s ", g_argv[i] ); } + fprintf( fp, "\n" ); + fclose( fp ); } #ifdef HAVE_NT_EVENT_LOG