diff --git a/src/sbbs3/scfg/scfgsrvr.c b/src/sbbs3/scfg/scfgsrvr.c index 476b5a3e5921449ba80291635f3878d1f18fc6b8..2b95f208151b1f721034af6898708d285e2df626 100644 --- a/src/sbbs3/scfg/scfgsrvr.c +++ b/src/sbbs3/scfg/scfgsrvr.c @@ -327,6 +327,144 @@ static void global_cfg(void) } } +static void telnet_srvr_cfg(bbs_startup_t* startup) +{ + static int cur, bar; + char str[256]; + char tmp[256]; + bool enabled = false; + + while(1) { + int i = 0; + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Enabled", startup->options & BBS_OPT_NO_TELNET ? "No" : "Yes"); + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Interfaces" + ,startup->options & BBS_OPT_NO_TELNET ? "N/A" : strListCombine(startup->telnet_interfaces, tmp, sizeof(tmp), ", ")); + snprintf(opt[i++], MAX_OPLN, "%-30s%u", "Port", startup->telnet_port); + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Command Debug" + ,startup->options & BBS_OPT_NO_TELNET ? "N/A" : startup->options & BBS_OPT_DEBUG_TELNET ? "Yes" : "No"); + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Send Go-Aheads" + ,startup->options & BBS_OPT_NO_TELNET ? "N/A" : startup->options & BBS_OPT_NO_TELNET_GA ? "No" : "Yes"); + opt[i][0] = '\0'; + + switch(uifc.list(WIN_ACT|WIN_ESC|WIN_RHT|WIN_SAV, 0, 0, 0, &cur, &bar + ,"Telnet Server",opt)) { + case 0: + startup->options ^= BBS_OPT_NO_TELNET; + break; + case 1: + strListCombine(startup->telnet_interfaces, str, sizeof(str), ", "); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Telnet Network Interfaces (IPv4/6)", str, sizeof(str)-1, K_EDIT) >= 0) { + strListFree(&startup->telnet_interfaces); + strListSplitCopy(&startup->telnet_interfaces, str, ", "); + uifc.changes = true; + } + break; + case 2: + SAFEPRINTF(str, "%u", startup->telnet_port); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Telnet TCP Port", str, 5, K_NUMBER|K_EDIT) > 0) + startup->telnet_port = atoi(str); + break; + case 3: + startup->options ^= BBS_OPT_DEBUG_TELNET; + break; + case 4: + startup->options ^= BBS_OPT_NO_TELNET_GA; + break; + default: + return; + } + } +} + +static void ssh_srvr_cfg(bbs_startup_t* startup) +{ + static int cur, bar; + char str[256]; + char tmp[256]; + bool enabled = false; + + while(1) { + int i = 0; + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Enabled", startup->options & BBS_OPT_ALLOW_SSH ? "Yes" : "No"); + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Interfaces" + ,startup->options & BBS_OPT_ALLOW_SSH ? strListCombine(startup->ssh_interfaces, tmp, sizeof(tmp), ", ") : "N/A"); + snprintf(opt[i++], MAX_OPLN, "%-30s%u", "Port", startup->ssh_port); + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Connect Timeout" + ,startup->options & BBS_OPT_ALLOW_SSH ? vduration(startup->ssh_connect_timeout) : "N/A"); + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Error Level", iniLogLevelStringList()[startup->ssh_error_level]); + opt[i][0] = '\0'; + + switch(uifc.list(WIN_ACT|WIN_ESC|WIN_RHT|WIN_SAV, 0, 0, 0, &cur, &bar + ,"SSH Server",opt)) { + case 0: + startup->options ^= BBS_OPT_ALLOW_SSH; + break; + case 1: + strListCombine(startup->ssh_interfaces, str, sizeof(str), ", "); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "SSH Network Interfaces (IPv4/6)", str, sizeof(str)-1, K_EDIT) >= 0) { + strListFree(&startup->ssh_interfaces); + strListSplitCopy(&startup->ssh_interfaces, str, ", "); + uifc.changes = true; + } + break; + case 2: + SAFEPRINTF(str, "%u", startup->ssh_port); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "SSH TCP Port", str, 5, K_NUMBER|K_EDIT) > 0) + startup->ssh_port = atoi(str); + break; + case 3: + SAFECOPY(str, duration(startup->ssh_connect_timeout, false)); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "SSH Connect Timeout", str, 6, K_EDIT) > 0) + startup->ssh_connect_timeout = (uint16_t)parse_duration(str); + break; + case 4: + uifc.list(WIN_MID|WIN_SAV, 0, 0, 0, &startup->ssh_error_level, 0, "SSH Error Log Level", iniLogLevelStringList()); + break; + default: + return; + } + } +} + +static void rlogin_srvr_cfg(bbs_startup_t* startup) +{ + static int cur, bar; + char str[256]; + char tmp[256]; + bool enabled = false; + + while(1) { + int i = 0; + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Enabled", startup->options & BBS_OPT_ALLOW_RLOGIN ? "Yes" : "No"); + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Interfaces" + ,startup->options & BBS_OPT_ALLOW_RLOGIN ? strListCombine(startup->rlogin_interfaces, tmp, sizeof(tmp), ", ") : "N/A"); + snprintf(opt[i++], MAX_OPLN, "%-30s%u", "Port", startup->rlogin_port); + opt[i][0] = '\0'; + + switch(uifc.list(WIN_ACT|WIN_ESC|WIN_RHT|WIN_SAV, 0, 0, 0, &cur, &bar + ,"RLogin Server",opt)) { + case 0: + startup->options ^= BBS_OPT_ALLOW_RLOGIN; + break; + case 1: + strListCombine(startup->rlogin_interfaces, str, sizeof(str), ", "); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "RLogin Network Interfaces (IPv4/6)", str, sizeof(str)-1, K_EDIT) >= 0) { + strListFree(&startup->rlogin_interfaces); + strListSplitCopy(&startup->rlogin_interfaces, str, ", "); + uifc.changes = true; + } + break; + case 2: + SAFEPRINTF(str, "%u", startup->rlogin_port); + if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "RLogin TCP Port", str, 5, K_NUMBER|K_EDIT) > 0) + startup->rlogin_port = atoi(str); + break; + default: + return; + } + } +} + static void termsrvr_cfg(void) { static int cur, bar; @@ -366,26 +504,13 @@ static void termsrvr_cfg(void) snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Log Level", iniLogLevelStringList()[startup.log_level]); snprintf(opt[i++], MAX_OPLN, "%-30s%u", "First Node", startup.first_node); snprintf(opt[i++], MAX_OPLN, "%-30s%u", "Last Node", startup.last_node); + snprintf(str, sizeof str, "Port %u", startup.ssh_port); + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "SSH Support...", startup.options & BBS_OPT_ALLOW_SSH ? str : strDisabled); + snprintf(str, sizeof str, "Port %u", startup.telnet_port); + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Telnet Support...", startup.options & BBS_OPT_NO_TELNET ? strDisabled : str); + snprintf(str, sizeof str, "Port %u", startup.rlogin_port); + snprintf(opt[i++], MAX_OPLN, "%-30s%s", "RLogin Support...", startup.options & BBS_OPT_ALLOW_RLOGIN ? str : strDisabled); snprintf(opt[i++], MAX_OPLN, "%-30s%s", "DOS Program Support", startup.options & BBS_OPT_NO_DOS ? "No" : "Yes"); - snprintf(opt[i++], MAX_OPLN, "%-30s%s", "SSH Support", startup.options & BBS_OPT_ALLOW_SSH ? "Yes" : "No"); - snprintf(opt[i++], MAX_OPLN, "%-30s%s", "SSH Interfaces" - ,startup.options & BBS_OPT_ALLOW_SSH ? strListCombine(startup.ssh_interfaces, tmp, sizeof(tmp), ", ") : "N/A"); - snprintf(opt[i++], MAX_OPLN, "%-30s%u", "SSH Port", startup.ssh_port); - snprintf(opt[i++], MAX_OPLN, "%-30s%s", "SSH Connect Timeout" - ,startup.options & BBS_OPT_ALLOW_SSH ? vduration(startup.ssh_connect_timeout) : "N/A"); - snprintf(opt[i++], MAX_OPLN, "%-30s%s", "SSH Error Level", iniLogLevelStringList()[startup.ssh_error_level]); - snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Telnet Support", startup.options & BBS_OPT_NO_TELNET ? "No" : "Yes"); - snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Telnet Interfaces" - ,startup.options & BBS_OPT_NO_TELNET ? "N/A" : strListCombine(startup.telnet_interfaces, tmp, sizeof(tmp), ", ")); - snprintf(opt[i++], MAX_OPLN, "%-30s%u", "Telnet Port", startup.telnet_port); - snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Telnet Command Debug" - ,startup.options & BBS_OPT_NO_TELNET ? "N/A" : startup.options & BBS_OPT_DEBUG_TELNET ? "Yes" : "No"); - snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Telnet Send Go-Aheads" - ,startup.options & BBS_OPT_NO_TELNET ? "N/A" : startup.options & BBS_OPT_NO_TELNET_GA ? "No" : "Yes"); - snprintf(opt[i++], MAX_OPLN, "%-30s%s", "RLogin Support", startup.options & BBS_OPT_ALLOW_RLOGIN ? "Yes" : "No"); - snprintf(opt[i++], MAX_OPLN, "%-30s%s", "RLogin Interfaces" - ,startup.options & BBS_OPT_ALLOW_RLOGIN ? strListCombine(startup.rlogin_interfaces, tmp, sizeof(tmp), ", ") : "N/A"); - snprintf(opt[i++], MAX_OPLN, "%-30s%u", "RLogin Port", startup.rlogin_port); snprintf(opt[i++], MAX_OPLN, "%-30s%u", "40 Column PETSCII Port", startup.pet40_port); snprintf(opt[i++], MAX_OPLN, "%-30s%u", "80 Column PETSCII Port", startup.pet80_port); snprintf(opt[i++], MAX_OPLN, "%-30s%s", "Max Concurrent Connections", maximum(startup.max_concurrent_connections)); @@ -431,121 +556,68 @@ static void termsrvr_cfg(void) startup.last_node = atoi(str); break; case 4: - startup.options ^= BBS_OPT_NO_DOS; + ssh_srvr_cfg(&startup); break; case 5: - startup.options ^= BBS_OPT_ALLOW_SSH; + telnet_srvr_cfg(&startup); break; case 6: - strListCombine(startup.ssh_interfaces, str, sizeof(str), ", "); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "SSH Network Interfaces (IPv4/6)", str, sizeof(str)-1, K_EDIT) >= 0) { - strListFree(&startup.ssh_interfaces); - strListSplitCopy(&startup.ssh_interfaces, str, ", "); - uifc.changes = true; - } + rlogin_srvr_cfg(&startup); break; case 7: - SAFEPRINTF(str, "%u", startup.ssh_port); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "SSH TCP Port", str, 5, K_NUMBER|K_EDIT) > 0) - startup.ssh_port = atoi(str); + startup.options ^= BBS_OPT_NO_DOS; break; case 8: - SAFECOPY(str, duration(startup.ssh_connect_timeout, false)); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "SSH Connect Timeout", str, 6, K_EDIT) > 0) - startup.ssh_connect_timeout = (uint16_t)parse_duration(str); - break; - case 9: - uifc.list(WIN_MID|WIN_SAV, 0, 0, 0, &startup.ssh_error_level, 0, "SSH Error Log Level", iniLogLevelStringList()); - break; - case 10: - startup.options ^= BBS_OPT_NO_TELNET; - break; - case 11: - strListCombine(startup.telnet_interfaces, str, sizeof(str), ", "); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Telnet Network Interfaces (IPv4/6)", str, sizeof(str)-1, K_EDIT) >= 0) { - strListFree(&startup.telnet_interfaces); - strListSplitCopy(&startup.telnet_interfaces, str, ", "); - uifc.changes = true; - } - break; - case 12: - SAFEPRINTF(str, "%u", startup.telnet_port); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Telnet TCP Port", str, 5, K_NUMBER|K_EDIT) > 0) - startup.telnet_port = atoi(str); - break; - case 13: - startup.options ^= BBS_OPT_DEBUG_TELNET; - break; - case 14: - startup.options ^= BBS_OPT_NO_TELNET_GA; - break; - case 15: - startup.options ^= BBS_OPT_ALLOW_RLOGIN; - break; - case 16: - strListCombine(startup.rlogin_interfaces, str, sizeof(str), ", "); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "RLogin Network Interfaces (IPv4/6)", str, sizeof(str)-1, K_EDIT) >= 0) { - strListFree(&startup.rlogin_interfaces); - strListSplitCopy(&startup.rlogin_interfaces, str, ", "); - uifc.changes = true; - } - break; - case 17: - SAFEPRINTF(str, "%u", startup.rlogin_port); - if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "RLogin TCP Port", str, 5, K_NUMBER|K_EDIT) > 0) - startup.rlogin_port = atoi(str); - break; - case 18: SAFEPRINTF(str, "%u", startup.pet40_port); if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "40 Column CBM/PETSCII TCP Port", str, 5, K_NUMBER|K_EDIT) > 0) startup.pet40_port = atoi(str); break; - case 19: + case 9: SAFEPRINTF(str, "%u", startup.pet80_port); if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "80 Column CBM/PETSCII TCP Port", str, 5, K_NUMBER|K_EDIT) > 0) startup.pet80_port = atoi(str); break; - case 20: + case 10: SAFECOPY(str, maximum(startup.max_concurrent_connections)); if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Maximum Concurrent (Unauthenticated) Connections", str, 10, K_EDIT) > 0) startup.max_concurrent_connections = atoi(str); break; - case 21: + case 11: SAFECOPY(str, duration(startup.max_login_inactivity, false)); if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Maximum Socket Inactivity at Login", str, 10, K_EDIT) > 0) startup.max_login_inactivity = (uint16_t)parse_duration(str); break; - case 22: + case 12: SAFECOPY(str, duration(startup.max_newuser_inactivity, false)); if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Maximum Socket Inactivity at New User Registration", str, 10, K_EDIT) > 0) startup.max_newuser_inactivity = (uint16_t)parse_duration(str); break; - case 23: + case 13: SAFECOPY(str, duration(startup.max_session_inactivity, false)); if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Maximum Socket Inactivity during User Session", str, 10, K_EDIT) > 0) startup.max_session_inactivity = (uint16_t)parse_duration(str); break; - case 24: + case 14: SAFEPRINTF(str, "%u", startup.outbuf_drain_timeout); if(uifc.input(WIN_MID|WIN_SAV, 0, 0, "Output Buffer Drain Timeout (milliseconds)", str, 5, K_NUMBER|K_EDIT) > 0) startup.outbuf_drain_timeout = atoi(str); break; - case 25: + case 15: startup.options ^= BBS_OPT_NO_EVENTS; break; - case 26: + case 16: startup.options ^= BBS_OPT_NO_QWK_EVENTS; break; - case 27: + case 17: startup.options ^= BBS_OPT_NO_HOST_LOOKUP; break; - case 28: + case 18: getar("Terminal Server Login", startup.login_ars); break; - case 29: + case 19: js_startup_cfg(&startup.js); break; - case 30: + case 20: login_attempt_cfg(&startup.login_attempt); break; default: