Fixed filemgr tick=on crash, added auto echomail area create
This commit is contained in:
parent
598b6c2600
commit
62f10ff407
@ -4604,6 +4604,12 @@ v0.33.20 10-Feb-2002
|
|||||||
mbfido:
|
mbfido:
|
||||||
In AreaMgr and FileMgr changed aka matching for area
|
In AreaMgr and FileMgr changed aka matching for area
|
||||||
connections. Code cleanups.
|
connections. Code cleanups.
|
||||||
|
In FileMgr when %tick=on/off command was received, mbfido
|
||||||
|
crashed.
|
||||||
|
Implemented auto area create comparing a new received echo
|
||||||
|
from a uplink which has a echomail taglist in one of the
|
||||||
|
mailgroups defined. The area is created with the defaults
|
||||||
|
from the mailgroup.
|
||||||
|
|
||||||
mball:
|
mball:
|
||||||
Will not crash anymore when it needs more then 10 minutes to
|
Will not crash anymore when it needs more then 10 minutes to
|
||||||
|
17
lib/dbnode.c
17
lib/dbnode.c
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "libs.h"
|
#include "libs.h"
|
||||||
#include "structs.h"
|
#include "structs.h"
|
||||||
|
#include "common.h"
|
||||||
#include "users.h"
|
#include "users.h"
|
||||||
#include "records.h"
|
#include "records.h"
|
||||||
#include "clcomm.h"
|
#include "clcomm.h"
|
||||||
@ -81,6 +82,22 @@ int TestNode(fidoaddr aka)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int SearchNodeFaddr(faddr *n)
|
||||||
|
{
|
||||||
|
fidoaddr Sys;
|
||||||
|
|
||||||
|
memset(&Sys, 0, sizeof(Sys));
|
||||||
|
Sys.zone = n->zone;
|
||||||
|
Sys.net = n->net;
|
||||||
|
Sys.node = n->node;
|
||||||
|
Sys.point = n->point;
|
||||||
|
if (n->domain != NULL)
|
||||||
|
strncpy(Sys.domain, n->domain, 12);
|
||||||
|
|
||||||
|
return SearchNode(Sys);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int SearchNode(fidoaddr aka)
|
int SearchNode(fidoaddr aka)
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
#ifndef _DBNODE_H
|
#ifndef _DBNODE_H
|
||||||
#define _DBNODE_H
|
#define _DBNODE_H
|
||||||
|
|
||||||
@ -8,6 +10,7 @@ int nodes_cnt; /* Node records in database */
|
|||||||
|
|
||||||
int InitNode(void); /* Initialize nodes database */
|
int InitNode(void); /* Initialize nodes database */
|
||||||
int TestNode(fidoaddr); /* Check if noderecord is loaded */
|
int TestNode(fidoaddr); /* Check if noderecord is loaded */
|
||||||
|
int SearchNodeFaddr(faddr *); /* Search specified node and load */
|
||||||
int SearchNode(fidoaddr); /* Search specified node and load */
|
int SearchNode(fidoaddr); /* Search specified node and load */
|
||||||
int UpdateNode(void); /* Update record if changed. */
|
int UpdateNode(void); /* Update record if changed. */
|
||||||
char *GetNodeMailGrp(int); /* Get nodes mailgroup record */
|
char *GetNodeMailGrp(int); /* Get nodes mailgroup record */
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "libs.h"
|
#include "libs.h"
|
||||||
#include "structs.h"
|
#include "structs.h"
|
||||||
|
#include "common.h"
|
||||||
#include "users.h"
|
#include "users.h"
|
||||||
#include "records.h"
|
#include "records.h"
|
||||||
#include "dbnode.h"
|
#include "dbnode.h"
|
||||||
|
@ -189,7 +189,7 @@ mbseq.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/c
|
|||||||
notify.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/msg.h ../lib/msgtext.h ../lib/dbnode.h filemgr.h areamgr.h sendmail.h notify.h
|
notify.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/msg.h ../lib/msgtext.h ../lib/dbnode.h filemgr.h areamgr.h sendmail.h notify.h
|
||||||
postnetmail.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/dbcfg.h ../lib/dbuser.h ../lib/dbnode.h ../lib/dbftn.h ../lib/common.h ../lib/clcomm.h tracker.h addpkt.h storenet.h ftn2rfc.h areamgr.h filemgr.h ping.h bounce.h postemail.h
|
postnetmail.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/dbcfg.h ../lib/dbuser.h ../lib/dbnode.h ../lib/dbftn.h ../lib/common.h ../lib/clcomm.h tracker.h addpkt.h storenet.h ftn2rfc.h areamgr.h filemgr.h ping.h bounce.h postemail.h
|
||||||
scannews.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/mbinet.h ../lib/dbdupe.h ../lib/dbnode.h ../lib/dbmsgs.h ../lib/msg.h ../lib/msgtext.h mkftnhdr.h hash.h rollover.h pack.h storeecho.h rfc2ftn.h scannews.h
|
scannews.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/mbinet.h ../lib/dbdupe.h ../lib/dbnode.h ../lib/dbmsgs.h ../lib/msg.h ../lib/msgtext.h mkftnhdr.h hash.h rollover.h pack.h storeecho.h rfc2ftn.h scannews.h
|
||||||
tosspkt.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/msg.h ../lib/msgtext.h ../lib/dbcfg.h ../lib/dbnode.h ../lib/dbmsgs.h ../lib/dbdupe.h ../lib/dbuser.h ../lib/dbftn.h tosspkt.h postnetmail.h postecho.h rollover.h
|
tosspkt.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/msg.h ../lib/msgtext.h ../lib/dbcfg.h ../lib/dbnode.h ../lib/dbmsgs.h ../lib/dbdupe.h ../lib/dbuser.h ../lib/dbftn.h tosspkt.h postnetmail.h postecho.h rollover.h createm.h
|
||||||
mbfkill.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfkill.h mbfutil.h
|
mbfkill.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfkill.h mbfutil.h
|
||||||
mbfutil.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfutil.h mbfile.h
|
mbfutil.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfutil.h mbfile.h
|
||||||
mbfindex.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfutil.h mbfindex.h
|
mbfindex.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfutil.h mbfindex.h
|
||||||
@ -202,5 +202,7 @@ virscan.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib
|
|||||||
mbftoberep.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfutil.h mbftoberep.h
|
mbftoberep.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfutil.h mbftoberep.h
|
||||||
mbfmove.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfutil.h mbfmove.h
|
mbfmove.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfutil.h mbfmove.h
|
||||||
mbfdel.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfutil.h mbfmove.h
|
mbfdel.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/dbcfg.h mbfutil.h mbfmove.h
|
||||||
bounce.o:
|
bounce.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h ../lib/msg.h ../lib/msgtext.h ../lib/dbcfg.h ../lib/dbnode.h ../lib/dbtic.h ../lib/dbdupe.h ../lib/dbuser.h ../lib/dbftn.h sendmail.h mgrutil.h postnetmail.h ping.h
|
||||||
|
createm.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h createm.h
|
||||||
|
createf.o: ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/records.h ../lib/common.h ../lib/clcomm.h createm.h
|
||||||
# End of generated dependencies
|
# End of generated dependencies
|
||||||
|
128
mbfido/createm.c
128
mbfido/createm.c
@ -36,3 +36,131 @@
|
|||||||
#include "../lib/clcomm.h"
|
#include "../lib/clcomm.h"
|
||||||
#include "createm.h"
|
#include "createm.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define MCHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
|
||||||
|
|
||||||
|
|
||||||
|
int create_msgarea(char *marea, faddr *p_from)
|
||||||
|
{
|
||||||
|
char *temp, *buf, *tag, *desc, *p;
|
||||||
|
FILE *gp, *ap, *mp;
|
||||||
|
long offset;
|
||||||
|
int i;
|
||||||
|
sysconnect System;
|
||||||
|
|
||||||
|
temp = calloc(PATH_MAX, sizeof(char));
|
||||||
|
sprintf(temp, "%s/etc/mgroups.data", getenv("MBSE_ROOT"));
|
||||||
|
if ((gp = fopen(temp, "r")) == NULL) {
|
||||||
|
WriteError("$Can't open %s", temp);
|
||||||
|
free(temp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
fread(&mgrouphdr, sizeof(mgrouphdr), 1, gp);
|
||||||
|
|
||||||
|
fseek(gp, mgrouphdr.hdrsize, SEEK_SET);
|
||||||
|
while ((fread(&mgroup, mgrouphdr.recsize, 1, gp)) == 1) {
|
||||||
|
if ((mgroup.UpLink.zone == p_from->zone) && (mgroup.UpLink.net == p_from->net) &&
|
||||||
|
(mgroup.UpLink.node == p_from->node) && (mgroup.UpLink.point == p_from->point) &&
|
||||||
|
strlen(mgroup.AreaFile)) {
|
||||||
|
Syslog('m', "Checking echogroup %s %s", mgroup.Name, mgroup.Comment);
|
||||||
|
sprintf(temp, "%s/%s", CFG.alists_path , mgroup.AreaFile);
|
||||||
|
if ((ap = fopen(temp, "r")) == NULL) {
|
||||||
|
WriteError("$Can't open %s", temp);
|
||||||
|
free(temp);
|
||||||
|
fclose(gp);
|
||||||
|
return FALSE;
|
||||||
|
} else {
|
||||||
|
buf = calloc(4097, sizeof(char));
|
||||||
|
while (fgets(buf, 4096, ap)) {
|
||||||
|
tag = strtok(buf, "\t \r\n\0");
|
||||||
|
p = strtok(NULL, "\r\n\0");
|
||||||
|
desc = p;
|
||||||
|
while ((*desc == ' ') || (*desc == '\t'))
|
||||||
|
desc++;
|
||||||
|
if (strcmp(tag, marea) == 0) {
|
||||||
|
Syslog('m', "Found tag \"%s\" desc \"%s\"", tag, desc);
|
||||||
|
sprintf(temp, "%s/etc/mareas.data", getenv("MBSE_ROOT"));
|
||||||
|
if ((mp = fopen(temp, "r+")) == NULL) {
|
||||||
|
WriteError("$Can't open %s", temp);
|
||||||
|
fclose(ap);
|
||||||
|
fclose(gp);
|
||||||
|
free(buf);
|
||||||
|
free(temp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
fread(&msgshdr, sizeof(msgshdr), 1, mp);
|
||||||
|
offset = msgshdr.hdrsize + ((mgroup.StartArea -1) * (msgshdr.recsize + msgshdr.syssize));
|
||||||
|
if (fseek(mp, offset, SEEK_SET) == -1) {
|
||||||
|
WriteError("$Can't seek in %s", temp);
|
||||||
|
fclose(ap);
|
||||||
|
fclose(gp);
|
||||||
|
fclose(mp);
|
||||||
|
free(buf);
|
||||||
|
free(temp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
while (fread(&msgs, sizeof(msgs), 1, mp) == 1) {
|
||||||
|
if (!msgs.Active) {
|
||||||
|
fseek(mp, - msgshdr.recsize, SEEK_CUR);
|
||||||
|
memset(&msgs, 0, sizeof(msgs));
|
||||||
|
offset = ((ftell(mp) - msgshdr.hdrsize) / (msgshdr.recsize + msgshdr.syssize)) + 1;
|
||||||
|
Syslog('m', "Found free slot at %ld", offset);
|
||||||
|
strncpy(msgs.Tag, tag, 50);
|
||||||
|
strncpy(msgs.Name, desc, 40);
|
||||||
|
strncpy(msgs.QWKname, tag, 20);
|
||||||
|
msgs.MsgKinds = PUBLIC;
|
||||||
|
msgs.Type = ECHOMAIL;
|
||||||
|
msgs.DaysOld = CFG.defdays;
|
||||||
|
msgs.MaxMsgs = CFG.defmsgs;
|
||||||
|
msgs.UsrDelete = mgroup.UsrDelete;
|
||||||
|
msgs.RDSec = mgroup.RDSec;
|
||||||
|
msgs.WRSec = mgroup.WRSec;
|
||||||
|
msgs.SYSec = mgroup.SYSec;
|
||||||
|
strncpy(msgs.Group, mgroup.Name, 12);
|
||||||
|
msgs.Aka = mgroup.UseAka;
|
||||||
|
strncpy(msgs.Origin, CFG.origin, 50);
|
||||||
|
msgs.Aliases = mgroup.Aliases;
|
||||||
|
msgs.NetReply = mgroup.NetReply;
|
||||||
|
msgs.Active = TRUE;
|
||||||
|
msgs.Quotes = mgroup.Quotes;
|
||||||
|
msgs.Rfccode = CHRS_DEFAULT_RFC;
|
||||||
|
msgs.Ftncode = CHRS_DEFAULT_FTN;
|
||||||
|
msgs.MaxArticles = CFG.maxarticles;
|
||||||
|
tag = tl(tag);
|
||||||
|
sprintf(msgs.Base, "%s/%s", mgroup.BasePath, tag);
|
||||||
|
fwrite(&msgs, sizeof(msgs), 1, mp);
|
||||||
|
|
||||||
|
memset(&System, 0, sizeof(System));
|
||||||
|
System.aka = mgroup.UpLink;
|
||||||
|
System.sendto = System.receivefrom = TRUE;
|
||||||
|
fwrite(&System, sizeof(System), 1, mp);
|
||||||
|
memset(&System, 0, sizeof(System));
|
||||||
|
for (i = 1; i < (msgshdr.syssize / sizeof(System)); i++)
|
||||||
|
fwrite(&System, sizeof(System), 1, mp);
|
||||||
|
|
||||||
|
fclose(mp);
|
||||||
|
fclose(gp);
|
||||||
|
fclose(ap);
|
||||||
|
free(buf);
|
||||||
|
free(temp);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Skip systems
|
||||||
|
*/
|
||||||
|
fseek(mp, msgshdr.syssize, SEEK_CUR);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* No free slot at the end, append a slot.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(buf);
|
||||||
|
fclose(ap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(gp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#define _CREATEM_H
|
#define _CREATEM_H
|
||||||
|
|
||||||
|
|
||||||
|
int create_msgarea(char *, faddr *);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -756,8 +756,6 @@ void F_Pause(faddr *t, int Pause, FILE *tmp)
|
|||||||
|
|
||||||
void F_Message(faddr *t, char *Buf, FILE *tmp)
|
void F_Message(faddr *t, char *Buf, FILE *tmp)
|
||||||
{
|
{
|
||||||
fidoaddr Node;
|
|
||||||
|
|
||||||
ShiftBuf(Buf, 8);
|
ShiftBuf(Buf, 8);
|
||||||
CleanBuf(Buf);
|
CleanBuf(Buf);
|
||||||
|
|
||||||
@ -769,8 +767,7 @@ void F_Message(faddr *t, char *Buf, FILE *tmp)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
UpdateNode();
|
UpdateNode();
|
||||||
memcpy(&Node, faddr2fido(t), sizeof(fidoaddr));
|
SearchNodeFaddr(t);
|
||||||
SearchNode(Node);
|
|
||||||
Syslog('+', "FileMgr: Message %s", GetBool(nodes.Message));
|
Syslog('+', "FileMgr: Message %s", GetBool(nodes.Message));
|
||||||
fprintf(tmp, "FileMgr Message file is %s\n", GetBool(nodes.Message));
|
fprintf(tmp, "FileMgr Message file is %s\n", GetBool(nodes.Message));
|
||||||
}
|
}
|
||||||
@ -779,8 +776,6 @@ void F_Message(faddr *t, char *Buf, FILE *tmp)
|
|||||||
|
|
||||||
void F_Tick(faddr *t, char *Buf, FILE *tmp)
|
void F_Tick(faddr *t, char *Buf, FILE *tmp)
|
||||||
{
|
{
|
||||||
fidoaddr Node;
|
|
||||||
|
|
||||||
ShiftBuf(Buf, 5);
|
ShiftBuf(Buf, 5);
|
||||||
CleanBuf(Buf);
|
CleanBuf(Buf);
|
||||||
|
|
||||||
@ -795,16 +790,15 @@ void F_Tick(faddr *t, char *Buf, FILE *tmp)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
UpdateNode();
|
UpdateNode();
|
||||||
memcpy(&Node, faddr2fido(t), sizeof(fidoaddr));
|
SearchNodeFaddr(t);
|
||||||
SearchNode(Node);
|
Syslog('+', "FileMgr: Tick %s, Advanced %s", GetBool(nodes.Tic), GetBool(nodes.AdvTic));
|
||||||
Syslog('+', "FileMgr: Tick %s, Advanced %s", nodes.Tic, nodes.AdvTic);
|
|
||||||
if (nodes.Tic)
|
if (nodes.Tic)
|
||||||
if (nodes.AdvTic)
|
if (nodes.AdvTic)
|
||||||
fprintf(tmp, "Tick mode is advanced");
|
fprintf(tmp, "Tick mode is advanced\n");
|
||||||
else
|
else
|
||||||
fprintf(tmp, "Tick mode is normal");
|
fprintf(tmp, "Tick mode is normal\n");
|
||||||
else
|
else
|
||||||
fprintf(tmp, "Tick mode is off");
|
fprintf(tmp, "Tick mode is off\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -814,7 +808,6 @@ int FileMgr(faddr *f, faddr *t, char *replyid, char *subj, time_t mdate, int fla
|
|||||||
int i, rc = 0, spaces;
|
int i, rc = 0, spaces;
|
||||||
char *Buf;
|
char *Buf;
|
||||||
FILE *tmp, *np;
|
FILE *tmp, *np;
|
||||||
fidoaddr Node;
|
|
||||||
|
|
||||||
f_help = f_stat = f_unlnk = f_list = f_query = FALSE;
|
f_help = f_stat = f_unlnk = f_list = f_query = FALSE;
|
||||||
filemgr++;
|
filemgr++;
|
||||||
@ -846,8 +839,7 @@ int FileMgr(faddr *f, faddr *t, char *replyid, char *subj, time_t mdate, int fla
|
|||||||
/*
|
/*
|
||||||
* Make sure we refresh the nodes record.
|
* Make sure we refresh the nodes record.
|
||||||
*/
|
*/
|
||||||
memcpy(&Node, faddr2fido(f), sizeof(fidoaddr));
|
SearchNodeFaddr(f);
|
||||||
SearchNode(Node);
|
|
||||||
|
|
||||||
spaces = 0;
|
spaces = 0;
|
||||||
for (i = 0; i < strlen(Buf); i++) {
|
for (i = 0; i < strlen(Buf); i++) {
|
||||||
|
@ -83,7 +83,6 @@ int do_unsec = FALSE; /* Unsecure tossing */
|
|||||||
int do_learn = FALSE; /* News articles learnmode */
|
int do_learn = FALSE; /* News articles learnmode */
|
||||||
int check_crc = TRUE; /* Check .tic crc values */
|
int check_crc = TRUE; /* Check .tic crc values */
|
||||||
int check_dupe = TRUE; /* Check duplicates */
|
int check_dupe = TRUE; /* Check duplicates */
|
||||||
int autocrea = FALSE; /* Autocreate new msg areas */
|
|
||||||
extern int do_quiet; /* Quiet flag */
|
extern int do_quiet; /* Quiet flag */
|
||||||
extern int e_pid; /* Pid of child process */
|
extern int e_pid; /* Pid of child process */
|
||||||
extern int show_log; /* Show logging on screen */
|
extern int show_log; /* Show logging on screen */
|
||||||
@ -131,7 +130,6 @@ void Help(void)
|
|||||||
colour(9, 0);
|
colour(9, 0);
|
||||||
printf(" Options are:\n\n");
|
printf(" Options are:\n\n");
|
||||||
colour(3, 0);
|
colour(3, 0);
|
||||||
printf(" -a -auto Autocreate new msg areas\n");
|
|
||||||
printf(" -f -full Full Mailscan\n");
|
printf(" -f -full Full Mailscan\n");
|
||||||
printf(" -l -learn Learn News dupes\n");
|
printf(" -l -learn Learn News dupes\n");
|
||||||
printf(" -noc -nocrc Skip CRC checking\n");
|
printf(" -noc -nocrc Skip CRC checking\n");
|
||||||
@ -369,8 +367,6 @@ int main(int argc, char **argv)
|
|||||||
do_mail = TRUE;
|
do_mail = TRUE;
|
||||||
else if (strncmp(tl(argv[i]), "w", 1) == 0)
|
else if (strncmp(tl(argv[i]), "w", 1) == 0)
|
||||||
do_stat = TRUE;
|
do_stat = TRUE;
|
||||||
else if (strncmp(tl(argv[i]), "-a", 2) == 0)
|
|
||||||
autocrea = TRUE;
|
|
||||||
else if (strncmp(tl(argv[i]), "-f", 2) == 0)
|
else if (strncmp(tl(argv[i]), "-f", 2) == 0)
|
||||||
do_full = TRUE;
|
do_full = TRUE;
|
||||||
else if (strncmp(tl(argv[i]), "-l", 2) == 0)
|
else if (strncmp(tl(argv[i]), "-l", 2) == 0)
|
||||||
|
@ -31,12 +31,12 @@
|
|||||||
#include "../lib/libs.h"
|
#include "../lib/libs.h"
|
||||||
#include "../lib/structs.h"
|
#include "../lib/structs.h"
|
||||||
#include "../lib/users.h"
|
#include "../lib/users.h"
|
||||||
|
#include "../lib/common.h"
|
||||||
#include "../lib/records.h"
|
#include "../lib/records.h"
|
||||||
#include "../lib/dbcfg.h"
|
#include "../lib/dbcfg.h"
|
||||||
#include "../lib/dbuser.h"
|
#include "../lib/dbuser.h"
|
||||||
#include "../lib/dbnode.h"
|
#include "../lib/dbnode.h"
|
||||||
#include "../lib/dbftn.h"
|
#include "../lib/dbftn.h"
|
||||||
#include "../lib/common.h"
|
|
||||||
#include "../lib/clcomm.h"
|
#include "../lib/clcomm.h"
|
||||||
#include "tracker.h"
|
#include "tracker.h"
|
||||||
#include "addpkt.h"
|
#include "addpkt.h"
|
||||||
|
121
mbfido/tosspkt.c
121
mbfido/tosspkt.c
@ -46,6 +46,7 @@
|
|||||||
#include "postnetmail.h"
|
#include "postnetmail.h"
|
||||||
#include "postecho.h"
|
#include "postecho.h"
|
||||||
#include "rollover.h"
|
#include "rollover.h"
|
||||||
|
#include "createm.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -55,7 +56,6 @@
|
|||||||
extern int do_quiet;
|
extern int do_quiet;
|
||||||
extern int do_unsec;
|
extern int do_unsec;
|
||||||
extern int check_dupe;
|
extern int check_dupe;
|
||||||
extern int autocrea;
|
|
||||||
extern time_t t_start;
|
extern time_t t_start;
|
||||||
extern int most_debug;
|
extern int most_debug;
|
||||||
|
|
||||||
@ -92,7 +92,6 @@ static int at_zero = 0;
|
|||||||
*/
|
*/
|
||||||
char *aread(char *, int, FILE *);
|
char *aread(char *, int, FILE *);
|
||||||
int importmsg(faddr *, faddr *, faddr *, char *, char *, time_t, int, int, FILE *);
|
int importmsg(faddr *, faddr *, faddr *, char *, char *, time_t, int, int, FILE *);
|
||||||
void autocreate(char *, faddr *);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -206,11 +205,9 @@ int importmsg(faddr *p_from, faddr *f, faddr *t, char *orig, char *subj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!SearchMsgs(marea)) {
|
if (!SearchMsgs(marea)) {
|
||||||
WriteError("Unknown echo area %s", marea);
|
Syslog('m', "Unknown echo area %s", marea);
|
||||||
if (autocrea) {
|
if (!create_msgarea(marea, p_from)) {
|
||||||
autocreate(marea, p_from);
|
WriteError("Create echomail area %s failed", marea);
|
||||||
if (!SearchMsgs(marea)) {
|
|
||||||
WriteError("Autocreate of area %s failed.", area);
|
|
||||||
echo_bad++;
|
echo_bad++;
|
||||||
echo_in++;
|
echo_in++;
|
||||||
bad = TRUE;
|
bad = TRUE;
|
||||||
@ -218,12 +215,13 @@ int importmsg(faddr *p_from, faddr *f, faddr *t, char *orig, char *subj,
|
|||||||
free(buf);
|
free(buf);
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
} else {
|
if (!SearchMsgs(marea)) {
|
||||||
|
WriteError("Unknown echo area %s", marea);
|
||||||
echo_bad++;
|
echo_bad++;
|
||||||
echo_in++;
|
echo_in++;
|
||||||
bad = TRUE;
|
bad = TRUE;
|
||||||
free(buf);
|
|
||||||
free(marea);
|
free(marea);
|
||||||
|
free(buf);
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -246,111 +244,6 @@ int importmsg(faddr *p_from, faddr *f, faddr *t, char *orig, char *subj,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create echomail area if it doesn't excist and allowed.
|
|
||||||
* Contributed by Redy Rodriguez.
|
|
||||||
*/
|
|
||||||
void autocreate(char *marea, faddr *p_from)
|
|
||||||
{
|
|
||||||
FILE *pMsgs;
|
|
||||||
char temp[250];
|
|
||||||
int i;
|
|
||||||
struct _sysconnect syscon;
|
|
||||||
|
|
||||||
if (!SearchMsgs((char *)"DEFAULT")){
|
|
||||||
WriteError("Can't find DEFAULT area, can't autocreate:");
|
|
||||||
autocrea = FALSE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
sprintf(temp, "%s/etc/mareas.data", getenv("MBSE_ROOT"));
|
|
||||||
if ((pMsgs = fopen(temp, "r+")) == NULL) {
|
|
||||||
WriteError("$Database error: Can't create %s", temp);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
strncat(msgs.Name,marea,40-strlen(msgs.Name));
|
|
||||||
strncpy(msgs.Tag,marea,50);
|
|
||||||
strncpy(msgs.QWKname,marea,20);
|
|
||||||
strncat(msgs.Base,marea,64-strlen(msgs.Base));
|
|
||||||
fseek(pMsgs, 0, SEEK_END);
|
|
||||||
Syslog('+', "Autocreate area %s", marea);
|
|
||||||
|
|
||||||
memset(&syscon, 0, sizeof(syscon));
|
|
||||||
syscon.aka.zone = p_from->zone;
|
|
||||||
syscon.aka.node = p_from->node;
|
|
||||||
syscon.aka.net = p_from->net;
|
|
||||||
if (SearchFidonet(p_from->zone))
|
|
||||||
strcpy(syscon.aka.domain,fidonet.domain);
|
|
||||||
else {
|
|
||||||
WriteError("New area %s from node of unknown zone %d not created.", marea,p_from->zone);
|
|
||||||
fclose(pMsgs);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
syscon.sendto = TRUE;
|
|
||||||
syscon.receivefrom = TRUE;
|
|
||||||
if (msgs.Aka.zone == 0) {
|
|
||||||
for (i = 0; i < 40; i++) {
|
|
||||||
if (CFG.akavalid[i]) {
|
|
||||||
msgs.Aka.zone=CFG.aka[i].zone;
|
|
||||||
msgs.Aka.net=CFG.aka[i].net;
|
|
||||||
msgs.Aka.node=CFG.aka[i].node;
|
|
||||||
msgs.Aka.point=CFG.aka[i].point;
|
|
||||||
strcpy(msgs.Aka.domain,CFG.aka[i].domain);
|
|
||||||
i=40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (i = 0; i < 40; i++) {
|
|
||||||
if (CFG.akavalid[i] && (strcmp(CFG.aka[i].domain,msgs.Aka.domain)==0)) {
|
|
||||||
msgs.Aka.zone=CFG.aka[i].zone;
|
|
||||||
msgs.Aka.net=CFG.aka[i].net;
|
|
||||||
msgs.Aka.node=CFG.aka[i].node;
|
|
||||||
msgs.Aka.point=CFG.aka[i].point;
|
|
||||||
strcpy(msgs.Aka.domain,CFG.aka[i].domain);
|
|
||||||
i=40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (i = 0; i < 40; i++) {
|
|
||||||
if ((CFG.akavalid[i]) && (CFG.aka[i].zone == p_from->zone)) {
|
|
||||||
msgs.Aka.zone=CFG.aka[i].zone;
|
|
||||||
msgs.Aka.net=CFG.aka[i].net;
|
|
||||||
msgs.Aka.node=CFG.aka[i].node;
|
|
||||||
msgs.Aka.point=CFG.aka[i].point;
|
|
||||||
strcpy(msgs.Aka.domain,CFG.aka[i].domain);
|
|
||||||
i=40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (i = 0; i < 40; i++) {
|
|
||||||
if ((CFG.akavalid[i]) && (CFG.aka[i].zone == p_from->zone) && (CFG.aka[i].net == p_from->net)) {
|
|
||||||
msgs.Aka.zone=CFG.aka[i].zone;
|
|
||||||
msgs.Aka.net=CFG.aka[i].net;
|
|
||||||
msgs.Aka.node=CFG.aka[i].node;
|
|
||||||
msgs.Aka.point=CFG.aka[i].point;
|
|
||||||
strcpy(msgs.Aka.domain,CFG.aka[i].domain);
|
|
||||||
i=40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (i = 0; i < 40; i++) {
|
|
||||||
if ((CFG.akavalid[i]) && (CFG.aka[i].zone == p_from->zone) &&
|
|
||||||
(CFG.aka[i].net == p_from->net) && (CFG.aka[i].node == p_from->node)) {
|
|
||||||
msgs.Aka.zone=CFG.aka[i].zone;
|
|
||||||
msgs.Aka.net=CFG.aka[i].net;
|
|
||||||
msgs.Aka.node=CFG.aka[i].node;
|
|
||||||
msgs.Aka.point=CFG.aka[i].point;
|
|
||||||
strcpy(msgs.Aka.domain,CFG.aka[i].domain);
|
|
||||||
i=40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fwrite(&msgs, msgshdr.recsize, 1, pMsgs);
|
|
||||||
fwrite(&syscon, sizeof(syscon), 1, pMsgs);
|
|
||||||
memset(&syscon, 0, sizeof(syscon));
|
|
||||||
for (i = 1 ; i < CFG.toss_systems; i++ )
|
|
||||||
fwrite(&syscon, sizeof(syscon), 1, pMsgs);
|
|
||||||
fclose(pMsgs);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Toss one packet.
|
* Toss one packet.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user