diff --git a/echosrv-conf.c b/echosrv-conf.c index 87a46e4..4b26e3a 100644 --- a/echosrv-conf.c +++ b/echosrv-conf.c @@ -1,5 +1,5 @@ /* Generated by conf2struct (https://www.rutschle.net/tech/conf2struct/README) - * on Sat Apr 30 09:55:03 2022. + * on Wed Jul 10 15:27:23 2024. # conf2struct: generate libconf parsers that read to structs # Copyright (C) 2018-2021 Yves Rutschle @@ -365,7 +365,7 @@ static int clcpy(config_type type, void* target, const void* cl_arg) return 0; } -/* Copy the value of a string argument to arbitrary memory +/* Copy the value of a string argument to arbitary memory * location that must be large enough, converting on the way * (i.e. CFG_INT gets atoi() and so on) */ /* 0: success @@ -862,7 +862,7 @@ static int set_target_fields(void* target_addr, struct compound_cl_arg* arg, con if (pmatch[pmatch_cnt].rm_so == -1) { /* This should not happen as regexec() did * match before, unless there is a - * discrepancy between the regex and the + * discrepency between the regex and the * number of backreferences */ return 0; } @@ -1155,7 +1155,7 @@ static void scalar_to_string(char** strp, config_setting_t* s) /* Typesets all the settings in a configuration as a * newly-allocated string. The string management is caller's -* responsibility. +* responsability. * Returns the number of scalars in the configuration */ static int cfg_as_string(config_setting_t* parent, const char* path, char** strp) { diff --git a/echosrv-conf.h b/echosrv-conf.h index ec99846..087a632 100644 --- a/echosrv-conf.h +++ b/echosrv-conf.h @@ -1,5 +1,5 @@ /* Generated by conf2struct (https://www.rutschle.net/tech/conf2struct/README) - * on Sat Apr 30 09:55:03 2022. + * on Wed Jul 10 15:27:23 2024. # conf2struct: generate libconf parsers that read to structs # Copyright (C) 2018-2021 Yves Rutschle diff --git a/example.cfg b/example.cfg index d1e0d88..fe2f3ab 100644 --- a/example.cfg +++ b/example.cfg @@ -16,6 +16,7 @@ chroot: "/var/empty"; # Value: 1: stdout; 2: syslog; 3: stdout+syslog; 4: logfile; ...; 7: all # Defaults are indicated here, and should be sensible. Generally, you want *-error # to be always enabled, to know if something is going wrong. +# Each option relates to a different set of messages. verbose-config: 0; # print configuration at startup verbose-config-error: 3; # print configuration errors verbose-connections: 3; # trace established incoming address to forward address @@ -28,6 +29,9 @@ verbose-probe-error: 3; # failures and problems during probing verbose-system-error: 3; # system call problem, i.e. malloc, fork, failing verbose-int-error: 3; # internal errors, the kind that should never happen +# This one is special and overrides all previous options if +# set, as a quick way to get "as much as possible" +#verbose: 3; # Specify a path to the logfile. #logfile: "/var/log/sslh.log" diff --git a/sslh-conf.c b/sslh-conf.c index dbc29ee..5937fb8 100644 --- a/sslh-conf.c +++ b/sslh-conf.c @@ -1,5 +1,5 @@ /* Generated by conf2struct (https://www.rutschle.net/tech/conf2struct/README) - * on Tue Jan 2 21:25:47 2024. + * on Wed Jul 10 15:27:23 2024. # conf2struct: generate libconf parsers that read to structs # Copyright (C) 2018-2021 Yves Rutschle @@ -443,6 +443,7 @@ struct compound_cl_arg { struct arg_file* sslhcfg_conffile; + struct arg_int* sslhcfg_verbose; struct arg_int* sslhcfg_verbose_config; struct arg_int* sslhcfg_verbose_config_error; struct arg_int* sslhcfg_verbose_connections; @@ -814,10 +815,26 @@ static struct config_desc table_sslhcfg_listen[] = { }, { 0 } }; - + static struct config_desc table_sslhcfg[] = { + { + /* name */ "verbose", + /* type */ CFG_INT, + /* sub_group*/ NULL, + /* arg_cl */ & sslhcfg_verbose, + /* base_addr */ NULL, + /* offset */ offsetof(struct sslhcfg_item, verbose), + /* offset_len */ 0, + /* offset_present */ 0, + /* size */ sizeof(int), + /* array_type */ -1, + /* mandatory */ 0, + /* optional */ 0, + /* default_val*/ .default_val.def_int = 0 + }, + { /* name */ "verbose_config", /* type */ CFG_INT, @@ -1372,7 +1389,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: listen */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_listen, - .base_entry = & table_sslhcfg [25], + .base_entry = & table_sslhcfg [26], .targets = sslhcfg_listen_targets, @@ -1384,7 +1401,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: ssh */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_ssh, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_ssh_targets, @@ -1396,7 +1413,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: tls */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_tls, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_tls_targets, @@ -1408,7 +1425,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: ssl */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_ssl, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_ssl_targets, @@ -1420,7 +1437,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: openvpn */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_openvpn, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_openvpn_targets, @@ -1432,7 +1449,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: tinc */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_tinc, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_tinc_targets, @@ -1444,7 +1461,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: wireguard */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_wireguard, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_wireguard_targets, @@ -1456,7 +1473,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: xmpp */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_xmpp, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_xmpp_targets, @@ -1468,7 +1485,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: http */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_http, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_http_targets, @@ -1480,7 +1497,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: adb */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_adb, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_adb_targets, @@ -1492,7 +1509,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: socks5 */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_socks5, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_socks5_targets, @@ -1504,7 +1521,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: syslog */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_syslog, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_syslog_targets, @@ -1516,7 +1533,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: msrdp */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_msrdp, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_msrdp_targets, @@ -1528,7 +1545,7 @@ static struct compound_cl_arg compound_cl_args[] = { { /* arg: anyprot */ .regex = "(.+):(\\w+)", .arg_cl = & sslhcfg_anyprot, - .base_entry = & table_sslhcfg [26], + .base_entry = & table_sslhcfg [27], .targets = sslhcfg_anyprot_targets, @@ -2193,6 +2210,7 @@ int sslhcfg_cl_parse(int argc, char* argv[], struct sslhcfg_item* cfg) #ifdef LIBCONFIG sslhcfg_conffile = arg_filen("F", "config", "", 0, 1, "Specify configuration file"), #endif + sslhcfg_verbose = arg_intn(NULL, "verbose", "", 0, 1, "Override all verbosness options"), sslhcfg_verbose_config = arg_intn(NULL, "verbose-config", "", 0, 1, "Print configuration at startup"), sslhcfg_verbose_config_error = arg_intn(NULL, "verbose-config-error", "", 0, 1, "Print configuration errors"), sslhcfg_verbose_connections = arg_intn(NULL, "verbose-connections", "", 0, 1, "Trace established incoming address to forward address"), @@ -2239,13 +2257,10 @@ int sslhcfg_cl_parse(int argc, char* argv[], struct sslhcfg_item* cfg) /* Parse command line */ nerrors = arg_parse(argc, argv, argtable); if (nerrors) { - // print bad args - arg_print_errors(stdout, sslhcfg_end, "sslhcfg"); - // print usage + arg_print_errors(stdout, sslhcfg_end, "sslhcfg"); arg_print_syntax(stdout, argtable, "\n"); - // print options arg_print_glossary(stdout, argtable, " %-25s\t%s\n"); - fprintf(stderr, "Invalid args are ignored, please fix them\n"); + return -1; } @@ -2382,6 +2397,9 @@ void sslhcfg_fprint( int depth) { int i; + indent(out, depth); + fprintf(out, "verbose: %d", sslhcfg->verbose); + fprintf(out, "\n"); indent(out, depth); fprintf(out, "verbose_config: %d", sslhcfg->verbose_config); fprintf(out, "\n"); diff --git a/sslh-conf.h b/sslh-conf.h index 9f584a4..95fa94f 100644 --- a/sslh-conf.h +++ b/sslh-conf.h @@ -1,5 +1,5 @@ /* Generated by conf2struct (https://www.rutschle.net/tech/conf2struct/README) - * on Tue Jan 2 21:25:47 2024. + * on Wed Jul 10 15:27:23 2024. # conf2struct: generate libconf parsers that read to structs # Copyright (C) 2018-2021 Yves Rutschle @@ -76,6 +76,7 @@ struct sslhcfg_protocols_item { }; struct sslhcfg_item { + int verbose; int verbose_config; int verbose_config_error; int verbose_connections; diff --git a/sslh-main.c b/sslh-main.c index be46708..357b763 100644 --- a/sslh-main.c +++ b/sslh-main.c @@ -129,6 +129,27 @@ static void setup_regex_probe(struct sslhcfg_protocols_item *p) } #endif +/* Perform some fixups on configuration after reading it. + * if verbose is present, override all other verbose options + */ +void config_finish(struct sslhcfg_item* cfg) +{ + if (cfg->verbose) { + cfg->verbose_config = cfg->verbose; + cfg->verbose_config_error = cfg->verbose; + cfg->verbose_connections = cfg->verbose; + cfg->verbose_connections_try = cfg->verbose; + cfg->verbose_connections_error = cfg->verbose; + cfg->verbose_fd = cfg->verbose; + cfg->verbose_packets = cfg->verbose; + cfg->verbose_probe_info = cfg->verbose; + cfg->verbose_probe_error = cfg->verbose; + cfg->verbose_system_error = cfg->verbose; + cfg->verbose_int_error = cfg->verbose; + } +} + + /* For each protocol in the configuration, resolve address and set up protocol * options if required */ @@ -235,6 +256,9 @@ int main(int argc, char *argv[], char* envp[]) memset(&cfg, 0, sizeof(cfg)); res = sslhcfg_cl_parse(argc, argv, &cfg); if (res) exit(6); + config_finish(&cfg); + + sslhcfg_fprint(stdout, &cfg, 0); if (cfg.version) { printf("%s %s\n", server_type, VERSION); diff --git a/sslhconf.cfg b/sslhconf.cfg index f6d8294..a6d8602 100644 --- a/sslhconf.cfg +++ b/sslhconf.cfg @@ -25,6 +25,8 @@ config: { name : "sslhcfg", type: "list", items: ( + { name: "verbose"; type: "int" default: 0; + description: "Override all verbosness options" }, { name: "verbose-config"; type: "int"; default: 0; description: "Print configuration at startup" }, { name: "verbose-config-error"; type: "int"; default: 3;