X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fldapd%2Fmain.c;h=354214609139d198513aca0adfdd1252c0d287c4;hb=edd464ee8f98f566b94851d4d8463ae4e1a407eb;hp=51d5791b465c31684d5cbcb74fb343f7c5cd7988;hpb=c39d8720d96a124dd0a79032b6efd4433acc5532;p=openldap diff --git a/servers/ldapd/main.c b/servers/ldapd/main.c index 51d5791b46..3542146091 100644 --- a/servers/ldapd/main.c +++ b/servers/ldapd/main.c @@ -40,6 +40,7 @@ #include "../../libraries/liblber/lber-int.h" /* get struct sockbuf */ #include "ldap.h" #include "common.h" +#include "lutil.h" /* Get lutil_detach() */ #ifdef HAVE_TCPD #include @@ -48,12 +49,11 @@ int allow_severity = LOG_INFO; int deny_severity = LOG_NOTICE; #endif /* TCP_WRAPPERS */ -void log_and_exit(); -static set_socket(); -static do_queries(); -static RETSIGTYPE wait4child(); +static int set_socket( int port, int udp ); +static void do_queries( int clientsock, int udp ); +static RETSIGTYPE wait4child( int sig ); #ifdef LDAP_CONNECTIONLESS -static udp_init(); +static int udp_init( int port, int createsocket ); #endif #ifdef LDAP_DEBUG @@ -82,10 +82,8 @@ char *kerberos_keyfile; int dtblsize; int RunFromInetd = 0; -extern char Versionstr[]; - -static usage( name ) -char *name; +static void +usage( char *name ) { fprintf( stderr, "usage: %s [-d debuglvl] [-p port] [-l] [-c dsa] [-r referraltimeout]", name ); #ifdef LDAP_CONNECTIONLESS @@ -100,9 +98,8 @@ char *name; fprintf( stderr, "\n" ); } -main (argc, argv) -int argc; -char **argv; +int +main( int argc, char **argv ) { int tcps, ns; #ifdef LDAP_CONNECTIONLESS @@ -117,12 +114,9 @@ char **argv; int len; int dsapargc; char **dsapargv; - RETSIGTYPE wait4child(); #ifdef LDAP_PROCTITLE char title[80]; #endif - extern char *optarg; - extern int optind; #ifdef VMS /* Pick up socket from inetd-type server on VMS */ @@ -263,14 +257,18 @@ char **argv; * that have exited */ if (!RunFromInetd) { -#ifdef LDAP_SETPROCTITLE +#ifdef LDAP_PROCTITLE setproctitle( "initializing" ); #endif #ifndef VMS - (void) detach(); -#endif - (void) SIGNAL( SIGCHLD, (void *) wait4child ); - (void) SIGNAL( SIGINT, (void *) log_and_exit ); +# ifdef LDAP_DEBUG + lutil_detach( ldap_debug, 1 ); +# else + lutil_detach( 0, 1 ); +# endif +#endif + (void) SIGNAL( SIGCHLD, wait4child ); + (void) SIGNAL( SIGINT, log_and_exit ); } /* @@ -302,7 +300,7 @@ char **argv; (void) get_syntaxes(); if (RunFromInetd) { len = sizeof( socktype ); - getsockopt( ns, SOL_SOCKET, SO_TYPE, &socktype, &len ); + getsockopt( ns, SOL_SOCKET, SO_TYPE, (char *)&socktype, &len ); if ( socktype == SOCK_DGRAM ) { #ifdef LDAP_CONNECTIONLESS Debug( LDAP_DEBUG_ARGS, @@ -333,7 +331,7 @@ char **argv; inet_ntoa( from.sin_addr ) ); } -#ifdef LDAP_SETPROCTITLE +#ifdef LDAP_PROCTITLE sprintf( title, "%s %d\n", hp == NULL ? inet_ntoa( from.sin_addr ) : hp->h_name, myport ); setproctitle( title ); @@ -358,7 +356,7 @@ char **argv; * if we are doing CLDAP as well, handle those requests on the fly */ -#ifdef LDAP_SETPROCTITLE +#ifdef LDAP_PROCTITLE #ifdef LDAP_CONNECTIONLESS sprintf( title, "listening %s/%s %d", do_tcp ? "tcp" : "", do_udp ? "udp" : "", myport ); @@ -439,12 +437,12 @@ char **argv; #ifdef VMS /* This is for debug on terminal on VMS */ close( tcps ); -#ifdef LDAP_SETPROCTITLE +#ifdef LDAP_PROCTITLE setproctitle( hp == NULL ? inet_ntoa( from.sin_addr ) : hp->h_name ); #endif gettimeofday( &conn_start_tv, (struct timezone *) NULL ); - (void) SIGNAL( SIGPIPE, (void *) log_and_exit ); + (void) SIGNAL( SIGPIPE, log_and_exit ); do_queries( ns, 0 ); /* NOT REACHED */ @@ -453,14 +451,14 @@ char **argv; switch( pid = fork() ) { case 0: /* child */ close( tcps ); -#ifdef LDAP_SETPROCTITLE +#ifdef LDAP_PROCTITLE sprintf( title, "%s (%d)\n", hp == NULL ? inet_ntoa( from.sin_addr ) : hp->h_name, myport ); setproctitle( title ); #endif gettimeofday( &conn_start_tv, (struct timezone *) NULL ); - (void) SIGNAL( SIGPIPE, (void *) log_and_exit ); + (void) SIGNAL( SIGPIPE, log_and_exit ); do_queries( ns, 0 ); break; @@ -485,14 +483,14 @@ char **argv; /* NOT REACHED */ } -static +static void do_queries( int clientsock, int udp /* is this a UDP (CLDAP) request? */ ) { fd_set readfds; - int rc, i; + int rc; struct timeval timeout; Sockbuf sb; #ifdef LDAP_CONNECTIONLESS @@ -533,7 +531,6 @@ do_queries( timeout.tv_usec = 0; for ( ;; ) { struct conn *dsaconn; - extern struct conn *conns; FD_ZERO( &readfds ); FD_SET( clientsock, &readfds ); @@ -541,6 +538,7 @@ do_queries( #ifdef LDAP_DEBUG if ( ldap_debug & LDAP_DEBUG_CONNS ) { + int i; Debug( LDAP_DEBUG_CONNS, "FDLIST:", 0, 0, 0 ); for ( i = 0; i < dtblsize; i++ ) { if ( FD_ISSET( i, &readfds ) ) { @@ -599,7 +597,8 @@ do_queries( /* NOT REACHED */ } -static set_socket( +static int +set_socket( int port, int udp /* UDP port? */ ) @@ -644,7 +643,8 @@ static set_socket( return( s ); } -static RETSIGTYPE wait4child() +static RETSIGTYPE +wait4child( int sig ) { #ifndef HAVE_WAITPID WAITSTATUSTYPE status; @@ -660,11 +660,11 @@ static RETSIGTYPE wait4child() ; /* NULL */ #endif - (void) SIGNAL( SIGCHLD, (void *) wait4child ); + (void) SIGNAL( SIGCHLD, wait4child ); } -void +RETSIGTYPE log_and_exit( int exitcode ) { struct timeval tv; @@ -692,9 +692,6 @@ udp_init( { int s, bound; char *matched; - extern char *dsa_address; - extern struct PSAPaddr *psap_cpy(); - extern struct conn *conns; if ( createsocket ) s = set_socket( port, 1 );