Add client/tools password prompting (-W)
        Add slapd logging option
        Add slapd alternative args/pid file locations
-       Fix client SIGPIPE handling
-       Fix configure wait3 handling
-       Fix lber leaking ber_scanf
+       Fixed client SIGPIPE handling
+       Fixed configure wait3 handling
+       Fixed lber leaking ber_scanf
+       Fixed slapd/add entry rwlock race fix.
+       Fixed slapd/nextid race fix.
        Updated client -d(ebug) handling
        Updated slapd alias deref functionality to be optional
        Updated slapd DN handling
+       Updated slapd .args/.pid file handling
        Updated client/tools Kerberos option handling
 
 Changes included in OpenLDAP 1.1.3
 
-.TH SLAPD.CONF 5 "22 September 1998" "OpenLDAP LDVERSION"
+.TH SLAPD.CONF 5 "20 January 1999" "OpenLDAP LDVERSION"
 .SH NAME
 slapd.conf \- configuration file for slapd, the stand-alone LDAP daemon
 .SH SYNOPSIS
 Read additional configuration information from the given file before
 continuing with the next line of the current file.
 .TP
+.B pidfile <filename>
+The ( absolute ) name of a file that will hold the 
+.B slapd
+server's process ID ( see
+.BR getpid (2)
+) if started without the debugging command line option.
+.TP
+.B argsfile <filename>
+The ( absolute ) name of a file that will hold the 
+.B slapd
+server's command line options
+if started without the debugging command line option.
+.TP
 .B loglevel <integer>
 Specify the level at which debugging statements and operation 
 statistics should be syslogged (currently logged to the
 
-.TH SLAPD 8C "22 September 1998" "OpenLDAP LDVERSION"
+.TH SLAPD 8C "20 January 1999" "OpenLDAP LDVERSION"
 .SH NAME
 slapd \- Stand-alone LDAP Daemon
 .SH SYNOPSIS
 Upon startup,
 .B slapd
 normally forks and disassociates itself from the invoking tty.
-In this case, the
+If configured in
+.BR ETCDIR/slapd.conf ,
+the
 .B slapd
-process will print its process ID to a 
-.B .pid
-file ( see
+process will print its process ID ( see
 .BR getpid (2)
-), as well as the command line options during invocation to an
+) to a 
+.B .pid
+file, as well as the command line options during invocation to an
 .B .args
-file. By default, these files are located in the directory 
-.B LOCALSTATEDIR.
-The files' base names are derived from the 
-.B slapd
-binary name, making it possible to run several 
-.B slapd
-servers with differet names on the same machine, with each having
-its own 
-.B .pid/.args 
-files. (Those 
-.B slapd
-names might be obtained via symbolic links to one binary file.)
+file ( see 
+.BR slapd.conf (5)
+).
 If the
 .B \-d
 flag is given and debugging is set to some non-zero
 
 #define SLAPD_DEFAULT_SIZELIMIT                500
        /* default timelimit to spend on a search */
 #define SLAPD_DEFAULT_TIMELIMIT                3600
-       /* extension of the slapd pid file */
-#define SLAPD_PIDEXT            ".pid"
-       /* extension of the slapd args file */
-#define SLAPD_ARGSEXT           ".args"
        /* minimum max ids that a single index entry can map to in ldbm */
 #define SLAPD_LDBM_MIN_MAXIDS          4000
 
 
 int            global_lastmod;
 char           *ldap_srvtab = "";
 
+char   *slapd_pid_file  = NULL;
+char   *slapd_args_file = NULL;
+
 static char    *fp_getline(FILE *fp, int *lineno);
 static void    fp_getline_init(int *lineno);
 static void    fp_parse_line(char *line, int *argcp, char **argv);
                /* assign a default depth limit for alias deref */
                be->be_maxDerefDepth = SLAPD_DEFAULT_MAXDEREFDEPTH; 
 
+               /* get pid file name */
+               } else if ( strcasecmp( cargv[0], "pidfile" ) == 0 ) {
+                       if ( cargc < 2 ) {
+                               Debug( LDAP_DEBUG_ANY,
+           "%s: line %d: missing file name in \"pidfile <file>\" line\n",
+                                   fname, lineno, 0 );
+                               exit( 1 );
+                       }
+
+                       slapd_pid_file = ch_strdup( cargv[1] );
+
+               /* get args file name */
+               } else if ( strcasecmp( cargv[0], "argsfile" ) == 0 ) {
+                       if ( cargc < 2 ) {
+                               Debug( LDAP_DEBUG_ANY,
+           "%s: line %d: missing file name in \"argsfile <file>\" line\n",
+                                   fname, lineno, 0 );
+                               exit( 1 );
+                       }
+
+                       slapd_args_file = ch_strdup( cargv[1] );
+
                /* set size limit */
                } else if ( strcasecmp( cargv[0], "sizelimit" ) == 0 ) {
                        if ( cargc < 2 ) {
 
 static void    set_shutdown(int sig);
 static void    do_nothing  (int sig);
 
-/* we need the server's name for constructing the pid/args file names */
-#if defined( SLAPD_PIDEXT ) || defined( SLAPD_ARGSEXT )
-extern char  *serverName;
-#define DEFAULT_SERVERNAME  "slapd"
-#endif
+/* a link to the slapd.conf configuration parameters */
+extern char *slapd_pid_file;
+extern char *slapd_args_file;
 
 void *
 slapd_daemon(
        FILE                    *fp;
        int                     on = 1;
 
-#ifdef SLAPD_PIDEXT
-    char            pidFile[BUFSIZ];
-#endif
-#ifdef SLAPD_ARGSEXT
-    char            argsFile[BUFSIZ];
-#endif
-
 #ifdef HAVE_SYSCONF
        dtblsize = sysconf( _SC_OPEN_MAX );
 #elif HAVE_GETDTABLESIZE
 
        Debug( LDAP_DEBUG_ANY, "slapd starting\n", 0, 0, 0 );
 
-#if defined( SLAPD_PIDEXT ) || defined( SLAPD_ARGSEXT )
-    if ( !serverName ) serverName = DEFAULT_SERVERNAME;
-
-#ifdef SLAPD_PIDEXT
-    sprintf( pidFile, "%s%s%s%s", DEFAULT_RUNDIR, DEFAULT_DIRSEP,
-               serverName, SLAPD_PIDEXT );
-       if ( (fp = fopen( pidFile, "w" )) != NULL ) {
+       if (( slapd_pid_file != NULL ) &&
+                       (( fp = fopen( slapd_pid_file, "w" )) != NULL )) {
                fprintf( fp, "%d\n", (int) getpid() );
                fclose( fp );
        }
-#endif
-#ifdef SLAPD_ARGSEXT
-    sprintf( argsFile, "%s%s%s%s", DEFAULT_RUNDIR, DEFAULT_DIRSEP,
-       serverName, SLAPD_ARGSEXT );
-       if ( (fp = fopen( argsFile, "w" )) != NULL ) {
+
+       if (( slapd_args_file != NULL ) &&
+                       (( fp = fopen( slapd_args_file, "w" )) != NULL )) {
                for ( i = 0; i < g_argc; i++ ) {
                        fprintf( fp, "%s ", g_argv[i] );
                }
                fprintf( fp, "\n" );
                fclose( fp );
        }
-#endif
-#endif
-
 
        while ( !slapd_shutdown ) {
                struct sockaddr_in      from;
 
 
 #endif  /* LOG_LOCAL4 */
 
-/*
- * the server's name must be accessible from the daemon module,
- * to construct the pid/args file names
- */
-char  *serverName = NULL;
-
 
 static void
 usage( char *name )
        Backend         *be = NULL;
        FILE            *fp = NULL;
        char            *configfile;
+       char    *serverName;
 #ifdef LOG_LOCAL4
        int     syslogUser = DEFAULT_SYSLOG_USER;
 #endif
 
 include                ./data/slapd.at.conf
 include                ./data/slapd.oc.conf
 schemacheck    off
+pidfile     ./test-db/slapd.pid
+argsfile    ./test-db/slapd.args
 
 #######################################################################
 # ldbm database definitions
 
 include                ./data/slapd.at.conf
 include                ./data/slapd.oc.conf
 schemacheck    on
+pidfile     ./test-db/slapd.pid
+argsfile    ./test-db/slapd.args
 
 #######################################################################
 # ldbm database definitions
 
 include                ./data/slapd.at.conf
 include                ./data/slapd.oc.conf
 schemacheck    off
+pidfile     ./test-db/slapd.pid
+argsfile    ./test-db/slapd.args
 
 #######################################################################
 # ldbm database definitions
 
 include                ./data/slapd.at.conf
 include                ./data/slapd.oc.conf
 schemacheck    off
+pidfile     ./test-repl/slapd.pid
+argsfile    ./test-repl/slapd.args
 
 #######################################################################
 # ldbm database definitions