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