X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/36a3ae5f08725242b1fb4dfecc5617cc9c3e971b..a7538db17824b7fd70c12ef7561a67b85d6f247e:/src/src/smtp_out.c diff --git a/src/src/smtp_out.c b/src/src/smtp_out.c index 42a889aa6..4920b7371 100644 --- a/src/src/smtp_out.c +++ b/src/src/smtp_out.c @@ -165,13 +165,18 @@ Arguments: timeout timeout value or 0 keepalive TRUE to use keepalive dscp DSCP value to assign to socket + tpda_event event expansion Returns: connected socket number, or -1 with errno set */ int smtp_connect(host_item *host, int host_af, int port, uschar *interface, - int timeout, BOOL keepalive, const uschar *dscp) + int timeout, BOOL keepalive, const uschar *dscp +#ifdef EXPERIMENTAL_TPDA + , uschar * tpda_event +#endif + ) { int on = 1; int save_errno = 0; @@ -198,6 +203,13 @@ HDEBUG(D_transport|D_acl|D_v) host->address, port, interface); } +#ifdef EXPERIMENTAL_TPDA + /*XXX Called from both delivery and verify. Is that status observable? */ + deliver_host_address = host->address; + deliver_host_port = port; + if (tpda_raise_event(tpda_event, US"tcp:connect", NULL) == DEFER) return -1; +#endif + /* Create the socket */ if ((sock = ip_socket(SOCK_STREAM, host_af)) < 0) return -1; @@ -300,8 +312,8 @@ flush_buffer(smtp_outblock *outblock) int rc; #ifdef SUPPORT_TLS -if (tls_active == outblock->sock) - rc = tls_write(outblock->buffer, outblock->ptr - outblock->buffer); +if (tls_out.active == outblock->sock) + rc = tls_write(FALSE, outblock->buffer, outblock->ptr - outblock->buffer); else #endif @@ -352,6 +364,10 @@ if (!string_vformat(big_buffer, big_buffer_size, CS format, ap)) va_end(ap); count = Ustrlen(big_buffer); +if (count > outblock->buffersize) + log_write(0, LOG_MAIN|LOG_PANIC_DIE, "overlong write_command in outgoing " + "SMTP"); + if (count > outblock->buffersize - (outblock->ptr - outblock->buffer)) { rc = outblock->cmd_count; /* flush resets */