From 1fa9b6e34e5c92aa7fe492417cda2d21ec067ff8 Mon Sep 17 00:00:00 2001 From: arf20 Date: Tue, 28 Oct 2025 13:45:38 +0100 Subject: unified config, refactor, for alerts --- config.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 config.c (limited to 'config.c') diff --git a/config.c b/config.c new file mode 100644 index 0000000..35fa90e --- /dev/null +++ b/config.c @@ -0,0 +1,90 @@ +#include "config.h" + +#include +#include +#include +#include + +unsigned short port = DEFAULT_PORT; +char *log_path = DEFAULT_LOG_PATH; +monitor_config_t monitor_config = { .interval = DEFAULT_INTERVAL }; +alert_config_t alert_config; + +int +config_load(const char *conf_path) +{ + FILE *cfgf = fopen(conf_path, "r"); + if (!cfgf) { + fprintf(stderr, "Error opening config: %s\n", strerror(errno)); + return -1; + } + + fseek(cfgf , 0, SEEK_END); + size_t cfgsize = ftell(cfgf); + rewind(cfgf); + + monitor_config.target_config = malloc(cfgsize); + alert_config.alert_config = malloc(cfgsize); + + char *target_pos = monitor_config.target_config; + char *alert_pos = alert_config.alert_config; + + printf("config:\n"); + + char line[256]; + while (fgets(line, sizeof(line), cfgf)) { + if (*line == '#' || *line == '\n') + continue; + + char *separator = strchr(line, '='); + if (!separator) { + fprintf(stderr, "[config] malformed line: %s\n", line); + continue; + } + + *separator = '\0'; + + char *value = separator + 1; + + if (strcmp(line, "port") == 0) { + port = atoi(value); + printf("\tport: %d\n", port); + if (port == 0) { + fprintf(stderr, "[config] invalid port: %s\n", line); + return -1; + } + } else if (strcmp(line, "interval") == 0) { + monitor_config.interval = atoi(value); + printf("\tinterval: %ld\n", monitor_config.interval); + if (monitor_config.interval == 0) { + fprintf(stderr, "[config] invalid interval: %s\n", line); + return -1; + } + } else if (strcmp(line, "log") == 0) { + value[strlen(value) - 1] = '\0'; + log_path = strdup(value); + printf("\tlog path: %s\n", log_path); + } else if (strcmp(line, "from") == 0) { + value[strlen(value) - 1] = '\0'; + alert_config.from = strdup(value); + printf("\tfrom: %s\n", log_path); + } else if (strcmp(line, "target") == 0) { + target_pos += snprintf(target_pos, + cfgsize - (target_pos - monitor_config.target_config), + "%s", value); + } else if (strcmp(line, "alert") == 0) { + target_pos += snprintf(alert_pos, + cfgsize - (alert_pos - alert_config.alert_config), + "%s", value); + } else { + fprintf(stderr, "[config] unknown key: %s\n", line); + continue; + } + + } + + fclose(cfgf); + + return 0; +} + -- cgit v1.2.3