Fix include_directory in redirect routers. Bug 2715
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 13 Feb 2022 12:00:55 +0000 (12:00 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 13 Feb 2022 12:09:33 +0000 (12:09 +0000)
Broken-by: 10c50704c1
doc/doc-txt/ChangeLog
src/src/parse.c
test/confs/0313
test/log/0313
test/scripts/0000-Basic/0313

index 6cb01863d788da1e1125b87bb0f937b85eed4be1..231ec737125cdebfd008545aa80a07799e59bdd1 100644 (file)
@@ -76,6 +76,11 @@ JH/16 Debugging initiated by an ACL control now continues through into routing
 JH/17 The "expand" debug selector now gives more detail, specifically on the
       result of expansion operators and items.
 
+JH/18 Bug 2751: Fix include_directory in redirect routers.  Previously a
+      bad comparison between the option value and the name of the file to
+      be included was done, and a mismatch was wrongly identified.
+      4.88 to 4.95 are affected.
+
 
 Exim version 4.95
 -----------------
index fcea2ea2627e7ced96998b9c0ac0748ee5e79ba3..e30b80527751b190ff573d0c4e98b5ca936bcfe9 100644 (file)
@@ -1422,8 +1422,10 @@ for (;;)
     if (directory)
       {
       int len = Ustrlen(directory);
-      uschar * p = filename + len;
+      uschar * p;
 
+      while (len > 0 && directory[len-1] == '/') len--;                /* ignore trailing '/' */
+      p = filename + len;
       if (Ustrncmp(filename, directory, len) != 0 || *p != '/')
         {
         *error = string_sprintf("included file %s is not in directory %s",
@@ -1448,9 +1450,10 @@ for (;;)
        {
        uschar temp;
        int fd2;
-       uschar * q = p;
+       uschar * q = p + 1;             /* skip dividing '/' */
 
-       while (*++p && *p != '/') ;
+       while (*q == '/') q++;          /* skip extra '/' */
+       while (*++p && *p != '/') ;     /* end of component */
        temp = *p;
        *p = '\0';
 
index 7849526db41087ba6adf5d0c842c170f5a1c1a9a..58fca2c8410c6354f9933dfd089420fb1b71f01d 100644 (file)
@@ -2,7 +2,6 @@
 
 .include DIR/aux-var/std_conf_prefix
 
-
 # ----- Main settings -----
 
 
@@ -20,6 +19,9 @@ r1:
 r2:
   driver = redirect
   local_parts = include
+.ifdef INC
+  include_directory = DIR/
+.endif
   data = :include:DIR/test-holey
 
 
index 1e6217daf76884503774372387a2fb8f356939f3..bfece419fddb6559616eb9352005acfe55a19bfd 100644 (file)
@@ -1,3 +1,5 @@
 1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@the.local.host.name U=CALLER P=local S=sss
 1999-03-02 09:44:33 10HmaX-0005vi-00 == include@the.local.host.name R=r2 defer (-17): error in redirect data: included file TESTSUITE/test-holey is too big (max 1048576)
 1999-03-02 09:44:33 10HmaX-0005vi-00 == filter@the.local.host.name R=r1 defer (-1): TESTSUITE/test-holey is too big (max 1048576)
+1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@the.local.host.name U=CALLER P=local S=sss
+1999-03-02 09:44:33 10HmaY-0005vi-00 == include@the.local.host.name R=r2 defer (-17): error in redirect data: included file TESTSUITE/test-holey is too big (max 1048576)
index c118a28d8f65c1472a9c2ef9f16e2b5d2077ed4c..32f288a25fcca9d0a2586c4aadf5ad7bf2e1b78d 100644 (file)
@@ -10,4 +10,6 @@ close(OUT);
 #
 exim -odi filter include
 ****
+exim -DINC -odi include
+****
 no_msglog_check