1 /*************************************************
2 * Exim - an Internet mail transport agent *
3 *************************************************/
5 /* Copyright (c) The Exim Maintainers 2020 - 2024 */
6 /* Copyright (c) University of Cambridge 1995 - 2018 */
7 /* See the file NOTICE for conditions of use and distribution. */
8 /* SPDX-License-Identifier: GPL-2.0-or-later */
10 /* All the global variables are defined together in this one module, so
11 that they are easy to find. */
16 /* Generic options for auths, all of which live inside auth_instance
17 data blocks and hence have the opt_public flag set. */
19 optionlist optionlist_auths[] = {
20 { "client_condition", opt_stringptr | opt_public,
21 OPT_OFF(auth_instance, client_condition) },
22 { "client_set_id", opt_stringptr | opt_public,
23 OPT_OFF(auth_instance, set_client_id) },
24 { "driver", opt_stringptr | opt_public,
25 OPT_OFF(auth_instance, drinst.driver_name) },
26 { "public_name", opt_stringptr | opt_public,
27 OPT_OFF(auth_instance, public_name) },
28 { "server_advertise_condition", opt_stringptr | opt_public,
29 OPT_OFF(auth_instance, advertise_condition)},
30 { "server_condition", opt_stringptr | opt_public,
31 OPT_OFF(auth_instance, server_condition) },
32 { "server_debug_print", opt_stringptr | opt_public,
33 OPT_OFF(auth_instance, server_debug_string) },
34 { "server_mail_auth_condition", opt_stringptr | opt_public,
35 OPT_OFF(auth_instance, mail_auth_condition) },
36 { "server_set_id", opt_stringptr | opt_public,
37 OPT_OFF(auth_instance, set_id) }
40 int optionlist_auths_size = nelem(optionlist_auths);
42 /* An empty host aliases list. */
44 uschar *no_aliases = NULL;
47 /* For comments on these variables, see globals.h. I'm too idle to
48 duplicate them here... */
51 uschar *opt_perl_startup = NULL;
52 BOOL opt_perl_at_start = FALSE;
53 BOOL opt_perl_started = FALSE;
54 BOOL opt_perl_taintmode = FALSE;
58 tree_node *dlobj_anchor = NULL;
62 uschar *ibase_servers = NULL;
66 uschar *eldap_ca_cert_dir = NULL;
67 uschar *eldap_ca_cert_file = NULL;
68 uschar *eldap_cert_file = NULL;
69 uschar *eldap_cert_key = NULL;
70 uschar *eldap_cipher_suite = NULL;
71 uschar *eldap_default_servers = NULL;
72 uschar *eldap_require_cert = NULL;
73 int eldap_version = -1;
74 BOOL eldap_start_tls = FALSE;
78 uschar *mysql_servers = NULL;
82 uschar *oracle_servers = NULL;
86 uschar *pgsql_servers = NULL;
90 uschar *redis_servers = NULL;
94 uschar *sqlite_dbfile = NULL;
95 int sqlite_lock_timeout = 5;
98 #ifdef SUPPORT_MOVE_FROZEN_MESSAGES
99 BOOL move_frozen_messages = FALSE;
102 /* These variables are outside the #ifdef because it keeps the code less
103 cluttered in several places (e.g. during logging) if we can always refer to
104 them. Also, the tls_ variables are now always visible. Note that these are
105 only used for smtp connections, not for service-daemon access. */
107 tls_support tls_in = {
108 .active = {.sock = -1}
109 /* all other elements zero */
111 tls_support tls_out = {
112 .active = {.sock = -1},
113 /* all other elements zero */
116 uschar *dsn_envid = NULL;
118 const pcre2_code *regex_DSN = NULL;
119 uschar *dsn_advertise_hosts = NULL;
122 BOOL gnutls_compat_mode = FALSE;
123 BOOL gnutls_allow_auto_pkcs11 = FALSE;
124 uschar *hosts_require_alpn = NULL;
125 uschar *openssl_options = NULL;
126 const pcre2_code *regex_STARTTLS = NULL;
127 uschar *tls_advertise_hosts = US"*";
128 uschar *tls_alpn = US"smtp:esmtp";
129 uschar *tls_certificate = NULL;
130 uschar *tls_crl = NULL;
131 /* This default matches NSS DH_MAX_P_BITS value at current time (2012), because
132 that's the interop problem which has been observed: GnuTLS suggesting a higher
133 bit-count as "NORMAL" (2432) and Thunderbird dropping connection. */
134 int tls_dh_max_bits = 2236;
135 uschar *tls_dhparam = NULL;
136 uschar *tls_eccurve = US"auto";
137 # ifndef DISABLE_OCSP
138 uschar *tls_ocsp_file = NULL;
140 uschar *tls_privatekey = NULL;
141 BOOL tls_remember_esmtp = FALSE;
142 uschar *tls_require_ciphers = NULL;
143 # ifndef DISABLE_TLS_RESUME
144 uschar *tls_resumption_hosts = NULL;
146 uschar *tls_try_verify_hosts = NULL;
147 uschar *tls_verify_certificates= US"system";
148 uschar *tls_verify_hosts = NULL;
149 int tls_watch_fd = -1;
150 time_t tls_watch_trigger_time = (time_t)0;
151 #else /*DISABLE_TLS*/
152 uschar *tls_advertise_hosts = NULL;
156 /* Per Recipient Data Response variables */
157 BOOL prdr_enable = FALSE;
158 BOOL prdr_requested = FALSE;
159 const pcre2_code *regex_PRDR = NULL;
163 const pcre2_code *regex_UTF8 = NULL;
166 /* Input-reading functions for messages, so we can use special ones for
167 incoming TCP/IP. The defaults use stdin. We never need these for any
168 stand-alone tests. */
170 #if !defined(STAND_ALONE) && !defined(MACRO_PREDEF)
171 int (*lwr_receive_getc)(unsigned) = stdin_getc;
172 uschar * (*lwr_receive_getbuf)(unsigned *) = NULL;
173 int (*lwr_receive_ungetc)(int) = stdin_ungetc;
174 BOOL (*lwr_receive_hasc)(void) = stdin_hasc;
176 int (*receive_getc)(unsigned) = stdin_getc;
177 uschar * (*receive_getbuf)(unsigned *) = NULL;
178 void (*receive_get_cache)(unsigned) = NULL;
179 BOOL (*receive_hasc)(void) = stdin_hasc;
180 int (*receive_ungetc)(int) = stdin_ungetc;
181 int (*receive_feof)(void) = stdin_feof;
182 int (*receive_ferror)(void) = stdin_ferror;
186 /* List of per-address expansion variables for clearing and saving/restoring
187 when verifying one address while routing/verifying another. We have to have
188 the size explicit, because it is referenced from more than one module. */
190 const uschar **address_expansions[ADDRESS_EXPANSIONS_COUNT] = {
191 CUSS &deliver_address_data,
192 CUSS &deliver_domain,
193 CUSS &deliver_domain_data,
194 CUSS &deliver_domain_orig,
195 CUSS &deliver_domain_parent,
196 CUSS &deliver_localpart,
197 CUSS &deliver_localpart_data,
198 CUSS &deliver_localpart_orig,
199 CUSS &deliver_localpart_parent,
200 CUSS &deliver_localpart_prefix,
201 CUSS &deliver_localpart_suffix,
202 CUSS (uschar **)(&deliver_recipients),
210 int address_expansions_count = sizeof(address_expansions)/sizeof(uschar **);
212 /******************************************************************************/
213 /* General global variables. Boolean flags are done as a group
214 so that only one bit each is needed, packed, for all those we never
215 need to take a pointer - and only a char for the rest.
216 This means a struct, unfortunately since it clutters the sourcecode. */
218 struct global_flags f =
220 .acl_temp_details = FALSE,
221 .active_local_from_check = FALSE,
222 .active_local_sender_retain = FALSE,
223 .address_test_mode = FALSE,
225 .allow_auth_unadvertised= FALSE,
226 .allow_unqualified_recipient = TRUE, /* For local messages */
227 .allow_unqualified_sender = TRUE, /* Reset for SMTP */
228 .authentication_local = FALSE,
230 .background_daemon = TRUE,
231 .bdat_readers_wanted = FALSE,
233 .chunking_offered = FALSE,
234 .config_changed = FALSE,
235 .continue_more = FALSE,
237 .daemon_listen = FALSE,
238 .daemon_scion = FALSE,
239 .debug_daemon = FALSE,
240 .deliver_firsttime = FALSE,
241 .deliver_force = FALSE,
242 .deliver_freeze = FALSE,
243 .deliver_force_thaw = FALSE,
244 .deliver_manual_thaw = FALSE,
245 .deliver_selectstring_regex = FALSE,
246 .deliver_selectstring_sender_regex = FALSE,
247 .disable_callout_flush = FALSE,
248 .disable_delay_flush = FALSE,
249 .disable_logging = FALSE,
251 .dkim_disable_verify = FALSE,
252 .dkim_init_done = FALSE,
255 .dmarc_has_been_checked = FALSE,
256 .dmarc_disable_verify = FALSE,
257 .dmarc_enable_forensic = FALSE,
259 .dont_deliver = FALSE,
262 .enable_dollar_recipients = FALSE,
263 .expand_string_forcedfail = FALSE,
265 .filter_running = FALSE,
267 .header_rewritten = FALSE,
268 .helo_verified = FALSE,
269 .helo_verify_failed = FALSE,
270 .host_checking_callout = FALSE,
271 .host_find_failed_syntax= FALSE,
273 .inetd_wait_mode = FALSE,
276 .local_error_message = FALSE,
277 .log_testing_mode = FALSE,
279 #ifdef WITH_CONTENT_SCAN
280 .no_mbox_unspool = FALSE,
282 .no_multiline_responses = FALSE,
283 .notifier_socket_en = TRUE,
285 .parse_allow_group = FALSE,
286 .parse_found_group = FALSE,
287 .pipelining_enable = TRUE,
288 #if defined(SUPPORT_PROXY) || defined(SUPPORT_SOCKS)
289 .proxy_session_failed = FALSE,
292 .queue_2stage = FALSE,
293 .queue_only_policy = FALSE,
294 .queue_run_local = FALSE,
295 .queue_running = FALSE,
299 .receive_call_bombout = FALSE,
300 .recipients_discarded = FALSE,
301 .running_in_test_harness = FALSE,
303 .search_find_defer = FALSE,
304 .sender_address_forced = FALSE,
305 .sender_host_notsocket = FALSE,
306 .sender_host_unknown = FALSE,
307 .sender_local = FALSE,
308 .sender_name_forced = FALSE,
309 .sender_set_untrusted = FALSE,
310 .smtp_authenticated = FALSE,
311 #ifndef DISABLE_PIPE_CONNECT
312 .smtp_in_early_pipe_advertised = FALSE,
313 .smtp_in_early_pipe_no_auth = FALSE,
314 .smtp_in_early_pipe_used = FALSE,
316 .smtp_in_pipelining_advertised = FALSE,
317 .smtp_in_pipelining_used = FALSE,
318 .smtp_in_quit = FALSE,
319 .spool_file_wireformat = FALSE,
320 .submission_mode = FALSE,
321 .suppress_local_fixups = FALSE,
322 .suppress_local_fixups_default = FALSE,
323 .synchronous_delivery = FALSE,
324 .system_filtering = FALSE,
326 .taint_check_slow = FALSE,
327 .testsuite_delays = TRUE,
328 .tcp_fastopen_ok = FALSE,
329 .tcp_in_fastopen = FALSE,
330 .tcp_in_fastopen_data = FALSE,
331 .tcp_in_fastopen_logged = FALSE,
332 .tcp_out_fastopen_logged= FALSE,
333 .timestamps_utc = FALSE,
334 .transport_filter_timed_out = FALSE,
335 .trusted_caller = FALSE,
336 .trusted_config = TRUE,
339 /******************************************************************************/
340 /* These are the flags which are either variables or mainsection options,
341 so an address is needed for access, or are exported to local_scan. */
343 BOOL accept_8bitmime = TRUE; /* deliberately not RFC compliant */
344 BOOL allow_domain_literals = FALSE;
345 BOOL allow_mx_to_ip = FALSE;
346 BOOL allow_utf8_domains = FALSE;
347 BOOL authentication_failed = FALSE;
349 BOOL bounce_return_body = TRUE;
350 BOOL bounce_return_message = TRUE;
351 BOOL check_rfc2047_length = TRUE;
352 BOOL commandline_checks_require_admin = FALSE;
354 #ifdef EXPERIMENTAL_DCC
355 BOOL dcc_direct_add_header = FALSE;
357 BOOL debug_store = FALSE;
358 BOOL delivery_date_remove = TRUE;
359 BOOL deliver_drop_privilege = FALSE;
360 #ifdef ENABLE_DISABLE_FSYNC
361 BOOL disable_fsync = FALSE;
363 BOOL disable_ipv6 = FALSE;
364 BOOL dns_csa_use_reverse = TRUE;
365 BOOL drop_cr = FALSE; /* No longer used */
367 BOOL envelope_to_remove = TRUE;
368 BOOL exim_gid_set = TRUE; /* This gid is always set */
369 BOOL exim_uid_set = TRUE; /* This uid is always set */
370 BOOL extract_addresses_remove_arguments = TRUE;
372 BOOL host_checking = FALSE;
373 BOOL host_lookup_deferred = FALSE;
374 BOOL host_lookup_failed = FALSE;
375 BOOL ignore_fromline_local = FALSE;
377 BOOL local_from_check = TRUE;
378 BOOL local_sender_retain = FALSE;
379 BOOL log_timezone = FALSE;
380 BOOL message_body_newlines = FALSE;
381 BOOL message_logs = TRUE;
383 BOOL message_smtputf8 = FALSE;
385 BOOL mua_wrapper = FALSE;
387 BOOL preserve_message_logs = FALSE;
388 BOOL print_topbitchars = FALSE;
389 BOOL prod_requires_admin = TRUE;
390 #if defined(SUPPORT_PROXY) || defined(SUPPORT_SOCKS) || defined(EXPERIMENTAL_XCLIENT)
391 BOOL proxy_session = FALSE;
394 #ifndef DISABLE_QUEUE_RAMP
395 BOOL queue_fast_ramp = TRUE;
397 BOOL queue_list_requires_admin = TRUE;
398 BOOL queue_only = FALSE;
399 BOOL queue_only_load_latch = TRUE;
400 BOOL queue_only_override = TRUE;
401 BOOL queue_run_in_order = FALSE;
402 BOOL recipients_max_reject = FALSE;
403 BOOL return_path_remove = TRUE;
405 BOOL smtp_batched_input = FALSE;
406 BOOL sender_helo_dnssec = FALSE;
407 BOOL sender_host_dnssec = FALSE;
408 BOOL smtp_accept_keepalive = TRUE;
409 BOOL smtp_check_spool_space = TRUE;
410 BOOL smtp_enforce_sync = TRUE;
411 BOOL smtp_etrn_serialize = TRUE;
412 BOOL smtp_input = FALSE;
413 BOOL smtp_return_error_details = FALSE;
414 BOOL split_spool_directory = FALSE;
415 BOOL spool_wireformat = FALSE;
416 BOOL strict_acl_vars = FALSE;
417 BOOL strip_excess_angle_brackets = FALSE;
418 BOOL strip_trailing_dot = FALSE;
419 BOOL syslog_duplication = TRUE;
420 BOOL syslog_pid = TRUE;
421 BOOL syslog_timestamp = TRUE;
422 BOOL system_filter_gid_set = FALSE;
423 BOOL system_filter_uid_set = FALSE;
425 BOOL tcp_nodelay = TRUE;
426 BOOL write_rejectlog = TRUE;
428 /******************************************************************************/
430 header_line *acl_added_headers = NULL;
431 tree_node *acl_anchor = NULL;
432 uschar *acl_arg[9] = {NULL, NULL, NULL, NULL, NULL,
433 NULL, NULL, NULL, NULL};
438 uschar *acl_not_smtp = NULL;
439 #ifdef WITH_CONTENT_SCAN
440 uschar *acl_not_smtp_mime = NULL;
442 uschar *acl_not_smtp_start = NULL;
443 uschar *acl_removed_headers = NULL;
444 uschar *acl_smtp_auth = NULL;
445 uschar *acl_smtp_connect = NULL;
446 uschar *acl_smtp_data = NULL;
448 uschar *acl_smtp_data_prdr = US"accept";
451 uschar *acl_smtp_dkim = NULL;
453 uschar *acl_smtp_etrn = NULL;
454 uschar *acl_smtp_expn = NULL;
455 uschar *acl_smtp_helo = NULL;
456 uschar *acl_smtp_mail = NULL;
457 uschar *acl_smtp_mailauth = NULL;
458 #ifdef WITH_CONTENT_SCAN
459 uschar *acl_smtp_mime = NULL;
461 uschar *acl_smtp_notquit = NULL;
462 uschar *acl_smtp_predata = NULL;
463 uschar *acl_smtp_quit = NULL;
464 uschar *acl_smtp_rcpt = NULL;
465 uschar *acl_smtp_starttls = NULL;
466 uschar *acl_smtp_vrfy = NULL;
467 #ifndef DISABLE_WELLKNOWN
468 uschar *acl_smtp_wellknown = NULL;
471 tree_node *acl_var_c = NULL;
472 tree_node *acl_var_m = NULL;
473 uschar *acl_verify_message = NULL;
474 string_item *acl_warn_logged = NULL;
476 /* Names of SMTP places for use in ACL error messages, and corresponding SMTP
477 error codes (only those used) */
479 uschar *acl_wherenames[] = { [ACL_WHERE_RCPT] = US"RCPT",
480 [ACL_WHERE_MAIL] = US"MAIL",
481 [ACL_WHERE_PREDATA] = US"PREDATA",
482 [ACL_WHERE_MIME] = US"MIME",
483 [ACL_WHERE_DKIM] = US"DKIM",
484 [ACL_WHERE_DATA] = US"DATA",
486 [ACL_WHERE_PRDR] = US"PRDR",
488 [ACL_WHERE_NOTSMTP] = US"non-SMTP",
489 [ACL_WHERE_AUTH] = US"AUTH",
490 [ACL_WHERE_CONNECT] = US"connection",
491 [ACL_WHERE_ETRN] = US"ETRN",
492 [ACL_WHERE_EXPN] = US"EXPN",
493 [ACL_WHERE_HELO] = US"EHLO or HELO",
494 [ACL_WHERE_MAILAUTH] = US"MAILAUTH",
495 [ACL_WHERE_NOTSMTP_START] = US"non-SMTP-start",
496 [ACL_WHERE_NOTQUIT] = US"NOTQUIT",
497 [ACL_WHERE_QUIT] = US"QUIT",
498 [ACL_WHERE_STARTTLS] = US"STARTTLS",
499 [ACL_WHERE_VRFY] = US"VRFY",
500 #ifndef DISABLE_WELLKNOWN
501 [ACL_WHERE_WELLKNOWN] = US"WELLKNOWN",
503 [ACL_WHERE_DELIVERY] = US"delivery",
504 [ACL_WHERE_UNKNOWN] = US"unknown"
507 uschar *acl_wherecodes[] = { [ACL_WHERE_RCPT] = US"550",
508 [ACL_WHERE_MAIL] = US"550",
509 [ACL_WHERE_PREDATA] = US"550",
510 [ACL_WHERE_MIME] = US"550",
511 [ACL_WHERE_DKIM] = US"550",
512 [ACL_WHERE_DATA] = US"550",
514 [ACL_WHERE_PRDR] = US"550",
516 [ACL_WHERE_AUTH] = US"503",
517 [ACL_WHERE_CONNECT] = US"550",
518 [ACL_WHERE_ETRN] = US"458",
519 [ACL_WHERE_EXPN] = US"550",
520 [ACL_WHERE_HELO] = US"550",
521 [ACL_WHERE_STARTTLS] = US"550",
522 #ifndef DISABLE_WELLKNOWN
523 [ACL_WHERE_WELLKNOWN] =US"550",
525 [ACL_WHERE_VRFY] = US"252",
528 uschar *add_environment = NULL;
529 address_item *addr_duplicate = NULL;
531 address_item address_defaults = {
536 .start_router = NULL,
541 .fallback_hosts = NULL,
546 .cc_local_part = NULL,
547 .lc_local_part = NULL,
554 .address_retry_key = NULL,
555 .domain_retry_key = NULL,
559 .user_message = NULL,
560 .onetime_parent = NULL,
561 .pipe_expandn = NULL,
562 .return_filename = NULL,
563 .self_hostname = NULL,
564 .shadow_message = NULL,
570 .ocsp = OCSP_NOT_REQ,
572 #ifdef EXPERIMENTAL_DSN_INFO
573 .smtp_greeting = NULL,
574 .helo_response = NULL,
576 .authenticator = NULL,
585 .domain_cache = { 0 }, /* domain_cache - any larger array should be zeroed */
586 .localpart_cache = { 0 }, /* localpart_cache - ditto */
589 .delivery_time = {.tv_sec = 0, .tv_usec = 0},
590 .basic_errno = ERRNO_UNKNOWNERROR,
593 .special_action = SPECIAL_NONE,
594 .transport_return = DEFER,
595 .prop = { /* fields that are propagated to children */
596 .address_data = NULL,
598 .localpart_data = NULL,
599 .errors_address = NULL,
600 .extra_headers = NULL,
601 .remove_headers = NULL,
603 .ignore_error = FALSE,
606 .utf8_downcvt = FALSE,
607 .utf8_downcvt_maybe = FALSE
612 const uschar *address_file = NULL;
613 const uschar *address_pipe = NULL;
614 tree_node *addresslist_anchor = NULL;
615 int addresslist_count = 0;
616 gid_t *admin_groups = NULL;
618 uschar *authenticated_fail_id = NULL;
619 uschar *authenticated_id = NULL;
620 uschar *authenticated_sender = NULL;
621 auth_instance *auths = NULL;
622 uschar *auth_advertise_hosts = US"*";
623 auth_instance auth_defaults = {
628 .options_block = NULL,
631 .advertise_condition = NULL,
632 .client_condition = NULL,
635 .set_client_id = NULL,
636 .mail_auth_condition = NULL,
637 .server_debug_string = NULL,
638 .server_condition = NULL,
644 uschar *auth_defer_msg = US"reason not recorded";
645 uschar *auth_defer_user_msg = US"";
646 const uschar *auth_vars[AUTH_VARS];
647 uschar *authenticator_name = NULL;
649 #ifdef WITH_CONTENT_SCAN
650 int av_failed = FALSE; /* boolean but accessed as vtype_int*/
651 uschar *av_scanner = US"sophie:/var/run/sophie"; /* AV scanner */
655 uschar *base62_chars=
656 US"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
658 uschar *base62_chars= US"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
661 uschar *bi_command = NULL;
662 uschar *big_buffer = NULL;
663 int big_buffer_size = BIG_BUFFER_SIZE;
664 #ifdef EXPERIMENTAL_BRIGHTMAIL
665 uschar *bmi_alt_location = NULL;
666 uschar *bmi_base64_tracker_verdict = NULL;
667 uschar *bmi_base64_verdict = NULL;
668 uschar *bmi_config_file = US"/opt/brightmail/etc/brightmail.cfg";
671 uschar *bmi_verdicts = NULL;
673 int bsmtp_transaction_linecount = 0;
674 int body_8bitmime = 0;
675 int body_linecount = 0;
676 int body_zerocount = 0;
677 uschar *bounce_message_file = NULL;
678 uschar *bounce_message_text = NULL;
679 const uschar *bounce_recipient = NULL;
680 int bounce_return_linesize_limit = 998;
681 int bounce_return_size_limit = 100*1024;
682 uschar *bounce_sender_authentication = NULL;
684 uschar *callout_address = NULL;
685 int callout_cache_domain_positive_expire = 7*24*60*60;
686 int callout_cache_domain_negative_expire = 3*60*60;
687 int callout_cache_positive_expire = 24*60*60;
688 int callout_cache_negative_expire = 2*60*60;
689 uschar *callout_random_local_part = US"$primary_hostname-$tod_epoch-testing";
690 uschar *check_dns_names_pattern= US"(?i)^(?>(?(1)\\.|())[^\\W](?>[a-z0-9/_-]*[^\\W])?)+(\\.?)$";
691 int check_log_inodes = 100;
692 int_eximarith_t check_log_space = 10*1024; /* 10K Kbyte == 10MB */
693 int check_spool_inodes = 100;
694 int_eximarith_t check_spool_space = 10*1024; /* 10K Kbyte == 10MB */
696 uschar *chunking_advertise_hosts = US"*";
697 unsigned chunking_datasize = 0;
698 unsigned chunking_data_left = 0;
699 chunking_state_t chunking_state= CHUNKING_NOT_OFFERED;
700 const pcre2_code *regex_CHUNKING = NULL;
702 #ifndef DISABLE_ESMTP_LIMITS
703 const pcre2_code *regex_LIMITS = NULL;
706 uschar *client_authenticator = NULL;
707 uschar *client_authenticated_id = NULL;
708 uschar *client_authenticated_sender = NULL;
709 #ifndef DISABLE_CLIENT_CMD_LOG
710 gstring *client_cmd_log = NULL;
712 int clmacro_count = 0;
713 uschar *clmacros[MAX_CLMACROS];
714 FILE *config_file = NULL;
715 const uschar *config_filename = NULL;
716 int config_lineno = 0;
717 #ifdef CONFIGURE_GROUP
718 gid_t config_gid = CONFIGURE_GROUP;
720 gid_t config_gid = 0;
722 const uschar * config_main_filelist = US CONFIGURE_FILE
723 "\0<-----------Space to patch configure_filename->";
724 uschar *config_main_filename = NULL;
725 uschar *config_main_directory = NULL;
727 #ifdef CONFIGURE_OWNER
728 uid_t config_uid = CONFIGURE_OWNER;
730 uid_t config_uid = 0;
733 const uschar *connection_id = NULL;
734 int connection_max_messages= -1;
735 unsigned continue_flags = 0;
736 #ifndef DISABLE_ESMTP_LIMITS
737 unsigned continue_limit_mail = 0;
738 unsigned continue_limit_rcpt = 0;
739 unsigned continue_limit_rcptdom= 0;
740 int continue_fd = -1;
741 uschar *continue_proxy_cipher = NULL;
742 BOOL continue_proxy_dane = FALSE;
743 uschar *continue_proxy_sni = NULL;
744 const uschar *continue_hostname = NULL;
745 const uschar *continue_host_address = NULL;
746 uschar continue_next_id[MESSAGE_ID_LENGTH +1] = {[0]='\0'};
747 int continue_sequence = 1;
748 const uschar *continue_transport = NULL;
749 #ifndef COMPILE_UTILITY
750 open_db *continue_retry_db = NULL;
751 open_db *continue_wait_db = NULL;
755 uschar *csa_status = NULL;
757 .callout_hold_only = FALSE, /* verify-only: normal delivery */
758 .delivery = FALSE, /* when to attempt */
759 .defer_pass = FALSE, /* on defer: spool locally */
760 .is_tls = FALSE, /* not a TLS conn yet */
761 .cctx = {.sock = -1}, /* open connection */
762 .nrcpt = 0, /* number of addresses */
765 int daemon_notifier_fd = -1;
766 uschar *daemon_smtp_port = US"smtp";
767 int daemon_startup_retries = 9;
768 int daemon_startup_sleep = 30;
770 #ifdef EXPERIMENTAL_DCC
771 uschar *dcc_header = NULL;
772 uschar *dcc_result = NULL;
773 uschar *dccifd_address = US"/usr/local/dcc/var/dccifd";
774 uschar *dccifd_options = US"header";
778 FILE *debug_file = NULL;
779 int debug_notall[] = {
784 bit_table debug_options[] = { /* must be in alphabetical order and use
785 only the enum values from macro.h */
789 BIT_TABLE(D, deliver),
793 BIT_TABLE(D, expand),
794 BIT_TABLE(D, filter),
795 BIT_TABLE(D, hints_lookup),
796 BIT_TABLE(D, host_lookup),
798 BIT_TABLE(D, interface),
801 BIT_TABLE(D, local_scan),
802 BIT_TABLE(D, lookup),
803 BIT_TABLE(D, memory),
804 BIT_TABLE(D, noutf8),
806 BIT_TABLE(D, process_info),
807 BIT_TABLE(D, queue_run),
808 BIT_TABLE(D, receive),
809 BIT_TABLE(D, resolver),
811 BIT_TABLE(D, rewrite),
813 BIT_TABLE(D, timestamp),
815 BIT_TABLE(D, transport),
817 BIT_TABLE(D, verify),
819 int debug_options_count = nelem(debug_options);
820 uschar debuglog_name[LOG_NAME_SIZE] = {0};
821 unsigned debug_pretrigger_bsize = 0;
822 uschar * debug_pretrigger_buf = NULL;
823 unsigned int debug_selector = 0;
825 int delay_warning[DELAY_WARNING_SIZE] = { DELAY_WARNING_SIZE, 1, 24*60*60 };
826 uschar *delay_warning_condition=
828 "{ !eq{$h_list-id:$h_list-post:$h_list-subscribe:}{} }"
829 "{ match{$h_precedence:}{(?i)bulk|list|junk} }"
830 "{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }"
832 uschar *deliver_address_data = NULL;
833 int deliver_datafile = -1;
834 const uschar *deliver_domain = NULL;
835 uschar *deliver_domain_data = NULL;
836 const uschar *deliver_domain_orig = NULL;
837 const uschar *deliver_domain_parent = NULL;
838 time_t deliver_frozen_at = 0;
839 uschar *deliver_home = NULL;
840 const uschar *deliver_host = NULL;
841 const uschar *deliver_host_address = NULL;
842 int deliver_host_port = 0;
843 uschar *deliver_in_buffer = NULL;
844 ino_t deliver_inode = 0;
845 const uschar *deliver_localpart= NULL;
846 uschar *deliver_localpart_data = NULL;
847 const uschar *deliver_localpart_orig = NULL;
848 const uschar *deliver_localpart_parent = NULL;
849 const uschar *deliver_localpart_prefix = NULL;
850 const uschar *deliver_localpart_prefix_v = NULL;
851 const uschar *deliver_localpart_suffix = NULL;
852 const uschar *deliver_localpart_suffix_v = NULL;
853 uschar *deliver_out_buffer = NULL;
854 int deliver_queue_load_max = -1;
855 address_item *deliver_recipients = NULL;
856 uschar *deliver_selectstring = NULL;
857 uschar *deliver_selectstring_sender = NULL;
859 uschar *dns_again_means_nonexist = NULL;
860 int dns_csa_search_limit = 5;
861 int dns_cname_loops = 1;
863 int dns_dane_ok = -1;
865 uschar *dns_ipv4_lookup = NULL;
868 int dns_dnssec_ok = -1; /* <0 = not coerced */
869 uschar *dns_trust_aa = NULL;
870 int dns_use_edns0 = -1; /* <0 = not coerced */
871 uschar *dnslist_domain = NULL;
872 uschar *dnslist_matched = NULL;
873 uschar *dnslist_text = NULL;
874 uschar *dnslist_value = NULL;
875 tree_node *domainlist_anchor = NULL;
876 int domainlist_count = 0;
877 const uschar *driver_srcfile = NULL;
878 int driver_srcline = 0;
879 uschar *dsn_from = US DEFAULT_DSN_FROM;
880 unsigned int dtrigger_selector = 0;
882 int errno_quota = ERRNO_QUOTA;
883 uschar *errors_copy = NULL;
884 int error_handling = ERRORS_SENDER;
885 uschar *errors_reply_to = NULL;
886 int errors_sender_rc = EXIT_FAILURE;
887 #ifndef DISABLE_EVENT
888 uschar *event_action = NULL; /* expansion for delivery events */
889 const uschar *event_data = NULL; /* auxiliary data variable for event */
890 int event_defer_errno = 0;
891 const uschar *event_name = NULL; /* event name variable */
895 gid_t exim_gid = EXIM_GID;
896 uschar *exim_path = US BIN_DIRECTORY "/exim"
897 "\0<---------------Space to patch exim_path->";
898 uid_t exim_uid = EXIM_UID;
899 int expand_level = 0; /* Nesting depth, indent for debug */
900 int expand_forbid = 0;
901 int expand_nlength[EXPAND_MAXN+1];
902 int expand_nmax = -1;
903 const uschar *expand_nstring[EXPAND_MAXN+1];
904 uschar *expand_string_message;
905 uschar *extra_local_interfaces = NULL;
907 int fake_response = OK;
908 uschar *fake_response_text = US"Your message has been rejected but is "
909 "being kept for evaluation.\nIf it was a "
910 "legitimate message, it may still be "
911 "delivered to the target recipient(s).";
912 int filter_n[FILTER_VARIABLE_COUNT];
913 int filter_sn[FILTER_VARIABLE_COUNT];
914 int filter_test = FTEST_NONE;
915 const uschar * filter_test_sfile = NULL;
916 const uschar * filter_test_ufile = NULL;
917 uschar *filter_thisaddress = NULL;
918 int finduser_retries = 0;
919 uid_t fixed_never_users[] = { FIXED_NEVER_USERS };
920 uschar *freeze_tell = NULL;
921 uschar *freeze_tell_config = NULL;
922 uschar *fudged_queue_times = US"";
924 uschar *gecos_name = NULL;
925 uschar *gecos_pattern = NULL;
926 rewrite_rule *global_rewrite_rules = NULL;
928 volatile sig_atomic_t had_command_timeout = 0;
929 volatile sig_atomic_t had_command_sigterm = 0;
930 volatile sig_atomic_t had_data_timeout = 0;
931 volatile sig_atomic_t had_data_sigint = 0;
932 const uschar *headers_charset = US HEADERS_CHARSET;
933 int header_insert_maxlen = 64 * 1024;
934 header_line *header_last = NULL;
935 header_line *header_list = NULL;
936 int header_maxsize = HEADER_MAXSIZE;
937 int header_line_maxsize = 0;
939 header_name header_names[] = {
940 /* name len allow_resent htype */
941 { US"bcc", 3, TRUE, htype_bcc },
942 { US"cc", 2, TRUE, htype_cc },
943 { US"date", 4, TRUE, htype_date },
944 { US"delivery-date", 13, FALSE, htype_delivery_date },
945 { US"envelope-to", 11, FALSE, htype_envelope_to },
946 { US"from", 4, TRUE, htype_from },
947 { US"message-id", 10, TRUE, htype_id },
948 { US"received", 8, FALSE, htype_received },
949 { US"reply-to", 8, FALSE, htype_reply_to },
950 { US"return-path", 11, FALSE, htype_return_path },
951 { US"sender", 6, TRUE, htype_sender },
952 { US"subject", 7, FALSE, htype_subject },
953 { US"to", 2, TRUE, htype_to }
956 int header_names_size = nelem(header_names);
958 uschar *helo_accept_junk_hosts = NULL;
959 uschar *helo_allow_chars = US"";
960 uschar *helo_lookup_domains = US"@ : @[]";
961 uschar *helo_try_verify_hosts = NULL;
962 uschar *helo_verify_hosts = NULL;
963 const uschar *hex_digits = CUS"0123456789abcdef";
964 uschar *hold_domains = NULL;
965 uschar *host_data = NULL;
966 uschar *host_lookup = NULL;
967 uschar *host_lookup_order = US"bydns:byaddr";
968 uschar *host_lookup_msg = US"";
970 uschar *host_number_string = NULL;
971 uschar *host_reject_connection = NULL;
972 uschar *hosts_connection_nolog = NULL;
974 uschar *hosts_proxy = NULL;
976 uschar *hosts_treat_as_local = NULL;
977 uschar *hosts_require_helo = US"*";
978 #ifdef EXPERIMENTAL_XCLIENT
979 uschar *hosts_xclient = NULL;
981 tree_node *hostlist_anchor = NULL;
982 int hostlist_count = 0;
985 int ignore_bounce_errors_after = 10*7*24*60*60; /* 10 weeks */
986 uschar *ignore_fromline_hosts = NULL;
987 int inetd_wait_timeout = -1;
988 uschar *initial_cwd = NULL;
989 uschar *interface_address = NULL;
990 int interface_port = -1;
991 uschar *iterate_item = NULL;
995 uschar *keep_environment = NULL;
997 int keep_malformed = 4*24*60*60; /* 4 days */
999 uschar *eldap_dn = NULL;
1000 const uschar *letter_digit_hyphen_dot =
1001 US"abcdefghijklmnopqrstuvwxyz"
1003 "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1004 #ifndef DISABLE_ESMTP_LIMITS
1005 uschar *limits_advertise_hosts = US"*";
1007 int load_average = -2;
1008 uschar *local_from_prefix = NULL;
1009 uschar *local_from_suffix = NULL;
1012 uschar *local_interfaces = US"<; ::0 ; 0.0.0.0";
1014 uschar *local_interfaces = US"0.0.0.0";
1017 #ifdef HAVE_LOCAL_SCAN
1018 uschar *local_scan_data = NULL;
1019 int local_scan_timeout = 5*60;
1021 gid_t local_user_gid = (gid_t)(-1);
1022 uid_t local_user_uid = (uid_t)(-1);
1024 tree_node *localpartlist_anchor= NULL;
1025 int localpartlist_count = 0;
1026 uschar *log_buffer = NULL;
1028 int log_default[] = { /* for initializing log_selector */
1029 Li_acl_warn_skipped,
1030 Li_connection_reject,
1035 Li_host_lookup_failed,
1036 Li_lost_incoming_connection,
1037 Li_outgoing_interface, /* see d_log_interface in deliver.c */
1040 Li_queue_time_exclusive,
1043 Li_sender_verify_fail,
1046 Li_smtp_confirmation,
1047 Li_tls_certificate_verified,
1052 uschar *log_file_path = US LOG_FILE_PATH
1053 "\0<--------------Space to patch log_file_path->";
1055 int log_notall[] = {
1058 bit_table log_options[] = { /* must be in alphabetical order,
1059 with definitions from enum logbit. */
1060 BIT_TABLE(L, 8bitmime),
1061 BIT_TABLE(L, acl_warn_skipped),
1062 BIT_TABLE(L, address_rewrite),
1064 BIT_TABLE(L, all_parents),
1065 BIT_TABLE(L, arguments),
1066 BIT_TABLE(L, connection_id),
1067 BIT_TABLE(L, connection_reject),
1068 BIT_TABLE(L, delay_delivery),
1069 BIT_TABLE(L, deliver_time),
1070 BIT_TABLE(L, delivery_size),
1071 #ifndef DISABLE_DKIM
1073 BIT_TABLE(L, dkim_verbose),
1075 BIT_TABLE(L, dnslist_defer),
1076 BIT_TABLE(L, dnssec),
1078 BIT_TABLE(L, host_lookup_failed),
1079 BIT_TABLE(L, ident_timeout),
1080 BIT_TABLE(L, incoming_interface),
1081 BIT_TABLE(L, incoming_port),
1082 BIT_TABLE(L, lost_incoming_connection),
1083 BIT_TABLE(L, millisec),
1084 BIT_TABLE(L, msg_id),
1085 BIT_TABLE(L, msg_id_created),
1086 BIT_TABLE(L, outgoing_interface),
1087 BIT_TABLE(L, outgoing_port),
1089 BIT_TABLE(L, pipelining),
1090 BIT_TABLE(L, protocol_detail),
1091 #if defined(SUPPORT_PROXY) || defined(SUPPORT_SOCKS)
1092 BIT_TABLE(L, proxy),
1094 BIT_TABLE(L, queue_run),
1095 BIT_TABLE(L, queue_time),
1096 BIT_TABLE(L, queue_time_exclusive),
1097 BIT_TABLE(L, queue_time_overall),
1098 BIT_TABLE(L, receive_time),
1099 BIT_TABLE(L, received_recipients),
1100 BIT_TABLE(L, received_sender),
1101 BIT_TABLE(L, rejected_header),
1102 { US"rejected_headers", Li_rejected_header },
1103 BIT_TABLE(L, retry_defer),
1104 BIT_TABLE(L, return_path_on_delivery),
1105 BIT_TABLE(L, sender_on_delivery),
1106 BIT_TABLE(L, sender_verify_fail),
1107 BIT_TABLE(L, size_reject),
1108 BIT_TABLE(L, skip_delivery),
1109 BIT_TABLE(L, smtp_confirmation),
1110 BIT_TABLE(L, smtp_connection),
1111 BIT_TABLE(L, smtp_incomplete_transaction),
1112 BIT_TABLE(L, smtp_mailauth),
1113 BIT_TABLE(L, smtp_no_mail),
1114 BIT_TABLE(L, smtp_protocol_error),
1115 BIT_TABLE(L, smtp_syntax_error),
1116 BIT_TABLE(L, subject),
1117 BIT_TABLE(L, tls_certificate_verified),
1118 BIT_TABLE(L, tls_cipher),
1119 BIT_TABLE(L, tls_peerdn),
1120 BIT_TABLE(L, tls_resumption),
1121 BIT_TABLE(L, tls_sni),
1122 BIT_TABLE(L, unknown_in_list),
1124 int log_options_count = nelem(log_options);
1126 int log_reject_target = 0;
1127 unsigned int log_selector[log_selector_size]; /* initialized in main() */
1128 uschar *log_selector_string = NULL;
1129 FILE *log_stderr = NULL;
1130 uschar *login_sender_address = NULL;
1131 uschar *lookup_dnssec_authenticated = NULL;
1132 int lookup_open_max = 25;
1133 uschar *lookup_value = NULL;
1135 macro_item *macros_user = NULL;
1136 uschar *mailstore_basename = NULL;
1137 #ifdef WITH_CONTENT_SCAN
1138 uschar *malware_name = NULL; /* Virus Name */
1140 int max_received_linelength= 0;
1141 int max_username_length = 0;
1142 int message_age = 0;
1143 uschar *message_body = NULL;
1144 uschar *message_body_end = NULL;
1145 int message_body_size = 0;
1146 int message_body_visible = 500;
1147 int message_ended = END_NOTSTARTED;
1148 uschar *message_headers = NULL;
1150 uschar *message_id_domain = NULL;
1151 uschar *message_id_text = NULL;
1152 uschar message_id_option[MESSAGE_ID_LENGTH + 3];
1153 uschar *message_id_external;
1154 int message_linecount = 0;
1155 int message_size = 0;
1156 uschar *message_size_limit = US"50M";
1158 int message_utf8_downconvert = 0; /* -1 ifneeded; 0 never; 1 always */
1160 uschar message_subdir[2] = { 0, 0 };
1161 const uschar *message_reference= NULL;
1163 /* MIME ACL expandables */
1164 #ifdef WITH_CONTENT_SCAN
1165 int mime_anomaly_level = 0;
1166 const uschar *mime_anomaly_text = NULL;
1167 uschar *mime_boundary = NULL;
1168 uschar *mime_charset = NULL;
1169 uschar *mime_content_description = NULL;
1170 uschar *mime_content_disposition = NULL;
1171 uschar *mime_content_id = NULL;
1172 unsigned int mime_content_size = 0;
1173 uschar *mime_content_transfer_encoding = NULL;
1174 uschar *mime_content_type = NULL;
1175 uschar *mime_decoded_filename = NULL;
1176 uschar *mime_filename = NULL;
1177 int mime_is_multipart = 0;
1178 int mime_is_coverletter = 0;
1179 int mime_is_rfc822 = 0;
1180 int mime_part_count = -1;
1183 uid_t *never_users = NULL;
1184 uschar *notifier_socket = US"$spool_directory/" NOTIFIER_SOCKET_NAME ;
1186 const int on = 1; /* for setsockopt */
1189 uid_t original_euid;
1190 gid_t originator_gid;
1191 uschar *originator_login = NULL;
1192 uschar *originator_name = NULL;
1193 uid_t originator_uid;
1194 uschar *override_local_interfaces = NULL;
1195 const uschar *override_pid_file_path = NULL;
1197 BOOL panic_coredump = FALSE;
1198 pcre2_general_context * pcre_gen_ctx = NULL;
1199 pcre2_compile_context * pcre_gen_cmp_ctx = NULL;
1200 pcre2_match_context * pcre_gen_mtc_ctx = NULL;
1201 pcre2_general_context * pcre_mlc_ctx = NULL;
1202 pcre2_compile_context * pcre_mlc_cmp_ctx = NULL;
1204 uschar *percent_hack_domains = NULL;
1205 const uschar *pid_file_path = US PID_FILE_PATH
1206 "\0<--------------Space to patch pid_file_path->";
1207 #ifndef DISABLE_PIPE_CONNECT
1208 uschar *pipe_connect_advertise_hosts = US"*";
1210 uschar *pipelining_advertise_hosts = US"*";
1211 uschar *primary_hostname = NULL;
1212 uschar *process_info;
1213 int process_info_len = 0;
1214 uschar *process_log_path = NULL;
1215 const uschar *process_purpose = US"fresh-exec";
1217 #if defined(SUPPORT_PROXY) || defined(SUPPORT_SOCKS) || defined(EXPERIMENTAL_XCLIENT)
1218 uschar *proxy_external_address = NULL;
1219 int proxy_external_port = 0;
1220 uschar *proxy_local_address = NULL;
1221 int proxy_local_port = 0;
1222 int proxy_protocol_timeout = 3;
1225 uschar *prvscheck_address = NULL;
1226 uschar *prvscheck_keynum = NULL;
1227 uschar *prvscheck_result = NULL;
1230 qrunner *qrunners = NULL;
1232 const uschar *qualify_domain_recipient = NULL;
1233 uschar *qualify_domain_sender = NULL;
1234 uschar *queue_domains = NULL;
1235 int queue_interval = -1;
1236 uschar *queue_name = US"";
1237 uschar *queue_name_dest = NULL;
1238 uschar *queue_only_file = NULL;
1239 int queue_only_load = -1;
1240 uschar *queue_run_max = US"5";
1241 pid_t queue_run_pid = (pid_t)0;
1242 int queue_run_pipe = -1;
1243 unsigned queue_size = 0;
1244 time_t queue_size_next = 0;
1245 uschar *queue_smtp_domains = NULL;
1247 uint32_t random_seed = 0;
1248 tree_node *ratelimiters_cmd = NULL;
1249 tree_node *ratelimiters_conn = NULL;
1250 tree_node *ratelimiters_mail = NULL;
1251 uschar *raw_active_hostname = NULL;
1252 const uschar *raw_sender = NULL;
1253 const uschar **raw_recipients = NULL;
1254 int raw_recipients_count = 0;
1257 int rcpt_fail_count = 0;
1258 int rcpt_defer_count = 0;
1261 int receive_linecount = 0;
1262 int receive_messagecount = 0;
1263 int receive_timeout = 0;
1264 int received_count = 0;
1265 const uschar *received_for = NULL;
1267 /* This is the default text for Received headers generated by Exim. The
1268 date will be automatically added on the end. */
1270 uschar *received_header_text = US
1272 "${if def:sender_rcvhost {from $sender_rcvhost\n\t}"
1273 "{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}"
1274 "${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}"
1275 "by $primary_hostname "
1276 "${if def:received_protocol {with $received_protocol }}"
1278 "${if def:tls_in_ver { ($tls_in_ver)}}"
1279 "${if def:tls_in_cipher_std { tls $tls_in_cipher_std\n\t}}"
1281 "(Exim $version_number)\n\t"
1282 "${if def:sender_address {(envelope-from <$sender_address>)\n\t}}"
1283 "id $message_exim_id"
1284 "${if def:received_for {\n\tfor $received_for}}"
1285 "\0<---------------Space to patch received_header_text->";
1287 int received_headers_max = 30;
1288 uschar *received_protocol = NULL;
1289 struct timeval received_time = { 0, 0 };
1290 struct timeval received_time_complete = { 0, 0 };
1291 uschar *recipient_data = NULL;
1292 uschar *recipient_unqualified_hosts = NULL;
1293 uschar *recipient_verify_failure = NULL;
1294 int recipients_count = 0;
1295 recipient_item *recipients_list = NULL;
1296 int recipients_list_max = 0;
1297 uschar *recipients_max = US"50000";
1298 int recipients_max_expanded= 0;
1299 const pcre2_code *regex_AUTH = NULL;
1300 const pcre2_code *regex_check_dns_names = NULL;
1301 const pcre2_code *regex_From = NULL;
1302 const pcre2_code *regex_IGNOREQUOTA = NULL;
1303 const pcre2_code *regex_PIPELINING = NULL;
1304 const pcre2_code *regex_SIZE = NULL;
1305 #ifndef DISABLE_PIPE_CONNECT
1306 const pcre2_code *regex_EARLY_PIPE = NULL;
1308 int regex_cachesize = 0;
1309 const pcre2_code *regex_ismsgid = NULL;
1310 const pcre2_code *regex_smtp_code = NULL;
1311 const uschar *regex_vars[REGEX_VARS] = { NULL };
1312 #ifdef WHITELIST_D_MACROS
1313 const pcre2_code *regex_whitelisted_macro = NULL;
1315 #ifdef WITH_CONTENT_SCAN
1316 uschar *regex_match_string = NULL;
1318 int remote_delivery_count = 0;
1319 int remote_max_parallel = 4;
1320 uschar *remote_sort_domains = NULL;
1321 int retry_data_expire = 7*24*60*60;
1322 int retry_interval_max = 24*60*60;
1323 int retry_maximum_timeout = 0; /* set from retry config */
1324 retry_config *retries = NULL;
1325 const uschar *return_path = NULL;
1326 int rewrite_existflags = 0;
1327 uschar *rfc1413_hosts = US"@[]";
1328 int rfc1413_query_timeout = 0;
1329 uid_t root_gid = ROOT_GID;
1330 uid_t root_uid = ROOT_UID;
1332 router_instance *routers = NULL;
1334 /* All elements not mentioned will be 0/NULL/FALSE */
1335 router_instance router_defaults = {
1338 .address_test = TRUE,
1340 .log_as_local = TRUE_UNSET,
1343 .retry_use_local_part = TRUE_UNSET,
1344 .verify_recipient = TRUE,
1345 .verify_sender = TRUE,
1347 .self_code = self_freeze,
1351 .dnssec = { .request= US"*", .require=NULL },
1354 const uschar *router_name = NULL;
1355 tree_node *router_var = NULL;
1357 ip_address_item *running_interfaces = NULL;
1359 /* This is a weird one. The following string gets patched in the binary by the
1360 script that sets up a copy of Exim for running in the test harness. It seems
1361 that compilers are now clever, and share constant strings if they can.
1362 Elsewhere in Exim the string "<" is used. The compiler optimization seems to
1363 make use of the end of this string in order to save space. So the patching then
1364 wrecks this. We defeat this optimization by adding some additional characters
1365 onto the end of the string. */
1367 uschar *running_status = US">>>running<<<" "\0EXTRA";
1371 uschar *search_error_message = NULL;
1372 uschar *self_hostname = NULL;
1373 const uschar *sender_address = NULL;
1374 unsigned int sender_address_cache[(MAX_NAMED_LIST * 2)/32];
1375 uschar *sender_address_data = NULL;
1376 const uschar *sender_address_unrewritten = NULL;
1377 uschar *sender_data = NULL;
1378 unsigned int sender_domain_cache[(MAX_NAMED_LIST * 2)/32];
1379 uschar *sender_fullhost = NULL;
1380 uschar *sender_helo_name = NULL;
1381 uschar **sender_host_aliases = &no_aliases;
1382 uschar *sender_host_address = NULL;
1383 uschar *sender_host_authenticated = NULL;
1384 uschar *sender_host_auth_pubname = NULL;
1385 unsigned int sender_host_cache[(MAX_NAMED_LIST * 2)/32];
1386 uschar *sender_host_name = NULL;
1387 int sender_host_port = 0;
1388 uschar *sender_ident = NULL;
1389 uschar *sender_rate = NULL;
1390 uschar *sender_rate_limit = NULL;
1391 uschar *sender_rate_period = NULL;
1392 uschar *sender_rcvhost = NULL;
1393 uschar *sender_unqualified_hosts = NULL;
1394 uschar *sender_verify_failure = NULL;
1395 address_item *sender_verified_list = NULL;
1396 address_item *sender_verified_failed = NULL;
1397 int sender_verified_rc = -1;
1398 uschar *sending_ip_address = NULL;
1399 int sending_port = -1;
1400 SIGNAL_BOOL sigalrm_seen = FALSE;
1401 const uschar *sigalarm_setter = NULL;
1402 const uschar **sighup_argv = NULL;
1403 int slow_lookup_log = 0; /* millisecs, zero disables */
1404 int smtp_accept_count = 0;
1405 int smtp_accept_max = 20;
1406 int smtp_accept_max_nonmail= 10;
1407 uschar *smtp_accept_max_nonmail_hosts = US"*";
1408 uschar *smtp_accept_max_per_connection = US"1000";
1409 uschar *smtp_accept_max_per_host = NULL;
1410 int smtp_accept_queue = 0;
1411 int smtp_accept_queue_per_connection = 10;
1412 int smtp_accept_reserve = 0;
1413 uschar *smtp_active_hostname = NULL;
1414 int smtp_backlog_monitor = 0;
1415 uschar *smtp_banner = US"$smtp_active_hostname ESMTP "
1416 "Exim $version_number $tod_full"
1417 "\0<---------------Space to patch smtp_banner->";
1418 int smtp_ch_index = 0;
1419 uschar *smtp_cmd_argument = NULL;
1420 uschar *smtp_cmd_buffer = NULL;
1421 struct timeval smtp_connection_start = {0,0};
1422 uschar smtp_connection_had[SMTP_HBUFF_SIZE];
1423 int smtp_connect_backlog = 20;
1424 double smtp_delay_mail = 0.0;
1425 double smtp_delay_rcpt = 0.0;
1426 FILE *smtp_in = NULL;
1427 int smtp_listen_backlog = 0;
1428 int smtp_load_reserve = -1;
1429 int smtp_mailcmd_count = 0;
1430 int smtp_mailcmd_max = -1;
1431 FILE *smtp_out = NULL;
1432 uschar *smtp_etrn_command = NULL;
1433 int smtp_max_synprot_errors= 3;
1434 int smtp_max_unknown_commands = 3;
1435 uschar *smtp_notquit_reason = NULL;
1436 unsigned smtp_peer_options = 0;
1437 unsigned smtp_peer_options_wrap= 0;
1438 uschar *smtp_ratelimit_hosts = NULL;
1439 uschar *smtp_ratelimit_mail = NULL;
1440 uschar *smtp_ratelimit_rcpt = NULL;
1441 uschar *smtp_read_error = US"";
1442 int smtp_receive_timeout = 5*60;
1443 uschar *smtp_receive_timeout_s = NULL;
1444 uschar *smtp_reserve_hosts = NULL;
1445 int smtp_rlm_base = 0;
1446 double smtp_rlm_factor = 0.0;
1447 int smtp_rlm_limit = 0;
1448 int smtp_rlm_threshold = INT_MAX;
1449 int smtp_rlr_base = 0;
1450 double smtp_rlr_factor = 0.0;
1451 int smtp_rlr_limit = 0;
1452 int smtp_rlr_threshold = INT_MAX;
1454 uschar *smtputf8_advertise_hosts = US"*"; /* overridden under test-harness */
1457 #ifdef WITH_CONTENT_SCAN
1458 uschar *spamd_address = US"127.0.0.1 783";
1459 uschar *spam_bar = NULL;
1460 uschar *spam_report = NULL;
1461 uschar *spam_action = NULL;
1462 uschar *spam_score = NULL;
1463 uschar *spam_score_int = NULL;
1466 FILE *spool_data_file = NULL;
1467 uschar *spool_directory = US SPOOL_DIRECTORY
1468 "\0<--------------Space to patch spool_directory->";
1470 uschar *srs_recipient = NULL;
1472 int string_datestamp_offset= -1;
1473 int string_datestamp_length= 0;
1474 int string_datestamp_type = -1;
1475 const uschar *submission_domain = NULL;
1476 const uschar *submission_name = NULL;
1477 int syslog_facility = LOG_MAIL;
1478 const uschar *syslog_processname= US"exim";
1479 uschar *system_filter = NULL;
1481 uschar *system_filter_directory_transport = NULL;
1482 uschar *system_filter_file_transport = NULL;
1483 uschar *system_filter_pipe_transport = NULL;
1484 uschar *system_filter_reply_transport = NULL;
1486 gid_t system_filter_gid = 0;
1487 uid_t system_filter_uid = (uid_t)-1;
1489 blob tcp_fastopen_nodata = { .data = NULL, .len = 0 };
1490 tfo_state_t tcp_out_fastopen = TFO_NOT_USED;
1491 #ifdef USE_TCP_WRAPPERS
1492 uschar *tcp_wrappers_daemon_name = US TCP_WRAPPERS_DAEMON_NAME;
1494 int test_harness_load_avg = 0;
1495 int thismessage_size_limit = 0;
1496 int timeout_frozen_after = 0;
1497 #ifdef MEASURE_TIMING
1498 struct timeval timestamp_startup;
1501 transport_instance *transports = NULL;
1503 transport_instance transport_defaults = {
1504 /* All non-mentioned elements zero/NULL/FALSE */
1506 .multi_domain = TRUE,
1507 .max_addresses = US"100",
1508 .connection_max_messages = 500,
1511 .filter_timeout = 300,
1512 .retry_use_local_part = TRUE_UNSET, /* retry_use_local_part: BOOL, but set neither
1513 1 nor 0 so can detect unset */
1516 int transport_count;
1517 const uschar *transport_name = NULL;
1518 int transport_newlines;
1519 const uschar **transport_filter_argv = NULL;
1520 int transport_filter_timeout;
1521 int transport_write_timeout= 0;
1523 tree_node *tree_dns_fails = NULL;
1524 tree_node *tree_duplicates = NULL;
1525 tree_node *tree_nonrecipients = NULL;
1526 tree_node *tree_unusable = NULL;
1528 gid_t *trusted_groups = NULL;
1529 uid_t *trusted_users = NULL;
1530 uschar *timezone_string = US TIMEZONE_DEFAULT;
1532 uschar *unknown_login = NULL;
1533 uschar *unknown_username = NULL;
1534 uschar *untrusted_set_sender = NULL;
1536 /* A regex for matching a "From_" line in an incoming message, in the form
1538 From ph10 Fri Jan 5 12:35 GMT 1996
1540 which the "mail" commands send to the MTA (undocumented, of course), or in
1543 From ph10 Fri, 7 Jan 97 14:00:00 GMT
1545 which is apparently used by some UUCPs, despite it not being in RFC 976.
1546 Because of variations in time formats, just match up to the minutes. That
1547 should be sufficient. Examples have been seen of time fields like 12:1:03,
1548 so just require one digit for hours and minutes. The weekday is also absent
1551 uschar *uucp_from_pattern = US
1552 "^From\\s+(\\S+)\\s+(?:[a-zA-Z]{3},?\\s+)?" /* Common start */
1553 "(?:" /* Non-extracting bracket */
1554 "[a-zA-Z]{3}\\s+\\d?\\d|" /* First form */
1555 "\\d?\\d\\s+[a-zA-Z]{3}\\s+\\d\\d(?:\\d\\d)?" /* Second form */
1556 ")" /* End alternation */
1557 "\\s+\\d\\d?:\\d\\d?"; /* Start of time */
1559 uschar *uucp_from_sender = US"$1";
1561 uschar *verify_mode = NULL;
1562 uschar *version_copyright =
1563 US"Copyright (c) University of Cambridge, 1995 - 2018\n"
1564 "(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2024";
1565 uschar *version_date = US"?";
1566 uschar *version_cnumber = US"????";
1567 uschar *version_string = US"?";
1569 uschar *warn_message_file = NULL;
1570 int warning_count = 0;
1571 const uschar *warnmsg_delay = NULL;
1572 const uschar *warnmsg_recipients = NULL;
1574 #ifndef DISABLE_WELLKNOWN
1575 uschar *wellknown_advertise_hosts = NULL;
1576 uschar *wellknown_response = NULL;
1579 /* End of globals.c */