attempt to allow udb rewriting of envelope senders; still not
authorEric Allman <eric@ucbvax.Berkeley.EDU>
Fri, 9 Sep 1994 06:20:23 +0000 (22:20 -0800)
committerEric Allman <eric@ucbvax.Berkeley.EDU>
Fri, 9 Sep 1994 06:20:23 +0000 (22:20 -0800)
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
usr/src/usr.sbin/sendmail/src/envelope.c
usr/src/usr.sbin/sendmail/src/queue.c

index f9752a2..6b4eef6 100644 (file)
@@ -7,7 +7,7 @@
  */
 
 #ifndef lint
  */
 
 #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"
 #endif /* not lint */
 
 #include "sendmail.h"
@@ -664,7 +664,11 @@ deliver(e, firstto)
 
        /* 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 */
index c2665b7..7bd47b4 100644 (file)
@@ -7,7 +7,7 @@
  */
 
 #ifndef lint
  */
 
 #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"
 #endif /* not lint */
 
 #include "sendmail.h"
@@ -635,34 +635,27 @@ setsender(from, e, delimptr, internal)
        }
        SuprErrs = FALSE;
 
        }
        SuprErrs = FALSE;
 
-       pvp = NULL;
+# ifdef USERDB
        if (bitnset(M_CHECKUDB, e->e_from.q_mailer->m_flags))
        {
        if (bitnset(M_CHECKUDB, e->e_from.q_mailer->m_flags))
        {
-# ifdef USERDB
                register char *p;
                extern char *udbsender();
                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 (!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;
                        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)
@@ -717,8 +710,7 @@ setsender(from, e, delimptr, internal)
        **      links in the net.
        */
 
        **      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 */
        if (pvp == NULL)
        {
                /* don't need to give error -- prescan did that already */
@@ -728,9 +720,11 @@ setsender(from, e, delimptr, internal)
 # endif
                finis();
        }
 # endif
                finis();
        }
+/*
        (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))
index 50bb4e6..421cca1 100644 (file)
@@ -10,9 +10,9 @@
 
 #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)";
 #else
 #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 */
 
 #endif
 #endif /* not lint */
 
@@ -229,7 +229,11 @@ queueup(e, queueall, announce)
                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);