/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2005 by Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2007 Alexander Barton (alex@barton.de).
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "portab.h"
-static char UNUSED id[] = "$Id: ngircd.c,v 1.110 2005/09/02 17:12:58 alex Exp $";
+static char UNUSED id[] = "$Id: ngircd.c,v 1.119 2008/03/18 20:12:47 fw Exp $";
/**
* @file
static void Show_Version PARAMS(( void ));
static void Show_Help PARAMS(( void ));
-static void Pidfile_Create PARAMS(( long ));
+static void Pidfile_Create PARAMS(( pid_t pid ));
static void Pidfile_Delete PARAMS(( void ));
static void Fill_Version PARAMS(( void ));
/* Initialize modules, part II: these functions are eventually
* called with already dropped privileges ... */
- Lists_Init( );
Channel_Init( );
Client_Init( );
#ifdef ZEROCONF
#endif
Client_Exit( );
Channel_Exit( );
- Lists_Exit( );
Log_Exit( );
}
Pidfile_Delete( );
strlcat( NGIRCd_VersionAddition, "IRCPLUS", sizeof NGIRCd_VersionAddition );
#endif
+#ifdef WANT_IPV6
+ if (NGIRCd_VersionAddition[0])
+ strlcat(NGIRCd_VersionAddition, "+", sizeof(NGIRCd_VersionAddition));
+ strlcat(NGIRCd_VersionAddition, "IPv6", sizeof(NGIRCd_VersionAddition));
+#endif
if( NGIRCd_VersionAddition[0] )
strlcat( NGIRCd_VersionAddition, "-", sizeof( NGIRCd_VersionAddition ));
NGIRCd_Rehash( void )
{
char old_name[CLIENT_ID_LEN];
+ unsigned old_nicklen;
Log( LOG_NOTICE|LOG_snotice, "Re-reading configuration NOW!" );
NGIRCd_SignalRehash = false;
- /* Close down all listening sockets */
- Conn_ExitListeners( );
-
- /* Remember old server name */
+ /* Remember old server name and nick name length */
strlcpy( old_name, Conf_ServerName, sizeof old_name );
+ old_nicklen = Conf_MaxNickLength;
/* Re-read configuration ... */
- Conf_Rehash( );
+ if (!Conf_Rehash( ))
+ return;
- /* Recover old server name: it can't be changed during run-time */
- if( strcmp( old_name, Conf_ServerName ) != 0 )
- {
- strlcpy( Conf_ServerName, old_name, sizeof Conf_ServerName );
- Log( LOG_ERR, "Can't change \"ServerName\" on runtime! Ignored new name." );
+ /* Close down all listening sockets */
+ Conn_ExitListeners( );
+
+ /* Recover old server name and nick name length: these values can't
+ * be changed during run-time */
+ if (strcmp(old_name, Conf_ServerName) != 0 ) {
+ strlcpy(Conf_ServerName, old_name, sizeof Conf_ServerName);
+ Log(LOG_ERR, "Can't change \"ServerName\" on runtime! Ignored new name.");
+ }
+ if (old_nicklen != Conf_MaxNickLength) {
+ Conf_MaxNickLength = old_nicklen;
+ Log(LOG_ERR, "Can't change \"MaxNickLength\" on runtime! Ignored new value.");
}
/* Create new pre-defined channels */
#endif
/* Signal-Handler einhaengen */
- sigaction( SIGINT, &saction, NULL );
- sigaction( SIGQUIT, &saction, NULL );
- sigaction( SIGTERM, &saction, NULL);
- sigaction( SIGHUP, &saction, NULL);
- sigaction( SIGCHLD, &saction, NULL);
+ sigaction(SIGINT, &saction, NULL);
+ sigaction(SIGQUIT, &saction, NULL);
+ sigaction(SIGTERM, &saction, NULL);
+ sigaction(SIGHUP, &saction, NULL);
+ sigaction(SIGCHLD, &saction, NULL);
/* einige Signale ignorieren */
saction.sa_handler = SIG_IGN;
- sigaction( SIGPIPE, &saction, NULL );
+ sigaction(SIGPIPE, &saction, NULL);
#else
/* kein sigaction() vorhanden */
/* Signal-Handler einhaengen */
- signal( SIGINT, Signal_Handler );
- signal( SIGQUIT, Signal_Handler );
- signal( SIGTERM, Signal_Handler );
- signal( SIGHUP, Signal_Handler );
- signal( SIGCHLD, Signal_Handler );
+ signal(SIGINT, Signal_Handler);
+ signal(SIGQUIT, Signal_Handler);
+ signal(SIGTERM, Signal_Handler);
+ signal(SIGHUP, Signal_Handler);
+ signal(SIGCHLD, Signal_Handler);
/* einige Signale ignorieren */
- signal( SIGPIPE, SIG_IGN );
+ signal(SIGPIPE, SIG_IGN);
#endif
} /* Initialize_Signal_Handler */
Show_Version( void )
{
puts( NGIRCd_Version );
- puts( "Copyright (c)2001-2005 Alexander Barton (<alex@barton.de>) and Contributors." );
+ puts( "Copyright (c)2001-2007 Alexander Barton (<alex@barton.de>) and Contributors." );
puts( "Homepage: <http://ngircd.barton.de/>\n" );
puts( "This is free software; see the source for copying conditions. There is NO" );
puts( "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." );
* @param pid The process ID to be stored in this file.
*/
static void
-Pidfile_Create( long pid )
+Pidfile_Create(pid_t pid)
{
int pidfd;
char pidbuf[64];
return;
}
- len = snprintf( pidbuf, sizeof pidbuf, "%ld\n", pid );
- if (len < 0|| len < (int)sizeof pid) {
+ len = snprintf(pidbuf, sizeof pidbuf, "%ld\n", (long)pid);
+ if (len < 0 || len >= (int)sizeof pidbuf) {
Log( LOG_ERR, "Error converting pid");
return;
}
- if( write( pidfd, pidbuf, len) != len)
+ if (write(pidfd, pidbuf, (size_t)len) != (ssize_t)len)
Log( LOG_ERR, "Can't write PID file (%s): %s", Conf_PidFile, strerror( errno ));
if( close(pidfd) != 0 )
static bool
-NGIRCd_getNobodyID(unsigned int *uid, unsigned int *gid )
+NGIRCd_getNobodyID(uid_t *uid, gid_t *gid )
{
struct passwd *pwd;
struct passwd *pwd;
struct group *grp;
int real_errno;
- long pid;
+ pid_t pid;
if (initialized)
return true;
* connected to ther controlling terminal. Use "--nodaemon"
* to disable this "daemon mode" (useful for debugging). */
if ( ! NGIRCd_NoDaemon ) {
- pid = (long)fork( );
+ pid = fork( );
if( pid > 0 ) {
/* "Old" process: exit. */
exit( 0 );
if( chdir( pwd->pw_dir ) == 0 )
Log( LOG_DEBUG, "Changed working directory to \"%s\" ...", pwd->pw_dir );
else
- Log( LOG_ERR, "Can't change working directory to \"%s\": %s",
+ Log( LOG_INFO, "Notice: Can't change working directory to \"%s\": %s",
pwd->pw_dir, strerror( errno ));
}
} else {