X-Git-Url: https://unix4lyfe.org/gitweb/darkstat-debian/blobdiff_plain/85d7d6e7b81dff84df8ddc87815ce77b8d82bc07..3c6b3682c70be84db86e70c191016913a9836c31:/darkstat.c diff --git a/darkstat.c b/darkstat.c index 2213986..c65631e 100644 --- a/darkstat.c +++ b/darkstat.c @@ -1,5 +1,5 @@ /* darkstat 3 - * copyright (c) 2001-2011 Emil Mikulic. + * copyright (c) 2001-2014 Emil Mikulic. * * darkstat.c: signals, cmdline parsing, program body. * @@ -16,12 +16,13 @@ #include "db.h" #include "dns.h" #include "err.h" -#include "http.h" #include "hosts_db.h" +#include "http.h" #include "localip.h" #include "ncache.h" #include "now.h" #include "pidfile.h" +#include "str.h" #include #include @@ -126,48 +127,23 @@ static void cb_local_only(const char *arg _unused_) const char *opt_chroot_dir = NULL; static void cb_chroot(const char *arg) { opt_chroot_dir = arg; } +const char *opt_base = NULL; +static void cb_base(const char *arg) { opt_base = arg; } + const char *opt_privdrop_user = NULL; static void cb_user(const char *arg) { opt_privdrop_user = arg; } -const char *daylog_fn = NULL; -static void cb_daylog(const char *arg) -{ - if (opt_chroot_dir == NULL) - errx(1, "the daylog file is relative to the chroot.\n" - "You must specify a --chroot dir before you can use --daylog."); - else - daylog_fn = arg; -} +const char *opt_daylog_fn = NULL; +static void cb_daylog(const char *arg) { opt_daylog_fn = arg; } const char *import_fn = NULL; -static void cb_import(const char *arg) -{ - if (opt_chroot_dir == NULL) - errx(1, "the import file is relative to the chroot.\n" - "You must specify a --chroot dir before you can use --import."); - else - import_fn = arg; -} +static void cb_import(const char *arg) { import_fn = arg; } const char *export_fn = NULL; -static void cb_export(const char *arg) -{ - if ((opt_chroot_dir == NULL) && (opt_capfile == NULL)) - errx(1, "the export file is relative to the chroot.\n" - "You must specify a --chroot dir before you can use --export."); - else - export_fn = arg; -} +static void cb_export(const char *arg) { export_fn = arg; } static const char *pid_fn = NULL; -static void cb_pidfile(const char *arg) -{ - if (opt_chroot_dir == NULL) - errx(1, "the pidfile is relative to the chroot.\n" - "You must specify a --chroot dir before you can use --pidfile."); - else - pid_fn = arg; -} +static void cb_pidfile(const char *arg) { pid_fn = arg; } unsigned int opt_hosts_max = 1000; static void cb_hosts_max(const char *arg) @@ -218,6 +194,7 @@ static struct cmdline_arg cmdline_args[] = { {"-p", "port", cb_port, 0}, {"-b", "bindaddr", cb_bindaddr, -1}, {"-l", "network/netmask", cb_local, 0}, + {"--base", "path", cb_base, 0}, {"--local-only", NULL, cb_local_only, 0}, {"--snaplen", "bytes", cb_snaplen, 0}, {"--pppoe", NULL, cb_pppoe, 0}, @@ -329,9 +306,7 @@ static void parse_cmdline(const int argc, char * const *argv) { if (opt_want_syslog) openlog("darkstat", LOG_NDELAY | LOG_PID, LOG_DAEMON); - /* some default values */ - if (opt_chroot_dir == NULL) - opt_chroot_dir = CHROOT_DIR; + /* default value */ if (opt_privdrop_user == NULL) opt_privdrop_user = PRIVDROP_USER; @@ -381,8 +356,8 @@ static void run_from_capfile(void) { hosts_db_free(); graph_free(); verbosef("Total packets: %llu, bytes: %llu", - (unsigned long long)acct_total_packets, - (unsigned long long)acct_total_bytes); + (llu)acct_total_packets, + (llu)acct_total_bytes); } /* --- Program body --- */ @@ -411,6 +386,7 @@ main(int argc, char **argv) /* do this first as it forks - minimize memory use */ if (opt_want_dns) dns_init(opt_privdrop_user); cap_start(opt_want_promisc); /* needs root */ + http_init_base(opt_base); http_listen(opt_bindport); ncache_init(); /* must do before chroot() */ @@ -418,7 +394,7 @@ main(int argc, char **argv) /* Don't need root privs for these: */ now_init(); - if (daylog_fn != NULL) daylog_init(daylog_fn); + if (opt_daylog_fn != NULL) daylog_init(opt_daylog_fn); graph_init(); hosts_db_init(); if (import_fn != NULL) db_import(import_fn); @@ -490,7 +466,7 @@ main(int argc, char **argv) if (export_fn != NULL) db_export(export_fn); hosts_db_free(); graph_free(); - if (daylog_fn != NULL) daylog_free(); + if (opt_daylog_fn != NULL) daylog_free(); ncache_free(); if (pid_fn) pidfile_unlink(); verbosef("shut down");