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