diff --git a/src/sbbs3/scfg/scfgsrvr.c b/src/sbbs3/scfg/scfgsrvr.c index f89c903c21b4f63e79eafbccf0943eb9c5f49431..a5c81c4978fb058e46d3752405a3596aadaa8488 100644 --- a/src/sbbs3/scfg/scfgsrvr.c +++ b/src/sbbs3/scfg/scfgsrvr.c @@ -56,10 +56,9 @@ static const char* maximum(uint val) static void global_cfg(void) { - static int cur; + static int cur, bar; char str[256]; char tmp[256]; - uint32_t ip4_addr; global_startup_t startup = {0}; FILE* fp = iniOpenFile(cfg.filename, /* for_modify? */false); @@ -112,8 +111,101 @@ static void global_cfg(void) "`Global Server Settings:`\n" "\n" ; - switch(uifc.list(WIN_ACT|WIN_CHE|WIN_RHT|WIN_SAV, 0, 0, 0, &cur, 0 + switch(uifc.list(WIN_ACT|WIN_CHE|WIN_RHT|WIN_SAV, 0, 0, 0, &cur, &bar ,"Global Server Setttings",opt)) { + case 0: + i = startup.log_level; + i = uifc.list(WIN_MID|WIN_SAV, 0, 0, 0, &i, 0, "Log Level", iniLogLevelStringList()); + if(i >= 0) + startup.log_level = i; + break; + case 1: + i = startup.tls_error_level; + i = uifc.list(WIN_MID|WIN_SAV, 0, 0, 0, &i, 0, "TLS Error Log Level", iniLogLevelStringList()); + if(i >= 0) + startup.tls_error_level = i; + break; + case 2: + strListCombine(startup.interfaces, str, sizeof(str), ", "); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Network Interfaces", str, sizeof(str)-1, K_EDIT) >= 0) { + strListFree(&startup.interfaces); + strListSplitCopy(&startup.interfaces, str, ", "); + uifc.changes = true; + } + break; + case 3: + IPv4AddressToStr(startup.outgoing4.s_addr, str, sizeof(str)); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Outbound Network Interface", str, sizeof(str)-1, K_EDIT) > 0) + startup.outgoing4.s_addr = parseIPv4Address(str); + break; + case 4: + SAFECOPY(str, threshold(startup.bind_retry_count)); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Port Bind Retry Count", str, 6, K_EDIT) > 0) + startup.bind_retry_count = atoi(str); + break; + case 5: + SAFECOPY(str, duration(startup.bind_retry_delay, false)); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Port Bind Retry Delay", str, 6, K_EDIT) > 0) + startup.bind_retry_delay = parse_duration(str); + break; + case 6: + SAFEPRINTF(str, "%u", startup.login_attempt.delay); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Millisecond Delay After Failed Login Attempts", str, 6, K_NUMBER|K_EDIT) > 0) + startup.login_attempt.delay = atoi(str); + break; + case 7: + SAFEPRINTF(str, "%u", startup.login_attempt.throttle); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Throttle multiplier (in milliseconds) for Failed Logins", str, 6, K_NUMBER|K_EDIT) > 0) + startup.login_attempt.throttle = atoi(str); + break; + case 8: + SAFEPRINTF(str, "%u", startup.login_attempt.hack_threshold); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Threshold for Logging Failed Logins to hack.log", str, 3, K_NUMBER|K_EDIT) > 0) + startup.login_attempt.hack_threshold = atoi(str); + break; + case 9: + SAFEPRINTF(str, "%u", startup.login_attempt.tempban_threshold); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Threshold for Temp-ban IPs of Failed Logins", str, 3, K_NUMBER|K_EDIT) > 0) + startup.login_attempt.tempban_threshold = atoi(str); + break; + case 10: + SAFECOPY(str, duration(startup.login_attempt.tempban_duration, false)); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Duration of Temp-ban for Failed Logins", str, 6, K_EDIT) > 0) + startup.login_attempt.tempban_duration = parse_duration(str); + break; + case 11: + SAFEPRINTF(str, "%u", startup.login_attempt.filter_threshold); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Threshold for Filtering IPs of Failed Logins", str, 3, K_NUMBER|K_EDIT) > 0) + startup.login_attempt.filter_threshold = atoi(str); + break; + case 12: + byte_count_to_str(startup.js.max_bytes, str, sizeof(str)); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "JavaScript Heap Size (Maximum Allocated Bytes)", str, 6, K_UPPER|K_EDIT) > 0) + startup.js.max_bytes = parse_byte_count(str, 1); + break; + case 13: + SAFEPRINTF(str, "%u", startup.js.time_limit); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "JavaScript Execution Time Limit (in ticks)", str, 6, K_NUMBER|K_EDIT) > 0) + startup.js.time_limit = atoi(str); + break; + case 14: + SAFEPRINTF(str, "%u", startup.js.gc_interval); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "JavaScript Garbage Collection Interval (in ticks)", str, 6, K_NUMBER|K_EDIT) > 0) + startup.js.gc_interval = atoi(str); + break; + case 15: + SAFEPRINTF(str, "%u", startup.js.yield_interval); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "JavaScript Yield Interval (in ticks)", str, 6, K_NUMBER|K_EDIT) > 0) + startup.js.yield_interval = atoi(str); + break; + case 16: + uifc.input(WIN_MID|WIN_SAV, 0, 0, "JavaScript Load Library Path", startup.js.load_path, sizeof(startup.js.load_path) - 1, K_EDIT); + break; + case 17: + SAFECOPY(str, duration(startup.sem_chk_freq, false)); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Semaphore File Check Interval", str, 6, K_EDIT) > 0) + startup.sem_chk_freq = parse_duration(str); + break; default: if(memcmp(&saved_startup, &startup, sizeof(startup)) != 0) uifc.changes = true; @@ -152,62 +244,6 @@ static void global_cfg(void) ,NULL //&services_startup ); return; - case 0: - i = startup.log_level; - i = uifc.list(WIN_MID|WIN_SAV, 0, 0, 0, &i, 0, "Log Level", iniLogLevelStringList()); - if(i >= 0 && startup.log_level != i) { - startup.log_level = i; - } - break; - case 1: - i = startup.tls_error_level; - i = uifc.list(WIN_MID|WIN_SAV, 0, 0, 0, &i, 0, "TLS Error Log Level", iniLogLevelStringList()); - if(i >= 0 && startup.tls_error_level != i) { - startup.tls_error_level = i; - } - break; - case 2: - strListCombine(startup.interfaces, str, sizeof(str), ", "); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Network Interfaces", str, sizeof(str)-1, K_EDIT) >= 0) { - strListFree(&startup.interfaces); - strListSplitCopy(&startup.interfaces, str, ", "); - uifc.changes = true; - } - break; - case 3: - IPv4AddressToStr(ip4_addr = startup.outgoing4.s_addr, str, sizeof(str)); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Outbound Network Interface", str, sizeof(str)-1, K_EDIT) > 0) { - if((ip4_addr = parseIPv4Address(str)) != startup.outgoing4.s_addr) { - startup.outgoing4.s_addr = ip4_addr; - } - } - break; - case 4: - SAFECOPY(str, threshold(startup.bind_retry_count)); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Port Bind Retry Count", str, 6, K_EDIT) > 0) { - if(atoi(str) != startup.bind_retry_count) { - startup.bind_retry_count = atoi(str); - } - } - break; - case 5: - SAFECOPY(str, duration(startup.bind_retry_delay, false)); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Port Bind Retry Delay", str, 6, K_EDIT) > 0) { - uint dur = parse_duration(str); - if(dur != startup.bind_retry_delay) { - startup.bind_retry_delay = dur; - } - } - break; - case 6: - SAFEPRINTF(str, "%u", startup.login_attempt.delay); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Millisecond Delay After Failed Login Attempts", str, 6, K_NUMBER|K_EDIT) > 0) { - uint dur = atoi(str); - if(dur != startup.login_attempt.delay) { - startup.login_attempt.delay = dur; - } - } - break; } } } @@ -851,38 +887,6 @@ void server_cfg(void) "for reference.\n" ; i = uifc.list(WIN_ORG|WIN_ACT|WIN_CHE,0,0,0,&srvr_dflt,0, "Server Configuration",opt); - if(i < 0) { -#if 0 - i = save_changes(WIN_MID); - if(i < 0) - continue; - if(i == 0) { - fp = iniOpenFile(cfg.filename, /* for_modify? */true); - if(fp == NULL) - uifc.msgf("Error opening %s", cfg.filename); - else { - if(!sbbs_write_ini( - fp - ,&cfg - ,&global_startup - ,run_bbs - ,&bbs_startup - ,run_ftp - ,&ftp_startup - ,run_web - ,&web_startup - ,run_mail - ,&mail_startup - ,run_services - ,&services_startup - )) - uifc.msgf("Error writing %s", cfg.filename); - iniCloseFile(fp); - } - } -#endif - break; - } switch(i) { case 0: global_cfg(); @@ -902,6 +906,8 @@ void server_cfg(void) case 5: services_cfg(); break; + default: + return; } } }