-#ifndef THREAD_MIT_PTHREADS
- /* POSIX_THREADS or compatible
- * This is a draft 10 or standard pthreads implementation
- */
- if ( pthread_create( &listener_tid, &attr, (void *) slapd_daemon,
- (void *) port ) != 0 ) {
- Debug( LDAP_DEBUG_ANY,
- "listener pthread_create failed\n", 0, 0, 0 );
- exit( 1 );
- }
-#else /* !THREAD_MIT_PTHREADS */
- /*
- * This is a draft 4 or earlier pthreads implementation
- */
- if ( pthread_create( &listener_tid, attr, (void *) slapd_daemon,
- (void *) port ) != 0 ) {
- Debug( LDAP_DEBUG_ANY,
- "listener pthread_create failed\n", 0, 0, 0 );
- exit( 1 );
- }
-#endif /* !THREAD_MIT_PTHREADS */
- pthread_attr_destroy( &attr );
- pthread_join( listener_tid, (void *) &status );
- pthread_exit( 0 );
- } else {
- Connection c;
- Operation *o;
- BerElement ber;
- unsigned long len, tag;
- long msgid;
- int flen;
- struct sockaddr_in from;
- struct hostent *hp;
-
- c.c_dn = NULL;
- c.c_ops = NULL;
- c.c_sb.sb_sd = 0;
- c.c_sb.sb_options = 0;
- c.c_sb.sb_naddr = udp ? 1 : 0;
- c.c_sb.sb_ber.ber_buf = NULL;
- c.c_sb.sb_ber.ber_ptr = NULL;
- c.c_sb.sb_ber.ber_end = NULL;
- pthread_mutex_init( &c.c_dnmutex, pthread_mutexattr_default );
- pthread_mutex_init( &c.c_opsmutex, pthread_mutexattr_default );
- pthread_mutex_init( &c.c_pdumutex, pthread_mutexattr_default );
-#ifdef notdefcldap
- c.c_sb.sb_addrs = (void **) saddrlist;
- c.c_sb.sb_fromaddr = &faddr;
- c.c_sb.sb_useaddr = saddrlist[ 0 ] = &saddr;
-#endif
- flen = sizeof(from);
- if ( getpeername( 0, (struct sockaddr *) &from, &flen ) == 0 ) {
-#ifdef REVERSE_LOOKUP
- hp = gethostbyaddr( (char *) &(from.sin_addr.s_addr),
- sizeof(from.sin_addr.s_addr), AF_INET );
+ if ( read_config( configfile ) != 0 ) {
+ rc = 1;
+ SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 19 );
+ goto destroy;
+ }
+
+#ifdef HAVE_TLS
+ ldap_pvt_tls_init();
+ ldap_pvt_tls_init_def_ctx();
+#endif
+
+ (void) SIGNAL( LDAP_SIGUSR1, slap_do_nothing );
+ (void) SIGNAL( LDAP_SIGUSR2, slap_set_shutdown );
+#ifdef SIGPIPE
+ (void) SIGNAL( SIGPIPE, SIG_IGN );
+#endif
+#ifdef SIGHUP
+ (void) SIGNAL( SIGHUP, slap_set_shutdown );
+#endif
+ (void) SIGNAL( SIGINT, slap_set_shutdown );
+ (void) SIGNAL( SIGTERM, slap_set_shutdown );
+#ifdef LDAP_SIGCHLD
+ (void) SIGNAL( LDAP_SIGCHLD, wait4child );
+#endif
+#ifdef SIGBREAK
+ /* SIGBREAK is generated when Ctrl-Break is pressed. */
+ (void) SIGNAL( SIGBREAK, slap_set_shutdown );
+#endif
+
+#ifndef HAVE_WINSOCK
+#ifdef LDAP_DEBUG
+ lutil_detach( ldap_debug, 0 );