gen_pkcs3: add comment explaining rationale
[exim.git] / src / src / globals.c
... / ...
CommitLineData
1/*************************************************
2* Exim - an Internet mail transport agent *
3*************************************************/
4
5/* Copyright (c) University of Cambridge 1995 - 2012 */
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
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[] = {
18 { "client_condition", opt_stringptr | opt_public,
19 (void *)(offsetof(auth_instance, client_condition)) },
20 { "client_set_id", opt_stringptr | opt_public,
21 (void *)(offsetof(auth_instance, set_client_id)) },
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))},
28 { "server_condition", opt_stringptr | opt_public,
29 (void *)(offsetof(auth_instance, server_condition)) },
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
54#ifdef EXPAND_DLFUNC
55tree_node *dlobj_anchor = NULL;
56#endif
57
58#ifdef LOOKUP_IBASE
59uschar *ibase_servers = NULL;
60#endif
61
62#ifdef LOOKUP_LDAP
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;
68uschar *eldap_default_servers = NULL;
69uschar *eldap_require_cert = NULL;
70int eldap_version = -1;
71BOOL eldap_start_tls = FALSE;
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
86#ifdef LOOKUP_SQLITE
87int sqlite_lock_timeout = 5;
88#endif
89
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
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
119
120#ifdef SUPPORT_TLS
121BOOL gnutls_compat_mode = FALSE;
122BOOL gnutls_enable_pkcs11 = FALSE;
123uschar *gnutls_require_mac = NULL;
124uschar *gnutls_require_kx = NULL;
125uschar *gnutls_require_proto = NULL;
126uschar *openssl_options = NULL;
127const pcre *regex_STARTTLS = NULL;
128uschar *tls_advertise_hosts = NULL; /* This is deliberate */
129uschar *tls_certificate = NULL;
130uschar *tls_crl = NULL;
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;
135uschar *tls_dhparam = NULL;
136#if defined(EXPERIMENTAL_OCSP) && !defined(USE_GNUTLS)
137uschar *tls_ocsp_file = NULL;
138#endif
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;
158BOOL (*receive_smtp_buffered)(void) = NULL; /* Only used for SMTP */
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
190header_line *acl_added_headers = NULL;
191tree_node *acl_anchor = NULL;
192uschar *acl_arg[9] = {NULL, NULL, NULL, NULL, NULL,
193 NULL, NULL, NULL, NULL};
194int acl_narg = 0;
195
196uschar *acl_not_smtp = NULL;
197#ifdef WITH_CONTENT_SCAN
198uschar *acl_not_smtp_mime = NULL;
199#endif
200uschar *acl_not_smtp_start = NULL;
201uschar *acl_removed_headers = NULL;
202uschar *acl_smtp_auth = NULL;
203uschar *acl_smtp_connect = NULL;
204uschar *acl_smtp_data = NULL;
205#ifndef DISABLE_DKIM
206uschar *acl_smtp_dkim = NULL;
207#endif
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;
213#ifdef WITH_CONTENT_SCAN
214uschar *acl_smtp_mime = NULL;
215#endif
216uschar *acl_smtp_notquit = NULL;
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;
222
223BOOL acl_temp_details = FALSE;
224tree_node *acl_var_c = NULL;
225tree_node *acl_var_m = NULL;
226uschar *acl_verify_message = NULL;
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",
235 US"MIME",
236 US"DKIM",
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",
245 US"non-SMTP-start",
246 US"NOTQUIT",
247 US"QUIT",
248 US"STARTTLS",
249 US"VRFY",
250 US"delivery",
251 US"unknown"
252 };
253
254uschar *acl_wherecodes[] = { US"550", /* RCPT */
255 US"550", /* MAIL */
256 US"550", /* PREDATA */
257 US"550", /* MIME */
258 US"550", /* DKIM */
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 */
268 US"0", /* NOTQUIT; not relevant */
269 US"0", /* QUIT; not relevant */
270 US"550", /* STARTTLS */
271 US"252", /* VRFY */
272 US"0", /* delivery; not relevant */
273 US"0" /* unknown; not relevant */
274 };
275
276BOOL active_local_from_check = FALSE;
277BOOL active_local_sender_retain = FALSE;
278int body_8bitmime = 0;
279BOOL accept_8bitmime = TRUE; /* deliberately not RFC compliant */
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
318 NULL, /* authenticator */
319 NULL, /* auth_id */
320 NULL, /* auth_sndr */
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 */
340#ifdef EXPERIMENTAL_SRS
341 NULL, /* srs_sender */
342#endif
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;
353BOOL allow_auth_unadvertised= FALSE;
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 */
371 NULL, /* client_condition */
372 NULL, /* public_name */
373 NULL, /* set_id */
374 NULL, /* set_client_id */
375 NULL, /* server_mail_auth_condition */
376 NULL, /* server_debug_string */
377 NULL, /* server_condition */
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"";
385uschar *auth_vars[AUTH_VARS];
386int auto_thaw = 0;
387#ifdef WITH_CONTENT_SCAN
388BOOL av_failed = FALSE;
389uschar *av_scanner = US"sophie:/var/run/sophie"; /* AV scanner */
390#endif
391
392BOOL background_daemon = TRUE;
393
394#if BASE_62 == 62
395uschar *base62_chars=
396 US"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
397#else
398uschar *base62_chars= US"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
399#endif
400
401uschar *bi_command = NULL;
402uschar *big_buffer = NULL;
403int big_buffer_size = BIG_BUFFER_SIZE;
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
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";
429uschar *check_dns_names_pattern= US"(?i)^(?>(?(1)\\.|())[^\\W](?>[a-z0-9/_-]*[^\\W])?)+(\\.?)$";
430int check_log_inodes = 0;
431int check_log_space = 0;
432BOOL check_rfc2047_length = TRUE;
433int check_spool_inodes = 0;
434int check_spool_space = 0;
435uschar *client_authenticator = NULL;
436uschar *client_authenticated_id = NULL;
437uschar *client_authenticated_sender = NULL;
438int clmacro_count = 0;
439uschar *clmacros[MAX_CLMACROS];
440BOOL config_changed = FALSE;
441FILE *config_file = NULL;
442uschar *config_filename = NULL;
443int config_lineno = 0;
444#ifdef CONFIGURE_GROUP
445gid_t config_gid = CONFIGURE_GROUP;
446#endif
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
462uschar *csa_status = NULL;
463BOOL cutthrough_delivery = FALSE;
464int cutthrough_fd = -1;
465
466BOOL daemon_listen = FALSE;
467uschar *daemon_smtp_port = US"smtp";
468int daemon_startup_retries = 9;
469int daemon_startup_sleep = 30;
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
479BOOL debug_daemon = FALSE;
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 };
518uschar *delay_warning_condition=
519 US"${if or {"
520 "{ !eq{$h_list-id:$h_list-post:$h_list-subscribe:}{} }"
521 "{ match{$h_precedence:}{(?i)bulk|list|junk} }"
522 "{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }"
523 "} {no}{yes}}";
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;
556#ifdef WITH_OLD_DEMIME
557int demime_errorlevel = 0;
558int demime_ok = 0;
559uschar *demime_reason = NULL;
560#endif
561BOOL disable_callout_flush = FALSE;
562BOOL disable_delay_flush = FALSE;
563#ifdef ENABLE_DISABLE_FSYNC
564BOOL disable_fsync = FALSE;
565#endif
566BOOL disable_ipv6 = FALSE;
567BOOL disable_logging = FALSE;
568
569#ifndef DISABLE_DKIM
570uschar *dkim_cur_signer = NULL;
571uschar *dkim_signers = NULL;
572uschar *dkim_signing_domain = NULL;
573uschar *dkim_signing_selector = NULL;
574uschar *dkim_verify_signers = US"$dkim_signers";
575BOOL dkim_collect_input = FALSE;
576BOOL dkim_disable_verify = FALSE;
577#endif
578
579uschar *dns_again_means_nonexist = NULL;
580int dns_csa_search_limit = 5;
581BOOL dns_csa_use_reverse = TRUE;
582uschar *dns_ipv4_lookup = NULL;
583int dns_retrans = 0;
584int dns_retry = 0;
585int dns_use_dnssec = -1; /* <0 = not coerced */
586int dns_use_edns0 = -1; /* <0 = not coerced */
587uschar *dnslist_domain = NULL;
588uschar *dnslist_matched = NULL;
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 */
596uschar *dsn_from = US DEFAULT_DSN_FROM;
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
621int fake_response = OK;
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).";
626int filter_n[FILTER_VARIABLE_COUNT];
627BOOL filter_running = FALSE;
628int filter_sn[FILTER_VARIABLE_COUNT];
629int filter_test = FTEST_NONE;
630uschar *filter_test_sfile = NULL;
631uschar *filter_test_ufile = NULL;
632uschar *filter_thisaddress = NULL;
633int finduser_retries = 0;
634#ifdef WITH_OLD_DEMIME
635uschar *found_extension = NULL;
636#endif
637uid_t fixed_never_users[] = { FIXED_NEVER_USERS };
638uschar *freeze_tell = NULL;
639uschar *freeze_tell_config = NULL;
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;
677BOOL helo_verify_failed = FALSE;
678uschar *helo_verify_hosts = NULL;
679const uschar *hex_digits = CUS"0123456789abcdef";
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;
686BOOL host_lookup_deferred = FALSE;
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;
701BOOL inetd_wait_mode = FALSE;
702int inetd_wait_timeout = -1;
703uschar *interface_address = NULL;
704int interface_port = -1;
705BOOL is_inetd = FALSE;
706uschar *iterate_item = NULL;
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
741values greater than 0x80000000 and are put into log_extra_selector (without the
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
746/* Note that this list must be in alphabetical order. */
747
748bit_table log_options[] = {
749 { US"8bitmime", LX_8bitmime },
750 { US"acl_warn_skipped", LX_acl_warn_skipped },
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 },
767 { US"pid", LX_pid },
768 { US"queue_run", L_queue_run },
769 { US"queue_time", LX_queue_time },
770 { US"queue_time_overall", LX_queue_time_overall },
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 },
778 { US"sender_verify_fail", LX_sender_verify_fail },
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 },
784 { US"smtp_mailauth", LX_smtp_mailauth },
785 { US"smtp_no_mail", LX_smtp_no_mail },
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 },
791 { US"tls_peerdn", LX_tls_peerdn },
792 { US"tls_sni", LX_tls_sni },
793 { US"unknown_in_list", LX_unknown_in_list }
794};
795
796int log_options_count = sizeof(log_options)/sizeof(bit_table);
797int log_reject_target = 0;
798uschar *log_selector_string = NULL;
799FILE *log_stderr = NULL;
800BOOL log_testing_mode = FALSE;
801BOOL log_timezone = FALSE;
802unsigned int log_write_selector= L_default;
803uschar *login_sender_address = NULL;
804int lookup_open_max = 25;
805uschar *lookup_value = NULL;
806
807macro_item *macros = NULL;
808uschar *mailstore_basename = NULL;
809#ifdef WITH_CONTENT_SCAN
810uschar *malware_name = NULL; /* Virus Name */
811#endif
812int max_received_linelength= 0;
813int max_username_length = 0;
814int message_age = 0;
815uschar *message_body = NULL;
816uschar *message_body_end = NULL;
817BOOL message_body_newlines = FALSE;
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;
834
835/* MIME ACL expandables */
836#ifdef WITH_CONTENT_SCAN
837int mime_anomaly_level = 0;
838const uschar *mime_anomaly_text = NULL;
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
855BOOL mua_wrapper = FALSE;
856
857uid_t *never_users = NULL;
858#ifdef WITH_CONTENT_SCAN
859BOOL no_mbox_unspool = FALSE;
860#endif
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->";
876BOOL pipelining_enable = TRUE;
877uschar *pipelining_advertise_hosts = US"*";
878BOOL preserve_message_logs = FALSE;
879uschar *primary_hostname = NULL;
880BOOL print_topbitchars = FALSE;
881uschar process_info[PROCESS_INFO_SIZE];
882int process_info_len = 0;
883uschar *process_log_path = NULL;
884BOOL prod_requires_admin = TRUE;
885uschar *prvscheck_address = NULL;
886uschar *prvscheck_keynum = NULL;
887uschar *prvscheck_result = NULL;
888
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;
899BOOL queue_only_load_latch = TRUE;
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;
914tree_node *ratelimiters_cmd = NULL;
915tree_node *ratelimiters_conn = NULL;
916tree_node *ratelimiters_mail = NULL;
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}"
941 "{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}"
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"
949 "${if def:sender_address {(envelope-from <$sender_address>)\n\t}}"
950 "id $message_exim_id"
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;
959uschar *recipient_verify_failure = NULL;
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;
969const pcre *regex_IGNOREQUOTA = NULL;
970const pcre *regex_PIPELINING = NULL;
971const pcre *regex_SIZE = NULL;
972const pcre *regex_smtp_code = NULL;
973const pcre *regex_ismsgid = NULL;
974#ifdef WHITELIST_D_MACROS
975const pcre *regex_whitelisted_macro = NULL;
976#endif
977#ifdef WITH_CONTENT_SCAN
978uschar *regex_match_string = NULL;
979#endif
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"*";
991int rfc1413_query_timeout = 5;
992/* BOOL rfc821_domains = FALSE; <<< on the way out */
993uid_t root_gid = ROOT_GID;
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 */
1005#ifdef EXPERIMENTAL_BRIGHTMAIL
1006 NULL, /* bmi_rule */
1007#endif
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 */
1036#ifdef EXPERIMENTAL_BRIGHTMAIL
1037 FALSE, /* bmi_deliver_alternate */
1038 FALSE, /* bmi_deliver_default */
1039 FALSE, /* bmi_dont_deliver */
1040#endif
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
1082wrecks this. We defeat this optimization by adding some additional characters
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];
1094uschar *sender_address_data = NULL;
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];
1105BOOL sender_host_dnssec = FALSE;
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;
1112BOOL sender_name_forced = FALSE;
1113uschar *sender_rate = NULL;
1114uschar *sender_rate_limit = NULL;
1115uschar *sender_rate_period = NULL;
1116uschar *sender_rcvhost = NULL;
1117BOOL sender_set_untrusted = FALSE;
1118uschar *sender_unqualified_hosts = NULL;
1119uschar *sender_verify_failure = NULL;
1120address_item *sender_verified_list = NULL;
1121address_item *sender_verified_failed = NULL;
1122int sender_verified_rc = -1;
1123BOOL sender_verified_responded = FALSE;
1124uschar *sending_ip_address = NULL;
1125int sending_port = -1;
1126SIGNAL_BOOL sigalrm_seen = FALSE;
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;
1140uschar *smtp_banner = US"$smtp_active_hostname ESMTP "
1141 "Exim $version_number $tod_full"
1142 "\0<---------------Space to patch smtp_banner->";
1143BOOL smtp_batched_input = FALSE;
1144BOOL smtp_check_spool_space = TRUE;
1145int smtp_ch_index = 0;
1146uschar *smtp_cmd_argument = NULL;
1147uschar *smtp_cmd_buffer = NULL;
1148time_t smtp_connection_start = 0;
1149uschar smtp_connection_had[SMTP_HBUFF_SIZE];
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;
1163uschar *smtp_notquit_reason = NULL;
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;
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
1190uschar *spf_guess = US"v=spf1 a/24 mx/24 ptr ?all";
1191uschar *spf_header_comment = NULL;
1192uschar *spf_received = NULL;
1193uschar *spf_result = NULL;
1194uschar *spf_smtp_comment = NULL;
1195#endif
1196
1197BOOL split_spool_directory = FALSE;
1198uschar *spool_directory = US SPOOL_DIRECTORY
1199 "\0<--------------Space to patch spool_directory->";
1200#ifdef EXPERIMENTAL_SRS
1201uschar *srs_config = NULL;
1202uschar *srs_db_address = NULL;
1203uschar *srs_db_key = NULL;
1204int srs_hashlength = 6;
1205int srs_hashmin = -1;
1206int srs_maxage = 31;
1207uschar *srs_orig_recipient = NULL;
1208uschar *srs_orig_sender = NULL;
1209uschar *srs_recipient = NULL;
1210uschar *srs_secrets = NULL;
1211uschar *srs_status = NULL;
1212BOOL srs_usehash = TRUE;
1213BOOL srs_usetimestamp = TRUE;
1214#endif
1215BOOL strict_acl_vars = FALSE;
1216int string_datestamp_offset= -1;
1217int string_datestamp_length= 0;
1218int string_datestamp_type = -1;
1219BOOL strip_excess_angle_brackets = FALSE;
1220BOOL strip_trailing_dot = FALSE;
1221uschar *submission_domain = NULL;
1222BOOL submission_mode = FALSE;
1223uschar *submission_name = NULL;
1224BOOL suppress_local_fixups = FALSE;
1225BOOL suppress_local_fixups_default = FALSE;
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;
1240uid_t system_filter_uid = (uid_t)-1;
1241BOOL system_filter_uid_set = FALSE;
1242BOOL system_filtering = FALSE;
1243
1244BOOL tcp_nodelay = TRUE;
1245#ifdef USE_TCP_WRAPPERS
1246uschar *tcp_wrappers_daemon_name = US TCP_WRAPPERS_DAEMON_NAME;
1247#endif
1248int test_harness_load_avg = 0;
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;
1308int transport_newlines;
1309uschar **transport_filter_argv = NULL;
1310int transport_filter_timeout;
1311BOOL transport_filter_timed_out = FALSE;
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;
1320BOOL trusted_config = TRUE;
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
1359uschar *version_copyright =
1360 US"Copyright (c) University of Cambridge, 1995 - 2012\n"
1361 "(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2012";
1362uschar *version_date = US"?";
1363uschar *version_cnumber = US"????";
1364uschar *version_string = US"?";
1365
1366int warning_count = 0;
1367
1368/* End of globals.c */