557 lines
12 KiB
C
557 lines
12 KiB
C
/*****************************************************************************
|
|
*
|
|
* $Id$
|
|
* Purpose ...............: Setup Program
|
|
*
|
|
*****************************************************************************
|
|
* Copyright (C) 1997-2002
|
|
*
|
|
* Michiel Broek FIDO: 2:280/2802
|
|
* Beekmansbos 10
|
|
* 1971 BV IJmuiden
|
|
* the Netherlands
|
|
*
|
|
* This file is part of MBSE BBS.
|
|
*
|
|
* This BBS is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2, or (at your option) any
|
|
* later version.
|
|
*
|
|
* MB BBS is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with MB BBS; see the file COPYING. If not, write to the Free
|
|
* Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*****************************************************************************/
|
|
|
|
#include "../config.h"
|
|
#include "../lib/libs.h"
|
|
#include "../lib/memwatch.h"
|
|
#include "../lib/structs.h"
|
|
#include "../lib/users.h"
|
|
#include "../lib/records.h"
|
|
#include "../lib/common.h"
|
|
#include "../lib/clcomm.h"
|
|
#include "../lib/mberrors.h"
|
|
#include "screen.h"
|
|
#include "mutil.h"
|
|
#include "ledit.h"
|
|
#include "m_global.h"
|
|
#include "m_bbs.h"
|
|
#include "m_farea.h"
|
|
#include "m_fgroup.h"
|
|
#include "m_mail.h"
|
|
#include "m_mgroup.h"
|
|
#include "m_hatch.h"
|
|
#include "m_tic.h"
|
|
#include "m_ticarea.h"
|
|
#include "m_magic.h"
|
|
#include "m_fido.h"
|
|
#include "m_lang.h"
|
|
#include "m_archive.h"
|
|
#include "m_virus.h"
|
|
#include "m_tty.h"
|
|
#include "m_limits.h"
|
|
#include "m_users.h"
|
|
#include "m_node.h"
|
|
#include "m_fdb.h"
|
|
#include "m_new.h"
|
|
#include "m_ol.h"
|
|
#include "m_bbslist.h"
|
|
#include "m_safe.h"
|
|
#include "m_protocol.h"
|
|
#include "m_ff.h"
|
|
#include "m_modem.h"
|
|
#include "m_marea.h"
|
|
#include "m_ngroup.h"
|
|
#include "m_service.h"
|
|
#include "m_domain.h"
|
|
#include "m_task.h"
|
|
#include "m_route.h"
|
|
|
|
|
|
mode_t oldmask; /* Old umask value */
|
|
extern int do_quiet; /* Suppress log to screen */
|
|
extern int bbs_free; /* Free/Busy status */
|
|
int exp_golded = FALSE; /* Export GoldED config */
|
|
int init = FALSE; /* Run init only */
|
|
|
|
|
|
|
|
static void die(int onsig)
|
|
{
|
|
FILE *fp;
|
|
char *temp;
|
|
int i;
|
|
|
|
signal(onsig, SIG_IGN);
|
|
if (!init)
|
|
screen_stop();
|
|
|
|
if (exp_golded && (config_read() != -1)) {
|
|
temp = calloc(PATH_MAX, sizeof(char));
|
|
|
|
/*
|
|
* Export ~/etc/msg.txt for MsgEd.
|
|
*/
|
|
sprintf(temp, "%s/etc/msg.txt", getenv("MBSE_ROOT"));
|
|
if ((fp = fopen(temp, "w")) != NULL) {
|
|
msged_areas(fp);
|
|
fclose(fp);
|
|
Syslog('+', "Created new %s", temp);
|
|
} else {
|
|
WriteError("$Could not create %s", temp);
|
|
}
|
|
|
|
/*
|
|
* Export ~/etc/golded.inc for GoldED
|
|
*/
|
|
sprintf(temp, "%s/etc/golded.inc", getenv("MBSE_ROOT"));
|
|
if ((fp = fopen(temp, "w")) != NULL) {
|
|
fprintf(fp, "; GoldED.inc -- Automatic created by mbsetup %s -- Do not edit!\n\n", VERSION);
|
|
fprintf(fp, "; Basic information\n;\n");
|
|
if (strlen(CFG.sysop_name) && CFG.akavalid[0] && CFG.aka[0].zone) {
|
|
fprintf(fp, "USERNAME %s\n\n", CFG.sysop_name);
|
|
fprintf(fp, "ADDRESS %s\n", aka2str(CFG.aka[0]));
|
|
for (i = 1; i < 40; i++)
|
|
if (CFG.akavalid[i])
|
|
fprintf(fp, "AKA %s\n", aka2str(CFG.aka[i]));
|
|
fprintf(fp, "\n");
|
|
|
|
gold_akamatch(fp);
|
|
fprintf(fp, "; JAM MessageBase Setup\n;\n");
|
|
fprintf(fp, "JAMPATH %s/tmp/\n", getenv("MBSE_ROOT"));
|
|
fprintf(fp, "JAMHARDDELETE NO\n\n");
|
|
|
|
fprintf(fp, "; Semaphore files\n;\n");
|
|
fprintf(fp, "SEMAPHORE NETSCAN %s/sema/mailout\n", getenv("MBSE_ROOT"));
|
|
fprintf(fp, "SEMAPHORE ECHOSCAN %s/sema/mailout\n\n", getenv("MBSE_ROOT"));
|
|
|
|
gold_areas(fp);
|
|
}
|
|
Syslog('+', "Created new %s", temp);
|
|
} else {
|
|
WriteError("$Could not create %s", temp);
|
|
}
|
|
|
|
free(temp);
|
|
}
|
|
|
|
umask(oldmask);
|
|
if (onsig && (onsig <= NSIG))
|
|
WriteError("MBSETUP finished on signal %s", SigName[onsig]);
|
|
else
|
|
Syslog(' ', "MBSETUP finished");
|
|
ExitClient(onsig);
|
|
}
|
|
|
|
|
|
|
|
void soft_info(void);
|
|
void soft_info(void)
|
|
{
|
|
char *temp;
|
|
|
|
temp = calloc(81, sizeof(char));
|
|
clr_index();
|
|
set_color(YELLOW, BLACK);
|
|
sprintf(temp, "MBSE BBS (%s-%s)", OsName(), OsCPU());
|
|
center_addstr( 6, temp);
|
|
set_color(WHITE, BLACK);
|
|
center_addstr( 8, (char *)COPYRIGHT);
|
|
set_color(YELLOW, BLACK);
|
|
center_addstr(10, (char *)"Made in the Netherlands");
|
|
set_color(WHITE, BLACK);
|
|
#ifdef __GLIBC__
|
|
sprintf(temp, "Compiled on glibc v%d.%d", __GLIBC__, __GLIBC_MINOR__);
|
|
#else
|
|
#ifdef __GNU_LIBRARY__
|
|
sprintf(temp, "Compiled on libc v%d", __GNU_LIBRARY__);
|
|
#else
|
|
sprintf(temp, "Compiled on unknown library");
|
|
#endif
|
|
#endif
|
|
center_addstr(12, temp);
|
|
set_color(LIGHTCYAN, BLACK);
|
|
center_addstr(14, (char *)"http://mbse.sourceforge.net or 2:280/2802");
|
|
set_color(LIGHTGREEN, BLACK);
|
|
center_addstr(LINES -7, (char *)"This is free software; released under the terms of the GNU General");
|
|
center_addstr(LINES -6, (char *)"Public License as published by the Free Software Foundation.");
|
|
set_color(CYAN, BLACK);
|
|
free(temp);
|
|
center_addstr(LINES -4, (char *)"Press any key");
|
|
readkey(LINES - 4, COLS / 2 + 8, LIGHTGRAY, BLACK);
|
|
}
|
|
|
|
|
|
|
|
void site_docs(void);
|
|
void site_docs(void)
|
|
{
|
|
FILE *fp, *toc;
|
|
char temp[PATH_MAX], temp1[PATH_MAX];
|
|
int page = 0, line = 0;
|
|
|
|
if (config_read() == -1)
|
|
return;
|
|
|
|
sprintf(temp, "%s/doc/site.doc", getenv("MBSE_ROOT"));
|
|
if ((fp = fopen(temp, "w")) == NULL)
|
|
return;
|
|
|
|
sprintf(temp1, "%s/tmp/toc.tmp", getenv("MBSE_ROOT"));
|
|
if ((toc = fopen(temp1, "w+")) == NULL) {
|
|
fclose(fp);
|
|
return;
|
|
}
|
|
|
|
clr_index();
|
|
working(1, 0, 0);
|
|
IsDoing("Making Sitedocs");
|
|
Syslog('+', "Start creating sitedocs");
|
|
set_color(WHITE, BLACK);
|
|
mvprintw( 5, 6, "17. CREATING SITEDOCS");
|
|
set_color(CYAN, BLACK);
|
|
mvprintw( 7,11, (char *)"Create document in file %s", temp);
|
|
fflush(stdout);
|
|
|
|
page = global_doc(fp, toc, page);
|
|
page = fido_doc(fp, toc, page);
|
|
page = archive_doc(fp, toc, page);
|
|
page = virus_doc(fp, toc, page);
|
|
page = modem_doc(fp, toc, page);
|
|
page = tty_doc(fp, toc, page);
|
|
page = node_doc(fp, toc, page);
|
|
page = bbs_doc(fp, toc, page);
|
|
page = mail_doc(fp, toc, page);
|
|
page = tic_doc(fp, toc, page);
|
|
page = newf_group_doc(fp, toc, page);
|
|
page = new_doc(fp, toc, page);
|
|
page = ff_doc(fp, toc, page);
|
|
page = service_doc(fp, toc, page);
|
|
page = domain_doc(fp, toc, page);
|
|
page = task_doc(fp, toc, page);
|
|
page = route_doc(fp, toc, page);
|
|
|
|
/*
|
|
* Append table of contents
|
|
*/
|
|
page = newpage(fp, page);
|
|
addtoc(fp, toc, 17, 0, page, (char *)"Table of contents");
|
|
fprintf(fp, "\n\n");
|
|
line = 4;
|
|
rewind(toc);
|
|
|
|
while (fgets(temp, 256, toc) != NULL) {
|
|
fprintf(fp, "%s", temp);
|
|
line++;
|
|
if (line == 56) {
|
|
page = newpage(fp, page);
|
|
line = 0;
|
|
}
|
|
}
|
|
|
|
fprintf(fp, "\f");
|
|
fclose(fp);
|
|
fclose(toc);
|
|
unlink(temp1);
|
|
|
|
Syslog('+', "Sitedocs created");
|
|
|
|
page = line = 0;
|
|
sprintf(temp, "%s/doc/xref.doc", getenv("MBSE_ROOT"));
|
|
if ((fp = fopen(temp, "w")) == NULL)
|
|
return;
|
|
|
|
sprintf(temp1, "%s/tmp/toc.tmp", getenv("MBSE_ROOT"));
|
|
if ((toc = fopen(temp1, "w+")) == NULL) {
|
|
fclose(fp);
|
|
return;
|
|
}
|
|
|
|
Syslog('+', "Start creating crossreference");
|
|
mvprintw( 8,11, (char *)"Create document in file %s", temp);
|
|
fflush(stdout);
|
|
|
|
page = limit_users_doc(fp, toc, page);
|
|
|
|
/*
|
|
* Append table of contents
|
|
*/
|
|
page = newpage(fp, page);
|
|
addtoc(fp, toc, 99, 0, page, (char *)"Table of contents");
|
|
fprintf(fp, "\n\n");
|
|
line = 4;
|
|
rewind(toc);
|
|
|
|
while (fgets(temp, 256, toc) != NULL) {
|
|
fprintf(fp, "%s", temp);
|
|
line++;
|
|
if (line == 56) {
|
|
page = newpage(fp, page);
|
|
line = 0;
|
|
}
|
|
}
|
|
|
|
fprintf(fp, "\f");
|
|
fclose(fp);
|
|
fclose(toc);
|
|
unlink(temp1);
|
|
|
|
Syslog('+', "Crossreference created");
|
|
|
|
page = line = 0;
|
|
sprintf(temp, "%s/doc/stat.doc", getenv("MBSE_ROOT"));
|
|
if ((fp = fopen(temp, "w")) == NULL)
|
|
return;
|
|
|
|
sprintf(temp1, "%s/tmp/toc.tmp", getenv("MBSE_ROOT"));
|
|
if ((toc = fopen(temp1, "w+")) == NULL) {
|
|
fclose(fp);
|
|
return;
|
|
}
|
|
|
|
Syslog('+', "Start creating statistics");
|
|
mvprintw( 9,11, (char *)"Create document in file %s", temp);
|
|
fflush(stdout);
|
|
|
|
/*
|
|
* Append table of contents
|
|
*/
|
|
page = newpage(fp, page);
|
|
addtoc(fp, toc, 99, 0, page, (char *)"Table of contents");
|
|
fprintf(fp, "\n\n");
|
|
line = 4;
|
|
rewind(toc);
|
|
|
|
while (fgets(temp, 256, toc) != NULL) {
|
|
fprintf(fp, "%s", temp);
|
|
line++;
|
|
if (line == 56) {
|
|
page = newpage(fp, page);
|
|
line = 0;
|
|
}
|
|
}
|
|
|
|
fprintf(fp, "\f");
|
|
fclose(fp);
|
|
fclose(toc);
|
|
unlink(temp1);
|
|
|
|
Syslog('+', "Statistics created");
|
|
|
|
working(0, 0, 0);
|
|
|
|
center_addstr(LINES -4, (char *)"Press any key");
|
|
readkey(LINES -4, COLS / 2 + 8, LIGHTGRAY, BLACK);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
void initdatabases(void)
|
|
{
|
|
if (!init) {
|
|
clr_index();
|
|
working(1, 0, 0);
|
|
set_color(WHITE, BLACK);
|
|
mvprintw( 5, 6, " INIT DATABASES");
|
|
IsDoing("Init Databases");
|
|
}
|
|
|
|
config_read();
|
|
|
|
InitArchive();
|
|
InitDomain();
|
|
InitFilearea();
|
|
InitFilefind();
|
|
InitFGroup();
|
|
InitFidonetdb();
|
|
InitHatch();
|
|
InitLanguage();
|
|
InitLimits();
|
|
InitMagics();
|
|
InitMsgarea();
|
|
InitMGroup();
|
|
InitModem();
|
|
InitNewfiles();
|
|
InitNGroup();
|
|
InitNodes();
|
|
InitOneline();
|
|
InitBBSlist();
|
|
InitSafe();
|
|
InitProtocol();
|
|
InitService();
|
|
InitTicarea();
|
|
InitTtyinfo();
|
|
InitUsers();
|
|
InitVirus();
|
|
InitRoute();
|
|
|
|
if (!init) {
|
|
working(0, 0, 0);
|
|
clr_index();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int loop = 1;
|
|
struct passwd *pw;
|
|
|
|
/*
|
|
* Find out who is on the keyboard or automated the keyboard.
|
|
*/
|
|
pw = getpwuid(geteuid());
|
|
if (strcmp(pw->pw_name, (char *)"mbse")) {
|
|
printf("ERROR: only user \"mbse\" may use this program\n");
|
|
exit(MBERR_INIT_ERROR);
|
|
}
|
|
|
|
#ifdef MEMWATCH
|
|
mwInit();
|
|
#endif
|
|
|
|
/*
|
|
* Read the global configuration data, registrate connection
|
|
*/
|
|
config_check(getenv("MBSE_ROOT"));
|
|
config_read();
|
|
InitClient(pw->pw_name, (char *)"mbsetup", CFG.location, CFG.logfile, 0x1f, CFG.error_log, CFG.mgrlog);
|
|
|
|
/*
|
|
* Setup several signals so when the program terminate's it
|
|
* will properly close the curses screens.
|
|
*/
|
|
signal(SIGINT, (void (*))die);
|
|
signal(SIGBUS, (void (*))die);
|
|
signal(SIGSEGV,(void (*))die);
|
|
signal(SIGTERM,(void (*))die);
|
|
signal(SIGKILL,(void (*))die);
|
|
|
|
oldmask = umask(002);
|
|
|
|
if ((argc == 2) && (strncmp(tl(argv[1]), "i", 1) == 0))
|
|
init = TRUE;
|
|
else
|
|
screen_start((char *)"MBsetup");
|
|
|
|
do_quiet = TRUE;
|
|
Syslog(' ', " ");
|
|
Syslog(' ', "MBSETUP v%s started by %s", VERSION, pw->pw_name);
|
|
if (init)
|
|
Syslog('+', "Cmd: mbsetup init");
|
|
bbs_free = FALSE;
|
|
initdatabases();
|
|
|
|
if (!init) {
|
|
do {
|
|
IsDoing("Browsing Menu");
|
|
clr_index();
|
|
set_color(WHITE, BLACK);
|
|
mvprintw( 5, 6, "0. MAIN SETUP");
|
|
set_color(CYAN, BLACK);
|
|
mvprintw( 7, 6, "1. Edit Global configuration");
|
|
mvprintw( 8, 6, "2. Edit Fido Networks");
|
|
mvprintw( 9, 6, "3. Edit Archiver Programs");
|
|
mvprintw(10, 6, "4. Edit Virus Scanners");
|
|
mvprintw(11, 6, "5. Edit Modem types");
|
|
mvprintw(12, 6, "6. Edit TTY lines info");
|
|
mvprintw(13, 6, "7. Edit Fidonet Nodes");
|
|
mvprintw(14, 6, "8. Edit BBS Setup");
|
|
mvprintw(15, 6, "9. Edit Mail Setup");
|
|
mvprintw(16, 6, "10. Edit File Echo's setup");
|
|
mvprintw(17, 6, "11. Edit Newfiles Groups");
|
|
mvprintw( 7,46, "12. Edit Newfiles Reports");
|
|
mvprintw( 8,46, "13. Edit FileFind Setup");
|
|
mvprintw( 9,46, "14. Edit Files Database");
|
|
mvprintw(10,46, "15. Edit BBS Users");
|
|
mvprintw(11,46, "16. Edit Services");
|
|
mvprintw(12,46, "17. Edit Domains");
|
|
mvprintw(13,46, "18. Edit Task Manager");
|
|
mvprintw(14,46, "19. Edit Routing Table");
|
|
mvprintw(15,46, "20. Show software information");
|
|
mvprintw(16,46, "21. Create site documents");
|
|
|
|
switch(select_menu(21)) {
|
|
case 0:
|
|
loop = 0;
|
|
break;
|
|
case 1:
|
|
global_menu();
|
|
break;
|
|
case 2:
|
|
EditFidonet();
|
|
break;
|
|
case 3:
|
|
EditArchive();
|
|
break;
|
|
case 4:
|
|
EditVirus();
|
|
break;
|
|
case 5:
|
|
EditModem();
|
|
break;
|
|
case 6:
|
|
EditTtyinfo();
|
|
break;
|
|
case 7:
|
|
EditNodes();
|
|
break;
|
|
case 8:
|
|
bbs_menu();
|
|
break;
|
|
case 9:
|
|
mail_menu();
|
|
break;
|
|
case 10:
|
|
tic_menu();
|
|
break;
|
|
case 11:
|
|
EditNGroup();
|
|
break;
|
|
case 12:
|
|
EditNewfiles();
|
|
break;
|
|
case 13:
|
|
EditFilefind();
|
|
break;
|
|
case 14:
|
|
EditFDB();
|
|
break;
|
|
case 15:
|
|
EditUsers();
|
|
break;
|
|
case 16:
|
|
EditService();
|
|
break;
|
|
case 17:
|
|
EditDomain();
|
|
break;
|
|
case 18:
|
|
task_menu();
|
|
break;
|
|
case 19:
|
|
EditRoute();
|
|
break;
|
|
case 20:
|
|
soft_info();
|
|
break;
|
|
case 21:
|
|
site_docs();
|
|
break;
|
|
}
|
|
} while (loop == 1);
|
|
}
|
|
|
|
die(MBERR_OK);
|
|
return 0;
|
|
}
|
|
|