From 295b05c5d6bf805a4520c1f9640fce591b2af044 Mon Sep 17 00:00:00 2001 From: Eric Allman Date: Thu, 8 Sep 1994 22:20:23 -0800 Subject: [PATCH] attempt to allow udb rewriting of envelope senders; still not quite right, but I can't really test it without a network connection SCCS-vsn: usr.sbin/sendmail/src/envelope.c 8.41 SCCS-vsn: usr.sbin/sendmail/src/deliver.c 8.99 SCCS-vsn: usr.sbin/sendmail/src/queue.c 8.50 --- usr/src/usr.sbin/sendmail/src/deliver.c | 8 ++++-- usr/src/usr.sbin/sendmail/src/envelope.c | 34 ++++++++++-------------- usr/src/usr.sbin/sendmail/src/queue.c | 10 ++++--- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/usr/src/usr.sbin/sendmail/src/deliver.c b/usr/src/usr.sbin/sendmail/src/deliver.c index f9752a292d..6b4eef6c29 100644 --- a/usr/src/usr.sbin/sendmail/src/deliver.c +++ b/usr/src/usr.sbin/sendmail/src/deliver.c @@ -7,7 +7,7 @@ */ #ifndef lint -static char sccsid[] = "@(#)deliver.c 8.98 (Berkeley) %G%"; +static char sccsid[] = "@(#)deliver.c 8.99 (Berkeley) %G%"; #endif /* not lint */ #include "sendmail.h" @@ -664,7 +664,11 @@ deliver(e, firstto) /* rewrite from address, using rewriting rules */ rcode = EX_OK; - (void) strcpy(rpathbuf, remotename(e->e_from.q_paddr, m, + if (bitnset(M_UDBENVELOPE, e->e_from.q_mailer->m_flags)) + p = e->e_sender; + else + p = e->e_from.q_paddr; + (void) strcpy(rpathbuf, remotename(p, m, RF_SENDERADDR|RF_CANONICAL, &rcode, e)); define('g', rpathbuf, e); /* translated return path */ diff --git a/usr/src/usr.sbin/sendmail/src/envelope.c b/usr/src/usr.sbin/sendmail/src/envelope.c index c2665b7d71..7bd47b4fff 100644 --- a/usr/src/usr.sbin/sendmail/src/envelope.c +++ b/usr/src/usr.sbin/sendmail/src/envelope.c @@ -7,7 +7,7 @@ */ #ifndef lint -static char sccsid[] = "@(#)envelope.c 8.40 (Berkeley) %G%"; +static char sccsid[] = "@(#)envelope.c 8.41 (Berkeley) %G%"; #endif /* not lint */ #include "sendmail.h" @@ -635,34 +635,27 @@ setsender(from, e, delimptr, internal) } SuprErrs = FALSE; - pvp = NULL; +# ifdef USERDB if (bitnset(M_CHECKUDB, e->e_from.q_mailer->m_flags)) { -# ifdef USERDB register char *p; extern char *udbsender(); -# endif + p = udbsender(e->e_from.q_user); + if (p != NULL) + from = p; + } +# endif /* USERDB */ + + if (bitnset(M_HASPWENT, e->e_from.q_mailer->m_flags)) + { if (!internal) { - /* if the user has given fullname already, don't redefine */ + /* if the user already given fullname don't redefine */ if (FullName == NULL) FullName = macvalue('x', e); if (FullName != NULL && FullName[0] == '\0') FullName = NULL; - -# ifdef USERDB - p = udbsender(e->e_from.q_user); - - if (p != NULL) - { - /* - ** We have an alternate address for the sender - */ - - pvp = prescan(p, '\0', pvpbuf, sizeof pvpbuf, NULL); - } -# endif /* USERDB */ } if ((pw = getpwnam(e->e_from.q_user)) != NULL) @@ -717,8 +710,7 @@ setsender(from, e, delimptr, internal) ** links in the net. */ - if (pvp == NULL) - pvp = prescan(from, delimchar, pvpbuf, sizeof pvpbuf, NULL); + pvp = prescan(from, delimchar, pvpbuf, sizeof pvpbuf, NULL); if (pvp == NULL) { /* don't need to give error -- prescan did that already */ @@ -728,9 +720,11 @@ setsender(from, e, delimptr, internal) # endif finis(); } +/* (void) rewrite(pvp, 3, 0, e); (void) rewrite(pvp, 1, 0, e); (void) rewrite(pvp, 4, 0, e); +*/ bp = buf + 1; cataddr(pvp, NULL, bp, sizeof buf - 2, '\0'); if (*bp == '@' && !bitnset(M_NOBRACKET, e->e_from.q_mailer->m_flags)) diff --git a/usr/src/usr.sbin/sendmail/src/queue.c b/usr/src/usr.sbin/sendmail/src/queue.c index 50bb4e69fc..421cca1aa7 100644 --- a/usr/src/usr.sbin/sendmail/src/queue.c +++ b/usr/src/usr.sbin/sendmail/src/queue.c @@ -10,9 +10,9 @@ #ifndef lint #ifdef QUEUE -static char sccsid[] = "@(#)queue.c 8.49 (Berkeley) %G% (with queueing)"; +static char sccsid[] = "@(#)queue.c 8.50 (Berkeley) %G% (with queueing)"; #else -static char sccsid[] = "@(#)queue.c 8.49 (Berkeley) %G% (without queueing)"; +static char sccsid[] = "@(#)queue.c 8.50 (Berkeley) %G% (without queueing)"; #endif #endif /* not lint */ @@ -229,7 +229,11 @@ queueup(e, queueall, announce) fprintf(tfp, "$_%s\n", p); /* output name of sender */ - fprintf(tfp, "S%s\n", e->e_from.q_paddr); + if (bitnset(M_UDBENVELOPE, e->e_from.q_mailer->m_flags)) + p = e->e_sender; + else + p = e->e_from.q_paddr; + fprintf(tfp, "S%s\n", p); /* output list of error recipients */ printctladdr(NULL, NULL); -- 2.20.1