From 68a87985942f1a2049950b9d5ed6346e041902b5 Mon Sep 17 00:00:00 2001
From: Kurt Spanier <ksp@openldap.org>
Date: Thu, 21 Jan 1999 15:53:54 +0000
Subject: [PATCH] Definition of slapd pid and args files as slapd.conf general
 parameters; introduction of pid/agrs parameters to the test-suite slapd.conf
 files; creation of sub-directory test/var for storage of pid/args files
 during test; update of the slapd and slapd.conf man pages. (The change
 reduces dependency on ldapconfig.h, since SLAPD_PIDEXT  and SLAPD_ARGSEXT are
 deleted from the code.)

---
 doc/man/man5/slapd.conf.5         | 15 ++++++++++++-
 doc/man/man8/slapd.8              | 29 ++++++++++---------------
 include/ldapconfig.h.edit         |  4 ----
 servers/slapd/config.c            | 25 ++++++++++++++++++++++
 servers/slapd/daemon.c            | 35 +++++++------------------------
 servers/slapd/main.c              |  7 +------
 tests/data/slapd-acl.conf         |  2 ++
 tests/data/slapd-master.conf      |  2 ++
 tests/data/slapd-repl-master.conf |  2 ++
 tests/data/slapd-repl-slave.conf  |  2 ++
 10 files changed, 67 insertions(+), 56 deletions(-)

diff --git a/doc/man/man5/slapd.conf.5 b/doc/man/man5/slapd.conf.5
index 3d7831293d..8cfdb7674b 100644
--- a/doc/man/man5/slapd.conf.5
+++ b/doc/man/man5/slapd.conf.5
@@ -1,4 +1,4 @@
-.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
@@ -111,6 +111,19 @@ any other access line.  The default behavior is to grant read access.
 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
diff --git a/doc/man/man8/slapd.8 b/doc/man/man8/slapd.8
index 85f3aa830a..bc6cd54680 100644
--- a/doc/man/man8/slapd.8
+++ b/doc/man/man8/slapd.8
@@ -1,4 +1,4 @@
-.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
@@ -18,26 +18,19 @@ is typically invoked at boot time, usually out of
 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
diff --git a/include/ldapconfig.h.edit b/include/ldapconfig.h.edit
index 6d73cf991d..ae9bea12e6 100644
--- a/include/ldapconfig.h.edit
+++ b/include/ldapconfig.h.edit
@@ -215,10 +215,6 @@ Please try again later.\r\n"
 #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
 
diff --git a/servers/slapd/config.c b/servers/slapd/config.c
index 77ea816731..ce5ddcdfb6 100644
--- a/servers/slapd/config.c
+++ b/servers/slapd/config.c
@@ -24,6 +24,9 @@ char		*replogfile;
 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);
@@ -83,6 +86,28 @@ read_config( char *fname, Backend **bep, FILE *pfp )
  		/* 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 ) {
diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c
index fd6ad73df5..a7a7335de6 100644
--- a/servers/slapd/daemon.c
+++ b/servers/slapd/daemon.c
@@ -40,11 +40,9 @@ static volatile sig_atomic_t slapd_shutdown = 0;
 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(
@@ -62,13 +60,6 @@ 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
@@ -150,30 +141,20 @@ slapd_daemon(
 
 	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;
diff --git a/servers/slapd/main.c b/servers/slapd/main.c
index d74326619e..4d7885a62b 100644
--- a/servers/slapd/main.c
+++ b/servers/slapd/main.c
@@ -49,12 +49,6 @@ static int   cnvt_str2int();
 
 #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 )
@@ -79,6 +73,7 @@ main( int argc, char **argv )
     int     syslogUser = DEFAULT_SYSLOG_USER;
 #endif
 	char		*configfile;
+	char        *serverName;
 
 	configfile = SLAPD_DEFAULT_CONFIGFILE;
 	port = LDAP_PORT;
diff --git a/tests/data/slapd-acl.conf b/tests/data/slapd-acl.conf
index 5e56dea19c..6e86cdb1c8 100644
--- a/tests/data/slapd-acl.conf
+++ b/tests/data/slapd-acl.conf
@@ -4,6 +4,8 @@
 include		./data/slapd.at.conf
 include		./data/slapd.oc.conf
 schemacheck	off
+pidfile     ./var/slapd-acl.pid
+argsfile    ./var/slapd-acl.args
 
 #######################################################################
 # ldbm database definitions
diff --git a/tests/data/slapd-master.conf b/tests/data/slapd-master.conf
index 74ce2d19b0..87f806e42d 100644
--- a/tests/data/slapd-master.conf
+++ b/tests/data/slapd-master.conf
@@ -4,6 +4,8 @@
 include		./data/slapd.at.conf
 include		./data/slapd.oc.conf
 schemacheck	on
+pidfile     ./var/slapd-master.pid
+argsfile    ./var/slapd-master.args
 
 #######################################################################
 # ldbm database definitions
diff --git a/tests/data/slapd-repl-master.conf b/tests/data/slapd-repl-master.conf
index bce1d6821c..3e5b1cc6eb 100644
--- a/tests/data/slapd-repl-master.conf
+++ b/tests/data/slapd-repl-master.conf
@@ -4,6 +4,8 @@
 include		./data/slapd.at.conf
 include		./data/slapd.oc.conf
 schemacheck	off
+pidfile     ./var/slapd-repl-master.pid
+argsfile    ./var/slapd-repl-master.args
 
 #######################################################################
 # ldbm database definitions
diff --git a/tests/data/slapd-repl-slave.conf b/tests/data/slapd-repl-slave.conf
index 47c74aa3c5..cc44dd1c01 100644
--- a/tests/data/slapd-repl-slave.conf
+++ b/tests/data/slapd-repl-slave.conf
@@ -4,6 +4,8 @@
 include		./data/slapd.at.conf
 include		./data/slapd.oc.conf
 schemacheck	off
+pidfile     ./var/slapd-repl-slave.pid
+argsfile    ./var/slapd-repl-slave.args
 
 #######################################################################
 # ldbm database definitions
-- 
GitLab