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