From 4ae500914cf9edae65d1190799e0b461c0fe8c30 Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Wed, 26 Jun 2002 20:29:45 +0000 Subject: [PATCH] Fixed mbsebbs /H for whoson, lastcallers, etc. Added /U switch --- ChangeLog | 13 +- TODO | 8 +- html/menus/menu0.html | 14 +- lib/structs.h | 1 + mbsebbs/funcs.c | 2 +- mbsebbs/lastcallers.c | 145 ++++++++------- mbsebbs/misc.c | 1 + mbsebbs/userlist.c | 181 ++++++++++--------- mbsebbs/whoson.c | 408 +++++++++++++++++++++++------------------- 9 files changed, 418 insertions(+), 355 deletions(-) diff --git a/ChangeLog b/ChangeLog index 882c0a2e..abbedbfe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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. diff --git a/TODO b/TODO index 5fdc4645..ed66c4d0 100644 --- a/TODO +++ b/TODO @@ -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. diff --git a/html/menus/menu0.html b/html/menus/menu0.html index 1df6ebe8..62d2fef5 100644 --- a/html/menus/menu0.html +++ b/html/menus/menu0.html @@ -12,7 +12,7 @@
-
Last update 22-Oct-2001
+
Last update 26-Jun-2002

 

MBSE BBS Global Menus

@@ -87,12 +87,14 @@
  • Display todays callers: This will display a list of todays callers to the BBS.
    - Optional data: "/H" Show handles instead of real names.
    + Optional data: "/H" Show handles instead of real names, "/U" + show Unix names instead of real names.

  • Display userlist: Display all users in the users database except those that are hidden.
    - Optional data: "/H" Show handles instead of real names.
    + Optional data: "/H" Show handles instead of real names, "/U" + show Unix names instead of real names.

  • Time statistics: Display the users time @@ -125,7 +127,8 @@
  • Who is online: Displays the who is online list and what they are doing. Users that are hidden are not displayed.
    - Optional data: "/H" Show handles instead of real names.
    + Optional data: "/H" Show handles instead of real names, "/U" + show Unix names instead of real names.

  • Comment to sysop: Enter the texteditor and @@ -136,7 +139,8 @@
  • Send online message: Send an online message to a user on another line.
    - Optional data: "/H" Use handles instead of real names.
    + Optional data: "/H" Use handles instead of real names, "/U" + use Unix names instead of real names.

  • Display textfile with more: This will display diff --git a/lib/structs.h b/lib/structs.h index b1b4784c..e3cfe150 100644 --- a/lib/structs.h +++ b/lib/structs.h @@ -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 */ diff --git a/mbsebbs/funcs.c b/mbsebbs/funcs.c index 80d0ad1a..b63bd20a 100644 --- a/mbsebbs/funcs.c +++ b/mbsebbs/funcs.c @@ -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)); diff --git a/mbsebbs/lastcallers.c b/mbsebbs/lastcallers.c index 369c1041..b10f6484 100644 --- a/mbsebbs/lastcallers.c +++ b/mbsebbs/lastcallers.c @@ -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); } diff --git a/mbsebbs/misc.c b/mbsebbs/misc.c index 044b62a9..f1fdf017 100644 --- a/mbsebbs/misc.c +++ b/mbsebbs/misc.c @@ -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; diff --git a/mbsebbs/userlist.c b/mbsebbs/userlist.c index 667730a8..a26a1f86 100644 --- a/mbsebbs/userlist.c +++ b/mbsebbs/userlist.c @@ -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(); } diff --git a/mbsebbs/whoson.c b/mbsebbs/whoson.c index b2e19d66..6e29ecf7 100644 --- a/mbsebbs/whoson.c +++ b/mbsebbs/whoson.c @@ -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(); }