This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
deb-mbse/mbsebbs/misc.c

241 lines
5.8 KiB
C
Raw Normal View History

2001-08-17 05:46:24 +00:00
/*****************************************************************************
*
2001-11-08 22:45:15 +00:00
* $Id$
2001-08-17 05:46:24 +00:00
* Purpose ...............: Misc functions
*
*****************************************************************************
2002-01-07 19:16:03 +00:00
* Copyright (C) 1997-2002
2001-08-17 05:46:24 +00:00
*
* 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.
*
* MBSE 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 MBSE BBS; see the file COPYING. If not, write to the Free
2003-08-15 20:05:34 +00:00
* Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
2001-08-17 05:46:24 +00:00
*****************************************************************************/
2002-06-30 12:48:44 +00:00
#include "../config.h"
2001-08-17 05:46:24 +00:00
#include "../lib/libs.h"
#include "../lib/mbse.h"
#include "../lib/structs.h"
2002-01-07 19:16:03 +00:00
#include "../lib/users.h"
2001-08-17 05:46:24 +00:00
#include "../lib/records.h"
#include "../lib/clcomm.h"
#include "../lib/common.h"
2002-10-20 20:58:55 +00:00
#include "../lib/mberrors.h"
2001-08-17 05:46:24 +00:00
#include "funcs.h"
#include "input.h"
2001-08-17 05:46:24 +00:00
#include "language.h"
#include "misc.h"
#include "timeout.h"
#include "exitinfo.h"
2001-11-02 22:08:33 +00:00
extern char *StartTime; /* Time user logged in */
/*
* Last caller action flags
*/
int LC_Download = FALSE;
int LC_Upload = FALSE;
int LC_Read = FALSE;
int LC_Wrote = FALSE;
int LC_Chat = FALSE;
int LC_Olr = FALSE;
int LC_Door = FALSE;
2001-08-17 05:46:24 +00:00
int ChkFiles()
{
FILE *pCallerLog, *pUsersFile;
char *sDataFile;
time_t Now;
char *temp;
sDataFile = calloc(PATH_MAX, sizeof(char));
temp = calloc(PATH_MAX, sizeof(char));
sprintf(sDataFile, "%s/etc/sysinfo.data", getenv("MBSE_ROOT"));
chmod(sDataFile, 0660);
2001-08-17 05:46:24 +00:00
/*
* Check if users.data exists, if not create a new one.
*/
sprintf(temp, "%s/etc/users.data", getenv("MBSE_ROOT"));
2001-11-14 21:37:58 +00:00
if ((pUsersFile = fopen(temp,"rb")) == NULL) {
2001-08-17 05:46:24 +00:00
if((pUsersFile = fopen(temp,"wb")) == NULL) {
WriteError("$Can't create %s", temp);
2002-10-20 20:58:55 +00:00
ExitClient(MBERR_INIT_ERROR);
2001-08-17 05:46:24 +00:00
} else {
usrconfighdr.hdrsize = sizeof(usrconfighdr);
usrconfighdr.recsize = sizeof(usrconfig);
fwrite(&usrconfighdr, sizeof(usrconfighdr), 1, pUsersFile);
fclose(pUsersFile);
2001-11-14 21:37:58 +00:00
chmod(temp, 0660);
2001-08-17 05:46:24 +00:00
}
}
/*
* Check if sysinfo.data exists, if not, create a new one.
*/
2001-11-14 21:37:58 +00:00
if ((pCallerLog = fopen(sDataFile, "rb")) == NULL) {
2001-08-17 05:46:24 +00:00
if((pCallerLog = fopen(sDataFile, "wb")) == NULL)
WriteError("$ChkFiles: Can't create %s", sDataFile);
else {
memset((char *)&SYSINFO, 0, sizeof(SYSINFO));
2001-12-23 16:44:18 +00:00
Now = time(NULL);
2001-08-17 05:46:24 +00:00
SYSINFO.StartDate = Now;
rewind(pCallerLog);
fwrite(&SYSINFO, sizeof(SYSINFO), 1, pCallerLog);
fclose(pCallerLog);
2001-11-14 21:37:58 +00:00
chmod(sDataFile, 0660);
2001-08-17 05:46:24 +00:00
}
}
free(temp);
free(sDataFile);
return 1;
}
void DisplayLogo()
{
FILE *pLogo;
char *sString, *temp;
temp = calloc(PATH_MAX, sizeof(char));
sString = calloc(81, sizeof(char));
sprintf(temp, "%s/%s", CFG.bbs_txtfiles, CFG.welcome_logo);
if((pLogo = fopen(temp,"rb")) == NULL)
WriteError("$DisplayLogo: Can't open %s", temp);
else {
while( fgets(sString,80,pLogo) != NULL)
printf("%s", sString);
fclose(pLogo);
}
free(sString);
free(temp);
}
/*
* Update a variable in the exitinfo file.
*/
void Setup(char *Option, char *variable)
{
ReadExitinfo();
strcpy(Option, variable);
WriteExitinfo();
}
2001-11-02 22:08:33 +00:00
void SaveLastCallers()
2001-08-17 05:46:24 +00:00
{
FILE *pGLC;
char *sFileName;
char sFileDate[9];
char sDate[9];
struct stat statfile;
/*
* First check if we passed midnight, in that case we
* create a fresh file.
*/
sFileName = calloc(PATH_MAX, sizeof(char));
sprintf(sFileName,"%s/etc/lastcall.data", getenv("MBSE_ROOT"));
stat(sFileName, &statfile);
sprintf(sFileDate,"%s", StrDateDMY(statfile.st_mtime));
sprintf(sDate,"%s", (char *) GetDateDMY());
if ((strcmp(sDate,sFileDate)) != 0) {
unlink(sFileName);
Syslog('+', "Erased old lastcall.data");
}
/*
* Check if file exists, if not create the file and
* write the fileheader.
*/
if ((pGLC = fopen(sFileName, "r")) == NULL) {
if ((pGLC = fopen(sFileName, "w")) != NULL) {
LCALLhdr.hdrsize = sizeof(LCALLhdr);
LCALLhdr.recsize = sizeof(LCALL);
fwrite(&LCALLhdr, sizeof(LCALLhdr), 1, pGLC);
Syslog('+', "Created new lastcall.data");
}
fclose(pGLC);
}
chmod(sFileName, 0660);
2001-08-17 05:46:24 +00:00
2001-11-14 21:37:58 +00:00
if ((pGLC = fopen(sFileName,"a+")) == NULL) {
2001-08-17 05:46:24 +00:00
WriteError("$Can't open %s", sFileName);
return;
} else {
ReadExitinfo();
memset(&LCALL, 0, sizeof(LCALL));
sprintf(LCALL.UserName,"%s", exitinfo.sUserName);
sprintf(LCALL.Handle,"%s", exitinfo.sHandle);
sprintf(LCALL.Name, "%s", exitinfo.Name);
2001-11-02 22:08:33 +00:00
sprintf(LCALL.TimeOn,"%s", StartTime);
2001-08-17 05:46:24 +00:00
sprintf(LCALL.Device,"%s", pTTY);
LCALL.SecLevel = exitinfo.Security.level;
LCALL.Calls = exitinfo.iTotalCalls;
2001-11-02 22:08:33 +00:00
LCALL.CallTime = exitinfo.iConnectTime;
LCALL.Download = LC_Download;
LCALL.Upload = LC_Upload;
LCALL.Read = LC_Read;
LCALL.Wrote = LC_Wrote;
LCALL.Chat = LC_Chat;
LCALL.Olr = LC_Olr;
LCALL.Door = LC_Door;
2001-08-17 05:46:24 +00:00
sprintf(LCALL.Speed, "%s", ttyinfo.speed);
/* If true then set hidden so it doesn't display in lastcallers function */
LCALL.Hidden = exitinfo.Hidden;
sprintf(LCALL.Location,"%s", exitinfo.sLocation);
rewind(pGLC); /* ???????????? */
fwrite(&LCALL, sizeof(LCALL), 1, pGLC);
fclose(pGLC);
}
free(sFileName);
}
/* Gets Date for GetLastCallers(), returns DD:Mmm */
char *GLCdate()
{
static char GLcdate[15];
2001-12-23 16:44:18 +00:00
Time_Now = time(NULL);
2001-08-17 05:46:24 +00:00
l_date = localtime(&Time_Now);
sprintf(GLcdate,"%02d-", l_date->tm_mday);
strcat(GLcdate,GetMonth(l_date->tm_mon+1));
return(GLcdate);
}