Fixed mbsebbs /H for whoson, lastcallers, etc. Added /U switch

This commit is contained in:
Michiel Broek 2002-06-26 20:29:45 +00:00
parent 208fa17e1b
commit 4ae500914c
9 changed files with 418 additions and 355 deletions

View File

@ -4,6 +4,9 @@ $Id$
v0.35.02 22-Jun-2002
upgrade:
Delete ~/etc/lastcall.data
general:
Added checks for GoldED in external program checks.
Added new empty path /opt/mbse/var/boxes.
@ -44,10 +47,18 @@ v0.35.02 22-Jun-2002
The email address in new created .signature files is only
added if global Give Email is true and in the userecord the
email is also enabled.
The whoson list now supports the /H and /U optional data to
display handles or unix names.
The send online message now supports the /H and /U optional
data to use handles or unix names.
The display userlist function now supports the /H and /U
optional data to use handles or unix names.
The display lastcaller list now also supports the /U optional
data to display Unix names.
mbtask:
When first run the goldnode command is only filled in if it
excists in the mbtask configuration.
exists in the mbtask configuration.
Implemented nodes special outbound boxes.

8
TODO
View File

@ -19,8 +19,6 @@ mbsebbs:
mail, must be user selectable. see remarks of William McBrine.
The default is oke now.
N: The whosin display doesn't honnor the /H switch.
N: Rewrite chat to use "mbtask". Write chat functions into "mbmon"
N: Implement session and time/day limits.
@ -29,10 +27,6 @@ mbsebbs:
N: Check for tagged files before logoff
L: Implement telnet door.
L: Spell checker in full screen editor.
L: Better word wrapping or paragraph justification in editor.
L: E-mail downloads with e-mail verification.
@ -80,7 +74,7 @@ mbfido:
mbcico:
L: Implement modem connect response translation for ISDN lines, i.e.
make the CAUSE responses human readable. see McMail for this
option.
option. Info received that this may be done using mgetty logs.
N: Implement MD5 crypt in binkp protocol driver.

View File

@ -12,7 +12,7 @@
</HEAD>
<BODY>
<BLOCKQUOTE>
<h5>Last update 22-Oct-2001</h5>
<h5>Last update 26-Jun-2002</h5>
<P>&nbsp;<P>
<h1>MBSE BBS Global Menus</h1>
@ -87,12 +87,14 @@
<LI value="9"><strong>Display todays callers:</strong> This will display a
list of todays callers to the BBS.<br>
<strong>Optional data:</strong> "/H" Show handles instead of real names.<br>
<strong>Optional data:</strong> "/H" Show handles instead of real names, "/U"
show Unix names instead of real names.<br>
<P>
<LI value="10"><strong>Display userlist:</strong> Display all users in the
users database except those that are hidden.<br>
<strong>Optional data:</strong> "/H" Show handles instead of real names.<br>
<strong>Optional data:</strong> "/H" Show handles instead of real names, "/U"
show Unix names instead of real names.<br>
<P>
<LI value="11"><strong>Time statistics:</strong> Display the users time
@ -125,7 +127,8 @@
<LI value="16"><strong>Who is online:</strong> Displays the who is online
list and what they are doing. Users that are hidden are not displayed.<br>
<strong>Optional data:</strong> "/H" Show handles instead of real names.<br>
<strong>Optional data:</strong> "/H" Show handles instead of real names, "/U"
show Unix names instead of real names.<br>
<P>
<LI value="17"><strong>Comment to sysop:</strong> Enter the texteditor and
@ -136,7 +139,8 @@
<LI value="18"><strong>Send online message:</strong> Send an online message
to a user on another line.</br>
<strong>Optional data:</strong> "/H" Use handles instead of real names.<br>
<strong>Optional data:</strong> "/H" Use handles instead of real names, "/U"
use Unix names instead of real names.<br>
<P>
<LI value="19"><strong>Display textfile with more:</strong> This will display

View File

@ -470,6 +470,7 @@ struct lastcallershdr {
struct lastcallers {
char UserName[36]; /* User Name */
char Handle[36]; /* User Handle */
char Name[9]; /* Unix Name */
char TimeOn[6]; /* Time user called bbs */
int CallTime; /* Time this call */
char Device[10]; /* Device user used */

View File

@ -86,7 +86,7 @@ int CheckName(char *Name)
struct userhdr ushdr;
struct userrec us;
temp = calloc(81, sizeof(char));
temp = calloc(PATH_MAX, sizeof(char));
temp1 = calloc(81, sizeof(char));
strcpy(temp1, tl(Name));

View File

@ -59,95 +59,94 @@ extern int LC_Door;
*/
void LastCallers(char *OpData)
{
FILE *pLC;
int LineCount = 5;
int count = 0;
char *sFileName;
char *Heading;
char *Underline;
int i, x;
struct lastcallers lcall;
struct lastcallershdr lcallhdr;
FILE *pLC;
int LineCount = 5, count = 0, i, x;
char *sFileName, *Heading, *Underline;
struct lastcallers lcall;
struct lastcallershdr lcallhdr;
sFileName = calloc(PATH_MAX, sizeof(char));
Heading = calloc(81, sizeof(char));
Underline = calloc(81, sizeof(char));
sFileName = calloc(PATH_MAX, sizeof(char));
Heading = calloc(81, sizeof(char));
Underline = calloc(81, sizeof(char));
clear();
clear();
sprintf(sFileName,"%s/etc/lastcall.data", getenv("MBSE_ROOT"));
if((pLC = fopen(sFileName,"r")) == NULL)
WriteError("$LastCallers: Can't open %s", sFileName);
else {
fread(&lcallhdr, sizeof(lcallhdr), 1, pLC);
colour(15, 0);
/* Todays callers to */
sprintf(Heading, "%s%s", (char *) Language(84), CFG.bbs_name);
Center(Heading);
sprintf(sFileName,"%s/etc/lastcall.data", getenv("MBSE_ROOT"));
if ((pLC = fopen(sFileName,"r")) == NULL)
WriteError("$LastCallers: Can't open %s", sFileName);
else {
fread(&lcallhdr, sizeof(lcallhdr), 1, pLC);
colour(WHITE, BLACK);
/* Todays callers to */
sprintf(Heading, "%s%s", (char *) Language(84), CFG.bbs_name);
Center(Heading);
x = strlen(Heading);
x = strlen(Heading);
for(i = 0; i < x; i++)
sprintf(Underline, "%s%c", Underline, exitinfo.GraphMode ? 196 : 45);
for(i = 0; i < x; i++)
sprintf(Underline, "%s%c", Underline, exitinfo.GraphMode ? 196 : 45);
colour(12, 0);
Center(Underline);
colour(LIGHTRED, BLACK);
Center(Underline);
printf("\n");
printf("\n");
/* # User Name Device timeOn Calls Location */
pout(10, 0, (char *) Language(85));
Enter(1);
/* # User Name Device timeOn Calls Location */
pout(LIGHTGREEN, BLACK, (char *) Language(85));
Enter(1);
colour(2, 0);
fLine(79);
colour(GREEN, BLACK);
fLine(79);
while (fread(&lcall, lcallhdr.recsize, 1, pLC) == 1) {
if(!lcall.Hidden) {
count++;
while (fread(&lcall, lcallhdr.recsize, 1, pLC) == 1) {
if (!lcall.Hidden) {
count++;
colour(15,0);
printf("%-5d", count);
colour(WHITE, BLACK);
printf("%-5d", count);
colour(11, 0);
if((strcmp(OpData, "/H")) == 0) {
if((strcmp(lcall.Handle, "") != 0 && *(lcall.Handle) != ' '))
printf("%-20s", lcall.Handle);
else
printf("%-20s", lcall.UserName);
} else
printf("%-20s", lcall.UserName);
colour(9, 0);
printf("%-8s", lcall.Device);
colour(13, 0);
printf("%-8s", lcall.TimeOn);
colour(14, 0);
printf("%-7d", lcall.Calls);
colour(12, 0);
printf("%-32s\n", lcall.Location);
LineCount++;
if (LineCount == exitinfo.iScreenLen) {
Pause();
LineCount = 0;
}
} /* End of check if user is sysop */
colour(LIGHTCYAN, BLACK);
if ((strcasecmp(OpData, "/H")) == 0) {
if ((strcmp(lcall.Handle, "") != 0 && *(lcall.Handle) != ' '))
printf("%-20s", lcall.Handle);
else
printf("%-20s", lcall.UserName);
} else if (strcasecmp(OpData, "/U") == 0) {
printf("%-20s", lcall.Name);
} else {
printf("%-20s", lcall.UserName);
}
colour(2, 0);
fLine(79);
colour(LIGHTBLUE, BLACK);
printf("%-8s", lcall.Device);
fclose(pLC);
printf("\n");
Pause();
colour(LIGHTMAGENTA, BLACK);
printf("%-8s", lcall.TimeOn);
colour(YELLOW, BLACK);
printf("%-7d", lcall.Calls);
colour(LIGHTRED, BLACK);
printf("%-32s\n", lcall.Location);
LineCount++;
if (LineCount == exitinfo.iScreenLen) {
Pause();
LineCount = 0;
}
} /* End of check if user is hidden */
}
free(sFileName);
free(Heading);
free(Underline);
colour(GREEN, BLACK);
fLine(79);
fclose(pLC);
printf("\n");
Pause();
}
free(sFileName);
free(Heading);
free(Underline);
}

View File

@ -192,6 +192,7 @@ void SaveLastCallers()
memset(&LCALL, 0, sizeof(LCALL));
sprintf(LCALL.UserName,"%s", exitinfo.sUserName);
sprintf(LCALL.Handle,"%s", exitinfo.sHandle);
sprintf(LCALL.Name, "%s", exitinfo.Name);
sprintf(LCALL.TimeOn,"%s", StartTime);
sprintf(LCALL.Device,"%s", pTTY);
LCALL.SecLevel = exitinfo.Security.level;

View File

@ -44,111 +44,116 @@
void UserList(char *OpData)
{
FILE *pUsrConfig;
int LineCount = 2;
int iFoundName = FALSE;
int iNameCount = 0;
char *Name, *sTemp, *User;
char *temp;
struct userhdr uhdr;
struct userrec u;
FILE *pUsrConfig;
int LineCount = 2, iFoundName = FALSE, iNameCount = 0;
char *Name, *sTemp, *User, *temp;
struct userhdr uhdr;
struct userrec u;
temp = calloc(PATH_MAX, sizeof(char));
Name = calloc(37, sizeof(char));
sTemp = calloc(81, sizeof(char));
User = calloc(81, sizeof(char));
temp = calloc(PATH_MAX, sizeof(char));
Name = calloc(37, sizeof(char));
sTemp = calloc(81, sizeof(char));
User = calloc(81, sizeof(char));
clear();
/* User List */
language(WHITE, BLACK, 126);
Enter(1);
LineCount = 1;
clear();
/* User List */
language(WHITE, BLACK, 126);
Enter(1);
LineCount = 1;
sprintf(temp, "%s/etc/users.data", getenv("MBSE_ROOT"));
if ((pUsrConfig = fopen(temp, "rb")) == NULL) {
WriteError("UserList: Can't open file: %s", temp);
return;
}
fread(&uhdr, sizeof(uhdr), 1, pUsrConfig);
sprintf(temp, "%s/etc/users.data", getenv("MBSE_ROOT"));
if ((pUsrConfig = fopen(temp, "rb")) == NULL) {
WriteError("UserList: Can't open file: %s", temp);
return;
}
fread(&uhdr, sizeof(uhdr), 1, pUsrConfig);
/* Enter Username search string or (Enter) for all users: */
language(WHITE, BLACK, 127);
colour(CFG.InputColourF, CFG.InputColourB);
alarm_on();
GetstrC(Name, 35);
clear();
/* Enter Username search string or (Enter) for all users: */
language(WHITE, BLACK, 127);
colour(CFG.InputColourF, CFG.InputColourB);
alarm_on();
GetstrC(Name, 35);
clear();
/* Name Location Last On Calls */
language(WHITE, BLACK, 128);
Enter(1);
/* Name Location Last On Calls */
language(WHITE, BLACK, 128);
Enter(1);
colour(GREEN, BLACK);
fLine(79);
colour(GREEN, BLACK);
fLine(79);
colour(CYAN, BLACK);
while (fread(&u, uhdr.recsize, 1, pUsrConfig) == 1) {
if ((strcmp(Name,"")) != 0) {
if((strcmp(OpData, "/H")) == 0)
sprintf(User, "%s", u.sHandle);
colour(CYAN, BLACK);
while (fread(&u, uhdr.recsize, 1, pUsrConfig) == 1) {
if ((strcmp(Name,"")) != 0) {
if (((strcasecmp(OpData, "/H")) == 0) && strlen(u.sHandle))
sprintf(User, "%s", u.sHandle);
else if ((strcasecmp(OpData, "/U")) == 0)
sprintf(User, "%s", u.Name);
else
sprintf(User, "%s", u.sUserName);
if ((strstr(tl(User), tl(Name)) != NULL)) {
if ((!u.Hidden) && (!u.Deleted)) {
if ((strcasecmp(OpData, "/H")) == 0) {
if ((strcmp(u.sHandle, "") != 0 && *(u.sHandle) != ' '))
printf("%-25s", u.sHandle);
else
sprintf(User, "%s", u.sUserName);
printf("%-25s", u.sUserName);
} else if (strcasecmp(OpData, "/U") == 0) {
printf("%-25s", u.Name);
} else {
printf("%-25s", u.sUserName);
}
if ((strstr(tl(User), tl(Name)) != NULL)) {
if ((!u.Hidden) && (!u.Deleted)) {
if((strcmp(OpData, "/H")) == 0) {
if((strcmp(u.sHandle, "") != 0 && *(u.sHandle) != ' '))
printf("%-25s", u.sHandle);
else
printf("%-25s", u.sUserName);
} else
printf("%-25s", u.sUserName);
printf("%-30s%-14s%-11d", u.sLocation, StrDateDMY(u.tLastLoginDate), u.iTotalCalls);
iFoundName = TRUE;
LineCount++;
iNameCount++;
}
}
} else
if ((!u.Hidden) && (!u.Deleted) && (strlen(u.sUserName) > 0)) {
if((strcmp(OpData, "/H")) == 0) {
if((strcmp(u.sHandle, "") != 0 && *(u.sHandle) != ' '))
printf("%-25s", u.sHandle);
else
printf("%-25s", u.sUserName);
} else
printf("%-25s", u.sUserName);
printf("%-30s%-14s%-11d", u.sLocation, StrDateDMY(u.tLastLoginDate), u.iTotalCalls);
iFoundName = TRUE;
LineCount++;
iNameCount++;
Enter(1);
}
if (LineCount >= exitinfo.iScreenLen - 2) {
LineCount = 0;
Pause();
colour(CYAN, BLACK);
printf("%-30s%-14s%-11d", u.sLocation, StrDateDMY(u.tLastLoginDate), u.iTotalCalls);
iFoundName = TRUE;
LineCount++;
iNameCount++;
Enter(1);
}
}
} else if ((!u.Hidden) && (!u.Deleted) && (strlen(u.sUserName) > 0)) {
if ((strcmp(OpData, "/H")) == 0) {
if ((strcasecmp(u.sHandle, "") != 0 && *(u.sHandle) != ' '))
printf("%-25s", u.sHandle);
else
printf("%-25s", u.sUserName);
} else if (strcasecmp(OpData, "/U") == 0) {
printf("%-25s", u.Name);
} else {
printf("%-25s", u.sUserName);
}
printf("%-30s%-14s%-11d", u.sLocation, StrDateDMY(u.tLastLoginDate), u.iTotalCalls);
iFoundName = TRUE;
LineCount++;
iNameCount++;
Enter(1);
}
if(!iFoundName) {
language(CYAN, BLACK, 129);
Enter(1);
if (LineCount >= exitinfo.iScreenLen - 2) {
LineCount = 0;
Pause();
colour(CYAN, BLACK);
}
}
fclose(pUsrConfig);
if (!iFoundName) {
language(CYAN, BLACK, 129);
Enter(1);
}
colour(GREEN, BLACK);
fLine(79);
fclose(pUsrConfig);
free(temp);
free(Name);
free(sTemp);
free(User);
colour(GREEN, BLACK);
fLine(79);
Pause();
free(temp);
free(Name);
free(sTemp);
free(User);
Pause();
}

View File

@ -51,119 +51,146 @@ extern int LC_Download, LC_Upload, LC_Read, LC_Chat, LC_Olr, LC_Door;
*/
void WhosOn(char *OpData)
{
char buf[128], *Heading, *Underline, *cnt, *isdoing, *location, *device;
int i, x, Start = TRUE;
char buf[128], *Heading, *Underline, *cnt, *isdoing, *location, *device;
char *fullname, *temp;
int i, x, Start = TRUE;
FILE *fp;
struct userhdr ushdr;
struct userrec us;
Underline = calloc(81, sizeof(char));
Heading = calloc(81, sizeof(char));
Underline = calloc(81, sizeof(char));
Heading = calloc(81, sizeof(char));
WhosDoingWhat(WHOSON);
WhosDoingWhat(WHOSON);
clear();
Enter(1);
colour(WHITE, BLACK);
/* Callers On-Line to */
sprintf(Heading, "%s%s", (char *) Language(414), CFG.bbs_name);
Center(Heading);
x = strlen(Heading);
clear();
Enter(1);
colour(WHITE, BLACK);
/* Callers On-Line to */
sprintf(Heading, "%s%s", (char *) Language(414), CFG.bbs_name);
Center(Heading);
x = strlen(Heading);
for(i = 0; i < x; i++)
sprintf(Underline, "%s%c", Underline, exitinfo.GraphMode ? 196 : 45);
colour(LIGHTRED, BLACK);
Center(Underline);
printf("\n");
for(i = 0; i < x; i++)
sprintf(Underline, "%s%c", Underline, exitinfo.GraphMode ? 196 : 45);
colour(LIGHTRED, BLACK);
Center(Underline);
printf("\n");
/* Name Device Status Location */
pout(LIGHTGREEN, BLACK, (char *) Language(415));
Enter(1);
colour(GREEN, BLACK);
fLine(79);
/* Name Device Status Location */
pout(LIGHTGREEN, BLACK, (char *) Language(415));
Enter(1);
colour(GREEN, BLACK);
fLine(79);
while (TRUE) {
if (Start)
while (TRUE) {
if (Start)
sprintf(buf, "GMON:1,1;");
else
else
sprintf(buf, "GMON:1,0;");
Start = FALSE;
if (socket_send(buf) == 0) {
strcpy(buf, socket_receive());
if (strncmp(buf, "100:0;", 6) == 0)
break; /* No more data */
if (strstr(buf, "mbsebbs")) {
cnt = strtok(buf, ",");
strtok(NULL, ",");
device = xstrcpy(strtok(NULL, ","));
Start = FALSE;
if (socket_send(buf) == 0) {
strcpy(buf, socket_receive());
if (strncmp(buf, "100:0;", 6) == 0)
break; /* No more data */
if (strstr(buf, "mbsebbs")) {
/*
* We are only interested in copies of the mbsebbs program
*/
cnt = strtok(buf, ",");
strtok(NULL, ",");
device = xstrcpy(strtok(NULL, ","));
fullname = xstrcpy(strtok(NULL, ","));
if (((strcasecmp(OpData, "/H")) == 0) || (strcasecmp(OpData, "/U") == 0)) {
/*
* We are only interested in copies of the mbsebbs program
* The mbtask daemon has only the users real names, we
* want the handle or unix name instead.
*/
if ((strcmp(OpData, "/H")) == 0) {
/*
* The mbtask daemon has only the users real names, we
* want the handle instead.
*/
temp = calloc(PATH_MAX, sizeof(char));
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) {
if (strcmp(fullname, us.sUserName) == 0) {
if ((strcasecmp(OpData, "/H") == 0) && strlen(us.sHandle)) {
free(fullname);
fullname = xstrcpy(us.sHandle);
} else if (strcasecmp(OpData, "/U") == 0) {
free(fullname);
fullname = xstrcpy(us.Name);
}
break;
}
}
fclose(fp);
}
colour(LIGHTCYAN, BLACK);
printf("%-30s", strtok(NULL, ","));
colour(LIGHTBLUE, BLACK);
printf("%-9s", device);
free(device);
strtok(NULL, ",");
location = xstrcpy(strtok(NULL, ","));
isdoing = xstrcpy(strtok(NULL, ","));
colour(WHITE, BLACK);
if (strstr(isdoing, "Browsing"))
/* Browseng */
printf("%-15s", (char *) Language(418));
else if (strstr(isdoing, "Downloading"))
/* Downloading */
printf("%-15s", (char *) Language(419));
else if (strstr(isdoing, "Uploading"))
/* Uploading */
printf("%-15s", (char *) Language(420));
else if (strstr(isdoing, "Read"))
/* Msg Section */
printf("%-15s", (char *) Language(421));
else if (strstr(isdoing, "External"))
/* External Door */
printf("%-15s", (char *) Language(422));
else if (strstr(isdoing, "Chat"))
/* Chatting */
printf("%-15s", (char *) Language(423));
else if (strstr(isdoing, "Files"))
/* Listing Files */
printf("%-15s", (char *) Language(424));
else if (strstr(isdoing, "Time"))
/* Banking Door */
printf("%-15s", (char *) Language(426));
else if (strstr(isdoing, "Safe"))
/* Safe Door */
printf("%-15s", (char *) Language(427));
else if (strstr(isdoing, "Whoson"))
/* WhosOn List */
printf("%-15s", (char *) Language(428));
else if (strstr(isdoing, "Offline"))
/* Idle */
printf("%-15s", (char *) Language(429));
else
printf("System error ");
colour(LIGHTRED, BLACK);
printf("%-25s\n", location);
free(location);
free(isdoing);
free(temp);
}
colour(LIGHTCYAN, BLACK);
printf("%-30s", fullname);
free(fullname);
colour(LIGHTBLUE, BLACK);
printf("%-9s", device);
free(device);
strtok(NULL, ",");
location = xstrcpy(strtok(NULL, ","));
isdoing = xstrcpy(strtok(NULL, ","));
colour(WHITE, BLACK);
if (strstr(isdoing, "Browsing"))
/* Browseng */
printf("%-15s", (char *) Language(418));
else if (strstr(isdoing, "Downloading"))
/* Downloading */
printf("%-15s", (char *) Language(419));
else if (strstr(isdoing, "Uploading"))
/* Uploading */
printf("%-15s", (char *) Language(420));
else if (strstr(isdoing, "Read"))
/* Msg Section */
printf("%-15s", (char *) Language(421));
else if (strstr(isdoing, "External"))
/* External Door */
printf("%-15s", (char *) Language(422));
else if (strstr(isdoing, "Chat"))
/* Chatting */
printf("%-15s", (char *) Language(423));
else if (strstr(isdoing, "Files"))
/* Listing Files */
printf("%-15s", (char *) Language(424));
else if (strstr(isdoing, "Time"))
/* Banking Door */
printf("%-15s", (char *) Language(426));
else if (strstr(isdoing, "Safe"))
/* Safe Door */
printf("%-15s", (char *) Language(427));
else if (strstr(isdoing, "Whoson"))
/* WhosOn List */
printf("%-15s", (char *) Language(428));
else if (strstr(isdoing, "Offline"))
/* Idle */
printf("%-15s", (char *) Language(429));
else
printf("System error ");
colour(LIGHTRED, BLACK);
printf("%-25s\n", location);
free(location);
free(isdoing);
}
}
}
colour(GREEN, BLACK);
fLine(79);
colour(GREEN, BLACK);
fLine(79);
free(Underline);
free(Heading);
free(Underline);
free(Heading);
printf("\n");
printf("\n");
}
@ -173,70 +200,59 @@ void WhosOn(char *OpData)
*/
void WhosDoingWhat(int iStatus)
{
char *temp;
char *temp;
temp = calloc(PATH_MAX, sizeof(char));
temp = calloc(PATH_MAX, sizeof(char));
ReadExitinfo();
exitinfo.iStatus = iStatus;
WriteExitinfo();
ReadExitinfo();
exitinfo.iStatus = iStatus;
WriteExitinfo();
switch(iStatus) {
case BROWSING:
strcpy(temp, "Browsing Menus");
switch(iStatus) {
case BROWSING: strcpy(temp, "Browsing Menus");
break;
case DOWNLOAD:
strcpy(temp, "Downloading");
case DOWNLOAD: strcpy(temp, "Downloading");
LC_Download = TRUE;
break;
case UPLOAD:
strcpy(temp, "Uploading");
case UPLOAD: strcpy(temp, "Uploading");
LC_Upload = TRUE;
break;
case READ_POST:
strcpy(temp, "Read/post Messages");
case READ_POST: strcpy(temp, "Read/post Messages");
LC_Read = TRUE;
break;
case DOOR:
strcpy(temp, "External Door");
case DOOR: strcpy(temp, "External Door");
LC_Door = TRUE;
break;
case SYSOPCHAT:
strcpy(temp, "Sysop Chat");
case SYSOPCHAT: strcpy(temp, "Sysop Chat");
LC_Chat = TRUE;
break;
case FILELIST:
strcpy(temp, "List Files");
case FILELIST: strcpy(temp, "List Files");
break;
case TIMEBANK:
strcpy(temp, "Time Bank");
case TIMEBANK: strcpy(temp, "Time Bank");
LC_Door = TRUE;
break;
case SAFE:
strcpy(temp, "Safe Cracker");
case SAFE: strcpy(temp, "Safe Cracker");
LC_Door = TRUE;
break;
case WHOSON:
strcpy(temp, "View Whoson List");
case WHOSON: strcpy(temp, "View Whoson List");
break;
case OLR:
strcpy(temp, "Offline Reader");
case OLR: strcpy(temp, "Offline Reader");
LC_Olr = TRUE;
break;
}
IsDoing(temp);
}
IsDoing(temp);
free(temp);
free(temp);
}
@ -244,66 +260,98 @@ void WhosDoingWhat(int iStatus)
/*
* Function will allow a user to send a on-line message to another user
* It will prompt the user for the username. The message is sent thru
* mbsed, from the resonse message we can see if we succeeded.
* mbtask, from the response message we can see if we succeeded.
* Optional data /H and /U for handles and unix names is supported.
*/
void SendOnlineMsg(char *OpData)
{
static char buf[128];
char *User, *String;
static char buf[128];
char *User, *String, *temp;
FILE *fp;
struct userhdr ushdr;
struct userrec us;
User = calloc(36, sizeof(char));
String = calloc(77, sizeof(char));
WhosOn(OpData);
/* Please enter username to send message to: */
pout(3, 0, (char *) Language(430));
colour(CFG.InputColourF, CFG.InputColourB);
fflush(stdout);
GetstrC(User, 35);
if (!strcmp(User, "")) {
free(User);
free(String);
return;
}
/* Please enter message to send (Max 76 Characters) */
pout(10, 0, (char *)Language(433));
pout(10, 0, (char *)"\n> ");
colour(CFG.InputColourF, CFG.InputColourB);
fflush(stdout);
GetstrC(String, 76);
if ((strcmp(String, "")) != 0) {
buf[0] = '\0';
sprintf(buf, "CSPM:3,%s,%s,%s;", strcmp(OpData, "/H") != 0 ? exitinfo.sUserName : \
strcmp(exitinfo.sHandle, "") == 0 ? exitinfo.sUserName : \
exitinfo.sHandle, User, String);
if (socket_send(buf) == 0) {
strcpy(buf, socket_receive());
if (strncmp(buf, "100:1,3;", 8) == 0) {
/* Sorry, there is no user on */
printf("\n%s %s\n\n", (char *) Language(431), User);
}
if (strncmp(buf, "100:1,2;", 8) == 0) {
printf("\nNo more room in users message buffer\n\n");
}
if (strncmp(buf, "100:1,1;", 8) == 0) {
colour(12, 0);
/* doesn't wish to be disturbed */
printf("\n%s %s\n", User, (char *) Language(432));
}
if (strncmp(buf, "100:0;", 6) == 0) {
printf("Message Sent!\n");
Syslog('+', "Online msg to %s: \"%s\"", User, String);
}
}
}
User = calloc(36, sizeof(char));
String = calloc(77, sizeof(char));
WhosOn(OpData);
/* Please enter username to send message to: */
pout(CYAN, BLACK, (char *) Language(430));
colour(CFG.InputColourF, CFG.InputColourB);
fflush(stdout);
GetstrC(User, 35);
if (!strcmp(User, "")) {
free(User);
free(String);
Pause();
return;
}
/*
* If we were displaying handles or unix names, then lookup the
* users fullname to send to mbtask.
*/
if ((strcasecmp(OpData, "/H") == 0) || (strcasecmp(OpData, "/U") == 0)) {
temp = calloc(PATH_MAX, sizeof(char));
sprintf(temp, "%s/etc/users.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "rb")) != NULL) {
fread(&ushdr, sizeof(ushdr), 1, fp);
Syslog('-', "Using translate");
while (fread(&us, ushdr.recsize, 1, fp) == 1) {
if ((strcasecmp(OpData, "/H") == 0) && strlen(us.sHandle) && (strcasecmp(User, us.sHandle) == 0)) {
sprintf(User, "%s", us.sUserName);
break;
} else if ((strcasecmp(OpData, "/U") == 0) && (strcasecmp(User, us.Name) == 0)) {
sprintf(User, "%s", us.sUserName);
break;
}
}
fclose(fp);
}
free(temp);
}
/* Please enter message to send (Max 76 Characters) */
pout(LIGHTGREEN, BLACK, (char *)Language(433));
pout(LIGHTGREEN, BLACK, (char *)"\n> ");
colour(CFG.InputColourF, CFG.InputColourB);
fflush(stdout);
GetstrC(String, 76);
if ((strcmp(String, "")) != 0) {
buf[0] = '\0';
if ((strcasecmp(OpData, "/H") == 0) && strlen(exitinfo.sHandle))
sprintf(buf, "CSPM:3,%s,%s,%s;", exitinfo.sHandle, User, String);
else if (strcasecmp(OpData, "/U") == 0)
sprintf(buf, "CSPM:3,%s,%s,%s;", exitinfo.Name, User, String);
else
sprintf(buf, "CSPM:3,%s,%s,%s;", exitinfo.sUserName, User, String);
if (socket_send(buf) == 0) {
strcpy(buf, socket_receive());
if (strncmp(buf, "100:1,3;", 8) == 0) {
/* Sorry, there is no user on */
printf("\n%s %s\n\n", (char *) Language(431), User);
}
if (strncmp(buf, "100:1,2;", 8) == 0) {
printf("\nNo more room in users message buffer\n\n");
}
if (strncmp(buf, "100:1,1;", 8) == 0) {
colour(LIGHTRED, BLACK);
/* doesn't wish to be disturbed */
printf("\n%s %s\n", User, (char *) Language(432));
}
if (strncmp(buf, "100:0;", 6) == 0) {
printf("Message Sent!\n");
Syslog('+', "Online msg to %s: \"%s\"", User, String);
}
}
}
free(User);
free(String);
Pause();
}