New configuration variable "PidFile", section "[Global]": if defined,
the server writes its process ID (PID) to this file. Default: off. Idea by Florian Westphal, <westphal@foo.fh-furtwangen.de>.
This commit is contained in:
parent
ae63ed04c5
commit
112102b10c
|
@ -12,6 +12,9 @@
|
||||||
|
|
||||||
ngIRCd CVSHEAD
|
ngIRCd CVSHEAD
|
||||||
|
|
||||||
|
- New configuration variable "PidFile", section "[Global]": if defined,
|
||||||
|
the server writes its process ID (PID) to this file. Default: off.
|
||||||
|
Idea of Florian Westphal, <westphal@foo.fh-furtwangen.de>.
|
||||||
- Code cleanups from Florian Westphal, <westphal@foo.fh-furtwangen.de>.
|
- Code cleanups from Florian Westphal, <westphal@foo.fh-furtwangen.de>.
|
||||||
- Raised the maximum length of passwords to 20 characters.
|
- Raised the maximum length of passwords to 20 characters.
|
||||||
- Fixed a memory leak when resizing the connection pool and realloc()
|
- Fixed a memory leak when resizing the connection pool and realloc()
|
||||||
|
@ -19,7 +22,7 @@ ngIRCd CVSHEAD
|
||||||
Patch from Florian Westphal, <westphal@foo.fh-furtwangen.de>.
|
Patch from Florian Westphal, <westphal@foo.fh-furtwangen.de>.
|
||||||
- Added support for the Howl (http://www.porchdogsoft.com/products/howl/)
|
- Added support for the Howl (http://www.porchdogsoft.com/products/howl/)
|
||||||
Rendezvous API, in addition to the API of Apple (Mac OS X). The available
|
Rendezvous API, in addition to the API of Apple (Mac OS X). The available
|
||||||
APU will be autodetected when you call "./configure --with-rendezvous".
|
API will be autodetected when you call "./configure --with-rendezvous".
|
||||||
- Made ngIRCd compile on HP/UX 10.20 with native HP pre-ANSI C compiler and
|
- Made ngIRCd compile on HP/UX 10.20 with native HP pre-ANSI C compiler and
|
||||||
most probably other older C compilers on other systems.
|
most probably other older C compilers on other systems.
|
||||||
- When the daemon should switch to another user ID (ServerID is defined in
|
- When the daemon should switch to another user ID (ServerID is defined in
|
||||||
|
@ -579,4 +582,4 @@ ngIRCd 0.0.1, 31.12.2001
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
$Id: ChangeLog,v 1.258 2005/02/04 14:21:35 alex Exp $
|
$Id: ChangeLog,v 1.259 2005/02/04 14:24:20 alex Exp $
|
||||||
|
|
7
NEWS
7
NEWS
|
@ -12,9 +12,12 @@
|
||||||
|
|
||||||
ngIRCd CVSHEAD
|
ngIRCd CVSHEAD
|
||||||
|
|
||||||
|
- New configuration variable "PidFile", section "[Global]": if defined,
|
||||||
|
the server writes its process ID (PID) to this file. Default: off.
|
||||||
|
Idea of Florian Westphal, <westphal@foo.fh-furtwangen.de>.
|
||||||
- Added support for the Howl (http://www.porchdogsoft.com/products/howl/)
|
- Added support for the Howl (http://www.porchdogsoft.com/products/howl/)
|
||||||
Rendezvous API, in addition to the API of Apple (Mac OS X). The available
|
Rendezvous API, in addition to the API of Apple (Mac OS X). The available
|
||||||
APU will be autodetected when you call "./configure --with-rendezvous".
|
API will be autodetected when you call "./configure --with-rendezvous".
|
||||||
|
|
||||||
ngIRCd 0.8.0 (2004-06-26)
|
ngIRCd 0.8.0 (2004-06-26)
|
||||||
|
|
||||||
|
@ -195,4 +198,4 @@ ngIRCd 0.0.1, 31.12.2001
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
$Id: NEWS,v 1.67 2004/12/26 00:14:33 alex Exp $
|
$Id: NEWS,v 1.68 2005/02/04 14:24:20 alex Exp $
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $Id: sample-ngircd.conf,v 1.29 2005/01/17 12:51:17 alex Exp $
|
# $Id: sample-ngircd.conf,v 1.30 2005/02/04 14:24:21 alex Exp $
|
||||||
|
|
||||||
#
|
#
|
||||||
# This is a sample configuration file for the ngIRCd, which must be adepted
|
# This is a sample configuration file for the ngIRCd, which must be adepted
|
||||||
|
@ -67,6 +67,12 @@
|
||||||
# with root privileges!
|
# with root privileges!
|
||||||
;ChrootDir = /var/empty
|
;ChrootDir = /var/empty
|
||||||
|
|
||||||
|
# This tells ngircd to write its current process id to a file.
|
||||||
|
# Note that the pidfile is written AFTER chroot and switching uid, i.e.
|
||||||
|
# the Directory the pidfile resides in must be writeable by the ngircd user and
|
||||||
|
# exist in the chroot dir.
|
||||||
|
;PidFile = /var/run/ngircd/ngircd.pid
|
||||||
|
|
||||||
# After <PingTimeout> seconds of inactivity the server will send a
|
# After <PingTimeout> seconds of inactivity the server will send a
|
||||||
# PING to the peer to test whether it is alive or not.
|
# PING to the peer to test whether it is alive or not.
|
||||||
;PingTimeout = 120
|
;PingTimeout = 120
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#include "portab.h"
|
#include "portab.h"
|
||||||
|
|
||||||
static char UNUSED id[] = "$Id: conf.c,v 1.67 2005/01/20 00:13:08 alex Exp $";
|
static char UNUSED id[] = "$Id: conf.c,v 1.68 2005/02/04 14:24:21 alex Exp $";
|
||||||
|
|
||||||
#include "imp.h"
|
#include "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -122,7 +122,8 @@ Conf_Test( VOID )
|
||||||
printf( " AdminEMail = %s\n", Conf_ServerAdminMail );
|
printf( " AdminEMail = %s\n", Conf_ServerAdminMail );
|
||||||
printf( " MotdFile = %s\n", Conf_MotdFile );
|
printf( " MotdFile = %s\n", Conf_MotdFile );
|
||||||
printf( " MotdPhrase = %s\n", Conf_MotdPhrase );
|
printf( " MotdPhrase = %s\n", Conf_MotdPhrase );
|
||||||
printf( " ChrootDir= %s\n", Conf_Chroot );
|
printf( " ChrootDir = %s\n", Conf_Chroot );
|
||||||
|
printf( " PidFile = %s\n", Conf_PidFile);
|
||||||
printf( " Ports = " );
|
printf( " Ports = " );
|
||||||
for( i = 0; i < Conf_ListenPorts_Count; i++ )
|
for( i = 0; i < Conf_ListenPorts_Count; i++ )
|
||||||
{
|
{
|
||||||
|
@ -356,6 +357,8 @@ Set_Defaults( BOOLEAN InitServers )
|
||||||
|
|
||||||
strlcpy( Conf_Chroot, CHROOT_DIR, sizeof( Conf_Chroot ));
|
strlcpy( Conf_Chroot, CHROOT_DIR, sizeof( Conf_Chroot ));
|
||||||
|
|
||||||
|
strlcpy( Conf_PidFile, PID_FILE, sizeof( Conf_PidFile ));
|
||||||
|
|
||||||
Conf_ListenPorts_Count = 0;
|
Conf_ListenPorts_Count = 0;
|
||||||
strcpy( Conf_ListenAddress, "" );
|
strcpy( Conf_ListenAddress, "" );
|
||||||
|
|
||||||
|
@ -650,6 +653,16 @@ Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( strcasecmp( Var, "PidFile" ) == 0 )
|
||||||
|
{
|
||||||
|
/* name of pidfile */
|
||||||
|
if( strlcpy( Conf_PidFile, Arg, sizeof( Conf_PidFile )) >= sizeof( Conf_PidFile ))
|
||||||
|
Config_Error_TooLong( Line, Var );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if( strcasecmp( Var, "ServerUID" ) == 0 )
|
if( strcasecmp( Var, "ServerUID" ) == 0 )
|
||||||
{
|
{
|
||||||
/* UID the daemon should switch to */
|
/* UID the daemon should switch to */
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
* Please read the file COPYING, README and AUTHORS for more information.
|
* Please read the file COPYING, README and AUTHORS for more information.
|
||||||
*
|
*
|
||||||
* $Id: conf.h,v 1.29 2004/05/07 11:19:21 alex Exp $
|
* $Id: conf.h,v 1.30 2005/02/04 14:24:21 alex Exp $
|
||||||
*
|
*
|
||||||
* Configuration management (header)
|
* Configuration management (header)
|
||||||
*/
|
*/
|
||||||
|
@ -89,6 +89,9 @@ GLOBAL UINT Conf_GID;
|
||||||
/* A directory to chroot() in */
|
/* A directory to chroot() in */
|
||||||
GLOBAL CHAR Conf_Chroot[FNAME_LEN];
|
GLOBAL CHAR Conf_Chroot[FNAME_LEN];
|
||||||
|
|
||||||
|
/* File with PID of daemon */
|
||||||
|
GLOBAL CHAR Conf_PidFile[FNAME_LEN];
|
||||||
|
|
||||||
/* Timeouts for PING and PONG */
|
/* Timeouts for PING and PONG */
|
||||||
GLOBAL INT Conf_PingTimeout;
|
GLOBAL INT Conf_PingTimeout;
|
||||||
GLOBAL INT Conf_PongTimeout;
|
GLOBAL INT Conf_PongTimeout;
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
* Please read the file COPYING, README and AUTHORS for more information.
|
* Please read the file COPYING, README and AUTHORS for more information.
|
||||||
*
|
*
|
||||||
* $Id: defines.h,v 1.48 2005/01/17 13:14:36 alex Exp $
|
* $Id: defines.h,v 1.49 2005/02/04 14:24:21 alex Exp $
|
||||||
*
|
*
|
||||||
* Global defines of ngIRCd.
|
* Global defines of ngIRCd.
|
||||||
*/
|
*/
|
||||||
|
@ -85,6 +85,7 @@
|
||||||
#define MOTD_FILE "/ngircd.motd"
|
#define MOTD_FILE "/ngircd.motd"
|
||||||
#define MOTD_PHRASE ""
|
#define MOTD_PHRASE ""
|
||||||
#define CHROOT_DIR ""
|
#define CHROOT_DIR ""
|
||||||
|
#define PID_FILE ""
|
||||||
|
|
||||||
#define ERROR_DIR "/tmp"
|
#define ERROR_DIR "/tmp"
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#include "portab.h"
|
#include "portab.h"
|
||||||
|
|
||||||
static char UNUSED id[] = "$Id: ngircd.c,v 1.87 2005/01/26 22:03:15 alex Exp $";
|
static char UNUSED id[] = "$Id: ngircd.c,v 1.88 2005/02/04 14:24:21 alex Exp $";
|
||||||
|
|
||||||
#include "imp.h"
|
#include "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -57,6 +57,9 @@ LOCAL VOID Signal_Handler PARAMS(( INT Signal ));
|
||||||
LOCAL VOID Show_Version PARAMS(( VOID ));
|
LOCAL VOID Show_Version PARAMS(( VOID ));
|
||||||
LOCAL VOID Show_Help PARAMS(( VOID ));
|
LOCAL VOID Show_Help PARAMS(( VOID ));
|
||||||
|
|
||||||
|
LOCAL VOID Pidfile_Create PARAMS(( LONG ));
|
||||||
|
LOCAL VOID Pidfile_Delete PARAMS(( VOID ));
|
||||||
|
|
||||||
|
|
||||||
GLOBAL int
|
GLOBAL int
|
||||||
main( int argc, const char *argv[] )
|
main( int argc, const char *argv[] )
|
||||||
|
@ -285,9 +288,13 @@ main( int argc, const char *argv[] )
|
||||||
chdir( "/" );
|
chdir( "/" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Create PID file */
|
||||||
|
pid = (LONG) getpid( );
|
||||||
|
Pidfile_Create( pid );
|
||||||
|
|
||||||
/* Show user, group, and PID of the running daemon */
|
/* Show user, group, and PID of the running daemon */
|
||||||
pwd = getpwuid( getuid( )); grp = getgrgid( getgid( ));
|
pwd = getpwuid( getuid( )); grp = getgrgid( getgid( ));
|
||||||
Log( LOG_INFO, "Running as user %s(%ld), group %s(%ld), with PID %ld.", pwd ? pwd->pw_name : "unknown", (LONG)getuid( ), grp ? grp->gr_name : "unknown", (LONG)getgid( ), (LONG)getpid( ));
|
Log( LOG_INFO, "Running as user %s(%ld), group %s(%ld), with PID %ld.", pwd ? pwd->pw_name : "unknown", (LONG)getuid( ), grp ? grp->gr_name : "unknown", (LONG)getgid( ), pid);
|
||||||
|
|
||||||
/* Change working directory to home directory of the user
|
/* Change working directory to home directory of the user
|
||||||
* we are running as (when not running chroot()'ed!) */
|
* we are running as (when not running chroot()'ed!) */
|
||||||
|
@ -350,6 +357,7 @@ main( int argc, const char *argv[] )
|
||||||
{
|
{
|
||||||
Log( LOG_ALERT, "Server isn't listening on a single port!" );
|
Log( LOG_ALERT, "Server isn't listening on a single port!" );
|
||||||
Log( LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE_NAME );
|
Log( LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE_NAME );
|
||||||
|
Pidfile_Delete( );
|
||||||
exit( 1 );
|
exit( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -365,6 +373,8 @@ main( int argc, const char *argv[] )
|
||||||
Channel_Exit( );
|
Channel_Exit( );
|
||||||
Lists_Exit( );
|
Lists_Exit( );
|
||||||
Log_Exit( );
|
Log_Exit( );
|
||||||
|
|
||||||
|
Pidfile_Delete( );
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -585,4 +595,47 @@ Show_Help( VOID )
|
||||||
} /* Show_Help */
|
} /* Show_Help */
|
||||||
|
|
||||||
|
|
||||||
|
LOCAL VOID
|
||||||
|
Pidfile_Delete( VOID )
|
||||||
|
{
|
||||||
|
/* Pidfile configured? */
|
||||||
|
if( ! Conf_PidFile[0] ) return;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
Log( LOG_DEBUG, "Removing PID file (%s) ...", Conf_PidFile );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if( unlink( Conf_PidFile ))
|
||||||
|
Log( LOG_ERR, "Error unlinking PID file (%s): %s", Conf_PidFile, strerror( errno ));
|
||||||
|
} /* Pidfile_Delete */
|
||||||
|
|
||||||
|
|
||||||
|
LOCAL VOID
|
||||||
|
Pidfile_Create( LONG pid )
|
||||||
|
{
|
||||||
|
FILE *pidf;
|
||||||
|
|
||||||
|
/* Pidfile configured? */
|
||||||
|
if( ! Conf_PidFile[0] ) return;
|
||||||
|
|
||||||
|
pidf = fopen( Conf_PidFile, "w" );
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
Log( LOG_DEBUG, "Creating PID file (%s) ...", Conf_PidFile );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if( ! pidf )
|
||||||
|
{
|
||||||
|
Log( LOG_ERR, "Error writing PID file (%s): %s", Conf_PidFile, strerror( errno ));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( fprintf( pidf, "%ld\n", pid ) < 0 )
|
||||||
|
Log( LOG_ERR, "Can't write PID file (%s): %s", Conf_PidFile, strerror( errno ));
|
||||||
|
|
||||||
|
if( fclose(pidf) != 0 )
|
||||||
|
Log( LOG_ERR, "Error closing PID file (%s): %s", Conf_PidFile, strerror( errno ));
|
||||||
|
} /* Pidfile_Create */
|
||||||
|
|
||||||
|
|
||||||
/* -eof- */
|
/* -eof- */
|
||||||
|
|
Loading…
Reference in New Issue