Fix merge problem.
[exim.git] / src / src / globals.c
CommitLineData
059ec3d9
PH
1/*************************************************
2* Exim - an Internet mail transport agent *
3*************************************************/
4
c4ceed07 5/* Copyright (c) University of Cambridge 1995 - 2012 */
059ec3d9
PH
6/* See the file NOTICE for conditions of use and distribution. */
7
8/* All the global variables are defined together in this one module, so
9that they are easy to find. */
10
11#include "exim.h"
12
13
059ec3d9
PH
14/* Generic options for auths, all of which live inside auth_instance
15data blocks and hence have the opt_public flag set. */
16
17optionlist optionlist_auths[] = {
6c512171
PH
18 { "client_condition", opt_stringptr | opt_public,
19 (void *)(offsetof(auth_instance, client_condition)) },
6f123593
JH
20 { "client_set_id", opt_stringptr | opt_public,
21 (void *)(offsetof(auth_instance, set_client_id)) },
059ec3d9
PH
22 { "driver", opt_stringptr | opt_public,
23 (void *)(offsetof(auth_instance, driver_name)) },
24 { "public_name", opt_stringptr | opt_public,
25 (void *)(offsetof(auth_instance, public_name)) },
26 { "server_advertise_condition", opt_stringptr | opt_public,
27 (void *)(offsetof(auth_instance, advertise_condition))},
16ff981e
PH
28 { "server_condition", opt_stringptr | opt_public,
29 (void *)(offsetof(auth_instance, server_condition)) },
059ec3d9
PH
30 { "server_debug_print", opt_stringptr | opt_public,
31 (void *)(offsetof(auth_instance, server_debug_string)) },
32 { "server_mail_auth_condition", opt_stringptr | opt_public,
33 (void *)(offsetof(auth_instance, mail_auth_condition)) },
34 { "server_set_id", opt_stringptr | opt_public,
35 (void *)(offsetof(auth_instance, set_id)) }
36};
37
38int optionlist_auths_size = sizeof(optionlist_auths)/sizeof(optionlist);
39
40/* An empty host aliases list. */
41
42uschar *no_aliases = NULL;
43
44
45/* For comments on these variables, see globals.h. I'm too idle to
46duplicate them here... */
47
48#ifdef EXIM_PERL
49uschar *opt_perl_startup = NULL;
50BOOL opt_perl_at_start = FALSE;
51BOOL opt_perl_started = FALSE;
52#endif
53
1a46a8c5
PH
54#ifdef EXPAND_DLFUNC
55tree_node *dlobj_anchor = NULL;
56#endif
57
059ec3d9
PH
58#ifdef LOOKUP_IBASE
59uschar *ibase_servers = NULL;
60#endif
61
62#ifdef LOOKUP_LDAP
bc19a55b
PP
63uschar *eldap_ca_cert_dir = NULL;
64uschar *eldap_ca_cert_file = NULL;
65uschar *eldap_cert_file = NULL;
66uschar *eldap_cert_key = NULL;
67uschar *eldap_cipher_suite = NULL;
059ec3d9 68uschar *eldap_default_servers = NULL;
bc19a55b 69uschar *eldap_require_cert = NULL;
059ec3d9 70int eldap_version = -1;
bc19a55b 71BOOL eldap_start_tls = FALSE;
059ec3d9
PH
72#endif
73
74#ifdef LOOKUP_MYSQL
75uschar *mysql_servers = NULL;
76#endif
77
78#ifdef LOOKUP_ORACLE
79uschar *oracle_servers = NULL;
80#endif
81
82#ifdef LOOKUP_PGSQL
83uschar *pgsql_servers = NULL;
84#endif
85
31480e42
PH
86#ifdef LOOKUP_SQLITE
87int sqlite_lock_timeout = 5;
88#endif
89
059ec3d9
PH
90#ifdef SUPPORT_MOVE_FROZEN_MESSAGES
91BOOL move_frozen_messages = FALSE;
92#endif
93
94/* These variables are outside the #ifdef because it keeps the code less
95cluttered in several places (e.g. during logging) if we can always refer to
96them. Also, the tls_ variables are now always visible. */
97
817d9f57
JH
98tls_support tls_in = {
99 -1, /* tls_active */
100 0, /* tls_bits */
101 FALSE,/* tls_certificate_verified */
102 NULL, /* tls_cipher */
103 FALSE,/* tls_on_connect */
104 NULL, /* tls_on_connect_ports */
105 NULL, /* tls_peerdn */
106 NULL /* tls_sni */
107};
108tls_support tls_out = {
109 -1, /* tls_active */
110 0, /* tls_bits */
111 FALSE,/* tls_certificate_verified */
112 NULL, /* tls_cipher */
113 FALSE,/* tls_on_connect */
114 NULL, /* tls_on_connect_ports */
115 NULL, /* tls_peerdn */
116 NULL /* tls_sni */
117};
118
059ec3d9
PH
119
120#ifdef SUPPORT_TLS
e6060e2c 121BOOL gnutls_compat_mode = FALSE;
a5f239e4 122BOOL gnutls_enable_pkcs11 = FALSE;
83da1223
PH
123uschar *gnutls_require_mac = NULL;
124uschar *gnutls_require_kx = NULL;
125uschar *gnutls_require_proto = NULL;
77bb000f 126uschar *openssl_options = NULL;
059ec3d9
PH
127const pcre *regex_STARTTLS = NULL;
128uschar *tls_advertise_hosts = NULL; /* This is deliberate */
129uschar *tls_certificate = NULL;
130uschar *tls_crl = NULL;
3375e053
PP
131/* This default matches NSS DH_MAX_P_BITS value at current time (2012), because
132that's the interop problem which has been observed: GnuTLS suggesting a higher
133bit-count as "NORMAL" (2432) and Thunderbird dropping connection. */
134int tls_dh_max_bits = 2236;
059ec3d9 135uschar *tls_dhparam = NULL;
3f7eeb86
PP
136#if defined(EXPERIMENTAL_OCSP) && !defined(USE_GNUTLS)
137uschar *tls_ocsp_file = NULL;
138#endif
059ec3d9
PH
139BOOL tls_offered = FALSE;
140uschar *tls_privatekey = NULL;
141BOOL tls_remember_esmtp = FALSE;
142uschar *tls_require_ciphers = NULL;
143uschar *tls_try_verify_hosts = NULL;
144uschar *tls_verify_certificates= NULL;
145uschar *tls_verify_hosts = NULL;
146#endif
147
148
149/* Input-reading functions for messages, so we can use special ones for
150incoming TCP/IP. The defaults use stdin. We never need these for any
151stand-alone tests. */
152
153#ifndef STAND_ALONE
154int (*receive_getc)(void) = stdin_getc;
155int (*receive_ungetc)(int) = stdin_ungetc;
156int (*receive_feof)(void) = stdin_feof;
157int (*receive_ferror)(void) = stdin_ferror;
58eb016e 158BOOL (*receive_smtp_buffered)(void) = NULL; /* Only used for SMTP */
059ec3d9
PH
159#endif
160
161
162/* List of per-address expansion variables for clearing and saving/restoring
163when verifying one address while routing/verifying another. We have to have
164the size explicit, because it is referenced from more than one module. */
165
166uschar **address_expansions[ADDRESS_EXPANSIONS_COUNT] = {
167 &deliver_address_data,
168 &deliver_domain,
169 &deliver_domain_data,
170 &deliver_domain_orig,
171 &deliver_domain_parent,
172 &deliver_localpart,
173 &deliver_localpart_data,
174 &deliver_localpart_orig,
175 &deliver_localpart_parent,
176 &deliver_localpart_prefix,
177 &deliver_localpart_suffix,
178 (uschar **)(&deliver_recipients),
179 &deliver_host,
180 &deliver_home,
181 &address_file,
182 &address_pipe,
183 &self_hostname,
184 NULL };
185
186int address_expansions_count = sizeof(address_expansions)/sizeof(uschar **);
187
188/* General global variables */
189
71fafd95 190header_line *acl_added_headers = NULL;
059ec3d9 191tree_node *acl_anchor = NULL;
525239c1
JH
192uschar *acl_arg[9] = {NULL, NULL, NULL, NULL, NULL,
193 NULL, NULL, NULL, NULL};
194int acl_narg = 0;
8f128379 195
059ec3d9 196uschar *acl_not_smtp = NULL;
54cdb463
PH
197#ifdef WITH_CONTENT_SCAN
198uschar *acl_not_smtp_mime = NULL;
199#endif
45b91596 200uschar *acl_not_smtp_start = NULL;
e7568d51 201uschar *acl_removed_headers = NULL;
059ec3d9
PH
202uschar *acl_smtp_auth = NULL;
203uschar *acl_smtp_connect = NULL;
204uschar *acl_smtp_data = NULL;
80a47a2c
TK
205#ifndef DISABLE_DKIM
206uschar *acl_smtp_dkim = NULL;
207#endif
059ec3d9
PH
208uschar *acl_smtp_etrn = NULL;
209uschar *acl_smtp_expn = NULL;
210uschar *acl_smtp_helo = NULL;
211uschar *acl_smtp_mail = NULL;
212uschar *acl_smtp_mailauth = NULL;
8523533c
TK
213#ifdef WITH_CONTENT_SCAN
214uschar *acl_smtp_mime = NULL;
215#endif
8f128379 216uschar *acl_smtp_notquit = NULL;
059ec3d9
PH
217uschar *acl_smtp_predata = NULL;
218uschar *acl_smtp_quit = NULL;
219uschar *acl_smtp_rcpt = NULL;
220uschar *acl_smtp_starttls = NULL;
221uschar *acl_smtp_vrfy = NULL;
8f128379 222
059ec3d9 223BOOL acl_temp_details = FALSE;
38a0a95f
PH
224tree_node *acl_var_c = NULL;
225tree_node *acl_var_m = NULL;
059ec3d9 226uschar *acl_verify_message = NULL;
059ec3d9
PH
227string_item *acl_warn_logged = NULL;
228
229/* Names of SMTP places for use in ACL error messages, and corresponding SMTP
230error codes - keep in step with definitions of ACL_WHERE_xxxx in macros.h. */
231
232uschar *acl_wherenames[] = { US"RCPT",
233 US"MAIL",
234 US"PREDATA",
8523533c 235 US"MIME",
80a47a2c 236 US"DKIM",
059ec3d9
PH
237 US"DATA",
238 US"non-SMTP",
239 US"AUTH",
240 US"connection",
241 US"ETRN",
242 US"EXPN",
243 US"EHLO or HELO",
244 US"MAILAUTH",
45b91596 245 US"non-SMTP-start",
8f128379 246 US"NOTQUIT",
059ec3d9
PH
247 US"QUIT",
248 US"STARTTLS",
723c72e6 249 US"VRFY",
faa05a93
JH
250 US"delivery",
251 US"unknown"
059ec3d9
PH
252 };
253
a5bd321b
PH
254uschar *acl_wherecodes[] = { US"550", /* RCPT */
255 US"550", /* MAIL */
256 US"550", /* PREDATA */
257 US"550", /* MIME */
80a47a2c 258 US"550", /* DKIM */
a5bd321b
PH
259 US"550", /* DATA */
260 US"0", /* not SMTP; not relevant */
261 US"503", /* AUTH */
262 US"550", /* connect */
263 US"458", /* ETRN */
264 US"550", /* EXPN */
265 US"550", /* HELO/EHLO */
266 US"0", /* MAILAUTH; not relevant */
267 US"0", /* not SMTP; not relevant */
8f128379 268 US"0", /* NOTQUIT; not relevant */
a5bd321b
PH
269 US"0", /* QUIT; not relevant */
270 US"550", /* STARTTLS */
723c72e6 271 US"252", /* VRFY */
faa05a93 272 US"0", /* delivery; not relevant */
723c72e6 273 US"0" /* unknown; not relevant */
059ec3d9 274 };
8e669ac1 275
69358f02
PH
276BOOL active_local_from_check = FALSE;
277BOOL active_local_sender_retain = FALSE;
3c0a92dc 278int body_8bitmime = 0;
9cbad13b 279BOOL accept_8bitmime = TRUE; /* deliberately not RFC compliant */
059ec3d9
PH
280address_item *addr_duplicate = NULL;
281
282address_item address_defaults = {
283 NULL, /* next */
284 NULL, /* parent */
285 NULL, /* first */
286 NULL, /* dupof */
287 NULL, /* start_router */
288 NULL, /* router */
289 NULL, /* transport */
290 NULL, /* host_list */
291 NULL, /* host_used */
292 NULL, /* fallback_hosts */
293 NULL, /* reply */
294 NULL, /* retries */
295 NULL, /* address */
296 NULL, /* unique */
297 NULL, /* cc_local_part */
298 NULL, /* lc_local_part */
299 NULL, /* local_part */
300 NULL, /* prefix */
301 NULL, /* suffix */
302 NULL, /* domain */
303 NULL, /* address_retry_key */
304 NULL, /* domain_retry_key */
305 NULL, /* current_dir */
306 NULL, /* home_dir */
307 NULL, /* message */
308 NULL, /* user_message */
309 NULL, /* onetime_parent */
310 NULL, /* pipe_expandn */
311 NULL, /* return_filename */
312 NULL, /* self_hostname */
313 NULL, /* shadow_message */
314 #ifdef SUPPORT_TLS
315 NULL, /* cipher */
316 NULL, /* peerdn */
317 #endif
018c60d7
JH
318 NULL, /* authenticator */
319 NULL, /* auth_id */
320 NULL, /* auth_sndr */
059ec3d9
PH
321 (uid_t)(-1), /* uid */
322 (gid_t)(-1), /* gid */
323 0, /* flags */
324 { 0 }, /* domain_cache - any larger array should be zeroed */
325 { 0 }, /* localpart_cache - ditto */
326 -1, /* mode */
327 0, /* more_errno */
328 ERRNO_UNKNOWNERROR, /* basic_errno */
329 0, /* child_count */
330 -1, /* return_file */
331 SPECIAL_NONE, /* special_action */
332 DEFER, /* transport_return */
333 { /* fields that are propagated to children */
334 NULL, /* address_data */
335 NULL, /* domain_data */
336 NULL, /* localpart_data */
337 NULL, /* errors_address */
338 NULL, /* extra_headers */
339 NULL, /* remove_headers */
384152a6
TK
340#ifdef EXPERIMENTAL_SRS
341 NULL, /* srs_sender */
342#endif
059ec3d9
PH
343 }
344};
345
346uschar *address_file = NULL;
347uschar *address_pipe = NULL;
348BOOL address_test_mode = FALSE;
349tree_node *addresslist_anchor = NULL;
350int addresslist_count = 0;
351gid_t *admin_groups = NULL;
352BOOL admin_user = FALSE;
c46782ef 353BOOL allow_auth_unadvertised= FALSE;
059ec3d9
PH
354BOOL allow_domain_literals = FALSE;
355BOOL allow_mx_to_ip = FALSE;
356BOOL allow_unqualified_recipient = TRUE; /* For local messages */
357BOOL allow_unqualified_sender = TRUE; /* Reset for SMTP */
358BOOL allow_utf8_domains = FALSE;
359uschar *authenticated_id = NULL;
360uschar *authenticated_sender = NULL;
361BOOL authentication_failed = FALSE;
362auth_instance *auths = NULL;
363uschar *auth_advertise_hosts = US"*";
364auth_instance auth_defaults = {
365 NULL, /* chain pointer */
366 NULL, /* name */
367 NULL, /* info */
368 NULL, /* private options block pointer */
369 NULL, /* driver_name */
370 NULL, /* advertise_condition */
6c512171 371 NULL, /* client_condition */
059ec3d9
PH
372 NULL, /* public_name */
373 NULL, /* set_id */
c8e2fc1e 374 NULL, /* set_client_id */
059ec3d9
PH
375 NULL, /* server_mail_auth_condition */
376 NULL, /* server_debug_string */
16ff981e 377 NULL, /* server_condition */
059ec3d9
PH
378 FALSE, /* client */
379 FALSE, /* server */
380 FALSE /* advertised */
381};
382
383uschar *auth_defer_msg = US"reason not recorded";
384uschar *auth_defer_user_msg = US"";
f78eb7c6 385uschar *auth_vars[AUTH_VARS];
059ec3d9 386int auto_thaw = 0;
8523533c 387#ifdef WITH_CONTENT_SCAN
9e949f00 388BOOL av_failed = FALSE;
8523533c
TK
389uschar *av_scanner = US"sophie:/var/run/sophie"; /* AV scanner */
390#endif
059ec3d9
PH
391
392BOOL background_daemon = TRUE;
9a799bc0
PH
393
394#if BASE_62 == 62
059ec3d9
PH
395uschar *base62_chars=
396 US"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
9a799bc0
PH
397#else
398uschar *base62_chars= US"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
399#endif
400
059ec3d9
PH
401uschar *bi_command = NULL;
402uschar *big_buffer = NULL;
403int big_buffer_size = BIG_BUFFER_SIZE;
8523533c
TK
404#ifdef EXPERIMENTAL_BRIGHTMAIL
405uschar *bmi_alt_location = NULL;
406uschar *bmi_base64_tracker_verdict = NULL;
407uschar *bmi_base64_verdict = NULL;
408uschar *bmi_config_file = US"/opt/brightmail/etc/brightmail.cfg";
409int bmi_deliver = 1;
410int bmi_run = 0;
411uschar *bmi_verdicts = NULL;
412#endif
059ec3d9
PH
413int body_linecount = 0;
414int body_zerocount = 0;
415uschar *bounce_message_file = NULL;
416uschar *bounce_message_text = NULL;
417uschar *bounce_recipient = NULL;
418BOOL bounce_return_body = TRUE;
419BOOL bounce_return_message = TRUE;
420int bounce_return_size_limit = 100*1024;
421uschar *bounce_sender_authentication = NULL;
422int bsmtp_transaction_linecount = 0;
423
424int callout_cache_domain_positive_expire = 7*24*60*60;
425int callout_cache_domain_negative_expire = 3*60*60;
426int callout_cache_positive_expire = 24*60*60;
427int callout_cache_negative_expire = 2*60*60;
428uschar *callout_random_local_part = US"$primary_hostname-$tod_epoch-testing";
80a47a2c 429uschar *check_dns_names_pattern= US"(?i)^(?>(?(1)\\.|())[^\\W](?>[a-z0-9/_-]*[^\\W])?)+(\\.?)$";
059ec3d9
PH
430int check_log_inodes = 0;
431int check_log_space = 0;
a0d6ba8a 432BOOL check_rfc2047_length = TRUE;
059ec3d9
PH
433int check_spool_inodes = 0;
434int check_spool_space = 0;
6f123593
JH
435uschar *client_authenticator = NULL;
436uschar *client_authenticated_id = NULL;
c8e2fc1e 437uschar *client_authenticated_sender = NULL;
059ec3d9
PH
438int clmacro_count = 0;
439uschar *clmacros[MAX_CLMACROS];
440BOOL config_changed = FALSE;
441FILE *config_file = NULL;
442uschar *config_filename = NULL;
443int config_lineno = 0;
35edf2ff
PH
444#ifdef CONFIGURE_GROUP
445gid_t config_gid = CONFIGURE_GROUP;
446#endif
059ec3d9
PH
447uschar *config_main_filelist = US CONFIGURE_FILE
448 "\0<-----------Space to patch configure_filename->";
449uschar *config_main_filename = NULL;
450
451#ifdef CONFIGURE_OWNER
452uid_t config_uid = CONFIGURE_OWNER;
453#endif
454
455int connection_max_messages= -1;
456uschar *continue_hostname = NULL;
457uschar *continue_host_address = NULL;
458BOOL continue_more = FALSE;
459int continue_sequence = 1;
460uschar *continue_transport = NULL;
461
e5a9dba6 462uschar *csa_status = NULL;
e4bdf652
JH
463BOOL cutthrough_delivery = FALSE;
464int cutthrough_fd = -1;
e5a9dba6 465
059ec3d9
PH
466BOOL daemon_listen = FALSE;
467uschar *daemon_smtp_port = US"smtp";
4aee0225
PH
468int daemon_startup_retries = 9;
469int daemon_startup_sleep = 30;
6a8f9482
TK
470
471#ifdef EXPERIMENTAL_DCC
472BOOL dcc_direct_add_header = FALSE;
473uschar *dcc_header = NULL;
474uschar *dcc_result = NULL;
475uschar *dccifd_address = US"/usr/local/dcc/var/dccifd";
476uschar *dccifd_options = US"header";
477#endif
478
3d235903 479BOOL debug_daemon = FALSE;
059ec3d9
PH
480int debug_fd = -1;
481FILE *debug_file = NULL;
482bit_table debug_options[] = {
483 { US"acl", D_acl },
484 { US"all", D_all },
485 { US"auth", D_auth },
486 { US"deliver", D_deliver },
487 { US"dns", D_dns },
488 { US"dnsbl", D_dnsbl },
489 { US"exec", D_exec },
490 { US"expand", D_expand },
491 { US"filter", D_filter },
492 { US"hints_lookup", D_hints_lookup },
493 { US"host_lookup", D_host_lookup },
494 { US"ident", D_ident },
495 { US"interface", D_interface },
496 { US"lists", D_lists },
497 { US"load", D_load },
498 { US"local_scan", D_local_scan },
499 { US"lookup", D_lookup },
500 { US"memory", D_memory },
501 { US"pid", D_pid },
502 { US"process_info", D_process_info },
503 { US"queue_run", D_queue_run },
504 { US"receive", D_receive },
505 { US"resolver", D_resolver },
506 { US"retry", D_retry },
507 { US"rewrite", D_rewrite },
508 { US"route", D_route },
509 { US"timestamp", D_timestamp },
510 { US"tls", D_tls },
511 { US"transport", D_transport },
512 { US"uid", D_uid },
513 { US"verify", D_verify }
514};
515int debug_options_count = sizeof(debug_options)/sizeof(bit_table);
516unsigned int debug_selector = 0;
517int delay_warning[DELAY_WARNING_SIZE] = { DELAY_WARNING_SIZE, 1, 24*60*60 };
5dff5817
PH
518uschar *delay_warning_condition=
519 US"${if or {"
e85a7ad5 520 "{ !eq{$h_list-id:$h_list-post:$h_list-subscribe:}{} }"
5dff5817
PH
521 "{ match{$h_precedence:}{(?i)bulk|list|junk} }"
522 "{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }"
523 "} {no}{yes}}";
059ec3d9
PH
524BOOL delivery_date_remove = TRUE;
525uschar *deliver_address_data = NULL;
526int deliver_datafile = -1;
527uschar *deliver_domain = NULL;
528uschar *deliver_domain_data = NULL;
529uschar *deliver_domain_orig = NULL;
530uschar *deliver_domain_parent = NULL;
531BOOL deliver_drop_privilege = FALSE;
532BOOL deliver_firsttime = FALSE;
533BOOL deliver_force = FALSE;
534BOOL deliver_freeze = FALSE;
535int deliver_frozen_at = 0;
536uschar *deliver_home = NULL;
537uschar *deliver_host = NULL;
538uschar *deliver_host_address = NULL;
539uschar *deliver_in_buffer = NULL;
540ino_t deliver_inode = 0;
541uschar *deliver_localpart = NULL;
542uschar *deliver_localpart_data = NULL;
543uschar *deliver_localpart_orig = NULL;
544uschar *deliver_localpart_parent = NULL;
545uschar *deliver_localpart_prefix = NULL;
546uschar *deliver_localpart_suffix = NULL;
547BOOL deliver_force_thaw = FALSE;
548BOOL deliver_manual_thaw = FALSE;
549uschar *deliver_out_buffer = NULL;
550int deliver_queue_load_max = -1;
551address_item *deliver_recipients = NULL;
552uschar *deliver_selectstring = NULL;
553BOOL deliver_selectstring_regex = FALSE;
554uschar *deliver_selectstring_sender = NULL;
555BOOL deliver_selectstring_sender_regex = FALSE;
8523533c
TK
556#ifdef WITH_OLD_DEMIME
557int demime_errorlevel = 0;
558int demime_ok = 0;
559uschar *demime_reason = NULL;
560#endif
4c590bd1 561BOOL disable_callout_flush = FALSE;
047bdd8c 562BOOL disable_delay_flush = FALSE;
54fc8428
PH
563#ifdef ENABLE_DISABLE_FSYNC
564BOOL disable_fsync = FALSE;
565#endif
7e66e54d 566BOOL disable_ipv6 = FALSE;
059ec3d9
PH
567BOOL disable_logging = FALSE;
568
80a47a2c 569#ifndef DISABLE_DKIM
2df588c9 570uschar *dkim_cur_signer = NULL;
9e5d6b55 571uschar *dkim_signers = NULL;
f7572e5a
TK
572uschar *dkim_signing_domain = NULL;
573uschar *dkim_signing_selector = NULL;
9e5d6b55 574uschar *dkim_verify_signers = US"$dkim_signers";
80a47a2c
TK
575BOOL dkim_collect_input = FALSE;
576BOOL dkim_disable_verify = FALSE;
f7572e5a
TK
577#endif
578
059ec3d9 579uschar *dns_again_means_nonexist = NULL;
e5a9dba6
PH
580int dns_csa_search_limit = 5;
581BOOL dns_csa_use_reverse = TRUE;
059ec3d9
PH
582uschar *dns_ipv4_lookup = NULL;
583int dns_retrans = 0;
584int dns_retry = 0;
1f4a55da 585int dns_use_dnssec = -1; /* <0 = not coerced */
e97d1f08 586int dns_use_edns0 = -1; /* <0 = not coerced */
059ec3d9 587uschar *dnslist_domain = NULL;
93655c46 588uschar *dnslist_matched = NULL;
059ec3d9
PH
589uschar *dnslist_text = NULL;
590uschar *dnslist_value = NULL;
591tree_node *domainlist_anchor = NULL;
592int domainlist_count = 0;
593BOOL dont_deliver = FALSE;
594BOOL dot_ends = TRUE;
595BOOL drop_cr = FALSE; /* No longer used */
0e22dfd1 596uschar *dsn_from = US DEFAULT_DSN_FROM;
059ec3d9
PH
597
598BOOL enable_dollar_recipients = FALSE;
599BOOL envelope_to_remove = TRUE;
600int errno_quota = ERRNO_QUOTA;
601uschar *errors_copy = NULL;
602int error_handling = ERRORS_SENDER;
603uschar *errors_reply_to = NULL;
604int errors_sender_rc = EXIT_FAILURE;
605
606gid_t exim_gid = EXIM_GID;
607BOOL exim_gid_set = TRUE; /* This gid is always set */
608uschar *exim_path = US BIN_DIRECTORY "/exim"
609 "\0<---------------Space to patch exim_path->";
610uid_t exim_uid = EXIM_UID;
611BOOL exim_uid_set = TRUE; /* This uid is always set */
612int expand_forbid = 0;
613int expand_nlength[EXPAND_MAXN+1];
614int expand_nmax = -1;
615uschar *expand_nstring[EXPAND_MAXN+1];
616BOOL expand_string_forcedfail = FALSE;
617uschar *expand_string_message;
618BOOL extract_addresses_remove_arguments = TRUE;
619uschar *extra_local_interfaces = NULL;
620
29aba418 621int fake_response = OK;
0e22dfd1
PH
622uschar *fake_response_text = US"Your message has been rejected but is "
623 "being kept for evaluation.\nIf it was a "
624 "legitimate message, it may still be "
625 "delivered to the target recipient(s).";
059ec3d9
PH
626int filter_n[FILTER_VARIABLE_COUNT];
627BOOL filter_running = FALSE;
628int filter_sn[FILTER_VARIABLE_COUNT];
f05da2e8
PH
629int filter_test = FTEST_NONE;
630uschar *filter_test_sfile = NULL;
631uschar *filter_test_ufile = NULL;
059ec3d9
PH
632uschar *filter_thisaddress = NULL;
633int finduser_retries = 0;
8523533c
TK
634#ifdef WITH_OLD_DEMIME
635uschar *found_extension = NULL;
636#endif
059ec3d9
PH
637uid_t fixed_never_users[] = { FIXED_NEVER_USERS };
638uschar *freeze_tell = NULL;
6a3f1455 639uschar *freeze_tell_config = NULL;
059ec3d9
PH
640uschar *fudged_queue_times = US"";
641
642uschar *gecos_name = NULL;
643uschar *gecos_pattern = NULL;
644rewrite_rule *global_rewrite_rules = NULL;
645
646uschar *headers_charset = US HEADERS_CHARSET;
647int header_insert_maxlen = 64 * 1024;
648header_line *header_last = NULL;
649header_line *header_list = NULL;
650int header_maxsize = HEADER_MAXSIZE;
651int header_line_maxsize = 0;
652
653header_name header_names[] = {
654 { US"bcc", 3, TRUE, htype_bcc },
655 { US"cc", 2, TRUE, htype_cc },
656 { US"date", 4, TRUE, htype_date },
657 { US"delivery-date", 13, FALSE, htype_delivery_date },
658 { US"envelope-to", 11, FALSE, htype_envelope_to },
659 { US"from", 4, TRUE, htype_from },
660 { US"message-id", 10, TRUE, htype_id },
661 { US"received", 8, FALSE, htype_received },
662 { US"reply-to", 8, FALSE, htype_reply_to },
663 { US"return-path", 11, FALSE, htype_return_path },
664 { US"sender", 6, TRUE, htype_sender },
665 { US"subject", 7, FALSE, htype_subject },
666 { US"to", 2, TRUE, htype_to }
667};
668
669int header_names_size = sizeof(header_names)/sizeof(header_name);
670
671BOOL header_rewritten = FALSE;
672uschar *helo_accept_junk_hosts = NULL;
673uschar *helo_allow_chars = US"";
674uschar *helo_lookup_domains = US"@ : @[]";
675uschar *helo_try_verify_hosts = NULL;
676BOOL helo_verified = FALSE;
d7b47fd0 677BOOL helo_verify_failed = FALSE;
059ec3d9 678uschar *helo_verify_hosts = NULL;
1ba28e2b 679const uschar *hex_digits = CUS"0123456789abcdef";
059ec3d9
PH
680uschar *hold_domains = NULL;
681BOOL host_checking = FALSE;
682BOOL host_checking_callout = FALSE;
683uschar *host_data = NULL;
684BOOL host_find_failed_syntax= FALSE;
685uschar *host_lookup = NULL;
b08b24c8 686BOOL host_lookup_deferred = FALSE;
059ec3d9
PH
687BOOL host_lookup_failed = FALSE;
688uschar *host_lookup_order = US"bydns:byaddr";
689uschar *host_lookup_msg = US"";
690int host_number = 0;
691uschar *host_number_string = NULL;
692uschar *host_reject_connection = NULL;
693tree_node *hostlist_anchor = NULL;
694int hostlist_count = 0;
695uschar *hosts_treat_as_local = NULL;
696uschar *hosts_connection_nolog = NULL;
697
698int ignore_bounce_errors_after = 10*7*24*60*60; /* 10 weeks */
699BOOL ignore_fromline_local = FALSE;
700uschar *ignore_fromline_hosts = NULL;
9ee44efb
PP
701BOOL inetd_wait_mode = FALSE;
702int inetd_wait_timeout = -1;
059ec3d9
PH
703uschar *interface_address = NULL;
704int interface_port = -1;
705BOOL is_inetd = FALSE;
0ce9abe6 706uschar *iterate_item = NULL;
059ec3d9
PH
707
708int journal_fd = -1;
709
710int keep_malformed = 4*24*60*60; /* 4 days */
711
712uschar *eldap_dn = NULL;
713int load_average = -2;
714BOOL local_error_message = FALSE;
715BOOL local_from_check = TRUE;
716uschar *local_from_prefix = NULL;
717uschar *local_from_suffix = NULL;
718
719#if HAVE_IPV6
720uschar *local_interfaces = US"<; ::0 ; 0.0.0.0";
721#else
722uschar *local_interfaces = US"0.0.0.0";
723#endif
724
725uschar *local_scan_data = NULL;
726int local_scan_timeout = 5*60;
727BOOL local_sender_retain = FALSE;
728gid_t local_user_gid = (gid_t)(-1);
729uid_t local_user_uid = (uid_t)(-1);
730
731tree_node *localpartlist_anchor= NULL;
732int localpartlist_count = 0;
733uschar *log_buffer = NULL;
734unsigned int log_extra_selector = LX_default;
735uschar *log_file_path = US LOG_FILE_PATH
736 "\0<--------------Space to patch log_file_path->";
737
738/* Those log options with L_xxx identifiers have values less than 0x800000 and
739are the ones that get put into log_write_selector. They can be used in calls to
740log_write() to test for the bit. The options with LX_xxx identifiers have
3f0945ff 741values greater than 0x80000000 and are put into log_extra_selector (without the
059ec3d9
PH
742top bit). They are never used in calls to log_write(), but are tested
743independently. This separation became necessary when the number of log
744selectors was getting close to filling a 32-bit word. */
745
f3f065bb
PH
746/* Note that this list must be in alphabetical order. */
747
059ec3d9 748bit_table log_options[] = {
3c0a92dc 749 { US"8bitmime", LX_8bitmime },
49826d12 750 { US"acl_warn_skipped", LX_acl_warn_skipped },
059ec3d9
PH
751 { US"address_rewrite", L_address_rewrite },
752 { US"all", L_all },
753 { US"all_parents", L_all_parents },
754 { US"arguments", LX_arguments },
755 { US"connection_reject", L_connection_reject },
756 { US"delay_delivery", L_delay_delivery },
757 { US"deliver_time", LX_deliver_time },
758 { US"delivery_size", LX_delivery_size },
759 { US"dnslist_defer", L_dnslist_defer },
760 { US"etrn", L_etrn },
761 { US"host_lookup_failed", L_host_lookup_failed },
762 { US"ident_timeout", LX_ident_timeout },
763 { US"incoming_interface", LX_incoming_interface },
764 { US"incoming_port", LX_incoming_port },
765 { US"lost_incoming_connection", L_lost_incoming_connection },
766 { US"outgoing_port", LX_outgoing_port },
f3f065bb 767 { US"pid", LX_pid },
059ec3d9
PH
768 { US"queue_run", L_queue_run },
769 { US"queue_time", LX_queue_time },
2ac0e484 770 { US"queue_time_overall", LX_queue_time_overall },
059ec3d9
PH
771 { US"received_recipients", LX_received_recipients },
772 { US"received_sender", LX_received_sender },
773 { US"rejected_header", LX_rejected_header },
774 { US"rejected_headers", LX_rejected_header },
775 { US"retry_defer", L_retry_defer },
776 { US"return_path_on_delivery", LX_return_path_on_delivery },
777 { US"sender_on_delivery", LX_sender_on_delivery },
278c6e6c 778 { US"sender_verify_fail", LX_sender_verify_fail },
059ec3d9
PH
779 { US"size_reject", L_size_reject },
780 { US"skip_delivery", L_skip_delivery },
781 { US"smtp_confirmation", LX_smtp_confirmation },
782 { US"smtp_connection", L_smtp_connection },
783 { US"smtp_incomplete_transaction", L_smtp_incomplete_transaction },
c8e2fc1e 784 { US"smtp_mailauth", LX_smtp_mailauth },
b4ed4da0 785 { US"smtp_no_mail", LX_smtp_no_mail },
059ec3d9
PH
786 { US"smtp_protocol_error", L_smtp_protocol_error },
787 { US"smtp_syntax_error", L_smtp_syntax_error },
788 { US"subject", LX_subject },
789 { US"tls_certificate_verified", LX_tls_certificate_verified },
790 { US"tls_cipher", LX_tls_cipher },
1130bfb0 791 { US"tls_peerdn", LX_tls_peerdn },
3f0945ff 792 { US"tls_sni", LX_tls_sni },
1130bfb0 793 { US"unknown_in_list", LX_unknown_in_list }
059ec3d9
PH
794};
795
796int log_options_count = sizeof(log_options)/sizeof(bit_table);
6ea85e9a 797int log_reject_target = 0;
059ec3d9
PH
798uschar *log_selector_string = NULL;
799FILE *log_stderr = NULL;
800BOOL log_testing_mode = FALSE;
801BOOL log_timezone = FALSE;
6ea85e9a 802unsigned int log_write_selector= L_default;
059ec3d9
PH
803uschar *login_sender_address = NULL;
804int lookup_open_max = 25;
805uschar *lookup_value = NULL;
806
807macro_item *macros = NULL;
808uschar *mailstore_basename = NULL;
8523533c
TK
809#ifdef WITH_CONTENT_SCAN
810uschar *malware_name = NULL; /* Virus Name */
811#endif
d677b2f2 812int max_received_linelength= 0;
059ec3d9
PH
813int max_username_length = 0;
814int message_age = 0;
815uschar *message_body = NULL;
816uschar *message_body_end = NULL;
ddea74fa 817BOOL message_body_newlines = FALSE;
059ec3d9
PH
818int message_body_size = 0;
819int message_body_visible = 500;
820int message_ended = END_NOTSTARTED;
821uschar *message_headers = NULL;
822uschar *message_id;
823uschar *message_id_domain = NULL;
824uschar *message_id_text = NULL;
825struct timeval message_id_tv = { 0, 0 };
826uschar message_id_option[MESSAGE_ID_LENGTH + 3];
827uschar *message_id_external;
828int message_linecount = 0;
829BOOL message_logs = TRUE;
830int message_size = 0;
831uschar *message_size_limit = US"50M";
832uschar message_subdir[2] = { 0, 0 };
833uschar *message_reference = NULL;
8523533c
TK
834
835/* MIME ACL expandables */
836#ifdef WITH_CONTENT_SCAN
f7b63901 837int mime_anomaly_level = 0;
1ba28e2b 838const uschar *mime_anomaly_text = NULL;
8523533c
TK
839uschar *mime_boundary = NULL;
840uschar *mime_charset = NULL;
841uschar *mime_content_description = NULL;
842uschar *mime_content_disposition = NULL;
843uschar *mime_content_id = NULL;
844unsigned int mime_content_size = 0;
845uschar *mime_content_transfer_encoding = NULL;
846uschar *mime_content_type = NULL;
847uschar *mime_decoded_filename = NULL;
848uschar *mime_filename = NULL;
849int mime_is_multipart = 0;
850int mime_is_coverletter = 0;
851int mime_is_rfc822 = 0;
852int mime_part_count = -1;
853#endif
854
059ec3d9
PH
855BOOL mua_wrapper = FALSE;
856
857uid_t *never_users = NULL;
8523533c
TK
858#ifdef WITH_CONTENT_SCAN
859BOOL no_mbox_unspool = FALSE;
860#endif
059ec3d9
PH
861BOOL no_multiline_responses = FALSE;
862
863uid_t original_euid;
864gid_t originator_gid;
865uschar *originator_login = NULL;
866uschar *originator_name = NULL;
867uid_t originator_uid;
868uschar *override_local_interfaces = NULL;
869uschar *override_pid_file_path = NULL;
870
871BOOL parse_allow_group = FALSE;
872BOOL parse_found_group = FALSE;
873uschar *percent_hack_domains = NULL;
874uschar *pid_file_path = US PID_FILE_PATH
875 "\0<--------------Space to patch pid_file_path->";
cf8b11a5 876BOOL pipelining_enable = TRUE;
059ec3d9
PH
877uschar *pipelining_advertise_hosts = US"*";
878BOOL preserve_message_logs = FALSE;
879uschar *primary_hostname = NULL;
880BOOL print_topbitchars = FALSE;
881uschar process_info[PROCESS_INFO_SIZE];
921b12ca 882int process_info_len = 0;
059ec3d9
PH
883uschar *process_log_path = NULL;
884BOOL prod_requires_admin = TRUE;
fffda43a
TK
885uschar *prvscheck_address = NULL;
886uschar *prvscheck_keynum = NULL;
887uschar *prvscheck_result = NULL;
888
059ec3d9
PH
889
890uschar *qualify_domain_recipient = NULL;
891uschar *qualify_domain_sender = NULL;
892BOOL queue_2stage = FALSE;
893uschar *queue_domains = NULL;
894int queue_interval = -1;
895BOOL queue_list_requires_admin = TRUE;
896BOOL queue_only = FALSE;
897uschar *queue_only_file = NULL;
898int queue_only_load = -1;
8669f003 899BOOL queue_only_load_latch = TRUE;
059ec3d9
PH
900BOOL queue_only_override = TRUE;
901BOOL queue_only_policy = FALSE;
902BOOL queue_run_first_delivery = FALSE;
903BOOL queue_run_force = FALSE;
904BOOL queue_run_in_order = FALSE;
905BOOL queue_run_local = FALSE;
906int queue_run_max = 5;
907pid_t queue_run_pid = (pid_t)0;
908int queue_run_pipe = -1;
909BOOL queue_running = FALSE;
910BOOL queue_smtp = FALSE;
911uschar *queue_smtp_domains = NULL;
912
913unsigned int random_seed = 0;
fe0dab11 914tree_node *ratelimiters_cmd = NULL;
870f6ba8
TF
915tree_node *ratelimiters_conn = NULL;
916tree_node *ratelimiters_mail = NULL;
059ec3d9
PH
917uschar *raw_active_hostname = NULL;
918uschar *raw_sender = NULL;
919uschar **raw_recipients = NULL;
920int raw_recipients_count = 0;
921
922int rcpt_count = 0;
923int rcpt_fail_count = 0;
924int rcpt_defer_count = 0;
925gid_t real_gid;
926uid_t real_uid;
927BOOL really_exim = TRUE;
928BOOL receive_call_bombout = FALSE;
929int receive_linecount = 0;
930int receive_messagecount = 0;
931int receive_timeout = 0;
932int received_count = 0;
933uschar *received_for = NULL;
934
935/* This is the default text for Received headers generated by Exim. The
936date will be automatically added on the end. */
937
938uschar *received_header_text = US
939 "Received: "
940 "${if def:sender_rcvhost {from $sender_rcvhost\n\t}"
1e70f85b 941 "{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}"
059ec3d9
PH
942 "${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}"
943 "by $primary_hostname "
944 "${if def:received_protocol {with $received_protocol}} "
945 #ifdef SUPPORT_TLS
946 "${if def:tls_cipher {($tls_cipher)\n\t}}"
947 #endif
948 "(Exim $version_number)\n\t"
3e46c1aa 949 "${if def:sender_address {(envelope-from <$sender_address>)\n\t}}"
1ab52c69 950 "id $message_exim_id"
059ec3d9
PH
951 "${if def:received_for {\n\tfor $received_for}}"
952 "\0<---------------Space to patch received_header_text->";
953
954int received_headers_max = 30;
955uschar *received_protocol = NULL;
956int received_time = 0;
957uschar *recipient_data = NULL;
958uschar *recipient_unqualified_hosts = NULL;
2c7db3f5 959uschar *recipient_verify_failure = NULL;
059ec3d9
PH
960int recipients_count = 0;
961BOOL recipients_discarded = FALSE;
962recipient_item *recipients_list = NULL;
963int recipients_list_max = 0;
964int recipients_max = 0;
965BOOL recipients_max_reject = FALSE;
966const pcre *regex_AUTH = NULL;
967const pcre *regex_check_dns_names = NULL;
968const pcre *regex_From = NULL;
f1513293 969const pcre *regex_IGNOREQUOTA = NULL;
059ec3d9
PH
970const pcre *regex_PIPELINING = NULL;
971const pcre *regex_SIZE = NULL;
a5bd321b 972const pcre *regex_smtp_code = NULL;
059ec3d9 973const pcre *regex_ismsgid = NULL;
a7cbbf50
PP
974#ifdef WHITELIST_D_MACROS
975const pcre *regex_whitelisted_macro = NULL;
976#endif
8523533c
TK
977#ifdef WITH_CONTENT_SCAN
978uschar *regex_match_string = NULL;
979#endif
059ec3d9
PH
980int remote_delivery_count = 0;
981int remote_max_parallel = 2;
982uschar *remote_sort_domains = NULL;
983int retry_data_expire = 7*24*60*60;
984int retry_interval_max = 24*60*60;
985int retry_maximum_timeout = 0; /* set from retry config */
986retry_config *retries = NULL;
987uschar *return_path = NULL;
988BOOL return_path_remove = TRUE;
989int rewrite_existflags = 0;
990uschar *rfc1413_hosts = US"*";
8def5aaf 991int rfc1413_query_timeout = 5;
059ec3d9 992/* BOOL rfc821_domains = FALSE; <<< on the way out */
c1d94452 993uid_t root_gid = ROOT_GID;
059ec3d9
PH
994uid_t root_uid = ROOT_UID;
995
996router_instance *routers = NULL;
997router_instance router_defaults = {
998 NULL, /* chain pointer */
999 NULL, /* name */
1000 NULL, /* info */
1001 NULL, /* private options block pointer */
1002 NULL, /* driver name */
1003
1004 NULL, /* address_data */
8523533c
TK
1005#ifdef EXPERIMENTAL_BRIGHTMAIL
1006 NULL, /* bmi_rule */
8e669ac1 1007#endif
059ec3d9
PH
1008 NULL, /* cannot_route_message */
1009 NULL, /* condition */
1010 NULL, /* current_directory */
1011 NULL, /* debug_string */
1012 NULL, /* domains */
1013 NULL, /* errors_to */
1014 NULL, /* expand_gid */
1015 NULL, /* expand_uid */
1016 NULL, /* expand_more */
1017 NULL, /* expand_unseen */
1018 NULL, /* extra_headers */
1019 NULL, /* fallback_hosts */
1020 NULL, /* home_directory */
1021 NULL, /* ignore_target_hosts */
1022 NULL, /* local_parts */
1023 NULL, /* pass_router_name */
1024 NULL, /* prefix */
1025 NULL, /* redirect_router_name */
1026 NULL, /* remove_headers */
1027 NULL, /* require_files */
1028 NULL, /* router_home_directory */
1029 US"freeze", /* self */
1030 NULL, /* senders */
1031 NULL, /* suffix */
1032 NULL, /* translate_ip_address */
1033 NULL, /* transport_name */
1034
1035 TRUE, /* address_test */
8523533c
TK
1036#ifdef EXPERIMENTAL_BRIGHTMAIL
1037 FALSE, /* bmi_deliver_alternate */
1038 FALSE, /* bmi_deliver_default */
1039 FALSE, /* bmi_dont_deliver */
1040#endif
059ec3d9
PH
1041 TRUE, /* expn */
1042 FALSE, /* caseful_local_part */
1043 FALSE, /* check_local_user */
1044 FALSE, /* disable_logging */
1045 FALSE, /* fail_verify_recipient */
1046 FALSE, /* fail_verify_sender */
1047 FALSE, /* gid_set */
1048 FALSE, /* initgroups */
1049 TRUE_UNSET, /* log_as_local */
1050 TRUE, /* more */
1051 FALSE, /* pass_on_timeout */
1052 FALSE, /* prefix_optional */
1053 TRUE, /* repeat_use */
1054 TRUE_UNSET, /* retry_use_local_part - fudge "unset" */
1055 FALSE, /* same_domain_copy_routing */
1056 FALSE, /* self_rewrite */
1057 FALSE, /* suffix_optional */
1058 FALSE, /* verify_only */
1059 TRUE, /* verify_recipient */
1060 TRUE, /* verify_sender */
1061 FALSE, /* uid_set */
1062 FALSE, /* unseen */
1063
1064 self_freeze, /* self_code */
1065 (uid_t)(-1), /* uid */
1066 (gid_t)(-1), /* gid */
1067
1068 NULL, /* fallback_hostlist */
1069 NULL, /* transport instance */
1070 NULL, /* pass_router */
1071 NULL /* redirect_router */
1072};
1073
1074ip_address_item *running_interfaces = NULL;
1075BOOL running_in_test_harness = FALSE;
1076
1077/* This is a weird one. The following string gets patched in the binary by the
1078script that sets up a copy of Exim for running in the test harness. It seems
1079that compilers are now clever, and share constant strings if they can.
1080Elsewhere in Exim the string "<" is used. The compiler optimization seems to
1081make use of the end of this string in order to save space. So the patching then
8669f003 1082wrecks this. We defeat this optimization by adding some additional characters
059ec3d9
PH
1083onto the end of the string. */
1084
1085uschar *running_status = US">>>running<<<" "\0EXTRA";
1086
1087int runrc = 0;
1088
1089uschar *search_error_message = NULL;
1090BOOL search_find_defer = FALSE;
1091uschar *self_hostname = NULL;
1092uschar *sender_address = NULL;
1093unsigned int sender_address_cache[(MAX_NAMED_LIST * 2)/32];
2a3eea10 1094uschar *sender_address_data = NULL;
059ec3d9
PH
1095BOOL sender_address_forced = FALSE;
1096uschar *sender_address_unrewritten = NULL;
1097uschar *sender_data = NULL;
1098unsigned int sender_domain_cache[(MAX_NAMED_LIST * 2)/32];
1099uschar *sender_fullhost = NULL;
1100uschar *sender_helo_name = NULL;
1101uschar **sender_host_aliases = &no_aliases;
1102uschar *sender_host_address = NULL;
1103uschar *sender_host_authenticated = NULL;
1104unsigned int sender_host_cache[(MAX_NAMED_LIST * 2)/32];
1f4a55da 1105BOOL sender_host_dnssec = FALSE;
059ec3d9
PH
1106uschar *sender_host_name = NULL;
1107int sender_host_port = 0;
1108BOOL sender_host_notsocket = FALSE;
1109BOOL sender_host_unknown = FALSE;
1110uschar *sender_ident = NULL;
1111BOOL sender_local = FALSE;
2fe1a124 1112BOOL sender_name_forced = FALSE;
870f6ba8
TF
1113uschar *sender_rate = NULL;
1114uschar *sender_rate_limit = NULL;
1115uschar *sender_rate_period = NULL;
059ec3d9
PH
1116uschar *sender_rcvhost = NULL;
1117BOOL sender_set_untrusted = FALSE;
1118uschar *sender_unqualified_hosts = NULL;
2c7db3f5 1119uschar *sender_verify_failure = NULL;
059ec3d9
PH
1120address_item *sender_verified_list = NULL;
1121address_item *sender_verified_failed = NULL;
1122int sender_verified_rc = -1;
1123BOOL sender_verified_responded = FALSE;
41c7c167
PH
1124uschar *sending_ip_address = NULL;
1125int sending_port = -1;
cd59ab18 1126SIGNAL_BOOL sigalrm_seen = FALSE;
059ec3d9
PH
1127uschar **sighup_argv = NULL;
1128int smtp_accept_count = 0;
1129BOOL smtp_accept_keepalive = TRUE;
1130int smtp_accept_max = 20;
1131int smtp_accept_max_nonmail= 10;
1132uschar *smtp_accept_max_nonmail_hosts = US"*";
1133int smtp_accept_max_per_connection = 1000;
1134uschar *smtp_accept_max_per_host = NULL;
1135int smtp_accept_queue = 0;
1136int smtp_accept_queue_per_connection = 10;
1137int smtp_accept_reserve = 0;
1138uschar *smtp_active_hostname = NULL;
1139BOOL smtp_authenticated = FALSE;
1f5b4c3d 1140uschar *smtp_banner = US"$smtp_active_hostname ESMTP "
059ec3d9
PH
1141 "Exim $version_number $tod_full"
1142 "\0<---------------Space to patch smtp_banner->";
1143BOOL smtp_batched_input = FALSE;
1144BOOL smtp_check_spool_space = TRUE;
b4ed4da0 1145int smtp_ch_index = 0;
3ee512ff
PH
1146uschar *smtp_cmd_argument = NULL;
1147uschar *smtp_cmd_buffer = NULL;
b4ed4da0
PH
1148time_t smtp_connection_start = 0;
1149uschar smtp_connection_had[SMTP_HBUFF_SIZE];
059ec3d9
PH
1150int smtp_connect_backlog = 20;
1151double smtp_delay_mail = 0.0;
1152double smtp_delay_rcpt = 0.0;
1153BOOL smtp_enforce_sync = TRUE;
1154FILE *smtp_in = NULL;
1155BOOL smtp_input = FALSE;
1156int smtp_load_reserve = -1;
1157int smtp_mailcmd_count = 0;
1158FILE *smtp_out = NULL;
1159uschar *smtp_etrn_command = NULL;
1160BOOL smtp_etrn_serialize = TRUE;
1161int smtp_max_synprot_errors= 3;
1162int smtp_max_unknown_commands = 3;
8f128379 1163uschar *smtp_notquit_reason = NULL;
059ec3d9
PH
1164uschar *smtp_ratelimit_hosts = NULL;
1165uschar *smtp_ratelimit_mail = NULL;
1166uschar *smtp_ratelimit_rcpt = NULL;
1167uschar *smtp_read_error = US"";
1168int smtp_receive_timeout = 5*60;
1169uschar *smtp_reserve_hosts = NULL;
1170BOOL smtp_return_error_details = FALSE;
1171int smtp_rlm_base = 0;
1172double smtp_rlm_factor = 0.0;
1173int smtp_rlm_limit = 0;
1174int smtp_rlm_threshold = INT_MAX;
1175int smtp_rlr_base = 0;
1176double smtp_rlr_factor = 0.0;
1177int smtp_rlr_limit = 0;
1178int smtp_rlr_threshold = INT_MAX;
1179BOOL smtp_use_pipelining = FALSE;
1180BOOL smtp_use_size = FALSE;
8523533c
TK
1181
1182#ifdef WITH_CONTENT_SCAN
1183uschar *spamd_address = US"127.0.0.1 783";
1184uschar *spam_bar = NULL;
1185uschar *spam_report = NULL;
1186uschar *spam_score = NULL;
1187uschar *spam_score_int = NULL;
1188#endif
1189#ifdef EXPERIMENTAL_SPF
65a7d8c3 1190uschar *spf_guess = US"v=spf1 a/24 mx/24 ptr ?all";
8523533c
TK
1191uschar *spf_header_comment = NULL;
1192uschar *spf_received = NULL;
1193uschar *spf_result = NULL;
1194uschar *spf_smtp_comment = NULL;
1195#endif
1196
059ec3d9
PH
1197BOOL split_spool_directory = FALSE;
1198uschar *spool_directory = US SPOOL_DIRECTORY
1199 "\0<--------------Space to patch spool_directory->";
8523533c
TK
1200#ifdef EXPERIMENTAL_SRS
1201uschar *srs_config = NULL;
1202uschar *srs_db_address = NULL;
1203uschar *srs_db_key = NULL;
384152a6
TK
1204int srs_hashlength = 6;
1205int srs_hashmin = -1;
1206int srs_maxage = 31;
8523533c
TK
1207uschar *srs_orig_recipient = NULL;
1208uschar *srs_orig_sender = NULL;
1209uschar *srs_recipient = NULL;
384152a6 1210uschar *srs_secrets = NULL;
8523533c 1211uschar *srs_status = NULL;
384152a6
TK
1212BOOL srs_usehash = TRUE;
1213BOOL srs_usetimestamp = TRUE;
8e669ac1 1214#endif
38a0a95f 1215BOOL strict_acl_vars = FALSE;
059ec3d9 1216int string_datestamp_offset= -1;
f1e5fef5
PP
1217int string_datestamp_length= 0;
1218int string_datestamp_type = -1;
059ec3d9
PH
1219BOOL strip_excess_angle_brackets = FALSE;
1220BOOL strip_trailing_dot = FALSE;
1221uschar *submission_domain = NULL;
1222BOOL submission_mode = FALSE;
2fe1a124 1223uschar *submission_name = NULL;
8800895a 1224BOOL suppress_local_fixups = FALSE;
f4ee74ac 1225BOOL suppress_local_fixups_default = FALSE;
059ec3d9
PH
1226BOOL synchronous_delivery = FALSE;
1227BOOL syslog_duplication = TRUE;
1228int syslog_facility = LOG_MAIL;
1229uschar *syslog_processname = US"exim";
1230BOOL syslog_timestamp = TRUE;
1231uschar *system_filter = NULL;
1232
1233uschar *system_filter_directory_transport = NULL;
1234uschar *system_filter_file_transport = NULL;
1235uschar *system_filter_pipe_transport = NULL;
1236uschar *system_filter_reply_transport = NULL;
1237
1238gid_t system_filter_gid = 0;
1239BOOL system_filter_gid_set = FALSE;
79d4bc3d 1240uid_t system_filter_uid = (uid_t)-1;
059ec3d9
PH
1241BOOL system_filter_uid_set = FALSE;
1242BOOL system_filtering = FALSE;
1243
1244BOOL tcp_nodelay = TRUE;
5dc43717
JJ
1245#ifdef USE_TCP_WRAPPERS
1246uschar *tcp_wrappers_daemon_name = US TCP_WRAPPERS_DAEMON_NAME;
1247#endif
8669f003 1248int test_harness_load_avg = 0;
059ec3d9
PH
1249int thismessage_size_limit = 0;
1250int timeout_frozen_after = 0;
1251BOOL timestamps_utc = FALSE;
1252
1253transport_instance *transports = NULL;
1254
1255transport_instance transport_defaults = {
1256 NULL, /* chain pointer */
1257 NULL, /* name */
1258 NULL, /* info */
1259 NULL, /* private options block pointer */
1260 NULL, /* driver name */
1261 NULL, /* setup entry point */
1262 1, /* batch_max */
1263 NULL, /* batch_id */
1264 NULL, /* home_dir */
1265 NULL, /* current_dir */
1266 TRUE, /* multi-domain */
1267 FALSE, /* overrides_hosts */
1268 100, /* max_addresses */
1269 500, /* connection_max_messages */
1270 FALSE, /* deliver_as_creator */
1271 FALSE, /* disable_logging */
1272 FALSE, /* initgroups */
1273 FALSE, /* uid_set */
1274 FALSE, /* gid_set */
1275 (uid_t)(-1), /* uid */
1276 (gid_t)(-1), /* gid */
1277 NULL, /* expand_uid */
1278 NULL, /* expand_gid */
1279 NULL, /* warn_message */
1280 NULL, /* shadow */
1281 NULL, /* shadow_condition */
1282 NULL, /* filter_command */
1283 NULL, /* add_headers */
1284 NULL, /* remove_headers */
1285 NULL, /* return_path */
1286 NULL, /* debug_string */
1287 NULL, /* message_size_limit */
1288 NULL, /* headers_rewrite */
1289 NULL, /* rewrite_rules */
1290 0, /* rewrite_existflags */
1291 300, /* filter_timeout */
1292 FALSE, /* body_only */
1293 FALSE, /* delivery_date_add */
1294 FALSE, /* envelope_to_add */
1295 FALSE, /* headers_only */
1296 FALSE, /* rcpt_include_affixes */
1297 FALSE, /* return_path_add */
1298 FALSE, /* return_output */
1299 FALSE, /* return_fail_output */
1300 FALSE, /* log_output */
1301 FALSE, /* log_fail_output */
1302 FALSE, /* log_defer_output */
1303 TRUE_UNSET /* retry_use_local_part: BOOL, but set neither
1304 1 nor 0 so can detect unset */
1305};
1306
1307int transport_count;
332f5cf3 1308int transport_newlines;
059ec3d9
PH
1309uschar **transport_filter_argv = NULL;
1310int transport_filter_timeout;
2e2a30b4 1311BOOL transport_filter_timed_out = FALSE;
059ec3d9
PH
1312int transport_write_timeout= 0;
1313
1314tree_node *tree_dns_fails = NULL;
1315tree_node *tree_duplicates = NULL;
1316tree_node *tree_nonrecipients = NULL;
1317tree_node *tree_unusable = NULL;
1318
1319BOOL trusted_caller = FALSE;
e2f5dc15 1320BOOL trusted_config = TRUE;
059ec3d9
PH
1321gid_t *trusted_groups = NULL;
1322uid_t *trusted_users = NULL;
1323uschar *timezone_string = US TIMEZONE_DEFAULT;
1324
1325uschar *unknown_login = NULL;
1326uschar *unknown_username = NULL;
1327uschar *untrusted_set_sender = NULL;
1328
1329/* A regex for matching a "From_" line in an incoming message, in the form
1330
1331 From ph10 Fri Jan 5 12:35 GMT 1996
1332
1333which the "mail" commands send to the MTA (undocumented, of course), or in
1334the form
1335
1336 From ph10 Fri, 7 Jan 97 14:00:00 GMT
1337
1338which is apparently used by some UUCPs, despite it not being in RFC 976.
1339Because of variations in time formats, just match up to the minutes. That
1340should be sufficient. Examples have been seen of time fields like 12:1:03,
1341so just require one digit for hours and minutes. The weekday is also absent
1342in some forms. */
1343
1344uschar *uucp_from_pattern = US
1345 "^From\\s+(\\S+)\\s+(?:[a-zA-Z]{3},?\\s+)?" /* Common start */
1346 "(?:" /* Non-extracting bracket */
1347 "[a-zA-Z]{3}\\s+\\d?\\d|" /* First form */
1348 "\\d?\\d\\s+[a-zA-Z]{3}\\s+\\d\\d(?:\\d\\d)?" /* Second form */
1349 ")" /* End alternation */
1350 "\\s+\\d\\d?:\\d\\d?"; /* Start of time */
1351
1352uschar *uucp_from_sender = US"$1";
1353
1354uschar *warn_message_file = NULL;
1355uschar *warnmsg_delay = NULL;
1356uschar *warnmsg_recipients = NULL;
1357BOOL write_rejectlog = TRUE;
1358
f45100a3
PP
1359uschar *version_copyright =
1360 US"Copyright (c) University of Cambridge, 1995 - 2012\n"
ab6dcfbe 1361 "(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2012";
059ec3d9
PH
1362uschar *version_date = US"?";
1363uschar *version_cnumber = US"????";
1364uschar *version_string = US"?";
1365
1366int warning_count = 0;
1367
1368/* End of globals.c */