X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Fngircd.c;h=74a998800f364376a87efb290cd2d0dc030a2ab4;hp=d4d4d5f96a1db1b627320a0b453ce60102c771d0;hb=162433398e320c45f3c8a523814518aa6b78372e;hpb=355828e64f6fa07eb96bc6b27eef964b529d8778 diff --git a/src/ngircd/ngircd.c b/src/ngircd/ngircd.c index d4d4d5f9..74a99880 100644 --- a/src/ngircd/ngircd.c +++ b/src/ngircd/ngircd.c @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2010 Alexander Barton (alex@barton.de). + * Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors. * * 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 @@ -9,7 +9,6 @@ * Please read the file COPYING, README and AUTHORS for more information. */ - #include "portab.h" /** @@ -49,10 +48,6 @@ #include "io.h" #include "irc.h" -#ifdef ZEROCONF -#include "rendezvous.h" -#endif - #include "exp.h" #include "ngircd.h" @@ -72,11 +67,13 @@ static bool NGIRCd_Init PARAMS(( bool )); /** * The main() function of ngIRCd. + * * Here all starts: this function is called by the operating system loader, * it is the first portion of code executed of ngIRCd. - * @param argc The number of arguments passed to ngIRCd on the command line. - * @param argv An array containing all the arguments passed to ngIRCd. - * @return Global exit code of ngIRCd, zero on success. + * + * @param argc The number of arguments passed to ngIRCd on the command line. + * @param argv An array containing all the arguments passed to ngIRCd. + * @return Global exit code of ngIRCd, zero on success. */ GLOBAL int main( int argc, const char *argv[] ) @@ -237,7 +234,7 @@ main( int argc, const char *argv[] ) } } - /* Debug-Level (for IRCs "VERSION" command) */ + /* Debug level for "VERSION" command */ NGIRCd_DebugLevel[0] = '\0'; #ifdef DEBUG if( NGIRCd_Debug ) strcpy( NGIRCd_DebugLevel, "1" ); @@ -280,16 +277,8 @@ main( int argc, const char *argv[] ) * called with already dropped privileges ... */ Channel_Init( ); Client_Init( ); -#ifdef ZEROCONF - Rendezvous_Init( ); -#endif Conn_Init( ); -#ifdef DEBUG - /* Redirect stderr handle to "error file" for debugging - * when not running in "no daemon" mode: */ - if( ! NGIRCd_NoDaemon ) Log_InitErrorfile( ); -#endif if (!io_library_init(CONNECTION_POOL)) { Log(LOG_ALERT, "Fatal: Cannot initialize IO routines: %s", strerror(errno)); exit(1); @@ -300,11 +289,11 @@ main( int argc, const char *argv[] ) exit(1); } - /* - * create protocol and server identification. - * The syntax used by ngIRCd in PASS commands and the extended flags - * are described in doc/Protocol.txt - */ + srandom(getpid()); + + /* Create protocol and server identification. The syntax + * used by ngIRCd in PASS commands and the known "extended + * flags" are described in doc/Protocol.txt. */ #ifdef IRCPLUS snprintf( NGIRCd_ProtoID, sizeof NGIRCd_ProtoID, "%s%s %s|%s:%s", PROTOVER, PROTOIRCPLUS, PACKAGE_NAME, PACKAGE_VERSION, IRCPLUSFLAGS ); #ifdef ZLIB @@ -329,15 +318,11 @@ main( int argc, const char *argv[] ) Pidfile_Delete( ); exit( 1 ); } - - /* Hauptschleife */ + + /* Main Run Loop */ Conn_Handler( ); - /* Alles abmelden */ Conn_Exit( ); -#ifdef ZEROCONF - Rendezvous_Exit( ); -#endif Client_Exit( ); Channel_Exit( ); Log_Exit( ); @@ -349,10 +334,12 @@ main( int argc, const char *argv[] ) /** - * Generate ngIRCd "version string". - * This string is generated once and then stored in NGIRCd_Version for - * further usage, for example by the IRC command VERSION and the --version - * command line switch. + * Generate ngIRCd "version strings". + * + * The ngIRCd version information is generated once and then stored in the + * NGIRCd_Version and NGIRCd_VersionAddition string variables for further + * usage, for example by the IRC command "VERSION" and the --version command + * line switch. */ static void Fill_Version( void ) @@ -376,11 +363,6 @@ Fill_Version( void ) strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition ); strlcat( NGIRCd_VersionAddition, "TCPWRAP", sizeof NGIRCd_VersionAddition ); #endif -#ifdef ZEROCONF - if( NGIRCd_VersionAddition[0] ) - strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition ); - strlcat( NGIRCd_VersionAddition, "ZEROCONF", sizeof NGIRCd_VersionAddition ); -#endif #ifdef IDENTAUTH if( NGIRCd_VersionAddition[0] ) strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition ); @@ -427,7 +409,7 @@ Fill_Version( void ) snprintf(NGIRCd_Version, sizeof NGIRCd_Version, "%s %s-%s", PACKAGE_NAME, PACKAGE_VERSION, NGIRCd_VersionAddition); - } /* Fill_Version */ +} /* Fill_Version */ /** @@ -437,7 +419,7 @@ static void Show_Version( void ) { puts( NGIRCd_Version ); - puts( "Copyright (c)2001-2010 Alexander Barton () and Contributors." ); + puts( "Copyright (c)2001-2011 Alexander Barton () and Contributors." ); puts( "Homepage: \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." ); @@ -487,7 +469,8 @@ Pidfile_Delete( void ) /** * Create the file containing the process ID of ngIRCd ("PID file"). - * @param pid The process ID to be stored in this file. + * + * @param pid The process ID to be stored in this file. */ static void Pidfile_Create(pid_t pid) @@ -525,6 +508,8 @@ Pidfile_Create(pid_t pid) /** * Redirect stdin, stdout and stderr to apropriate file handles. + * + * @param fd The file handle stdin, stdout and stderr should be redirected to. */ static void Setup_FDStreams(int fd) @@ -540,6 +525,13 @@ Setup_FDStreams(int fd) } /* Setup_FDStreams */ +/** + * Get user and group ID of unprivileged "nobody" user. + * + * @param uid User ID + * @param gid Group ID + * @return true on success. + */ static bool NGIRCd_getNobodyID(uid_t *uid, gid_t *gid ) { @@ -564,14 +556,21 @@ NGIRCd_getNobodyID(uid_t *uid, gid_t *gid ) if ( !pwd->pw_uid || !pwd->pw_gid) return false; - *uid = pwd->pw_uid; + *uid = pwd->pw_uid; *gid = pwd->pw_gid; endpwent(); - return true; -} + return true; +} /* NGIRCd_getNobodyID */ +/** + * Initialize ngIRCd daemon. + * + * @param NGIRCd_NoDaemon Set to true if ngIRCd should run in the + * foreground and not as a daemon. + * @return true on success. + */ static bool NGIRCd_Init( bool NGIRCd_NoDaemon ) { @@ -722,7 +721,7 @@ NGIRCd_Init( bool NGIRCd_NoDaemon ) if (fd > 2) close(fd); return false; -} +} /* NGIRCd_Init */ /* -eof- */