void Chg_DataPhone() { char temp[81]; ReadExitinfo(); Syslog('+', "Old data phone \"%s\"", exitinfo.sDataPhone); while (1) { Enter(1); /* Please enter you Data Number */ pout(LIGHTGREEN, BLACK, (char *) Language(48)); Enter(1); pout(LIGHTGREEN, BLACK, (char *)": "); colour(CFG.InputColourF, CFG.InputColourB); GetPhone(temp, 16); if( strlen(temp) < 6) { Enter(1); /* Please enter a proper phone number */ pout(LIGHTRED, BLACK, (char *) Language(47)); Enter(1); } else { strcpy(exitinfo.sDataPhone, temp); break; } } Syslog('+', "New data phone \"%s\"", exitinfo.sDataPhone); WriteExitinfo(); }
void Chg_DOB() { char *temp; if (!CFG.iDOB) return; temp = calloc(81, sizeof(char)); ReadExitinfo(); Syslog('+', "Old DOB %s", exitinfo.sDateOfBirth); while (TRUE) { Enter(1); /* Please enter your Date of Birth DD-MM-YYYY: */ pout(CYAN, BLACK, (char *) Language(56)); colour(CFG.InputColourF, CFG.InputColourB); GetDate(temp, 10); if (Test_DOB(temp)) { Setup(exitinfo.sDateOfBirth, temp); break; } } Syslog('+', "New DOB %s", exitinfo.sDateOfBirth); WriteExitinfo(); free(temp); }
void Chg_Address() { int i; char temp[41]; ReadExitinfo(); Syslog('+', "Old address \"%s\"", exitinfo.address[0]); Syslog('+', " \"%s\"", exitinfo.address[1]); Syslog('+', " \"%s\"", exitinfo.address[2]); while (TRUE) { Enter(1); /* Old address: */ pout(WHITE, BLACK, (char *) Language(476)); Enter(1); colour(LIGHTBLUE, BLACK); PUTSTR(exitinfo.address[0]); Enter(1); PUTSTR(exitinfo.address[1]); Enter(1); PUTSTR(exitinfo.address[2]); Enter(2); /* Your address, maximum 3 lines (only visible for the sysop): */ pout(YELLOW, BLACK, (char *) Language(474)); Enter(1); for (i = 0; i < 3; i++ ) { colour(YELLOW, BLACK); printf("%d: ", i+1); colour(CFG.InputColourF, CFG.InputColourB); alarm_on(); GetstrC(temp, 40); if (strcmp(temp, "")) Setup(exitinfo.address[i], temp); } if (strlen(exitinfo.address[0]) || strlen(exitinfo.address[1]) || strlen(exitinfo.address[2])) break; Enter(1); /* You need to enter your address here */ pout(LIGHTRED, BLACK, (char *)Language(475)); Enter(1); } Syslog('+', "New address \"%s\"", exitinfo.address[0]); Syslog('+', " \"%s\"", exitinfo.address[1]); Syslog('+', " \"%s\"", exitinfo.address[2]); WriteExitinfo(); }
/* * Choose Message Editor */ void Chg_FsMsged() { int z; char temp[81]; ReadExitinfo(); Enter(2); /* Now using the */ pout(LIGHTMAGENTA, BLACK, (char *)Language(372)); /* Line/Fullscreen/External */ colour(LIGHTCYAN, BLACK); snprintf(temp, 81, " %s ", Language(387 + (exitinfo.MsgEditor & 3))); PUTSTR(temp); /* Editor */ pout(LIGHTMAGENTA, BLACK, (char *)Language(390)); Enter(1); if (strlen(CFG.externaleditor)) /* Select: 1) Fullscreen editor, 2) External editor */ pout(WHITE, BLACK, (char *)Language(373)); else /* Select: 1) Fullscreen editor */ pout(WHITE, BLACK, (char *)Language(438)); alarm_on(); z = toupper(Readkey()); if (z == Keystroke(373, 0)) { exitinfo.MsgEditor = FSEDIT; Syslog('+', "User selected fullscreen editor"); } else if ((z == Keystroke(373, 1) && strlen(CFG.externaleditor))) { exitinfo.MsgEditor = EXTEDIT; Syslog('+', "User selected external editor"); } Enter(2); /* Now using the */ pout(LIGHTMAGENTA, BLACK, (char *)Language(372)); /* Line/Fullscreen/External */ colour(LIGHTCYAN, BLACK); snprintf(temp, 81, " %s ", Language(387 + (exitinfo.MsgEditor & 3))); PUTSTR(temp); /* Editor */ pout(LIGHTMAGENTA, BLACK, (char *)Language(390)); Enter(2); sleep(2); WriteExitinfo(); }
/* * Toggle Fullscreen Editor Shotcut keys */ void Chg_FsMsgedKeys() { ReadExitinfo(); Enter(2); if (exitinfo.FSemacs) { exitinfo.FSemacs = FALSE; /* Fullscreen Editor shortcut keys set to Wordstar */ pout(LIGHTGREEN, BLACK, (char *) Language(473)); } else { exitinfo.FSemacs = TRUE; /* Fullscreen Editor shortcut keys set to Emacs */ pout(LIGHTGREEN, BLACK, (char *) Language(472)); } Enter(2); sleep(2); Syslog('+', "FS editor shortcut keys changed to %s", exitinfo.FSemacs?"Emacs":"Wordstar"); WriteExitinfo(); }
void Chg_Location() { char temp[81]; ReadExitinfo(); Syslog('+', "Old location \"%s\"", exitinfo.sLocation); while (TRUE) { /* Old Location: */ Enter(1); /* Old location: */ pout(WHITE, BLACK, (char *) Language(73)); pout(9, 0, exitinfo.sLocation); Enter(2); /* Please enter your location: */ pout(YELLOW, BLACK, (char *) Language(49)); colour(CFG.InputColourF, CFG.InputColourB); if (CFG.iCapLocation) { GetnameNE(temp, 24); } else { GetstrC(temp, 80); } if((strcmp(temp, "")) == 0) break; if(( strlen(temp)) < CFG.CityLen) { Enter(1); /* Please enter a longer location (min */ colour(LIGHTRED, BLACK); snprintf(temp, 81, "%s%d)", (char *) Language(74), CFG.CityLen); PUTSTR(temp); Enter(1); } else { Setup(exitinfo.sLocation,temp); break; } } Syslog('+', "New location \"%s\"", exitinfo.sLocation); WriteExitinfo(); }
/* * Function will allow a user to change his handle */ void Chg_Handle() { char *Handle, *temp; Handle = calloc(81, sizeof(char)); temp = calloc(81, sizeof(char)); ReadExitinfo(); Syslog('+', "Old handle \"%s\"", exitinfo.sHandle); while (TRUE) { Enter(1); /* Enter a handle (Enter to Quit): */ pout(LIGHTBLUE, BLACK, (char *) Language(412)); colour(CFG.InputColourF, CFG.InputColourB); GetstrC(temp, 34); if ((strcmp(temp, "")) == 0) { free(Handle); free(temp); return; } strcpy(Handle, tlcap(temp)); if (CheckHandle(Handle) || CheckUnixNames(Handle)) { pout(LIGHTRED, BLACK, (char *)"\r\nThat handle is already been used\r\n"); } else if (CheckName(Handle)) { pout(LIGHTRED, BLACK, (char *)"\r\nThat name is already been used\r\n"); } else if((strcasecmp(Handle, "sysop")) == 0) { pout(LIGHTRED, BLACK, (char *)"\r\nYou cannot use Sysop as a handle\r\n"); } else if(strcmp(temp, "") != 0) { Setup(exitinfo.sHandle, temp); pout(LIGHTGREEN, BLACK, (char *)"\r\nHandle Changed!\r\n\r\n"); Syslog('+', "New handle \"%s\"", exitinfo.sHandle); break; } } WriteExitinfo(); free(temp); free(Handle); }
/* * Toggle New Files Check */ void Chg_FileCheck() { ReadExitinfo(); Enter(2); if (exitinfo.ieFILE) { exitinfo.ieFILE = FALSE; /* New Files check is now OFF */ pout(LIGHTGREEN, BLACK, (char *) Language(371)); } else { exitinfo.ieFILE = TRUE; /* New Files check is now ON */ pout(LIGHTGREEN, BLACK, (char *) Language(370)); } Enter(2); sleep(2); Syslog('+', "Check New Files changed to %s", exitinfo.ieFILE ?"True":"False"); WriteExitinfo(); }
/* * Toggle Mail Check */ void Chg_MailCheck() { ReadExitinfo(); Enter(2); if (exitinfo.MailScan) { exitinfo.MailScan = FALSE; /* New Mail check is now OFF */ pout(LIGHTGREEN, BLACK, (char *) Language(367)); } else { exitinfo.MailScan = TRUE; /* New Mail check is now ON */ pout(LIGHTGREEN, BLACK, (char *) Language(366)); } Enter(2); sleep(2); Syslog('+', "New Mail Check changed to %s", exitinfo.MailScan ?"True":"False"); WriteExitinfo(); }
/* * Toggle hotkeys */ void Chg_Hotkeys() { ReadExitinfo(); Enter(2); if (exitinfo.HotKeys) { exitinfo.HotKeys = FALSE; /* Hotkeys are now OFF */ pout(LIGHTGREEN, BLACK, (char *) Language(146)); } else { exitinfo.HotKeys = TRUE; /* Hotkeys are now ON */ pout(LIGHTGREEN, BLACK, (char *) Language(145)); } Enter(2); sleep(2); Syslog('+', "Hotkeys changed to %s", exitinfo.HotKeys?"True":"False"); WriteExitinfo(); }
void Chg_News() { ReadExitinfo(); Enter(2); if (exitinfo.ieNEWS) { exitinfo.ieNEWS = FALSE; /* News bulletins turned OFF */ pout(LIGHTGREEN, BLACK, (char *) Language(79)); } else { exitinfo.ieNEWS = TRUE; /* News bulletins turned ON */ pout(LIGHTGREEN, BLACK, (char *) Language(78)); } Enter(2); Syslog('+', "News bullentins now %s", exitinfo.ieNEWS?"True":"False"); sleep(2); WriteExitinfo(); }
void Chg_OLR_ExtInfo() { ReadExitinfo(); Enter(2); if (exitinfo.OL_ExtInfo) { exitinfo.OL_ExtInfo = FALSE; /* Offline Reader: Extended Info turned OFF */ pout(GREEN, BLACK, (char *) Language(16)); } else { exitinfo.OL_ExtInfo = TRUE; /* Offline Reader: Extended Info turned ON */ pout(GREEN, BLACK, (char *) Language(15)); } Enter(2); Syslog('+', "OLR Extended Info now %s", exitinfo.OL_ExtInfo?"True":"False"); sleep(2); WriteExitinfo(); }
/* * Function to toggle DoNotDisturb Flag */ void Chg_Disturb() { ReadExitinfo(); Enter(2); if(exitinfo.DoNotDisturb) { exitinfo.DoNotDisturb = FALSE; /* Do not disturb turned OFF */ pout(LIGHTGREEN, BLACK, (char *) Language(416)); } else { exitinfo.DoNotDisturb = TRUE; /* Do not disturb turned ON */ pout(LIGHTGREEN, BLACK, (char *) Language(417)); } Enter(2); Syslog('+', "Do not disturb now %s", exitinfo.DoNotDisturb?"True":"False"); UserSilent(exitinfo.DoNotDisturb); sleep(2); WriteExitinfo(); }
/* * Function will download a specific file */ int DownloadDirect(char *Name, int Wait) { int rc = 0; int Size; down_list *dl = NULL; if ((Size = file_size(Name)) == -1) { WriteError("No file %s", Name); pout(CFG.HiliteF, CFG.HiliteB, (char *)"File not found"); Enter(2); Pause(); } Syslog('+', "Download direct %s", Name); add_download(&dl, Name, basename(Name), 0, Size, FALSE); WhosDoingWhat(DOWNLOAD, NULL); if ((rc = download(dl))) { /* * Error */ Syslog('+', "Download failed rc=%d", rc); poutCR(LIGHTRED, BLACK, (char *)Language(353)); } else { /* * Update the users record. The file is free, so only statistics. */ ReadExitinfo(); exitinfo.Downloads++; /* Increase download counter */ mib_downloads++; WriteExitinfo(); } if (Wait) Pause(); return rc; }
/* * Change default archiver. */ void Chg_Archiver() { FILE *fp; int Found = FALSE; char *temp; temp = calloc(PATH_MAX, sizeof(char)); ReadExitinfo(); Syslog('+', "Old archiver %s", exitinfo.Archiver); while(TRUE) { snprintf(temp, PATH_MAX, "%s/etc/archiver.data", getenv("FTND_ROOT")); if ((fp = fopen(temp, "r")) == NULL) { WriteError("$Can't open %s", temp); /* Can't open archiver file. */ Enter(1); PUTSTR((char *) Language(86)); Enter(2); Pause(); free(temp); return; } fread(&archiverhdr, sizeof(archiverhdr), 1, fp); Enter(1); /* Select your preferred archiver */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(87)); Enter(2); while (fread(&archiver, archiverhdr.recsize, 1, fp) == 1) { if (archiver.available && strlen(archiver.marc) && strlen(archiver.farc)) { colour(LIGHTBLUE, BLACK); snprintf(temp, 81, "%-6s", archiver.name); PUTSTR(temp); colour(WHITE, BLACK); snprintf(temp, 81, "%s\r\n", archiver.comment); PUTSTR(temp); } } Enter(1); /* Select Archiver (Enter to Quit): */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(88)); alarm_on(); memset(temp, 0, PATH_MAX); GetstrC(temp, 5); if (strlen(temp) == 0) { free(temp); return; } Found = FALSE; fseek(fp, archiverhdr.hdrsize, SEEK_SET); while (fread(&archiver, archiverhdr.recsize, 1, fp) == 1) { if (archiver.available && strlen(archiver.marc) && strlen(archiver.farc)) { if (strcasecmp(archiver.name, temp) == 0) { /* Valid input, set new archiver */ Found = TRUE; break; } } } fclose(fp); if (Found) break; Enter(2); /* Invalid selection, please try again! */ pout(LIGHTGREEN, BLACK, (char *) Language(265)); Enter(2); /* Loop for new attempt */ } strncpy(exitinfo.Archiver, archiver.name, 6); /* Archiver now set to: */ snprintf(temp, 81, "%s %s", Language(89), exitinfo.Archiver); colour(WHITE, BLACK); PUTSTR(temp); Syslog('+', "New archiver %s", exitinfo.Archiver); WriteExitinfo(); free(temp); Enter(2); Pause(); }
/* * Change default protocol. */ void Chg_Protocol() { FILE *pProtConfig; int iProt, iFoundProt = FALSE, precno = 0; char *temp, Prot[2]; temp = calloc(PATH_MAX, sizeof(char)); ReadExitinfo(); Set_Protocol(exitinfo.sProtocol); Syslog('+', "Old protocol %s", sProtName); while(TRUE) { snprintf(temp, PATH_MAX, "%s/etc/protocol.data", getenv("FTND_ROOT")); if ((pProtConfig = fopen(temp, "r")) == NULL) { WriteError("$Can't open %s", temp); /* Protocol: Can't open protocol file. */ Enter(1); PUTSTR((char *) Language(262)); Enter(2); Pause(); free(temp); fclose(pProtConfig); return; } fread(&PROThdr, sizeof(PROThdr), 1, pProtConfig); Enter(1); /* Select your preferred protocol */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(263)); Enter(2); while (fread(&PROT, PROThdr.recsize, 1, pProtConfig) == 1) { if (PROT.Available && Access(exitinfo.Security, PROT.Level)) { colour(LIGHTBLUE, BLACK); PUTCHAR('('); colour(WHITE, BLACK); PUTSTR(PROT.ProtKey); colour(LIGHTBLUE, BLACK); snprintf(temp, 81, ") %-20s Efficiency %3d %%\r\n", PROT.ProtName, PROT.Efficiency); PUTSTR(temp); } } Enter(1); pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(264)); alarm_on(); iProt = toupper(Readkey()); PUTCHAR(iProt); snprintf(Prot, 2, "%c", iProt); fseek(pProtConfig, PROThdr.hdrsize, 0); while (fread(&PROT, PROThdr.recsize, 1, pProtConfig) == 1) { if ((strncmp(PROT.ProtKey, Prot, 1) == 0) && PROT.Available && Access(exitinfo.Security, PROT.Level)) { strcpy(sProtName, PROT.ProtName); strcpy(sProtUp, PROT.ProtUp); strcpy(sProtDn, PROT.ProtDn); strcpy(sProtAdvice, PROT.Advice); uProtInternal = PROT.Internal; iProtEfficiency = PROT.Efficiency; iFoundProt = TRUE; } else precno++; } fclose(pProtConfig); if (iProt == 13) { free(temp); return; } else { if (!iFoundProt) { Enter(2); pout(LIGHTGREEN, BLACK, (char *) Language(265)); Enter(2); /* Loop for new attempt */ } else { Setup(exitinfo.sProtocol, sProtName); Enter(1); /* Protocol now set to: */ pout(LIGHTGREEN, BLACK, (char *) Language(266)); PUTSTR(sProtName); Enter(2); Pause(); break; } } } Syslog('+', "New protocol %s", sProtName); WriteExitinfo(); free(temp); }
/* * Download files already tagged, called from the menu. */ void Download(void) { FILE *tf, *fd; int rc = 0, i, Count = 0, OldArea; char *local, *temp; int Size = 0, CostSize = 0, dsize; struct _fdbarea *fdb_area = NULL; down_list *dl = NULL, *tmpf; Enter(2); OldArea = iAreaNumber; WhosDoingWhat(DOWNLOAD, NULL); /* * Clean users tag directory. */ temp = calloc(PATH_MAX, sizeof(char)); snprintf(temp, PATH_MAX, "-rf %s/%s/tag", CFG.bbs_usersdir, exitinfo.Name); execute_pth((char *)"rm", temp, (char *)"/dev/null", (char *)"/dev/null", (char *)"/dev/null"); snprintf(temp, PATH_MAX, "%s/%s/tag", CFG.bbs_usersdir, exitinfo.Name); CheckDir(temp); if ((tf = fopen("taglist", "r+")) == NULL) { Syslog('+', "Download command but no files marked"); /* No files marked for download. */ pout(LIGHTRED, BLACK, (char *) Language(258)); Enter(2); Pause(); return; } local = calloc(PATH_MAX, sizeof(char)); /* Checking your marked downloads, please wait... */ pout(LIGHTMAGENTA, BLACK, (char *) Language(255)); Enter(2); ReadExitinfo(); while (fread(&Tag, sizeof(Tag), 1, tf) == 1) { if (Tag.Active) { SetFileArea(Tag.Area); /* * Check password for selected file FIXME: Where??? */ memset(&fdb, 0, sizeof(fdb)); if ((fdb_area = mbsedb_OpenFDB(Tag.Area, 30)) != NULL) { while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) { if (strcmp(fdb.LName, Tag.LFile) == 0) break; } mbsedb_CloseFDB(fdb_area); } if (strcmp(fdb.LName, Tag.LFile) == 0) { Syslog('b', "Found file %s in area %d", fdb.LName, Tag.Area); if (fdb.Deleted) { /* Sorry that file is unavailable for download */ snprintf(temp, 81, "%s (%s)", (char *) Language(248), fdb.LName); poutCR(CFG.HiliteF, CFG.HiliteB, temp); Tag.Active = FALSE; Syslog('+', "File %s in area %d unavailable for download, deleted", fdb.LName, Tag.Area); } } if (Tag.Active) { /* * Create/Append file description list while we're * busy checking. If the users doesn't want it we * can unlink it aftwerwards. We also insert CR * characters to please the poor DOS (M$oft) users. */ snprintf(local, PATH_MAX, "./tag/filedesc.%d", exitinfo.Downloads % 256); if ((fd = fopen(local, "a")) != NULL) { fprintf(fd, "%s (%s)\r\n", fdb.LName, fdb.Name); for (i = 0; i < 25; i++) { if (strlen(fdb.Desc[i]) > 1) fprintf(fd, " %s\r\n", fdb.Desc[i]); } fprintf(fd, "\r\n"); fclose(fd); Syslog('b', "Added info to %s", local); } else { WriteError("Can't add info to %s", local); } snprintf(local, PATH_MAX, "%s/%s", sAreaPath, Tag.LFile); add_download(&dl, local, Tag.LFile, Tag.Area, fdb.Size, FALSE); Home(); } if (!Tag.Active) { /* * Update the download active flag in the * taglist */ fseek(tf, - sizeof(Tag), SEEK_CUR); fwrite(&Tag, sizeof(Tag), 1, tf); Syslog('b', "Download file %s marked inactive in taglist", Tag.LFile); } else { /* * Count file and sizes. */ Count++; Size += fdb.Size; if (!area.Free) CostSize += fdb.Size; } } } fclose(tf); /* * If anything left to download... */ if (!Count) { SetFileArea(OldArea); unlink("taglist"); /* No files marked for download */ pout(LIGHTRED, BLACK, (char *) Language(258)); Enter(2); Pause(); free(temp); free(local); tidy_download(&dl); Syslog('+', "No files left to download"); return; } /* * Add descriptions file to the queue. */ snprintf(local, PATH_MAX, "%s/%s/tag/filedesc.%d", CFG.bbs_usersdir, exitinfo.Name, exitinfo.Downloads % 256); dsize = file_size(local); snprintf(temp, PATH_MAX, "filedesc.%d", exitinfo.Downloads % 256); add_download(&dl, local, temp, 0, dsize, TRUE); free(local); /* You have */ /* files( */ /* bytes) marked for download */ snprintf(temp, PATH_MAX, "%s %d %s%d %s", (char *) Language(249), Count, (char *) Language(280), Size, (char *) Language(281)); pout(YELLOW, BLACK, temp); Enter(2); if (!CheckBytesAvailable(CostSize)) { SetFileArea(OldArea); free(temp); tidy_download(&dl); return; } Pause(); if ((rc = download(dl))) { /* * Download error */ Syslog('+', "Download error rc=%d", rc); free(temp); tidy_download(&dl); return; } /* * Checking the successfull sent files, they are missing from * the ./tag directory. Failed files are still there. */ PUTCHAR('\r'); /* Updating download counters, please wait ... */ pout(LIGHTCYAN, BLACK, (char *) Language(352)); Count = Size = 0; /* * Update downloadcounters, don't log anything because the state * of sucessfull sent files is already logged by the download * function. */ if ((tf = fopen("taglist", "r+")) != NULL) { while (fread(&Tag, sizeof(Tag), 1, tf) == 1) { PUTCHAR('.'); if (Tag.Active) { for (tmpf = dl; tmpf; tmpf = tmpf->next) { if (strcmp(tmpf->remote, Tag.LFile) == 0) { if (tmpf->sent) { Tag.Active = FALSE; fseek(tf, - sizeof(Tag), SEEK_CUR); fwrite(&Tag, sizeof(Tag), 1, tf); /* * Update the download counter and the last download date. */ SetFileArea(Tag.Area); if ((fdb_area = mbsedb_OpenFDB(Tag.Area, 30))) { while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) { if (strcmp(fdb.LName, Tag.LFile) == 0) break; } Size += fdb.Size; fdb.TimesDL++; fdb.LastDL = time(NULL); if (mbsedb_LockFDB(fdb_area, 30)) { fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR); fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp); mbsedb_UnlockFDB(fdb_area); } mbsedb_CloseFDB(fdb_area); Count++; } } break; } } } } fclose(tf); } Enter(2); /* * Update the users record. */ ReadExitinfo(); exitinfo.Downloads += Count; /* Increase download counter */ mib_downloads += Count; exitinfo.DownloadK += (Size / 1024); /* Increase amount download today */ mib_kbdownload += (Size / 1024); /* * Minus the amount downloaded today from downloadktoday * if less than zero, it won't let the user download anymore. */ if (LIMIT.DownK || LIMIT.DownF) { exitinfo.DownloadKToday -= (Size / 1024); } WriteExitinfo(); Pause(); SetFileArea(OldArea); free(temp); tidy_download(&dl); }
/* * Change character set. */ void Chg_Charset() { int i; char *temp; temp = calloc(81, sizeof(char)); ReadExitinfo(); Syslog('+', "Old character set %s", getftnchrs(exitinfo.Charset)); while(TRUE) { Enter(1); /* Select your preferred character set */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(23)); Enter(2); colour(LIGHTBLUE, BLACK); for (i = (FTNC_NONE + 1); i <= FTNC_MAXCHARS; i++) { colour(LIGHTBLUE, BLACK); snprintf(temp, 81, "%2d ", i); PUTSTR(temp); colour(LIGHTCYAN, BLACK); snprintf(temp, 81, "%-9s ", getftnchrs(i)); PUTSTR(temp); colour(LIGHTMAGENTA, BLACK); snprintf(temp, 81, "%s\r\n", getchrsdesc(i)); PUTSTR(temp); } Enter(1); /* Select character set (Enter to Quit): */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(24)); Getnum(temp, 2); if (((strcmp(temp, "")) == 0) && (exitinfo.Charset != FTNC_NONE)) { free(temp); return; } i = atoi(temp); if ((i > FTNC_NONE) && (i <= FTNC_MAXCHARS)) { exitinfo.Charset = i; Syslog('+', "New character set %s", getftnchrs(exitinfo.Charset)); WriteExitinfo(); setlocale(LC_CTYPE, getlocale(exitinfo.Charset)); utf8 = (exitinfo.Charset == FTNC_UTF8); Syslog('b', "setlocale(LC_CTYPE, NULL) returns \"%s\"", printable(setlocale(LC_CTYPE, NULL), 0)); Enter(2); colour(LIGHTGREEN, BLACK); /* Character set now set to: */ snprintf(temp, 81, "%s%s", (char *) Language(25), getftnchrs(i)); PUTSTR(temp); free(temp); Enter(2); Pause(); return; } Enter(2); /* Invalid selection, please try again! */ pout(LIGHTRED, BLACK, (char *) Language(265)); Enter(2); } }
void Chg_Password() { char *temp1, *temp2, *args[16]; temp1 = calloc(PATH_MAX, sizeof(char)); temp2 = calloc(PATH_MAX, sizeof(char)); ReadExitinfo(); DisplayFile((char *)"password"); Enter(1); /* Old password: */ language(WHITE, BLACK, 120); colour(CFG.InputColourF, CFG.InputColourB); Getpass(temp1); if (!strcmp(exitinfo.Password, temp1)) { while (TRUE) { Enter(1); /* New password: */ language(LIGHTBLUE, BLACK, 121); colour(CFG.InputColourF, CFG.InputColourB); Getpass(temp1); if((strlen(temp1)) >= CFG.password_length) { Enter(1); /* Confirm new password: */ language(LIGHTBLUE, BLACK, 122); colour(CFG.InputColourF, CFG.InputColourB); Getpass(temp2); if(( strcmp(temp1,temp2)) != 0) { /* Passwords do not match! */ Enter(2); language(LIGHTRED, BLACK, 123); Enter(1); } else { break; } } else { colour(LIGHTRED, BLACK); /* Your password must contain at least %d characters! Try again.*/ snprintf(temp2, PATH_MAX, "\r\n%s%d %s\r\n\r\n", (char *) Language(42), CFG.password_length, (char *) Language(43)); PUTSTR(temp2); } } Syslog('+', "%s/bin/ftnpasswd %s ******", getenv("FTND_ROOT"), exitinfo.Name); snprintf(temp1, PATH_MAX, "%s/bin/ftnpasswd", getenv("FTND_ROOT")); memset(args, 0, sizeof(args)); args[0] = temp1; args[1] = exitinfo.Name; args[2] = temp2; args[3] = NULL; if (execute(args, (char *)"/dev/null", (char *)"/dev/null", (char *)"/dev/null") != 0) { WriteError("Failed to set new Unix password"); } else { memset(&exitinfo.Password, 0, sizeof(exitinfo.Password)); strcpy(exitinfo.Password, temp2); exitinfo.tLastPwdChange = time(NULL); Enter(1); /* Password Change Successful */ language(LIGHTGREEN, BLACK, 124); Syslog('+', "User changed his password"); WriteExitinfo(); } } else { Enter(1); /* Old password incorrect! */ language(LIGHTRED, BLACK, 125); } free(temp1); free(temp2); Enter(2); Pause(); }
/* * Save the message to disk. */ int Save_Email(int IsReply) { int i; char *p, *temp; unsigned int crc = -1; int id; FILE *fp; if (Line < 2) return TRUE; if (!Open_Msgbase(sMailpath, 'w')) { return FALSE; } Msg.Arrived = time(NULL) - (gmt_offset((time_t)0) * 60); Msg.Written = Msg.Arrived; Msg.Local = TRUE; Msg.Netmail = TRUE; temp = calloc(PATH_MAX, sizeof(char)); /* * Add header lines */ snprintf(temp, PATH_MAX, "\001Date: %s", rfcdate(Msg.Written)); MsgText_Add2(temp); snprintf(temp, PATH_MAX, "\001From: %s", Msg.From); MsgText_Add2(temp); snprintf(temp, PATH_MAX, "\001Subject: %s", Msg.Subject); MsgText_Add2(temp); snprintf(temp, PATH_MAX, "\001Sender: %s", Msg.From); MsgText_Add2(temp); snprintf(temp, PATH_MAX, "\001To: %s", Msg.To); MsgText_Add2(temp); MsgText_Add2((char *)"\001MIME-Version: 1.0"); if (exitinfo.Charset != FTNC_NONE) { snprintf(temp, PATH_MAX, "\001Content-Type: text/plain; charset=%s", getrfcchrs(exitinfo.Charset)); } else { snprintf(temp, PATH_MAX, "\001Content-Type: text/plain; charset=iso8859-1"); } MsgText_Add2(temp); MsgText_Add2((char *)"\001Content-Transfer-Encoding: 8bit"); snprintf(temp, PATH_MAX, "\001X-Mailreader: MBSE BBS %s", VERSION); MsgText_Add2(temp); p = calloc(81, sizeof(char)); id = sequencer(); snprintf(p, 81, "<%08x@%s>", id, CFG.sysdomain); snprintf(temp, PATH_MAX, "\001Message-id: %s", p); MsgText_Add2(temp); Msg.MsgIdCRC = upd_crc32(temp, crc, strlen(temp)); free(p); if (IsReply) { snprintf(temp, PATH_MAX, "\001In-reply-to: %s", Msg.Replyid); MsgText_Add2(temp); crc = -1; Msg.ReplyCRC = upd_crc32(temp, crc, strlen(temp)); } else Msg.ReplyCRC = 0xffffffff; /* * Add message text */ for (i = 1; i < Line; i++) { MsgText_Add2(Message[i]); } /* * Add signature. */ snprintf(temp, PATH_MAX, "%s/%s/.signature", CFG.bbs_usersdir, exitinfo.Name); if ((fp = fopen(temp, "r"))) { Syslog('m', " Add .signature"); MsgText_Add2((char *)""); while (fgets(temp, 80, fp)) { Striplf(temp); MsgText_Add2(temp); } fclose(fp); MsgText_Add2((char *)""); } MsgText_Add2(TearLine()); /* * Save if to disk */ Msg_AddMsg(); Msg_UnLock(); ReadExitinfo(); exitinfo.iPosted++; mib_posted++; WriteExitinfo(); do_mailout = TRUE; LC_Wrote = TRUE; Syslog('+', "Email (%ld) to \"%s\", \"%s\", in mailbox", Msg.Id, Msg.To, Msg.Subject); Enter(1); /* Saving message to disk */ snprintf(temp, 81, "%s(%d)", (char *) Language(202), Msg.Id); pout(CFG.HiliteF, CFG.HiliteB, temp); Enter(2); sleep(2); /* * Add quick mailscan info */ snprintf(temp, PATH_MAX, "%s/tmp/netmail.jam", getenv("MBSE_ROOT")); if ((fp = fopen(temp, "a")) != NULL) { fprintf(fp, "%s/%s/mailbox %u\n", CFG.bbs_usersdir, exitinfo.Name, Msg.Id); fclose(fp); } free(temp); Close_Msgbase(sMailpath); return TRUE; }
/* * Function will upload to users home directory */ int Upload_Home() { char *temp, *arc; int rc = 0, Count = 0; up_list *up = NULL, *tmpf; WhosDoingWhat(UPLOAD, NULL); temp = calloc(PATH_MAX, sizeof(char)); clear(); Enter(2); rc = upload(&up); if (rc) { Syslog('+', "Upload home failed, rc=%d", rc); Home(); return 1; } Syslog('b', "Start checking uploaded files"); Enter(2); pout(CFG.UnderlineColourF, CFG.UnderlineColourB, (char *)"Checking your upload(s)"); Enter(2); for (tmpf = up; tmpf; tmpf = tmpf->next) { snprintf(temp, PATH_MAX, "%s/%s/upl", CFG.bbs_usersdir, exitinfo.Name); chdir(temp); Syslog('b', "Checking upload %s", tmpf->filename); if ((arc = GetFileType(tmpf->filename)) == NULL) { /* * If the filetype is unknown, it is probably * a textfile or so. Import it direct. */ Syslog('b', "Unknown file type"); ImportHome(basename(tmpf->filename)); Count++; } else { /* * We figured out the type of the uploaded file. */ Syslog('b', "File type is %s", arc); /* * MS-DOS executables are handled direct. */ if ((strcmp("EXE", arc) == 0) || (strcmp("COM", arc) == 0)) { if (!ScanDirect(basename(tmpf->filename))) { ImportHome(basename(tmpf->filename)); Count++; } } else { switch(ScanArchive(basename(tmpf->filename), arc)) { case 0: ImportHome(basename(tmpf->filename)); Count++; break; case 1: break; case 2: break; case 3: /* * No valid unarchiver found, just import */ ImportHome(basename(tmpf->filename)); Count++; break; } } } } Home(); ReadExitinfo(); exitinfo.Uploads += Count; mib_uploads += Count; WriteExitinfo(); tidy_upload(&up); Pause(); free(temp); return rc; }
/* * Update a variable in the exitinfo file. */ void Setup(char *Option, char *variable) { ReadExitinfo(); strcpy(Option, variable); WriteExitinfo(); }
int Chg_Language(int NewMode) { FILE *pLang; int iLang, iFoundLang = FALSE; char *temp; temp = calloc(PATH_MAX, sizeof(char)); if (!NewMode) ReadExitinfo(); while(TRUE) { snprintf(temp, PATH_MAX, "%s/etc/language.data", getenv("FTND_ROOT")); if(( pLang = fopen(temp, "r")) == NULL) { WriteError("$Can't open %s", temp); snprintf(temp, 81, "\nFATAL: Can't open language file\n\n"); PUTSTR(temp); Pause(); free(temp); return 0; } fread(&langhdr, sizeof(langhdr), 1, pLang); colour(CFG.HiliteF, CFG.HiliteB); /* Select your preferred language */ snprintf(temp, 81, "\r\n%s\r\n\r\n", (char *) Language(378)); PUTSTR(temp); iLang = 6; colour(LIGHTBLUE, BLACK); while (fread(&lang, langhdr.recsize, 1, pLang) == 1) if (lang.Available) { colour(LIGHTMAGENTA, BLACK); snprintf(temp, 81, "(%s)", lang.LangKey); PUTSTR(temp); colour(DARKGRAY, BLACK); snprintf(temp, 81, " %c ", 46); PUTSTR(temp); colour(CYAN, BLACK); snprintf(temp, 81, "%-29s ", lang.Name); PUTSTR(temp); iLang++; if ((iLang % 2) == 0) { PUTCHAR('\r'); PUTCHAR('\n'); } } Enter(1); colour(CFG.HiliteF, CFG.HiliteB); /* Select language: */ snprintf(temp, 81, "\n%s", (char *) Language(379)); PUTSTR(temp); alarm_on(); iLang = toupper(Readkey()); PUTCHAR(iLang); fseek(pLang, langhdr.hdrsize, 0); while (fread(&lang, langhdr.recsize, 1, pLang) == 1) { strcpy(lang.LangKey,tu(lang.LangKey)); if ((lang.LangKey[0] == iLang) && (lang.Available)) { strcpy(current_language, lang.lc); iFoundLang = TRUE; break; } } fclose(pLang); if(!iFoundLang) { Enter(2); /* Invalid selection, please try again! */ pout(LIGHTGREEN, BLACK, (char *) Language(265)); Enter(2); } else { exitinfo.iLanguage = iLang; strcpy(current_language, lang.lc); Free_Language(); InitLanguage(); colour(LIGHTGREEN, BLACK); /* Language now set to" */ snprintf(temp, 81, "\r\n\r\n%s%s\r\n\r\n", (char *) Language(380), lang.Name); PUTSTR(temp); if (!NewMode) { Syslog('+', "Changed language to %s", lang.Name); WriteExitinfo(); Pause(); } break; } } free(temp); Enter(1); return iLang; }