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
-static char sccsid[] = "@(#)deliver.c 8.98 (Berkeley) %G%";
+static char sccsid[] = "@(#)deliver.c 8.99 (Berkeley) %G%";
#endif /* not lint */
#include "sendmail.h"
#endif /* not lint */
#include "sendmail.h"
/* rewrite from address, using rewriting rules */
rcode = EX_OK;
/* 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 */
RF_SENDERADDR|RF_CANONICAL,
&rcode, e));
define('g', rpathbuf, e); /* translated return path */
-static char sccsid[] = "@(#)envelope.c 8.40 (Berkeley) %G%";
+static char sccsid[] = "@(#)envelope.c 8.41 (Berkeley) %G%";
#endif /* not lint */
#include "sendmail.h"
#endif /* not lint */
#include "sendmail.h"
if (bitnset(M_CHECKUDB, e->e_from.q_mailer->m_flags))
{
if (bitnset(M_CHECKUDB, e->e_from.q_mailer->m_flags))
{
register char *p;
extern char *udbsender();
register char *p;
extern char *udbsender();
+ 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 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;
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)
}
if ((pw = getpwnam(e->e_from.q_user)) != NULL)
- 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 */
if (pvp == NULL)
{
/* don't need to give error -- prescan did that already */
(void) rewrite(pvp, 3, 0, e);
(void) rewrite(pvp, 1, 0, e);
(void) rewrite(pvp, 4, 0, e);
(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))
bp = buf + 1;
cataddr(pvp, NULL, bp, sizeof buf - 2, '\0');
if (*bp == '@' && !bitnset(M_NOBRACKET, e->e_from.q_mailer->m_flags))
#ifndef lint
#ifdef QUEUE
#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)";
-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 */
#endif
#endif /* not lint */
fprintf(tfp, "$_%s\n", p);
/* output name of sender */
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);
/* output list of error recipients */
printctladdr(NULL, NULL);