diff --git a/ChangeLog b/ChangeLog index d0d53998..5fce86d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4585,6 +4585,7 @@ v0.33.19 26-Oct-2001 v0.33.20 10-Feb-2002 upgrade: + Remove /opt/mbse/etc/safe.data Compile sources and install binaries. Restart the BBS. Enter mbsetup, this will upgrade the databases. Go into global configuration, exit and save, this will update @@ -4669,6 +4670,10 @@ v0.33.20 10-Feb-2002 Some dangerous menus cannot be entered anymore while some programs are being used, ie. the bbs must be free. When these menus are entered, the bbs will be closed for use. + Added menu 8.6, edit BBS list entries. + Fixed numbering of menu 8.7, edit oneliners. + Added menu 8.8 for safe crackers data. If the safe is cracked + it can now be reset. mbmon: The top statusbar now displays the bbs Free/Down/Busy status. @@ -4836,6 +4841,9 @@ v0.33.20 10-Feb-2002 When a user has no Location filled in, the bbs doesn't crash anymore. The new files scan colored areasnames bar length is corrected. + Fixed the problems with the safecracker door. Removed the + cheat codes and added a delay for the display of the safe + opening. mbnewusr: New users have the default internal fullscreen editor. diff --git a/html/programs/mbsetup.html b/html/programs/mbsetup.html index b665cee2..dd9babf7 100644 --- a/html/programs/mbsetup.html +++ b/html/programs/mbsetup.html @@ -12,7 +12,7 @@
-Last update 25-Oct-2001
+Last update 05-May-2002
mbsetup - The Setup Program
@@ -34,7 +34,14 @@ When mbsetup is started without arguments the databases will be checked and initialized before the main screen is displayed. Both methods are being used to make sure all needed databases excist. For a detailed description of all setup options see -MBSE BBS Setup Guide +MBSE BBS Setup Guide
+mbsetup uses locking to protect the system databases. Some setup menus +can only be entered if the bbs is free, ie. no users logged on, no mailer +sessions, not tossing mail etc. If the bbs is free, then these menus can be +entered and the bbs will be closed. No users can login, tossers do not run etc. +Only mailer calls are still accepted. So be carefull not to stay too long in +these menus, you are blocking normal bbs use. In the top status bar this +situation is displayed.
Environment.
diff --git a/lib/faddr.c b/lib/faddr.c index a32b0907..f824f588 100644 --- a/lib/faddr.c +++ b/lib/faddr.c @@ -62,31 +62,49 @@ char *aka2str(fidoaddr aka) +/* + * Try to create a aka structure of a string. + */ fidoaddr str2aka(char *addr) { char a[256]; static char b[43]; - char *temp; - fidoaddr n; + char *p, *temp = NULL; + static fidoaddr n; - sprintf(b, "%s~", addr); n.zone = 0; n.net = 0; n.node = 0; n.point = 0; n.domain[0] = '\0'; - if ((strchr(b, ':') == NULL) || (strchr(b, '@') == NULL)) + /* + * Safety check + */ + if (strlen(addr) > 42) + return n; + + sprintf(b, "%s~", addr); + if ((strchr(b, ':') == NULL) || (strchr(b, '/') == NULL)) return n; - /* First split the f:n/n.p and domain part + /* + * First split the f:n/n.p and domain part */ - temp = strtok(b, "@"); - strcpy(n.domain, strtok(NULL, "~")); + if ((strchr(b, '@'))) { + temp = strtok(b, "@"); + p = strtok(NULL, "~"); + if (p) + strcpy(n.domain, p); + } - /* Handle f:n/n.p part + /* + * Handle f:n/n.p part */ - strcpy(a, strcat(temp, "~")); + if (temp) + strcpy(a, strcat(temp, "~")); + else + strcpy(a, b); if (strchr(a, '.') == NULL) { n.zone = atoi(strtok(a, ":")); n.net = atoi(strtok(NULL, "/")); @@ -101,5 +119,3 @@ fidoaddr str2aka(char *addr) } - - diff --git a/mbsebbs/bbslist.c b/mbsebbs/bbslist.c index d9d821d9..250f3e5d 100644 --- a/mbsebbs/bbslist.c +++ b/mbsebbs/bbslist.c @@ -117,7 +117,7 @@ void BBS_Add(void) pout(15, 0, (char *) Language(303)); colour(CFG.InputColourF, CFG.InputColourB); fflush(stdout); - GetstrC(bbs.Phone[0], 20); + GetstrC(bbs.Phone[0], 19); if((strlen(bbs.Phone[0])) > 3) break; @@ -163,7 +163,7 @@ void BBS_Add(void) pout(15, 0, (char *) Language(307)); colour(CFG.InputColourF, CFG.InputColourB); fflush(stdout); - GetstrC(bbs.Speeds[0], 40); + GetstrC(bbs.Speeds[0], 39); if((strlen(bbs.Speeds[0])) > 2) break; @@ -181,11 +181,11 @@ void BBS_Add(void) pout(15, 0, (char *)": "); colour(CFG.InputColourF, CFG.InputColourB); fflush(stdout); - GetstrC(bbs.Desc[0], 71); + GetstrC(bbs.Desc[0], 65); pout(15, 0, (char *)": "); colour(CFG.InputColourF, CFG.InputColourB); fflush(stdout); - GetstrC(bbs.Desc[1], 71); + GetstrC(bbs.Desc[1], 65); } printf("\n"); diff --git a/mbsebbs/safe.c b/mbsebbs/safe.c index 7d4b1485..27c6c176 100644 --- a/mbsebbs/safe.c +++ b/mbsebbs/safe.c @@ -49,10 +49,11 @@ FILE *pSafe; int iLoop, iFirst, iSecond, iThird; char sFirst[4], sSecond[4], sThird[4]; - +int cracked; +int tries; int getdigits(void); -int SafeCheckUser(void); +int SafeCheckUser(int); @@ -63,6 +64,8 @@ void Safe(void) isize = sizeof(int); srand(Time_Now); + cracked = FALSE; + tries = 0; WhosDoingWhat(SAFE); @@ -77,7 +80,7 @@ void Safe(void) DisplayFile(CFG.sSafeWelcome); - if (SafeCheckUser() == TRUE) + if (SafeCheckUser(TRUE) == TRUE) return; /* In the safe lies */ @@ -115,8 +118,10 @@ void Safe(void) */ while (TRUE) { /* Get digits, TRUE if safe cracked. */ - if (getdigits() == TRUE) - break; + if (getdigits() == TRUE) { + SafeCheckUser(FALSE); + break; + } Enter(1); /* Do you want to try again ? [Y/n]: */ @@ -125,10 +130,12 @@ void Safe(void) alarm_on(); i = toupper(Getone()); - if (i == Keystroke(101, 1)) - break; + if (i == Keystroke(101, 1)) { + SafeCheckUser(FALSE); + break; + } - if (SafeCheckUser() == TRUE) + if (SafeCheckUser(FALSE) == TRUE) break; } Syslog('+', "User exited Safe Cracker Door"); @@ -141,211 +148,179 @@ void Safe(void) */ int getdigits(void) { - long result; - int i; - char temp[81]; + int i; + char temp[81]; - colour(WHITE, BLACK); - /* Please enter three numbers consisting from 1 to */ - printf("\n\n%s%d\n", (char *) Language(89), CFG.iSafeMaxNumber); - /* Please enter three combinations. */ - printf("%s", (char *) Language(90)); + colour(WHITE, BLACK); + /* Please enter three numbers consisting from 1 to */ + printf("\n\n%s%d\n", (char *) Language(89), CFG.iSafeMaxNumber); + /* Please enter three combinations. */ + printf("%s", (char *) Language(90)); - while (TRUE) { - Enter(2); - /* 1st Digit */ - pout(LIGHTRED, BLACK, (char *) Language(91)); - colour(LIGHTBLUE, BLACK); - fflush(stdout); - Getnum(sFirst, 2); - sprintf(temp, "1st: %s", sFirst); - if((strcmp(sFirst, "")) != 0) { - Syslog('-', temp); - iFirst=atoi(sFirst); - } - - if((iFirst > CFG.iSafeMaxNumber) || (iFirst <= 0) || (strcmp(sFirst, "") == 0)) { - colour(WHITE, BLUE); - /* Please try again! You must input a number greater than Zero and less than */ - printf("\n%s%d.", (char *) Language(92), CFG.iSafeMaxNumber); - Syslog('-', "Value out of range!"); - } else - break; + while (TRUE) { + Enter(2); + /* 1st Digit */ + pout(LIGHTRED, BLACK, (char *) Language(91)); + colour(LIGHTBLUE, BLACK); + fflush(stdout); + Getnum(sFirst, 2); + sprintf(temp, "1st: %s", sFirst); + if((strcmp(sFirst, "")) != 0) { + iFirst=atoi(sFirst); } - while (TRUE) { - Enter(1); - /* 2nd digit: */ - pout(LIGHTRED, BLACK, (char *) Language(93)); - colour(LIGHTBLUE, BLACK); - fflush(stdout); - Getnum(sSecond, 2); - sprintf(temp, "2nd: %s", sSecond); - if((strcmp(sSecond, "")) != 0) { - Syslog('-', temp); - iSecond=atoi(sSecond); - } + if((iFirst > CFG.iSafeMaxNumber) || (iFirst <= 0) || (strcmp(sFirst, "") == 0)) { + colour(WHITE, BLUE); + /* Please try again! You must input a number greater than Zero and less than */ + printf("\n%s%d.", (char *) Language(92), CFG.iSafeMaxNumber); + } else + break; + } - if((iSecond > CFG.iSafeMaxNumber) || (iSecond <= 0) || (strcmp(sSecond, "") == 0)) { - colour(WHITE, BLUE); - /* Please try again! You must input a number greater than Zero and less than */ - printf("\n%s%d.\n", (char *) Language(92), CFG.iSafeMaxNumber); - Syslog('-', "Value out of range!"); - } else - break; + while (TRUE) { + Enter(1); + /* 2nd digit: */ + pout(LIGHTRED, BLACK, (char *) Language(93)); + colour(LIGHTBLUE, BLACK); + fflush(stdout); + Getnum(sSecond, 2); + sprintf(temp, "2nd: %s", sSecond); + if((strcmp(sSecond, "")) != 0) { + iSecond=atoi(sSecond); } - while (TRUE) { - Enter(1); - pout(LIGHTRED, BLACK, (char *) Language(94)); - colour(LIGHTBLUE, BLACK); - fflush(stdout); - Getnum(sThird, 2); - if((strcmp(sThird, "")) != 0) { - if((strcmp(sThird, "737") != 0) && (strcmp(sThird, "747") != 0)) { - sprintf(temp, "3rd: %s", sThird); - Syslog('!', temp); - } else { - sprintf(temp, "3rd: %d", CFG.iSafeMaxNumber - 1); - Syslog('-', temp); - } - } - iThird=atoi(sThird); + if((iSecond > CFG.iSafeMaxNumber) || (iSecond <= 0) || (strcmp(sSecond, "") == 0)) { + colour(WHITE, BLUE); + /* Please try again! You must input a number greater than Zero and less than */ + printf("\n%s%d.\n", (char *) Language(92), CFG.iSafeMaxNumber); + } else + break; + } - if((iThird == 737) || (iThird == 747)) - break; - - if((iThird > CFG.iSafeMaxNumber) || (iThird <= 0)) { - colour(WHITE, BLUE); - /* Please try again! You must input a number greater than Zero and less than */ - printf("\n%s%d.\n", (char *) Language(92), CFG.iSafeMaxNumber); - Syslog('-', "Value out of range!"); - } else - break; + while (TRUE) { + Enter(1); + pout(LIGHTRED, BLACK, (char *) Language(94)); + colour(LIGHTBLUE, BLACK); + fflush(stdout); + Getnum(sThird, 2); + sprintf(temp, "3rd: %s", sThird); + if((strcmp(sThird, "")) != 0) { + iThird=atoi(sThird); } + if((iThird > CFG.iSafeMaxNumber) || (iThird <= 0) || (strcmp(sThird, "") == 0)) { + colour(WHITE, BLUE); + /* Please try again! You must input a number greater than Zero and less than */ + printf("\n%s%d.\n", (char *) Language(92), CFG.iSafeMaxNumber); + } else + break; + } + + /* Left: */ + Enter(1); + pout(LIGHTRED, BLACK, (char *) Language(95)); + poutCR(LIGHTBLUE, BLACK, sFirst); + + /* Right: */ + pout(LIGHTRED, BLACK, (char *) Language(96)); + poutCR(LIGHTBLUE, BLACK, sSecond); + + /* Left: */ + pout(LIGHTRED, BLACK, (char *) Language(95)); + poutCR(LIGHTBLUE, BLACK, sThird); + + Enter(1); + /* Attempt to open safe with this combination [Y/n]: */ + pout(LIGHTRED, BLACK, (char *) Language(97)); + fflush(stdout); + alarm_on(); + i = toupper(Getone()); + sprintf(temp, "%c", i); + + if ((i == Keystroke(97, 0)) || (i == 13)) { + printf("\n\n"); + tries++; + Syslog('+', "Attempt %d with combination %d %d %d", tries, iFirst, iSecond, iThird); + /* Left: */ - Enter(1); pout(LIGHTRED, BLACK, (char *) Language(95)); + for (iLoop = 0; iLoop < iFirst; iLoop++) { + pout(YELLOW, BLACK, (char *)"."); + fflush(stdout); + usleep(100000); + } poutCR(LIGHTBLUE, BLACK, sFirst); /* Right: */ pout(LIGHTRED, BLACK, (char *) Language(96)); + for (iLoop = 0; iLoop < iSecond; iLoop++) { + pout(YELLOW, BLACK, (char *)"."); + fflush(stdout); + usleep(100000); + } poutCR(LIGHTBLUE, BLACK, sSecond); /* Left: */ pout(LIGHTRED, BLACK, (char *) Language(95)); + for (iLoop = 0; iLoop < iThird; iLoop++) { + pout(YELLOW, BLACK, (char *)"."); + fflush(stdout); + usleep(100000); + } poutCR(LIGHTBLUE, BLACK, sThird); - Enter(1); - /* Attempt to open safe with this combination [Y/n]: */ - pout(LIGHTRED, BLACK, (char *) Language(97)); - fflush(stdout); - alarm_on(); - i = toupper(Getone()); - sprintf(temp, "%c", i); - - if ((i == Keystroke(97, 0)) || (i == 13)) { - printf("\n\n"); - - /* Left: */ - pout(LIGHTRED, BLACK, (char *) Language(95)); - for (iLoop = 0; iLoop < iFirst; iLoop++) - pout(YELLOW, BLACK, (char *)"."); - poutCR(LIGHTBLUE, BLACK, sFirst); - - /* Right: */ - pout(LIGHTRED, BLACK, (char *) Language(96)); - for (iLoop = 0; iLoop < iSecond; iLoop++) - pout(YELLOW, BLACK, (char *)"."); - poutCR(LIGHTBLUE, BLACK, sSecond); - - /* Left: */ - pout(LIGHTRED, BLACK, (char *) Language(95)); - for (iLoop = 0; iLoop < iThird; iLoop++) - pout(YELLOW, BLACK, (char *)"."); - poutCR(LIGHTBLUE, BLACK, sThird); - - if(CFG.iSafeNumGen) { - CFG.iSafeFirstDigit = (rand() % CFG.iSafeMaxNumber) + 1; - CFG.iSafeSecondDigit = (rand() % CFG.iSafeMaxNumber) + 1; - CFG.iSafeThirdDigit = (rand() % CFG.iSafeMaxNumber) + 1; - } - - if(CFG.iSafeFirstDigit == iFirst) - if(CFG.iSafeSecondDigit == iSecond) - if(CFG.iSafeThirdDigit == iThird) { - - DisplayFile(CFG.sSafeOpened); - - Enter(1); - /* You have won the following... */ - pout(LIGHTRED, BLACK, (char *) Language(98)); - Enter(2); - poutCR(LIGHTMAGENTA, BLACK, CFG.sSafePrize); - Enter(1); - - sprintf(temp, "%s/etc/safe.data", getenv("MBSE_ROOT")); - if(( pSafe = fopen(temp, "r+")) == NULL) - WriteError("Can't open %s for updating", temp); - else { - fseek(pSafe, 0L, SEEK_END); - result = ftell(pSafe); - result /= sizeof(safe); - - fread(&safe, sizeof(safe), 1, pSafe); - - safe.Opened = TRUE; - - fseek(pSafe, 0L, SEEK_END); - result = ftell(pSafe); - result /= sizeof(safe); - fwrite(&safe, sizeof(safe), 1, pSafe); - fclose(pSafe); - } - - Syslog('!', "User opened Safe Cracker Door"); - - Pause(); - return TRUE; - } - - Enter(1); - pout(LIGHTGREEN, BLACK, (char *) Language(99)); - Enter(1); - - if(CFG.iSafeNumGen) { - Enter(1); - /* The safe code was: */ - pout(LIGHTRED, BLACK, (char *) Language(100)); - Enter(2); - colour(LIGHTRED, BLACK); - - /* Left: */ - printf("%s%d\n", (char *) Language(95), CFG.iSafeFirstDigit); - - /* Right */ - printf("%s%d\n", (char *) Language(96), CFG.iSafeSecondDigit); - - /* Left */ - printf("%s%d\n", (char *) Language(95), CFG.iSafeThirdDigit); - } - - if(iThird == 737) - CFG.iSafeNumGen = FALSE; - - if(iThird == 747) { - colour(LIGHTBLUE, BLACK); - printf("Code: %d %d %d\n", CFG.iSafeFirstDigit, CFG.iSafeSecondDigit, CFG.iSafeThirdDigit); - } - - Enter(1); - /* Please press key to continue */ - pout(LIGHTGREEN, BLACK, (char *) Language(87)); - alarm_on(); - getchar(); + if(CFG.iSafeNumGen) { + CFG.iSafeFirstDigit = (rand() % CFG.iSafeMaxNumber) + 1; + CFG.iSafeSecondDigit = (rand() % CFG.iSafeMaxNumber) + 1; + CFG.iSafeThirdDigit = (rand() % CFG.iSafeMaxNumber) + 1; } - return FALSE; + + if ((CFG.iSafeFirstDigit == iFirst) && (CFG.iSafeSecondDigit == iSecond) && (CFG.iSafeThirdDigit == iThird)) { + + DisplayFile(CFG.sSafeOpened); + cracked = TRUE; + + Enter(1); + /* You have won the following... */ + pout(LIGHTRED, BLACK, (char *) Language(98)); + Enter(2); + poutCR(LIGHTMAGENTA, BLACK, CFG.sSafePrize); + Enter(1); + + Syslog('!', "User opened Safe Cracker Door"); + + Pause(); + return TRUE; + } + + Enter(1); + pout(LIGHTGREEN, BLACK, (char *) Language(99)); + Enter(1); + + if(CFG.iSafeNumGen) { + Enter(1); + /* The safe code was: */ + pout(LIGHTRED, BLACK, (char *) Language(100)); + Enter(2); + colour(LIGHTRED, BLACK); + + /* Left: */ + printf("%s%d\n", (char *) Language(95), CFG.iSafeFirstDigit); + + /* Right */ + printf("%s%d\n", (char *) Language(96), CFG.iSafeSecondDigit); + + /* Left */ + printf("%s%d\n", (char *) Language(95), CFG.iSafeThirdDigit); + } + + Enter(1); + /* Please press key to continue */ + pout(LIGHTGREEN, BLACK, (char *) Language(87)); + alarm_on(); + getchar(); + } + return FALSE; } @@ -353,106 +328,139 @@ int getdigits(void) /* * Returns true when safe already cracked or maximum trys exceeded */ -int SafeCheckUser(void) +int SafeCheckUser(int init) { - int Counter = 0; - char *File, *Name, *Date; + char *File, *Name, *Date; - File = calloc(PATH_MAX, sizeof(char)); - Name = calloc(50, sizeof(char)); - Date = calloc(50, sizeof(char)); + File = calloc(PATH_MAX, sizeof(char)); + Name = calloc(50, sizeof(char)); + Date = calloc(50, sizeof(char)); - sprintf(Name, "%s", exitinfo.sUserName); - sprintf(Date, "%s", (char *) GetDateDMY()); - sprintf(File, "%s/etc/safe.data", getenv("MBSE_ROOT")); + sprintf(Name, "%s", exitinfo.sUserName); + sprintf(Date, "%s", (char *) GetDateDMY()); + sprintf(File, "%s/etc/safe.data", getenv("MBSE_ROOT")); - if(( pSafe = fopen(File, "r")) == NULL) { - if((pSafe = fopen(File, "w")) != NULL) { - sprintf(safe.Date, "%s", (char *) GetDateDMY()); - sprintf(safe.Name, "%s", Name); - safe.Trys = 0; - safe.Opened = 0; - fwrite(&safe, sizeof(safe), 1, pSafe); - fclose(pSafe); - chmod(File, 0660); - } - } else { - while ( fread(&safe, sizeof(safe), 1, pSafe) == 1) { - if(safe.Opened) { - fclose(pSafe); - Syslog('+', "Safe is currently LOCKED - exiting door."); - - /* THE SAFE IS CURRENTLY LOCKED */ - poutCR(WHITE, RED, (char *) Language(103)); - Enter(1); - colour(LIGHTRED, BLACK); - - /* has cracked the safe. */ - printf("%s, %s\n", safe.Name, (char *) Language(104)); - - /* The safe will remain locked until the sysop rewards the user. */ - pout(LIGHTGREEN, BLACK, (char *) Language(105)); - Enter(2); - Pause(); - fclose(pSafe); - free(File); - free(Name); - free(Date); - return TRUE; - } - } - rewind(pSafe); - - fread(&safe, sizeof(safe), 1, pSafe); - if((strcmp(Date, safe.Date)) != 0) { - fclose(pSafe); - if((pSafe = fopen(File, "w")) != NULL) { - sprintf(safe.Date, "%s", (char *) GetDateDMY()); - sprintf(safe.Name, "%s", Name); - safe.Trys = 0; - safe.Opened = 0; - fwrite(&safe, sizeof(safe), 1, pSafe); - fclose(pSafe); - } - } else { - while ( fread(&safe, sizeof(safe), 1, pSafe) == 1) { - if((strcmp(Name, safe.Name)) == 0) - Counter++; - } - - rewind(pSafe); - - if(Counter >= CFG.iSafeMaxTrys - 1) { - Enter(2); - /* Maximum trys per day exceeded */ - pout(WHITE, BLACK, (char *) Language(106)); - Enter(1); - sleep(3); - fclose(pSafe); - free(File); - free(Name); - free(Date); - return TRUE; - } - - fclose(pSafe); - - if(( pSafe = fopen(File, "a+")) == NULL) - WriteError("Unable to append to safe.data", File); - else { - sprintf(safe.Date, "%s", (char *) GetDateDMY()); - sprintf(safe.Name, "%s", Name); - safe.Trys = 0; - safe.Opened = 0; - fwrite(&safe, sizeof(safe), 1, pSafe); - fclose(pSafe); - } - } + if ((pSafe = fopen(File, "r+")) == NULL) { + if ((pSafe = fopen(File, "w")) != NULL) { + safehdr.hdrsize = sizeof(safehdr); + safehdr.recsize = sizeof(safe); + fwrite(&safehdr, sizeof(safehdr), 1, pSafe); + sprintf(safe.Date, "%s", (char *) GetDateDMY()); + sprintf(safe.Name, "%s", Name); + safe.Trys = 0; + safe.Opened = FALSE; + fwrite(&safe, sizeof(safe), 1, pSafe); + fclose(pSafe); + chmod(File, 0660); } - free(File); - free(Name); - free(Date); - return FALSE; + } else { + fread(&safehdr, sizeof(safehdr), 1, pSafe); + /* + * Check if safe already cracked + */ + while (fread(&safe, safehdr.recsize, 1, pSafe) == 1) { + if (safe.Opened) { + fclose(pSafe); + Syslog('+', "Safe is currently LOCKED - exiting door."); + + /* THE SAFE IS CURRENTLY LOCKED */ + poutCR(WHITE, RED, (char *) Language(103)); + Enter(1); + colour(LIGHTRED, BLACK); + + /* has cracked the safe. */ + printf("%s, %s\n", safe.Name, (char *) Language(104)); + + /* The safe will remain locked until the sysop rewards the user. */ + pout(LIGHTGREEN, BLACK, (char *) Language(105)); + Enter(2); + Pause(); + free(File); + free(Name); + free(Date); + return TRUE; + } + } + fseek(pSafe, safehdr.hdrsize, SEEK_SET); + + /* + * Check if this user is already in the database + */ + while (fread(&safe, safehdr.recsize, 1, pSafe) == 1) { + if ((strcmp(Name, safe.Name)) == 0) { + if ((strcmp(Date, safe.Date)) != 0) { + /* + * User found, but last time used is not today. + * Reset this user. + */ + fseek(pSafe, - safehdr.recsize, SEEK_CUR); + sprintf(safe.Date, "%s", (char *) GetDateDMY()); + safe.Trys = 0; + tries = 0; + safe.Opened = FALSE; + fwrite(&safe, safehdr.recsize, 1, pSafe); + fclose(pSafe); + free(File); + free(Name); + free(Date); + return FALSE; + } else { + /* + * User found, last time is today, check attempts + */ + fseek(pSafe, - safehdr.recsize, SEEK_CUR); + if (init) + tries = safe.Trys; + else { + safe.Trys = tries; + } + safe.Opened = cracked; + fwrite(&safe, safehdr.recsize, 1, pSafe); + fclose(pSafe); + free(File); + free(Name); + free(Date); + if (safe.Trys >= CFG.iSafeMaxTrys) { + Syslog('+', "Maximum trys per day exceeded"); + Enter(2); + /* Maximum trys per day exceeded */ + pout(WHITE, BLACK, (char *) Language(106)); + Enter(1); + sleep(3); + return TRUE; + } + return FALSE; + } + } + } + + /* + * User not found, append new record + */ + fclose(pSafe); + if ((pSafe = fopen(File, "a")) == NULL) { + WriteError("Can't append to %s", File); + free(File); + free(Name); + free(Date); + return TRUE; + } + fseek(pSafe, 0, SEEK_END); + memset(&safe, 0, sizeof(safe)); + sprintf(safe.Date, "%s", (char *) GetDateDMY()); + sprintf(safe.Name, "%s", Name); + safe.Trys = 0; + safe.Opened = FALSE; + tries = 0; + fwrite(&safe, sizeof(safe), 1, pSafe); + fclose(pSafe); + Syslog('+', "Append new safe.data record"); + } + + free(File); + free(Name); + free(Date); + return FALSE; } diff --git a/mbsetup/Makefile b/mbsetup/Makefile index 189afbca..f658920f 100644 --- a/mbsetup/Makefile +++ b/mbsetup/Makefile @@ -9,17 +9,17 @@ SRCS = grlist.c m_domain.c m_fgroup.c m_lang.c m_marea.c m_new.c \ m_limits.c m_menu.c m_ngroup.c m_service.c m_tty.c mutil.c m_archive.c \ m_fdb.c m_global.c m_magic.c m_mgroup.c m_node.c m_task.c m_users.c \ screen.c m_bbs.c m_ff.c m_hatch.c m_mail.c m_modem.c m_ol.c m_tic.c \ - m_virus.c stlist.c + m_virus.c stlist.c m_bbslist.c m_safe.c HDRS = grlist.h m_domain.h m_fgroup.h m_lang.h m_marea.h m_new.h m_protocol.h \ m_ticarea.h mutil.h ledit.h m_farea.h m_fido.h m_limits.h m_menu.h \ m_ngroup.h m_service.h m_tty.h screen.h m_archive.h m_fdb.h m_global.h \ m_magic.h m_mgroup.h m_node.h m_task.h m_users.h stlist.h m_bbs.h m_ff.h \ - m_hatch.h m_mail.h m_modem.h m_ol.h m_tic.h m_virus.h + m_hatch.h m_mail.h m_modem.h m_ol.h m_tic.h m_virus.h m_bbslist.h m_safe.h OBJS = grlist.o m_domain.o m_fgroup.o m_lang.o m_marea.o m_new.o m_protocol.o \ m_ticarea.o mbsetup.o ledit.o m_farea.o m_fido.o m_limits.o m_menu.o \ m_ngroup.o m_service.o m_tty.o mutil.o m_archive.o m_fdb.o m_global.o \ m_magic.o m_mgroup.o m_node.o m_task.o m_users.o screen.o m_bbs.o m_ff.o \ - m_hatch.o m_mail.o m_modem.o m_ol.o m_tic.o m_virus.o stlist.o + m_hatch.o m_mail.o m_modem.o m_ol.o m_tic.o m_virus.o stlist.o m_bbslist.o m_safe.o LIBS += ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libmsgbase.a ../lib/libdbase.a OTHER = Makefile @@ -78,7 +78,7 @@ m_marea.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib m_new.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h screen.h mutil.h ledit.h stlist.h m_global.h grlist.h m_new.h m_lang.h m_marea.h m_ngroup.h m_protocol.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/clcomm.h ../lib/common.h screen.h mutil.h ledit.h stlist.h m_global.h m_protocol.h m_ticarea.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h screen.h mutil.h ledit.h stlist.h grlist.h m_global.h m_node.h m_fgroup.h m_farea.h m_archive.h m_ticarea.h -mbsetup.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h screen.h mutil.h ledit.h m_global.h m_bbs.h m_farea.h m_fgroup.h m_mail.h m_mgroup.h m_hatch.h m_tic.h m_ticarea.h m_magic.h m_fido.h m_lang.h m_archive.h m_virus.h m_tty.h m_limits.h m_users.h m_node.h m_fdb.h m_new.h m_ol.h m_protocol.h m_ff.h m_modem.h m_marea.h m_ngroup.h m_service.h m_domain.h m_task.h +mbsetup.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h screen.h mutil.h ledit.h m_global.h m_bbs.h m_farea.h m_fgroup.h m_mail.h m_mgroup.h m_hatch.h m_tic.h m_ticarea.h m_magic.h m_fido.h m_lang.h m_archive.h m_virus.h m_tty.h m_limits.h m_users.h m_node.h m_fdb.h m_new.h m_ol.h m_bbslist.h m_protocol.h m_ff.h m_modem.h m_marea.h m_ngroup.h m_service.h m_domain.h m_task.h ledit.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/msg.h screen.h mutil.h ledit.h m_farea.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h screen.h mutil.h ledit.h m_global.h m_fgroup.h m_archive.h m_farea.h m_fgroup.h m_ngroup.h m_fido.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h screen.h mutil.h ledit.h stlist.h m_global.h m_fido.h @@ -97,7 +97,7 @@ m_node.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/ m_task.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h screen.h mutil.h ledit.h m_task.h m_users.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h screen.h mutil.h ledit.h m_lang.h m_global.h m_archive.h m_protocol.h m_users.h screen.o: ../lib/libs.h ../lib/structs.h ../lib/ansi.h ../lib/common.h ../lib/clcomm.h screen.h -m_bbs.o: ../lib/libs.h ../lib/structs.h ../lib/common.h screen.h mutil.h ledit.h m_lang.h m_protocol.h m_ol.h m_fgroup.h m_farea.h m_menu.h m_bbs.h m_limits.h +m_bbs.o: ../lib/libs.h ../lib/structs.h ../lib/common.h screen.h mutil.h ledit.h m_lang.h m_protocol.h m_ol.h m_fgroup.h m_farea.h m_menu.h m_bbs.h m_bbslist.h m_limits.h m_ff.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/clcomm.h ../lib/common.h screen.h mutil.h ledit.h stlist.h m_global.h m_ff.h m_lang.h m_marea.h m_hatch.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h screen.h mutil.h ledit.h stlist.h m_global.h m_fgroup.h m_ticarea.h m_hatch.h m_mail.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h screen.h mutil.h ledit.h m_global.h m_marea.h m_mgroup.h m_mail.h @@ -106,4 +106,5 @@ m_ol.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/co m_tic.o: ../lib/libs.h ../lib/structs.h ../lib/common.h screen.h mutil.h ledit.h m_fgroup.h m_ticarea.h m_magic.h m_hatch.h m_tic.h m_virus.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/clcomm.h ../lib/common.h screen.h mutil.h ledit.h stlist.h m_global.h m_virus.h stlist.o: ../lib/libs.h ../lib/structs.h ../lib/common.h ../lib/clcomm.h stlist.h +m_bbslist.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h screen.h mutil.h ledit.h m_global.h m_bbslist.h # End of generated dependencies diff --git a/mbsetup/m_bbs.c b/mbsetup/m_bbs.c index 68766a9c..dc1c6763 100644 --- a/mbsetup/m_bbs.c +++ b/mbsetup/m_bbs.c @@ -1,18 +1,13 @@ /***************************************************************************** * - * File ..................: m_bbs.c + * $Id$ * Purpose ...............: BBS Setup Program - * Last modification date : 17-Jul-1999 - * Todo ..................: - * Edit BBS lists - * Edit timebank data - * Edit safe data * ***************************************************************************** - * Copyright (C) 1997-1999 + * Copyright (C) 1997-2002 * - * Michiel Broek FIDO: 2:2801/16 - * Beekmansbos 10 Internet: mbroek@ux123.pttnwb.nl + * Michiel Broek FIDO: 2:280/2802 + * Beekmansbos 10 * 1971 BV IJmuiden * the Netherlands * @@ -45,10 +40,13 @@ #include "m_fgroup.h" #include "m_farea.h" #include "m_menu.h" +#include "m_safe.h" #include "m_bbs.h" +#include "m_bbslist.h" #include "m_limits.h" + void bbs_menu(void) { for (;;) { @@ -64,38 +62,33 @@ void bbs_menu(void) mvprintw(11, 6, "5. Edit Transfer Protocols"); mvprintw(12, 6, "6. Edit BBS List Data"); mvprintw(13, 6, "7. Edit Oneliners"); - mvprintw(14, 6, "8. Edit TimeBank data"); - mvprintw(15, 6, "9. Edit Safe Cracker data"); + mvprintw(14, 6, "8. Edit Safecracker Data"); - switch(select_menu(9)) { - case 0: - return; + switch(select_menu(8)) { + case 0: return; - case 1: - EditLimits(); + case 1: EditLimits(); break; - case 2: - EditLanguage(); + case 2: EditLanguage(); break; - case 3: - EditMenus(); + case 3: EditMenus(); break; - case 4: - EditFilearea(); + case 4: EditFilearea(); break; - case 5: - EditProtocol(); + case 5: EditProtocol(); break; - case 6: + case 6: bbslist_menu(); break; - case 7: - ol_menu(); + case 7: ol_menu(); + break; + + case 8: EditSafe(); break; } } diff --git a/mbsetup/m_ol.c b/mbsetup/m_ol.c index 2ef13123..e5b1de3a 100644 --- a/mbsetup/m_ol.c +++ b/mbsetup/m_ol.c @@ -244,7 +244,7 @@ int EditOnelRec(int Area) working(0, 0, 0); set_color(WHITE, BLACK); - mvprintw( 5, 2, "8.8.1 EDIT ONELINER"); + mvprintw( 5, 2, "8.7.1 EDIT ONELINER"); set_color(CYAN, BLACK); mvprintw( 7, 2, "1. Text"); mvprintw( 8, 2, "2. User"); @@ -323,7 +323,7 @@ void EditOneline(void) for (;;) { clr_index(); set_color(WHITE, BLACK); - mvprintw( 5, 2, "8.8.1 ONELINERS SETUP"); + mvprintw( 5, 2, "8.7.1 ONELINERS SETUP"); set_color(CYAN, BLACK); if (records != 0) { sprintf(temp, "%s/etc/oneline.temp", getenv("MBSE_ROOT")); @@ -409,7 +409,7 @@ void PurgeOneline(void) clr_index(); set_color(WHITE, BLACK); - mvprintw( 5, 6, "7.8.2 ONELINERS PURGE"); + mvprintw( 5, 6, "8.7.2 ONELINERS PURGE"); set_color(CYAN, BLACK); working(1, 0, 0); @@ -473,7 +473,7 @@ void ImportOneline(void) clr_index(); set_color(WHITE, BLACK); - mvprintw(5, 6, "8.8.3 IMPORT ONELINERS"); + mvprintw(5, 6, "8.7.3 IMPORT ONELINERS"); set_color(CYAN, BLACK); memset(&temp, 0, sizeof(temp)); strcpy(temp, edit_str(21, 6,64, temp, (char *)"The ^full path and filename^ of the file to import")); @@ -554,7 +554,7 @@ void ol_menu(void) for (;;) { clr_index(); set_color(WHITE, BLACK); - mvprintw( 5, 6, "8.8 ONELINER SETUP"); + mvprintw( 5, 6, "8.7 ONELINER SETUP"); set_color(CYAN, BLACK); mvprintw( 7, 6, "1. Edit Oneliners"); mvprintw( 8, 6, "2. Purge Oneliners"); diff --git a/mbsetup/m_ol.h b/mbsetup/m_ol.h index ac443fd6..2d3ee287 100644 --- a/mbsetup/m_ol.h +++ b/mbsetup/m_ol.h @@ -1,4 +1,4 @@ -/* m_ol.h */ +/* $Id$ */ #ifndef _OL_H #define _OL_H diff --git a/mbsetup/mbsetup.c b/mbsetup/mbsetup.c index 14806a1e..45d5e7d5 100644 --- a/mbsetup/mbsetup.c +++ b/mbsetup/mbsetup.c @@ -58,6 +58,8 @@ #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" @@ -360,6 +362,8 @@ void initdatabases(void) InitNGroup(); InitNodes(); InitOneline(); + InitBBSlist(); + InitSafe(); InitProtocol(); InitService(); InitTicarea();