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 65d84e353513a73f3e4efa522ab8c56ae35ff801..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);
@@
-346,12
+348,9
@@
if (!(tctx->options & topt_output_string))
/* Write to expanding-string. NOTE: not NUL-terminated */
if (!tctx->u.msg)
/* Write to expanding-string. NOTE: not NUL-terminated */
if (!tctx->u.msg)
- {
- tctx->u.msg = store_get(tctx->msg_size = 1024);
- tctx->msg_ptr = 0;
- }
+ tctx->u.msg = string_get(1024);
-tctx->u.msg = string_catn(tctx->u.msg,
&tctx->msg_size, &tctx->msg_ptr,
block, len);
+tctx->u.msg = string_catn(tctx->u.msg, block, len);
return TRUE;
}
return TRUE;
}
@@
-591,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);
}
@@
-1076,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;
@@
-1133,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). */
@@
-1402,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)
@@
-1876,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";
@@
-2051,7
+2052,7
@@
while (*s != 0 && argcount < max_args)
while (isspace(*s)) s++;
}
while (isspace(*s)) s++;
}
-argv[argcount] =
(uschar *)
0;
+argv[argcount] =
US
0;
/* If *s != 0 we have run out of argument slots. */
/* If *s != 0 we have run out of argument slots. */
@@
-2087,7
+2088,7
@@
$recipients. */
DEBUG(D_transport)
{
debug_printf("direct command:\n");
DEBUG(D_transport)
{
debug_printf("direct command:\n");
- for (i = 0; argv[i] !=
(uschar *)
0; i++)
+ for (i = 0; argv[i] !=
US
0; i++)
debug_printf(" argv[%d] = %s\n", i, string_printing(argv[i]));
}
debug_printf(" argv[%d] = %s\n", i, string_printing(argv[i]));
}
@@
-2097,7
+2098,7
@@
if (expand_arguments)
addr->parent != NULL &&
Ustrcmp(addr->parent->address, "system-filter") == 0;
addr->parent != NULL &&
Ustrcmp(addr->parent->address, "system-filter") == 0;
- for (i = 0; argv[i] !=
(uschar *)
0; i++)
+ for (i = 0; argv[i] !=
US
0; i++)
{
/* Handle special fudge for passing an address list */
{
/* Handle special fudge for passing an address list */
@@
-2181,7
+2182,7
@@
if (expand_arguments)
while (isspace(*s)) s++; /* strip space after arg */
}
while (isspace(*s)) s++; /* strip space after arg */
}
- address_pipe_argv[address_pipe_argcount] =
(uschar *)
0;
+ address_pipe_argv[address_pipe_argcount] =
US
0;
/* If *s != 0 we have run out of argument slots. */
if (*s != 0)
/* If *s != 0 we have run out of argument slots. */
if (*s != 0)
@@
-2229,7
+2230,7
@@
if (expand_arguments)
* [argv 0][argv 1][argv 2=pipeargv[0]][argv 3=pipeargv[1]][old argv 3][0]
*/
for (address_pipe_i = 0;
* [argv 0][argv 1][argv 2=pipeargv[0]][argv 3=pipeargv[1]][old argv 3][0]
*/
for (address_pipe_i = 0;
- address_pipe_argv[address_pipe_i] !=
(uschar *)
0;
+ address_pipe_argv[address_pipe_i] !=
US
0;
address_pipe_i++)
{
argv[i++] = address_pipe_argv[address_pipe_i];
address_pipe_i++)
{
argv[i++] = address_pipe_argv[address_pipe_i];
@@
-2270,7
+2271,7
@@
if (expand_arguments)
DEBUG(D_transport)
{
debug_printf("direct command after expansion:\n");
DEBUG(D_transport)
{
debug_printf("direct command after expansion:\n");
- for (i = 0; argv[i] !=
(uschar *)
0; i++)
+ for (i = 0; argv[i] !=
US
0; i++)
debug_printf(" argv[%d] = %s\n", i, string_printing(argv[i]));
}
}
debug_printf(" argv[%d] = %s\n", i, string_printing(argv[i]));
}
}