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