Lookups: fix $local_part_data for a match on a filename list element. Bug 2691
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 29 Jan 2021 19:54:02 +0000 (19:54 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Fri, 29 Jan 2021 19:54:02 +0000 (19:54 +0000)
    (cherry picked from commit 0c70e694cf1a703798c0778a3236079e1b25c91d)

doc/doc-txt/ChangeLog
src/src/match.c
test/confs/0134
test/log/0134
test/scripts/0000-Basic/0134

index d5a98071ba3aa6f6aff6e12e07c2c6fe32baa1c0..b7e310f04403ec2552e44c6c68698a4918b70cb6 100644 (file)
@@ -138,6 +138,10 @@ JH/36 Bug 2687: Fix interpretation of multiple ^ chars in a plaintext
       documentation.  There is still no way to get a leading ^ immediately
       after a NUL (ie. for the password of a PLAIN method authenticator.
 
       documentation.  There is still no way to get a leading ^ immediately
       after a NUL (ie. for the password of a PLAIN method authenticator.
 
+JH/39 Bug 2691: fix $local_part_data.  When the matching list element
+      referred to a file, bad data was returned.  This likely also affected
+      $domain_part_data.
+
 
 Exim version 4.94
 -----------------
 
 Exim version 4.94
 -----------------
index 53cd22353e360e19b3ec381a3358e7a848cce38d..dfb4b5148362f53fbaf609f5ff4686210474bb1d 100644 (file)
@@ -850,6 +850,11 @@ while ((sss = string_nextinlist(&list, &sep, NULL, 0)))
          (void)fclose(f);
          HDEBUG(D_lists) debug_printf("%s %s (matched \"%s\" in %s)\n", ot,
            yield == OK ? "yes" : "no", sss, filename);
          (void)fclose(f);
          HDEBUG(D_lists) debug_printf("%s %s (matched \"%s\" in %s)\n", ot,
            yield == OK ? "yes" : "no", sss, filename);
+
+         /* The "pattern" being matched came from the file; we use a stack-local.
+         Copy it to allocated memory now we know it matched. */
+
+         if (valueptr) *valueptr = string_copy(ss);
          return file_yield;
 
         case DEFER:
          return file_yield;
 
         case DEFER:
index 9530df65273942117c2e4ccd3550015717d39afc..3376f05f3d14663326325e94f6234e9f17af9252 100644 (file)
@@ -45,6 +45,14 @@ smartuser:
   retry_use_local_part
   transport = appendfile
 
   retry_use_local_part
   transport = appendfile
 
+smartuser_direct:
+  driver = accept
+  domains = test.ex
+  headers_add = "smartuser: dd=$domain_data lpd=$local_part_data"
+  local_parts = DIR/aux-fixed/TESTNUM.listL
+  retry_use_local_part
+  transport = directfile
+
 default2:
   driver = accept
   headers_add = router: defaulted
 default2:
   driver = accept
   headers_add = router: defaulted
@@ -71,6 +79,13 @@ appendfile:
          ${if eq {$local_part}{userx}{lc-userx}{\
          $local_part}}}}}}
 
          ${if eq {$local_part}{userx}{lc-userx}{\
          $local_part}}}}}}
 
+directfile:
+  driver = appendfile
+  user = CALLER
+  headers_add = "domain_data: $domain_data\n\
+                 local_part_data: $local_part_data"
+  file = DIR/test-mail/directfile
+
 pipe:
   driver = pipe
   command = /bin/sh -c "echo $local_part $domain >DIR/test-mail/$local_part"
 pipe:
   driver = pipe
   command = /bin/sh -c "echo $local_part $domain >DIR/test-mail/$local_part"
index 1d4707f3968fc512fbf9a9746bcf254c57e7978a..956558fa67cd8d419d0de0001d51a61ad1dd72c3 100644 (file)
@@ -23,3 +23,6 @@
 1999-03-02 09:44:33 10HmbE-0005vi-00 <= CALLER@test.ex U=CALLER P=local S=sss
 1999-03-02 09:44:33 10HmbE-0005vi-00 => PIPE <PIPE@PIPE.DOMAIN> R=topipe T=pipe
 1999-03-02 09:44:33 10HmbE-0005vi-00 Completed
 1999-03-02 09:44:33 10HmbE-0005vi-00 <= CALLER@test.ex U=CALLER P=local S=sss
 1999-03-02 09:44:33 10HmbE-0005vi-00 => PIPE <PIPE@PIPE.DOMAIN> R=topipe T=pipe
 1999-03-02 09:44:33 10HmbE-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbF-0005vi-00 <= CALLER@test.ex U=CALLER P=local S=sss
+1999-03-02 09:44:33 10HmbF-0005vi-00 => direct_file_user <direct_file_user@test.ex> R=smartuser_direct T=directfile
+1999-03-02 09:44:33 10HmbF-0005vi-00 Completed
index 76c1f8206a84367253433ffa132002ac4754c647..15f3b05b2ac916dc3d2dc674ec845a2d6f966be9 100644 (file)
@@ -31,3 +31,7 @@ exim -odi PIPE@PIPE.DOMAIN
 Test to uppercased piped address.
 .
 ****
 Test to uppercased piped address.
 .
 ****
+exim -odi direct_file_user@test.ex
+Test use of filename in local_part list
+.
+****