1 /*************************************************
2 * Exim - an Internet mail transport agent *
3 *************************************************/
5 /* Copyright (c) University of Cambridge 1995 - 2018 */
6 /* Copyright (c) The Exim Maintainers 2020 */
7 /* See the file NOTICE for conditions of use and distribution. */
9 #define DELIVER_BUFFER_SIZE 4096
12 #define PENDING_DEFER (PENDING + DEFER)
13 #define PENDING_OK (PENDING + OK)
17 /* Flags structure for validity of TLS configuration */
20 BOOL conn_certs:1; /* certificates etc. loaded */
21 BOOL cabundle:1; /* CA certificates loaded */
22 BOOL crl:1; /* CRL loaded */
23 BOOL pri_string:1; /* cipher priority-string cache loaded */
24 BOOL dh:1; /* Diffie-Helman params loaded */
25 BOOL ecdh:1; /* EC Diffie-Helman params loaded */
27 BOOL ca_rdn_emulate:1; /* do not advertise usable-cert list */
28 BOOL ocsp_hook:1; /* need hshake callback on session */
30 void * libdata0; /* library-dependent preloaded data */
31 void * libdata1; /* library-dependent preloaded data */
36 /* Private structure for the private options and other private data. */
40 uschar *fallback_hosts;
42 host_item *fallback_hostlist;
43 uschar *authenticated_sender;
49 uschar *serialize_hosts;
50 uschar *hosts_try_auth;
51 uschar *hosts_require_auth;
52 uschar *hosts_try_chunking;
54 uschar *hosts_try_dane;
55 uschar *hosts_require_dane;
56 uschar *dane_require_tls_ciphers;
58 uschar *hosts_try_fastopen;
60 uschar *hosts_try_prdr;
63 uschar *hosts_request_ocsp;
64 uschar *hosts_require_ocsp;
66 uschar *hosts_require_tls;
67 uschar *hosts_avoid_tls;
68 uschar *hosts_verify_avoid_tls;
69 uschar *hosts_avoid_pipelining;
70 #ifndef DISABLE_PIPE_CONNECT
71 uschar *hosts_pipe_connect;
73 uschar *hosts_avoid_esmtp;
75 uschar *hosts_nopass_tls;
76 uschar *hosts_noproxy_tls;
84 int hosts_max_try_hardlimit;
85 int message_linelength_limit;
86 BOOL address_retry_include_sender;
88 BOOL authenticated_sender_force;
90 BOOL dns_qualify_single;
91 BOOL dns_search_parents;
92 dnssec_domains dnssec;
93 BOOL delay_after_cutoff;
97 BOOL lmtp_ignore_quota;
98 uschar *expand_retry_include_ip_address;
99 BOOL retry_include_ip_address;
104 uschar *tls_certificate;
106 uschar *tls_privatekey;
107 uschar *tls_require_ciphers;
108 # ifndef DISABLE_TLS_RESUME
109 uschar *tls_resumption_hosts;
111 const uschar *tls_sni;
112 uschar *tls_verify_certificates;
114 BOOL tls_tempfail_tryclear;
115 uschar *tls_verify_hosts;
116 uschar *tls_try_verify_hosts;
117 uschar *tls_verify_cert_hostnames;
120 uschar *utf8_downconvert;
125 #ifdef EXPERIMENTAL_ARC
129 exim_tlslib_state tls_preload;
131 } smtp_transport_options_block;
133 #define SOB (smtp_transport_options_block *)
136 /* smtp connect context */
139 address_item * addrlist;
141 smtp_connect_args conn_args;
149 #ifndef DISABLE_PIPE_CONNECT
150 BOOL early_pipe_ok:1;
151 BOOL early_pipe_active:1;
155 BOOL pipelining_used:1;
162 BOOL dsn_all_lasthop:1;
163 #if !defined(DISABLE_TLS) && defined(SUPPORT_DANE)
164 BOOL dane_required:1;
166 #ifndef DISABLE_PIPE_CONNECT
167 BOOL pending_BANNER:1;
174 #ifdef EXPERIMENTAL_ESMTP_LIMITS
175 BOOL single_rcpt_domain:1;
177 BOOL completed_addr:1;
180 BOOL send_tlsclose:1;
182 unsigned peer_offered;
183 #ifdef EXPERIMENTAL_ESMTP_LIMITS
184 unsigned peer_limit_mail;
185 unsigned peer_limit_rcpt;
186 unsigned peer_limit_rcptdom;
193 unsigned avoid_option;
196 #ifdef EXPERIMENTAL_DSN_INFO
197 uschar * smtp_greeting;
198 uschar * helo_response;
200 #ifndef DISABLE_PIPE_CONNECT
201 /* Info about the EHLO response stored to / retrieved from cache. When
202 operating early-pipe, we use the cached values. For each of plaintext and
203 crypted we store bitmaps for ESMTP features and AUTH methods. If the LIMITS
204 extension is built and usable them at least one of the limits values cached
205 is nonzero, and we use the values to constrain the connection. */
206 ehlo_resp_precis ehlo_resp;
209 struct timeval delivery_start;
210 address_item * first_addr;
211 address_item * next_addr;
212 address_item * sync_addr;
214 client_conn_ctx cctx;
215 smtp_inblock inblock;
216 smtp_outblock outblock;
217 uschar buffer[DELIVER_BUFFER_SIZE];
218 uschar inbuffer[4096];
219 uschar outbuffer[4096];
222 extern int smtp_setup_conn(smtp_context *, BOOL);
223 extern int smtp_write_mail_and_rcpt_cmds(smtp_context *, int *);
224 extern int smtp_reap_early_pipe(smtp_context *, int *);
227 /* Data for reading the private options. */
229 extern optionlist smtp_transport_options[];
230 extern int smtp_transport_options_count;
232 /* Block containing default values. */
234 extern smtp_transport_options_block smtp_transport_option_defaults;
236 /* The main, init, and closedown entry points for the transport */
238 extern BOOL smtp_transport_entry(transport_instance *, address_item *);
239 extern void smtp_transport_init(transport_instance *);
240 extern void smtp_transport_closedown(transport_instance *);
245 extern int socks_sock_connect(host_item *, int, int, uschar *,
246 transport_instance *, int);
249 /* End of transports/smtp.h */