]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/ngircd.c
Removed unnecessary #define of "LOCAL", now use plain C "static" instead.
[ngircd-alex.git] / src / ngircd / ngircd.c
index 48e041bda2189202e68194c0f55889dda2bad4ef..20a35dbb0c399539bacb663b609ce42312ec34a4 100644 (file)
@@ -12,7 +12,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: ngircd.c,v 1.99 2005/06/17 23:13:41 fw Exp $";
+static char UNUSED id[] = "$Id: ngircd.c,v 1.108 2005/07/31 20:13:08 alex Exp $";
 
 /**
  * @file
@@ -48,7 +48,7 @@ static char UNUSED id[] = "$Id: ngircd.c,v 1.99 2005/06/17 23:13:41 fw Exp $";
 #include "parse.h"
 #include "irc.h"
 
-#ifdef RENDEZVOUS
+#ifdef ZEROCONF
 #include "rendezvous.h"
 #endif
 
@@ -56,20 +56,20 @@ static char UNUSED id[] = "$Id: ngircd.c,v 1.99 2005/06/17 23:13:41 fw Exp $";
 #include "ngircd.h"
 
 
-LOCAL void Initialize_Signal_Handler PARAMS(( void ));
-LOCAL void Signal_Handler PARAMS(( int Signal ));
+static void Initialize_Signal_Handler PARAMS(( void ));
+static void Signal_Handler PARAMS(( int Signal ));
 
-LOCAL void Show_Version PARAMS(( void ));
-LOCAL void Show_Help PARAMS(( void ));
+static void Show_Version PARAMS(( void ));
+static void Show_Help PARAMS(( void ));
 
-LOCAL void Pidfile_Create PARAMS(( long ));
-LOCAL void Pidfile_Delete PARAMS(( void ));
+static void Pidfile_Create PARAMS(( long ));
+static void Pidfile_Delete PARAMS(( void ));
 
-LOCAL void Fill_Version PARAMS(( void ));
+static void Fill_Version PARAMS(( void ));
 
-LOCAL void Setup_FDStreams PARAMS(( void ));
+static void Setup_FDStreams PARAMS(( void ));
 
-LOCAL bool NGIRCd_Init PARAMS(( bool ));
+static bool NGIRCd_Init PARAMS(( bool ));
 
 /**
  * The main() function of ngIRCd.
@@ -83,13 +83,14 @@ GLOBAL int
 main( int argc, const char *argv[] )
 {
        bool ok, configtest = false;
+       bool NGIRCd_NoDaemon = false;
        int i;
        size_t n;
 
        umask( 0077 );
 
        NGIRCd_SignalQuit = NGIRCd_SignalRestart = NGIRCd_SignalRehash = false;
-       NGIRCd_NoDaemon = NGIRCd_Passive = false;
+       NGIRCd_Passive = false;
 #ifdef DEBUG
        NGIRCd_Debug = false;
 #endif
@@ -258,7 +259,7 @@ main( int argc, const char *argv[] )
                NGIRCd_SignalQuit = false;
 
                /* Initialize modules, part I */
-               Log_Init( );
+               Log_Init( ! NGIRCd_NoDaemon );
                Conf_Init( );
 
                if (!NGIRCd_Init( NGIRCd_NoDaemon )) {
@@ -268,11 +269,10 @@ main( int argc, const char *argv[] )
 
                /* Initialize modules, part II: these functions are eventually
                 * called with already dropped privileges ... */
-               Resolve_Init( );
                Lists_Init( );
                Channel_Init( );
                Client_Init( );
-#ifdef RENDEZVOUS
+#ifdef ZEROCONF
                Rendezvous_Init( );
 #endif
                Conn_Init( );
@@ -321,7 +321,7 @@ main( int argc, const char *argv[] )
 
                /* Alles abmelden */
                Conn_Exit( );
-#ifdef RENDEZVOUS
+#ifdef ZEROCONF
                Rendezvous_Exit( );
 #endif
                Client_Exit( );
@@ -341,7 +341,7 @@ main( int argc, const char *argv[] )
  * further usage, for example by the IRC command VERSION and the --version
  * command line switch.
  */
-LOCAL void
+static void
 Fill_Version( void )
 {
        NGIRCd_VersionAddition[0] = '\0';
@@ -361,11 +361,11 @@ Fill_Version( void )
 
        strlcat( NGIRCd_VersionAddition, "TCPWRAP", sizeof NGIRCd_VersionAddition );
 #endif
-#ifdef RENDEZVOUS
+#ifdef ZEROCONF
        if( NGIRCd_VersionAddition[0] )
                strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
 
-       strlcat( NGIRCd_VersionAddition, "RENDEZVOUS", sizeof NGIRCd_VersionAddition );
+       strlcat( NGIRCd_VersionAddition, "ZEROCONF", sizeof NGIRCd_VersionAddition );
 #endif
 #ifdef IDENTAUTH
        if( NGIRCd_VersionAddition[0] )
@@ -438,7 +438,7 @@ NGIRCd_Rehash( void )
        /* Recover old server name: it can't be changed during run-time */
        if( strcmp( old_name, Conf_ServerName ) != 0 )
        {
-               strcpy( Conf_ServerName, old_name );
+               strlcpy( Conf_ServerName, old_name, sizeof Conf_ServerName );
                Log( LOG_ERR, "Can't change \"ServerName\" on runtime! Ignored new name." );
        }
 
@@ -458,7 +458,7 @@ NGIRCd_Rehash( void )
 /**
  * Initialize the signal handler.
  */
-LOCAL void
+static void
 Initialize_Signal_Handler( void )
 {
        /* Signal-Handler initialisieren: einige Signale
@@ -511,7 +511,7 @@ Initialize_Signal_Handler( void )
  * user and/or the system to it. For example SIGTERM and SIGHUP.
  * @param Signal Number of the signal to handle.
  */
-LOCAL void
+static void
 Signal_Handler( int Signal )
 {
        switch( Signal )
@@ -542,7 +542,7 @@ Signal_Handler( int Signal )
 /**
  * Display copyright and version information of ngIRCd on the console.
  */
-LOCAL void
+static void
 Show_Version( void )
 {
        puts( NGIRCd_Version );
@@ -558,7 +558,7 @@ Show_Version( void )
  * This help depends on the configuration of the executable and only shows
  * options that are actually enabled.
  */
-LOCAL void
+static void
 Show_Help( void )
 {
 #ifdef DEBUG
@@ -579,7 +579,7 @@ Show_Help( void )
 /**
  * Delete the file containing the process ID (PID).
  */
-LOCAL void
+static void
 Pidfile_Delete( void )
 {
        /* Pidfile configured? */
@@ -598,7 +598,7 @@ 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.
  */
-LOCAL void
+static void
 Pidfile_Create( long pid )
 {
        int pidfd;
@@ -635,7 +635,7 @@ Pidfile_Create( long pid )
 /**
  * Redirect stdin, stdout and stderr to apropriate file handles.
  */
-LOCAL void
+static void
 Setup_FDStreams( void )
 {
        int fd;
@@ -660,7 +660,7 @@ Setup_FDStreams( void )
 } /* Setup_FDStreams */
 
 
-LOCAL bool
+static bool
 NGIRCd_getNobodyID(unsigned int *uid, unsigned int *gid )
 {
        struct passwd *pwd;
@@ -679,7 +679,7 @@ NGIRCd_getNobodyID(unsigned int *uid, unsigned int *gid )
 }
 
 
-LOCAL bool
+static bool
 NGIRCd_Init( bool NGIRCd_NoDaemon ) 
 {
        static bool initialized;
@@ -711,28 +711,34 @@ NGIRCd_Init( bool NGIRCd_NoDaemon )
                }
        }
 
-       if ( Conf_UID == 0 ) {
-               Log( LOG_INFO, "Conf_UID must not be 0, switching to user nobody", Conf_UID );
+       if (Conf_UID == 0) {
+               Log(LOG_INFO, "ServerUID must not be 0, using \"nobody\" instead.", Conf_UID);
 
-               if (!NGIRCd_getNobodyID(&Conf_UID, &Conf_GID )) {
-                       Log( LOG_WARNING, "Could not get uid/gid of user nobody: %s",
+               if (! NGIRCd_getNobodyID(&Conf_UID, &Conf_GID)) {
+                       Log(LOG_WARNING, "Could not get user/group ID of user \"nobody\": %s",
                                        errno ? strerror(errno) : "not found" );
                        return false;
                }
        }
 
-       if( setgid( Conf_GID ) != 0 ) {
-               real_errno = errno;
-               Log( LOG_ERR, "Can't change group ID to %u: %s", Conf_GID, strerror( errno ));
-               if (real_errno != EPERM) 
-                       return false;
+       if (getgid() != Conf_GID) {
+               /* Change group ID */
+               if (setgid(Conf_GID) != 0) {
+                       real_errno = errno;
+                       Log( LOG_ERR, "Can't change group ID to %u: %s", Conf_GID, strerror( errno ));
+                       if (real_errno != EPERM) 
+                               return false;
+               }
        }
 
-       if( setuid( Conf_UID ) != 0 ) {
-               real_errno = errno;
-               Log( LOG_ERR, "Can't change user ID to %u: %s", Conf_UID, strerror( errno ));
-               if (real_errno != EPERM) 
-                       return false;
+       if (getuid() != Conf_UID) {
+               /* Change user ID */
+               if (setuid(Conf_UID) != 0) {
+                       real_errno = errno;
+                       Log(LOG_ERR, "Can't change user ID to %u: %s", Conf_UID, strerror(errno));
+                       if (real_errno != EPERM) 
+                               return false;
+               }
        }
 
        initialized = true;
@@ -741,7 +747,6 @@ NGIRCd_Init( bool NGIRCd_NoDaemon )
         * connected to ther controlling terminal. Use "--nodaemon"
         * to disable this "daemon mode" (useful for debugging). */
        if ( ! NGIRCd_NoDaemon ) {
-               initialized = true;
                pid = (long)fork( );
                if( pid > 0 ) {
                        /* "Old" process: exit. */
@@ -765,16 +770,14 @@ NGIRCd_Init( bool NGIRCd_NoDaemon )
 
        Pidfile_Create( pid );
 
-       /* check uid we are running as, can be different from values configured (e.g. if we were already
-       started with a uid > 0 */
+       /* Check UID/GID we are running as, can be different from values
+        * configured (e. g. if we were already started with a UID>0. */
        Conf_UID = getuid();
        Conf_GID = getgid();
 
-       assert( Conf_GID > 0);
-       assert( Conf_UID > 0);
-
        pwd = getpwuid( Conf_UID );
        grp = getgrgid( Conf_GID );
+
        Log( LOG_INFO, "Running as user %s(%ld), group %s(%ld), with PID %ld.",
                                pwd ? pwd->pw_name : "unknown", Conf_UID,
                                grp ? grp->gr_name : "unknown", Conf_GID, pid);
@@ -796,7 +799,7 @@ NGIRCd_Init( bool NGIRCd_NoDaemon )
                        else 
                                Log( LOG_ERR, "Can't change working directory to \"%s\": %s",
                                                                pwd->pw_dir, strerror( errno ));
-
+               }
        } else {
                Log( LOG_ERR, "Can't get user informaton for UID %d!?", Conf_UID );
        }