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
TLS: rework client-side use with an explicit context rather than a global
[exim.git]
/
src
/
src
/
transport.c
diff --git
a/src/src/transport.c
b/src/src/transport.c
index 75af68f9ba82dbf78caf89644b181b2d01128ecc..d5ff7380b01d66fbff5281cd43c4992463a87821 100644
(file)
--- a/
src/src/transport.c
+++ b/
src/src/transport.c
@@
-2,7
+2,7
@@
* Exim - an Internet mail transport agent *
*************************************************/
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 201
6
*/
+/* Copyright (c) University of Cambridge 1995 - 201
8
*/
/* See the file NOTICE for conditions of use and distribution. */
/* General functions concerned with transportation, and generic options for all
/* See the file NOTICE for conditions of use and distribution. */
/* General functions concerned with transportation, and generic options for all
@@
-242,10
+242,11
@@
for (i = 0; i < 100; i++)
{
rc =
#ifdef SUPPORT_TLS
{
rc =
#ifdef SUPPORT_TLS
- tls_out.active
== fd ? tls_write(FALSE
, block, len, more) :
+ tls_out.active
.sock == fd ? tls_write(tls_out.active.tls_ctx
, block, len, more) :
#endif
#ifdef MSG_MORE
#endif
#ifdef MSG_MORE
- more ? send(fd, block, len, MSG_MORE) :
+ more && !(tctx->options & topt_not_socket)
+ ? send(fd, block, len, MSG_MORE) :
#endif
write(fd, block, len);
save_errno = errno;
#endif
write(fd, block, len);
save_errno = errno;
@@
-259,10
+260,11
@@
for (i = 0; i < 100; i++)
rc =
#ifdef SUPPORT_TLS
rc =
#ifdef SUPPORT_TLS
- tls_out.active
== fd ? tls_write(FALSE
, block, len, more) :
+ tls_out.active
.sock == fd ? tls_write(tls_out.active.tls_ctx
, block, len, more) :
#endif
#ifdef MSG_MORE
#endif
#ifdef MSG_MORE
- more ? send(fd, block, len, MSG_MORE) :
+ more && !(tctx->options & topt_not_socket)
+ ? send(fd, block, len, MSG_MORE) :
#endif
write(fd, block, len);
#endif
write(fd, block, len);
@@
-588,7
+590,7
@@
at = Ustrrchr(addr->address, '@');
plen = (addr->prefix == NULL)? 0 : Ustrlen(addr->prefix);
slen = Ustrlen(addr->suffix);
plen = (addr->prefix == NULL)? 0 : Ustrlen(addr->prefix);
slen = Ustrlen(addr->suffix);
-return string_sprintf("%.*s@%s", (at - addr->address - plen - slen),
+return string_sprintf("%.*s@%s", (
int)(
at - addr->address - plen - slen),
addr->address + plen, at + 1);
}
addr->address + plen, at + 1);
}
@@
-1073,7
+1075,7
@@
dkim signing, when we had CHUNKING input. */
if ( spool_file_wireformat
&& !(tctx->options & (topt_no_body | topt_end_dot))
&& !nl_check_length
if ( spool_file_wireformat
&& !(tctx->options & (topt_no_body | topt_end_dot))
&& !nl_check_length
- && tls_out.active != tctx->u.fd
+ && tls_out.active
.sock
!= tctx->u.fd
)
{
ssize_t copied = 0;
)
{
ssize_t copied = 0;
@@
-1130,9
+1132,10
@@
if (!(tctx->options & topt_no_body))
if (len != 0) return FALSE;
}
if (len != 0) return FALSE;
}
-/* Finished with the check string */
+/* Finished with the check string
, and spool-format consideration
*/
nl_check_length = nl_escape_length = 0;
nl_check_length = nl_escape_length = 0;
+spool_file_wireformat = FALSE;
/* If requested, add a terminating "." line (SMTP output). */
/* If requested, add a terminating "." line (SMTP output). */
@@
-1399,6
+1402,7
@@
filter was not NL, insert a NL to make the SMTP protocol work. */
if (yield)
{
nl_check_length = nl_escape_length = 0;
if (yield)
{
nl_check_length = nl_escape_length = 0;
+ spool_file_wireformat = FALSE;
if ( tctx->options & topt_end_dot
&& ( last_filter_was_NL
? !write_chunk(tctx, US".\n", 2)
if ( tctx->options & topt_end_dot
&& ( last_filter_was_NL
? !write_chunk(tctx, US".\n", 2)
@@
-1873,12
+1877,12
@@
if (smtp_peer_options & OPTION_PIPE) argv[i++] = US"-MCP";
if (smtp_peer_options & OPTION_SIZE) argv[i++] = US"-MCS";
#ifdef SUPPORT_TLS
if (smtp_peer_options & OPTION_TLS)
if (smtp_peer_options & OPTION_SIZE) argv[i++] = US"-MCS";
#ifdef SUPPORT_TLS
if (smtp_peer_options & OPTION_TLS)
- if (tls_out.active >= 0 || continue_proxy_cipher)
+ if (tls_out.active
.sock
>= 0 || continue_proxy_cipher)
{
argv[i++] = US"-MCt";
argv[i++] = sending_ip_address;
argv[i++] = string_sprintf("%d", sending_port);
{
argv[i++] = US"-MCt";
argv[i++] = sending_ip_address;
argv[i++] = string_sprintf("%d", sending_port);
- argv[i++] = tls_out.active >= 0 ? tls_out.cipher : continue_proxy_cipher;
+ argv[i++] = tls_out.active
.sock
>= 0 ? tls_out.cipher : continue_proxy_cipher;
}
else
argv[i++] = US"-MCT";
}
else
argv[i++] = US"-MCT";