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
tidying
[exim.git]
/
src
/
src
/
verify.c
diff --git
a/src/src/verify.c
b/src/src/verify.c
index b4c2b9a8fbecb81f2e2fc8a90b8459d10a2db468..125df8d91854b90f790815f9f140927ed6616aeb 100644
(file)
--- a/
src/src/verify.c
+++ b/
src/src/verify.c
@@
-5,6
+5,7
@@
/* Copyright (c) The Exim Maintainers 2020 - 2022 */
/* Copyright (c) University of Cambridge 1995 - 2018 */
/* See the file NOTICE for conditions of use and distribution. */
/* Copyright (c) The Exim Maintainers 2020 - 2022 */
/* Copyright (c) University of Cambridge 1995 - 2018 */
/* See the file NOTICE for conditions of use and distribution. */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
/* Functions concerned with verifying things. The original code for callout
caching was contributed by Kevin Fleming (but I hacked it around a bit). */
/* Functions concerned with verifying things. The original code for callout
caching was contributed by Kevin Fleming (but I hacked it around a bit). */
@@
-1055,6
+1056,8
@@
no_conn:
HDEBUG(D_acl|D_v) debug_printf("Cutthrough cancelled by presence of transport filter\n");
}
#ifndef DISABLE_DKIM
HDEBUG(D_acl|D_v) debug_printf("Cutthrough cancelled by presence of transport filter\n");
}
#ifndef DISABLE_DKIM
+ /* DKIM signing needs to add a header after seeing the whole body, so we cannot just copy
+ body bytes to the outbound as they are received, which is the intent of cutthrough. */
if (ob->dkim.dkim_domain)
{
cutthrough.delivery= FALSE;
if (ob->dkim.dkim_domain)
{
cutthrough.delivery= FALSE;
@@
-3074,7
+3077,7
@@
digits, full stops, and hyphens (the constituents of domain names). Allow
underscores, as they are all too commonly found. Sigh. Also, if
allow_utf8_domains is set, allow top-bit characters. */
underscores, as they are all too commonly found. Sigh. Also, if
allow_utf8_domains is set, allow top-bit characters. */
-for (t = ss; *t
!= 0
; t++)
+for (t = ss; *t; t++)
if (!isalnum(*t) && *t != '.' && *t != '-' && *t != '_' &&
(!allow_utf8_domains || *t < 128)) break;
if (!isalnum(*t) && *t != '.' && *t != '-' && *t != '_' &&
(!allow_utf8_domains || *t < 128)) break;
@@
-3082,7
+3085,7
@@
for (t = ss; *t != 0; t++)
its IP address and match against that. Note that a multi-homed host will add
items to the chain. */
its IP address and match against that. Note that a multi-homed host will add
items to the chain. */
-if (
*t == 0
)
+if (
!*t
)
{
int rc;
host_item h;
{
int rc;
host_item h;
@@
-3113,8
+3116,8
@@
outgoing hosts, the name is always given explicitly. If it is NULL, it means we
must use sender_host_name and its aliases, looking them up if necessary. */
if (cb->host_name) /* Explicit host name given */
must use sender_host_name and its aliases, looking them up if necessary. */
if (cb->host_name) /* Explicit host name given */
- return match_check_string(cb->host_name, ss, -1,
TRUE, TRUE, TRUE,
- valueptr);
+ return match_check_string(cb->host_name, ss, -1,
+
MCS_PARTIAL | MCS_CASELESS | MCS_AT_SPECIAL | cb->flags,
valueptr);
/* Host name not given; in principle we need the sender host name and its
aliases. However, for query-style lookups, we do not need the name if the
/* Host name not given; in principle we need the sender host name and its
aliases. However, for query-style lookups, we do not need the name if the
@@
-3143,7
+3146,9
@@
if ((semicolon = Ustrchr(ss, ';')))
if (isquery)
{
if (isquery)
{
- switch(match_check_string(US"", ss, -1, TRUE, TRUE, TRUE, valueptr))
+ switch(match_check_string(US"", ss, -1,
+ MCS_PARTIAL| MCS_CASELESS| MCS_AT_SPECIAL | (cb->flags & MCS_CACHEABLE),
+ valueptr))
{
case OK: return OK;
case DEFER: return DEFER;
{
case OK: return OK;
case DEFER: return DEFER;
@@
-3169,7
+3174,9
@@
if (!sender_host_name)
/* Match on the sender host name, using the general matching function */
/* Match on the sender host name, using the general matching function */
-switch(match_check_string(sender_host_name, ss, -1, TRUE, TRUE, TRUE, valueptr))
+switch(match_check_string(sender_host_name, ss, -1,
+ MCS_PARTIAL| MCS_CASELESS| MCS_AT_SPECIAL | (cb->flags & MCS_CACHEABLE),
+ valueptr))
{
case OK: return OK;
case DEFER: return DEFER;
{
case OK: return OK;
case DEFER: return DEFER;
@@
-3179,7
+3186,9
@@
switch(match_check_string(sender_host_name, ss, -1, TRUE, TRUE, TRUE, valueptr))
aliases = sender_host_aliases;
while (*aliases)
aliases = sender_host_aliases;
while (*aliases)
- switch(match_check_string(*aliases++, ss, -1, TRUE, TRUE, TRUE, valueptr))
+ switch(match_check_string(*aliases++, ss, -1,
+ MCS_PARTIAL| MCS_CASELESS| MCS_AT_SPECIAL | (cb->flags & MCS_CACHEABLE),
+ valueptr))
{
case OK: return OK;
case DEFER: return DEFER;
{
case OK: return OK;
case DEFER: return DEFER;
@@
-3255,8
+3264,8
@@
rc = match_check_list(
check_host, /* function for testing */
&cb, /* argument for function */
MCL_HOST, /* type of check */
check_host, /* function for testing */
&cb, /* argument for function */
MCL_HOST, /* type of check */
- (host_address == sender_host_address)?
-
US"host" : host_address,
/* text for debugging */
+ host_address == sender_host_address
+
? US"host" : host_address,
/* text for debugging */
valueptr); /* where to pass back data */
deliver_host_address = save_host_address;
return rc;
valueptr); /* where to pass back data */
deliver_host_address = save_host_address;
return rc;