From 17c46104dea047df907d0f00377d1e866d98c14a Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Mon, 3 Feb 2003 20:20:23 +0000 Subject: [PATCH] Implemented export of area rules in the bbs --- ChangeLog | 13 ++- Makefile | 2 +- TODO | 2 + lang/Language.xref | 4 +- lang/dutch.txt | 4 +- lang/english.txt | 4 +- lang/galego.txt | 4 +- lang/german.txt | 4 +- lang/italian.txt | 4 +- lang/spanish.txt | 4 +- mbsebbs/mail.c | 206 ++++++++++++++++++++++++++++----------------- 11 files changed, 155 insertions(+), 96 deletions(-) diff --git a/ChangeLog b/ChangeLog index 746c11e5..74c6685b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,7 +6,8 @@ v0.37.01 14-Jan-2003. upgrade: After installing the binaries, start mbsetup, enter menu 1 and leave that and save it. This will set the default rules - directory, will be used later. + directory, here we will store the area rules of all echomail + areas. After upgrade you may remove ~/etc/maptabs and it's contents. After upgrade you may remove ~/etc/bank.data. @@ -58,7 +59,7 @@ v0.37.01 14-Jan-2003. global settings. When moving a message area to area zero mbsetup doesn't crash anymore. - Added new menu item 319, remove menu items 22 and 23. + Added new menu item 319, removed menu items 22 and 23. Added setup for rules directory. mbsebbs: @@ -71,13 +72,19 @@ v0.37.01 14-Jan-2003. as from name. Removed timebank and nextuser doors. Added editing of user's signature file. New menu item 319. + If the sysop is exporting a echomail message he will have the + option to save to his private directory or to the rules + directory. If saved to the rules directory the message will + have the filename of the area tag. Normal users can only export + to their private directory. Sysops: now you can start + collecting area rules! examples: The English and Dutch templates are updated to show the new nodes flow counters (html.nodes). lang: - Changed english and dutch language prompts 107. + Changed english and dutch language prompts 11, 12 and 107. v0.37.00 26-Dec-2002 - 14-Jan-2003 diff --git a/Makefile b/Makefile index 0fad26e6..a3938e2d 100644 --- a/Makefile +++ b/Makefile @@ -151,8 +151,8 @@ install: @if [ ! -d ${PREFIX}/var/rules ]; then \ mkdir ${PREFIX}/var/rules ; \ ${CHOWN} ${OWNER}:${GROUP} ${PREFIX}/var/rules ; \ - chmod 0750 ${PREFIX}/var/rules ; \ fi + chmod 0770 ${PREFIX}/var/rules @if [ ! -d ${PREFIX}/var/unknown ] ; then \ mkdir ${PREFIX}/var/unknown ; \ mkdir ${PREFIX}/var/inbound ; \ diff --git a/TODO b/TODO index 30444a48..ce9457e8 100644 --- a/TODO +++ b/TODO @@ -111,6 +111,8 @@ mbfile: N: Override timeout during virus scan when files are imported. + N: Add area sorting + mbmsg: N: With the post command if a netmail area is used the netmail area will cause trouble later, should be blocked to be used on netmail diff --git a/lang/Language.xref b/lang/Language.xref index 14551039..e42289a9 100644 --- a/lang/Language.xref +++ b/lang/Language.xref @@ -9,8 +9,8 @@ 8 user.c filesub.c |Password: 9 user.c |Maximum login attempts have been exceeded ... 10 user.c |Either your NAME or PASSWORD is incorrect -11 .c | -12 .c | +11 mail.c email.c HR|Export to (H)ome or (R)ules directory: +12 mail.c email.c |Message exported to rules directory as 13 .c | 14 .c | 15 .c | diff --git a/lang/dutch.txt b/lang/dutch.txt index b5b45988..9ee95d7e 100644 --- a/lang/dutch.txt +++ b/lang/dutch.txt @@ -9,8 +9,8 @@ JN|Is Uw naam juist gespeld? [J/n] |Wachtwoord: |Maximum aantal inlog pogingen overschreden ... |Of Uw NAAM of Uw WACHTWOORD is fout -| MBSE BBS Systeem Bank -|Bank Rekening: +HR|Exporteer naar (H)ome of (R)egels directory: +|Bericht geexporteerd naar rules directory als |Tijd op de rekening |Bytes op de rekening |Tijd gestort vandaag diff --git a/lang/english.txt b/lang/english.txt index 139e84ff..f32d8168 100644 --- a/lang/english.txt +++ b/lang/english.txt @@ -9,8 +9,8 @@ YN|Did you spell your name correctly? [Y/n] |Password: |Maximum login attempts have been exceeded ... |Either your NAME or PASSWORD is incorrect -| MBSE BBS System Bank -|Bank Account: +HR|Export to (H)ome or (R)ules directory: +|Message exported to rules directory as |Time in account |Bytes in account |Time deposited today diff --git a/lang/galego.txt b/lang/galego.txt index 3177610f..9b451527 100644 --- a/lang/galego.txt +++ b/lang/galego.txt @@ -9,8 +9,8 @@ SN| |Password: |Sobrepasouse o n£mero m ximo de erros permitido... |O teu nome ou a tua PASSWORD son incorrectos -| Banco de MBSE BBS -|Conta: +HR|Export to (H)ome or (R)ules directory: +|Message exported to rules directory as |Tempo na conta : |Bytes na cuenta : |Tempo depositado hoxe : diff --git a/lang/german.txt b/lang/german.txt index 34b2ee5b..a668fa14 100644 --- a/lang/german.txt +++ b/lang/german.txt @@ -9,8 +9,8 @@ JN|Haben Sie Ihren Namen korrekt eingegeben? [J/n] |Passwort: |Die maximale Anzahl von Login-Versuchen wurde ueberschritten ... |Entweder Ihr NAME oder Ihr PASSWORT wurden falsch eingegeben -| MBSE BBS System Bank -|Zeitbank Konto fuer: +HR|Export to (H)ome or (R)ules directory: +|Message exported to rules directory as |Kontostand Zeit (min) . . . . . . : |Kontostand Daten (KBytes) . . . . : |Heute gesparte Zeit . . . . . . . : diff --git a/lang/italian.txt b/lang/italian.txt index f4f13924..169cda79 100644 --- a/lang/italian.txt +++ b/lang/italian.txt @@ -9,8 +9,8 @@ SN|Hai scritto il tuo nome e cognome correttamente? [S/n] |Password: |Numero massimo di tentativi per il login raggiunto ... |Hai inserito un NOME o una PASSWORD errata -| MBSE BBS Banca di Sistema -|Account bancario di : +HR|Export to (H)ome or (R)ules directory: +|Message exported to rules directory as |Tempo disponibile : |Byte disponibili : |Tempo depositato oggi: diff --git a/lang/spanish.txt b/lang/spanish.txt index fb4b7a42..35e7c10f 100644 --- a/lang/spanish.txt +++ b/lang/spanish.txt @@ -9,8 +9,8 @@ SN| |Password: |El n£mero de errores permitidos se ha sobrepasado ... |Tu nombre o tu PASSWORD son incorrectos -| Banco de mbsebbs -|Cuenta: +HR|Export to (H)ome or (R)ules directory: +|Message exported to rules directory as |Tiempo en la cuenta : |Bytes en la cuenta : |Tiempo depositado hoy : diff --git a/mbsebbs/mail.c b/mbsebbs/mail.c index 6da2aefc..eb8ca351 100644 --- a/mbsebbs/mail.c +++ b/mbsebbs/mail.c @@ -807,98 +807,148 @@ void ShowMsgHdr() /* - * Export a message to file in the users home directory. + * Export a message to file in the users home directory or to the rules directory. */ int Export_a_Msg(unsigned long Num) { - char *p; - int ShowMsg = TRUE; + char *p; + int ShowMsg = TRUE, z, homedir = TRUE; - LastNum = Num; - iLineCount = 7; - WhosDoingWhat(READ_POST); - Syslog('+', "Export msg %d in area #%d (%s)", Num, iMsgAreaNumber + 1, sMsgAreaDesc); + LastNum = Num; + iLineCount = 7; + WhosDoingWhat(READ_POST); - /* - * The area data is already set, so we can do the next things - */ - if (MsgBase.Total == 0) { - colour(WHITE, BLACK); - /* There are no messages in this area */ - printf("\n%s\n\n", (char *) Language(205)); - sleep(3); - return FALSE; + /* + * The sysop has a choice to export to the rules directory. + */ + if ((exitinfo.Security.level >= CFG.sysop_access) && strlen(msgs.Tag)) { + while (TRUE) { + Enter(2); + /* Export to (H)ome or (R)ules directory: */ + pout(WHITE, RED, (char *) Language(11)); + colour(CFG.MsgInputColourF, CFG.MsgInputColourB); + fflush(stdout); + alarm_on(); + z = toupper(Getone()); + if (z == Keystroke(11, 0)) { + printf("%c", Keystroke(478, 0)); + break; + } + if (z == Keystroke(11, 1)) { + printf("%c", Keystroke(478, 1)); + homedir = FALSE; + break; + } } + } + + Syslog('+', "Export msg %d in area #%d (%s) to %s directory", Num, iMsgAreaNumber + 1, sMsgAreaDesc, homedir?"Home":"Rules"); - if (!Msg_Open(sMsgAreaBase)) { - WriteError("Error open JAM base %s", sMsgAreaBase); - return FALSE; - } + /* + * The area data is already set, so we can do the next things + */ + if (MsgBase.Total == 0) { + colour(WHITE, BLACK); + /* There are no messages in this area */ + printf("\n%s\n\n", (char *) Language(205)); + Syslog('+', "No messages in area"); + sleep(3); + return FALSE; + } - if (!Msg_ReadHeader(Num)) { - perror(""); - colour(WHITE, BLACK); - printf("\n%s\n\n", (char *)Language(77)); - Msg_Close(); - sleep(3); - return FALSE; - } + if (!Msg_Open(sMsgAreaBase)) { + WriteError("Error open JAM base %s", sMsgAreaBase); + return FALSE; + } - if (Msg.Private) { - ShowMsg = FALSE; - if ((strcasecmp(exitinfo.sUserName, Msg.From) == 0) || (strcasecmp(exitinfo.sUserName, Msg.To) == 0)) - ShowMsg = TRUE; - if (exitinfo.Security.level >= msgs.SYSec.level) - ShowMsg = TRUE; - } - - if (!ShowMsg) { - printf("\n%s\n\n", (char *) Language(82)); - Msg_Close(); - sleep(3); - return FALSE; - } - - /* - * Export the message text to the file in the users home/wrk directory. - * Create the filename as _.msg The message is - * written in M$DOS format. - */ - p = calloc(128, sizeof(char)); - sprintf(p, "%s/%s/wrk/%d_%lu.msg", CFG.bbs_usersdir, exitinfo.Name, iMsgAreaNumber + 1, Num); - if ((qf = fopen(p, "w")) != NULL) { - free(p); - p = NULL; - if (Msg_Read(Num, 80)) { - if ((p = (char *)MsgText_First()) != NULL) - do { - if ((p[0] == '\001') || (!strncmp(p, "SEEN-BY:", 8)) || (!strncmp(p, "AREA:", 5))) { - if (Kludges) { - if (p[0] == '\001') { - p[0] = 'a'; - fprintf(qf, "^%s\r\n", p); - } else - fprintf(qf, "%s\r\n", p); - } - } else - fprintf(qf, "%s\r\n", p); - } while ((p = (char *)MsgText_Next()) != NULL); - } - fclose(qf); - } else { - WriteError("$Can't open %s", p); - } + if (!Msg_ReadHeader(Num)) { + perror(""); + colour(WHITE, BLACK); + /* Message doesn't exist */ + printf("\n%s\n\n", (char *)Language(77)); Msg_Close(); + sleep(3); + return FALSE; + } - /* - * Report the result. - */ - colour(CFG.TextColourF, CFG.TextColourB); + if (Msg.Private) { + ShowMsg = FALSE; + if ((strcasecmp(exitinfo.sUserName, Msg.From) == 0) || (strcasecmp(exitinfo.sUserName, Msg.To) == 0)) + ShowMsg = TRUE; + if (exitinfo.Security.level >= msgs.SYSec.level) + ShowMsg = TRUE; + } + + if (!ShowMsg) { + /* Private message, not owner */ + printf("\n%s\n\n", (char *) Language(82)); + Msg_Close(); + sleep(3); + return FALSE; + } + + /* + * Export the message text to the file in the users home/wrk directory + * or to the rules directory. + * Create the filename as _.msg if exported to the + * home directory, if exported to a rule directory the name is the area tag. + * The message is written in M$DOS format. + */ + p = calloc(PATH_MAX, sizeof(char)); + if (homedir) + sprintf(p, "%s/%s/wrk/%d_%lu.msg", CFG.bbs_usersdir, exitinfo.Name, iMsgAreaNumber + 1, Num); + else + sprintf(p, "%s/%s", CFG.rulesdir, msgs.Tag); + + if ((qf = fopen(p, "w")) != NULL) { + free(p); + p = NULL; + if (Msg_Read(Num, 80)) { + if ((p = (char *)MsgText_First()) != NULL) { + do { + if ((p[0] == '\001') || (!strncmp(p, "SEEN-BY:", 8)) || (!strncmp(p, "AREA:", 5))) { + if (Kludges && homedir) { + if (p[0] == '\001') { + p[0] = 'a'; + fprintf(qf, "^%s\r\n", p); + } else { + fprintf(qf, "%s\r\n", p); + } + } + } else { + if (homedir || (strncmp(p, "--- ", 4) && strncmp(p, " * Origin", 9))) { + /* + * In rules directory, don't write tearline and Origin line. + */ + fprintf(qf, "%s\r\n", p); + } + } + } while ((p = (char *)MsgText_Next()) != NULL); + } + } + fclose(qf); + } else { + WriteError("$Can't open %s", p); + } + Msg_Close(); + + /* + * Report the result. + */ + colour(CFG.TextColourF, CFG.TextColourB); + if (homedir) { + /* Message exported to your private directory as: */ printf("\n\n%s", (char *) Language(46)); colour(CFG.HiliteF, CFG.HiliteB); printf("%d_%lu.msg\n\n", iMsgAreaNumber + 1, Num); - Pause(); - return TRUE; + } else { + /* Message exported to rules directory as */ + printf("\n\n%s", (char *) Language(12)); + colour(CFG.HiliteF, CFG.HiliteB); + printf("%s\n\n", msgs.Tag); + } + Pause(); + return TRUE; }