1 /* $Cambridge: exim/src/src/globals.c,v 1.6.2.2 2004/11/26 16:04:26 tom Exp $ */
3 /*************************************************
4 * Exim - an Internet mail transport agent *
5 *************************************************/
7 /* Copyright (c) University of Cambridge 1995 - 2004 */
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_debug_print", opt_stringptr | opt_public,
42 (void *)(offsetof(auth_instance, server_debug_string)) },
43 { "server_mail_auth_condition", opt_stringptr | opt_public,
44 (void *)(offsetof(auth_instance, mail_auth_condition)) },
45 { "server_set_id", opt_stringptr | opt_public,
46 (void *)(offsetof(auth_instance, set_id)) }
49 int optionlist_auths_size = sizeof(optionlist_auths)/sizeof(optionlist);
51 /* An empty host aliases list. */
53 uschar *no_aliases = NULL;
56 /* For comments on these variables, see globals.h. I'm too idle to
57 duplicate them here... */
60 uschar *opt_perl_startup = NULL;
61 BOOL opt_perl_at_start = FALSE;
62 BOOL opt_perl_started = FALSE;
66 uschar *ibase_servers = NULL;
70 uschar *eldap_default_servers = NULL;
71 int eldap_version = -1;
75 uschar *mysql_servers = NULL;
79 uschar *oracle_servers = NULL;
83 uschar *pgsql_servers = NULL;
86 #ifdef SUPPORT_MOVE_FROZEN_MESSAGES
87 BOOL move_frozen_messages = FALSE;
90 /* These variables are outside the #ifdef because it keeps the code less
91 cluttered in several places (e.g. during logging) if we can always refer to
92 them. Also, the tls_ variables are now always visible. */
95 BOOL tls_certificate_verified = FALSE;
96 uschar *tls_cipher = NULL;
97 BOOL tls_on_connect = FALSE;
98 uschar *tls_on_connect_ports = NULL;
99 uschar *tls_peerdn = NULL;
102 const pcre *regex_STARTTLS = NULL;
103 uschar *tls_advertise_hosts = NULL; /* This is deliberate */
104 uschar *tls_certificate = NULL;
105 uschar *tls_crl = NULL;
106 uschar *tls_dhparam = NULL;
107 BOOL tls_offered = FALSE;
108 uschar *tls_privatekey = NULL;
109 BOOL tls_remember_esmtp = FALSE;
110 uschar *tls_require_ciphers = NULL;
111 uschar *tls_try_verify_hosts = NULL;
112 uschar *tls_verify_certificates= NULL;
113 uschar *tls_verify_hosts = NULL;
117 /* Input-reading functions for messages, so we can use special ones for
118 incoming TCP/IP. The defaults use stdin. We never need these for any
119 stand-alone tests. */
122 int (*receive_getc)(void) = stdin_getc;
123 int (*receive_ungetc)(int) = stdin_ungetc;
124 int (*receive_feof)(void) = stdin_feof;
125 int (*receive_ferror)(void) = stdin_ferror;
129 /* List of per-address expansion variables for clearing and saving/restoring
130 when verifying one address while routing/verifying another. We have to have
131 the size explicit, because it is referenced from more than one module. */
133 uschar **address_expansions[ADDRESS_EXPANSIONS_COUNT] = {
134 &deliver_address_data,
136 &deliver_domain_data,
137 &deliver_domain_orig,
138 &deliver_domain_parent,
140 &deliver_localpart_data,
141 &deliver_localpart_orig,
142 &deliver_localpart_parent,
143 &deliver_localpart_prefix,
144 &deliver_localpart_suffix,
145 (uschar **)(&deliver_recipients),
153 int address_expansions_count = sizeof(address_expansions)/sizeof(uschar **);
155 /* General global variables */
157 tree_node *acl_anchor = NULL;
158 uschar *acl_not_smtp = NULL;
159 uschar *acl_smtp_auth = NULL;
160 uschar *acl_smtp_connect = NULL;
161 uschar *acl_smtp_data = NULL;
162 uschar *acl_smtp_etrn = NULL;
163 uschar *acl_smtp_expn = NULL;
164 uschar *acl_smtp_helo = NULL;
165 uschar *acl_smtp_mail = NULL;
166 uschar *acl_smtp_mailauth = NULL;
167 #ifdef WITH_CONTENT_SCAN
168 uschar *acl_smtp_mime = NULL;
170 uschar *acl_smtp_predata = NULL;
171 uschar *acl_smtp_quit = NULL;
172 uschar *acl_smtp_rcpt = NULL;
173 uschar *acl_smtp_starttls = NULL;
174 uschar *acl_smtp_vrfy = NULL;
175 BOOL acl_temp_details = FALSE;
176 uschar *acl_var[ACL_C_MAX+ACL_M_MAX];
177 uschar *acl_verify_message = NULL;
178 header_line *acl_warn_headers = NULL;
179 string_item *acl_warn_logged = NULL;
181 /* Names of SMTP places for use in ACL error messages, and corresponding SMTP
182 error codes - keep in step with definitions of ACL_WHERE_xxxx in macros.h. */
184 uschar *acl_wherenames[] = { US"RCPT",
187 #ifdef WITH_CONTENT_SCAN
203 int acl_wherecodes[] = { 550, /* RCPT */
206 #ifdef WITH_CONTENT_SCAN
210 0, /* not SMTP; not relevant */
216 0, /* MAILAUTH; not relevant */
217 0, /* QUIT; not relevant */
222 BOOL active_local_from_check = FALSE;
223 BOOL active_local_sender_retain = FALSE;
224 BOOL accept_8bitmime = FALSE;
225 address_item *addr_duplicate = NULL;
227 address_item address_defaults = {
232 NULL, /* start_router */
234 NULL, /* transport */
235 NULL, /* host_list */
236 NULL, /* host_used */
237 NULL, /* fallback_hosts */
242 NULL, /* cc_local_part */
243 NULL, /* lc_local_part */
244 NULL, /* local_part */
248 NULL, /* address_retry_key */
249 NULL, /* domain_retry_key */
250 NULL, /* current_dir */
253 NULL, /* user_message */
254 NULL, /* onetime_parent */
255 NULL, /* pipe_expandn */
256 NULL, /* return_filename */
257 NULL, /* self_hostname */
258 NULL, /* shadow_message */
263 (uid_t)(-1), /* uid */
264 (gid_t)(-1), /* gid */
266 { 0 }, /* domain_cache - any larger array should be zeroed */
267 { 0 }, /* localpart_cache - ditto */
270 ERRNO_UNKNOWNERROR, /* basic_errno */
272 -1, /* return_file */
273 SPECIAL_NONE, /* special_action */
274 DEFER, /* transport_return */
275 { /* fields that are propagated to children */
276 NULL, /* address_data */
277 NULL, /* domain_data */
278 NULL, /* localpart_data */
279 NULL, /* errors_address */
280 NULL, /* extra_headers */
281 NULL, /* remove_headers */
285 uschar *address_file = NULL;
286 uschar *address_pipe = NULL;
287 BOOL address_test_mode = FALSE;
288 tree_node *addresslist_anchor = NULL;
289 int addresslist_count = 0;
290 gid_t *admin_groups = NULL;
291 BOOL admin_user = FALSE;
292 BOOL allow_domain_literals = FALSE;
293 BOOL allow_mx_to_ip = FALSE;
294 BOOL allow_unqualified_recipient = TRUE; /* For local messages */
295 BOOL allow_unqualified_sender = TRUE; /* Reset for SMTP */
296 BOOL allow_utf8_domains = FALSE;
297 uschar *authenticated_id = NULL;
298 uschar *authenticated_sender = NULL;
299 BOOL authentication_failed = FALSE;
300 auth_instance *auths = NULL;
301 uschar *auth_advertise_hosts = US"*";
302 auth_instance auth_defaults = {
303 NULL, /* chain pointer */
306 NULL, /* private options block pointer */
307 NULL, /* driver_name */
308 NULL, /* advertise_condition */
309 NULL, /* public_name */
311 NULL, /* server_mail_auth_condition */
312 NULL, /* server_debug_string */
315 FALSE /* advertised */
318 uschar *auth_defer_msg = US"reason not recorded";
319 uschar *auth_defer_user_msg = US"";
321 #ifdef WITH_CONTENT_SCAN
322 uschar *av_scanner = US"sophie:/var/run/sophie"; /* AV scanner */
325 BOOL background_daemon = TRUE;
326 uschar *base62_chars=
327 US"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
328 uschar *bi_command = NULL;
329 uschar *big_buffer = NULL;
330 int big_buffer_size = BIG_BUFFER_SIZE;
331 int body_linecount = 0;
332 int body_zerocount = 0;
333 uschar *bounce_message_file = NULL;
334 uschar *bounce_message_text = NULL;
335 uschar *bounce_recipient = NULL;
336 BOOL bounce_return_body = TRUE;
337 BOOL bounce_return_message = TRUE;
338 int bounce_return_size_limit = 100*1024;
339 uschar *bounce_sender_authentication = NULL;
340 int bsmtp_transaction_linecount = 0;
342 int callout_cache_domain_positive_expire = 7*24*60*60;
343 int callout_cache_domain_negative_expire = 3*60*60;
344 int callout_cache_positive_expire = 24*60*60;
345 int callout_cache_negative_expire = 2*60*60;
346 uschar *callout_random_local_part = US"$primary_hostname-$tod_epoch-testing";
347 uschar *check_dns_names_pattern= US"(?i)^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$";
348 int check_log_inodes = 0;
349 int check_log_space = 0;
350 int check_spool_inodes = 0;
351 int check_spool_space = 0;
352 int clmacro_count = 0;
353 uschar *clmacros[MAX_CLMACROS];
354 BOOL config_changed = FALSE;
355 FILE *config_file = NULL;
356 uschar *config_filename = NULL;
357 int config_lineno = 0;
358 #ifdef CONFIGURE_GROUP
359 gid_t config_gid = CONFIGURE_GROUP;
361 uschar *config_main_filelist = US CONFIGURE_FILE
362 "\0<-----------Space to patch configure_filename->";
363 uschar *config_main_filename = NULL;
365 #ifdef CONFIGURE_OWNER
366 uid_t config_uid = CONFIGURE_OWNER;
369 int connection_max_messages= -1;
370 uschar *continue_hostname = NULL;
371 uschar *continue_host_address = NULL;
372 BOOL continue_more = FALSE;
373 int continue_sequence = 1;
374 uschar *continue_transport = NULL;
376 BOOL daemon_listen = FALSE;
377 uschar *daemon_smtp_port = US"smtp";
378 BOOL debug_daemon = FALSE;
380 FILE *debug_file = NULL;
381 bit_table debug_options[] = {
384 { US"auth", D_auth },
385 { US"deliver", D_deliver },
387 { US"dnsbl", D_dnsbl },
388 { US"exec", D_exec },
389 { US"expand", D_expand },
390 { US"filter", D_filter },
391 { US"hints_lookup", D_hints_lookup },
392 { US"host_lookup", D_host_lookup },
393 { US"ident", D_ident },
394 { US"interface", D_interface },
395 { US"lists", D_lists },
396 { US"load", D_load },
397 { US"local_scan", D_local_scan },
398 { US"lookup", D_lookup },
399 { US"memory", D_memory },
401 { US"process_info", D_process_info },
402 { US"queue_run", D_queue_run },
403 { US"receive", D_receive },
404 { US"resolver", D_resolver },
405 { US"retry", D_retry },
406 { US"rewrite", D_rewrite },
407 { US"route", D_route },
408 { US"timestamp", D_timestamp },
410 { US"transport", D_transport },
412 { US"verify", D_verify }
414 int debug_options_count = sizeof(debug_options)/sizeof(bit_table);
415 unsigned int debug_selector = 0;
416 int delay_warning[DELAY_WARNING_SIZE] = { DELAY_WARNING_SIZE, 1, 24*60*60 };
417 uschar *delay_warning_condition= US"${if match{$h_precedence:}{(?i)bulk|list|junk}{no}{yes}}";
418 BOOL delivery_date_remove = TRUE;
419 uschar *deliver_address_data = NULL;
420 int deliver_datafile = -1;
421 uschar *deliver_domain = NULL;
422 uschar *deliver_domain_data = NULL;
423 uschar *deliver_domain_orig = NULL;
424 uschar *deliver_domain_parent = NULL;
425 BOOL deliver_drop_privilege = FALSE;
426 BOOL deliver_firsttime = FALSE;
427 BOOL deliver_force = FALSE;
428 BOOL deliver_freeze = FALSE;
429 int deliver_frozen_at = 0;
430 uschar *deliver_home = NULL;
431 uschar *deliver_host = NULL;
432 uschar *deliver_host_address = NULL;
433 uschar *deliver_in_buffer = NULL;
434 ino_t deliver_inode = 0;
435 uschar *deliver_localpart = NULL;
436 uschar *deliver_localpart_data = NULL;
437 uschar *deliver_localpart_orig = NULL;
438 uschar *deliver_localpart_parent = NULL;
439 uschar *deliver_localpart_prefix = NULL;
440 uschar *deliver_localpart_suffix = NULL;
441 BOOL deliver_force_thaw = FALSE;
442 BOOL deliver_manual_thaw = FALSE;
443 uschar *deliver_out_buffer = NULL;
444 int deliver_queue_load_max = -1;
445 address_item *deliver_recipients = NULL;
446 uschar *deliver_selectstring = NULL;
447 BOOL deliver_selectstring_regex = FALSE;
448 uschar *deliver_selectstring_sender = NULL;
449 BOOL deliver_selectstring_sender_regex = FALSE;
450 BOOL disable_logging = FALSE;
452 uschar *dns_again_means_nonexist = NULL;
453 uschar *dns_ipv4_lookup = NULL;
456 uschar *dnslist_domain = NULL;
457 uschar *dnslist_text = NULL;
458 uschar *dnslist_value = NULL;
459 tree_node *domainlist_anchor = NULL;
460 int domainlist_count = 0;
461 BOOL dont_deliver = FALSE;
462 BOOL dot_ends = TRUE;
463 BOOL drop_cr = FALSE; /* No longer used */
465 BOOL enable_dollar_recipients = FALSE;
466 BOOL envelope_to_remove = TRUE;
467 int errno_quota = ERRNO_QUOTA;
468 uschar *errors_copy = NULL;
469 int error_handling = ERRORS_SENDER;
470 uschar *errors_reply_to = NULL;
471 int errors_sender_rc = EXIT_FAILURE;
473 gid_t exim_gid = EXIM_GID;
474 BOOL exim_gid_set = TRUE; /* This gid is always set */
475 uschar *exim_path = US BIN_DIRECTORY "/exim"
476 "\0<---------------Space to patch exim_path->";
477 uid_t exim_uid = EXIM_UID;
478 BOOL exim_uid_set = TRUE; /* This uid is always set */
479 int expand_forbid = 0;
480 int expand_nlength[EXPAND_MAXN+1];
481 int expand_nmax = -1;
482 uschar *expand_nstring[EXPAND_MAXN+1];
483 BOOL expand_string_forcedfail = FALSE;
484 uschar *expand_string_message;
485 BOOL extract_addresses_remove_arguments = TRUE;
486 uschar *extra_local_interfaces = NULL;
488 #ifdef WITH_CONTENT_SCAN
489 BOOL fake_reject = FALSE;
491 int filter_n[FILTER_VARIABLE_COUNT];
492 BOOL filter_running = FALSE;
493 int filter_sn[FILTER_VARIABLE_COUNT];
494 uschar *filter_test = NULL;
495 uschar *filter_thisaddress = NULL;
496 int finduser_retries = 0;
497 uid_t fixed_never_users[] = { FIXED_NEVER_USERS };
498 uschar *freeze_tell = NULL;
499 uschar *fudged_queue_times = US"";
501 uschar *gecos_name = NULL;
502 uschar *gecos_pattern = NULL;
503 rewrite_rule *global_rewrite_rules = NULL;
505 uschar *headers_charset = US HEADERS_CHARSET;
506 int header_insert_maxlen = 64 * 1024;
507 header_line *header_last = NULL;
508 header_line *header_list = NULL;
509 int header_maxsize = HEADER_MAXSIZE;
510 int header_line_maxsize = 0;
512 header_name header_names[] = {
513 { US"bcc", 3, TRUE, htype_bcc },
514 { US"cc", 2, TRUE, htype_cc },
515 { US"date", 4, TRUE, htype_date },
516 { US"delivery-date", 13, FALSE, htype_delivery_date },
517 { US"envelope-to", 11, FALSE, htype_envelope_to },
518 { US"from", 4, TRUE, htype_from },
519 { US"message-id", 10, TRUE, htype_id },
520 { US"received", 8, FALSE, htype_received },
521 { US"reply-to", 8, FALSE, htype_reply_to },
522 { US"return-path", 11, FALSE, htype_return_path },
523 { US"sender", 6, TRUE, htype_sender },
524 { US"subject", 7, FALSE, htype_subject },
525 { US"to", 2, TRUE, htype_to }
528 int header_names_size = sizeof(header_names)/sizeof(header_name);
530 BOOL header_rewritten = FALSE;
531 uschar *helo_accept_junk_hosts = NULL;
532 uschar *helo_allow_chars = US"";
533 uschar *helo_lookup_domains = US"@ : @[]";
534 uschar *helo_try_verify_hosts = NULL;
535 BOOL helo_verified = FALSE;
536 uschar *helo_verify_hosts = NULL;
537 uschar *hex_digits = US"0123456789abcdef";
538 uschar *hold_domains = NULL;
539 BOOL host_checking = FALSE;
540 BOOL host_checking_callout = FALSE;
541 uschar *host_data = NULL;
542 BOOL host_find_failed_syntax= FALSE;
543 uschar *host_lookup = NULL;
544 BOOL host_lookup_failed = FALSE;
545 uschar *host_lookup_order = US"bydns:byaddr";
546 uschar *host_lookup_msg = US"";
548 uschar *host_number_string = NULL;
549 uschar *host_reject_connection = NULL;
550 tree_node *hostlist_anchor = NULL;
551 int hostlist_count = 0;
552 uschar *hosts_treat_as_local = NULL;
553 uschar *hosts_connection_nolog = NULL;
555 int ignore_bounce_errors_after = 10*7*24*60*60; /* 10 weeks */
556 BOOL ignore_fromline_local = FALSE;
557 uschar *ignore_fromline_hosts = NULL;
558 uschar *interface_address = NULL;
559 int interface_port = -1;
560 BOOL is_inetd = FALSE;
564 int keep_malformed = 4*24*60*60; /* 4 days */
566 uschar *eldap_dn = NULL;
567 int load_average = -2;
568 BOOL local_error_message = FALSE;
569 BOOL local_from_check = TRUE;
570 uschar *local_from_prefix = NULL;
571 uschar *local_from_suffix = NULL;
574 uschar *local_interfaces = US"<; ::0 ; 0.0.0.0";
576 uschar *local_interfaces = US"0.0.0.0";
579 uschar *local_scan_data = NULL;
580 int local_scan_timeout = 5*60;
581 BOOL local_sender_retain = FALSE;
582 gid_t local_user_gid = (gid_t)(-1);
583 uid_t local_user_uid = (uid_t)(-1);
585 tree_node *localpartlist_anchor= NULL;
586 int localpartlist_count = 0;
587 uschar *log_buffer = NULL;
588 unsigned int log_extra_selector = LX_default;
589 uschar *log_file_path = US LOG_FILE_PATH
590 "\0<--------------Space to patch log_file_path->";
592 /* Those log options with L_xxx identifiers have values less than 0x800000 and
593 are the ones that get put into log_write_selector. They can be used in calls to
594 log_write() to test for the bit. The options with LX_xxx identifiers have
595 values greater than 0x80000000 and are put int log_extra_selector (without the
596 top bit). They are never used in calls to log_write(), but are tested
597 independently. This separation became necessary when the number of log
598 selectors was getting close to filling a 32-bit word. */
600 bit_table log_options[] = {
601 { US"address_rewrite", L_address_rewrite },
603 { US"all_parents", L_all_parents },
604 { US"arguments", LX_arguments },
605 { US"connection_reject", L_connection_reject },
606 { US"delay_delivery", L_delay_delivery },
607 { US"deliver_time", LX_deliver_time },
608 { US"delivery_size", LX_delivery_size },
609 { US"dnslist_defer", L_dnslist_defer },
610 { US"etrn", L_etrn },
611 { US"host_lookup_failed", L_host_lookup_failed },
612 { US"ident_timeout", LX_ident_timeout },
613 { US"incoming_interface", LX_incoming_interface },
614 { US"incoming_port", LX_incoming_port },
615 { US"lost_incoming_connection", L_lost_incoming_connection },
616 { US"outgoing_port", LX_outgoing_port },
617 { US"queue_run", L_queue_run },
618 { US"queue_time", LX_queue_time },
619 { US"received_recipients", LX_received_recipients },
620 { US"received_sender", LX_received_sender },
621 { US"rejected_header", LX_rejected_header },
622 { US"rejected_headers", LX_rejected_header },
623 { US"retry_defer", L_retry_defer },
624 { US"return_path_on_delivery", LX_return_path_on_delivery },
625 { US"sender_on_delivery", LX_sender_on_delivery },
626 { US"size_reject", L_size_reject },
627 { US"skip_delivery", L_skip_delivery },
628 { US"smtp_confirmation", LX_smtp_confirmation },
629 { US"smtp_connection", L_smtp_connection },
630 { US"smtp_incomplete_transaction", L_smtp_incomplete_transaction },
631 { US"smtp_protocol_error", L_smtp_protocol_error },
632 { US"smtp_syntax_error", L_smtp_syntax_error },
633 { US"subject", LX_subject },
634 { US"tls_certificate_verified", LX_tls_certificate_verified },
635 { US"tls_cipher", LX_tls_cipher },
636 { US"tls_peerdn", LX_tls_peerdn }
639 int log_options_count = sizeof(log_options)/sizeof(bit_table);
640 unsigned int log_write_selector= L_default;
641 uschar *log_selector_string = NULL;
642 FILE *log_stderr = NULL;
643 BOOL log_testing_mode = FALSE;
644 BOOL log_timezone = FALSE;
645 uschar *login_sender_address = NULL;
646 int lookup_open_max = 25;
647 uschar *lookup_value = NULL;
649 macro_item *macros = NULL;
650 uschar *mailstore_basename = NULL;
651 #ifdef WITH_CONTENT_SCAN
652 uschar *malware_name = NULL; /* Virus Name */
654 int max_username_length = 0;
656 uschar *message_body = NULL;
657 uschar *message_body_end = NULL;
658 int message_body_size = 0;
659 int message_body_visible = 500;
660 int message_ended = END_NOTSTARTED;
661 uschar *message_headers = NULL;
663 uschar *message_id_domain = NULL;
664 uschar *message_id_text = NULL;
665 struct timeval message_id_tv = { 0, 0 };
666 uschar message_id_option[MESSAGE_ID_LENGTH + 3];
667 uschar *message_id_external;
668 int message_linecount = 0;
669 BOOL message_logs = TRUE;
670 int message_size = 0;
671 uschar *message_size_limit = US"50M";
672 uschar message_subdir[2] = { 0, 0 };
673 uschar *message_reference = NULL;
675 /* MIME ACL expandables */
676 #ifdef WITH_CONTENT_SCAN
677 uschar *mime_anomaly_level = NULL;
678 uschar *mime_anomaly_text = NULL;
679 uschar *mime_boundary = NULL;
680 uschar *mime_charset = NULL;
681 uschar *mime_content_description = NULL;
682 uschar *mime_content_disposition = NULL;
683 uschar *mime_content_id = NULL;
684 unsigned int mime_content_size = 0;
685 uschar *mime_content_transfer_encoding = NULL;
686 uschar *mime_content_type = NULL;
687 uschar *mime_decoded_filename = NULL;
688 uschar *mime_filename = NULL;
689 int mime_is_multipart = 0;
690 int mime_is_coverletter = 0;
691 int mime_is_rfc822 = 0;
692 int mime_part_count = -1;
695 BOOL mua_wrapper = FALSE;
697 uid_t *never_users = NULL;
698 #ifdef WITH_CONTENT_SCAN
699 BOOL no_mbox_unspool = FALSE;
701 BOOL no_multiline_responses = FALSE;
704 gid_t originator_gid;
705 uschar *originator_login = NULL;
706 uschar *originator_name = NULL;
707 uid_t originator_uid;
708 uschar *override_local_interfaces = NULL;
709 uschar *override_pid_file_path = NULL;
711 BOOL parse_allow_group = FALSE;
712 BOOL parse_found_group = FALSE;
713 uschar *percent_hack_domains = NULL;
714 uschar *pid_file_path = US PID_FILE_PATH
715 "\0<--------------Space to patch pid_file_path->";
716 uschar *pipelining_advertise_hosts = US"*";
717 BOOL preserve_message_logs = FALSE;
718 uschar *primary_hostname = NULL;
719 BOOL print_topbitchars = FALSE;
720 uschar process_info[PROCESS_INFO_SIZE];
721 uschar *process_log_path = NULL;
722 BOOL prod_requires_admin = TRUE;
724 uschar *qualify_domain_recipient = NULL;
725 uschar *qualify_domain_sender = NULL;
726 BOOL queue_2stage = FALSE;
727 uschar *queue_domains = NULL;
728 int queue_interval = -1;
729 BOOL queue_list_requires_admin = TRUE;
730 BOOL queue_only = FALSE;
731 uschar *queue_only_file = NULL;
732 int queue_only_load = -1;
733 BOOL queue_only_override = TRUE;
734 BOOL queue_only_policy = FALSE;
735 BOOL queue_run_first_delivery = FALSE;
736 BOOL queue_run_force = FALSE;
737 BOOL queue_run_in_order = FALSE;
738 BOOL queue_run_local = FALSE;
739 int queue_run_max = 5;
740 pid_t queue_run_pid = (pid_t)0;
741 int queue_run_pipe = -1;
742 BOOL queue_running = FALSE;
743 BOOL queue_smtp = FALSE;
744 uschar *queue_smtp_domains = NULL;
746 unsigned int random_seed = 0;
747 uschar *raw_active_hostname = NULL;
748 uschar *raw_sender = NULL;
749 uschar **raw_recipients = NULL;
750 int raw_recipients_count = 0;
753 int rcpt_fail_count = 0;
754 int rcpt_defer_count = 0;
757 BOOL really_exim = TRUE;
758 BOOL receive_call_bombout = FALSE;
759 int receive_linecount = 0;
760 int receive_messagecount = 0;
761 int receive_timeout = 0;
762 int received_count = 0;
763 uschar *received_for = NULL;
765 /* This is the default text for Received headers generated by Exim. The
766 date will be automatically added on the end. */
768 uschar *received_header_text = US
770 "${if def:sender_rcvhost {from $sender_rcvhost\n\t}"
771 "{${if def:sender_ident {from $sender_ident }}"
772 "${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}"
773 "by $primary_hostname "
774 "${if def:received_protocol {with $received_protocol}} "
776 "${if def:tls_cipher {($tls_cipher)\n\t}}"
778 "(Exim $version_number)\n\t"
780 "${if def:received_for {\n\tfor $received_for}}"
781 "\0<---------------Space to patch received_header_text->";
783 int received_headers_max = 30;
784 uschar *received_protocol = NULL;
785 int received_time = 0;
786 uschar *recipient_data = NULL;
787 uschar *recipient_unqualified_hosts = NULL;
788 uschar *recipient_verify_failure = NULL;
789 int recipients_count = 0;
790 BOOL recipients_discarded = FALSE;
791 recipient_item *recipients_list = NULL;
792 int recipients_list_max = 0;
793 int recipients_max = 0;
794 BOOL recipients_max_reject = FALSE;
795 const pcre *regex_AUTH = NULL;
796 const pcre *regex_check_dns_names = NULL;
797 const pcre *regex_From = NULL;
798 const pcre *regex_PIPELINING = NULL;
799 const pcre *regex_SIZE = NULL;
800 const pcre *regex_ismsgid = NULL;
801 #ifdef WITH_CONTENT_SCAN
802 uschar *regex_match_string = NULL;
804 int remote_delivery_count = 0;
805 int remote_max_parallel = 2;
806 uschar *remote_sort_domains = NULL;
807 int retry_data_expire = 7*24*60*60;
808 int retry_interval_max = 24*60*60;
809 int retry_maximum_timeout = 0; /* set from retry config */
810 retry_config *retries = NULL;
811 uschar *return_path = NULL;
812 BOOL return_path_remove = TRUE;
813 int rewrite_existflags = 0;
814 uschar *rfc1413_hosts = US"*";
815 int rfc1413_query_timeout = 30;
816 /* BOOL rfc821_domains = FALSE; <<< on the way out */
817 uid_t root_uid = ROOT_UID;
819 router_instance *routers = NULL;
820 router_instance router_defaults = {
821 NULL, /* chain pointer */
824 NULL, /* private options block pointer */
825 NULL, /* driver name */
827 NULL, /* address_data */
828 NULL, /* cannot_route_message */
829 NULL, /* condition */
830 NULL, /* current_directory */
831 NULL, /* debug_string */
833 NULL, /* errors_to */
834 NULL, /* expand_gid */
835 NULL, /* expand_uid */
836 NULL, /* expand_more */
837 NULL, /* expand_unseen */
838 NULL, /* extra_headers */
839 NULL, /* fallback_hosts */
840 NULL, /* home_directory */
841 NULL, /* ignore_target_hosts */
842 NULL, /* local_parts */
843 NULL, /* pass_router_name */
845 NULL, /* redirect_router_name */
846 NULL, /* remove_headers */
847 NULL, /* require_files */
848 NULL, /* router_home_directory */
849 US"freeze", /* self */
852 NULL, /* translate_ip_address */
853 NULL, /* transport_name */
855 TRUE, /* address_test */
857 FALSE, /* caseful_local_part */
858 FALSE, /* check_local_user */
859 FALSE, /* disable_logging */
860 FALSE, /* fail_verify_recipient */
861 FALSE, /* fail_verify_sender */
863 FALSE, /* initgroups */
864 TRUE_UNSET, /* log_as_local */
866 FALSE, /* pass_on_timeout */
867 FALSE, /* prefix_optional */
868 TRUE, /* repeat_use */
869 TRUE_UNSET, /* retry_use_local_part - fudge "unset" */
870 FALSE, /* same_domain_copy_routing */
871 FALSE, /* self_rewrite */
872 FALSE, /* suffix_optional */
873 FALSE, /* verify_only */
874 TRUE, /* verify_recipient */
875 TRUE, /* verify_sender */
879 self_freeze, /* self_code */
880 (uid_t)(-1), /* uid */
881 (gid_t)(-1), /* gid */
883 NULL, /* fallback_hostlist */
884 NULL, /* transport instance */
885 NULL, /* pass_router */
886 NULL /* redirect_router */
889 ip_address_item *running_interfaces = NULL;
890 BOOL running_in_test_harness = FALSE;
892 /* This is a weird one. The following string gets patched in the binary by the
893 script that sets up a copy of Exim for running in the test harness. It seems
894 that compilers are now clever, and share constant strings if they can.
895 Elsewhere in Exim the string "<" is used. The compiler optimization seems to
896 make use of the end of this string in order to save space. So the patching then
897 wrecks this. We default this optimization by adding some additional characters
898 onto the end of the string. */
900 uschar *running_status = US">>>running<<<" "\0EXTRA";
904 uschar *search_error_message = NULL;
905 BOOL search_find_defer = FALSE;
906 uschar *self_hostname = NULL;
907 uschar *sender_address = NULL;
908 unsigned int sender_address_cache[(MAX_NAMED_LIST * 2)/32];
909 uschar *sender_address_data = NULL;
910 BOOL sender_address_forced = FALSE;
911 uschar *sender_address_unrewritten = NULL;
912 uschar *sender_data = NULL;
913 unsigned int sender_domain_cache[(MAX_NAMED_LIST * 2)/32];
914 uschar *sender_fullhost = NULL;
915 uschar *sender_helo_name = NULL;
916 uschar **sender_host_aliases = &no_aliases;
917 uschar *sender_host_address = NULL;
918 uschar *sender_host_authenticated = NULL;
919 unsigned int sender_host_cache[(MAX_NAMED_LIST * 2)/32];
920 uschar *sender_host_name = NULL;
921 int sender_host_port = 0;
922 BOOL sender_host_notsocket = FALSE;
923 BOOL sender_host_unknown = FALSE;
924 uschar *sender_ident = NULL;
925 BOOL sender_local = FALSE;
926 uschar *sender_rcvhost = NULL;
927 BOOL sender_set_untrusted = FALSE;
928 uschar *sender_unqualified_hosts = NULL;
929 uschar *sender_verify_failure = NULL;
930 address_item *sender_verified_list = NULL;
931 address_item *sender_verified_failed = NULL;
932 int sender_verified_rc = -1;
933 BOOL sender_verified_responded = FALSE;
934 volatile BOOL sigalrm_seen = FALSE;
935 uschar **sighup_argv = NULL;
936 int smtp_accept_count = 0;
937 BOOL smtp_accept_keepalive = TRUE;
938 int smtp_accept_max = 20;
939 int smtp_accept_max_nonmail= 10;
940 uschar *smtp_accept_max_nonmail_hosts = US"*";
941 int smtp_accept_max_per_connection = 1000;
942 uschar *smtp_accept_max_per_host = NULL;
943 int smtp_accept_queue = 0;
944 int smtp_accept_queue_per_connection = 10;
945 int smtp_accept_reserve = 0;
946 uschar *smtp_active_hostname = NULL;
947 BOOL smtp_authenticated = FALSE;
948 uschar *smtp_banner = US"$primary_hostname ESMTP "
949 "Exim $version_number $tod_full"
950 "\0<---------------Space to patch smtp_banner->";
951 BOOL smtp_batched_input = FALSE;
952 BOOL smtp_check_spool_space = TRUE;
953 uschar *smtp_command_argument = NULL;
954 int smtp_connect_backlog = 20;
955 double smtp_delay_mail = 0.0;
956 double smtp_delay_rcpt = 0.0;
957 BOOL smtp_enforce_sync = TRUE;
958 FILE *smtp_in = NULL;
959 BOOL smtp_input = FALSE;
960 int smtp_load_reserve = -1;
961 int smtp_mailcmd_count = 0;
962 FILE *smtp_out = NULL;
963 uschar *smtp_etrn_command = NULL;
964 BOOL smtp_etrn_serialize = TRUE;
965 int smtp_max_synprot_errors= 3;
966 int smtp_max_unknown_commands = 3;
967 uschar *smtp_ratelimit_hosts = NULL;
968 uschar *smtp_ratelimit_mail = NULL;
969 uschar *smtp_ratelimit_rcpt = NULL;
970 uschar *smtp_read_error = US"";
971 int smtp_receive_timeout = 5*60;
972 uschar *smtp_reserve_hosts = NULL;
973 BOOL smtp_return_error_details = FALSE;
974 int smtp_rlm_base = 0;
975 double smtp_rlm_factor = 0.0;
976 int smtp_rlm_limit = 0;
977 int smtp_rlm_threshold = INT_MAX;
978 int smtp_rlr_base = 0;
979 double smtp_rlr_factor = 0.0;
980 int smtp_rlr_limit = 0;
981 int smtp_rlr_threshold = INT_MAX;
982 BOOL smtp_use_pipelining = FALSE;
983 BOOL smtp_use_size = FALSE;
985 #ifdef WITH_CONTENT_SCAN
986 uschar *spamd_address = US"127.0.0.1 783";
987 uschar *spam_bar = NULL;
988 uschar *spam_report = NULL;
989 uschar *spam_score = NULL;
990 uschar *spam_score_int = NULL;
993 BOOL split_spool_directory = FALSE;
994 uschar *spool_directory = US SPOOL_DIRECTORY
995 "\0<--------------Space to patch spool_directory->";
996 int string_datestamp_offset= -1;
997 BOOL strip_excess_angle_brackets = FALSE;
998 BOOL strip_trailing_dot = FALSE;
999 uschar *submission_domain = NULL;
1000 BOOL submission_mode = FALSE;
1001 BOOL synchronous_delivery = FALSE;
1002 BOOL syslog_duplication = TRUE;
1003 int syslog_facility = LOG_MAIL;
1004 uschar *syslog_processname = US"exim";
1005 BOOL syslog_timestamp = TRUE;
1006 uschar *system_filter = NULL;
1008 uschar *system_filter_directory_transport = NULL;
1009 uschar *system_filter_file_transport = NULL;
1010 uschar *system_filter_pipe_transport = NULL;
1011 uschar *system_filter_reply_transport = NULL;
1013 gid_t system_filter_gid = 0;
1014 BOOL system_filter_gid_set = FALSE;
1015 uid_t system_filter_uid = 0;
1016 BOOL system_filter_uid_set = FALSE;
1017 BOOL system_filtering = FALSE;
1019 BOOL tcp_nodelay = TRUE;
1020 int thismessage_size_limit = 0;
1021 int timeout_frozen_after = 0;
1022 BOOL timestamps_utc = FALSE;
1024 transport_instance *transports = NULL;
1026 transport_instance transport_defaults = {
1027 NULL, /* chain pointer */
1030 NULL, /* private options block pointer */
1031 NULL, /* driver name */
1032 NULL, /* setup entry point */
1034 NULL, /* batch_id */
1035 NULL, /* home_dir */
1036 NULL, /* current_dir */
1037 TRUE, /* multi-domain */
1038 FALSE, /* overrides_hosts */
1039 100, /* max_addresses */
1040 500, /* connection_max_messages */
1041 FALSE, /* deliver_as_creator */
1042 FALSE, /* disable_logging */
1043 FALSE, /* initgroups */
1044 FALSE, /* uid_set */
1045 FALSE, /* gid_set */
1046 (uid_t)(-1), /* uid */
1047 (gid_t)(-1), /* gid */
1048 NULL, /* expand_uid */
1049 NULL, /* expand_gid */
1050 NULL, /* warn_message */
1052 NULL, /* shadow_condition */
1053 NULL, /* filter_command */
1054 NULL, /* add_headers */
1055 NULL, /* remove_headers */
1056 NULL, /* return_path */
1057 NULL, /* debug_string */
1058 NULL, /* message_size_limit */
1059 NULL, /* headers_rewrite */
1060 NULL, /* rewrite_rules */
1061 0, /* rewrite_existflags */
1062 300, /* filter_timeout */
1063 FALSE, /* body_only */
1064 FALSE, /* delivery_date_add */
1065 FALSE, /* envelope_to_add */
1066 FALSE, /* headers_only */
1067 FALSE, /* rcpt_include_affixes */
1068 FALSE, /* return_path_add */
1069 FALSE, /* return_output */
1070 FALSE, /* return_fail_output */
1071 FALSE, /* log_output */
1072 FALSE, /* log_fail_output */
1073 FALSE, /* log_defer_output */
1074 TRUE_UNSET /* retry_use_local_part: BOOL, but set neither
1075 1 nor 0 so can detect unset */
1078 int transport_count;
1079 uschar **transport_filter_argv = NULL;
1080 int transport_filter_timeout;
1081 int transport_write_timeout= 0;
1083 tree_node *tree_dns_fails = NULL;
1084 tree_node *tree_duplicates = NULL;
1085 tree_node *tree_nonrecipients = NULL;
1086 tree_node *tree_unusable = NULL;
1088 BOOL trusted_caller = FALSE;
1089 gid_t *trusted_groups = NULL;
1090 uid_t *trusted_users = NULL;
1091 uschar *timezone_string = US TIMEZONE_DEFAULT;
1093 uschar *unknown_login = NULL;
1094 uschar *unknown_username = NULL;
1095 uschar *untrusted_set_sender = NULL;
1097 /* A regex for matching a "From_" line in an incoming message, in the form
1099 From ph10 Fri Jan 5 12:35 GMT 1996
1101 which the "mail" commands send to the MTA (undocumented, of course), or in
1104 From ph10 Fri, 7 Jan 97 14:00:00 GMT
1106 which is apparently used by some UUCPs, despite it not being in RFC 976.
1107 Because of variations in time formats, just match up to the minutes. That
1108 should be sufficient. Examples have been seen of time fields like 12:1:03,
1109 so just require one digit for hours and minutes. The weekday is also absent
1112 uschar *uucp_from_pattern = US
1113 "^From\\s+(\\S+)\\s+(?:[a-zA-Z]{3},?\\s+)?" /* Common start */
1114 "(?:" /* Non-extracting bracket */
1115 "[a-zA-Z]{3}\\s+\\d?\\d|" /* First form */
1116 "\\d?\\d\\s+[a-zA-Z]{3}\\s+\\d\\d(?:\\d\\d)?" /* Second form */
1117 ")" /* End alternation */
1118 "\\s+\\d\\d?:\\d\\d?"; /* Start of time */
1120 uschar *uucp_from_sender = US"$1";
1122 uschar *warn_message_file = NULL;
1123 uschar *warnmsg_delay = NULL;
1124 uschar *warnmsg_recipients = NULL;
1125 BOOL write_rejectlog = TRUE;
1127 uschar *version_copyright = US"Copyright (c) University of Cambridge 2004";
1128 uschar *version_date = US"?";
1129 uschar *version_cnumber = US"????";
1130 uschar *version_string = US"?";
1132 int warning_count = 0;
1134 /* End of globals.c */