Updates for new mbsebbs style

This commit is contained in:
Michiel Broek
2001-11-11 12:07:39 +00:00
parent e87e7c2ab6
commit d91305ad80
17 changed files with 222 additions and 314 deletions

View File

@@ -5,7 +5,7 @@
include ../Makefile.global
SRCS = bank.c commonio.c filesub.c language.c mbfbgen.c mbtoberep.c \
msgutil.c oneline.c pwcheck.c sgetpwent.c xmalloc.c bbslist.c \
msgutil.c oneline.c sgetpwent.c xmalloc.c bbslist.c \
email.c fsedit.c lineedit.c mblang.c mbuser.c myname.c page.c \
pwio.c shadowio.c bye.c encrypt.c funcs.c mail.c mbpasswd.c \
mbuseradd.c newuser.c pinfo.c rad64.c timecheck.c change.c \
@@ -15,22 +15,23 @@ SRCS = bank.c commonio.c filesub.c language.c mbfbgen.c mbtoberep.c \
door.c dispfile.c
HDRS = bank.h commonio.h filesub.h language.h mbsebbs.h misc.h offline.h \
putpwent.h salt.h timeout.h bbslist.h email.h fsedit.h lineedit.h \
mbstat.h msgutil.h oneline.h pwcheck.h sgetpwent.h user.h bye.h \
mbstat.h msgutil.h oneline.h sgetpwent.h user.h bye.h \
encrypt.h funcs.h mail.h mbuser.h myname.h page.h pwio.h shadowio.h \
xmalloc.h change.h exitinfo.h funcs4.h mball.h mbuseradd.h newuser.h \
pinfo.h rad64.h statetbl.h chat.h file.h getdef.h mbpasswd.h menu.h \
nextuser.h pop3.h safe.h timecheck.h mbnewusr.h input.h whoson.h \
door.h dispfile.h
MBSEBBS_OBJS = bank.o bbslist.o chat.o file.o funcs.o funcs4.o mail.o menu.o \
misc.o pinfo.o nextuser.o oneline.o page.o pwcheck.o fsedit.o \
misc.o pinfo.o nextuser.o oneline.o page.o fsedit.o \
bye.o change.o mbsebbs.o safe.o timeout.o user.o timecheck.o \
exitinfo.o filesub.o lineedit.o offline.o language.o msgutil.o \
pop3.o email.o input.o whoson.o door.o dispfile.o
MBSEBBS_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libmsgbase.a \
../lib/libdbase.a ../lib/libmbinet.a
MBNEWUSR_OBJS = mbnewusr.o newuser.o language.o bye.o timeout.o dispfile.o oneline.o \
timecheck.o exitinfo.o input.o misc.o funcs.o funcs4.o pwcheck.o change.o \
filesub.o mail.o email.o whoson.o msgutil.o pop3.o lineedit.o fsedit.o
MBNEWUSR_OBJS = mbnewusr.o newuser.o language.o timeout.o dispfile.o oneline.o \
timecheck.o input.o exitinfo.o mail.o email.o msgutil.o whoson.o \
pop3.o funcs.o misc.o lineedit.o fsedit.o funcs4.o change.o \
filesub.o
MBNEWUSR_LIBS = ../lib/libmemwatch.a ../lib/libclcomm.a ../lib/libcommon.a ../lib/libmsgbase.a \
../lib/libdbase.a ../lib/libmbinet.a
MBALL_OBJS = mball.o
@@ -160,7 +161,6 @@ mbfbgen.o: ../lib/libs.h ../lib/structs.h ../lib/records.h ../lib/common.h ../li
mbtoberep.o: ../lib/libs.h ../lib/structs.h
msgutil.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/msgtext.h ../lib/msg.h oneline.h msgutil.h
oneline.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h oneline.h funcs.h input.h language.h
pwcheck.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h pwcheck.h funcs4.h timeout.h
sgetpwent.o: ../config.h sgetpwent.h
xmalloc.o: ../config.h xmalloc.h
bbslist.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/clcomm.h ../lib/common.h bbslist.h funcs.h input.h language.h
@@ -179,11 +179,11 @@ funcs.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/co
mail.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/msgtext.h ../lib/clcomm.h ../lib/msg.h mail.h funcs.h input.h language.h misc.h timeout.h oneline.h exitinfo.h lineedit.h fsedit.h filesub.h msgutil.h pop3.h email.h whoson.h
mbpasswd.o: ../config.h encrypt.h rad64.h myname.h xmalloc.h pwio.h shadowio.h mbpasswd.h
mbuseradd.o: ../config.h mbuseradd.h
newuser.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/clcomm.h ../lib/common.h funcs4.h input.h pwcheck.h newuser.h language.h timeout.h change.h bye.h dispfile.h
newuser.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/clcomm.h ../lib/common.h funcs4.h input.h newuser.h language.h timeout.h change.h dispfile.h
pinfo.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h pinfo.h input.h
rad64.o: ../config.h rad64.h
timecheck.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/clcomm.h ../lib/common.h timecheck.h funcs.h funcs4.h misc.h bye.h exitinfo.h language.h
change.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h change.h dispfile.h funcs.h funcs4.h input.h language.h misc.h pwcheck.h timeout.h exitinfo.h bye.h
change.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h change.h dispfile.h funcs.h funcs4.h input.h language.h misc.h timeout.h exitinfo.h bye.h
exitinfo.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h funcs.h input.h language.h oneline.h misc.h bye.h timeout.h timecheck.h exitinfo.h
funcs4.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/clcomm.h ../lib/common.h ../lib/msg.h funcs4.h input.h misc.h timeout.h language.h
mball.o: ../lib/libs.h ../lib/structs.h ../lib/mbse.h ../lib/records.h ../lib/common.h ../lib/dbcfg.h ../lib/clcomm.h mball.h
@@ -202,8 +202,8 @@ misc.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/clc
offline.o: ../lib/libs.h ../lib/structs.h ../lib/mbse.h ../lib/records.h ../lib/bluewave.h ../lib/common.h ../lib/clcomm.h ../lib/msgtext.h ../lib/msg.h mail.h funcs.h funcs4.h input.h language.h file.h filesub.h exitinfo.h timeout.h msgutil.h pop3.h offline.h whoson.h
putpwent.o: ../config.h putpwent.h
salt.o: ../config.h rad64.h getdef.h
user.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h timeout.h user.h pwcheck.h dispfile.h funcs4.h input.h misc.h bye.h file.h mail.h change.h menu.h exitinfo.h language.h offline.h statetbl.h email.h
mbnewusr.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h mbnewusr.h funcs.h funcs4.h input.h language.h misc.h bye.h timeout.h newuser.h
user.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h timeout.h user.h dispfile.h funcs4.h input.h misc.h bye.h file.h mail.h change.h menu.h exitinfo.h language.h offline.h statetbl.h email.h
mbnewusr.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h mbnewusr.h funcs.h funcs4.h input.h language.h misc.h timeout.h newuser.h
input.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/clcomm.h ../lib/common.h input.h timeout.h language.h
whoson.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h input.h language.h exitinfo.h whoson.h
door.o: ../lib/libs.h ../lib/mbse.h ../lib/structs.h ../lib/records.h ../lib/common.h ../lib/clcomm.h input.h timeout.h exitinfo.h whoson.h door.h

View File

@@ -41,7 +41,6 @@
#include "input.h"
#include "language.h"
#include "misc.h"
#include "pwcheck.h"
#include "timeout.h"
#include "exitinfo.h"
#include "bye.h"
@@ -65,7 +64,7 @@ int Chg_Language(int NewMode)
printf("\nFATAL: Can't open language file\n\n");
Pause();
free(temp);
Quick_Bye(0);
return 0;
}
fread(&langhdr, sizeof(langhdr), 1, pLang);

View File

@@ -51,7 +51,7 @@
/*
* Copy usersrecord into ~/tmp/.bbs-exitinfo.tty
*/
void InitExitinfo()
int InitExitinfo()
{
FILE *pUsrConfig, *pExitinfo;
char *temp;
@@ -63,7 +63,7 @@ void InitExitinfo()
if ((pUsrConfig = fopen(temp,"r+b")) == NULL) {
WriteError("$Can't open %s for writing", temp);
free(temp);
return;
return FALSE;
}
fread(&usrconfighdr, sizeof(usrconfighdr), 1, pUsrConfig);
@@ -71,7 +71,7 @@ void InitExitinfo()
if(fseek(pUsrConfig, offset, 0) != 0) {
WriteError("$Can't move pointer in %s", temp);
free(temp);
Good_Bye(1);
return FALSE;
}
fread(&usrconfig, usrconfighdr.recsize, 1, pUsrConfig);
@@ -81,13 +81,16 @@ void InitExitinfo()
sprintf(temp, "%s/tmp/.bbs-exitinfo.%s", getenv("MBSE_ROOT"), pTTY);
mkdirs(temp);
if ((pExitinfo = fopen(temp, "w+b")) == NULL)
if ((pExitinfo = fopen(temp, "w+b")) == NULL) {
WriteError("$Can't open %s for writing", temp);
else {
free(temp);
return FALSE;
} else {
fwrite(&exitinfo, sizeof(exitinfo), 1, pExitinfo);
fclose(pExitinfo);
}
free(temp);
return TRUE;
}

View File

@@ -3,7 +3,7 @@
#ifndef _EXITINFO_H
#define _EXITINFO_H
void InitExitinfo(void); /* Create exitinfo */
int InitExitinfo(void); /* Create exitinfo */
void ReadExitinfo(void); /* Read Users Config in Memory */
void WriteExitinfo(void); /* Write Users config from memory */

View File

@@ -476,6 +476,66 @@ void GetnameNE(char *sStr, int iMaxlen)
/*
* Open up /dev/tty to get the password from the user
* because this is done in raw mode, it makes life a bit
* more difficult.
* This function gets a password from a user, upto Max_passlen
*/
void Getpass(char *theword)
{
unsigned char c = 0;
int counter = 0;
char password[Max_passlen+1];
/*
* Open the device that we want to read the password from, you can't use
* stdin as this might change in a pipe
*/
if ((ttyfd = open ("/dev/tty", O_RDWR)) < 0) {
perror("open 7");
ExitClient(1);
}
/* Set Raw mode so that the characters don't echo */
Setraw();
alarm_on();
/*
* Till the user presses ENTER or reaches the maximum length allowed
*/
while ((c != 13) && (counter < Max_passlen )) {
fflush(stdout);
c = Readkey(); /* Reads a character from the raw device */
if (((c == 8) || (c == KEY_DEL) || (c == 127)) && (counter != 0 )) { /* If its a BACKSPACE */
counter--;
password[counter] = '\0';
printf("\x008 \x008");
continue;
} /* Backtrack to fix the BACKSPACE */
if (((c == 8) || (c == KEY_DEL) || (c == 127)) && (counter == 0) ) {
printf("\x007");
continue;
} /* Don't Backtrack as we are at the begining of the passwd field */
if (isalnum(c)) {
password[counter] = c;
counter++;
printf("%c", CFG.iPasswd_Char);
}
}
Unsetraw(); /* Go normal */
close(ttyfd);
password[counter] = '\0'; /* Make sure the string has a NULL at the end*/
strcpy(theword,password);
}
void Pause()
{
int i, x;

View File

@@ -12,6 +12,7 @@ void Getname(char *, int); /* Get name & convert every 1st char to U/C */
void GetnameNE(char *, int); /* Get name & convert every 1st char to U/C */
void GetDate(char *, int); /* Get users birth date and check */
void GetPhone(char *, int); /* Get telephone number */
void Getpass(char *); /* Get a password from the user */
void Pause(void); /* Puts Pause on Screen and halts screen */

View File

@@ -471,7 +471,7 @@ void Post_Msg()
/*
* Localmail and Echomail may be addressed to All
*/
if ((msgs.Type == LOCALMAIL) || (msgs.Type == ECHOMAIL)) {
if ((msgs.Type == LOCALMAIL) || (msgs.Type == ECHOMAIL) || (msgs.Type == LIST)) {
if (strcasecmp(Msg.To, "all") == 0)
x = TRUE;
else {
@@ -672,7 +672,8 @@ int Save_Msg(int IsReply, faddr *Dest)
* Add quick mailscan info
*/
if (msgs.Type != LOCALMAIL) {
sprintf(temp, "%s/tmp/%smail.jam", getenv("MBSE_ROOT"), (msgs.Type == ECHOMAIL)? "echo" : "net");
sprintf(temp, "%s/tmp/%smail.jam", getenv("MBSE_ROOT"),
((msgs.Type == ECHOMAIL) || (msgs.Type == LIST))? "echo" : "net");
if ((fp = fopen(temp, "a")) != NULL) {
fprintf(fp, "%s %lu\n", msgs.Base, Msg.Id);
fclose(fp);
@@ -1413,7 +1414,8 @@ void QuickScan_Msgs()
if (Msg_Open(sMsgAreaBase)) {
for (i = MsgBase.Lowest; i <= MsgBase.Highest; i++) {
if (Msg_ReadHeader(i)) {
if (Msg_ReadHeader(i) && ((msgs.Type != NETMAIL) ||
((msgs.Type == NETMAIL) && ((IsMe(Msg.From)) || (IsMe(Msg.To)))))) {
colour(WHITE, BLACK);
printf("%-6lu", Msg.Id);
@@ -2120,6 +2122,7 @@ void MailStatus()
printf(" Net ");
break;
case LIST:
case ECHOMAIL:
printf(" Echo ");
break;

View File

@@ -40,7 +40,6 @@
#include "input.h"
#include "language.h"
#include "misc.h"
#include "bye.h"
#include "timeout.h"
#include "newuser.h"
@@ -48,7 +47,7 @@
extern int do_quiet; /* Logging quiet flag */
time_t t_start;
char *StartTime;
char *StartTime;
int main(int argc, char **argv)
@@ -132,7 +131,7 @@ int main(int argc, char **argv)
if ((tty = ttyname(0)) == NULL) {
WriteError("Not at a tty");
Quick_Bye(0);
Fast_Bye(0);
}
if (strncmp("/dev/", tty, 5) == 0)
@@ -168,7 +167,7 @@ int main(int argc, char **argv)
*/
if (CheckStatus() == FALSE) {
Syslog('+', "Kicking user out, the BBS is closed");
Quick_Bye(0);
Fast_Bye(0);
}
clear();
@@ -184,14 +183,12 @@ int main(int argc, char **argv)
*/
sprintf(temp, "%s/etc/ttyinfo.data", getenv("MBSE_ROOT"));
iNode = 0;
if ((pTty = fopen(temp, "r")) == NULL) {
WriteError("Can't read %s", temp);
} else {
fread(&ttyinfohdr, sizeof(ttyinfohdr), 1, pTty);
while (fread(&ttyinfo, ttyinfohdr.recsize, 1, pTty) == 1) {
iNode++;
if (strcmp(ttyinfo.tty, pTTY) == 0)
break;
}
@@ -200,9 +197,8 @@ int main(int argc, char **argv)
if ((strcmp(ttyinfo.tty, pTTY) != 0) || (!ttyinfo.available)) {
Syslog('+', "No BBS allowed on port \"%s\"", pTTY);
printf("No BBS on this port allowed!\n\n");
Quick_Bye(0);
Fast_Bye(0);
}
Syslog('b', "Node number %d", iNode);
/*
* Ask whether to display Connect String
@@ -220,7 +216,7 @@ int main(int argc, char **argv)
Pause();
newuser();
Quick_Bye(0);
Fast_Bye(0);
return 0;
}

View File

@@ -46,7 +46,6 @@
#include "timeout.h"
extern int do_quiet; /* Logging quiet flag */
extern char *Passwd;
time_t t_start;
@@ -211,7 +210,6 @@ int main(int argc, char **argv)
sprintf(sMailbox, "mailbox");
colour(LIGHTGRAY, BLACK);
Passwd = calloc(16, sizeof(char));
user();
return 0;
}

View File

@@ -177,6 +177,10 @@ void Add_Headkludges(faddr *dest, int IsReply)
break;
case LIST: Msg.Echomail = TRUE;
sprintf(Msg.FromAddress, "%s", aka2str(msgs.Aka));
break;
case ECHOMAIL: Msg.Echomail = TRUE;
sprintf(Msg.FromAddress, "%s", aka2str(msgs.Aka));
break;
@@ -279,7 +283,7 @@ void Add_Footkludges(int Quote)
#endif
MsgText_Add2(temp);
if (msgs.Type == ECHOMAIL) {
if ((msgs.Type == ECHOMAIL) || (msgs.Type == LIST)) {
/* RANDOM ORIGIN LINES IMPLEMENTEREN */
if (msgs.Aka.point)
sprintf(aka, "(%d:%d/%d.%d)", msgs.Aka.zone, msgs.Aka.net, msgs.Aka.node, msgs.Aka.point);

View File

@@ -35,15 +35,12 @@
#include "../lib/records.h"
#include "../lib/clcomm.h"
#include "../lib/common.h"
//#include "funcs.h"
#include "funcs4.h"
#include "input.h"
#include "pwcheck.h"
#include "newuser.h"
#include "language.h"
#include "timeout.h"
#include "change.h"
#include "bye.h"
#include "dispfile.h"
@@ -52,7 +49,8 @@ extern int do_quiet; /* No logging to the screen */
extern pid_t mypid; /* Pid of this program */
char UnixName[9]; /* Unix Name */
extern char *ieHandle; /* Users Handle */
extern time_t t_start; /* Program starttime */
int do_mailout = FALSE; /* Just for linking */
int newuser()
@@ -71,7 +69,8 @@ int newuser()
Syslog('+', "Newuser registration");
clear();
DisplayFile((char *)"newuser");
iLang = Chg_Language(TRUE);
if ((iLang = Chg_Language(TRUE)) == 0)
Fast_Bye(1);
Enter(1);
/* MBSE BBS - NEW USER REGISTRATION */
@@ -105,7 +104,7 @@ int newuser()
*/
if ((strcasecmp(temp, "off")) == 0) {
Syslog('+', "Quick \"off\" logout");
Quick_Bye(0);
Fast_Bye(0);
}
Count++;
@@ -115,7 +114,7 @@ int newuser()
language(CFG.HiliteF, CFG.HiliteB, 2);
Enter(2);
Syslog('!', "Exceeded maximum login attempts");
Quick_Bye(0);
Fast_Bye(0);
}
/*
@@ -376,8 +375,6 @@ int newuser()
iLang = atoi(temp2) + 1900;
sprintf(temp2, "%04d", iLang);
Syslog('-', "DOB: test %s %s", temp1, temp2);
if ((strcmp(temp1,temp2)) == 0) {
Enter(1);
/* Sorry you entered this year by mistake. */
@@ -445,6 +442,7 @@ int newuser()
usrconfig.tLastPwdChange = ltime; /* Days Since Last Password Change */
usrconfig.iLastFileArea = 1;
usrconfig.iLastMsgArea = 1;
sprintf(usrconfig.sProtocol, "%s", (char *) Language(65));
usrconfig.DoNotDisturb = FALSE;
@@ -536,3 +534,43 @@ int newuser()
}
void Fast_Bye(int onsig)
{
char *temp;
time_t t_end;
time(&t_end);
Syslog(' ', "MBNEWUSR finished in %s", t_elapsed(t_start, t_end));
socket_shutdown(mypid);
temp = calloc(PATH_MAX, sizeof(char));
sprintf(temp, "%s/tmp/mbsebbs%d", getenv("MBSE_ROOT"), getpid());
unlink(temp);
free(temp);
colour(7, 0);
fflush(stdout);
fflush(stdin);
sleep(3);
Free_Language();
free(pTTY);
#ifdef MEMWATCH
mwTerm();
#endif
exit(0);
}
/*
* This function is the same as Fast_Bye(), it's here
* to link the other modules properly.
*/
void Good_Bye(int onsig)
{
Fast_Bye(onsig);
}

View File

@@ -1,9 +1,10 @@
/* $Id$ */
#ifndef _NEWUSER_H
#define _NEWUSER_H
int newuser(void); /* Newuser function */
int newuser(void);
void Fast_Bye(int);
#endif

View File

@@ -573,6 +573,7 @@ void New_Area(long Area)
break;
case NETMAIL: printf(Language(393)); /* Netmail */
break;
case LIST:
case ECHOMAIL: printf(Language(394)); /* Echomail */
break;
case NEWS: printf(Language(395)); /* News */
@@ -1458,6 +1459,7 @@ void OLR_DownBW()
case NETMAIL: AreaInf.area_flags |= (INF_ECHO+INF_NETMAIL+INF_HASFILE);
break;
case LIST:
case ECHOMAIL: AreaInf.area_flags |= INF_ECHO;
break;

View File

@@ -1,103 +0,0 @@
/*****************************************************************************
*
* File ..................: bbs/pwcheck.c
* Purpose ...............: Password checking routines
* Last modification date : 18-Oct-2001
*
*****************************************************************************
* Copyright (C) 1997-2001
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10 Internet: mbroek@users.sourceforge.net
* 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
* Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*****************************************************************************/
#include "../lib/libs.h"
#include "../lib/mbse.h"
#include "../lib/structs.h"
#include "../lib/records.h"
#include "../lib/common.h"
#include "../lib/clcomm.h"
#include "pwcheck.h"
#include "funcs4.h"
#include "timeout.h"
/*
* Open up /dev/tty to get the password from the user
* because this is done in raw mode, it makes life a bit
* more difficult.
* This function gets a password from a user, upto Max_passlen
*/
int Getpass(char *theword)
{
unsigned char c = 0;
int counter = 0;
char password[Max_passlen+1];
/*
* Open the device that we want to read the password from, you can't use
* stdin as this might change in a pipe
*/
if ((ttyfd = open ("/dev/tty", O_RDWR)) < 0) {
perror("open 7");
ExitClient(1);
}
/* Set Raw mode so that the characters don't echo */
Setraw();
alarm_on();
/*
* Till the user presses ENTER or reaches the maximum length allowed
*/
while ((c != 13) && (counter < Max_passlen )) {
fflush(stdout);
c = Readkey(); /* Reads a character from the raw device */
if (((c == 8) || (c == KEY_DEL) || (c == 127)) && (counter != 0 )) { /* If its a BACKSPACE */
counter--;
password[counter] = '\0';
printf("\x008 \x008");
continue;
} /* Backtrack to fix the BACKSPACE */
if (((c == 8) || (c == KEY_DEL) || (c == 127)) && (counter == 0) ) {
printf("\x007");
continue;
} /* Don't Backtrack as we are at the begining of the passwd field */
if (isalnum(c)) {
password[counter] = c;
counter++;
printf("%c", CFG.iPasswd_Char);
}
}
Unsetraw(); /* Go normal */
close(ttyfd);
password[counter] = '\0'; /* Make sure the string has a NULL at the end*/
strcpy(theword,password);
return(0);
}

View File

@@ -1,8 +0,0 @@
#ifndef _PWCHECK_H
#define _PWCHECK_H
int Getpass(char *);
#endif

View File

@@ -38,7 +38,6 @@
#include "../lib/clcomm.h"
#include "timeout.h"
#include "user.h"
#include "pwcheck.h"
#include "dispfile.h"
#include "funcs4.h"
#include "input.h"
@@ -67,9 +66,6 @@ char *StartTime;
void SwapDate(char *, char *); /* Swap two Date strings around */
char *Passwd = NULL;
/*
* Function will take two date strings in the following format DD-MM-YYYY and
@@ -121,60 +117,54 @@ void user()
FILE *pUsrConfig, *pLimits;
int i, x;
int FoundName = FALSE, iFoundLimit = FALSE;
register int recno;
int lrecno = 0;
long l1, l2;
unsigned crc = 0;
char *token;
char temp[PATH_MAX];
char temp1[84];
char sGetName[84];
char *FileName;
char *handle;
struct passwd *pw;
char *sGetPassword;
long offset;
time_t LastLogin;
struct stat st;
char UserName[36];
char UserName[37];
int IsNew = FALSE;
recno=0;
grecno = 0;
Syslog('+', "Unixmode login: %s", sUnixName);
if ((pw = getpwnam(sUnixName)))
strcpy(sGetName, pw->pw_gecos);
/*
* If there are more fields in the passwd gecos field
* then only get the first field.
*/
if (strchr(sGetName, ',') != NULL)
strcpy(sGetName, strtok(sGetName, ","));
if (!(CheckName(sGetName))) {
printf("Unknown username: %s\n", sGetName);
/* FATAL ERROR: You are not in the BBS users file.*/
printf("%s\n", (char *) Language(389));
/* Please run 'newuser' to create an account */
printf("%s\n", (char *) Language(390));
Syslog('?', "FATAL: Could not find user in BBS users file.");
Syslog('?', " and system is using unix accounts\n");
free(Passwd);
ExitClient(0);
sprintf(temp, "%s/etc/users.data", getenv("MBSE_ROOT"));
if ((pUsrConfig = fopen(temp,"r+b")) == NULL) {
/*
* This should not happen.
*/
WriteError("$Can't open %s", temp);
printf("Can't open userfile, run \"newuser\" first");
ExitClient(0);
}
if (CFG.iCapUserName || SYSOP)
strcpy(sGetName, tlcap(sGetName));
fread(&usrconfighdr, sizeof(usrconfighdr), 1, pUsrConfig);
while (fread(&usrconfig, usrconfighdr.recsize, 1, pUsrConfig) == 1) {
if (strcmp(usrconfig.Name, sUnixName) == 0) {
FoundName = TRUE;
break;
} else
grecno++;
}
if (!FoundName) {
printf("Unknown username: %s\n", sUnixName);
/* FATAL ERROR: You are not in the BBS users file.*/
printf("%s\n", (char *) Language(389));
/* Please run 'newuser' to create an account */
printf("%s\n", (char *) Language(390));
Syslog('?', "FATAL: Could not find user in BBS users file.");
Syslog('?', " and system is using unix accounts\n");
ExitClient(0);
}
/*
* Copy username, split first and lastname.
*/
strcpy(UserName, tlcap(sGetName));
if ((strchr(sGetName,' ') == NULL && !CFG.iOneName)) {
token = strtok(sGetName, " ");
strcpy(UserName, usrconfig.sUserName);
if ((strchr(UserName,' ') == NULL && !CFG.iOneName)) {
token = strtok(UserName, " ");
strcpy(FirstName, token);
token = strtok(NULL, "\0");
i = strlen(token);
@@ -184,75 +174,16 @@ void user()
}
strcpy(LastName, token);
} else
strcpy(FirstName, sGetName);
strcpy(FirstName, UserName);
strcpy(UserName, usrconfig.sUserName);
Syslog('+', "%s On-Line at %s", UserName, ttyinfo.comment);
IsDoing("Just Logged In");
/*
* Check some essential files, create them if they don't exist.
*/
ChkFiles();
sprintf(temp, "%s/etc/users.data", getenv("MBSE_ROOT"));
if ((pUsrConfig = fopen(temp,"r+b")) == NULL) {
/*
* This should only happen once, when you build the BBS
*/
WriteError("Can't open users file: %s", temp);
printf("Can't open userfile, run \"newuser\" first");
free(Passwd);
ExitClient(0);
}
handle = calloc(40, sizeof(char));
fread(&usrconfighdr, sizeof(usrconfighdr), 1, pUsrConfig);
strcpy(temp1, UserName);
while (fread(&usrconfig, usrconfighdr.recsize, 1, pUsrConfig) == 1) {
strcpy(temp, usrconfig.sUserName);
strcpy(handle, usrconfig.sHandle);
if ((strcasecmp(temp, temp1) == 0 || strcasecmp(handle, temp1) == 0)) {
FoundName = TRUE;
break;
} else
recno++;
}
free(handle);
if (!FoundName) {
Syslog('+', "Name not in user file");
Enter(1);
/* Scanning User File */
language(LIGHTGRAY, BLACK, 3);
Enter(1);
usrconfig.GraphMode = FALSE;
DisplayFile((char *)"notfound");
Enter(1);
/* Name entered: */
language(LIGHTGRAY, BLACK, 5);
printf("%s\n\n", UserName);
/* Did you spell your name correctly [Y/n] */
language(WHITE, BLACK, 4);
fflush(stdout);
fflush(stdin);
i = toupper(Getone());
if (i == Keystroke(4, 0) || i == '\r') {
/*
* Here we run newuser.
*/
Syslog('+', "Creating user ...");
// recno = newuser(UserName);
Quick_Bye(0);
IsNew = TRUE;
} else {
Enter(1);
Syslog('+', "User spelt his/her name incorrectly");
user();
}
}
/*
* Setup users favourite language.
*/
@@ -270,10 +201,13 @@ void user()
*/
strcpy(temp, UserName);
strcpy(temp1, CFG.sysop_name);
if ((strcasecmp(temp1, temp)) == 0)
SYSOP = TRUE; /* If login name is sysop, set SYSOP true */
grecno = recno;
if ((strcasecmp(CFG.sysop_name, UserName)) == 0) {
/*
* If login name is sysop, set SYSOP true
*/
SYSOP = TRUE;
Syslog('+', "Sysop is online");
}
/*
* Is this a new user?
@@ -281,22 +215,11 @@ void user()
if (usrconfig.iTotalCalls == 0)
IsNew = TRUE;
offset = usrconfighdr.hdrsize + (recno * usrconfighdr.recsize);
if (fseek(pUsrConfig, offset, 0) != 0) {
printf("Can't move pointer there.");
getchar();
free(Passwd);
ExitClient(1);
}
fread(&usrconfig, usrconfighdr.recsize, 1, pUsrConfig);
TermInit(usrconfig.GraphMode);
sGetPassword = malloc(Max_passlen+1);
crc = usrconfig.iPassword;
sprintf(Passwd, "%s", usrconfig.Password);
IsDoing("Just Logged In");
/*
* Pause after logo screen.
*/
alarm_on();
Pause();
@@ -307,10 +230,6 @@ void user()
Syslog('+', "Setup default archiver ZIP");
}
recno = 0;
free(sGetPassword);
/*
* Check users date format. We do it strict as we
* need this to be good for several other purposes.
@@ -332,7 +251,7 @@ void user()
l1 = atol(Date1);
l2 = atol(Date2);
if(l1 >= l2 && l2 != 0) {
if (l1 >= l2 && l2 != 0) {
/*
* If Expiry Date is the same as today expire to
* Expire Sec level
@@ -351,12 +270,10 @@ void user()
/*
* Copy limits.data into memory
*/
FileName = calloc(84, sizeof(char));
sprintf(FileName, "%s/etc/limits.data", getenv("MBSE_ROOT"));
sprintf(temp, "%s/etc/limits.data", getenv("MBSE_ROOT"));
if(( pLimits = fopen(FileName,"rb")) == NULL) {
perror("");
WriteError("Can't open file: %s", FileName);
if ((pLimits = fopen(temp,"rb")) == NULL) {
WriteError("$Can't open %s", temp);
} else {
fread(&LIMIThdr, sizeof(LIMIThdr), 1, pLimits);
@@ -364,15 +281,13 @@ void user()
if (LIMIT.Security == usrconfig.Security.level) {
iFoundLimit = TRUE;
break;
} else
lrecno++;
}
}
fclose(pLimits);
}
free(FileName);
if(!iFoundLimit) {
Syslog('?', "Unknown Security Level in limits.data");
if (!iFoundLimit) {
WriteError("Unknown Security Level in limits.data");
usrconfig.iTimeLeft = 0; /* Could not find limit, so set to Zero */
usrconfig.iTimeUsed = 0; /* Set to Zero as well */
} else {
@@ -416,23 +331,24 @@ void user()
LastLogin = usrconfig.tLastLoginDate;
usrconfig.tLastLoginDate = ltime; /* Set current login to current date */
usrconfig.iTotalCalls++;
memset(&usrconfig.Password, 0, sizeof(usrconfig.Password));
sprintf(usrconfig.Password, "%s", Passwd);
/*
* Update user record.
*/
if (fseek(pUsrConfig, offset, 0) != 0)
WriteError("Can't move pointer in file: %s", temp);
else {
if (fseek(pUsrConfig, usrconfighdr.hdrsize + (grecno * usrconfighdr.recsize), 0) != 0) {
WriteError("Can't seek in %s/etc/users.data", getenv("MBSE_ROOT"));
} else {
fwrite(&usrconfig, sizeof(usrconfig), 1, pUsrConfig);
fclose(pUsrConfig);
}
/*
* Write users structure to tmp file in ~/tmp
* Write users structure to tmp file in ~/tmp/.bbs-exitinfo.ttyxx
* A copy of the userrecord is also in the variable exitinfo.
*/
InitExitinfo();
if (! InitExitinfo())
Good_Bye(1);
GetLastUser();
StartTime = xstrcpy(GetLocalHM());
ChangeHomeDir(exitinfo.Name, exitinfo.Email);
@@ -442,7 +358,7 @@ void user()
usrconfig.Security.level, LIMIT.Description, usrconfig.iTimeLeft, pTTY);
time(&Time2Go);
Time2Go += usrconfig.iTimeLeft * 60;
iUserTimeLeft = usrconfig.iTimeLeft;
iUserTimeLeft = exitinfo.iTimeLeft;
DisplayFile((char *)"mainlogo");
DisplayFile((char *)"welcome");
@@ -463,7 +379,7 @@ void user()
DisplayFile((char *)"welcome9");
sprintf(temp, "%s", (char *) GetDateDMY() );
if ((strcmp(usrconfig.sDateOfBirth, temp)) == 0)
if ((strcmp(exitinfo.sDateOfBirth, temp)) == 0)
DisplayFile((char *)"birthday");
/*
@@ -478,7 +394,7 @@ void user()
/*
* Displays users security file if it exists
*/
sprintf(temp, "sec%d", usrconfig.Security.level);
sprintf(temp, "sec%d", exitinfo.Security.level);
DisplayFile(temp);
/*
@@ -492,7 +408,7 @@ void user()
* file, search order is the same as in DisplayFile()
*/
st.st_mtime = 0;
if (usrconfig.GraphMode) {
if (exitinfo.GraphMode) {
sprintf(temp, "%s/onceonly.ans", lang.TextPath);
stat(temp, &st);
if (st.st_mtime == 0) {
@@ -514,21 +430,19 @@ void user()
OLR_SyncTags();
if (usrconfig.MailScan)
if (exitinfo.MailScan)
CheckMail();
/*
* We don't show new files to new users, their lastlogin
* date is not yet set so they would see all the files
* which can be boring...
* We don't show new files to new users.
*/
if (usrconfig.ieFILE && (!IsNew))
if (exitinfo.ieFILE && (!IsNew))
NewfileScan(FALSE);
/*
* Copy last file Area in to current Area
*/
SetFileArea(usrconfig.iLastFileArea);
SetFileArea(exitinfo.iLastFileArea);
/*
* Copy Last Message Area in to Current Msg Area
@@ -543,10 +457,8 @@ void user()
UserSilent(usrconfig.DoNotDisturb);
/*
* Start the menu, but first, wipe the password.
* Start the menu.
*/
memset(Passwd, 0, sizeof(Passwd));
free(Passwd);
menu();
}