X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/7d33cce8efb1e078bf23e43e66677a40ce13ccc0..63eb8567cb6b6b8b504b20ef6360d0cc79c18afb:/src/newconf.c diff --git a/src/newconf.c b/src/newconf.c index 6a7a256d..cf675727 100644 --- a/src/newconf.c +++ b/src/newconf.c @@ -29,6 +29,7 @@ #include "blacklist.h" #include "sslproc.h" #include "privilege.h" +#include "chmode.h" #define CF_TYPE(x) ((x) & CF_MTYPE) @@ -277,7 +278,7 @@ conf_set_serverinfo_nicklen(void *data) else if (ConfigFileEntry.nicklen < 9 + 1) { conf_report_error("Warning -- serverinfo::nicklen is too low (%u) -- forcing 9", - ConfigFileEntry.nicklen); + ConfigFileEntry.nicklen - 1); ConfigFileEntry.nicklen = 9 + 1; } } @@ -865,9 +866,9 @@ conf_set_listen_port_both(void *data, int ssl) } if(listener_address == NULL) { - add_listener(args->v.number, listener_address, AF_INET, ssl, yy_defer_accept); + add_listener(args->v.number, listener_address, AF_INET, ssl, ssl || yy_defer_accept); #ifdef RB_IPV6 - add_listener(args->v.number, listener_address, AF_INET6, ssl, yy_defer_accept); + add_listener(args->v.number, listener_address, AF_INET6, ssl, ssl || yy_defer_accept); #endif } else @@ -880,7 +881,7 @@ conf_set_listen_port_both(void *data, int ssl) #endif family = AF_INET; - add_listener(args->v.number, listener_address, family, ssl, yy_defer_accept); + add_listener(args->v.number, listener_address, family, ssl, ssl || yy_defer_accept); } @@ -1644,6 +1645,24 @@ conf_set_general_oper_umodes(void *data) set_modes_from_table(&ConfigFileEntry.oper_umodes, "umode", umode_table, data); } +static void +conf_set_general_certfp_method(void *data) +{ + char *method = data; + + if (!strcasecmp(method, "sha1")) + ConfigFileEntry.certfp_method = RB_SSL_CERTFP_METH_SHA1; + else if (!strcasecmp(method, "sha256")) + ConfigFileEntry.certfp_method = RB_SSL_CERTFP_METH_SHA256; + else if (!strcasecmp(method, "sha512")) + ConfigFileEntry.certfp_method = RB_SSL_CERTFP_METH_SHA512; + else + { + ConfigFileEntry.certfp_method = RB_SSL_CERTFP_METH_SHA1; + conf_report_error("Ignoring general::certfp_method -- bogus certfp method %s", method); + } +} + static void conf_set_general_oper_only_umodes(void *data) { @@ -1779,6 +1798,42 @@ conf_set_alias_target(void *data) yy_alias->target = rb_strdup(data); } +static void +conf_set_channel_autochanmodes(void *data) +{ + char *pm; + int what = MODE_ADD; + + ConfigChannel.autochanmodes = 0; + for (pm = (char *) data; *pm; pm++) + { + switch (*pm) + { + case '+': + what = MODE_ADD; + break; + case '-': + what = MODE_DEL; + break; + + default: + if (chmode_table[(unsigned char) *pm].set_func == chm_simple) + { + if (what == MODE_ADD) + ConfigChannel.autochanmodes |= chmode_table[(unsigned char) *pm].mode_type; + else + ConfigChannel.autochanmodes &= ~chmode_table[(unsigned char) *pm].mode_type; + } + else + { + conf_report_error("channel::autochanmodes -- Invalid channel mode %c", pm); + continue; + } + break; + } + } +} + /* XXX for below */ static void conf_set_blacklist_reason(void *data); @@ -1864,7 +1919,7 @@ conf_set_blacklist_matches(void *data) /* Check for validity */ if (*p == '.') type = BLACKLIST_FILTER_ALL; - else if (!isalnum(*p)) + else if (!isalnum((unsigned char)*p)) { conf_report_error("blacklist::matches has invalid IP match entry %s", str); @@ -2185,7 +2240,6 @@ remove_conf_item(const char *topconf, const char *name) static struct ConfEntry conf_serverinfo_table[] = { { "description", CF_QSTRING, NULL, 0, &ServerInfo.description }, - { "network_desc", CF_QSTRING, NULL, 0, &ServerInfo.network_desc }, { "hub", CF_YESNO, NULL, 0, &ServerInfo.hub }, { "network_name", CF_QSTRING, conf_set_serverinfo_network_name, 0, NULL }, @@ -2311,7 +2365,6 @@ static struct ConfEntry conf_general_table[] = { "default_operstring", CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.default_operstring }, { "default_adminstring",CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.default_adminstring }, { "servicestring", CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.servicestring }, - { "egdpool_path", CF_QSTRING, NULL, PATH_MAX, &ConfigFileEntry.egdpool_path }, { "kline_reason", CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.kline_reason }, { "identify_service", CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.identifyservice }, { "identify_command", CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.identifycommand }, @@ -2367,7 +2420,6 @@ static struct ConfEntry conf_general_table[] = { "stats_y_oper_only", CF_YESNO, NULL, 0, &ConfigFileEntry.stats_y_oper_only }, { "target_change", CF_YESNO, NULL, 0, &ConfigFileEntry.target_change }, { "ts_max_delta", CF_TIME, NULL, 0, &ConfigFileEntry.ts_max_delta }, - { "use_egd", CF_YESNO, NULL, 0, &ConfigFileEntry.use_egd }, { "ts_warn_delta", CF_TIME, NULL, 0, &ConfigFileEntry.ts_warn_delta }, { "use_whois_actually", CF_YESNO, NULL, 0, &ConfigFileEntry.use_whois_actually }, { "warn_no_nline", CF_YESNO, NULL, 0, &ConfigFileEntry.warn_no_nline }, @@ -2379,6 +2431,7 @@ static struct ConfEntry conf_general_table[] = { "client_flood_message_time", CF_INT, NULL, 0, &ConfigFileEntry.client_flood_message_time }, { "max_ratelimit_tokens", CF_INT, NULL, 0, &ConfigFileEntry.max_ratelimit_tokens }, { "away_interval", CF_INT, NULL, 0, &ConfigFileEntry.away_interval }, + { "certfp_method", CF_STRING, conf_set_general_certfp_method, 0, NULL }, { "\0", 0, NULL, 0, NULL } }; @@ -2403,6 +2456,7 @@ static struct ConfEntry conf_channel_table[] = { "resv_forcepart", CF_YESNO, NULL, 0, &ConfigChannel.resv_forcepart }, { "channel_target_change", CF_YESNO, NULL, 0, &ConfigChannel.channel_target_change }, { "disable_local_channels", CF_YESNO, NULL, 0, &ConfigChannel.disable_local_channels }, + { "autochanmodes", CF_QSTRING, conf_set_channel_autochanmodes, 0, NULL }, { "\0", 0, NULL, 0, NULL } };