"s" macro bug in 4.3BSD sendmail +FIX
Dave Cohrs
dave at romano.UUCP
Tue Aug 26 06:59:02 AEST 1986
Subject: "s" macro bug in 4.3BSD sendmail +FIX
Index: /usr/src/usr.lib/sendmail/src/srvrsmtp.c 4.3BSD
Description:
When sendmail runs in daemon mode, it attempts to set the "s" macro
to be the sender's hostname. However, this value gets lost, so
the standard "Received" header line never lists which host it
received a message from. This is due to the fact that the
clearenvelope() routine changed between 4.2 and 4.3, but the
srvrsmtp code didn't change accordingly.
Repeat-By:
Make sure the "Received" header line in /usr/lib/sendmail.cf is
defined as:
HReceived: $?sfrom $s $.by $j; $b
or something similar. The "$?sfrom $s $." part is important.
Do a "sendmail -bz" and restart your daemon. Send a message
to the host running the newly started daemon from another host.
The received line will be something like:
Received: by TESTHOST.DOMAIN; Mon, 25 Aug 86 14:56:49 CDT
but should be:
Received: from OTHERHOST.DOMAIN by TESTHOST.DOMAIN; Mon, 25 Aug 86 14:56:49 CDT
Fix:
The problem is caused by a more thorough clearenvelope() routine in
the 4.3BSD sendmail. The 4.2 version left all macros intact, while
the 4.3 version clears them all out at well. The fix is to redefine
the "s" macro after the envelope has been cleared out. The fix
is:
*** /tmp/srvrsmtp.c Mon Aug 25 15:33:49 1986
--- srvrsmtp.c Mon Aug 25 12:01:52 1986
***************
*** 217,225 ****
--- 226,236 ----
---------------
case CMDMAIL: /* mail -- designate sender */
SmtpPhase = "MAIL";
-<
-< /* force a sending host even if no HELO given */
-< if (RealHostName != NULL && macvalue('s', CurEnv) == NULL)
-< define('s', RealHostName, CurEnv);
-<
/* check for validity of this command */
if (hasmail)
***************
*** 239,244 ****
--- 250,261 ----
---------------
initsys();
setproctitle("%s %s: %s", CurEnv->e_id,
CurHostName, inp);
+>
+>
+> /* force a sending host even if no HELO given */
+> if (RealHostName != NULL && macvalue('s', CurEnv) == NULL)
+> define('s', RealHostName, CurEnv);
+>
/* child -- go do the processing */
p = skipword(p, "from");
Dave Cohrs
(608) 262-1204
..!{harvard,ihnp4,seismo,topaz}!uwvax!dave
dave at rsch.wisc.edu
More information about the Comp.bugs.4bsd.ucb-fixes
mailing list