From 300548aae464c08969b2daf4c1f44c3bcbea4c71 Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Tue, 8 Mar 2016 19:46:27 +1000 Subject: [PATCH] * main.c : draft of jails handling --- src/main.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/src/main.c b/src/main.c index e042100..59bf994 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,77 @@ #include "jail.h" #include "backend.h" -int main() { - printf("Hello world!\n"); - return 0; +#include + +void usage(int exitcode) { + fprintf(stderr, "Usage: f2b -c \n"); + exit(exitcode); +} + +int main(int argc, char *argv[]) { + f2b_config_t *config = NULL; + f2b_config_section_t *section = NULL; + f2b_jail_t *jails = NULL; + f2b_jail_t *jail = NULL; + char *config_file = NULL; + char opt = '\0'; + bool run = true; + + while ((opt = getopt(argc, argv, "c:h")) != -1) { + switch (opt) { + case 'c': + config_file = optarg; + break; + case 'h': + usage(EXIT_SUCCESS); + break; + default: + usage(EXIT_FAILURE); + break; + } + } + + if (!config_file) + usage(EXIT_FAILURE); + if ((config = f2b_config_load(config_file)) == NULL) { + f2b_log_msg(log_error, "can't load config from '%s'", config_file); + return EXIT_FAILURE; + } + + if (config->defaults) + f2b_jail_set_defaults(config->defaults); + + for (section = config->jails; section != NULL; section = section->next) { + if ((jail = f2b_jail_create(section)) == NULL) { + f2b_log_msg(log_error, "can't create jail '%s'", section->name); + continue; + } + if (!jail->enabled) { + f2b_log_msg(log_debug, "ignoring disabled jail '%s'", jail->name); + free(jail); + continue; + } + if (!f2b_jail_init(jail, config)) { + f2b_log_msg(log_error, "can't init jail '%s'", section->name); + free(jail); + continue; + } + jail->next = jails; + jails = jail; + } + f2b_config_free(config); + + if (!jails) { + f2b_log_msg(log_error, "no jails configured"); + return EXIT_FAILURE; + } + + while (run) { + for (jail = jails; jail != NULL; jail = jail->next) { + f2b_jail_process(jail); + } + sleep(1); + } + + return EXIT_SUCCESS; }