ph10 2006/11/07 15:56:17 GMT
Modified files:
exim-doc/doc-txt ChangeLog
exim-src/src daemon.c
Log:
Make -R and -S do something sensible when combined with -q<time>.
Revision Changes Path
1.428 +4 -0 exim/exim-doc/doc-txt/ChangeLog
1.18 +24 -1 exim/exim-src/src/daemon.c
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.427
retrieving revision 1.428
diff -u -r1.427 -r1.428
--- ChangeLog 7 Nov 2006 14:13:18 -0000 1.427
+++ ChangeLog 7 Nov 2006 15:56:17 -0000 1.428
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.427 2006/11/07 14:13:18 ph10 Exp $
+$Cambridge: exim/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
-------------------------------------------
@@ -254,6 +254,10 @@
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: daemon.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/daemon.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- daemon.c 6 Nov 2006 11:27:54 -0000 1.17
+++ daemon.c 7 Nov 2006 15:56:17 -0000 1.18
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/daemon.c,v 1.17 2006/11/06 11:27:54 ph10 Exp $ */
+/* $Cambridge: exim/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 @@
{
uschar opt[8];
uschar *p = opt;
+ uschar *extra[4];
+ int extracount = 1;
signal(SIGALRM, SIG_DFL);
*p++ = '-';
@@ -1639,8 +1641,29 @@
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. */
}