-/* 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.
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#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"
}
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
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;
void printhelp()
{
- printf("uMurmur version %s. Mumble protocol %d.%d.%d\n", UMURMUR_VERSION, PROTVER_MAJOR, PROTVER_MINOR, PROTVER_PATCH);
- printf("Usage: umurmurd [-d] [-p <pidfile>] [-c <conf file>] [-h]\n");
- printf(" -d - Do not daemonize\n");
- printf(" -p <pidfile> - Write PID to this file\n");
- printf(" -c <conf file> - Specify configuration file\n");
-#ifdef _POSIX_PRIORITY_SCHEDULING
+ 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
printf(" -r - Run with realtime priority\n");
#endif
+ printf(" -p <pidfile> - Write PID to this file\n");
+ printf(" -c <conf file> - Specify configuration file (default %s)\n", DEFAULT_CONFIG);
+ printf(" -t - Test config. Error message to stderr + non-zero exit code on error\n");
printf(" -a <address> - Bind to IP address\n");
printf(" -b <port> - Bind to port\n");
printf(" -h - Print this help\n");
int main(int argc, char **argv)
{
bool_t nodaemon = false;
-#ifdef _POSIX_PRIORITY_SCHEDULING
+#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
- while ((c = getopt(argc, argv, "drp:c:a:b:h")) != EOF) {
+#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:h")) != EOF) {
+ while ((c = getopt(argc, argv, "dp:c:a:b:ht")) != EOF) {
#endif
switch(c) {
case 'c':
case 'h':
printhelp();
break;
-#ifdef _POSIX_PRIORITY_SCHEDULING
+ case 't':
+ testconfig = true;
+ break;
+#ifdef POSIX_PRIORITY_SCHEDULING
case 'r':
realtime = true;
break;
break;
}
}
-
+
+ if (testconfig) {
+ if (!Conf_ok(conffile))
+ exit(1);
+ else
+ exit(0);
+ }
+
/* Initialize the config subsystem early;
* switch_user() will need to read some config variables as well as logging.
*/
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();