Added simultaneous bbs login check

This commit is contained in:
Michiel Broek 2003-07-29 20:42:38 +00:00
parent ca7a083e7d
commit c672771758
16 changed files with 180 additions and 143 deletions

View File

@ -7,12 +7,28 @@ $Id$
v0.37.5 12-Jul-2003 v0.37.5 12-Jul-2003
upgrade:
Check settings menu 1.5.21 for maximum allowed logins.
common.a: common.a:
Node locking tests for non-stale lockfiles older then 6 hours. Node locking tests for non-stale lockfiles older then 6 hours.
mbcico: mbcico:
Implemented CRAM rev.4 change in binkp driver. Implemented CRAM rev.4 change in binkp driver.
mbsebbs:
Added check for maximum simultaneous logins.
Removed debug logging for userrecord i/o
mbsetup:
Added menu entry 1.5.21 for setting maximum allowed logins.
mbtask:
On new installations sets max logins to 1.
lang:
Added language prompts 18 and 19.
v0.37.4 10-May-2003 - 12-Jul-2003 v0.37.4 10-May-2003 - 12-Jul-2003

44
TODO
View File

@ -12,6 +12,7 @@ $Id$
Classes: U = Urgent. Classes: U = Urgent.
N = Normal, second priority. N = Normal, second priority.
L = Cosmetic or nice to have. L = Cosmetic or nice to have.
X = Will not be done unless it's really needed.
install: install:
N: On some (unsupported) distro's with xinetd the installation script N: On some (unsupported) distro's with xinetd the installation script
@ -22,9 +23,9 @@ libdiesel.a:
processed, instead the previous macro value will be returned. processed, instead the previous macro value will be returned.
mbsebbs: mbsebbs:
L: Better word wrapping or paragraph justification in editor. X: Better word wrapping or paragraph justification in editor.
L: E-mail downloads with e-mail verification. X: E-mail downloads with e-mail verification.
N: OLR, implement file requests. N: OLR, implement file requests.
@ -32,17 +33,17 @@ mbsebbs:
L: ChangeHandle, allow own unix name as handle. L: ChangeHandle, allow own unix name as handle.
L: OLR: tagged areas must have 3 states, off, on or personal only. X: OLR: tagged areas must have 3 states, off, on or personal only.
L: OLR: implement limit date function. X: OLR: implement limit date function.
L: OLR: include private email area in download packets. X: OLR: include private email area in download packets.
L: OLR: implement some global settings from the offline configuration. X: OLR: implement some global settings from the offline configuration.
L: OLR: implement keywords and filters. X: OLR: implement keywords and filters.
L: OLR: check qwke extensions. X: OLR: check qwke extensions.
N: OLR: qwk, check netmail entered from reader, fido address missing? N: OLR: qwk, check netmail entered from reader, fido address missing?
@ -59,10 +60,10 @@ mbfido:
N: Count posted messages during mailscan. N: Count posted messages during mailscan.
U: Code cleanup and make a structure in this program. Remove duplicate N: Code cleanup and make a structure in this program. Remove duplicate
or similar functions. or similar functions.
N: Remove memory leak during toss. (It's ok for less 5000 messages for L: Remove memory leak during toss. (It's ok for less 5000 messages for
each run). each run).
N: Process GoldED filerequest netmails with the filereq flag set, we N: Process GoldED filerequest netmails with the filereq flag set, we
@ -84,7 +85,7 @@ mbfido:
L: Maybe store echomail for unknown areas in badmail area. L: Maybe store echomail for unknown areas in badmail area.
N: Make ik possible to only virus scan the complete archives. L: Make ik possible to only virus scan the complete archives.
N: Force processing of arealists so that all tags are forced to N: Force processing of arealists so that all tags are forced to
uppercase. Seems to give problems in some nets. uppercase. Seems to give problems in some nets.
@ -99,23 +100,24 @@ mbfido:
mbcico: mbcico:
N: Doesn't poll internet nodes with non-standard ports when the N: Doesn't poll internet nodes with non-standard ports when the
FQDN:port is in the override field. FQDN:port is in the override field. -- Check this !
N: See if it is possible with binkp protocol to resume aborted N: See if it is possible with binkp protocol to resume aborted
transfers. transfers. -- ND option ??
N: Implement binkp resync when getting files. Transmit works. N: Implement binkp resync when getting files. Transmit works.
mbfile: mbfile:
N: Add a check to see if the magic filenames are (still) valid. L: Add a check to see if the magic filenames are (still) valid.
N: Update <filespec> <area> <-touch> L: Update <filespec> <area> <-touch>
N: Rearc <area> L: Rearc <area>
N: Possibility to skip file areas from checking and reindexing. L: Possibility to skip file areas from checking and reindexing.
N: Override timeout during virus scan when files are imported. N: Override timeout during virus scan when files are imported.
-- Check, already done?
N: Add area sorting N: Add area sorting
@ -128,21 +130,23 @@ mbaff:
L: Add setup parameters for minimum length of keywords. L: Add setup parameters for minimum length of keywords.
mbindex: mbindex:
N: Add usernames index. X: Add usernames index.
mbnewusr: mbnewusr:
N: On NetBSD, supress error message from mbpasswd. N: On NetBSD, supress error message from mbpasswd.
-- Currently no access to my old Sun Sparcstation.
mbsetup: mbsetup:
N: Add a check for double areatag names. N: Add a check for double areatag names.
U: PickAka function lets mbsetup crash if domain is 12 characters U: PickAka function lets mbsetup crash if domain is 12 characters
-- Check, still so?
N: Use some sort of sorting for the system aka's and make sure the N: Use some sort of sorting for the system aka's and make sure the
main aka with zone's is listed first. Having zone's mixed gives main aka with zone's is listed first. Having zone's mixed gives
too high outbound stats and the outbound is scanned multiple times. too high outbound stats and the outbound is scanned multiple times.
N: Put ZMH fields in the network setup for each zone. N: Put ZMH fields in the network setup for each zone. Currently Z1-6.
N: Add switch for file area to skip checking and indexing. N: Add switch for file area to skip checking and indexing.
@ -152,7 +156,7 @@ mbsetup:
N: Add global setup in menus 9.1 and 10.1 at least to change uplink N: Add global setup in menus 9.1 and 10.1 at least to change uplink
data. data.
L: Generate crossreference document: X: Generate crossreference document:
File Areas <=> BBS groups File Areas <=> BBS groups
File Areas <=> Newfiles groups File Areas <=> Newfiles groups
Filefind flags <=> TIC Areas Filefind flags <=> TIC Areas

View File

@ -12,7 +12,7 @@
</HEAD> </HEAD>
<BODY> <BODY>
<BLOCKQUOTE> <BLOCKQUOTE>
<div align="right"><h5>Last update 12-Jul-2003</h5></div> <div align="right"><h5>Last update 29-Jul-2003</h5></div>
<div align="center"><H1>MBSE BBS Setup - Global Setup</H1></div> <div align="center"><H1>MBSE BBS Setup - Global Setup</H1></div>
<P> <P>
@ -118,10 +118,11 @@ files.
<strong>CrashMail level </strong>Minimum level to allow sending netmail crash <strong>CrashMail level </strong>Minimum level to allow sending netmail crash
<strong>FileAttach level </strong>Minimum level to allow attach files to netmail <strong>FileAttach level </strong>Minimum level to allow attach files to netmail
<strong>Min diskspace MB </strong>At which low diskspace level utilities should stop working. <strong>Min diskspace MB </strong>At which low diskspace level utilities should stop working.
<strong>Simult. logins </strong>Maximum simultaneous logins allowed, 0 is unlimited, 1 is adviced.
</pre> </pre>
The minimum diskspace setting is to prevent that files get corrupted if your filesystem The minimum diskspace setting is to prevent that files get corrupted if your filesystem
is full. All drives are checked except CD-roms and floppies and the /boot directory if that is full. All drives are checked except CD-roms and floppies and the /boot directory if that
one is on a separate filesystem. Ext2, reiserfs, msdos and vfat partitions one is on a separate filesystem. Ext2, ext3, reiserfs, msdos and vfat partitions
are checked. The lowest free diskspace found counts. Default is 10 MB. are checked. The lowest free diskspace found counts. Default is 10 MB.
<p> <p>

View File

@ -16,8 +16,8 @@
15 change.c |Offline Reader: Extended Info turned ON 15 change.c |Offline Reader: Extended Info turned ON
16 change.c |Offline Reader: Extended Info turned OFF 16 change.c |Offline Reader: Extended Info turned OFF
17 file.c |This is not a plain textfile. 17 file.c |This is not a plain textfile.
18 .c | 18 user.c |You may only login
19 .c | 19 user.c |times at the same time
20 .c | 20 .c |
21 .c | 21 .c |
22 .c | 22 .c |

View File

@ -16,8 +16,8 @@ HR|Exporteer naar (H)ome of (R)egels directory:
|Offline Reader: Uitgebreide Informatie is nu AAN |Offline Reader: Uitgebreide Informatie is nu AAN
|Offline Reader: Uitgebreide Informatie is nu UIT |Offline Reader: Uitgebreide Informatie is nu UIT
|Dit is geen normaal tekst bestand |Dit is geen normaal tekst bestand
| |U mag maar
| |keer tegelijk inloggen
| |
| |
| |

View File

@ -16,8 +16,8 @@ HR|Export to (H)ome or (R)ules directory:
|Offline Reader: Extended Info turned ON |Offline Reader: Extended Info turned ON
|Offline Reader: Extended Info turned OFF |Offline Reader: Extended Info turned OFF
|This is not a plain textfile. |This is not a plain textfile.
| |You may only login
| |times at the same time
| |
| |
| |

View File

@ -16,8 +16,8 @@ HR|Exportar
|Lector Offline: Informaci¢n extendida ACTIVADA |Lector Offline: Informaci¢n extendida ACTIVADA
|Lector Offline: Informaci¢n extendida DESACTIVADA |Lector Offline: Informaci¢n extendida DESACTIVADA
|This is not a plain textfile. |This is not a plain textfile.
| |You may only login
| |times at the same time
| |
| |
| |

View File

@ -16,8 +16,8 @@ HR|Export in (H)ome oder (R)ules Direktorie:
|Offline Reader: Extended Info turned ON |Offline Reader: Extended Info turned ON
|Offline Reader: Extended Info turned OFF |Offline Reader: Extended Info turned OFF
|This is not a plain textfile. |This is not a plain textfile.
| |You may only login
| |times at the same time
| |
| |
| |

View File

@ -16,8 +16,8 @@ HR|Export to (H)ome or (R)ules directory:
|Offline Reader: Extended Info turned ON |Offline Reader: Extended Info turned ON
|Offline Reader: Extended Info turned OFF |Offline Reader: Extended Info turned OFF
|This is not a plain textfile. |This is not a plain textfile.
| |You may only login
| |times at the same time
| |
| |
| |

View File

@ -16,8 +16,8 @@ PR|Exportar al directorio (P)ersonal o de (R)eglas:
|Lector Offline: Informaci¢n extendida ACTIVADA |Lector Offline: Informaci¢n extendida ACTIVADA
|Lector Offline: Informaci¢n extendida DESACTIVADA |Lector Offline: Informaci¢n extendida DESACTIVADA
|This is not a plain textfile. |This is not a plain textfile.
| |You may only login
| |times at the same time
| |
| |
| |

View File

@ -551,7 +551,7 @@ struct sysconfig {
unsigned leavecase : 1; /* Leave outbound case */ unsigned leavecase : 1; /* Leave outbound case */
/* BBS Globals */ /* BBS Globals */
int xmax_login; int max_logins; /* Max simult. logins */
unsigned NewAreas : 1; /* Notify if new msg areas */ unsigned NewAreas : 1; /* Notify if new msg areas */
unsigned xelite_mode : 1; unsigned xelite_mode : 1;
unsigned slow_util : 1; /* Run utils slowly */ unsigned slow_util : 1; /* Run utils slowly */

View File

@ -80,10 +80,7 @@ void Good_Bye(int onsig)
usrconfig = exitinfo; usrconfig = exitinfo;
fclose(pExitinfo); fclose(pExitinfo);
usrconfig.iLastFileArea = iAreaNumber; usrconfig.iLastFileArea = iAreaNumber;
if (!iAreaNumber)
WriteError("Setting filearea to zero");
/* If time expired, do not say say successful logoff */ /* If time expired, do not say say successful logoff */
if (!iExpired) if (!iExpired)
@ -92,8 +89,6 @@ void Good_Bye(int onsig)
usrconfig.iLastMsgArea = iMsgAreaNumber; usrconfig.iLastMsgArea = iMsgAreaNumber;
offset = usrconfighdr.hdrsize + (grecno * usrconfighdr.recsize); offset = usrconfighdr.hdrsize + (grecno * usrconfighdr.recsize);
Syslog('b', "hdrsize=%ld recsize=%ld grecno=%ld", usrconfighdr.hdrsize, usrconfighdr.recsize, grecno);
Syslog('b', "Good_Bye: write users.data at offset %ld", offset);
if (fseek(pUsrConfig, offset, SEEK_SET) != 0) { if (fseek(pUsrConfig, offset, SEEK_SET) != 0) {
WriteError("Can't move pointer in file %s", temp); WriteError("Can't move pointer in file %s", temp);
ExitClient(MBERR_GENERAL); ExitClient(MBERR_GENERAL);
@ -121,10 +116,9 @@ void Good_Bye(int onsig)
/* /*
* Flush all data to the user, wait 5 seconds to * Flush all data to the user, wait 5 seconds to
* be sure the user received all data, this program * be sure the user received all data.
* and parent are also finished.
*/ */
colour(7, 0); colour(LIGHTGRAY, BLACK);
fflush(stdout); fflush(stdout);
fflush(stdin); fflush(stdin);
sleep(5); sleep(5);
@ -151,7 +145,7 @@ void Quick_Bye(int onsig)
unlink(temp); unlink(temp);
free(temp); free(temp);
colour(7, 0); colour(LIGHTGRAY, BLACK);
fflush(stdout); fflush(stdout);
fflush(stdin); fflush(stdin);
sleep(3); sleep(3);

View File

@ -69,7 +69,6 @@ int InitExitinfo()
fread(&usrconfighdr, sizeof(usrconfighdr), 1, pUsrConfig); fread(&usrconfighdr, sizeof(usrconfighdr), 1, pUsrConfig);
offset = usrconfighdr.hdrsize + (grecno * usrconfighdr.recsize); offset = usrconfighdr.hdrsize + (grecno * usrconfighdr.recsize);
Syslog('b', "InitExitinfo: read users.data offset %ld", offset);
if (fseek(pUsrConfig, offset, 0) != 0) { if (fseek(pUsrConfig, offset, 0) != 0) {
WriteError("$Can't move pointer in %s", temp); WriteError("$Can't move pointer in %s", temp);
free(temp); free(temp);

View File

@ -175,9 +175,9 @@ void SwapDate(char *Date3, char *Date4)
void user() void user()
{ {
FILE *pUsrConfig, *pLimits; FILE *pUsrConfig, *pLimits;
int i, x, FoundName = FALSE, iFoundLimit = FALSE, IsNew = FALSE; int i, x, FoundName = FALSE, iFoundLimit = FALSE, IsNew = FALSE, logins = 0, Start;
long l1, l2; long l1, l2;
char *token, temp[PATH_MAX], temp1[84], UserName[37]; char *token, temp[PATH_MAX], temp1[84], UserName[37], buf[128], *fullname;
time_t LastLogin; time_t LastLogin;
struct stat st; struct stat st;
@ -256,7 +256,44 @@ void user()
UserCity(mypid, usrconfig.Name, usrconfig.sLocation); UserCity(mypid, usrconfig.Name, usrconfig.sLocation);
else else
UserCity(mypid, usrconfig.Name, (char *)"N/A"); UserCity(mypid, usrconfig.Name, (char *)"N/A");
TermInit(usrconfig.GraphMode);
/*
* Count simultaneous logins
*/
Start = TRUE;
while (TRUE) {
if (Start)
sprintf(buf, "GMON:1,1;");
else
sprintf(buf, "GMON:1,0;");
Start = FALSE;
if (socket_send(buf) == 0) {
strcpy(buf, socket_receive());
if (strncmp(buf, "100:0;", 6) == 0)
break; /* No more data */
if (strstr(buf, "mbsebbs")) {
/*
* Only mbsebbs is wanted
*/
strtok(buf, ","); /* response */
strtok(NULL, ","); /* pid */
strtok(NULL, ","); /* tty */
fullname = xstrcpy(strtok(NULL, ",")); /* username */
if (strcmp(fullname, usrconfig.Name) == 0) {
logins++;
}
free(fullname);
}
}
}
if (CFG.max_logins && (logins > CFG.max_logins)) {
Syslog('+', "User logins %d, allowed %d, disconnecting", logins, CFG.max_logins);
colour(LIGHTRED, BLACK);
printf("%s %d %s\n", (char *) Language(18), CFG.max_logins, (char *) Language(19));
Quick_Bye(MBERR_INIT_ERROR);
}
/* /*
* Set last file and message area so these numbers are saved when * Set last file and message area so these numbers are saved when
* the user hangs up or is logged off before het gets to the main * the user hangs up or is logged off before het gets to the main
@ -284,8 +321,6 @@ void user()
if (usrconfig.iTotalCalls == 0) if (usrconfig.iTotalCalls == 0)
IsNew = TRUE; IsNew = TRUE;
TermInit(usrconfig.GraphMode);
/* /*
* Pause after logo screen. * Pause after logo screen.
*/ */

View File

@ -333,88 +333,91 @@ void e_global(void)
void b_screen(void) void b_screen(void)
{ {
clr_index(); clr_index();
set_color(WHITE, BLACK); set_color(WHITE, BLACK);
mvprintw( 5, 2, "1.5 EDIT GLOBAL SETTINGS"); mvprintw( 5, 2, "1.5 EDIT GLOBAL SETTINGS");
set_color(CYAN, BLACK); set_color(CYAN, BLACK);
mvprintw( 7, 2, "1. Exclude Sysop"); mvprintw( 7, 2, "1. Exclude Sysop");
mvprintw( 8, 2, "2. Show Connect"); mvprintw( 8, 2, "2. Show Connect");
mvprintw( 9, 2, "3. Ask Protocols"); mvprintw( 9, 2, "3. Ask Protocols");
mvprintw(10, 2, "4. Sysop Level"); mvprintw(10, 2, "4. Sysop Level");
mvprintw(11, 2, "5. Password Length"); mvprintw(11, 2, "5. Password Length");
mvprintw(12, 2, "6. Passwd Character"); mvprintw(12, 2, "6. Passwd Character");
mvprintw(13, 2, "7. Idle timeout"); mvprintw(13, 2, "7. Idle timeout");
mvprintw(14, 2, "8. Login Enters"); mvprintw(14, 2, "8. Login Enters");
mvprintw(15, 2, "9. Homedir Quota"); mvprintw(15, 2, "9. Homedir Quota");
mvprintw(16, 2, "10. Location length"); mvprintw(16, 2, "10. Location length");
mvprintw(17, 2, "11. Show new msgarea");
mvprintw( 7,37, "12. OLR Max. msgs.");
mvprintw( 8,37, "13. OLR Newfile days");
mvprintw( 9,37, "14. OLR Max Filereq");
mvprintw(10,37, "15. BBS Log Level");
mvprintw(11,37, "16. Utils loglevel");
mvprintw(12,37, "17. Utils slowly");
mvprintw(13,37, "18. CrashMail level");
mvprintw(14,37, "19. FileAttach level");
mvprintw(15,37, "20. Min diskspace MB");
mvprintw(16,37, "21. Simult. logins");
mvprintw( 7,37, "11. Show new msgarea"); set_color(WHITE, BLACK);
mvprintw( 8,37, "12. OLR Max. msgs."); show_bool( 7,24, CFG.exclude_sysop);
mvprintw( 9,37, "13. OLR Newfile days"); show_bool( 8,24, CFG.iConnectString);
mvprintw(10,37, "14. OLR Max Filereq"); show_bool( 9,24, CFG.iAskFileProtocols);
mvprintw(11,37, "15. BBS Log Level"); show_int( 10,24, CFG.sysop_access);
mvprintw(12,37, "16. Utils loglevel"); show_int( 11,24, CFG.password_length);
mvprintw(13,37, "17. Utils slowly"); show_int( 12,24, CFG.iPasswd_Char);
mvprintw(14,37, "18. CrashMail level"); show_int( 13,24, CFG.idleout);
mvprintw(15,37, "19. FileAttach level"); show_int( 14,24, CFG.iCRLoginCount);
mvprintw(16,37, "20. Min diskspace MB"); show_int( 15,24, CFG.iQuota);
show_int( 16,24, CFG.CityLen);
show_bool(17,24, CFG.NewAreas);
set_color(WHITE, BLACK); show_int( 7,59, CFG.OLR_MaxMsgs);
show_bool( 7,24, CFG.exclude_sysop); show_int( 8,59, CFG.OLR_NewFileLimit);
show_bool( 8,24, CFG.iConnectString); show_int( 9,59, CFG.OLR_MaxReq);
show_bool( 9,24, CFG.iAskFileProtocols); show_logl(10,59, CFG.bbs_loglevel);
show_int( 10,24, CFG.sysop_access); show_logl(11,59, CFG.util_loglevel);
show_int( 11,24, CFG.password_length); show_bool(12,59, CFG.slow_util);
show_int( 12,24, CFG.iPasswd_Char); show_int( 13,59, CFG.iCrashLevel);
show_int( 13,24, CFG.idleout); show_int( 14,59, CFG.iAttachLevel);
show_int( 14,24, CFG.iCRLoginCount); show_int( 15,59, CFG.freespace);
show_int( 15,24, CFG.iQuota); show_int( 16,59, CFG.max_logins);
show_int( 16,24, CFG.CityLen);
show_bool( 7,59, CFG.NewAreas);
show_int( 8,59, CFG.OLR_MaxMsgs);
show_int( 9,59, CFG.OLR_NewFileLimit);
show_int( 10,59, CFG.OLR_MaxReq);
show_logl(11,59, CFG.bbs_loglevel);
show_logl(12,59, CFG.util_loglevel);
show_bool(13,59, CFG.slow_util);
show_int( 14,59, CFG.iCrashLevel);
show_int( 15,59, CFG.iAttachLevel);
show_int( 16,59, CFG.freespace);
} }
void e_bbsglob(void) void e_bbsglob(void)
{ {
b_screen(); b_screen();
for (;;) { for (;;) {
switch(select_menu(20)) { switch(select_menu(21)) {
case 0: return; case 0: return;
case 1: E_BOOL( 7,24, CFG.exclude_sysop, "^Exclude^ sysop from lists.") case 1: E_BOOL( 7,24, CFG.exclude_sysop, "^Exclude^ sysop from lists.")
case 2: E_BOOL( 8,24, CFG.iConnectString, "Show ^connect string^ at logon") case 2: E_BOOL( 8,24, CFG.iConnectString, "Show ^connect string^ at logon")
case 3: E_BOOL( 9,24, CFG.iAskFileProtocols, "Ask ^file protocol^ before every up- download") case 3: E_BOOL( 9,24, CFG.iAskFileProtocols, "Ask ^file protocol^ before every up- download")
case 4: E_INT( 10,24, CFG.sysop_access, "Sysop ^access level^") case 4: E_INT( 10,24, CFG.sysop_access, "Sysop ^access level^")
case 5: E_INT( 11,24, CFG.password_length, "Mimimum ^password^ length.") case 5: E_INT( 11,24, CFG.password_length, "Mimimum ^password^ length.")
case 6: E_INT( 12,24, CFG.iPasswd_Char, "Ascii number of ^password^ character") case 6: E_INT( 12,24, CFG.iPasswd_Char, "Ascii number of ^password^ character")
case 7: E_INT( 13,24, CFG.idleout, "^Idle timeout^ in minutes") case 7: E_INT( 13,24, CFG.idleout, "^Idle timeout^ in minutes")
case 8: E_INT( 14,24, CFG.iCRLoginCount, "Maximum ^Login Return^ count") case 8: E_INT( 14,24, CFG.iCRLoginCount, "Maximum ^Login Return^ count")
case 9: E_INT( 15,24, CFG.iQuota, "Maximum ^Quota^ in MBytes in users homedirectory"); case 9: E_INT( 15,24, CFG.iQuota, "Maximum ^Quota^ in MBytes in users homedirectory");
case 10:E_INT( 16,24, CFG.CityLen, "Minimum ^Location name^ length (3..6)") case 10:E_INT( 16,24, CFG.CityLen, "Minimum ^Location name^ length (3..6)")
case 11:E_BOOL(17,24, CFG.NewAreas, "Show ^new^ or ^deleted^ message areas to the user at login.")
case 11:E_BOOL( 7,59, CFG.NewAreas, "Show ^new^ or ^deleted^ message areas to the user at login.") case 12:E_INT( 7,59, CFG.OLR_MaxMsgs, "^Maximum messages^ to pack for download (0=unlimited)")
case 12:E_INT( 8,59, CFG.OLR_MaxMsgs, "^Maximum messages^ to pack for download (0=unlimited)") case 13:E_INT( 8,59, CFG.OLR_NewFileLimit, "^Limit Newfiles^ listing for maximum days")
case 13:E_INT( 9,59, CFG.OLR_NewFileLimit, "^Limit Newfiles^ listing for maximum days") case 14:E_INT( 9,59, CFG.OLR_MaxReq, "Maximum ^Filerequests^ to honor")
case 14:E_INT( 10,59, CFG.OLR_MaxReq, "Maximum ^Filerequests^ to honor") case 15:E_LOGL(CFG.bbs_loglevel, "1.5.15", b_screen)
case 15:E_LOGL(CFG.bbs_loglevel, "1.5.15", b_screen) case 16:E_LOGL(CFG.util_loglevel, "1.5.16", b_screen)
case 16:E_LOGL(CFG.util_loglevel, "1.5.16", b_screen) case 17:E_BOOL(12,59, CFG.slow_util, "Let background utilities run ^slowly^")
case 17:E_BOOL(13,59, CFG.slow_util, "Let background utilities run ^slowly^") case 18:E_INT( 13,59, CFG.iCrashLevel, "The user level to allow sending ^CrashMail^")
case 18:E_INT( 14,59, CFG.iCrashLevel, "The user level to allow sending ^CrashMail^") case 19:E_INT( 14,59, CFG.iAttachLevel, "The user level to allow sending ^File Attaches^")
case 19:E_INT( 15,59, CFG.iAttachLevel, "The user level to allow sending ^File Attaches^") case 20:E_INT( 15,59, CFG.freespace, "Minimum ^free diskspace^ in MBytes on filesystems")
case 20:E_INT( 16,59, CFG.freespace, "Minimum ^free diskspace^ in MBytes on filesystems") case 21:E_INT( 16,59, CFG.max_logins, "Maximum ^simultaneous logins^ allowed, 0 means unlimited")
} }
}; }
} }
@ -1462,26 +1465,6 @@ void global_menu(void)
crc = 0xffffffff; crc = 0xffffffff;
crc = upd_crc32((char *)&CFG, crc, sizeof(CFG)); crc = upd_crc32((char *)&CFG, crc, sizeof(CFG));
if (CFG.xmax_login) {
/*
* Do automatic upgrade for unused fields, erase them.
*/
Syslog('+', "Main config, clearing unused fields");
memset(&CFG.alists_path, 0, sizeof(CFG.alists_path));
CFG.xmax_login = 0;
CFG.xUseSysDomain = FALSE;
CFG.xChkMail = FALSE;
memset(&CFG.xquotestr, 0, sizeof(CFG.xquotestr));
CFG.xNewBytes = FALSE;
memset(&CFG.extra4, 0, sizeof(CFG.extra4));
memset(&CFG.xmgrname, 0, sizeof(CFG.xmgrname));
memset(&CFG.xtoss_log, 0, sizeof(CFG.xtoss_log));
memset(&CFG.xareamgr, 0, sizeof(CFG.xareamgr));
CFG.xNoJanus = FALSE;
memset(&CFG.extra5, 0, sizeof(CFG.extra5));
sprintf(CFG.alists_path, "%s/var/arealists", getenv("MBSE_ROOT"));
}
if (strlen(CFG.bbs_macros) == 0) { if (strlen(CFG.bbs_macros) == 0) {
sprintf(CFG.bbs_macros, "%s/english/macro", getenv("MBSE_ROOT")); sprintf(CFG.bbs_macros, "%s/english/macro", getenv("MBSE_ROOT"));
Syslog('+', "Main config, upgraded default macro path"); Syslog('+', "Main config, upgraded default macro path");
@ -1774,6 +1757,10 @@ int global_doc(FILE *fp, FILE *toc, int page)
fprintf(fp, " CrashMail level %d\n", CFG.iCrashLevel); fprintf(fp, " CrashMail level %d\n", CFG.iCrashLevel);
fprintf(fp, " FileAttach level %d\n", CFG.iAttachLevel); fprintf(fp, " FileAttach level %d\n", CFG.iAttachLevel);
fprintf(fp, " Free diskspace %d MB.\n", CFG.freespace); fprintf(fp, " Free diskspace %d MB.\n", CFG.freespace);
if (CFG.max_logins)
fprintf(fp, " Simult. logins %d\n", CFG.max_logins);
else
fprintf(fp, " Simult. logins unlimited\n");
page = newpage(fp, page); page = newpage(fp, page);
addtoc(fp, toc, 1, 7, page, (char *)"Users flag descriptions"); addtoc(fp, toc, 1, 7, page, (char *)"Users flag descriptions");

View File

@ -201,6 +201,7 @@ void load_maincfg(void)
CFG.iCrashLevel = 100; CFG.iCrashLevel = 100;
CFG.iAttachLevel = 100; CFG.iAttachLevel = 100;
CFG.new_groups = 25; CFG.new_groups = 25;
CFG.max_logins = 1;
CFG.slow_util = TRUE; CFG.slow_util = TRUE;
CFG.iCrashLevel = 100; CFG.iCrashLevel = 100;