X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmain.c;h=4b8c71464550958b7b1895a5dd88a6e6d8d99908;hb=HEAD;hp=eaa284de86f1162bb2644530601e614cea0f3ee2;hpb=221d0414f44e315291170a3a35ce260ceefa086d;p=srvx.git diff --git a/src/main.c b/src/main.c index eaa284d..4b8c714 100644 --- a/src/main.c +++ b/src/main.c @@ -33,6 +33,7 @@ #include "global.h" #include "modules.h" #include "opserv.h" +#include "spamserv.h" #ifdef HAVE_GETOPT_H #include @@ -52,10 +53,6 @@ #include #endif -#ifndef SIGCHLD -#define SIGCHLD SIGCLD -#endif - #include "main-common.c" void sigaction_writedb(int x) @@ -95,43 +92,6 @@ void sigaction_rehash(int x) do_reopen = 1; } -void usage(char *self) { - /* We can assume we have getopt_long(). */ - printf("Usage: %s [-c config] [-r log] [-d] [-f] [-v|-h]\n" - "-c, --config selects a different configuration file.\n" - "-d, --debug enables debug mode.\n" - "-f, --foreground run srvx in the foreground.\n" - "-h, --help prints this usage message.\n" - "-k, --check checks the configuration file's syntax.\n" - "-r, --replay replay a log file (for debugging)\n" - "-v, --version prints this program's version.\n" - , self); -} - -void version() { - printf(" --------------------------------------------------\n" - " - "PACKAGE_STRING" ("CODENAME"), Built: " __DATE__ ", " __TIME__".\n" - " - Copyright (C) 2000 - 2005, srvx Development Team\n" - " --------------------------------------------------\n"); -} - -void license() { - printf("\n" - "This program is free software; you can redistribute it and/or modify\n" - "it under the terms of the GNU General Public License as published by\n" - "the Free Software Foundation; either version 2 of the License, or\n" - "(at your option) any later version.\n" - "\n" - "This program is distributed in the hope that it will be useful,\n" - "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - "GNU General Public License for more details.\n" - "\n" - "You should have received a copy of the GNU General Public License\n" - "along with this program; if not, write to the Free Software\n" - "Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n\n"); -} - #if WITH_MALLOC_BOEHM_GC void gc_warn_proc(char *msg, GC_word arg) @@ -142,7 +102,8 @@ gc_warn_proc(char *msg, GC_word arg) int main(int argc, char *argv[]) { - int daemon, debug; + int run_as_daemon; + int debug; pid_t pid = 0; FILE *file_out; struct sigaction sv; @@ -153,7 +114,7 @@ int main(int argc, char *argv[]) GC_enable_incremental(); #endif - daemon = 1; + run_as_daemon = 1; debug = 0; tools_init(); @@ -172,32 +133,31 @@ int main(int argc, char *argv[]) sigaction(SIGCHLD, &sv, NULL); if (argc > 1) { /* parse command line, if any */ - int c; - struct option options[] = - { - {"config", 1, 0, 'c'}, + int c; + struct option options[] = + { + {"config", 1, 0, 'c'}, {"debug", 0, 0, 'd'}, - {"foreground", 0, 0, 'f'}, - {"help", 0, 0, 'h'}, - {"check", 0, 0, 'k'}, + {"foreground", 0, 0, 'f'}, + {"help", 0, 0, 'h'}, + {"check", 0, 0, 'k'}, {"replay", 1, 0, 'r'}, - {"version", 0, 0, 'v'}, - {"verbose", 0, 0, 'V'}, - {0, 0, 0, 0} - }; + {"version", 0, 0, 'v'}, + {0, 0, 0, 0} + }; - while ((c = getopt_long(argc, argv, "c:kr:dfvVh", options, NULL)) != -1) { - switch(c) { - case 'c': - services_config = optarg; - break; - case 'k': - if (conf_read(services_config)) { - printf("%s appears to be a valid configuration file.\n", services_config); - } else { - printf("%s is an invalid configuration file.\n", services_config); - } - exit(0); + while ((c = getopt_long(argc, argv, "c:dfhkr:v", options, NULL)) != -1) { + switch (c) { + case 'c': + services_config = optarg; + break; + case 'k': + if (conf_read(services_config)) { + printf("%s appears to be a valid configuration file.\n", services_config); + } else { + printf("%s is an invalid configuration file.\n", services_config); + } + exit(0); case 'r': replay_file = fopen(optarg, "r"); if (!replay_file) { @@ -209,19 +169,19 @@ int main(int argc, char *argv[]) case 'd': debug = 1; break; - case 'f': - daemon = 0; - break; - case 'v': - version(); - license(); - exit(0); - case 'h': - default: - usage(argv[0]); - exit(0); - } - } + case 'f': + run_as_daemon = 0; + break; + case 'v': + version(); + license(); + exit(0); + case 'h': + default: + usage(argv[0]); + exit(0); + } + } } version(); @@ -231,41 +191,41 @@ int main(int argc, char *argv[]) * mostly to get the right value of "now" for when we do the * irc_introduce. */ replay_read_line(); - boot_time = now; } else { - boot_time = time(&now); + now = time(NULL); } + boot_time = now; fprintf(stdout, "Initializing daemon...\n"); if (!conf_read(services_config)) { - fprintf(stderr, "Unable to read %s.\n", services_config); - exit(1); + fprintf(stderr, "Unable to read %s.\n", services_config); + exit(1); } conf_register_reload(uplink_compile); - if (daemon) { - /* Attempt to fork into the background if daemon mode is on. */ - pid = fork(); - if (pid < 0) { - fprintf(stderr, "Unable to fork: %s\n", strerror(errno)); + if (run_as_daemon) { + /* Attempt to fork into the background if daemon mode is on. */ + pid = fork(); + if (pid < 0) { + fprintf(stderr, "Unable to fork: %s\n", strerror(errno)); } else if (pid > 0) { - fprintf(stdout, "Forking into the background (pid: %d)...\n", pid); - exit(0); - } - setsid(); + fprintf(stdout, "Forking into the background (pid: %d)...\n", pid); + exit(0); + } + setsid(); } file_out = fopen(PID_FILE, "w"); if (file_out == NULL) { - /* Create the main process' pid file */ - fprintf(stderr, "Unable to create PID file: %s", strerror(errno)); + /* Create the main process' pid file */ + fprintf(stderr, "Unable to create PID file: %s", strerror(errno)); } else { - fprintf(file_out, "%i\n", (int)getpid()); - fclose(file_out); + fprintf(file_out, "%i\n", (int)getpid()); + fclose(file_out); } - if (daemon) { + if (run_as_daemon) { /* Close these since we should not use them from now on. */ fclose(stdin); fclose(stdout); @@ -320,7 +280,8 @@ int main(int argc, char *argv[]) free(msg); } } else { - srand(time(&now)); + now = time(NULL); + srand(now); ioset_run(); } return 0;