From 9fd58359833092dfbf77c1ac2d59e646299af9eb Mon Sep 17 00:00:00 2001 From: Eric Allman Date: Fri, 2 Oct 1981 18:07:38 -0800 Subject: [PATCH] use ruleset 2 to rewrite names after the $g translate (to fix some forwarding problems; do a read check in putmessage (just in case the temp file disappeared); some general cleanup. SCCS-vsn: usr.sbin/sendmail/src/deliver.c 3.45 SCCS-vsn: usr.sbin/sendmail/src/collect.c 3.23 SCCS-vsn: usr.sbin/sendmail/src/version.c 3.44 --- usr/src/usr.sbin/sendmail/src/collect.c | 6 ++-- usr/src/usr.sbin/sendmail/src/deliver.c | 42 +++++++++++++++++++------ usr/src/usr.sbin/sendmail/src/version.c | 4 +-- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/usr/src/usr.sbin/sendmail/src/collect.c b/usr/src/usr.sbin/sendmail/src/collect.c index 786e0abf20..bdf99d0a86 100644 --- a/usr/src/usr.sbin/sendmail/src/collect.c +++ b/usr/src/usr.sbin/sendmail/src/collect.c @@ -1,7 +1,7 @@ # include # include "sendmail.h" -static char SccsId[] = "@(#)collect.c 3.22 %G%"; +static char SccsId[] = "@(#)collect.c 3.23 %G%"; /* ** COLLECT -- read & parse message header & make temp file. @@ -168,10 +168,10 @@ maketemp(from) { (void) freopen(InFileName, "w", tf); fputs("\nMAIL DELETED BECAUSE OF LACK OF DISK SPACE\n\n", tf); - syserr("Out of disk space for temp file"); + syserr("collect: Out of disk space for temp file"); } else - syserr("Cannot write %s", InFileName); + syserr("collect: Cannot write %s", InFileName); (void) freopen("/dev/null", "w", tf); } } diff --git a/usr/src/usr.sbin/sendmail/src/deliver.c b/usr/src/usr.sbin/sendmail/src/deliver.c index 25a431bf3d..754cea4e05 100644 --- a/usr/src/usr.sbin/sendmail/src/deliver.c +++ b/usr/src/usr.sbin/sendmail/src/deliver.c @@ -7,7 +7,7 @@ # include # endif LOG -static char SccsId[] = "@(#)deliver.c 3.44 %G%"; +static char SccsId[] = "@(#)deliver.c 3.45 %G%"; /* ** DELIVER -- Deliver a message to a list of addresses. @@ -37,20 +37,22 @@ deliver(to, editfcn) ADDRESS *to; int (*editfcn)(); { - char *host; - char *user; + char *host; /* host being sent to */ + char *user; /* user being sent to */ char **pvp; register char **mvp; register char *p; - register struct mailer *m; + register struct mailer *m; /* mailer for this recipient */ register int i; extern putmessage(); extern bool checkcompat(); char *pv[MAXPV+1]; - char tobuf[MAXLINE]; + char tobuf[MAXLINE]; /* text line of to people */ char buf[MAXNAME]; ADDRESS *ctladdr; extern ADDRESS *getctladdr(); + char tfrombuf[MAXNAME]; /* translated from person */ + extern char **prescan(); if (!ForceMail && bitset(QDONTSEND, to->q_flags)) return (0); @@ -72,7 +74,19 @@ deliver(to, editfcn) m = Mailer[to->q_mailer]; host = to->q_host; - define('g', m->m_from); /* translated from address */ + + /* rewrite from address, using rewriting rules */ + (void) expand(m->m_from, buf, &buf[sizeof buf - 1]); + mvp = prescan(buf, '\0'); + if (mvp == NULL) + { + syserr("bad mailer from translate \"%s\"", buf); + return (EX_SOFTWARE); + } + rewrite(mvp, 2); + cataddr(mvp, tfrombuf, sizeof tfrombuf); + + define('g', tfrombuf); /* translated sender address */ define('h', host); /* to host */ Errors = 0; errno = 0; @@ -661,10 +675,20 @@ putmessage(fp, m) ** Output the body of the message */ - rewind(TempFile); - while (!ferror(fp) && (i = fread(buf, 1, BUFSIZ, TempFile)) > 0) - (void) fwrite(buf, 1, i, fp); + if (TempFile != NULL) + { + rewind(TempFile); + while (!ferror(fp) && (i = fread(buf, 1, BUFSIZ, TempFile)) > 0) + (void) fwrite(buf, 1, i, fp); + + if (ferror(TempFile)) + { + syserr("putmessage: read error"); + setstat(EX_IOERR); + } + } + fflush(fp); if (ferror(fp) && errno != EPIPE) { syserr("putmessage: write error"); diff --git a/usr/src/usr.sbin/sendmail/src/version.c b/usr/src/usr.sbin/sendmail/src/version.c index d6bdf340ee..780699697c 100644 --- a/usr/src/usr.sbin/sendmail/src/version.c +++ b/usr/src/usr.sbin/sendmail/src/version.c @@ -1,3 +1,3 @@ -static char SccsId[] = "@(#)SendMail version 3.43 of %G%"; +static char SccsId[] = "@(#)SendMail version 3.44 of %G%"; -char Version[] = "3.43 [%G%]"; +char Version[] = "3.44 [%G%]"; -- 2.20.1