]> git.sur5r.net Git - openldap/blobdiff - servers/ldapd/main.c
Round 2 of connection management changes.
[openldap] / servers / ldapd / main.c
index 9ef964106cb94780fa8a673f8aa4e5792edbc60b..5e91ec6ea31fea8159093d4234c6986ada064e71 100644 (file)
@@ -49,12 +49,11 @@ int allow_severity = LOG_INFO;
 int deny_severity = LOG_NOTICE;
 #endif /* TCP_WRAPPERS */
 
-void log_and_exit();
-static int     set_socket();
-static void    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 int     udp_init();
+static int     udp_init( int port, int createsocket );
 #endif
 
 #ifdef LDAP_DEBUG
@@ -83,8 +82,6 @@ char  *kerberos_keyfile;
 int    dtblsize;
 int    RunFromInetd = 0;
 
-extern char Versionstr[];
-
 static void
 usage( char *name )
 {
@@ -102,9 +99,7 @@ usage( char *name )
 }
 
 int
-main (argc, argv)
-int    argc;
-char   **argv;
+main( int argc, char **argv )
 {
        int                     tcps, ns;
 #ifdef LDAP_CONNECTIONLESS
@@ -119,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 */
@@ -162,7 +154,7 @@ char        **argv;
 #ifdef LDAP_DEBUG
                        ldap_debug = atoi( optarg );
                        if ( ldap_debug & LDAP_DEBUG_PACKETS )
-                               lber_debug = ldap_debug;
+                               lber_int_debug = ldap_debug;
 #else
                        fprintf( stderr, "Not compiled with -DLDAP_DEBUG!\n" );
 #endif
@@ -275,8 +267,8 @@ char        **argv;
                lutil_detach( 0, 1 );
 #  endif
 #endif
-               (void) SIGNAL( SIGCHLD, (void *) wait4child );
-               (void) SIGNAL( SIGINT, (void *) log_and_exit );
+               (void) SIGNAL( SIGCHLD, wait4child );
+               (void) SIGNAL( SIGINT, log_and_exit );
        }
 
        /* 
@@ -450,7 +442,7 @@ char        **argv;
                    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 */
@@ -466,7 +458,7 @@ char        **argv;
                        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;
@@ -523,23 +515,14 @@ do_queries(
                conn_init();
        }
 
-       (void) memset( (void *) &sb, '\0', sizeof( sb ) );
-       sb.sb_sd = clientsock;
-       sb.sb_naddr = ( udp ) ? 1 : 0;
-#ifdef LDAP_CONNECTIONLESS
-       sb.sb_addrs = (void **)saddrlist;
-       sb.sb_fromaddr = &faddr;
-       sb.sb_useaddr = saddrlist[ 0 ] = &saddr;
-#endif
-       sb.sb_ber.ber_buf = NULL;
-       sb.sb_ber.ber_ptr = NULL;
-       sb.sb_ber.ber_end = NULL;
-
+       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 );
        timeout.tv_sec = idletime;
        timeout.tv_usec = 0;
        for ( ;; ) {
                struct conn             *dsaconn;
-               extern struct conn      *conns;
 
                FD_ZERO( &readfds );
                FD_SET( clientsock, &readfds );
@@ -564,7 +547,7 @@ do_queries(
                 * already waiting for us on the client sock.
                 */
 
-               if ( sb.sb_ber.ber_ptr >= sb.sb_ber.ber_end ) {
+               if ( ! lber_pvt_sb_data_ready( &sb ) ) {
                        if ( (rc = select( dtblsize, &readfds, 0, 0,
                            udp ? 0 : &timeout )) < 1 ) {
 #ifdef LDAP_DEBUG
@@ -590,7 +573,7 @@ do_queries(
                        }
                }
 
-               if ( sb.sb_ber.ber_ptr < sb.sb_ber.ber_end ||
+               if ( lber_pvt_sb_data_ready( &sb ) ||
                    FD_ISSET( clientsock, &readfds ) ) {
                        client_request( &sb, conns, udp );
                } else {
@@ -652,7 +635,8 @@ set_socket(
        return( s );
 }
 
-static RETSIGTYPE wait4child()
+static RETSIGTYPE
+wait4child( int sig )
 {
 #ifndef HAVE_WAITPID
        WAITSTATUSTYPE     status;
@@ -661,18 +645,18 @@ static RETSIGTYPE wait4child()
        Debug( LDAP_DEBUG_TRACE, "parent: catching child status\n", 0, 0, 0 );
 
 #ifdef HAVE_WAITPID
-       while( waitpid( (pid_t) -1, NULL, WAIT_FLAGS ) > 0 )
+       while( waitpid( (pid_t) -1, (int *) NULL, WAIT_FLAGS ) > 0 )
                ;       /* NULL */
 #else
-       while ( wait3( &status, WAIT_FLAGS, 0 ) > 0 )
+       while ( wait4( (pid_t) -1, &status, WAIT_FLAGS, 0 ) > 0 )
                ;       /* NULL */
 #endif
 
-       (void) SIGNAL( SIGCHLD, (void *) wait4child );
+       (void) SIGNAL( SIGCHLD, wait4child );
 }
 
 
-void
+RETSIGTYPE
 log_and_exit( int exitcode )
 {
        struct timeval  tv;
@@ -700,9 +684,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 );