Make -R and -S do something sensible when combined with -q<time>.
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Tue, 7 Nov 2006 15:56:17 +0000 (15:56 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Tue, 7 Nov 2006 15:56:17 +0000 (15:56 +0000)
doc/doc-txt/ChangeLog
src/src/daemon.c

index 63c1693696cb61dac8483d259829ae92406230cf..ddc55968557ec11571337058d573228a944a18da 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.427 2006/11/07 14:13:18 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.428 2006/11/07 15:56:17 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -255,6 +255,10 @@ PH/37 For LMTP over TCP/IP (the smtp transport), error responses from the
 PH/38 Despite being documented as not happening, Exim was rewriting addresses
       in header lines that were in fact CNAMEs. This is no longer the case.
 
+PH/39 If -R or -S was given with -q<time>, the effect of -R or -S was ignored,
+      and queue runs started by the daemon processed all messages. This has
+      been fixed so that -R and -S can now usefully be given with -q<time>.
+
 
 Exim version 4.63
 -----------------
index 797a51c20ebae07f0a41cf85de9e0e19ce34571b..15b5ab2da1a8825edfa90e1723bcc6c302b06c27 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/daemon.c,v 1.17 2006/11/06 11:27:54 ph10 Exp $ */
+/* $Cambridge: exim/src/src/daemon.c,v 1.18 2006/11/07 15:56:17 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -1629,6 +1629,8 @@ for (;;)
           {
           uschar opt[8];
           uschar *p = opt;
+          uschar *extra[4];
+          int extracount = 1;
 
           signal(SIGALRM, SIG_DFL);
           *p++ = '-';
@@ -1639,8 +1641,29 @@ for (;;)
           if (deliver_force_thaw) *p++ = 'f';
           if (queue_run_local) *p++ = 'l';
           *p = 0;
+          extra[0] = opt;
+
+          /* If -R or -S were on the original command line, ensure they get
+          passed on. */
+
+          if (deliver_selectstring != NULL)
+            {
+            extra[extracount++] = deliver_selectstring_regex? US"-Rr" : US"-R";
+            extra[extracount++] = deliver_selectstring;
+            }
+
+          if (deliver_selectstring_sender != NULL)
+            {
+            extra[extracount++] = deliver_selectstring_sender_regex?
+              US"-Sr" : US"-S";
+            extra[extracount++] = deliver_selectstring_sender;
+            }
+
+          /* Overlay this process with a new execution. */
+
+          (void)child_exec_exim(CEE_EXEC_PANIC, FALSE, NULL, TRUE, extracount,
+            extra[0], extra[1], extra[2], extra[3], extra[4]);
 
-          (void)child_exec_exim(CEE_EXEC_PANIC, FALSE, NULL, TRUE, 1, opt);
           /* Control never returns here. */
           }