diff --git a/CHANGES b/CHANGES index 842fde7c33..9f03c0cce4 100644 --- a/CHANGES +++ b/CHANGES @@ -7,12 +7,15 @@ Changes included in OpenLDAP 1.2 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 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 +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 +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 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 \" 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 \" 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 738707165d..a9372fdac2 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -40,11 +40,9 @@ static int 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 dd7ecf0027..fb2ee3f36d 100644 --- a/servers/slapd/main.c +++ b/servers/slapd/main.c @@ -48,12 +48,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 ) @@ -75,6 +69,7 @@ main( int argc, char **argv ) Backend *be = NULL; FILE *fp = NULL; char *configfile; + char *serverName; #ifdef LOG_LOCAL4 int syslogUser = DEFAULT_SYSLOG_USER; #endif diff --git a/tests/data/slapd-acl.conf b/tests/data/slapd-acl.conf index 5e56dea19c..80dd2b6594 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 ./test-db/slapd.pid +argsfile ./test-db/slapd.args ####################################################################### # ldbm database definitions diff --git a/tests/data/slapd-master.conf b/tests/data/slapd-master.conf index 74ce2d19b0..8d642c56d4 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 ./test-db/slapd.pid +argsfile ./test-db/slapd.args ####################################################################### # ldbm database definitions diff --git a/tests/data/slapd-repl-master.conf b/tests/data/slapd-repl-master.conf index bce1d6821c..9bc24b482e 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 ./test-db/slapd.pid +argsfile ./test-db/slapd.args ####################################################################### # ldbm database definitions diff --git a/tests/data/slapd-repl-slave.conf b/tests/data/slapd-repl-slave.conf index 47c74aa3c5..66926c6c41 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 ./test-repl/slapd.pid +argsfile ./test-repl/slapd.args ####################################################################### # ldbm database definitions