From e63a3b2bf591122542fb1b699d2a1c5a6870b7e2 Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Sat, 11 Jan 2003 12:14:04 +0000 Subject: [PATCH] Serveral fixes and updates --- ChangeLog | 13 ++++++-- mbfido/postnetmail.c | 22 +++++++++++-- mbfido/tic.c | 76 +++++++++++++++++++------------------------- mbsebbs/mail.c | 2 +- 4 files changed, 64 insertions(+), 49 deletions(-) diff --git a/ChangeLog b/ChangeLog index e5ff6da0..d63c6f30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,9 +19,9 @@ v0.37.00 26-Dec-2002. only call binkp nodes. general: - A new developer joined the team, David Gonzalez. + A new developer/translator joined the team, David Gonzalez. The settings to suppres some IP protocols (global and nodes) - are removed, this behaviour can be set using nodelist flags + are removed, this behaviour must be set using nodelist flags configuration. Debug logging for mail and news now have one setting, the M. Nodelist debug logging now uses the N character. @@ -56,6 +56,15 @@ v0.37.00 26-Dec-2002. Echomail from other zones showed the address of your own zone. Added logging when other errors are found. At zonegates, the seenby lines were twice stripped. + Another patch to compensate for sysops that pack pascalnet + files in fidonet packets and send these messages into the world + without zone information. + Made the incoming tic files complete case insensitive, mixed + case is now processed. If such file is received, the LFN will + be set to that name. + + mbsebbs: + Changed to use the new nodelist lookup methods. mbsetup: Removed global flags No-IBN, IFC and ITN from the setup. diff --git a/mbfido/postnetmail.c b/mbfido/postnetmail.c index 84022c1d..d75784a7 100644 --- a/mbfido/postnetmail.c +++ b/mbfido/postnetmail.c @@ -82,9 +82,9 @@ int postnetmail(FILE *fp, faddr *f, faddr *t, char *orig, char *subject, time_t time_t now; struct tm *tm; - Syslog('M', "Post netmail from: %s", ascfnode(f, 0xff)); - Syslog('M', "Post netmail to : %s", ascfnode(t, 0xff)); - Syslog('M', "Post netmail subj: %s", MBSE_SS(subject)); + Syslog('m', "Post netmail from: %s", ascfnode(f, 0xff)); + Syslog('m', "Post netmail to : %s", ascfnode(t, 0xff)); + Syslog('m', "Post netmail subj: %s", MBSE_SS(subject)); net_in++; /* @@ -107,6 +107,22 @@ int postnetmail(FILE *fp, faddr *f, faddr *t, char *orig, char *subject, time_t Syslog('m', "Setting pointinfo (%d) from MSGID", ta->point); fmpt = f->point = ta->point; } + if ((ta->net == f->net) && (ta->node == f->node) && (f->zone == 0)) { + /* + * Missing zone info, maybe later we will see a INTL kludge or so, but for + * now, just in case we fix it. And we need that for some Aka collecting + * sysop who doesn't know how to configure his system right. + */ + Syslog('m', "No from zone set, setting zone %d from MSGID", ta->zone); + f->zone = ta->zone; + /* + * 99.9 % chance that the destination zone is also missing. + */ + if (t->zone == 0) { + t->zone = ta->zone; + Syslog('m', "No dest zone set, setting zone %d from MSGID", ta->zone); + } + } tidy_faddr(ta); } } diff --git a/mbfido/tic.c b/mbfido/tic.c index 602df725..1e8a02eb 100644 --- a/mbfido/tic.c +++ b/mbfido/tic.c @@ -164,10 +164,12 @@ int Tic() */ int LoadTic(char *inb, char *tfn) { - FILE *tfp; - char *Temp, *Temp2, *Buf, *Log = NULL, RealName[256]; - int i, j, rc, bufsize, DescCnt = FALSE; - fa_list *sbl = NULL; + FILE *tfp; + char *Temp, *Temp2, *Buf, *Log = NULL, RealName[256]; + int i, j, rc, bufsize, DescCnt = FALSE; + fa_list *sbl = NULL; + DIR *dp; + struct dirent *de; if (CFG.slow_util && do_quiet) usleep(1); @@ -425,47 +427,27 @@ int LoadTic(char *inb, char *tfn) * Find out what the real name of the file is, * most likely this is a 8.3 filename. */ - sprintf(Temp2, "%s", TIC.TicIn.File); - sprintf(Temp, "%s/%s", TIC.Inbound, Temp2); - if (file_exist(Temp, R_OK) == 0) { - strcpy(RealName, Temp2); - } else { - tu(Temp2); - sprintf(Temp, "%s/%s", TIC.Inbound, Temp2); - if (file_exist(Temp, R_OK) == 0) { - strcpy(RealName, Temp2); - } else { - tl(Temp2); - sprintf(Temp, "%s/%s", TIC.Inbound, Temp2); - if (file_exist(Temp, R_OK) == 0) { - strcpy(RealName, Temp2); - } - } - } - - /* - * If the above didn't find the file and we got a LFN - * the search again. - */ - if (strlen(TIC.TicIn.FullName) && (strlen(RealName) == 0)) { - sprintf(Temp2, "%s", TIC.TicIn.FullName); - sprintf(Temp, "%s/%s", TIC.Inbound, Temp2); - if (file_exist(Temp, R_OK) == 0) { - strcpy(RealName, Temp2); - } else { - tu(Temp2); - sprintf(Temp, "%s/%s", TIC.Inbound, Temp2); - if (file_exist(Temp, R_OK) == 0) { - strcpy(RealName, Temp2); - } else { - tl(Temp2); - sprintf(Temp, "%s/%s", TIC.Inbound, Temp2); - if (file_exist(Temp, R_OK) == 0) { - strcpy(RealName, Temp2); - } - } + if ((dp = opendir(TIC.Inbound)) == NULL) { + WriteError("$Can't opendir(%s)", TIC.Inbound); + return 1; + } + while ((de = readdir(dp))) { + /* + * Check 8.3 FN + */ + if (strcasecmp(de->d_name, TIC.TicIn.File) == 0) { + strncpy(RealName, de->d_name, 255); + break; + } + /* + * Check LFN + */ + if (strcasecmp(de->d_name, TIC.TicIn.FullName) == 0) { + strncpy(RealName, de->d_name, 255); + break; } } + closedir(dp); } if (strlen(RealName) == 0) { @@ -476,6 +458,14 @@ int LoadTic(char *inb, char *tfn) TIC.Orphaned = TRUE; WriteError("Can't find file in inbound"); } else { + /* + * If no LFN received in the ticfile and the file in the inbound is the same as the 8.3 name + * but only the case is different, then treat the real filename as LFN. + */ + if ((strlen(TIC.TicIn.FullName) == 0) && strcmp(TIC.TicIn.File, RealName) && (strcasecmp(TIC.TicIn.File, RealName) == 0)) { + Syslog('f', "Real filename possible LFN, faking it"); + strcpy(TIC.TicIn.FullName, RealName); + } Syslog('f', "Real filename in inbound is \"%s\"", RealName); Syslog('+', "8.3 name \"%s\", LFN \"%s\"", TIC.TicIn.File, TIC.TicIn.FullName); if (strcmp(RealName, TIC.TicIn.File)) { diff --git a/mbsebbs/mail.c b/mbsebbs/mail.c index dd67dc65..509b4cf8 100644 --- a/mbsebbs/mail.c +++ b/mbsebbs/mail.c @@ -196,11 +196,11 @@ int Crash_Option(faddr *Dest) if (exitinfo.Security.level < CFG.iCrashLevel) return 0; - cmmask = getCMmask(); point = Dest->point; Dest->point = 0; if (((Nlent = getnlent(Dest)) != NULL) && (Nlent->addr.zone)) { + cmmask = getCMmask(); if (Nlent->oflags & cmmask) { /* Crash [y/N]: */ pout(CYAN, BLACK, (char *)Language(461));