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