More work on control center

This commit is contained in:
Andrew Pamment 2017-03-27 19:05:56 +10:00
parent dea3079e26
commit 5ed4566eda
3 changed files with 998 additions and 4 deletions

View File

@ -168,7 +168,8 @@ struct user_record {
int defarchiver;
int defprotocol;
};
extern int get_valid_seclevels(int **levels, int *count);
extern struct fido_addr *parse_fido_addr(const char *str);
extern int load_ini_file(char *ini_file);
extern void system_config(void);
#endif

View File

@ -2,11 +2,40 @@
#include <time.h>
#include <stdlib.h>
#include <limits.h>
#include <dirent.h>
#include "ccenter.h"
#include "../../inih/ini.h"
struct bbs_config conf;
int get_valid_seclevels(int **levels, int *count) {
DIR *dp;
struct dirent *dirp;
int c = 0;
int *lvls;
dp = opendir(conf.config_path);
if (!dp) {
return 0;
}
while ((dirp = readdir(dp)) != NULL) {
if (dirp->d_name[0] == 's' && atoi(&dirp->d_name[1]) > 0) {
if (c == 0) {
lvls = (int *)malloc(sizeof(int) * (c + 1));
} else {
lvls = (int *)realloc(lvls, sizeof(int) * (c + 1));
}
lvls[c] = atoi(&dirp->d_name[1]);
c++;
}
}
closedir(dp);
*levels = lvls;
*count = c;
return 1;
}
struct fido_addr *parse_fido_addr(const char *str) {
if (str == NULL) {
return NULL;

View File

@ -39,18 +39,970 @@ void sysop_name(void) {
destroyCDKEntry(sysopNameEntry);
}
void number_of_nodes(void) {
char *entrytext;
char buffer[4];
int newnum;
CDKENTRY *nodeNumEntry = newCDKEntry(cdkscreen, 5, 5, "</B/32>Number of Nodes (1-255)<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 3, TRUE, FALSE);
snprintf(buffer, 4, "%d", conf.nodes);
setCDKEntry(nodeNumEntry, buffer, 1, 3, TRUE);
entrytext = activateCDKEntry(nodeNumEntry, 0);
if (nodeNumEntry->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 0 && newnum < 256) {
conf.nodes = newnum;
}
}
destroyCDKEntry(nodeNumEntry);
}
void main_aka() {
char *entrytext;
char buffer[128];
struct fido_addr *new_addr;
CDKENTRY *mainAKAEntry = newCDKEntry(cdkscreen, 7, 7, "</B/32>Main AKA<!32>", NULL, A_NORMAL, ' ', vMIXED, 32, 1, 32, TRUE, FALSE);
snprintf(buffer, 128, "%d:%d/%d.%d", conf.main_aka->zone, conf.main_aka->net, conf.main_aka->node, conf.main_aka->point);
setCDKEntry(mainAKAEntry, buffer, 1, 32, TRUE);
entrytext = activateCDKEntry(mainAKAEntry, 0);
if (mainAKAEntry->exitType == vNORMAL) {
new_addr = parse_fido_addr(entrytext);
if (new_addr != NULL) {
if (conf.main_aka != NULL) {
free(conf.main_aka);
}
conf.main_aka = new_addr;
}
}
destroyCDKEntry(mainAKAEntry);
}
void default_tagline(void) {
char *entrytext;
CDKENTRY *defaultTagline = newCDKEntry(cdkscreen, 7, 7, "</B/32>Default Tagline<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 80, TRUE, FALSE);
setCDKEntry(defaultTagline, conf.default_tagline, 1, 80, TRUE);
entrytext = activateCDKEntry(defaultTagline, 0);
if (defaultTagline->exitType == vNORMAL) {
if (conf.default_tagline != NULL) {
free(conf.default_tagline);
}
conf.default_tagline = strdup(entrytext);
}
destroyCDKEntry(defaultTagline);
}
void external_editor_cmd(void) {
char *entrytext;
CDKENTRY *extEditCmd = newCDKEntry(cdkscreen, 9, 9, "</B/32>External Editor Command<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE);
setCDKEntry(extEditCmd, conf.external_editor_cmd, 1, 1024, TRUE);
entrytext = activateCDKEntry(extEditCmd, 0);
if (extEditCmd->exitType == vNORMAL) {
if (conf.external_editor_cmd != NULL) {
free(conf.external_editor_cmd);
}
conf.external_editor_cmd = strdup(entrytext);
}
destroyCDKEntry(extEditCmd);
}
void external_editor_stdio() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *extEditStdio = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>External Editor STDIO<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.external_editor_stdio == 1) {
setCDKScrollCurrent(extEditStdio, 0);
} else {
setCDKScrollCurrent(extEditStdio, 1);
}
while(!doexit) {
selection = activateCDKScroll(extEditStdio, 0);
if (extEditStdio->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.external_editor_stdio = 1;
doexit = 1;
break;
case 1:
conf.external_editor_stdio = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(extEditStdio);
}
void external_editor() {
char *itemList[] = {"Command",
"STDIO Redirection"};
int selection;
CDKSCROLL *extEditOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 5, 30, "</B/32>External Editor Config<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(extEditOpts, 0);
if (extEditOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
external_editor_cmd();
break;
case 1:
external_editor_stdio();
break;
default:
break;
}
}
destroyCDKScroll(extEditOpts);
}
void qwk_opts_name(void) {
char *entrytext;
CDKENTRY *qwkOpsName = newCDKEntry(cdkscreen, 9, 9, "</B/32>QWK/Bluewave Name (8 Chars Max)<!32>", NULL, A_NORMAL, ' ', vUMIXED, 16, 1, 8, TRUE, FALSE);
setCDKEntry(qwkOpsName, conf.bwave_name, 1, 8, TRUE);
entrytext = activateCDKEntry(qwkOpsName, 0);
if (qwkOpsName->exitType == vNORMAL) {
if (conf.bwave_name != NULL) {
free(conf.bwave_name);
}
conf.bwave_name = strdup(entrytext);
}
destroyCDKEntry(qwkOpsName);
}
void qwk_opts_max(void) {
char *entrytext;
char buffer[7];
int newnum;
CDKENTRY *qwkOptsMax = newCDKEntry(cdkscreen, 9, 9, "</B/32>Max Messages Per Packet<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 6, TRUE, FALSE);
snprintf(buffer, 7, "%d", conf.bwave_max_msgs);
setCDKEntry(qwkOptsMax, buffer, 1, 3, TRUE);
entrytext = activateCDKEntry(qwkOptsMax, 0);
if (qwkOptsMax->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 0) {
conf.bwave_max_msgs = newnum;
}
}
destroyCDKEntry(qwkOptsMax);
}
void qwk_opts() {
char *itemList[] = {"QWK Name",
"QWK Max Messages"};
int selection;
CDKSCROLL *qwkOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 5, 30, "</B/32>QWK/Bluewave Options<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(qwkOpts, 0);
if (qwkOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
qwk_opts_name();
break;
case 1:
qwk_opts_max();
break;
default:
break;
}
}
destroyCDKScroll(qwkOpts);
}
void message_area_opts() {
char *itemList[] = {"Main AKA",
"Default Tagline",
"External Editor",
"QWK/Bluewave Options"};
int selection;
CDKSCROLL *msgAreaOpts = newCDKScroll(cdkscreen, 5, 5, RIGHT, 7, 30, "</B/32>Message Area Options<!32>", itemList, 4,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(msgAreaOpts, 0);
if (msgAreaOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
main_aka();
break;
case 1:
default_tagline();
break;
case 2:
external_editor();
break;
case 3:
qwk_opts();
break;
default:
break;
}
}
destroyCDKScroll(msgAreaOpts);
}
void choose_sec_level(int *result, int x, int y, int selected) {
int *lvls;
int count;
int res;
int i;
int s = -1;
if (!get_valid_seclevels(&lvls, &count)) {
return;
}
char **itemlist;
itemlist = (char **)malloc(sizeof(char *) * count);
for (i=0;i<count;i++) {
itemlist[i] = (char *)malloc(sizeof(char) * 4);
snprintf(itemlist[i], 4, "%d", lvls[i]);
if (lvls[i] == selected) {
s = i;
}
}
int selection;
CDKSCROLL *secLevelOpts = newCDKScroll(cdkscreen, x, y, RIGHT, 10, 30, "</B/32>Choose Sec Level<!32>", itemlist, count,FALSE, A_STANDOUT, TRUE, FALSE);
if (s != -1) {
setCDKScrollCurrent(secLevelOpts, s);
}
while(1) {
selection = activateCDKScroll(secLevelOpts, 0);
if (secLevelOpts->exitType == vESCAPE_HIT) {
break;
}
res = (lvls[selection]);
*result = res;
}
destroyCDKScroll(secLevelOpts);
for (i=0;i<count;i++) {
free(itemlist[i]);
}
free(itemlist);
free(lvls);
}
void sec_level_opts() {
char *itemList[] = {"New User Security Level",
"AutoMessage Write Sec. Level"};
int selection;
int ret;
CDKSCROLL *secLevelOpts = newCDKScroll(cdkscreen, 5, 5, RIGHT, 5, 30, "</B/32>Default Security Levels<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(secLevelOpts, 0);
if (secLevelOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
choose_sec_level(&ret, 7, 7, conf.newuserlvl);
conf.newuserlvl = ret;
break;
case 1:
choose_sec_level(&ret, 7, 7, conf.automsgwritelvl);
conf.automsgwritelvl = ret;
break;
default:
break;
}
}
destroyCDKScroll(secLevelOpts);
}
void telnet_port(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *telnetPort = newCDKEntry(cdkscreen, 7, 7, "</B/32>Telnet Port 1025-65535<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.telnet_port);
setCDKEntry(telnetPort, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(telnetPort, 0);
if (telnetPort->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.telnet_port = newnum;
}
}
destroyCDKEntry(telnetPort);
}
void ssh_enabled() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *sshEnabled = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>Enable SSH<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.ssh_server == 1) {
setCDKScrollCurrent(sshEnabled, 0);
} else {
setCDKScrollCurrent(sshEnabled, 1);
}
while(!doexit) {
selection = activateCDKScroll(sshEnabled, 0);
if (sshEnabled->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.ssh_server = 1;
doexit = 1;
break;
case 1:
conf.ssh_server = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(sshEnabled);
}
void ssh_port(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *sshPort = newCDKEntry(cdkscreen, 9, 9, "</B/32>SSH Port 1025-65535<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.ssh_port);
setCDKEntry(sshPort, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(sshPort, 0);
if (sshPort->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.ssh_port = newnum;
}
}
destroyCDKEntry(sshPort);
}
void ssh_dsa_key(void) {
char *entrytext;
CDKENTRY *sshDSAKey = newCDKEntry(cdkscreen, 9, 9, "</B/32>SSH DSA Key<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE);
setCDKEntry(sshDSAKey, conf.ssh_dsa_key, 1, 1024, TRUE);
entrytext = activateCDKEntry(sshDSAKey, 0);
if (sshDSAKey->exitType == vNORMAL) {
if (conf.ssh_dsa_key != NULL) {
free(conf.ssh_dsa_key);
}
conf.ssh_dsa_key = strdup(entrytext);
}
destroyCDKEntry(sshDSAKey);
}
void ssh_rsa_key(void) {
char *entrytext;
CDKENTRY *sshRSAKey = newCDKEntry(cdkscreen, 9, 9, "</B/32>SSH RSA Key<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE);
setCDKEntry(sshRSAKey, conf.ssh_rsa_key, 1, 1024, TRUE);
entrytext = activateCDKEntry(sshRSAKey, 0);
if (sshRSAKey->exitType == vNORMAL) {
if (conf.ssh_rsa_key != NULL) {
free(conf.ssh_rsa_key);
}
conf.ssh_rsa_key = strdup(entrytext);
}
destroyCDKEntry(sshRSAKey);
}
void ssh_opts() {
char *itemList[] = {"SSH Enabled",
"SSH Port",
"SSH DSA Key",
"SSH RSA Key"};
int selection;
CDKSCROLL *sshOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 7, 30, "</B/32>SSH Options<!32>", itemList, 4,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(sshOpts, 0);
if (sshOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
ssh_enabled();
break;
case 1:
ssh_port();
break;
case 2:
ssh_dsa_key();
break;
case 3:
ssh_rsa_key();
break;
default:
break;
}
}
destroyCDKScroll(sshOpts);
}
void www_enabled() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *wwwEnabled = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>Enable HTTP<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.www_server == 1) {
setCDKScrollCurrent(wwwEnabled, 0);
} else {
setCDKScrollCurrent(wwwEnabled, 1);
}
while(!doexit) {
selection = activateCDKScroll(wwwEnabled, 0);
if (wwwEnabled->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.www_server = 1;
doexit = 1;
break;
case 1:
conf.www_server = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(wwwEnabled);
}
void www_port(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *wwwPort = newCDKEntry(cdkscreen, 9, 9, "</B/32>HTTP Port 1025-65535<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.www_port);
setCDKEntry(wwwPort, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(wwwPort, 0);
if (wwwPort->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.www_port = newnum;
}
}
destroyCDKEntry(wwwPort);
}
void www_path(void) {
char *entrytext;
CDKENTRY *wwwPath = newCDKEntry(cdkscreen, 9, 9, "</B/32>HTTP Root Path<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE);
setCDKEntry(wwwPath, conf.www_path, 1, 1024, TRUE);
entrytext = activateCDKEntry(wwwPath, 0);
if (wwwPath->exitType == vNORMAL) {
if (conf.www_path != NULL) {
free(conf.www_path);
}
conf.www_path = strdup(entrytext);
}
destroyCDKEntry(wwwPath);
}
void www_opts() {
char *itemList[] = {"HTTP Enabled",
"HTTP Port",
"HTTP Root Path"};
int selection;
CDKSCROLL *wwwOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 6, 30, "</B/32>HTTP Options<!32>", itemList, 3,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(wwwOpts, 0);
if (wwwOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
www_enabled();
break;
case 1:
www_port();
break;
case 2:
www_path();
break;
default:
break;
}
}
destroyCDKScroll(wwwOpts);
}
void chat_server(void) {
char *entrytext;
CDKENTRY *chatServer = newCDKEntry(cdkscreen, 9, 9, "</B/32>MagiChat Server<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 0, 1024, TRUE, FALSE);
if (conf.mgchat_server != NULL) {
setCDKEntry(chatServer, conf.mgchat_server, 1, 1024, TRUE);
}
entrytext = activateCDKEntry(chatServer, 0);
if (chatServer->exitType == vNORMAL) {
if (conf.mgchat_server != NULL) {
free(conf.mgchat_server);
}
if (strlen(entrytext) > 0) {
conf.mgchat_server = strdup(entrytext);
} else {
conf.mgchat_server = NULL;
}
}
destroyCDKEntry(chatServer);
}
void chat_port(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *chatPort = newCDKEntry(cdkscreen, 9, 9, "</B/32>MagiChat Port 1025-65535<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.mgchat_port);
setCDKEntry(chatPort, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(chatPort, 0);
if (chatPort->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.mgchat_port = newnum;
}
}
destroyCDKEntry(chatPort);
}
void chat_bbstag(void) {
char *entrytext;
CDKENTRY *chatTag = newCDKEntry(cdkscreen, 9, 9, "</B/32>MagiChat BBS Tag<!32>", NULL, A_NORMAL, ' ', vMIXED, 32, 1, 16, TRUE, FALSE);
setCDKEntry(chatTag, conf.mgchat_bbstag, 1, 16, TRUE);
entrytext = activateCDKEntry(chatTag, 0);
if (chatTag->exitType == vNORMAL) {
if (conf.mgchat_bbstag != NULL) {
free(conf.mgchat_bbstag);
}
conf.mgchat_bbstag = strdup(entrytext);
}
destroyCDKEntry(chatTag);
}
void chat_opts() {
char *itemList[] = {"MagiChat Server",
"MagiChat Port",
"MagiChat BBS Tag"};
int selection;
CDKSCROLL *chatOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 6, 30, "</B/32>MagiChat Options<!32>", itemList, 3,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(chatOpts, 0);
if (chatOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
chat_server();
break;
case 1:
chat_port();
break;
case 2:
chat_bbstag();
break;
default:
break;
}
}
destroyCDKScroll(chatOpts);
}
void broadcast_enable() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *broadcastEnabled = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>Enable Broadcast<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.broadcast_enable == 1) {
setCDKScrollCurrent(broadcastEnabled, 0);
} else {
setCDKScrollCurrent(broadcastEnabled, 1);
}
while(!doexit) {
selection = activateCDKScroll(broadcastEnabled, 0);
if (broadcastEnabled->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.broadcast_enable = 1;
doexit = 1;
break;
case 1:
conf.broadcast_enable = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(broadcastEnabled);
}
void broadcast_port(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *broadcastPort = newCDKEntry(cdkscreen, 9, 9, "</B/32>Broadcast Port 1025-65535<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.broadcast_port);
setCDKEntry(broadcastPort, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(broadcastPort, 0);
if (broadcastPort->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.broadcast_port = newnum;
}
}
destroyCDKEntry(broadcastPort);
}
void broadcast_address(void) {
char *entrytext;
CDKENTRY *broadcastAddr = newCDKEntry(cdkscreen, 9, 9, "</B/32>Broadcast Address<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE);
setCDKEntry(broadcastAddr, conf.broadcast_address, 1, 1024, TRUE);
entrytext = activateCDKEntry(broadcastAddr, 0);
if (broadcastAddr->exitType == vNORMAL) {
if (conf.broadcast_address != NULL) {
free(conf.broadcast_address);
}
conf.broadcast_address = strdup(entrytext);
}
destroyCDKEntry(broadcastAddr);
}
void broadcast_opts() {
char *itemList[] = {"Broadcast Enable",
"Broadcast Port",
"Broadcast Address"};
int selection;
CDKSCROLL *broadcastOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 6, 30, "</B/32>Broadcast Options<!32>", itemList, 3,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(broadcastOpts, 0);
if (broadcastOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
broadcast_enable();
break;
case 1:
broadcast_port();
break;
case 2:
broadcast_address();
break;
default:
break;
}
}
destroyCDKScroll(broadcastOpts);
}
void ipguard_enable() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *ipguardEnabled = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>Enable IPGuard<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.ipguard_enable == 1) {
setCDKScrollCurrent(ipguardEnabled, 0);
} else {
setCDKScrollCurrent(ipguardEnabled, 1);
}
while(!doexit) {
selection = activateCDKScroll(ipguardEnabled, 0);
if (ipguardEnabled->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.ipguard_enable = 1;
doexit = 1;
break;
case 1:
conf.ipguard_enable = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(ipguardEnabled);
}
void ipguard_timeout(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *ipguardTimeout = newCDKEntry(cdkscreen, 9, 9, "</B/32>IP Guard Timeout<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.ipguard_timeout);
setCDKEntry(ipguardTimeout, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(ipguardTimeout, 0);
if (ipguardTimeout->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.ipguard_timeout = newnum;
}
}
destroyCDKEntry(ipguardTimeout);
}
void ipguard_tries(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *ipguardTries = newCDKEntry(cdkscreen, 9, 9, "</B/32>IP Guard Tries<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.ipguard_tries);
setCDKEntry(ipguardTries, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(ipguardTries, 0);
if (ipguardTries->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.ipguard_tries = newnum;
}
}
destroyCDKEntry(ipguardTries);
}
void ipguard_opts() {
char *itemList[] = {"IPGuard Enable",
"IPGuard Timeout",
"IPGuard Tries"};
int selection;
CDKSCROLL *ipGuardOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 6, 30, "</B/32>IPGuard Options<!32>", itemList, 3,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(ipGuardOpts, 0);
if (ipGuardOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
ipguard_enable();
break;
case 1:
ipguard_timeout();
break;
case 2:
ipguard_tries();
break;
default:
break;
}
}
destroyCDKScroll(ipGuardOpts);
}
void fork_enable() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *forkEnabled = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>Fork to Background<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.fork == 1) {
setCDKScrollCurrent(forkEnabled, 0);
} else {
setCDKScrollCurrent(forkEnabled, 1);
}
while(!doexit) {
selection = activateCDKScroll(forkEnabled, 0);
if (forkEnabled->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.fork = 1;
doexit = 1;
break;
case 1:
conf.fork = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(forkEnabled);
}
void misc_opts() {
char *itemList[] = {"Fork"};
int selection;
CDKSCROLL *miscOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 4, 30, "</B/32>Misc Options<!32>", itemList, 1,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(miscOpts, 0);
if (miscOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
fork_enable();
break;
default:
break;
}
}
destroyCDKScroll(miscOpts);
}
void server_opts() {
char *itemList[] = {"Telnet Port",
"SSH Options",
"HTTP Options",
"MagiChat Options",
"Broadcast Options",
"IP Guard Options",
"Misc Options"};
int selection;
CDKSCROLL *svrOpts = newCDKScroll(cdkscreen, 5, 5, RIGHT, 10, 30, "</B/32>Server/Port Options<!32>", itemList, 7,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(svrOpts, 0);
if (svrOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
telnet_port();
break;
case 1:
ssh_opts();
break;
case 2:
www_opts();
break;
case 3:
chat_opts();
break;
case 4:
broadcast_opts();
break;
case 5:
ipguard_opts();
break;
case 6:
misc_opts();
break;
default:
break;
}
}
destroyCDKScroll(svrOpts);
}
void system_config(void) {
char *itemList[] = {"BBS Name",
"Sysop Name",
"Number of Nodes",
"MagiChat",
"Message Area Options",
"Auto Message Write Level",
"Default Security Levels",
"Servers and Ports"
};
int selection;
CDKSCROLL *sysConfigItemList = newCDKScroll(cdkscreen, 3, 3, RIGHT, 10, 30, "</B/32>System Config<!32>", itemList, 7,FALSE, A_STANDOUT, TRUE, FALSE);
CDKSCROLL *sysConfigItemList = newCDKScroll(cdkscreen, 3, 3, RIGHT, 9, 30, "</B/32>System Config<!32>", itemList, 6,FALSE, A_STANDOUT, TRUE, FALSE);
while (1) {
selection = activateCDKScroll(sysConfigItemList, 0);
@ -64,6 +1016,18 @@ void system_config(void) {
case 1:
sysop_name();
break;
case 2:
number_of_nodes();
break;
case 3:
message_area_opts();
break;
case 4:
sec_level_opts();
break;
case 5:
server_opts();
break;
default:
break;
}