Several bugfixes

This commit is contained in:
Michiel Broek 2002-07-08 19:40:22 +00:00
parent bed48c9d4e
commit e04792e4cb
8 changed files with 801 additions and 776 deletions

View File

@ -4,12 +4,28 @@ $Id$
v0.35.03 06-Jul-2002
lang:
Corrected a spelling error in the Dutch language file.
mbcico:
Changed IsDoing information.
newuser:
Check for Unix accounts is now case sensitive.
Check existing usernames now also checks handles.
mbsebbs:
Check existing usernames now also checks handles.
When a user paged the sysop for a chat, after the timer was
expired, the bbs crashed.
mbtask:
Changed logging of multiple logmessages that are equal.
Changed semafore debug logmessages.
Fixed log problem not always showing the Call flag.
Now forces callmode to None if the callflag was cleared.
The test to add a node to the calllist now also checks the
internal call flag.
v0.35.02 22-Jun-2002 - 06-Jul-2002

View File

@ -380,7 +380,7 @@ JN|Zeker weten? [J/n]:
|Kies taal:
|De taal is nu:
|Het systeem zal nu een "Unix gebruikersnaam" vragen
|Uw "Unix gerbuikersnaam" is gemaakt, U kunt dit de volgende keer gebruiken.
|Uw "Unix gebruikersnaam" is gemaakt, U kunt dit de volgende keer gebruiken.
|Geef een inlog naam (Maximaal 8 karakters, kleine letters)
|bv. Piet Snot, login = psnot
|login >

View File

@ -101,7 +101,7 @@ char *adate(time_t now)
struct tm ptm;
if (now == 0L) {
sprintf(buf, "N/A");
sprintf(buf, " ");
} else {
ptm = *localtime(&now);
sprintf(buf, "%02d-%02d-%04d %02d:%02d", ptm.tm_mday, ptm.tm_mon +1, ptm.tm_year + 1900,
@ -148,7 +148,7 @@ void MakeStat(void)
fseek(fi, fileptr, SEEK_SET);
MacroVars("b", "s", mgroup.Name);
MacroVars("c", "s", mgroup.Comment);
MacroVars("d", "s", aka2str(mgroup.UseAka));
MacroVars("d", "s", mgroup.UseAka.zone ? aka2str(mgroup.UseAka):" ");
MacroVars("e", "s", adate(mgroup.LastDate));
MacroVars("f", "d", mgroup.MsgsRcvd.lweek);
MacroVars("g", "d", mgroup.MsgsRcvd.month[Lm]);
@ -227,7 +227,7 @@ void MakeStat(void)
fseek(fi, fileptr, SEEK_SET);
MacroVars("b", "s", fgroup.Name);
MacroVars("c", "s", fgroup.Comment);
MacroVars("d", "s", aka2str(fgroup.UseAka));
MacroVars("d", "s", fgroup.UseAka.zone ? aka2str(fgroup.UseAka):" ");
MacroVars("e", "s", adate(fgroup.LastDate));
MacroVars("f", "d", fgroup.Files.lweek);
MacroVars("g", "d", fgroup.KBytes.lweek);
@ -343,7 +343,7 @@ void MakeStat(void)
fseek(fi, fileptr, SEEK_SET);
if (!strcmp(hist.aka.domain, "(null)"))
hist.aka.domain[0] = '\0';
MacroVars("c", "s", hist.aka.zone ? aka2str(hist.aka):"N/A");
MacroVars("c", "s", hist.aka.zone ? aka2str(hist.aka):" ");
MacroVars("d", "s", hist.system_name);
MacroVars("e", "s", hist.sysop);
MacroVars("f", "s", hist.location);

View File

@ -78,29 +78,24 @@ int CheckStatus()
/*
* Function to check if UserName exists and returns a 0 or 1
* Function to check if UserName/Handle exists and returns a 0 or 1
*/
int CheckName(char *Name)
{
FILE *fp;
int Status = FALSE;
char *temp, *temp1;
char *temp;
struct userhdr ushdr;
struct userrec us;
temp = calloc(PATH_MAX, sizeof(char));
temp1 = calloc(81, sizeof(char));
strcpy(temp1, tl(Name));
sprintf(temp, "%s/etc/users.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp,"rb")) != NULL) {
fread(&ushdr, sizeof(ushdr), 1, fp);
while (fread(&us, ushdr.recsize, 1, fp) == 1) {
strcpy(temp, tl(us.sUserName));
if((strcmp(temp, temp1)) == 0) {
if ((strcasecmp(Name, us.sUserName) == 0) || (strcasecmp(Name, us.sHandle) == 0)) {
Status = TRUE;
break;
}
@ -109,7 +104,6 @@ int CheckName(char *Name)
}
free(temp);
free(temp1);
return Status;
}

View File

@ -74,14 +74,11 @@ int do_mailout = FALSE; /* Just for linking */
int newuser()
{
FILE *pUsrConfig;
int i, x, Found, iLang, recno = 0, Count = 0;
int i, x, Found, iLang, recno = 0, Count = 0, badname;
unsigned long crc;
char temp[PATH_MAX], *FullName;
char *temp1, *temp2;
char *Phone1, *Phone2;
char temp[PATH_MAX], *FullName, *temp1, *temp2, *Phone1, *Phone2;
long offset;
struct userrec us;
int badname;
IsDoing("New user login");
Syslog('+', "Newuser registration");
@ -141,6 +138,7 @@ int newuser()
*/
badname = (BadNames(temp) || (CheckName(temp) || (strchr(temp, ' ') == NULL)));
if (badname) {
/* That login name already exists, please choose another one. */
language(LIGHTRED, BLACK, 386);
Enter(1);
}
@ -157,14 +155,14 @@ int newuser()
fflush(stdout);
alarm_on();
Getpass(temp1);
if((x = strlen(temp1)) >= CFG.password_length) {
if ((x = strlen(temp1)) >= CFG.password_length) {
Enter(1);
/* Please enter password again : */
language(LIGHTCYAN, BLACK, 40);
fflush(stdout);
alarm_on();
Getpass(temp2);
if((i = strcmp(temp1,temp2)) != 0) {
if ((i = strcmp(temp1,temp2)) != 0) {
Enter(2);
/* Your passwords do not match! Try again. */
language(LIGHTRED, BLACK, 41);
@ -195,7 +193,7 @@ int newuser()
l_date = localtime(&Time_Now);
ltime = time(NULL);
if(CFG.iAnsi) {
if (CFG.iAnsi) {
Enter(2);
/* Do you want ANSI and graphics mode [Y/n]: */
language(LIGHTGRAY, BLACK, 44);
@ -260,7 +258,7 @@ int newuser()
break;
}
if( strlen(temp) < 6) {
if (strlen(temp) < 6) {
Enter(1);
/* Please enter a proper phone number */
language(LIGHTRED, BLACK, 47);
@ -273,7 +271,7 @@ int newuser()
}
} /* End of if Statement */
if(!CFG.iDataPhone)
if (!CFG.iDataPhone)
printf("\n");
if (CFG.iLocation) {
@ -283,13 +281,13 @@ int newuser()
language(YELLOW, BLACK, 49);
colour(CFG.InputColourF, CFG.InputColourB);
alarm_on();
if (CFG.iCapLocation) { /* Cap Location is turn on, Capitalise first letter */
if (CFG.iCapLocation) { /* Cap Location is turned on, Capitalise first letter */
fflush(stdout);
GetnameNE(temp, 24);
} else
GetstrC(temp, 80);
if( strlen(temp) < CFG.CityLen) {
if (strlen(temp) < CFG.CityLen) {
Enter(1);
/* Please enter a longer location */
language(LIGHTRED, BLACK, 50);
@ -328,6 +326,7 @@ int newuser()
}
if (CFG.iHandle) {
do {
Enter(1);
/* Enter a handle (Enter to Quit): */
language(LIGHTRED, BLACK, 412);
@ -336,16 +335,24 @@ int newuser()
alarm_on();
Getname(temp, 34);
badname = (BadNames(temp) || CheckName(temp));
if (badname) {
/* That login name already exists, please choose another one. */
language(LIGHTRED, BLACK, 386);
Enter(1);
} else {
if(strcmp(temp, "") == 0)
strcpy(usrconfig.sHandle, "");
else
strcpy(usrconfig.sHandle, temp);
}
} while (badname);
}
/*
* Note, the users database always contains the english sex
*/
if(CFG.iSex) {
if (CFG.iSex) {
while (TRUE) {
Enter(1);
/* What is your sex? (M)ale or (F)emale: */
@ -361,8 +368,7 @@ int newuser()
pout(CFG.InputColourF, CFG.InputColourB, (char *) Language(52));
Enter(1);
break;
} else
if (i == Keystroke(51, 1)) {
} else if (i == Keystroke(51, 1)) {
/* Female */
sprintf(usrconfig.sSex, "Female");
pout(CFG.InputColourF, CFG.InputColourB, (char *) Language(53));
@ -521,15 +527,11 @@ int newuser()
fflush(stdout);
fflush(stdin);
if(CFG.iVoicePhone) {
if(TelephoneScan(Phone1, FullName))
if (CFG.iVoicePhone && TelephoneScan(Phone1, FullName))
Syslog('!', "Duplicate phone numbers found");
}
if(CFG.iDataPhone) {
if(TelephoneScan(Phone2, FullName))
if (CFG.iDataPhone && TelephoneScan(Phone2, FullName))
Syslog('!', "Duplicate phone numbers found");
}
free(temp1);
free(temp2);
@ -569,7 +571,7 @@ void Fast_Bye(int onsig)
unlink(temp);
free(temp);
colour(7, 0);
colour(LIGHTGRAY, BLACK);
fflush(stdout);
fflush(stdin);
sleep(3);
@ -605,74 +607,78 @@ char *NameGen(char *FidoName)
struct passwd *pw;
sUserName = calloc(10, sizeof(char));
Syslog('+', "NameGen(%s)", FidoName);
setpwent();
while ((strcmp(sUserName, "") == 0 || (pw = getpwnam(sUserName)) != NULL) || (strlen(sUserName) < 3)) {
colour(12, 0);
while ((strcmp(sUserName, "") == 0) || ((pw = getpwnam(sUserName)) != NULL) || (strlen(sUserName) < 3)) {
colour(LIGHTRED, BLACK);
printf("\n%s\n\n", (char *) Language(381));
colour(15, 0);
colour(WHITE, BLACK);
/* Please enter a login name (Maximum 8 characters) */
printf("\n%s\n", (char *) Language(383));
/* ie. John Doe, login = jdoe */
printf("%s\n", (char *) Language(384));
colour(10, 0);
colour(LIGHTGREEN, BLACK);
/* login > */
printf("%s", (char *) Language(385));
fflush(stdout);
fflush(stdin);
GetstrU(sUserName, 7);
setpwent();
if (pw = getpwnam(tl(sUserName)), pw != NULL) {
if ((pw = getpwnam(sUserName)) != NULL) {
/* That login name already exists, please choose another one. */
colour(12, 0);
colour(LIGHTRED, BLACK);
printf("\n%s\n", (char *) Language(386));
setpwent();
}
}
return tl(sUserName);
return sUserName;
}
/*
* Function will create the users name in the passwd file
*/
char *NameCreate(char *Name, char *Comment, char *Password)
{
char *PassEnt;
char *progname;
int err;
PassEnt = calloc(256, sizeof(char));
progname = calloc(PATH_MAX, sizeof(char));
/*
* Call mbuseradd, this is a special setuid root program to create
* unix acounts and home directories.
*/
sprintf(PassEnt, "%s/bin/mbuseradd %d %s \"%s\" %s",
getenv("MBSE_ROOT"), getgid(), Name, Comment, CFG.bbs_usersdir);
Syslog('+', "%s", PassEnt);
sprintf(progname, "%s/bin/mbuseradd %d %s \"%s\" %s", getenv("MBSE_ROOT"), getgid(), Name, Comment, CFG.bbs_usersdir);
Syslog('+', "%s", progname);
fflush(stdout);
fflush(stdin);
if (system(PassEnt) != 0) {
if ((err = system(progname))) {
perror("");
WriteError("Failed to create unix account");
free(PassEnt);
ExitClient(1);
}
sprintf(PassEnt, "%s/bin/mbpasswd -f %s %s", getenv("MBSE_ROOT"), Name, Password);
Syslog('+', "%s/bin/mbpasswd -f %s ******", getenv("MBSE_ROOT"), Name);
if (system(PassEnt) != 0) {
WriteError("Failed to set unix password");
free(PassEnt);
free(progname);
ExitClient(1);
}
colour(14, 0);
sprintf(progname, "%s/bin/mbpasswd -f %s %s", getenv("MBSE_ROOT"), Name, Password);
Syslog('+', "%s/bin/mbpasswd -f %s ******", getenv("MBSE_ROOT"), Name);
fflush(stdout);
fflush(stdin);
if ((err = system(progname))) {
perror("");
WriteError("Failed to set unix password");
free(progname);
ExitClient(1);
}
colour(YELLOW, BLACK);
/* Your "Unix Account" is created, you may use it the next time you call */
printf("\n%s\n", (char *) Language(382));
Syslog('+', "Created Unix account %s for %s", Name, Comment);
free(PassEnt);
free(progname);
return Name;
}
@ -684,7 +690,7 @@ char *NameCreate(char *Name, char *Comment, char *Password)
int BadNames(char *Username)
{
FILE *fp;
short iFoundName = FALSE;
int iFoundName = FALSE;
char *temp, *String, *User;
temp = calloc(PATH_MAX, sizeof(char));
@ -694,11 +700,11 @@ int BadNames(char *Username)
strcpy(User, tl(Username));
sprintf(temp, "%s/etc/badnames.ctl", getenv("MBSE_ROOT"));
if(( fp = fopen(temp, "r")) != NULL) {
while((fgets(String, 80, fp)) != NULL) {
if ((fp = fopen(temp, "r")) != NULL) {
while ((fgets(String, 80, fp)) != NULL) {
strcpy(String, tl(String));
Striplf(String);
if((strstr(User, String)) != NULL) {
if ((strstr(User, String)) != NULL) {
printf("\nSorry that name is not acceptable on this system\n");
iFoundName = TRUE;
break;
@ -728,10 +734,10 @@ int TelephoneScan(char *Number, char *Name)
struct userhdr uhdr;
struct userrec u;
temp = calloc(81, sizeof(char));
temp = calloc(PATH_MAX, sizeof(char));
sprintf(temp, "%s/etc/users.data", getenv("MBSE_ROOT"));
if(( fp = fopen(temp,"rb")) != NULL) {
if ((fp = fopen(temp,"rb")) != NULL) {
fread(&uhdr, sizeof(uhdr), 1, fp);
while (fread(&u, uhdr.recsize, 1, fp) == 1) {
@ -739,8 +745,7 @@ int TelephoneScan(char *Number, char *Name)
if ((strlen(u.sVoicePhone) && (strcmp(u.sVoicePhone, Number) == 0)) ||
(strlen(u.sDataPhone) && (strcmp(u.sDataPhone, Number) == 0))) {
Status = TRUE;
Syslog('b', "Dupe phones ref: \"%s\" voice: \"%s\" data: \"%s\"",
Number, u.sVoicePhone, u.sDataPhone);
Syslog('b', "Dupe phones ref: \"%s\" voice: \"%s\" data: \"%s\"", Number, u.sVoicePhone, u.sDataPhone);
Syslog('+', "Uses the same telephone number as %s", u.sUserName);
}
}

View File

@ -52,11 +52,9 @@
*/
void Page_Sysop(char *String)
{
int i;
FILE *pWritingDevice, *pBusy;
int iOpenDevice = FALSE; /* Flag to check if you can write to CFG.sChatDevice */
char *Reason;
char temp[81];
FILE *pWritingDevice;
int i, iOpenDevice = FALSE; /* Flag to check if you can write to CFG.sChatDevice */
char *Reason, temp[81];
Reason = calloc(81, sizeof(char));
@ -67,66 +65,66 @@ void Page_Sysop(char *String)
if (CFG.iAskReason) {
locate(6, 0);
colour(1, 0);
colour(BLUE, BLACK);
printf("%c", 213);
for(i = 0; i < 78; i++)
for (i = 0; i < 78; i++)
printf("%c", 205);
printf("%c ", 184);
printf("%c\n", 184);
colour(7, 0);
for(i = 0; i < 78; i++)
colour(LIGHTGRAY, BLACK);
for (i = 0; i < 78; i++)
printf("%c", 250);
printf("\n");
colour(1, 0);
colour(BLUE, BLACK);
printf("%c", 212);
for(i = 0; i < 78; i++)
for (i = 0; i < 78; i++)
printf("%c", 205);
printf("%c\n", 190);
locate(7, 2);
colour(7, 0);
colour(LIGHTGRAY, BLACK);
fflush(stdout);
GetPageStr(temp, 76);
colour(1, 0);
colour(BLUE, BLACK);
printf("%c", 212);
for(i = 0; i < 78; i++)
for (i = 0; i < 78; i++)
printf("%c", 205);
printf("%c\n", 190);
if((strcmp(temp, "")) == 0)
if ((strcmp(temp, "")) == 0)
return;
Syslog('+', "Chat Reason: %s", temp);
strcpy(Reason, temp);
}
if (access("/tmp/.BusyChatting", F_OK) == 0) {
if((pBusy = fopen("/tmp/.BusyChatting", "r")) == NULL)
WriteError("Unable to open BusyChatting file", pTTY);
else {
fscanf(pBusy, "%10s", temp);
fclose(pBusy);
}
colour(13, 0);
printf("%s%s\n", (char *) Language(152), temp);
pout(10, 0, (char *) Language(153));
Enter(2);
Syslog('+', "SysOp was busy chatting to user on %s", temp);
Pause();
free(Reason);
return;
}
// if (access("/tmp/.BusyChatting", F_OK) == 0) {
// if((pBusy = fopen("/tmp/.BusyChatting", "r")) == NULL)
// WriteError("Unable to open BusyChatting file", pTTY);
// else {
// fscanf(pBusy, "%10s", temp);
// fclose(pBusy);
// }
// colour(13, 0);
// printf("%s%s\n", (char *) Language(152), temp);
// pout(10, 0, (char *) Language(153));
// Enter(2);
// Syslog('+', "SysOp was busy chatting to user on %s", temp);
// Pause();
// free(Reason);
// return;
// }
CFG.iMaxPageTimes--;
if(CFG.iMaxPageTimes <= 0) {
if (CFG.iMaxPageTimes <= 0) {
if (!DisplayFile((char *)"maxpage")) {
/* If i is FALSE display hard coded message */
Enter(1);
pout(15, 0, (char *) Language(154));
pout(WHITE, BLACK, (char *) Language(154));
Enter(2);
}
@ -134,20 +132,20 @@ void Page_Sysop(char *String)
Pause();
} else {
locate(14, ((80 - strlen(String) ) / 2 - 2));
pout(15, 0, (char *)"[");
pout(7, 0, String);
pout(15, 0, (char *)"]");
pout(WHITE, BLACK, (char *)"[");
pout(LIGHTGRAY, BLACK, String);
pout(WHITE, BLACK, (char *)"]");
locate(16, ((80 - CFG.iPageLength) / 2 - 2));
pout(15, 0, (char *)"[");
colour(1, 0);
for(i = 0; i < CFG.iPageLength; i++)
pout(WHITE, BLACK, (char *)"[");
colour(BLUE, BLACK);
for (i = 0; i < CFG.iPageLength; i++)
printf("%c", 176);
pout(15, 0, (char *)"]");
pout(WHITE, BLACK, (char *)"]");
locate(16, ((80 - CFG.iPageLength) / 2 - 2) + 1);
if((pWritingDevice = fopen(CFG.sChatDevice, "w")) != NULL) {
if ((pWritingDevice = fopen(CFG.sChatDevice, "w")) != NULL) {
fprintf(pWritingDevice, "\n\n\n%s is trying to page you on %s.\n", \
usrconfig.sUserName, pTTY);
@ -158,17 +156,18 @@ void Page_Sysop(char *String)
iOpenDevice = TRUE;
}
colour(9, 0);
for(i = 0; i < CFG.iPageLength; i++) {
colour(LIGHTBLUE, BLACK);
for (i = 0; i < CFG.iPageLength; i++) {
printf("\x07");
/* If there weren't any problems opening the writing device */
if(iOpenDevice)
if (iOpenDevice) {
fprintf(pWritingDevice, "\x07");
printf("%c", 219);
fflush(pWritingDevice);
}
printf("%c", 219);
fflush(stdout);
sleep(1);
if(access("/tmp/chatdev", R_OK) == 0) {
if (access("/tmp/chatdev", R_OK) == 0) {
fclose(pWritingDevice);
Chat();
free(Reason);
@ -176,9 +175,13 @@ void Page_Sysop(char *String)
}
}
if (iOpenDevice) {
fclose(pWritingDevice);
iOpenDevice = 0;
}
PageReason();
printf("\n\n\n");
Pause();
if (strlen(Reason))
SysopComment(Reason);
else
@ -247,11 +250,11 @@ void PageReason()
char *String;
char *temp;
temp = calloc(128, sizeof(char));
temp = calloc(PATH_MAX, sizeof(char));
String = calloc(81, sizeof(char));
sprintf(temp, "%s/page.asc", CFG.bbs_txtfiles);
if(( Page = fopen(temp, "r")) != NULL) {
if ((Page = fopen(temp, "r")) != NULL) {
while (( fgets(String, 80 ,Page)) != NULL)
Lines++;
@ -270,7 +273,7 @@ void PageReason()
Lines = 0;
while (( fgets(String,80,Page)) != NULL) {
if(Lines == j) {
if (Lines == j) {
Striplf(String);
locate(18, ((78 - strlen(String) ) / 2));
pout(15, 0, (char *)"[");
@ -283,7 +286,7 @@ void PageReason()
}
} /* End of Else */
if(!iFoundString) {
if (!iFoundString) {
/* Sysop currently is not available ... please leave a comment */
sprintf(String, "%s", (char *) Language(155));
locate(18, ((78 - strlen(String) ) / 2));

View File

@ -87,8 +87,9 @@ int check_calllist(void)
if (pots_calls || isdn_calls || inet_calls) {
call_work = 0;
for (tmp = alist; tmp; tmp = tmp->next) {
if (((tmp->callmode == CM_INET) && TCFG.max_tcp && internet) ||
((tmp->callmode == CM_ISDN) && isdn_lines) || ((tmp->callmode == CM_POTS) && pots_lines)) {
if ((((tmp->callmode == CM_INET) && TCFG.max_tcp && internet) ||
((tmp->callmode == CM_ISDN) && isdn_lines) || ((tmp->callmode == CM_POTS) && pots_lines)) &&
((tmp->flavors) & F_CALL)) {
call_work++;
/*

View File

@ -460,8 +460,6 @@ int outstat()
*/
tmp->flavors &= ~F_CALL;
}
if ((tmp->flavors) & F_CALL)
flstr[10]='C';
if (tmp->t1)
flstr[12] = tmp->t1;
if (tmp->t2)
@ -520,6 +518,14 @@ int outstat()
}
}
if ((tmp->flavors) & F_CALL)
flstr[10]='C';
else
/*
* Safety, clear callmode.
*/
tmp->callmode = CM_NONE;
/*
* Show callresult for this node.
*/