git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Avoid modifying global errno when raising event
[exim.git]
/
src
/
src
/
queue.c
diff --git
a/src/src/queue.c
b/src/src/queue.c
index 37d6124822b0b2c8725080b48a03a35d08d20ce7..dff6168c02012528febf1ceb8475e01fe611eee1 100644
(file)
--- a/
src/src/queue.c
+++ b/
src/src/queue.c
@@
-3,7
+3,7
@@
*************************************************/
/* Copyright (c) University of Cambridge 1995 - 2018 */
*************************************************/
/* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 */
+/* Copyright (c) The Exim Maintainers 2020
- 2021
*/
/* See the file NOTICE for conditions of use and distribution. */
/* Functions that operate on the input queue. */
/* See the file NOTICE for conditions of use and distribution. */
/* Functions that operate on the input queue. */
@@
-26,6
+26,9
@@
Michael Haardt. */
#define LOG2_MAXNODES 32
#define LOG2_MAXNODES 32
+#ifndef DISABLE_TLS
+static BOOL queue_tls_init = FALSE;
+#endif
/*************************************************
* Helper sort function for queue_get_spool_list *
/*************************************************
* Helper sort function for queue_get_spool_list *
@@
-347,8
+350,8
@@
queue_run(uschar *start_id, uschar *stop_id, BOOL recurse)
{
BOOL force_delivery = f.queue_run_force || deliver_selectstring != NULL ||
deliver_selectstring_sender != NULL;
{
BOOL force_delivery = f.queue_run_force || deliver_selectstring != NULL ||
deliver_selectstring_sender != NULL;
-const pcre *selectstring_regex = NULL;
-const pcre *selectstring_regex_sender = NULL;
+const pcre
2_code
*selectstring_regex = NULL;
+const pcre
2_code
*selectstring_regex_sender = NULL;
uschar *log_detail = NULL;
int subcount = 0;
uschar subdirs[64];
uschar *log_detail = NULL;
int subcount = 0;
uschar subdirs[64];
@@
-393,12
+396,18
@@
if (!recurse)
p += sprintf(CS p, " -q%s", extras);
if (deliver_selectstring)
p += sprintf(CS p, " -q%s", extras);
if (deliver_selectstring)
- p += sprintf(CS p, " -R%s %s", f.deliver_selectstring_regex? "r" : "",
- deliver_selectstring);
+ {
+ snprintf(CS p, big_buffer_size - (p - big_buffer), " -R%s %s",
+ f.deliver_selectstring_regex? "r" : "", deliver_selectstring);
+ p += Ustrlen(CCS p);
+ }
if (deliver_selectstring_sender)
if (deliver_selectstring_sender)
- p += sprintf(CS p, " -S%s %s", f.deliver_selectstring_sender_regex? "r" : "",
- deliver_selectstring_sender);
+ {
+ snprintf(CS p, big_buffer_size - (p - big_buffer), " -S%s %s",
+ f.deliver_selectstring_sender_regex? "r" : "", deliver_selectstring_sender);
+ p += Ustrlen(CCS p);
+ }
log_detail = string_copy(big_buffer);
if (*queue_name)
log_detail = string_copy(big_buffer);
if (*queue_name)
@@
-560,9
+569,7
@@
for (int i = queue_run_in_order ? -1 : 0;
else if ( deliver_selectstring_sender
&& !(f.deliver_selectstring_sender_regex
else if ( deliver_selectstring_sender
&& !(f.deliver_selectstring_sender_regex
- ? (pcre_exec(selectstring_regex_sender, NULL,
- CS sender_address, Ustrlen(sender_address), 0, PCRE_EOPT,
- NULL, 0) >= 0)
+ ? regex_match(selectstring_regex_sender, sender_address, -1, NULL)
: (strstric(sender_address, deliver_selectstring_sender, FALSE)
!= NULL)
) )
: (strstric(sender_address, deliver_selectstring_sender, FALSE)
!= NULL)
) )
@@
-581,8
+588,7
@@
for (int i = queue_run_in_order ? -1 : 0;
{
uschar *address = recipients_list[i].address;
if ( (f.deliver_selectstring_regex
{
uschar *address = recipients_list[i].address;
if ( (f.deliver_selectstring_regex
- ? (pcre_exec(selectstring_regex, NULL, CS address,
- Ustrlen(address), 0, PCRE_EOPT, NULL, 0) >= 0)
+ ? regex_match(selectstring_regex, address, -1, NULL)
: (strstric(address, deliver_selectstring, FALSE) != NULL)
)
&& tree_search(tree_nonrecipients, address) == NULL
: (strstric(address, deliver_selectstring, FALSE) != NULL)
)
&& tree_search(tree_nonrecipients, address) == NULL
@@
-648,6
+654,16
@@
for (int i = queue_run_in_order ? -1 : 0;
report_time_since(×tamp_startup, US"queue msg selected");
#endif
report_time_since(×tamp_startup, US"queue msg selected");
#endif
+#ifndef DISABLE_TLS
+ if (!queue_tls_init)
+ {
+ queue_tls_init = TRUE;
+ /* Preload TLS library info for smtp transports. Once, and only if we
+ have a delivery to do. */
+ tls_client_creds_reload(FALSE);
+ }
+#endif
+
single_item_retry:
if ((pid = exim_fork(US"qrun-delivery")) == 0)
{
single_item_retry:
if ((pid = exim_fork(US"qrun-delivery")) == 0)
{
@@
-1332,15
+1348,15
@@
switch(action)
deliver_domain = dom
? CUS string_copyn(addr+dom, end - dom) : CUS"";
deliver_domain = dom
? CUS string_copyn(addr+dom, end - dom) : CUS"";
- event_raise(event_action, US"msg:fail:internal",
- string_sprintf("message removed by %s", username));
+
(void)
event_raise(event_action, US"msg:fail:internal",
+ string_sprintf("message removed by %s", username)
, NULL
);
deliver_localpart = save_local;
deliver_domain = save_domain;
}
}
}
deliver_localpart = save_local;
deliver_domain = save_domain;
}
}
}
- (void) event_raise(event_action, US"msg:complete", NULL);
+ (void) event_raise(event_action, US"msg:complete", NULL
, NULL
);
#endif
log_write(0, LOG_MAIN, "removed by %s", username);
log_write(0, LOG_MAIN, "Completed");
#endif
log_write(0, LOG_MAIN, "removed by %s", username);
log_write(0, LOG_MAIN, "Completed");
@@
-1531,7
+1547,7
@@
if (s)
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
-#if
def EXPERIMENTAL
_QUEUE_RAMP
+#if
ndef DISABLE
_QUEUE_RAMP
void
queue_notify_daemon(const uschar * msgid)
{
void
queue_notify_daemon(const uschar * msgid)
{