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
Fix cutthrough delivery for more than one iteration of address redirection. Bug...
[exim.git]
/
src
/
src
/
verify.c
diff --git
a/src/src/verify.c
b/src/src/verify.c
index a892b058b06dd82061f63b738a554e24feb52831..6411899c80081e2b00acbb5876b205eabb7f7f94 100644
(file)
--- a/
src/src/verify.c
+++ b/
src/src/verify.c
@@
-172,7
+172,6
@@
else
if ( cache_record->result == ccache_reject
|| *from_address == 0 && cache_record->result == ccache_reject_mfnull)
{
if ( cache_record->result == ccache_reject
|| *from_address == 0 && cache_record->result == ccache_reject_mfnull)
{
- setflag(addr, af_verify_nsfail);
HDEBUG(D_verify)
debug_printf("callout cache: domain gave initial rejection, or "
"does not accept HELO or MAIL FROM:<>\n");
HDEBUG(D_verify)
debug_printf("callout cache: domain gave initial rejection, or "
"does not accept HELO or MAIL FROM:<>\n");
@@
-990,6
+989,13
@@
no_conn:
done = TRUE;
}
break;
done = TRUE;
}
break;
+#endif
+#if defined(SUPPORT_TLS) && defined(EXPERIMENTAL_REQUIRETLS)
+ case ERRNO_REQUIRETLS:
+ addr->user_message = US"530 5.7.4 REQUIRETLS support required";
+ yield = FAIL;
+ done = TRUE;
+ break;
#endif
case ECONNREFUSED:
sx.send_quit = FALSE;
#endif
case ECONNREFUSED:
sx.send_quit = FALSE;
@@
-1064,6
+1070,8
@@
no_conn:
&& !sx.lmtp
)
{
&& !sx.lmtp
)
{
+ address_item * parent, * caddr;
+
HDEBUG(D_acl|D_v) debug_printf_indent("holding verify callout open for %s\n",
cutthrough.delivery
? "cutthrough delivery" : "potential further verifies and delivery");
HDEBUG(D_acl|D_v) debug_printf_indent("holding verify callout open for %s\n",
cutthrough.delivery
? "cutthrough delivery" : "potential further verifies and delivery");
@@
-1086,12
+1094,16
@@
no_conn:
cutthrough.host.address = string_copy(host->address);
store_pool = oldpool;
}
cutthrough.host.address = string_copy(host->address);
store_pool = oldpool;
}
- cutthrough.addr = *addr; /* Save the address_item for later logging */
+
+ /* Save the address_item and parent chain for later logging */
+ cutthrough.addr = *addr;
cutthrough.addr.next = NULL;
cutthrough.addr.host_used = &cutthrough.host;
cutthrough.addr.next = NULL;
cutthrough.addr.host_used = &cutthrough.host;
- if (addr->parent)
- *(cutthrough.addr.parent = store_get(sizeof(address_item))) =
- *addr->parent;
+ for (caddr = &cutthrough.addr, parent = addr->parent;
+ parent;
+ parent = parent->parent)
+ *(caddr->parent = store_get(sizeof(address_item))) = *parent;
+
ctblock.buffer = ctbuffer;
ctblock.buffersize = sizeof(ctbuffer);
ctblock.ptr = ctbuffer;
ctblock.buffer = ctbuffer;
ctblock.buffersize = sizeof(ctbuffer);
ctblock.ptr = ctbuffer;
@@
-1188,7
+1200,7
@@
return yield;
one was requested and a recipient-verify wasn't subsequently done.
*/
int
one was requested and a recipient-verify wasn't subsequently done.
*/
int
-open_cutthrough_connection(
address_item * addr
)
+open_cutthrough_connection(
address_item * addr
)
{
address_item addr2;
int rc;
{
address_item addr2;
int rc;
@@
-1901,16
+1913,16
@@
while (addr_new)
(void)host_find_byname(host, NULL, flags, NULL, TRUE);
else
{
(void)host_find_byname(host, NULL, flags, NULL, TRUE);
else
{
-
dnssec_domains * dnssec_domains
= NULL;
+
const dnssec_domains * dsp
= NULL;
if (Ustrcmp(tp->driver_name, "smtp") == 0)
{
smtp_transport_options_block * ob =
(smtp_transport_options_block *) tp->options_block;
if (Ustrcmp(tp->driver_name, "smtp") == 0)
{
smtp_transport_options_block * ob =
(smtp_transport_options_block *) tp->options_block;
- d
nssec_domains
= &ob->dnssec;
+ d
sp
= &ob->dnssec;
}
(void) host_find_bydns(host, NULL, flags, NULL, NULL, NULL,
}
(void) host_find_bydns(host, NULL, flags, NULL, NULL, NULL,
- d
nssec_domains
, NULL, NULL);
+ d
sp
, NULL, NULL);
}
}
}
}
}
}
@@
-1936,6
+1948,9
@@
while (addr_new)
#endif
rc = do_callout(addr, host_list, &tf, callout, callout_overall,
callout_connect, options, se_mailfrom, pm_mailfrom);
#endif
rc = do_callout(addr, host_list, &tf, callout, callout_overall,
callout_connect, options, se_mailfrom, pm_mailfrom);
+#ifdef SUPPORT_TLS
+ deliver_set_expansions(NULL);
+#endif
}
}
else
}
}
else