~ubuntu-branches/ubuntu/precise/exim4/precise-security

« back to all changes in this revision

Viewing changes to .pc/50_localscan_dlopen.dpatch/src/globals.c

  • Committer: Bazaar Package Importer
  • Author(s): Artur Rona
  • Date: 2010-07-25 02:00:42 UTC
  • mfrom: (2.1.7 sid)
  • Revision ID: james.westby@ubuntu.com-20100725020042-bk1uw1p7ysmnsn9f
Tags: 4.72-1ubuntu1
* Merge with Debian unstable (LP: #609620). Remaining changes:
  + debian/patches/71_exiq_grep_error_on_messages_without_size.dpatch:
    Improve handling of broken messages when "exim4 -bp" (mailq) reports
    lines without size info.
  + Don't declare a Provides: default-mta; in Ubuntu, we want postfix to be
    the default.
  + debian/control: Change build dependencies to MySQL 5.1.
  + debian/{control,rules}: add and enable hardened build for PIE
    (Closes: #542726).

Show diffs side-by-side

added added

removed removed

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