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