From 660ac062e6cd00236a924c60cb02489395297088 Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Sat, 19 Nov 2005 19:43:03 +0000 Subject: [PATCH] Installed new method of bad tic handling --- ChangeLog | 1 + mbfido/Makefile | 2 +- mbfido/mover.c | 6 +++--- mbfido/ptic.c | 25 +++++++++-------------- mbfido/tic.c | 54 ++++++++++++++++++++++++++++++++++++++++++++----- 5 files changed, 64 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index ef822870..77e4c432 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ v0.83.2 16-Nov-2005 mbfido: Fixed crash when receiving bad tics. + Reinstalled tic orphans and bad crc handling using new method. v0.83.1 12-Nov-2005 - 16-Nov-2005 diff --git a/mbfido/Makefile b/mbfido/Makefile index caecdbd9..6146d37b 100644 --- a/mbfido/Makefile +++ b/mbfido/Makefile @@ -162,7 +162,7 @@ mbindex.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h mbindex.h msgutil.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h ../lib/msg.h ../lib/msgtext.h ../lib/diesel.h msgutil.h postecho.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/msg.h ../lib/msgtext.h ../lib/mbsedb.h ftn2rfc.h postecho.h storeecho.h addpkt.h rollover.h qualify.h rollover.o: ../config.h ../lib/mbselib.h rollover.h -tic.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h unpack.h fsort.h orphans.h ptic.h tic.h +tic.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h unpack.h fsort.h orphans.h ptic.h mover.h tic.h areamgr.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/msg.h ../lib/msgtext.h ../lib/mbsedb.h ../lib/diesel.h sendmail.h mgrutil.h scan.h createm.h areamgr.h filefind.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h ../lib/msg.h ../lib/msgtext.h ../lib/diesel.h fflist.h filefind.h msgutil.h grlist.o: ../config.h ../lib/mbselib.h grlist.h diff --git a/mbfido/mover.c b/mbfido/mover.c index d250bc22..b16505d3 100644 --- a/mbfido/mover.c +++ b/mbfido/mover.c @@ -46,14 +46,14 @@ void mover(char *fn) snprintf(From, PATH_MAX, "%s/%s", TIC.Inbound, fn); snprintf(To, PATH_MAX, "%s/%s", CFG.badtic, fn); - Syslog('!', "Moving %s to %s", From, To); + Syslog('+', "Moving %s to %s", From, To); if (mkdirs(To, 0770)) { if ((rc = file_mv(From, To))) { - WriteError("$Failed to move %s to %s: %s", From, To, strerror(rc)); + WriteError("Failed to move %s to %s: %s", From, To, strerror(rc)); } } else { - WriteError("$Can't create directory for %s", To); + WriteError("Can't create directory for %s", To); } free(From); diff --git a/mbfido/ptic.c b/mbfido/ptic.c index 212af252..17cb2226 100644 --- a/mbfido/ptic.c +++ b/mbfido/ptic.c @@ -101,19 +101,6 @@ int ProcessTic(fa_list **sbl, orphans **opl) if (TIC.Orphaned) { fill_orphans(opl, TIC.TicName, TIC.TicIn.Area, TIC.TicIn.File, TRUE, FALSE); Syslog('+', "File not in inbound: %s", TIC.TicIn.File); - /* - * Now check the age of the .tic file. - */ -// snprintf(Temp, PATH_MAX, "%s/%s", TIC.Inbound, TIC.TicName); -// Fdate = file_time(Temp); -// Age = (Now - Fdate) / 84400; -// Syslog('+', "Orphaned tic age %d days", Age); - -// if (Age > 21) { -// tic_bad++; -// mover(TIC.TicName); -// } - free(Temp); return 2; } @@ -138,7 +125,6 @@ int ProcessTic(fa_list **sbl, orphans **opl) Syslog('!', "CRC: expected %08lX, the file is %08lX", TIC.Crc_Int, crc); fill_orphans(opl, TIC.TicName, TIC.TicIn.Area, TIC.TicIn.File, FALSE, TRUE); if (check_crc) { -// Bad((char *)"CRC: error, %s may be damaged", TIC.TicIn.File); Syslog('+', "Bad CRC, will check this ticfile later"); free(Temp); return 1; @@ -584,9 +570,18 @@ int ProcessTic(fa_list **sbl, orphans **opl) /* * Now check if other (older) ticfiles point to this file */ + First = TRUE; for (topl = *opl; topl; topl = topl->next) { + if (First) { + Syslog('f', "TIC file TIC area Filename ORP CRC DEL"); + Syslog('f', "------------ -------------------- ------------ --- --- ---"); + First = FALSE; + } + Syslog('f', "%-12s %-20s %-12s %s %s %s", topl->TicName, topl->Area, topl->FileName, + topl->Orphaned ? "Yes" : "No ", topl->BadCRC ? "Yes" : "No ", topl->Purged ? "Yes":"No "); if ((strcmp(topl->Area, TIC.TicIn.Area) == 0) && (strcmp(topl->FileName, TIC.TicIn.File) == 0)) { - Syslog('f', "Found matching tic file %s, should purge this one", topl->TicName); + Syslog('f', "Found matching tic file %s, mark to purge this one", topl->TicName); + topl->Purged = TRUE; } } diff --git a/mbfido/tic.c b/mbfido/tic.c index 64d71bbd..952c1cce 100644 --- a/mbfido/tic.c +++ b/mbfido/tic.c @@ -36,6 +36,7 @@ #include "fsort.h" #include "orphans.h" #include "ptic.h" +#include "mover.h" #include "tic.h" #define UNPACK_FACTOR 300 @@ -64,9 +65,10 @@ int Tic() DIR *dp; struct dirent *de; struct stat sbuf; - int i, rc = 0, first = TRUE; + int i, rc = 0, first = TRUE, Age; fd_list *fdl = NULL; orphans *opl = NULL, *tmp; + time_t Now, Fdate; IsDoing("Process .tic files"); CompileNL = FALSE; @@ -152,15 +154,57 @@ int Tic() if (CompileNL) CreateSema((char *)"mbindex"); + /* + * Handle the array with orphaned and bad crc ticfiles. + */ Syslog('f', "start tidy_orphans()"); + Now = time(NULL); for (tmp = opl; tmp; tmp = tmp->next) { if (first) { - Syslog('f', "TIC file TIC area Filename ORP CRC"); - Syslog('f', "------------ -------------------- ------------ --- ---"); + Syslog('f', "TIC file TIC area Filename ORP CRC DEL"); + Syslog('f', "------------ -------------------- ------------ --- --- ---"); first = FALSE; } - Syslog('f', "%-12s %-20s %-12s %s %s", tmp->TicName, tmp->Area, tmp->FileName, - tmp->Orphaned ? "Yes" : "No ", tmp->BadCRC ? "Yes" : "No "); + Syslog('f', "%-12s %-20s %-12s %s %s %s", tmp->TicName, tmp->Area, tmp->FileName, + tmp->Orphaned ? "Yes" : "No ", tmp->BadCRC ? "Yes" : "No ", tmp->Purged ? "Yes":"No "); + + /* + * Bad CRC and not marked purged are real crc errors. + */ + if (tmp->BadCRC && (! tmp->Purged)) { + Syslog('+', "Moving %s and %s to badtic directory", tmp->TicName, tmp->FileName); + mover(tmp->TicName); + mover(tmp->FileName); + tic_bad++; + } + + /* + * Orphans that are not marked purged are real orphans, check age. + */ + if (tmp->Orphaned && (! tmp->Purged)) { + fname = calloc(PATH_MAX, sizeof(char)); + snprintf(fname, PATH_MAX, "%s/%s", inbound, tmp->TicName); + Fdate = file_time(fname); + Age = (Now - Fdate) / 84400; + if (Age > 21) { + Syslog('+', "Moving %s of %d days old to badtic", tmp->TicName, Age); + tic_bad++; + mover(tmp->TicName); + } else { + Syslog('+', "Keeping %s of %d days old for %d days", tmp->TicName, Age, 21 - Age); + } + free(fname); + } + + /* + * If marked to purge, remove the ticfile + */ + if (tmp->Purged) { + fname = calloc(PATH_MAX, sizeof(char)); + snprintf(fname, PATH_MAX, "%s/%s", inbound, tmp->TicName); + Syslog('+', "Removing obsolete %s", tmp->TicName); + free(fname); + } } tidy_orphans(&opl);