[exim-cvs] Fix $local_part_verified for remote-delivery rout…

トップ ページ
このメッセージを削除
このメッセージに返信
著者: Exim Git Commits Mailing List
日付:  
To: exim-cvs
題目: [exim-cvs] Fix $local_part_verified for remote-delivery routing following local. Bug 2565
Gitweb: https://git.exim.org/exim.git/commitdiff/37c0e209412be42f04a4599ecad6f901bff46f08
Commit:     37c0e209412be42f04a4599ecad6f901bff46f08
Parent:     062364db7665faad5273818ac2c8f605ea48fdbe
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Fri May 1 11:42:35 2020 +0100
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Fri May 1 11:51:09 2020 +0100


    Fix $local_part_verified for remote-delivery routing following local.  Bug 2565
---
 src/src/deliver.c            |  1 +
 src/src/globals.c            |  1 +
 src/src/macros.h             |  2 +-
 src/src/route.c              | 25 +++++++++++--------------
 src/src/structs.h            |  1 +
 test/confs/0587              | 37 +++++++++++++++++++++++++++++++++++++
 test/log/0587                |  8 ++++++++
 test/scripts/0000-Basic/0587 | 18 ++++++++++++++++++
 test/stdout/0587             | 14 ++++++++++++++
 9 files changed, 92 insertions(+), 15 deletions(-)


diff --git a/src/src/deliver.c b/src/src/deliver.c
index 810eb64..c8d7e83 100644
--- a/src/src/deliver.c
+++ b/src/src/deliver.c
@@ -220,6 +220,7 @@ if (!addr->next)
address_item *addr_orig;

deliver_localpart = addr->local_part;
+ deliver_localpart_verified = addr->local_part_verified;
deliver_localpart_prefix = addr->prefix;
deliver_localpart_prefix_v = addr->prefix_v;
deliver_localpart_suffix = addr->suffix;
diff --git a/src/src/globals.c b/src/src/globals.c
index d00df97..d630df0 100644
--- a/src/src/globals.c
+++ b/src/src/globals.c
@@ -187,6 +187,7 @@ const uschar **address_expansions[ADDRESS_EXPANSIONS_COUNT] = {
CUSS &deliver_domain_orig,
CUSS &deliver_domain_parent,
CUSS &deliver_localpart,
+ CUSS &deliver_localpart_verified,
CUSS &deliver_localpart_data,
CUSS &deliver_localpart_orig,
CUSS &deliver_localpart_parent,
diff --git a/src/src/macros.h b/src/src/macros.h
index a6dbbf4..a507bbf 100644
--- a/src/src/macros.h
+++ b/src/src/macros.h
@@ -119,7 +119,7 @@ don't make the file descriptors two-way. */
verifying. This has to be explicit because it is referenced in more than one
source module. */

-#define ADDRESS_EXPANSIONS_COUNT 18
+#define ADDRESS_EXPANSIONS_COUNT 19

 /* The maximum permitted number of command-line (-D) macro definitions. We
 need a limit only to make it easier to generate argument vectors for re-exec
diff --git a/src/src/route.c b/src/src/route.c
index d0fbc8c..cee2f74 100644
--- a/src/src/route.c
+++ b/src/src/route.c
@@ -959,7 +959,8 @@ if (r->check_local_user)
       r->name, addr->local_part);
     return SKIP;
     }
-  deliver_localpart_verified = string_copy(US (*pw)->pw_name);
+  addr->local_part_verified =
+    deliver_localpart_verified = string_copy(US (*pw)->pw_name);
   deliver_home = string_copy(US (*pw)->pw_dir);
   local_user_gid = (*pw)->pw_gid;
   local_user_uid = (*pw)->pw_uid;
@@ -973,22 +974,19 @@ confusing. */


 if (r->router_home_directory)
   {
-  uschar *router_home = expand_string(r->router_home_directory);
-  if (!router_home)
-    {
-    if (!f.expand_string_forcedfail)
-      {
-      *perror = string_sprintf("failed to expand \"%s\" for "
-        "router_home_directory: %s", r->router_home_directory,
-        expand_string_message);
-      return DEFER;
-      }
-    }
-  else
+  uschar * router_home = expand_string(r->router_home_directory);
+  if (router_home)
     {
     setflag(addr, af_home_expanded); /* Note set from router_home_directory */
     deliver_home = router_home;
     }
+  else if (!f.expand_string_forcedfail)
+    {
+    *perror = string_sprintf("failed to expand \"%s\" for "
+      "router_home_directory: %s", r->router_home_directory,
+      expand_string_message);
+    return DEFER;
+    }
   }


/* Skip if the sender condition is not met. We leave this one till after the
@@ -1696,7 +1694,6 @@ for (r = addr->start_router ? addr->start_router : routers; r; r = nextr)
the local part sorted. */

router_name = r->name;
- deliver_localpart_verified = NULL;
deliver_set_expansions(addr);

   /* For convenience, the pre-router checks are in a separate function, which
diff --git a/src/src/structs.h b/src/src/structs.h
index c6700d5..ae37f34 100644
--- a/src/src/structs.h
+++ b/src/src/structs.h
@@ -553,6 +553,7 @@ typedef struct address_item {
   uschar *cc_local_part;          /* caseful local part */
   uschar *lc_local_part;          /* lowercased local part */
   uschar *local_part;             /* points to cc or lc version */
+  uschar *local_part_verified;    /* result from check_local_user */
   uschar *prefix;                 /* stripped prefix of local part */
   uschar *prefix_v;          /*  variable part of above */
   uschar *suffix;                 /* stripped suffix of local part */
diff --git a/test/confs/0587 b/test/confs/0587
new file mode 100644
index 0000000..a47ca66
--- /dev/null
+++ b/test/confs/0587
@@ -0,0 +1,37 @@
+# Exim test configuration 0587
+
+.include DIR/aux-var/std_conf_prefix
+
+
+# ----- Main settings -----
+
+domainlist local_domains = @
+
+acl_smtp_rcpt = accept
+trusted_users = CALLER
+
+
+# ----- Routers -----
+
+begin routers
+
+dump_remote_domains:
+  driver = redirect
+  domains = ! +local_domains
+  data = :blackhole:
+
+localuser:
+  driver = accept
+  check_local_user
+  transport = local_delivery
+
+
+# ----- Transports -----
+
+begin transports
+
+local_delivery:
+  driver = appendfile
+  file = DIR/test-mail/$local_part_verified
+
+# End
diff --git a/test/log/0587 b/test/log/0587
new file mode 100644
index 0000000..851116d
--- /dev/null
+++ b/test/log/0587
@@ -0,0 +1,8 @@
+1999-03-02 09:44:33 10HmaX-0005vi-00 <= someone@??? U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmaX-0005vi-00 => :blackhole: <b@remote> R=dump_remote_domains
+1999-03-02 09:44:33 10HmaX-0005vi-00 => CALLER <CALLER@???> R=localuser T=local_delivery
+1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaY-0005vi-00 <= someone@??? U=CALLER P=local-smtp S=sss
+1999-03-02 09:44:33 10HmaY-0005vi-00 => :blackhole: <a@remote> R=dump_remote_domains
+1999-03-02 09:44:33 10HmaY-0005vi-00 => CALLER <CALLER@???> R=localuser T=local_delivery
+1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
diff --git a/test/scripts/0000-Basic/0587 b/test/scripts/0000-Basic/0587
new file mode 100644
index 0000000..269cdb8
--- /dev/null
+++ b/test/scripts/0000-Basic/0587
@@ -0,0 +1,18 @@
+# $local_part_verified, multi-rcpt message
+#
+exim -bs -odi
+mail from:<someone@???>
+rcpt to:<CALLER@HOSTNAME>
+rcpt to:<b@remote>
+data
+.
+quit
+****
+exim -bs -odi
+mail from:<someone@???>
+rcpt to:<a@remote>
+rcpt to:<CALLER@HOSTNAME>
+data
+.
+quit
+****
diff --git a/test/stdout/0587 b/test/stdout/0587
new file mode 100644
index 0000000..1c94559
--- /dev/null
+++ b/test/stdout/0587
@@ -0,0 +1,14 @@
+220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 OK
+250 Accepted
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaX-0005vi-00
+221 the.local.host.name closing connection
+220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 OK
+250 Accepted
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaY-0005vi-00
+221 the.local.host.name closing connection