fixed breakage caused by me
[umurmur.git] / src / main.c
index b7e5b1d1596470818670403d562f167284ac60a9..bfff28ab0b4696d2d36138aea05796b11c7d736f 100644 (file)
@@ -1,5 +1,5 @@
-/* Copyright (C) 2009-2011, Martin Johansson <martin@fatbob.nu>
-   Copyright (C) 2005-2011, Thorvald Natvig <thorvald@natvig.com>
+/* Copyright (C) 2009-2014, Martin Johansson <martin@fatbob.nu>
+   Copyright (C) 2005-2014, Thorvald Natvig <thorvald@natvig.com>
 
    All rights reserved.
 
 #include <string.h>
 #include <stdlib.h>
 #ifdef _POSIX_PRIORITY_SCHEDULING
+#if (_POSIX_PRIORITY_SCHEDULING > 0)
+#define POSIX_PRIORITY_SCHEDULING
 #include <sched.h>
 #endif
+#endif
 #include "server.h"
 #include "ssl.h"
 #include "channel.h"
@@ -51,6 +54,7 @@
 #include "client.h"
 #include "conf.h"
 #include "version.h"
+#include "config.h"
 
 char system_string[64], version_string[64];
 int bindport;
@@ -65,7 +69,7 @@ void lockfile(const char *pidfile)
         * unmodified if we cannot lock it.
         */
        lfp = open(pidfile, O_WRONLY|O_CREAT, 0640);
-       
+
        if (lfp < 0)
                Log_fatal("Cannot open PID-file %s for writing", pidfile);
 
@@ -86,7 +90,7 @@ void lockfile(const char *pidfile)
        }
 
        snprintf(str,16,"%d\n", getpid());
-       write(lfp, str, strlen(str)); /* record pid to lockfile */
+       (void)write(lfp, str, strlen(str)); /* record pid to lockfile */
        Log_info("PID-file: %s", pidfile);
 
        /* If uMurmur ever starts to fork()+exec(), we don't want it to
@@ -149,12 +153,12 @@ static void switch_user(void)
 
        if (setuid(pwd->pw_uid))
                Log_fatal("setuid() failed: %s", strerror(errno));
-       
+
        if (!grp)
                grp = getgrgid(gid);
        if (!grp)
                Log_fatal("getgrgid() failed: %s", strerror(errno));
-       
+
        Log_info("Switch to user '%s' group '%s'", pwd->pw_name, grp->gr_name);
 }
 
@@ -175,7 +179,7 @@ void signal_handler(int sig)
 void daemonize()
 {
        int i;
-       
+
        if (getppid() == 1)
                return; /* already a daemon */
        i = fork();
@@ -185,22 +189,22 @@ void daemonize()
        }
        if ( i > 0)
                exit(0); /* parent exits */
-       
+
        /* child (daemon) continues */
        setsid(); /* obtain a new process group */
        for (i = getdtablesize(); i >= 0; --i)
                close(i); /* close all descriptors */
-       
+
        i = open("/dev/null",O_RDWR);
-       dup(i);
-       dup(i);
-       
+       (void)dup(i);
+       (void)dup(i);
+
        umask(027); /* set newly created file permissions */
-       chdir("/");
-               
+       (void)chdir("/");
+
 }
 
-#ifdef _POSIX_PRIORITY_SCHEDULING
+#ifdef POSIX_PRIORITY_SCHEDULING
 void setscheduler()
 {
        int rc;
@@ -216,10 +220,11 @@ void setscheduler()
 
 void printhelp()
 {
-       printf("uMurmur version %s. Mumble protocol %d.%d.%d\n", UMURMUR_VERSION, PROTVER_MAJOR, PROTVER_MINOR, PROTVER_PATCH);
+       printf("uMurmur version %s ('%s'). Mumble protocol %d.%d.%d\n", UMURMUR_VERSION,
+              UMURMUR_CODENAME, PROTVER_MAJOR, PROTVER_MINOR, PROTVER_PATCH);
        printf("Usage: umurmurd [-d] [-r] [-h] [-p <pidfile>] [-t] [-c <conf file>] [-a <addr>] [-b <port>]\n");
        printf("       -d             - Do not daemonize - run in foreground.\n");
-#ifdef _POSIX_PRIORITY_SCHEDULING
+#ifdef POSIX_PRIORITY_SCHEDULING
        printf("       -r             - Run with realtime priority\n");
 #endif
        printf("       -p <pidfile>   - Write PID to this file\n");
@@ -234,15 +239,16 @@ void printhelp()
 int main(int argc, char **argv)
 {
        bool_t nodaemon = false;
-#ifdef _POSIX_PRIORITY_SCHEDULING
-       bool_t realtime = false, testconfig = false;
+#ifdef POSIX_PRIORITY_SCHEDULING
+       bool_t realtime = false;
 #endif
+       bool_t testconfig = false;
        char *conffile = NULL, *pidfile = NULL;
        int c;
        struct utsname utsbuf;
-       
+
        /* Arguments */
-#ifdef _POSIX_PRIORITY_SCHEDULING
+#ifdef POSIX_PRIORITY_SCHEDULING
        while ((c = getopt(argc, argv, "drp:c:a:b:ht")) != EOF) {
 #else
        while ((c = getopt(argc, argv, "dp:c:a:b:ht")) != EOF) {
@@ -269,7 +275,7 @@ int main(int argc, char **argv)
                case 't':
                        testconfig = true;
                        break;
-#ifdef _POSIX_PRIORITY_SCHEDULING
+#ifdef POSIX_PRIORITY_SCHEDULING
                case 'r':
                        realtime = true;
                        break;
@@ -287,12 +293,12 @@ int main(int argc, char **argv)
                else
                        exit(0);
        }
-               
+
        /* Initialize the config subsystem early;
         * switch_user() will need to read some config variables as well as logging.
         */
        Conf_init(conffile);
-       
+
        /* Logging to terminal if not daemonizing, otherwise to syslog or log file.
         */
        if (!nodaemon) {
@@ -306,10 +312,10 @@ int main(int argc, char **argv)
                /* Reopen log file. If user switch results in access denied, we catch
                 * it early.
                 */
-               Log_reset(); 
+               Log_reset();
        }
        else Log_init(true);
-       
+
        signal(SIGCHLD, SIG_IGN); /* ignore child */
        signal(SIGTSTP, SIG_IGN); /* ignore tty signals */
        signal(SIGTTOU, SIG_IGN);
@@ -317,7 +323,7 @@ int main(int argc, char **argv)
        signal(SIGPIPE, SIG_IGN);
        signal(SIGHUP, signal_handler); /* catch hangup signal */
        signal(SIGTERM, signal_handler); /* catch kill signal */
-       
+
        /* Build system string */
        if (uname(&utsbuf) == 0) {
                snprintf(system_string, 64, "%s %s", utsbuf.sysname, utsbuf.machine);
@@ -327,26 +333,28 @@ int main(int argc, char **argv)
                snprintf(system_string, 64, "unknown unknown");
                snprintf(version_string, 64, "unknown");
        }
-       
+
        /* Initializing */
        SSLi_init();
        Chan_init();
        Client_init();
+       Ban_init();
 
-#ifdef _POSIX_PRIORITY_SCHEDULING
+#ifdef POSIX_PRIORITY_SCHEDULING
        if (realtime)
                setscheduler();
 #endif
-       
+
        Server_run();
-       
+
+       Ban_deinit();
        SSLi_deinit();
        Chan_free();
        Log_free();
        Conf_deinit();
-       
+
        if (pidfile != NULL)
                unlink(pidfile);
-       
+
        return 0;
 }