]> git.sur5r.net Git - openldap/commitdiff
Merge from LAMBERT branch
authorKurt Zeilenga <kurt@openldap.org>
Mon, 17 Aug 1998 23:26:25 +0000 (23:26 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Mon, 17 Aug 1998 23:26:25 +0000 (23:26 +0000)
17 files changed:
Make-common
build/platforms/freebsd-gcc/Make-platform
clients/finger/main.c
clients/gopher/go500.c
clients/gopher/go500gw.c
contrib/whois++/command.c
libraries/liblber/decode.c
libraries/liblber/encode.c
libraries/libldap/os-ip.c
libraries/libldap/result.c
libraries/msdos/winsock/wsockip.c
servers/slapd/connection.c
servers/slapd/daemon.c
servers/slapd/main.c
servers/slurpd/re.c
servers/slurpd/replica.c
servers/slurpd/rq.c

index 800a743742194ed1078b0452a564b5e82192a1f3..1869d320d9a9a745ebd771292c87bf99c83de2c8 100644 (file)
@@ -39,14 +39,15 @@ BINDIR= $(INSTROOT)/bin
 # if you want things to run in a different directory from where they
 # are installed, set this accordingly (this path gets compiled into a
 # few binaries). otherwise, leave it alone.
-RUNTIMEETCDIR= $(ETCDIR)
+RUNTIMEETCDIR?= $(ETCDIR)
 
 #############################################################################
 ## General compiler options                                                ##
 #############################################################################
 # Passed to every compile (cc or gcc).  This is where you put -O or -g, etc.
 EXTRACFLAGS=-O -g
-# EXTRACFLAGS=-O
+#EXTRACFLAGS=-O
+#EXTRACFLAGS=-g
 # Passed to every link (ld).  Include -g here if you did in EXTRACFLAGS.
 EXTRALDFLAGS=-g
 
@@ -125,23 +126,26 @@ SLAPD_BACKENDS= -DLDAP_LDBM # -DLDAP_SHELL -DLDAP_PASSWD
 # You will also need to edit the include and lib strings appropriately.
 #
 # berkeley db btree package
-LDBMBACKEND=-DLDBM_USE_DBBTREE
-LDBMINCLUDE=-I/usr/include
 #LDBMLIB=-ldb
+#LDBMBACKEND?=-DLDBM_USE_DBBTREE
+#LDBMINCLUDE?=-I/usr/local/db/include
+#LDBMLIB?=-ldb
 # berkeley db hash package
-#LDBMBACKEND=-DLDBM_USE_DBHASH
-#LDBMINCLUDE=-I/usr/local/db/include
-#LDBMLIB=-ldb
+#LDBMBACKEND?=-DLDBM_USE_DBHASH
+#LDBMINCLUDE?=-I/usr/local/db/include
+#LDBMLIB?=-ldb
 # gnu dbm (gdbm)
-#LDBMBACKEND=-DLDBM_USE_GDBM
-#LDBMINCLUDE=-I/usr/local/gdbm/include
-#LDBMLIB=-lgdbm
+#LDBMBACKEND?=-DLDBM_USE_GDBM
+#LDBMINCLUDE?=-I/usr/local/gdbm/include
+#LDBMLIB?=-lgdbm
 # standard unix ndbm
-#LDBMBACKEND=-DLDBM_USE_NDBM
+LDBMBACKEND?=-DLDBM_USE_NDBM
+LDBMINCLUDE?=
+LDBMLIB?=
 #
 # if you want to use a non-default threads package change these lines
-#THREADS=-DPOSIX_THREADS
-#THREADSLIB= -pthread
+#THREADS?=-DNO_THREADS
+#THREADSLIB?=
 
 #############################################################################
 ## The following options are used by the xax500 client.  If you haven't    ##
index 1b8dae7517215296a076f1e60474488b05eb75a1..66a943256ff71edcbe255b251f7ac4ad9a8067f1 100644 (file)
@@ -6,12 +6,39 @@
 #
 # add any platform-specific overrides below here
 #
+PREFIX?=/usr/local
+INSTROOT=${PREFIX}
+ETCDIR= $(INSTROOT)/etc/ldap
+EXTRACFLAGS=-O -DLDAP_DEBUG
+LDBMBACKEND=-DLDBM_USE_DBBTREE
+LDBMINCLUDE=-I/usr/include
+#
+# LDAP has a problem with the idea of implicit vs. explicit yields
+# in call conversion threading packages, like the MIT pthreads
+# package.  Rather than resolve this globally, I have marked the
+# threading as "preeemptive", even though it is technically not.
+#
+# As far as I have been able to determine, there are not buzz-loop
+# based races in the LDAP code (at least not now that I've fixed
+# the bogus FD_SETSIZE assumptions about the select(2) system call
+# implementation being in any way related to getdtablesize(2) --
+# if it were, sys/types.h would define FD_SETSIZE in terms of the
+# getdtablesize(2) call, and there would be no implicit limits).
+#
+# This means that the implicit-yield threading is topologically
+# equivalent to preemptive threading.
+#
+THREADS= -D_THREAD_SAFE -DPOSIX_THREADS -DPTHREAD_PREEMPTIVE
+THREADSLIB= -pthread
+
+# we need to link in the V3 library to get sigset()
+PLATFORMLIBS= -lcrypt
 
 #
 # -------------------------------------------------------------------------
 # you will probably not need to edit anything below this point
 # -------------------------------------------------------------------------
-CC     = cc
+CC     = gcc
 
 PLATFORMCFLAGS=        -Dfreebsd
 
index 38c8dfc7696b0a4e8e7c3dd4c08f888f8e12b8f3..64640543a4ffe457fdfa8ace23d85cdf41b1d5f9 100644 (file)
@@ -172,11 +172,20 @@ static do_query()
                exit( 1 );
        }
 
+#ifdef FD_SETSIZE
+       /*
+        * It is invalid to use a set size in excess of the type
+        * scope, as defined for the fd_set in sys/types.h.  This
+        * is true for any OS.
+        */
+       tblsize = FD_SETSIZE;
+#else  /* !FD_SETSIZE*/
 #ifdef USE_SYSCONF
        tblsize = sysconf( _SC_OPEN_MAX );
 #else /* USE_SYSCONF */
        tblsize = getdtablesize();
 #endif /* USE_SYSCONF */
+#endif /* !FD_SETSIZE*/
 
        timeout.tv_sec = FINGER_TIMEOUT;
        timeout.tv_usec = 0;
index 333787677a14ef869a5b8c13120d16681f44eec7..484c39c556639f62a5784f8883746cef5408044d 100644 (file)
@@ -140,11 +140,20 @@ char      **argv;
        }
 #endif
 
+#ifdef FD_SETSIZE
+       /*
+        * It is invalid to use a set size in excess of the type
+        * scope, as defined for the fd_set in sys/types.h.  This
+        * is true for any OS.
+        */
+       dtblsize = FD_SETSIZE;
+#else  /* !FD_SETSIZE*/
 #ifdef USE_SYSCONF
        dtblsize = sysconf( _SC_OPEN_MAX );
 #else /* USE_SYSCONF */
        dtblsize = getdtablesize();
 #endif /* USE_SYSCONF */
+#endif /* !FD_SETSIZE*/
 
        /* detach if stderr is redirected or no debugging */
        if ( inetd == 0 )
index 7f74fbf57c562e78dca41c33a5e9f4ac11a5c798..01d8b0cbc4e22372c2ce61821c3700853697048e 100644 (file)
@@ -150,11 +150,20 @@ char      **argv;
                }
        }
 
+#ifdef FD_SETSIZE
+       /*
+        * It is invalid to use a set size in excess of the type
+        * scope, as defined for the fd_set in sys/types.h.  This
+        * is true for any OS.
+        */
+       dtblsize = FD_SETSIZE;
+#else  /* !FD_SETSIZE*/
 #ifdef USE_SYSCONF
        dtblsize = sysconf( _SC_OPEN_MAX );
 #else /* USE_SYSCONF */
        dtblsize = getdtablesize();
 #endif /* USE_SYSCONF */
+#endif /* !FD_SETSIZE*/
 
 #ifdef GO500GW_HOSTNAME
        strcpy( myhost, GO500GW_HOSTNAME );
index 7c57b8b83cddfed58c5236c64306286af1e91587..f9688b37e523ce4079a77f7e108ffe8a8c757062 100644 (file)
@@ -50,7 +50,16 @@ char *token;
        int             i, status, tablesize;
 
        if ( buffer == NULL ) {
+#ifdef FD_SETSIZE
+               /*
+                * It is invalid to use a set size in excess of the type
+                * scope, as defined for the fd_set in sys/types.h.  This
+                * is true for any OS.
+                */
+               tablesize = FD_SETSIZE;
+#else  /* !FD_SETSIZE*/
                tablesize = getdtablesize();
+#endif /* !FD_SETSIZE*/
                timeout.tv_sec = 60;
                timeout.tv_usec = 0;
                FD_ZERO( &readfds );
index a4fe65ae8171bb7211478a057ad73682cda87b79..2fd2a6252ba996319a5cecc57683e5c65b134b87 100644 (file)
 #include <stdarg.h>
 #include "macos.h"
 #else /* MACOS */
-#if defined(NeXT) || defined(VMS)
+
+#if defined(NeXT) || defined(VMS) || defined(__FreeBSD__)
 #include <stdlib.h>
-#else /* next || vms */
-#ifndef __FreeBSD__
+#else /* next || vms || freebsd */
 #include <malloc.h>
-#endif
-#endif /* next || vms */
+#endif /* next || vms || freebsd */
 #if defined(BC31) || defined(_WIN32)
 #include <stdarg.h>
 #else /* BC31 || _WIN32 */
index cb9e30ffa0158df0ad9f9c5da23c395265136f25..c8a95e2a19dd5f8bf1397937817ca16801d6b4bd 100644 (file)
 #include <stdarg.h>
 #include "macos.h"
 #else /* MACOS */
-#if defined(NeXT) || defined(VMS)
+#if defined(NeXT) || defined(VMS) || defined(__FreeBSD__)
 #include <stdlib.h>
-#else /* next || vms */
-#ifndef __FreeBSD__
+#else /* next || vms || freebsd */
 #include <malloc.h>
-#endif
-#endif /* next || vms */
-#if defined( BC31 ) || defined( _WIN32 ) 
+#endif /* next || vms || freebsd */
+#if defined( BC31 ) || defined( _WIN32 )
 #include <stdarg.h>
 #else /* BC31 || _WIN32 */
 #include <varargs.h>
index 955a5fab521968036cffcf36f9bd277180a1b6c5..d7ae408a82527dd3ebaff6047e380bbd5fd4c9dd 100644 (file)
@@ -314,11 +314,20 @@ do_ldap_select( LDAP *ld, struct timeval *timeout )
        Debug( LDAP_DEBUG_TRACE, "do_ldap_select\n", 0, 0, 0 );
 
        if ( tblsize == 0 ) {
+#ifdef FD_SETSIZE
+               /*
+                * It is invalid to use a set size in excess of the type
+                * scope, as defined for the fd_set in sys/types.h.  This
+                * is true for any OS.
+                */
+               tblsize = FD_SETSIZE;
+#else  /* !FD_SETSIZE*/
 #ifdef USE_SYSCONF
                tblsize = sysconf( _SC_OPEN_MAX );
 #else /* USE_SYSCONF */
                tblsize = getdtablesize();
 #endif /* USE_SYSCONF */
+#endif /* !FD_SETSIZE*/
        }
 
        sip = (struct selectinfo *)ld->ld_selectinfo;
index 39f26522c2197d967c1337d4e4a80d2407f134f4..77929120eb105e66dac0354b7a7cf4af59aa5aa7 100644 (file)
@@ -543,12 +543,17 @@ lr->lr_res_matched ? lr->lr_res_matched : "" );
                *result = l;
                ld->ld_errno = LDAP_SUCCESS;
 #ifdef LDAP_WORLD_P16
-               /* inclusion of this patch causes searchs to hang on
-                       multiple platforms */
+               /*
+                * XXX questionable fix; see text for [P16] on
+                * http://www.critical-angle.com/ldapworld/patch/
+                *
+                * inclusion of this patch causes searchs to hang on
+                * multiple platforms
+                */
                return( l->lm_msgtype );
-#else
+#else  /* LDAP_WORLD_P16 */
                return( tag );
-#endif
+#endif /* !LDAP_WORLD_P16 */
        }
 
        return( -2 );   /* continue looking */
@@ -633,11 +638,20 @@ ldap_select1( LDAP *ld, struct timeval *timeout )
        static int      tblsize;
 
        if ( tblsize == 0 ) {
+#ifdef FD_SETSIZE
+               /*
+                * It is invalid to use a set size in excess of the type
+                * scope, as defined for the fd_set in sys/types.h.  This
+                * is true for any OS.
+                */
+               tblsize = FD_SETSIZE;
+#else  /* !FD_SETSIZE*/
 #ifdef USE_SYSCONF
                tblsize = sysconf( _SC_OPEN_MAX );
 #else /* USE_SYSCONF */
                tblsize = getdtablesize();
 #endif /* USE_SYSCONF */
+#endif /* !FD_SETSIZE*/
        }
 
        FD_ZERO( &readfds );
index 307541cfc2826027f635d177a62020d60d0d56e3..5c86cd771f4ccdf41df610a3a1987caeb5caca0c 100644 (file)
@@ -446,6 +446,14 @@ do_ldap_select( LDAP *ld, struct timeval *timeout )
        Debug( LDAP_DEBUG_TRACE, "do_ldap_select\n", 0, 0, 0 );
 
        if ( tblsize == 0 ) {
+#ifdef FD_SETSIZE
+               /*
+                * It is invalid to use a set size in excess of the type
+                * scope, as defined for the fd_set in sys/types.h.  This
+                * is true for any OS.
+                */
+               tblsize = FD_SETSIZE;
+#else  /* !FD_SETSIZE*/
 #ifdef USE_SYSCONF
                tblsize = sysconf( _SC_OPEN_MAX );
 #else /* USE_SYSCONF */
@@ -455,6 +463,7 @@ do_ldap_select( LDAP *ld, struct timeval *timeout )
                tblsize = getdtablesize();
 #endif
 #endif /* USE_SYSCONF */
+#endif /* !FD_SETSIZE*/
        }
 
        sip = (struct selectinfo *)ld->ld_selectinfo;
index df5618ad70e023839559feaa4c147aba81057841..275e644af82623a869cd020d59c12874d6a7b79b 100644 (file)
@@ -203,6 +203,22 @@ connection_activity(
 
        pthread_attr_init( &attr );
        pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );
+#ifdef PTHREAD_MUTEX_INITIALIZER
+       /*
+        * This is a draft 10 or standard pthreads implementation
+        */
+       if ( pthread_create( &arg->co_op->o_tid, attr,
+           (void *) connection_operation, (void *) arg ) != 0 ) {
+               Debug( LDAP_DEBUG_ANY, "pthread_create failed\n", 0, 0, 0 );
+       } else {
+               pthread_mutex_lock( &active_threads_mutex );
+               active_threads++;
+               pthread_mutex_unlock( &active_threads_mutex );
+       }
+#else  /* !PTHREAD_MUTEX_INITIALIZER*/
+       /*
+        * This is a draft 4 or earlier pthreads implementation
+        */
        if ( pthread_create( &arg->co_op->o_tid, &attr,
            (void *) connection_operation, (void *) arg ) != 0 ) {
                Debug( LDAP_DEBUG_ANY, "pthread_create failed\n", 0, 0, 0 );
@@ -211,5 +227,6 @@ connection_activity(
                active_threads++;
                pthread_mutex_unlock( &active_threads_mutex );
        }
+#endif /* !PTHREAD_MUTEX_INITIALIZER*/
        pthread_attr_destroy( &attr );
 }
index 38062d9b2b47e1ea77a756f2d99e824963922f78..c88ab7ecc9891ab612ce824565b0b155a477e56a 100644 (file)
@@ -78,16 +78,19 @@ slapd_daemon(
        int                     on = 1;
 
 #ifdef USE_SYSCONF
-        dtblsize = sysconf( _SC_OPEN_MAX );
+       dtblsize = sysconf( _SC_OPEN_MAX );
 #else /* USE_SYSCONF */
-        dtblsize = getdtablesize();
+       dtblsize = getdtablesize();
 #endif /* USE_SYSCONF */
        /*
         * Add greg@greg.rim.or.jp
         */
+#ifdef FD_SETSIZE
        if(dtblsize > FD_SETSIZE) {
                dtblsize = FD_SETSIZE;
        }
+#endif /* !FD_SETSIZE*/
+
        c = (Connection *) ch_calloc( 1, dtblsize * sizeof(Connection) );
 
        for ( i = 0; i < dtblsize; i++ ) {
@@ -222,7 +225,7 @@ slapd_daemon(
 #endif
                pthread_mutex_unlock( &active_threads_mutex );
 
-               switch ( select( dtblsize, &readfds, &writefds, 0, tvp ) ) {
+               switch ( i = select( dtblsize, &readfds, &writefds, 0, tvp ) ) {
                case -1:        /* failure - try again */
                        Debug( LDAP_DEBUG_CONNS,
                            "select failed errno %d (%s)\n",
@@ -237,7 +240,7 @@ slapd_daemon(
                        continue;
 
                default:        /* something happened - deal with it */
-                       Debug( LDAP_DEBUG_CONNS, "select activity\n", 0, 0, 0 );
+                       Debug( LDAP_DEBUG_CONNS, "select activity on %d descriptors\n", i, 0, 0 );
                        ;       /* FALL */
                }
                pthread_mutex_lock( &currenttime_mutex );
index 70b21821b01436d650b72b90be4c7f40fa8a9509..b2777d544b205032f5caa7f6bbb6c9a628e2d81a 100644 (file)
@@ -15,6 +15,7 @@ extern int    lber_debug;
 
 extern char Versionstr[];
 
+
 /*
  * read-only global variables or variables only written by the listener
  * thread (after they are initialized) - no need to protect them with a mutex.
@@ -184,12 +185,27 @@ main( argc, argv )
                pthread_attr_init( &attr );
                pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );
 
+#ifdef PTHREAD_MUTEX_INITIALIZER
+               /*
+                * 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  /* !PTHREAD_MUTEX_INITIALIZER */
+               /*
+                * 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 /* !PTHREAD_MUTEX_INITIALIZER */
                pthread_attr_destroy( &attr );
                pthread_join( listener_tid, (void *) &status );
                pthread_exit( 0 );
index 18043d98f8ace277efb6e44eaeae2e3c3989ea7c..401630d7deb6d2420762d36f37f2753b0419c172 100644 (file)
@@ -33,7 +33,7 @@ extern void ch_free( char *p );
 
 #ifndef        SYSERRLIST_IN_STDIO
 extern char *sys_errlist[];
-#endif /* SYSERRLIST_IN_STDIO
+#endif /* SYSERRLIST_IN_STDIO */
 
 /* Forward references */
 static Rh      *get_repl_hosts( char *, int *, char ** );
index ce878390fd3092486aa7e876204da519509a5b32..59c2f726729af06df06766c9a4600bec7254a293 100644 (file)
@@ -59,6 +59,21 @@ start_replica_thread(
     pthread_attr_init( &attr );
     pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );
 
+#ifdef PTHREAD_MUTEX_INITIALIZER
+    /*
+     * This is a draft 10 or standard pthreads implementation
+     */
+    if ( pthread_create( &(ri->ri_tid), attr, (void *) replicate,
+           (void *) ri ) != 0 ) {
+       Debug( LDAP_DEBUG_ANY, "replica \"%s:%d\" pthread_create failed\n",
+               ri->ri_hostname, ri->ri_port, 0 );
+       pthread_attr_destroy( &attr );
+       return -1;
+    }
+#else  /* !PTHREAD_MUTEX_INITIALIZER */
+    /*
+     * This is a draft 4 or earlier pthreads implementation
+     */
     if ( pthread_create( &(ri->ri_tid), &attr, (void *) replicate,
            (void *) ri ) != 0 ) {
        Debug( LDAP_DEBUG_ANY, "replica \"%s:%d\" pthread_create failed\n",
@@ -66,6 +81,7 @@ start_replica_thread(
        pthread_attr_destroy( &attr );
        return -1;
     }
+#endif /* !PTHREAD_MUTEX_INITIALIZER */
     pthread_attr_destroy( &attr );
     return 0;
 }
index ef94cfa935726a4a5fd271ebf7214a9842476229..3fb842d48e99bef45be02c28dc2d144773efd584 100644 (file)
@@ -44,9 +44,9 @@ extern void Re_dump( Re *re );
 extern void Re_dump();
 #endif /* NEEDPROTOS */
 
-#ifndef        SYSERRLIST_IN_STDIO
+#ifndef SYSERRLIST_IN_STDIO
 extern char *sys_errlist[];
-#endif /* SYSERRLIST_IN_STDIO
+#endif /* SYSERRLIST_IN_STDIO */
 
 /*
  * Lock the replication queue.