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