+/* $OpenLDAP$ */
/*
* Copyright (c) 1990-1996 Regents of the University of Michigan.
* All rights reserved.
int udps;
#endif
int myport = LDAP_PORT;
+ int no_detach = 0;
int i, pid, socktype;
char *myname;
fd_set readfds;
struct hostent *hp;
struct sockaddr_in from;
- int len;
+ socklen_t len;
int dsapargc;
char **dsapargv;
#ifdef LDAP_PROCTITLE
dsapargc = 3;
break;
- case 'd': /* turn on debugging */
+ case 'd': /* set debug level and 'do not detach' flag */
+ no_detach = 1;
#ifdef LDAP_DEBUG
ldap_debug = atoi( optarg );
if ( ldap_debug & LDAP_DEBUG_PACKETS )
- lber_int_debug = ldap_debug;
+ ber_set_option( NULL, LBER_OPT_DEBUG_LEVEL, &ldap_debug );
#else
- fprintf( stderr, "Not compiled with -DLDAP_DEBUG!\n" );
+ if ( atoi( optarg ) != 0 )
+ fputs( "Not compiled with -DLDAP_DEBUG!\n", stderr );
#endif
break;
setproctitle( "initializing" );
#endif
#ifndef VMS
-# ifdef LDAP_DEBUG
- lutil_detach( ldap_debug, 1 );
-# else
- lutil_detach( 0, 1 );
-# endif
+ lutil_detach( no_detach, 1 );
#endif
(void) SIGNAL( SIGCHLD, wait4child );
(void) SIGNAL( SIGINT, log_and_exit );
#ifdef HAVE_TCPD
if ( !hosts_ctl("ldapd", (hp == NULL) ? "unknown" : hp->h_name,
- inet_ntoa( from.sin_addr ), STRING_UNKNOWN ) {
+ inet_ntoa( from.sin_addr ), STRING_UNKNOWN) ) {
Debug( LDAP_DEBUG_ARGS, "connection from %s (%s) denied.\n",
(hp == NULL) ? "unknown" : hp->h_name,
inet_ntoa( from.sin_addr ) );
}
- close(ns);
+ tcp_close(ns);
continue;
}
#endif /* TCP_WRAPPERS */
#ifdef VMS
/* This is for debug on terminal on VMS */
- close( tcps );
+ tcp_close( tcps );
#ifdef LDAP_PROCTITLE
setproctitle( hp == NULL ? inet_ntoa( from.sin_addr ) :
hp->h_name );
switch( pid = fork() ) {
case 0: /* child */
- close( tcps );
+ tcp_close( tcps );
#ifdef LDAP_PROCTITLE
sprintf( title, "%s (%d)\n", hp == NULL ?
inet_ntoa( from.sin_addr ) : hp->h_name,
#ifdef LDAP_DEBUG
if ( ldap_debug ) perror( "fork" );
#endif
- close( ns );
+ tcp_close( ns );
syslog( LOG_ERR, "fork failed %m" );
/* let things cool off */
sleep( 15 );
break;
default: /* parent */
- close( ns );
+ tcp_close( ns );
Debug( LDAP_DEBUG_TRACE, "forked child %d\n", pid, 0,
0 );
break;
conn_init();
}
- lber_pvt_sb_init( &sb );
- lber_pvt_sb_set_desc( &sb, clientsock );
- lber_pvt_sb_set_io( &sb, (udp) ? &lber_pvt_sb_io_udp :
- &lber_pvt_sb_io_tcp, NULL );
+ ber_pvt_sb_init( &sb );
+ ber_pvt_sb_set_desc( &sb, clientsock );
+ ber_pvt_sb_set_io( &sb, (udp) ? &ber_pvt_sb_io_udp :
+ &ber_pvt_sb_io_tcp, NULL );
timeout.tv_sec = idletime;
timeout.tv_usec = 0;
for ( ;; ) {
* already waiting for us on the client sock.
*/
- if ( ! lber_pvt_sb_data_ready( &sb ) ) {
+ if ( ! ber_pvt_sb_data_ready( &sb ) ) {
if ( (rc = select( dtblsize, &readfds, 0, 0,
udp ? 0 : &timeout )) < 1 ) {
#ifdef LDAP_DEBUG
}
}
- if ( lber_pvt_sb_data_ready( &sb ) ||
+ if ( ber_pvt_sb_data_ready( &sb ) ||
FD_ISSET( clientsock, &readfds ) ) {
client_request( &sb, conns, udp );
} else {
exit( 1 );
}
+#ifdef SO_REUSEADDR
/* set option so clients can't keep us from coming back up */
- i = 1;
+ i = 1;
if ( setsockopt( s, SOL_SOCKET, SO_REUSEADDR, (void *) &i, sizeof(i) )
- < 0 ) {
+ < 0 )
+ {
perror( "setsockopt" );
exit( 1 );
}
+#endif
+#ifdef SO_KEEPALIVE
+ /* enable keep alives */
+ i = 1;
+ if ( setsockopt( s, SOL_SOCKET, SO_KEEPALIVE, (void *) &i, sizeof(i) )
+ < 0 )
+ {
+ perror( "setsockopt" );
+ exit( 1 );
+ }
+#endif
/* bind to a name */
(void)memset( (void *)&addr, '\0', sizeof( addr ));
addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = INADDR_ANY;
+ addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons( port );
if ( bind( s, (struct sockaddr *) &addr, sizeof(addr) ) ) {
perror( "bind" );