X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/36a3ae5f08725242b1fb4dfecc5617cc9c3e971b..6c54be6459b83b955fbd2fd6d6a844f80c98427a:/src/src/smtp_out.c diff --git a/src/src/smtp_out.c b/src/src/smtp_out.c index 42a889aa6..8147b61d0 100644 --- a/src/src/smtp_out.c +++ b/src/src/smtp_out.c @@ -37,7 +37,7 @@ BOOL smtp_get_interface(uschar *istring, int host_af, address_item *addr, BOOL *changed, uschar **interface, uschar *msg) { -uschar *expint; +const uschar * expint; uschar *iface; int sep = 0; @@ -165,13 +165,18 @@ Arguments: timeout timeout value or 0 keepalive TRUE to use keepalive dscp DSCP value to assign to socket + 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_EVENT + , uschar * 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_EVENT + deliver_host_address = host->address; + deliver_host_port = port; + if (event_raise(event, US"tcp:connect", NULL)) return -1; + /* Logging? Debug? */ +#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 */