1 /* $Cambridge: exim/src/src/globals.c,v 1.60 2006/10/16 15:44:36 ph10 Exp $ */
3 /*************************************************
4 * Exim - an Internet mail transport agent *
5 *************************************************/
7 /* Copyright (c) University of Cambridge 1995 - 2006 */
8 /* See the file NOTICE for conditions of use and distribution. */
10 /* All the global variables are defined together in this one module, so
11 that they are easy to find. */
16 /* The OSF1 linker puts out a worrying warning if any sections contain no
17 executable code. It says
19 Warning: Linking some objects which contain exception information sections
20 and some which do not. This may cause fatal runtime exception handling
23 As this may cause people to worry needlessly, include a dummy function here
24 to stop the message from appearing. Make it reference itself to stop picky
25 compilers complaining that it is unused, and put in a dummy argument to stop
26 even pickier compilers complaining about infinite loops. */
28 static void dummy(int x) { dummy(x-1); }
31 /* Generic options for auths, all of which live inside auth_instance
32 data blocks and hence have the opt_public flag set. */
34 optionlist optionlist_auths[] = {
35 { "driver", opt_stringptr | opt_public,
36 (void *)(offsetof(auth_instance, driver_name)) },
37 { "public_name", opt_stringptr | opt_public,
38 (void *)(offsetof(auth_instance, public_name)) },
39 { "server_advertise_condition", opt_stringptr | opt_public,
40 (void *)(offsetof(auth_instance, advertise_condition))},
41 { "server_condition", opt_stringptr | opt_public,
42 (void *)(offsetof(auth_instance, server_condition)) },
43 { "server_debug_print", opt_stringptr | opt_public,
44 (void *)(offsetof(auth_instance, server_debug_string)) },
45 { "server_mail_auth_condition", opt_stringptr | opt_public,
46 (void *)(offsetof(auth_instance, mail_auth_condition)) },
47 { "server_set_id", opt_stringptr | opt_public,
48 (void *)(offsetof(auth_instance, set_id)) }
51 int optionlist_auths_size = sizeof(optionlist_auths)/sizeof(optionlist);
53 /* An empty host aliases list. */
55 uschar *no_aliases = NULL;
58 /* For comments on these variables, see globals.h. I'm too idle to
59 duplicate them here... */
62 uschar *opt_perl_startup = NULL;
63 BOOL opt_perl_at_start = FALSE;
64 BOOL opt_perl_started = FALSE;
68 tree_node *dlobj_anchor = NULL;
72 uschar *ibase_servers = NULL;
76 uschar *eldap_default_servers = NULL;
77 int eldap_version = -1;
81 uschar *mysql_servers = NULL;
85 uschar *oracle_servers = NULL;
89 uschar *pgsql_servers = NULL;
93 int sqlite_lock_timeout = 5;
96 #ifdef SUPPORT_MOVE_FROZEN_MESSAGES
97 BOOL move_frozen_messages = FALSE;
100 /* These variables are outside the #ifdef because it keeps the code less
101 cluttered in several places (e.g. during logging) if we can always refer to
102 them. Also, the tls_ variables are now always visible. */
104 BOOL tls_active = -1;
105 BOOL tls_certificate_verified = FALSE;
106 uschar *tls_cipher = NULL;
107 BOOL tls_on_connect = FALSE;
108 uschar *tls_on_connect_ports = NULL;
109 uschar *tls_peerdn = NULL;
112 const pcre *regex_STARTTLS = NULL;
113 uschar *tls_advertise_hosts = NULL; /* This is deliberate */
114 uschar *tls_certificate = NULL;
115 uschar *tls_crl = NULL;
116 uschar *tls_dhparam = NULL;
117 BOOL tls_offered = FALSE;
118 uschar *tls_privatekey = NULL;
119 BOOL tls_remember_esmtp = FALSE;
120 uschar *tls_require_ciphers = NULL;
121 uschar *tls_try_verify_hosts = NULL;
122 uschar *tls_verify_certificates= NULL;
123 uschar *tls_verify_hosts = NULL;
127 /* Input-reading functions for messages, so we can use special ones for
128 incoming TCP/IP. The defaults use stdin. We never need these for any
129 stand-alone tests. */
132 int (*receive_getc)(void) = stdin_getc;
133 int (*receive_ungetc)(int) = stdin_ungetc;
134 int (*receive_feof)(void) = stdin_feof;
135 int (*receive_ferror)(void) = stdin_ferror;
139 /* List of per-address expansion variables for clearing and saving/restoring
140 when verifying one address while routing/verifying another. We have to have
141 the size explicit, because it is referenced from more than one module. */
143 uschar **address_expansions[ADDRESS_EXPANSIONS_COUNT] = {
144 &deliver_address_data,
146 &deliver_domain_data,
147 &deliver_domain_orig,
148 &deliver_domain_parent,
150 &deliver_localpart_data,
151 &deliver_localpart_orig,
152 &deliver_localpart_parent,
153 &deliver_localpart_prefix,
154 &deliver_localpart_suffix,
155 (uschar **)(&deliver_recipients),
163 int address_expansions_count = sizeof(address_expansions)/sizeof(uschar **);
165 /* General global variables */
167 header_line *acl_added_headers = NULL;
168 tree_node *acl_anchor = NULL;
169 uschar *acl_not_smtp = NULL;
170 #ifdef WITH_CONTENT_SCAN
171 uschar *acl_not_smtp_mime = NULL;
173 uschar *acl_not_smtp_start = NULL;
174 uschar *acl_smtp_auth = NULL;
175 uschar *acl_smtp_connect = NULL;
176 uschar *acl_smtp_data = NULL;
177 uschar *acl_smtp_etrn = NULL;
178 uschar *acl_smtp_expn = NULL;
179 uschar *acl_smtp_helo = NULL;
180 uschar *acl_smtp_mail = NULL;
181 uschar *acl_smtp_mailauth = NULL;
182 #ifdef WITH_CONTENT_SCAN
183 uschar *acl_smtp_mime = NULL;
185 uschar *acl_smtp_predata = NULL;
186 uschar *acl_smtp_quit = NULL;
187 uschar *acl_smtp_rcpt = NULL;
188 uschar *acl_smtp_starttls = NULL;
189 uschar *acl_smtp_vrfy = NULL;
190 BOOL acl_temp_details = FALSE;
191 tree_node *acl_var_c = NULL;
192 tree_node *acl_var_m = NULL;
193 uschar *acl_verify_message = NULL;
194 string_item *acl_warn_logged = NULL;
196 /* Names of SMTP places for use in ACL error messages, and corresponding SMTP
197 error codes - keep in step with definitions of ACL_WHERE_xxxx in macros.h. */
199 uschar *acl_wherenames[] = { US"RCPT",
217 uschar *acl_wherecodes[] = { US"550", /* RCPT */
219 US"550", /* PREDATA */
222 US"0", /* not SMTP; not relevant */
224 US"550", /* connect */
227 US"550", /* HELO/EHLO */
228 US"0", /* MAILAUTH; not relevant */
229 US"0", /* not SMTP; not relevant */
230 US"0", /* QUIT; not relevant */
231 US"550", /* STARTTLS */
235 BOOL active_local_from_check = FALSE;
236 BOOL active_local_sender_retain = FALSE;
237 BOOL accept_8bitmime = FALSE;
238 address_item *addr_duplicate = NULL;
240 address_item address_defaults = {
245 NULL, /* start_router */
247 NULL, /* transport */
248 NULL, /* host_list */
249 NULL, /* host_used */
250 NULL, /* fallback_hosts */
255 NULL, /* cc_local_part */
256 NULL, /* lc_local_part */
257 NULL, /* local_part */
261 NULL, /* address_retry_key */
262 NULL, /* domain_retry_key */
263 NULL, /* current_dir */
266 NULL, /* user_message */
267 NULL, /* onetime_parent */
268 NULL, /* pipe_expandn */
269 NULL, /* return_filename */
270 NULL, /* self_hostname */
271 NULL, /* shadow_message */
276 (uid_t)(-1), /* uid */
277 (gid_t)(-1), /* gid */
279 { 0 }, /* domain_cache - any larger array should be zeroed */
280 { 0 }, /* localpart_cache - ditto */
283 ERRNO_UNKNOWNERROR, /* basic_errno */
285 -1, /* return_file */
286 SPECIAL_NONE, /* special_action */
287 DEFER, /* transport_return */
288 { /* fields that are propagated to children */
289 NULL, /* address_data */
290 NULL, /* domain_data */
291 NULL, /* localpart_data */
292 NULL, /* errors_address */
293 NULL, /* extra_headers */
294 NULL, /* remove_headers */
295 #ifdef EXPERIMENTAL_SRS
296 NULL, /* srs_sender */
301 uschar *address_file = NULL;
302 uschar *address_pipe = NULL;
303 BOOL address_test_mode = FALSE;
304 tree_node *addresslist_anchor = NULL;
305 int addresslist_count = 0;
306 gid_t *admin_groups = NULL;
307 BOOL admin_user = FALSE;
308 BOOL allow_auth_unadvertised= FALSE;
309 BOOL allow_domain_literals = FALSE;
310 BOOL allow_mx_to_ip = FALSE;
311 BOOL allow_unqualified_recipient = TRUE; /* For local messages */
312 BOOL allow_unqualified_sender = TRUE; /* Reset for SMTP */
313 BOOL allow_utf8_domains = FALSE;
314 uschar *authenticated_id = NULL;
315 uschar *authenticated_sender = NULL;
316 BOOL authentication_failed = FALSE;
317 auth_instance *auths = NULL;
318 uschar *auth_advertise_hosts = US"*";
319 auth_instance auth_defaults = {
320 NULL, /* chain pointer */
323 NULL, /* private options block pointer */
324 NULL, /* driver_name */
325 NULL, /* advertise_condition */
326 NULL, /* public_name */
328 NULL, /* server_mail_auth_condition */
329 NULL, /* server_debug_string */
330 NULL, /* server_condition */
333 FALSE /* advertised */
336 uschar *auth_defer_msg = US"reason not recorded";
337 uschar *auth_defer_user_msg = US"";
338 uschar *auth_vars[AUTH_VARS];
340 #ifdef WITH_CONTENT_SCAN
341 uschar *av_scanner = US"sophie:/var/run/sophie"; /* AV scanner */
344 BOOL background_daemon = TRUE;
347 uschar *base62_chars=
348 US"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
350 uschar *base62_chars= US"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
353 uschar *bi_command = NULL;
354 uschar *big_buffer = NULL;
355 int big_buffer_size = BIG_BUFFER_SIZE;
356 #ifdef EXPERIMENTAL_BRIGHTMAIL
357 uschar *bmi_alt_location = NULL;
358 uschar *bmi_base64_tracker_verdict = NULL;
359 uschar *bmi_base64_verdict = NULL;
360 uschar *bmi_config_file = US"/opt/brightmail/etc/brightmail.cfg";
363 uschar *bmi_verdicts = NULL;
365 int body_linecount = 0;
366 int body_zerocount = 0;
367 uschar *bounce_message_file = NULL;
368 uschar *bounce_message_text = NULL;
369 uschar *bounce_recipient = NULL;
370 BOOL bounce_return_body = TRUE;
371 BOOL bounce_return_message = TRUE;
372 int bounce_return_size_limit = 100*1024;
373 uschar *bounce_sender_authentication = NULL;
374 int bsmtp_transaction_linecount = 0;
376 int callout_cache_domain_positive_expire = 7*24*60*60;
377 int callout_cache_domain_negative_expire = 3*60*60;
378 int callout_cache_positive_expire = 24*60*60;
379 int callout_cache_negative_expire = 2*60*60;
380 uschar *callout_random_local_part = US"$primary_hostname-$tod_epoch-testing";
381 uschar *check_dns_names_pattern= US"(?i)^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9/-]*[^\\W_])?)+$";
382 int check_log_inodes = 0;
383 int check_log_space = 0;
384 BOOL check_rfc2047_length = TRUE;
385 int check_spool_inodes = 0;
386 int check_spool_space = 0;
387 int clmacro_count = 0;
388 uschar *clmacros[MAX_CLMACROS];
389 BOOL config_changed = FALSE;
390 FILE *config_file = NULL;
391 uschar *config_filename = NULL;
392 int config_lineno = 0;
393 #ifdef CONFIGURE_GROUP
394 gid_t config_gid = CONFIGURE_GROUP;
396 uschar *config_main_filelist = US CONFIGURE_FILE
397 "\0<-----------Space to patch configure_filename->";
398 uschar *config_main_filename = NULL;
400 #ifdef CONFIGURE_OWNER
401 uid_t config_uid = CONFIGURE_OWNER;
404 int connection_max_messages= -1;
405 uschar *continue_hostname = NULL;
406 uschar *continue_host_address = NULL;
407 BOOL continue_more = FALSE;
408 int continue_sequence = 1;
409 uschar *continue_transport = NULL;
411 uschar *csa_status = NULL;
413 BOOL daemon_listen = FALSE;
414 uschar *daemon_smtp_port = US"smtp";
415 int daemon_startup_retries = 9;
416 int daemon_startup_sleep = 30;
417 BOOL debug_daemon = FALSE;
419 FILE *debug_file = NULL;
420 bit_table debug_options[] = {
423 { US"auth", D_auth },
424 { US"deliver", D_deliver },
426 { US"dnsbl", D_dnsbl },
427 { US"exec", D_exec },
428 { US"expand", D_expand },
429 { US"filter", D_filter },
430 { US"hints_lookup", D_hints_lookup },
431 { US"host_lookup", D_host_lookup },
432 { US"ident", D_ident },
433 { US"interface", D_interface },
434 { US"lists", D_lists },
435 { US"load", D_load },
436 { US"local_scan", D_local_scan },
437 { US"lookup", D_lookup },
438 { US"memory", D_memory },
440 { US"process_info", D_process_info },
441 { US"queue_run", D_queue_run },
442 { US"receive", D_receive },
443 { US"resolver", D_resolver },
444 { US"retry", D_retry },
445 { US"rewrite", D_rewrite },
446 { US"route", D_route },
447 { US"timestamp", D_timestamp },
449 { US"transport", D_transport },
451 { US"verify", D_verify }
453 int debug_options_count = sizeof(debug_options)/sizeof(bit_table);
454 unsigned int debug_selector = 0;
455 int delay_warning[DELAY_WARNING_SIZE] = { DELAY_WARNING_SIZE, 1, 24*60*60 };
456 uschar *delay_warning_condition=
458 "{ !eq{$h_list-id:$h_list-post:$h_list-subscribe:}{} }"
459 "{ match{$h_precedence:}{(?i)bulk|list|junk} }"
460 "{ match{$h_auto-submitted:}{(?i)auto-generated|auto-replied} }"
462 BOOL delivery_date_remove = TRUE;
463 uschar *deliver_address_data = NULL;
464 int deliver_datafile = -1;
465 uschar *deliver_domain = NULL;
466 uschar *deliver_domain_data = NULL;
467 uschar *deliver_domain_orig = NULL;
468 uschar *deliver_domain_parent = NULL;
469 BOOL deliver_drop_privilege = FALSE;
470 BOOL deliver_firsttime = FALSE;
471 BOOL deliver_force = FALSE;
472 BOOL deliver_freeze = FALSE;
473 int deliver_frozen_at = 0;
474 uschar *deliver_home = NULL;
475 uschar *deliver_host = NULL;
476 uschar *deliver_host_address = NULL;
477 uschar *deliver_in_buffer = NULL;
478 ino_t deliver_inode = 0;
479 uschar *deliver_localpart = NULL;
480 uschar *deliver_localpart_data = NULL;
481 uschar *deliver_localpart_orig = NULL;
482 uschar *deliver_localpart_parent = NULL;
483 uschar *deliver_localpart_prefix = NULL;
484 uschar *deliver_localpart_suffix = NULL;
485 BOOL deliver_force_thaw = FALSE;
486 BOOL deliver_manual_thaw = FALSE;
487 uschar *deliver_out_buffer = NULL;
488 int deliver_queue_load_max = -1;
489 address_item *deliver_recipients = NULL;
490 uschar *deliver_selectstring = NULL;
491 BOOL deliver_selectstring_regex = FALSE;
492 uschar *deliver_selectstring_sender = NULL;
493 BOOL deliver_selectstring_sender_regex = FALSE;
494 #ifdef WITH_OLD_DEMIME
495 int demime_errorlevel = 0;
497 uschar *demime_reason = NULL;
499 BOOL disable_ipv6 = FALSE;
500 BOOL disable_logging = FALSE;
502 #ifdef EXPERIMENTAL_DOMAINKEYS
503 uschar *dk_signing_domain = NULL;
504 uschar *dk_signing_selector = NULL;
505 int dk_do_verify = 0;
508 uschar *dns_again_means_nonexist = NULL;
509 int dns_csa_search_limit = 5;
510 BOOL dns_csa_use_reverse = TRUE;
511 uschar *dns_ipv4_lookup = NULL;
514 uschar *dnslist_domain = NULL;
515 uschar *dnslist_text = NULL;
516 uschar *dnslist_value = NULL;
517 tree_node *domainlist_anchor = NULL;
518 int domainlist_count = 0;
519 BOOL dont_deliver = FALSE;
520 BOOL dot_ends = TRUE;
521 BOOL drop_cr = FALSE; /* No longer used */
523 BOOL enable_dollar_recipients = FALSE;
524 BOOL envelope_to_remove = TRUE;
525 int errno_quota = ERRNO_QUOTA;
526 uschar *errors_copy = NULL;
527 int error_handling = ERRORS_SENDER;
528 uschar *errors_reply_to = NULL;
529 int errors_sender_rc = EXIT_FAILURE;
531 gid_t exim_gid = EXIM_GID;
532 BOOL exim_gid_set = TRUE; /* This gid is always set */
533 uschar *exim_path = US BIN_DIRECTORY "/exim"
534 "\0<---------------Space to patch exim_path->";
535 uid_t exim_uid = EXIM_UID;
536 BOOL exim_uid_set = TRUE; /* This uid is always set */
537 int expand_forbid = 0;
538 int expand_nlength[EXPAND_MAXN+1];
539 int expand_nmax = -1;
540 uschar *expand_nstring[EXPAND_MAXN+1];
541 BOOL expand_string_forcedfail = FALSE;
542 uschar *expand_string_message;
543 BOOL extract_addresses_remove_arguments = TRUE;
544 uschar *extra_local_interfaces = NULL;
546 int fake_response = OK;
547 uschar *fake_response_text = US"Your message has been rejected but is being kept for evaluation.\nIf it was a legitimate message, it may still be delivered to the target recipient(s).";
548 int filter_n[FILTER_VARIABLE_COUNT];
549 BOOL filter_running = FALSE;
550 int filter_sn[FILTER_VARIABLE_COUNT];
551 int filter_test = FTEST_NONE;
552 uschar *filter_test_sfile = NULL;
553 uschar *filter_test_ufile = NULL;
554 uschar *filter_thisaddress = NULL;
555 int finduser_retries = 0;
556 #ifdef WITH_OLD_DEMIME
557 uschar *found_extension = NULL;
559 uid_t fixed_never_users[] = { FIXED_NEVER_USERS };
560 uschar *freeze_tell = NULL;
561 uschar *freeze_tell_config = NULL;
562 uschar *fudged_queue_times = US"";
564 uschar *gecos_name = NULL;
565 uschar *gecos_pattern = NULL;
566 rewrite_rule *global_rewrite_rules = NULL;
568 uschar *headers_charset = US HEADERS_CHARSET;
569 int header_insert_maxlen = 64 * 1024;
570 header_line *header_last = NULL;
571 header_line *header_list = NULL;
572 int header_maxsize = HEADER_MAXSIZE;
573 int header_line_maxsize = 0;
575 header_name header_names[] = {
576 { US"bcc", 3, TRUE, htype_bcc },
577 { US"cc", 2, TRUE, htype_cc },
578 { US"date", 4, TRUE, htype_date },
579 { US"delivery-date", 13, FALSE, htype_delivery_date },
580 { US"envelope-to", 11, FALSE, htype_envelope_to },
581 { US"from", 4, TRUE, htype_from },
582 { US"message-id", 10, TRUE, htype_id },
583 { US"received", 8, FALSE, htype_received },
584 { US"reply-to", 8, FALSE, htype_reply_to },
585 { US"return-path", 11, FALSE, htype_return_path },
586 { US"sender", 6, TRUE, htype_sender },
587 { US"subject", 7, FALSE, htype_subject },
588 { US"to", 2, TRUE, htype_to }
591 int header_names_size = sizeof(header_names)/sizeof(header_name);
593 BOOL header_rewritten = FALSE;
594 uschar *helo_accept_junk_hosts = NULL;
595 uschar *helo_allow_chars = US"";
596 uschar *helo_lookup_domains = US"@ : @[]";
597 uschar *helo_try_verify_hosts = NULL;
598 BOOL helo_verified = FALSE;
599 BOOL helo_verify_failed = FALSE;
600 uschar *helo_verify_hosts = NULL;
601 uschar *hex_digits = US"0123456789abcdef";
602 uschar *hold_domains = NULL;
603 BOOL host_checking = FALSE;
604 BOOL host_checking_callout = FALSE;
605 uschar *host_data = NULL;
606 BOOL host_find_failed_syntax= FALSE;
607 uschar *host_lookup = NULL;
608 BOOL host_lookup_deferred = FALSE;
609 BOOL host_lookup_failed = FALSE;
610 uschar *host_lookup_order = US"bydns:byaddr";
611 uschar *host_lookup_msg = US"";
613 uschar *host_number_string = NULL;
614 uschar *host_reject_connection = NULL;
615 tree_node *hostlist_anchor = NULL;
616 int hostlist_count = 0;
617 uschar *hosts_treat_as_local = NULL;
618 uschar *hosts_connection_nolog = NULL;
620 int ignore_bounce_errors_after = 10*7*24*60*60; /* 10 weeks */
621 BOOL ignore_fromline_local = FALSE;
622 uschar *ignore_fromline_hosts = NULL;
623 uschar *interface_address = NULL;
624 int interface_port = -1;
625 BOOL is_inetd = FALSE;
629 int keep_malformed = 4*24*60*60; /* 4 days */
631 uschar *eldap_dn = NULL;
632 int load_average = -2;
633 BOOL local_error_message = FALSE;
634 BOOL local_from_check = TRUE;
635 uschar *local_from_prefix = NULL;
636 uschar *local_from_suffix = NULL;
639 uschar *local_interfaces = US"<; ::0 ; 0.0.0.0";
641 uschar *local_interfaces = US"0.0.0.0";
644 uschar *local_scan_data = NULL;
645 int local_scan_timeout = 5*60;
646 BOOL local_sender_retain = FALSE;
647 gid_t local_user_gid = (gid_t)(-1);
648 uid_t local_user_uid = (uid_t)(-1);
650 tree_node *localpartlist_anchor= NULL;
651 int localpartlist_count = 0;
652 uschar *log_buffer = NULL;
653 unsigned int log_extra_selector = LX_default;
654 uschar *log_file_path = US LOG_FILE_PATH
655 "\0<--------------Space to patch log_file_path->";
657 /* Those log options with L_xxx identifiers have values less than 0x800000 and
658 are the ones that get put into log_write_selector. They can be used in calls to
659 log_write() to test for the bit. The options with LX_xxx identifiers have
660 values greater than 0x80000000 and are put int log_extra_selector (without the
661 top bit). They are never used in calls to log_write(), but are tested
662 independently. This separation became necessary when the number of log
663 selectors was getting close to filling a 32-bit word. */
665 bit_table log_options[] = {
666 { US"acl_warn_skipped", LX_acl_warn_skipped },
667 { US"address_rewrite", L_address_rewrite },
669 { US"all_parents", L_all_parents },
670 { US"arguments", LX_arguments },
671 { US"connection_reject", L_connection_reject },
672 { US"delay_delivery", L_delay_delivery },
673 { US"deliver_time", LX_deliver_time },
674 { US"delivery_size", LX_delivery_size },
675 { US"dnslist_defer", L_dnslist_defer },
676 { US"etrn", L_etrn },
677 { US"host_lookup_failed", L_host_lookup_failed },
678 { US"ident_timeout", LX_ident_timeout },
679 { US"incoming_interface", LX_incoming_interface },
680 { US"incoming_port", LX_incoming_port },
681 { US"lost_incoming_connection", L_lost_incoming_connection },
682 { US"outgoing_port", LX_outgoing_port },
683 { US"queue_run", L_queue_run },
684 { US"queue_time", LX_queue_time },
685 { US"queue_time_overall", LX_queue_time_overall },
686 { US"received_recipients", LX_received_recipients },
687 { US"received_sender", LX_received_sender },
688 { US"rejected_header", LX_rejected_header },
689 { US"rejected_headers", LX_rejected_header },
690 { US"retry_defer", L_retry_defer },
691 { US"return_path_on_delivery", LX_return_path_on_delivery },
692 { US"sender_on_delivery", LX_sender_on_delivery },
693 { US"sender_verify_fail", LX_sender_verify_fail },
694 { US"size_reject", L_size_reject },
695 { US"skip_delivery", L_skip_delivery },
696 { US"smtp_confirmation", LX_smtp_confirmation },
697 { US"smtp_connection", L_smtp_connection },
698 { US"smtp_incomplete_transaction", L_smtp_incomplete_transaction },
699 { US"smtp_protocol_error", L_smtp_protocol_error },
700 { US"smtp_syntax_error", L_smtp_syntax_error },
701 { US"subject", LX_subject },
702 { US"tls_certificate_verified", LX_tls_certificate_verified },
703 { US"tls_cipher", LX_tls_cipher },
704 { US"tls_peerdn", LX_tls_peerdn },
705 { US"unknown_in_list", LX_unknown_in_list }
708 int log_options_count = sizeof(log_options)/sizeof(bit_table);
709 int log_reject_target = 0;
710 uschar *log_selector_string = NULL;
711 FILE *log_stderr = NULL;
712 BOOL log_testing_mode = FALSE;
713 BOOL log_timezone = FALSE;
714 unsigned int log_write_selector= L_default;
715 uschar *login_sender_address = NULL;
716 int lookup_open_max = 25;
717 uschar *lookup_value = NULL;
719 macro_item *macros = NULL;
720 uschar *mailstore_basename = NULL;
721 #ifdef WITH_CONTENT_SCAN
722 uschar *malware_name = NULL; /* Virus Name */
724 int max_username_length = 0;
726 uschar *message_body = NULL;
727 uschar *message_body_end = NULL;
728 int message_body_size = 0;
729 int message_body_visible = 500;
730 int message_ended = END_NOTSTARTED;
731 uschar *message_headers = NULL;
733 uschar *message_id_domain = NULL;
734 uschar *message_id_text = NULL;
735 struct timeval message_id_tv = { 0, 0 };
736 uschar message_id_option[MESSAGE_ID_LENGTH + 3];
737 uschar *message_id_external;
738 int message_linecount = 0;
739 BOOL message_logs = TRUE;
740 int message_size = 0;
741 uschar *message_size_limit = US"50M";
742 uschar message_subdir[2] = { 0, 0 };
743 uschar *message_reference = NULL;
745 /* MIME ACL expandables */
746 #ifdef WITH_CONTENT_SCAN
747 int mime_anomaly_level = 0;
748 uschar *mime_anomaly_text = NULL;
749 uschar *mime_boundary = NULL;
750 uschar *mime_charset = NULL;
751 uschar *mime_content_description = NULL;
752 uschar *mime_content_disposition = NULL;
753 uschar *mime_content_id = NULL;
754 unsigned int mime_content_size = 0;
755 uschar *mime_content_transfer_encoding = NULL;
756 uschar *mime_content_type = NULL;
757 uschar *mime_decoded_filename = NULL;
758 uschar *mime_filename = NULL;
759 int mime_is_multipart = 0;
760 int mime_is_coverletter = 0;
761 int mime_is_rfc822 = 0;
762 int mime_part_count = -1;
765 BOOL mua_wrapper = FALSE;
767 uid_t *never_users = NULL;
768 #ifdef WITH_CONTENT_SCAN
769 BOOL no_mbox_unspool = FALSE;
771 BOOL no_multiline_responses = FALSE;
774 gid_t originator_gid;
775 uschar *originator_login = NULL;
776 uschar *originator_name = NULL;
777 uid_t originator_uid;
778 uschar *override_local_interfaces = NULL;
779 uschar *override_pid_file_path = NULL;
781 BOOL parse_allow_group = FALSE;
782 BOOL parse_found_group = FALSE;
783 uschar *percent_hack_domains = NULL;
784 uschar *pid_file_path = US PID_FILE_PATH
785 "\0<--------------Space to patch pid_file_path->";
786 uschar *pipelining_advertise_hosts = US"*";
787 BOOL preserve_message_logs = FALSE;
788 uschar *primary_hostname = NULL;
789 BOOL print_topbitchars = FALSE;
790 uschar process_info[PROCESS_INFO_SIZE];
791 uschar *process_log_path = NULL;
792 BOOL prod_requires_admin = TRUE;
793 uschar *prvscheck_address = NULL;
794 uschar *prvscheck_keynum = NULL;
795 uschar *prvscheck_result = NULL;
798 uschar *qualify_domain_recipient = NULL;
799 uschar *qualify_domain_sender = NULL;
800 BOOL queue_2stage = FALSE;
801 uschar *queue_domains = NULL;
802 int queue_interval = -1;
803 BOOL queue_list_requires_admin = TRUE;
804 BOOL queue_only = FALSE;
805 uschar *queue_only_file = NULL;
806 int queue_only_load = -1;
807 BOOL queue_only_override = TRUE;
808 BOOL queue_only_policy = FALSE;
809 BOOL queue_run_first_delivery = FALSE;
810 BOOL queue_run_force = FALSE;
811 BOOL queue_run_in_order = FALSE;
812 BOOL queue_run_local = FALSE;
813 int queue_run_max = 5;
814 pid_t queue_run_pid = (pid_t)0;
815 int queue_run_pipe = -1;
816 BOOL queue_running = FALSE;
817 BOOL queue_smtp = FALSE;
818 uschar *queue_smtp_domains = NULL;
820 unsigned int random_seed = 0;
821 tree_node *ratelimiters_cmd = NULL;
822 tree_node *ratelimiters_conn = NULL;
823 tree_node *ratelimiters_mail = NULL;
824 uschar *raw_active_hostname = NULL;
825 uschar *raw_sender = NULL;
826 uschar **raw_recipients = NULL;
827 int raw_recipients_count = 0;
830 int rcpt_fail_count = 0;
831 int rcpt_defer_count = 0;
834 BOOL really_exim = TRUE;
835 BOOL receive_call_bombout = FALSE;
836 int receive_linecount = 0;
837 int receive_messagecount = 0;
838 int receive_timeout = 0;
839 int received_count = 0;
840 uschar *received_for = NULL;
842 /* This is the default text for Received headers generated by Exim. The
843 date will be automatically added on the end. */
845 uschar *received_header_text = US
847 "${if def:sender_rcvhost {from $sender_rcvhost\n\t}"
848 "{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}"
849 "${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}"
850 "by $primary_hostname "
851 "${if def:received_protocol {with $received_protocol}} "
853 "${if def:tls_cipher {($tls_cipher)\n\t}}"
855 "(Exim $version_number)\n\t"
856 "${if def:sender_address {(envelope-from <$sender_address>)\n\t}}"
857 "id $message_exim_id"
858 "${if def:received_for {\n\tfor $received_for}}"
859 "\0<---------------Space to patch received_header_text->";
861 int received_headers_max = 30;
862 uschar *received_protocol = NULL;
863 int received_time = 0;
864 uschar *recipient_data = NULL;
865 uschar *recipient_unqualified_hosts = NULL;
866 uschar *recipient_verify_failure = NULL;
867 int recipients_count = 0;
868 BOOL recipients_discarded = FALSE;
869 recipient_item *recipients_list = NULL;
870 int recipients_list_max = 0;
871 int recipients_max = 0;
872 BOOL recipients_max_reject = FALSE;
873 const pcre *regex_AUTH = NULL;
874 const pcre *regex_check_dns_names = NULL;
875 const pcre *regex_From = NULL;
876 const pcre *regex_IGNOREQUOTA = NULL;
877 const pcre *regex_PIPELINING = NULL;
878 const pcre *regex_SIZE = NULL;
879 const pcre *regex_smtp_code = NULL;
880 const pcre *regex_ismsgid = NULL;
881 #ifdef WITH_CONTENT_SCAN
882 uschar *regex_match_string = NULL;
884 int remote_delivery_count = 0;
885 int remote_max_parallel = 2;
886 uschar *remote_sort_domains = NULL;
887 int retry_data_expire = 7*24*60*60;
888 int retry_interval_max = 24*60*60;
889 int retry_maximum_timeout = 0; /* set from retry config */
890 retry_config *retries = NULL;
891 uschar *return_path = NULL;
892 BOOL return_path_remove = TRUE;
893 int rewrite_existflags = 0;
894 uschar *rfc1413_hosts = US"*";
895 int rfc1413_query_timeout = 5;
896 /* BOOL rfc821_domains = FALSE; <<< on the way out */
897 uid_t root_uid = ROOT_UID;
899 router_instance *routers = NULL;
900 router_instance router_defaults = {
901 NULL, /* chain pointer */
904 NULL, /* private options block pointer */
905 NULL, /* driver name */
907 NULL, /* address_data */
908 #ifdef EXPERIMENTAL_BRIGHTMAIL
911 NULL, /* cannot_route_message */
912 NULL, /* condition */
913 NULL, /* current_directory */
914 NULL, /* debug_string */
916 NULL, /* errors_to */
917 NULL, /* expand_gid */
918 NULL, /* expand_uid */
919 NULL, /* expand_more */
920 NULL, /* expand_unseen */
921 NULL, /* extra_headers */
922 NULL, /* fallback_hosts */
923 NULL, /* home_directory */
924 NULL, /* ignore_target_hosts */
925 NULL, /* local_parts */
926 NULL, /* pass_router_name */
928 NULL, /* redirect_router_name */
929 NULL, /* remove_headers */
930 NULL, /* require_files */
931 NULL, /* router_home_directory */
932 US"freeze", /* self */
935 NULL, /* translate_ip_address */
936 NULL, /* transport_name */
938 TRUE, /* address_test */
939 #ifdef EXPERIMENTAL_BRIGHTMAIL
940 FALSE, /* bmi_deliver_alternate */
941 FALSE, /* bmi_deliver_default */
942 FALSE, /* bmi_dont_deliver */
945 FALSE, /* caseful_local_part */
946 FALSE, /* check_local_user */
947 FALSE, /* disable_logging */
948 FALSE, /* fail_verify_recipient */
949 FALSE, /* fail_verify_sender */
951 FALSE, /* initgroups */
952 TRUE_UNSET, /* log_as_local */
954 FALSE, /* pass_on_timeout */
955 FALSE, /* prefix_optional */
956 TRUE, /* repeat_use */
957 TRUE_UNSET, /* retry_use_local_part - fudge "unset" */
958 FALSE, /* same_domain_copy_routing */
959 FALSE, /* self_rewrite */
960 FALSE, /* suffix_optional */
961 FALSE, /* verify_only */
962 TRUE, /* verify_recipient */
963 TRUE, /* verify_sender */
967 self_freeze, /* self_code */
968 (uid_t)(-1), /* uid */
969 (gid_t)(-1), /* gid */
971 NULL, /* fallback_hostlist */
972 NULL, /* transport instance */
973 NULL, /* pass_router */
974 NULL /* redirect_router */
977 ip_address_item *running_interfaces = NULL;
978 BOOL running_in_test_harness = FALSE;
980 /* This is a weird one. The following string gets patched in the binary by the
981 script that sets up a copy of Exim for running in the test harness. It seems
982 that compilers are now clever, and share constant strings if they can.
983 Elsewhere in Exim the string "<" is used. The compiler optimization seems to
984 make use of the end of this string in order to save space. So the patching then
985 wrecks this. We default this optimization by adding some additional characters
986 onto the end of the string. */
988 uschar *running_status = US">>>running<<<" "\0EXTRA";
992 uschar *search_error_message = NULL;
993 BOOL search_find_defer = FALSE;
994 uschar *self_hostname = NULL;
995 uschar *sender_address = NULL;
996 unsigned int sender_address_cache[(MAX_NAMED_LIST * 2)/32];
997 uschar *sender_address_data = NULL;
998 BOOL sender_address_forced = FALSE;
999 uschar *sender_address_unrewritten = NULL;
1000 uschar *sender_data = NULL;
1001 unsigned int sender_domain_cache[(MAX_NAMED_LIST * 2)/32];
1002 uschar *sender_fullhost = NULL;
1003 uschar *sender_helo_name = NULL;
1004 uschar **sender_host_aliases = &no_aliases;
1005 uschar *sender_host_address = NULL;
1006 uschar *sender_host_authenticated = NULL;
1007 unsigned int sender_host_cache[(MAX_NAMED_LIST * 2)/32];
1008 uschar *sender_host_name = NULL;
1009 int sender_host_port = 0;
1010 BOOL sender_host_notsocket = FALSE;
1011 BOOL sender_host_unknown = FALSE;
1012 uschar *sender_ident = NULL;
1013 BOOL sender_local = FALSE;
1014 BOOL sender_name_forced = FALSE;
1015 uschar *sender_rate = NULL;
1016 uschar *sender_rate_limit = NULL;
1017 uschar *sender_rate_period = NULL;
1018 uschar *sender_rcvhost = NULL;
1019 BOOL sender_set_untrusted = FALSE;
1020 uschar *sender_unqualified_hosts = NULL;
1021 uschar *sender_verify_failure = NULL;
1022 address_item *sender_verified_list = NULL;
1023 address_item *sender_verified_failed = NULL;
1024 int sender_verified_rc = -1;
1025 BOOL sender_verified_responded = FALSE;
1026 volatile BOOL sigalrm_seen = FALSE;
1027 uschar **sighup_argv = NULL;
1028 int smtp_accept_count = 0;
1029 BOOL smtp_accept_keepalive = TRUE;
1030 int smtp_accept_max = 20;
1031 int smtp_accept_max_nonmail= 10;
1032 uschar *smtp_accept_max_nonmail_hosts = US"*";
1033 int smtp_accept_max_per_connection = 1000;
1034 uschar *smtp_accept_max_per_host = NULL;
1035 int smtp_accept_queue = 0;
1036 int smtp_accept_queue_per_connection = 10;
1037 int smtp_accept_reserve = 0;
1038 uschar *smtp_active_hostname = NULL;
1039 BOOL smtp_authenticated = FALSE;
1040 uschar *smtp_banner = US"$smtp_active_hostname ESMTP "
1041 "Exim $version_number $tod_full"
1042 "\0<---------------Space to patch smtp_banner->";
1043 BOOL smtp_batched_input = FALSE;
1044 BOOL smtp_check_spool_space = TRUE;
1045 uschar *smtp_cmd_argument = NULL;
1046 uschar *smtp_cmd_buffer = NULL;
1047 int smtp_connect_backlog = 20;
1048 double smtp_delay_mail = 0.0;
1049 double smtp_delay_rcpt = 0.0;
1050 BOOL smtp_enforce_sync = TRUE;
1051 FILE *smtp_in = NULL;
1052 BOOL smtp_input = FALSE;
1053 int smtp_load_reserve = -1;
1054 int smtp_mailcmd_count = 0;
1055 FILE *smtp_out = NULL;
1056 uschar *smtp_etrn_command = NULL;
1057 BOOL smtp_etrn_serialize = TRUE;
1058 int smtp_max_synprot_errors= 3;
1059 int smtp_max_unknown_commands = 3;
1060 uschar *smtp_ratelimit_hosts = NULL;
1061 uschar *smtp_ratelimit_mail = NULL;
1062 uschar *smtp_ratelimit_rcpt = NULL;
1063 uschar *smtp_read_error = US"";
1064 int smtp_receive_timeout = 5*60;
1065 uschar *smtp_reserve_hosts = NULL;
1066 BOOL smtp_return_error_details = FALSE;
1067 int smtp_rlm_base = 0;
1068 double smtp_rlm_factor = 0.0;
1069 int smtp_rlm_limit = 0;
1070 int smtp_rlm_threshold = INT_MAX;
1071 int smtp_rlr_base = 0;
1072 double smtp_rlr_factor = 0.0;
1073 int smtp_rlr_limit = 0;
1074 int smtp_rlr_threshold = INT_MAX;
1075 BOOL smtp_use_pipelining = FALSE;
1076 BOOL smtp_use_size = FALSE;
1078 #ifdef WITH_CONTENT_SCAN
1079 uschar *spamd_address = US"127.0.0.1 783";
1080 uschar *spam_bar = NULL;
1081 uschar *spam_report = NULL;
1082 uschar *spam_score = NULL;
1083 uschar *spam_score_int = NULL;
1085 #ifdef EXPERIMENTAL_SPF
1086 uschar *spf_header_comment = NULL;
1087 uschar *spf_received = NULL;
1088 uschar *spf_result = NULL;
1089 uschar *spf_smtp_comment = NULL;
1092 BOOL split_spool_directory = FALSE;
1093 uschar *spool_directory = US SPOOL_DIRECTORY
1094 "\0<--------------Space to patch spool_directory->";
1095 #ifdef EXPERIMENTAL_SRS
1096 uschar *srs_config = NULL;
1097 uschar *srs_db_address = NULL;
1098 uschar *srs_db_key = NULL;
1099 int srs_hashlength = 6;
1100 int srs_hashmin = -1;
1101 int srs_maxage = 31;
1102 uschar *srs_orig_recipient = NULL;
1103 uschar *srs_orig_sender = NULL;
1104 uschar *srs_recipient = NULL;
1105 uschar *srs_secrets = NULL;
1106 uschar *srs_status = NULL;
1107 BOOL srs_usehash = TRUE;
1108 BOOL srs_usetimestamp = TRUE;
1110 BOOL strict_acl_vars = FALSE;
1111 int string_datestamp_offset= -1;
1112 BOOL strip_excess_angle_brackets = FALSE;
1113 BOOL strip_trailing_dot = FALSE;
1114 uschar *submission_domain = NULL;
1115 BOOL submission_mode = FALSE;
1116 uschar *submission_name = NULL;
1117 BOOL suppress_local_fixups = FALSE;
1118 BOOL synchronous_delivery = FALSE;
1119 BOOL syslog_duplication = TRUE;
1120 int syslog_facility = LOG_MAIL;
1121 uschar *syslog_processname = US"exim";
1122 BOOL syslog_timestamp = TRUE;
1123 uschar *system_filter = NULL;
1125 uschar *system_filter_directory_transport = NULL;
1126 uschar *system_filter_file_transport = NULL;
1127 uschar *system_filter_pipe_transport = NULL;
1128 uschar *system_filter_reply_transport = NULL;
1130 gid_t system_filter_gid = 0;
1131 BOOL system_filter_gid_set = FALSE;
1132 uid_t system_filter_uid = 0;
1133 BOOL system_filter_uid_set = FALSE;
1134 BOOL system_filtering = FALSE;
1136 BOOL tcp_nodelay = TRUE;
1137 int thismessage_size_limit = 0;
1138 int timeout_frozen_after = 0;
1139 BOOL timestamps_utc = FALSE;
1141 transport_instance *transports = NULL;
1143 transport_instance transport_defaults = {
1144 NULL, /* chain pointer */
1147 NULL, /* private options block pointer */
1148 NULL, /* driver name */
1149 NULL, /* setup entry point */
1151 NULL, /* batch_id */
1152 NULL, /* home_dir */
1153 NULL, /* current_dir */
1154 TRUE, /* multi-domain */
1155 FALSE, /* overrides_hosts */
1156 100, /* max_addresses */
1157 500, /* connection_max_messages */
1158 FALSE, /* deliver_as_creator */
1159 FALSE, /* disable_logging */
1160 FALSE, /* initgroups */
1161 FALSE, /* uid_set */
1162 FALSE, /* gid_set */
1163 (uid_t)(-1), /* uid */
1164 (gid_t)(-1), /* gid */
1165 NULL, /* expand_uid */
1166 NULL, /* expand_gid */
1167 NULL, /* warn_message */
1169 NULL, /* shadow_condition */
1170 NULL, /* filter_command */
1171 NULL, /* add_headers */
1172 NULL, /* remove_headers */
1173 NULL, /* return_path */
1174 NULL, /* debug_string */
1175 NULL, /* message_size_limit */
1176 NULL, /* headers_rewrite */
1177 NULL, /* rewrite_rules */
1178 0, /* rewrite_existflags */
1179 300, /* filter_timeout */
1180 FALSE, /* body_only */
1181 FALSE, /* delivery_date_add */
1182 FALSE, /* envelope_to_add */
1183 FALSE, /* headers_only */
1184 FALSE, /* rcpt_include_affixes */
1185 FALSE, /* return_path_add */
1186 FALSE, /* return_output */
1187 FALSE, /* return_fail_output */
1188 FALSE, /* log_output */
1189 FALSE, /* log_fail_output */
1190 FALSE, /* log_defer_output */
1191 TRUE_UNSET /* retry_use_local_part: BOOL, but set neither
1192 1 nor 0 so can detect unset */
1195 int transport_count;
1196 uschar **transport_filter_argv = NULL;
1197 int transport_filter_timeout;
1198 BOOL transport_filter_timed_out = FALSE;
1199 int transport_write_timeout= 0;
1201 tree_node *tree_dns_fails = NULL;
1202 tree_node *tree_duplicates = NULL;
1203 tree_node *tree_nonrecipients = NULL;
1204 tree_node *tree_unusable = NULL;
1206 BOOL trusted_caller = FALSE;
1207 gid_t *trusted_groups = NULL;
1208 uid_t *trusted_users = NULL;
1209 uschar *timezone_string = US TIMEZONE_DEFAULT;
1211 uschar *unknown_login = NULL;
1212 uschar *unknown_username = NULL;
1213 uschar *untrusted_set_sender = NULL;
1215 /* A regex for matching a "From_" line in an incoming message, in the form
1217 From ph10 Fri Jan 5 12:35 GMT 1996
1219 which the "mail" commands send to the MTA (undocumented, of course), or in
1222 From ph10 Fri, 7 Jan 97 14:00:00 GMT
1224 which is apparently used by some UUCPs, despite it not being in RFC 976.
1225 Because of variations in time formats, just match up to the minutes. That
1226 should be sufficient. Examples have been seen of time fields like 12:1:03,
1227 so just require one digit for hours and minutes. The weekday is also absent
1230 uschar *uucp_from_pattern = US
1231 "^From\\s+(\\S+)\\s+(?:[a-zA-Z]{3},?\\s+)?" /* Common start */
1232 "(?:" /* Non-extracting bracket */
1233 "[a-zA-Z]{3}\\s+\\d?\\d|" /* First form */
1234 "\\d?\\d\\s+[a-zA-Z]{3}\\s+\\d\\d(?:\\d\\d)?" /* Second form */
1235 ")" /* End alternation */
1236 "\\s+\\d\\d?:\\d\\d?"; /* Start of time */
1238 uschar *uucp_from_sender = US"$1";
1240 uschar *warn_message_file = NULL;
1241 uschar *warnmsg_delay = NULL;
1242 uschar *warnmsg_recipients = NULL;
1243 BOOL write_rejectlog = TRUE;
1245 uschar *version_copyright = US"Copyright (c) University of Cambridge 2006";
1246 uschar *version_date = US"?";
1247 uschar *version_cnumber = US"????";
1248 uschar *version_string = US"?";
1250 int warning_count = 0;
1252 /* End of globals.c */