68b45d8c7d416bf915b83d5196c8a001f5d5e6cc
[exim.git] / src / src / acl.c
1 /* $Cambridge: exim/src/src/acl.c,v 1.88 2010/06/06 00:27:52 pdp 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 /* Code for handling Access Control Lists (ACLs) */
11
12 #include "exim.h"
13
14
15 /* Default callout timeout */
16
17 #define CALLOUT_TIMEOUT_DEFAULT 30
18
19 /* ACL verb codes - keep in step with the table of verbs that follows */
20
21 enum { ACL_ACCEPT, ACL_DEFER, ACL_DENY, ACL_DISCARD, ACL_DROP, ACL_REQUIRE,
22        ACL_WARN };
23
24 /* ACL verbs */
25
26 static uschar *verbs[] =
27   { US"accept", US"defer", US"deny", US"discard", US"drop", US"require",
28     US"warn" };
29
30 /* For each verb, the conditions for which "message" or "log_message" are used
31 are held as a bitmap. This is to avoid expanding the strings unnecessarily. For
32 "accept", the FAIL case is used only after "endpass", but that is selected in
33 the code. */
34
35 static int msgcond[] = {
36   (1<<OK) | (1<<FAIL) | (1<<FAIL_DROP),  /* accept */
37   (1<<OK),                               /* defer */
38   (1<<OK),                               /* deny */
39   (1<<OK) | (1<<FAIL) | (1<<FAIL_DROP),  /* discard */
40   (1<<OK),                               /* drop */
41   (1<<FAIL) | (1<<FAIL_DROP),            /* require */
42   (1<<OK)                                /* warn */
43   };
44
45 /* ACL condition and modifier codes - keep in step with the table that
46 follows, and the cond_expand_at_top and uschar cond_modifiers tables lower
47 down. */
48
49 enum { ACLC_ACL,
50        ACLC_ADD_HEADER,
51        ACLC_AUTHENTICATED,
52 #ifdef EXPERIMENTAL_BRIGHTMAIL
53        ACLC_BMI_OPTIN,
54 #endif
55        ACLC_CONDITION,
56        ACLC_CONTINUE,
57        ACLC_CONTROL,
58 #ifdef EXPERIMENTAL_DCC
59        ACLC_DCC,
60 #endif
61 #ifdef WITH_CONTENT_SCAN
62        ACLC_DECODE,
63 #endif
64        ACLC_DELAY,
65 #ifdef WITH_OLD_DEMIME
66        ACLC_DEMIME,
67 #endif
68 #ifndef DISABLE_DKIM
69        ACLC_DKIM_SIGNER,
70        ACLC_DKIM_STATUS,
71 #endif
72        ACLC_DNSLISTS,
73        ACLC_DOMAINS,
74        ACLC_ENCRYPTED,
75        ACLC_ENDPASS,
76        ACLC_HOSTS,
77        ACLC_LOCAL_PARTS,
78        ACLC_LOG_MESSAGE,
79        ACLC_LOG_REJECT_TARGET,
80        ACLC_LOGWRITE,
81 #ifdef WITH_CONTENT_SCAN
82        ACLC_MALWARE,
83 #endif
84        ACLC_MESSAGE,
85 #ifdef WITH_CONTENT_SCAN
86        ACLC_MIME_REGEX,
87 #endif
88        ACLC_RATELIMIT,
89        ACLC_RECIPIENTS,
90 #ifdef WITH_CONTENT_SCAN
91        ACLC_REGEX,
92 #endif
93        ACLC_SENDER_DOMAINS,
94        ACLC_SENDERS,
95        ACLC_SET,
96 #ifdef WITH_CONTENT_SCAN
97        ACLC_SPAM,
98 #endif
99 #ifdef EXPERIMENTAL_SPF
100        ACLC_SPF,
101        ACLC_SPF_GUESS,
102 #endif
103        ACLC_VERIFY };
104
105 /* ACL conditions/modifiers: "delay", "control", "continue", "endpass",
106 "message", "log_message", "log_reject_target", "logwrite", and "set" are
107 modifiers that look like conditions but always return TRUE. They are used for
108 their side effects. */
109
110 static uschar *conditions[] = {
111   US"acl",
112   US"add_header",
113   US"authenticated",
114 #ifdef EXPERIMENTAL_BRIGHTMAIL
115   US"bmi_optin",
116 #endif
117   US"condition",
118   US"continue",
119   US"control",
120 #ifdef EXPERIMENTAL_DCC
121   US"dcc",
122 #endif
123 #ifdef WITH_CONTENT_SCAN
124   US"decode",
125 #endif
126   US"delay",
127 #ifdef WITH_OLD_DEMIME
128   US"demime",
129 #endif
130 #ifndef DISABLE_DKIM
131   US"dkim_signers",
132   US"dkim_status",
133 #endif
134   US"dnslists",
135   US"domains",
136   US"encrypted",
137   US"endpass",
138   US"hosts",
139   US"local_parts",
140   US"log_message",
141   US"log_reject_target",
142   US"logwrite",
143 #ifdef WITH_CONTENT_SCAN
144   US"malware",
145 #endif
146   US"message",
147 #ifdef WITH_CONTENT_SCAN
148   US"mime_regex",
149 #endif
150   US"ratelimit",
151   US"recipients",
152 #ifdef WITH_CONTENT_SCAN
153   US"regex",
154 #endif
155   US"sender_domains", US"senders", US"set",
156 #ifdef WITH_CONTENT_SCAN
157   US"spam",
158 #endif
159 #ifdef EXPERIMENTAL_SPF
160   US"spf",
161   US"spf_guess",
162 #endif
163   US"verify" };
164
165
166 /* Return values from decode_control(); keep in step with the table of names
167 that follows! */
168
169 enum {
170   CONTROL_AUTH_UNADVERTISED,
171   #ifdef EXPERIMENTAL_BRIGHTMAIL
172   CONTROL_BMI_RUN,
173   #endif
174   CONTROL_DEBUG,
175   #ifndef DISABLE_DKIM
176   CONTROL_DKIM_VERIFY,
177   #endif
178   CONTROL_ERROR,
179   CONTROL_CASEFUL_LOCAL_PART,
180   CONTROL_CASELOWER_LOCAL_PART,
181   CONTROL_ENFORCE_SYNC,
182   CONTROL_NO_ENFORCE_SYNC,
183   CONTROL_FREEZE,
184   CONTROL_QUEUE_ONLY,
185   CONTROL_SUBMISSION,
186   CONTROL_SUPPRESS_LOCAL_FIXUPS,
187   #ifdef WITH_CONTENT_SCAN
188   CONTROL_NO_MBOX_UNSPOOL,
189   #endif
190   CONTROL_FAKEDEFER,
191   CONTROL_FAKEREJECT,
192   CONTROL_NO_MULTILINE,
193   CONTROL_NO_PIPELINING,
194   CONTROL_NO_DELAY_FLUSH,
195   CONTROL_NO_CALLOUT_FLUSH
196 };
197
198 /* ACL control names; keep in step with the table above! This list is used for
199 turning ids into names. The actual list of recognized names is in the variable
200 control_def controls_list[] below. The fact that there are two lists is a mess
201 and should be tidied up. */
202
203 static uschar *controls[] = {
204   US"allow_auth_unadvertised",
205   #ifdef EXPERIMENTAL_BRIGHTMAIL
206   US"bmi_run",
207   #endif
208   US"debug",
209   #ifndef DISABLE_DKIM
210   US"dkim_disable_verify",
211   #endif
212   US"error",
213   US"caseful_local_part",
214   US"caselower_local_part",
215   US"enforce_sync",
216   US"no_enforce_sync",
217   US"freeze",
218   US"queue_only",
219   US"submission",
220   US"suppress_local_fixups",
221   #ifdef WITH_CONTENT_SCAN
222   US"no_mbox_unspool",
223   #endif
224   US"fakedefer",
225   US"fakereject",
226   US"no_multiline_responses",
227   US"no_pipelining",
228   US"no_delay_flush",
229   US"no_callout_flush"
230 };
231
232 /* Flags to indicate for which conditions/modifiers a string expansion is done
233 at the outer level. In the other cases, expansion already occurs in the
234 checking functions. */
235
236 static uschar cond_expand_at_top[] = {
237   TRUE,    /* acl */
238   TRUE,    /* add_header */
239   FALSE,   /* authenticated */
240 #ifdef EXPERIMENTAL_BRIGHTMAIL
241   TRUE,    /* bmi_optin */
242 #endif
243   TRUE,    /* condition */
244   TRUE,    /* continue */
245   TRUE,    /* control */
246 #ifdef EXPERIMENTAL_DCC
247   TRUE,    /* dcc */
248 #endif
249 #ifdef WITH_CONTENT_SCAN
250   TRUE,    /* decode */
251 #endif
252   TRUE,    /* delay */
253 #ifdef WITH_OLD_DEMIME
254   TRUE,    /* demime */
255 #endif
256 #ifndef DISABLE_DKIM
257   TRUE,    /* dkim_signers */
258   TRUE,    /* dkim_status */
259 #endif
260   TRUE,    /* dnslists */
261   FALSE,   /* domains */
262   FALSE,   /* encrypted */
263   TRUE,    /* endpass */
264   FALSE,   /* hosts */
265   FALSE,   /* local_parts */
266   TRUE,    /* log_message */
267   TRUE,    /* log_reject_target */
268   TRUE,    /* logwrite */
269 #ifdef WITH_CONTENT_SCAN
270   TRUE,    /* malware */
271 #endif
272   TRUE,    /* message */
273 #ifdef WITH_CONTENT_SCAN
274   TRUE,    /* mime_regex */
275 #endif
276   TRUE,    /* ratelimit */
277   FALSE,   /* recipients */
278 #ifdef WITH_CONTENT_SCAN
279   TRUE,    /* regex */
280 #endif
281   FALSE,   /* sender_domains */
282   FALSE,   /* senders */
283   TRUE,    /* set */
284 #ifdef WITH_CONTENT_SCAN
285   TRUE,    /* spam */
286 #endif
287 #ifdef EXPERIMENTAL_SPF
288   TRUE,    /* spf */
289   TRUE,    /* spf_guess */
290 #endif
291   TRUE     /* verify */
292 };
293
294 /* Flags to identify the modifiers */
295
296 static uschar cond_modifiers[] = {
297   FALSE,   /* acl */
298   TRUE,    /* add_header */
299   FALSE,   /* authenticated */
300 #ifdef EXPERIMENTAL_BRIGHTMAIL
301   TRUE,    /* bmi_optin */
302 #endif
303   FALSE,   /* condition */
304   TRUE,    /* continue */
305   TRUE,    /* control */
306 #ifdef EXPERIMENTAL_DCC
307   FALSE,   /* dcc */
308 #endif
309 #ifdef WITH_CONTENT_SCAN
310   FALSE,   /* decode */
311 #endif
312   TRUE,    /* delay */
313 #ifdef WITH_OLD_DEMIME
314   FALSE,   /* demime */
315 #endif
316 #ifndef DISABLE_DKIM
317   FALSE,   /* dkim_signers */
318   FALSE,   /* dkim_status */
319 #endif
320   FALSE,   /* dnslists */
321   FALSE,   /* domains */
322   FALSE,   /* encrypted */
323   TRUE,    /* endpass */
324   FALSE,   /* hosts */
325   FALSE,   /* local_parts */
326   TRUE,    /* log_message */
327   TRUE,    /* log_reject_target */
328   TRUE,    /* logwrite */
329 #ifdef WITH_CONTENT_SCAN
330   FALSE,   /* malware */
331 #endif
332   TRUE,    /* message */
333 #ifdef WITH_CONTENT_SCAN
334   FALSE,   /* mime_regex */
335 #endif
336   FALSE,   /* ratelimit */
337   FALSE,   /* recipients */
338 #ifdef WITH_CONTENT_SCAN
339   FALSE,   /* regex */
340 #endif
341   FALSE,   /* sender_domains */
342   FALSE,   /* senders */
343   TRUE,    /* set */
344 #ifdef WITH_CONTENT_SCAN
345   FALSE,   /* spam */
346 #endif
347 #ifdef EXPERIMENTAL_SPF
348   FALSE,   /* spf */
349   FALSE,   /* spf_guess */
350 #endif
351   FALSE    /* verify */
352 };
353
354 /* Bit map vector of which conditions and modifiers are not allowed at certain
355 times. For each condition and modifier, there's a bitmap of dis-allowed times.
356 For some, it is easier to specify the negation of a small number of allowed
357 times. */
358
359 static unsigned int cond_forbids[] = {
360   0,                                               /* acl */
361
362   (unsigned int)
363   ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* add_header */
364     (1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|
365     (1<<ACL_WHERE_MIME)|(1<<ACL_WHERE_NOTSMTP)|
366     (1<<ACL_WHERE_DKIM)|
367     (1<<ACL_WHERE_NOTSMTP_START)),
368
369   (1<<ACL_WHERE_NOTSMTP)|                          /* authenticated */
370     (1<<ACL_WHERE_NOTSMTP_START)|
371     (1<<ACL_WHERE_CONNECT)|(1<<ACL_WHERE_HELO),
372
373   #ifdef EXPERIMENTAL_BRIGHTMAIL
374   (1<<ACL_WHERE_AUTH)|                             /* bmi_optin */
375     (1<<ACL_WHERE_CONNECT)|(1<<ACL_WHERE_HELO)|
376     (1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_MIME)|
377     (1<<ACL_WHERE_ETRN)|(1<<ACL_WHERE_EXPN)|
378     (1<<ACL_WHERE_MAILAUTH)|
379     (1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_STARTTLS)|
380     (1<<ACL_WHERE_VRFY)|(1<<ACL_WHERE_PREDATA)|
381     (1<<ACL_WHERE_NOTSMTP_START),
382   #endif
383
384   0,                                               /* condition */
385
386   0,                                               /* continue */
387
388   /* Certain types of control are always allowed, so we let it through
389   always and check in the control processing itself. */
390
391   0,                                               /* control */
392
393   #ifdef EXPERIMENTAL_DCC
394   (unsigned int)
395   ~((1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP)),   /* dcc */
396   #endif
397
398   #ifdef WITH_CONTENT_SCAN
399   (unsigned int)
400   ~(1<<ACL_WHERE_MIME),                            /* decode */
401   #endif
402
403   (1<<ACL_WHERE_NOTQUIT),                          /* delay */
404
405   #ifdef WITH_OLD_DEMIME
406   (unsigned int)
407   ~((1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP)),   /* demime */
408   #endif
409
410   #ifndef DISABLE_DKIM
411   (unsigned int)
412   ~(1<<ACL_WHERE_DKIM),                            /* dkim_signers */
413
414   (unsigned int)
415   ~(1<<ACL_WHERE_DKIM),                            /* dkim_status */
416   #endif
417
418   (1<<ACL_WHERE_NOTSMTP)|                          /* dnslists */
419     (1<<ACL_WHERE_NOTSMTP_START),
420
421   (unsigned int)
422   ~(1<<ACL_WHERE_RCPT),                            /* domains */
423
424   (1<<ACL_WHERE_NOTSMTP)|                          /* encrypted */
425     (1<<ACL_WHERE_CONNECT)|
426     (1<<ACL_WHERE_NOTSMTP_START)|
427     (1<<ACL_WHERE_HELO),
428
429   0,                                               /* endpass */
430
431   (1<<ACL_WHERE_NOTSMTP)|                          /* hosts */
432     (1<<ACL_WHERE_NOTSMTP_START),
433
434   (unsigned int)
435   ~(1<<ACL_WHERE_RCPT),                            /* local_parts */
436
437   0,                                               /* log_message */
438
439   0,                                               /* log_reject_target */
440
441   0,                                               /* logwrite */
442
443   #ifdef WITH_CONTENT_SCAN
444   (unsigned int)
445   ~((1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP)),   /* malware */
446   #endif
447
448   0,                                               /* message */
449
450   #ifdef WITH_CONTENT_SCAN
451   (unsigned int)
452   ~(1<<ACL_WHERE_MIME),                            /* mime_regex */
453   #endif
454
455   0,                                               /* ratelimit */
456
457   (unsigned int)
458   ~(1<<ACL_WHERE_RCPT),                            /* recipients */
459
460   #ifdef WITH_CONTENT_SCAN
461   (unsigned int)
462   ~((1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP)|    /* regex */
463     (1<<ACL_WHERE_MIME)),
464   #endif
465
466   (1<<ACL_WHERE_AUTH)|(1<<ACL_WHERE_CONNECT)|      /* sender_domains */
467     (1<<ACL_WHERE_HELO)|
468     (1<<ACL_WHERE_MAILAUTH)|(1<<ACL_WHERE_QUIT)|
469     (1<<ACL_WHERE_ETRN)|(1<<ACL_WHERE_EXPN)|
470     (1<<ACL_WHERE_STARTTLS)|(1<<ACL_WHERE_VRFY),
471
472   (1<<ACL_WHERE_AUTH)|(1<<ACL_WHERE_CONNECT)|      /* senders */
473     (1<<ACL_WHERE_HELO)|
474     (1<<ACL_WHERE_MAILAUTH)|(1<<ACL_WHERE_QUIT)|
475     (1<<ACL_WHERE_ETRN)|(1<<ACL_WHERE_EXPN)|
476     (1<<ACL_WHERE_STARTTLS)|(1<<ACL_WHERE_VRFY),
477
478   0,                                               /* set */
479
480   #ifdef WITH_CONTENT_SCAN
481   (unsigned int)
482   ~((1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP)),   /* spam */
483   #endif
484
485   #ifdef EXPERIMENTAL_SPF
486   (1<<ACL_WHERE_AUTH)|(1<<ACL_WHERE_CONNECT)|      /* spf */
487     (1<<ACL_WHERE_HELO)|
488     (1<<ACL_WHERE_MAILAUTH)|
489     (1<<ACL_WHERE_ETRN)|(1<<ACL_WHERE_EXPN)|
490     (1<<ACL_WHERE_STARTTLS)|(1<<ACL_WHERE_VRFY)|
491     (1<<ACL_WHERE_NOTSMTP)|
492     (1<<ACL_WHERE_NOTSMTP_START),
493
494   (1<<ACL_WHERE_AUTH)|(1<<ACL_WHERE_CONNECT)|      /* spf_guess */
495     (1<<ACL_WHERE_HELO)|
496     (1<<ACL_WHERE_MAILAUTH)|
497     (1<<ACL_WHERE_ETRN)|(1<<ACL_WHERE_EXPN)|
498     (1<<ACL_WHERE_STARTTLS)|(1<<ACL_WHERE_VRFY)|
499     (1<<ACL_WHERE_NOTSMTP)|
500     (1<<ACL_WHERE_NOTSMTP_START),
501   #endif
502
503   /* Certain types of verify are always allowed, so we let it through
504   always and check in the verify function itself */
505
506   0                                                /* verify */
507 };
508
509
510 /* Bit map vector of which controls are not allowed at certain times. For
511 each control, there's a bitmap of dis-allowed times. For some, it is easier to
512 specify the negation of a small number of allowed times. */
513
514 static unsigned int control_forbids[] = {
515   (unsigned int)
516   ~((1<<ACL_WHERE_CONNECT)|(1<<ACL_WHERE_HELO)),   /* allow_auth_unadvertised */
517
518   #ifdef EXPERIMENTAL_BRIGHTMAIL
519   0,                                               /* bmi_run */
520   #endif
521
522   0,                                               /* debug */
523
524   #ifndef DISABLE_DKIM
525   (1<<ACL_WHERE_DATA)|(1<<ACL_WHERE_NOTSMTP)|      /* dkim_disable_verify */
526     (1<<ACL_WHERE_NOTSMTP_START),
527   #endif
528
529   0,                                               /* error */
530
531   (unsigned int)
532   ~(1<<ACL_WHERE_RCPT),                            /* caseful_local_part */
533
534   (unsigned int)
535   ~(1<<ACL_WHERE_RCPT),                            /* caselower_local_part */
536
537   (1<<ACL_WHERE_NOTSMTP)|                          /* enforce_sync */
538     (1<<ACL_WHERE_NOTSMTP_START),
539
540   (1<<ACL_WHERE_NOTSMTP)|                          /* no_enforce_sync */
541     (1<<ACL_WHERE_NOTSMTP_START),
542
543   (unsigned int)
544   ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* freeze */
545     (1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|
546     (1<<ACL_WHERE_NOTSMTP)|(1<<ACL_WHERE_MIME)),
547
548   (unsigned int)
549   ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* queue_only */
550     (1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|
551     (1<<ACL_WHERE_NOTSMTP)|(1<<ACL_WHERE_MIME)),
552
553   (unsigned int)
554   ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* submission */
555     (1<<ACL_WHERE_PREDATA)),
556
557   (unsigned int)
558   ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* suppress_local_fixups */
559     (1<<ACL_WHERE_PREDATA)|
560     (1<<ACL_WHERE_NOTSMTP_START)),
561
562   #ifdef WITH_CONTENT_SCAN
563   (unsigned int)
564   ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* no_mbox_unspool */
565     (1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|
566     (1<<ACL_WHERE_MIME)),
567   #endif
568
569   (unsigned int)
570   ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* fakedefer */
571     (1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|
572     (1<<ACL_WHERE_MIME)),
573
574   (unsigned int)
575   ~((1<<ACL_WHERE_MAIL)|(1<<ACL_WHERE_RCPT)|       /* fakereject */
576     (1<<ACL_WHERE_PREDATA)|(1<<ACL_WHERE_DATA)|
577     (1<<ACL_WHERE_MIME)),
578
579   (1<<ACL_WHERE_NOTSMTP)|                          /* no_multiline */
580     (1<<ACL_WHERE_NOTSMTP_START),
581
582   (1<<ACL_WHERE_NOTSMTP)|                          /* no_pipelining */
583     (1<<ACL_WHERE_NOTSMTP_START),
584
585   (1<<ACL_WHERE_NOTSMTP)|                          /* no_delay_flush */
586     (1<<ACL_WHERE_NOTSMTP_START),
587
588   (1<<ACL_WHERE_NOTSMTP)|                          /* no_callout_flush */
589     (1<<ACL_WHERE_NOTSMTP_START)
590 };
591
592 /* Structure listing various control arguments, with their characteristics. */
593
594 typedef struct control_def {
595   uschar *name;
596   int    value;                  /* CONTROL_xxx value */
597   BOOL   has_option;             /* Has /option(s) following */
598 } control_def;
599
600 static control_def controls_list[] = {
601   { US"allow_auth_unadvertised", CONTROL_AUTH_UNADVERTISED, FALSE },
602 #ifdef EXPERIMENTAL_BRIGHTMAIL
603   { US"bmi_run",                 CONTROL_BMI_RUN, FALSE },
604 #endif
605   { US"debug",                   CONTROL_DEBUG, TRUE },
606 #ifndef DISABLE_DKIM
607   { US"dkim_disable_verify",     CONTROL_DKIM_VERIFY, FALSE },
608 #endif
609   { US"caseful_local_part",      CONTROL_CASEFUL_LOCAL_PART, FALSE },
610   { US"caselower_local_part",    CONTROL_CASELOWER_LOCAL_PART, FALSE },
611   { US"enforce_sync",            CONTROL_ENFORCE_SYNC, FALSE },
612   { US"freeze",                  CONTROL_FREEZE, TRUE },
613   { US"no_callout_flush",        CONTROL_NO_CALLOUT_FLUSH, FALSE },
614   { US"no_delay_flush",          CONTROL_NO_DELAY_FLUSH, FALSE },
615   { US"no_enforce_sync",         CONTROL_NO_ENFORCE_SYNC, FALSE },
616   { US"no_multiline_responses",  CONTROL_NO_MULTILINE, FALSE },
617   { US"no_pipelining",           CONTROL_NO_PIPELINING, FALSE },
618   { US"queue_only",              CONTROL_QUEUE_ONLY, FALSE },
619 #ifdef WITH_CONTENT_SCAN
620   { US"no_mbox_unspool",         CONTROL_NO_MBOX_UNSPOOL, FALSE },
621 #endif
622   { US"fakedefer",               CONTROL_FAKEDEFER, TRUE },
623   { US"fakereject",              CONTROL_FAKEREJECT, TRUE },
624   { US"submission",              CONTROL_SUBMISSION, TRUE },
625   { US"suppress_local_fixups",   CONTROL_SUPPRESS_LOCAL_FIXUPS, FALSE }
626   };
627
628 /* Support data structures for Client SMTP Authorization. acl_verify_csa()
629 caches its result in a tree to avoid repeated DNS queries. The result is an
630 integer code which is used as an index into the following tables of
631 explanatory strings and verification return codes. */
632
633 static tree_node *csa_cache = NULL;
634
635 enum { CSA_UNKNOWN, CSA_OK, CSA_DEFER_SRV, CSA_DEFER_ADDR,
636  CSA_FAIL_EXPLICIT, CSA_FAIL_DOMAIN, CSA_FAIL_NOADDR, CSA_FAIL_MISMATCH };
637
638 /* The acl_verify_csa() return code is translated into an acl_verify() return
639 code using the following table. It is OK unless the client is definitely not
640 authorized. This is because CSA is supposed to be optional for sending sites,
641 so recipients should not be too strict about checking it - especially because
642 DNS problems are quite likely to occur. It's possible to use $csa_status in
643 further ACL conditions to distinguish ok, unknown, and defer if required, but
644 the aim is to make the usual configuration simple. */
645
646 static int csa_return_code[] = {
647   OK, OK, OK, OK,
648   FAIL, FAIL, FAIL, FAIL
649 };
650
651 static uschar *csa_status_string[] = {
652   US"unknown", US"ok", US"defer", US"defer",
653   US"fail", US"fail", US"fail", US"fail"
654 };
655
656 static uschar *csa_reason_string[] = {
657   US"unknown",
658   US"ok",
659   US"deferred (SRV lookup failed)",
660   US"deferred (target address lookup failed)",
661   US"failed (explicit authorization required)",
662   US"failed (host name not authorized)",
663   US"failed (no authorized addresses)",
664   US"failed (client address mismatch)"
665 };
666
667 /* Options for the ratelimit condition. Note that there are two variants of
668 the per_rcpt option, depending on the ACL that is used to measure the rate.
669 However any ACL must be able to look up per_rcpt rates in /noupdate mode,
670 so the two variants must have the same internal representation as well as
671 the same configuration string. */
672
673 enum {
674   RATE_PER_WHAT, RATE_PER_CLASH, RATE_PER_ADDR, RATE_PER_BYTE, RATE_PER_CMD,
675   RATE_PER_CONN, RATE_PER_MAIL, RATE_PER_RCPT, RATE_PER_ALLRCPTS
676 };
677
678 #define RATE_SET(var,new) \
679   (((var) == RATE_PER_WHAT) ? ((var) = RATE_##new) : ((var) = RATE_PER_CLASH))
680
681 static uschar *ratelimit_option_string[] = {
682   US"?", US"!", US"per_addr", US"per_byte", US"per_cmd",
683   US"per_conn", US"per_mail", US"per_rcpt", US"per_rcpt"
684 };
685
686 /* Enable recursion between acl_check_internal() and acl_check_condition() */
687
688 static int acl_check_internal(int, address_item *, uschar *, int, uschar **,
689          uschar **);
690
691
692 /*************************************************
693 *         Pick out name from list                *
694 *************************************************/
695
696 /* Use a binary chop method
697
698 Arguments:
699   name        name to find
700   list        list of names
701   end         size of list
702
703 Returns:      offset in list, or -1 if not found
704 */
705
706 static int
707 acl_checkname(uschar *name, uschar **list, int end)
708 {
709 int start = 0;
710
711 while (start < end)
712   {
713   int mid = (start + end)/2;
714   int c = Ustrcmp(name, list[mid]);
715   if (c == 0) return mid;
716   if (c < 0) end = mid; else start = mid + 1;
717   }
718
719 return -1;
720 }
721
722
723 /*************************************************
724 *            Read and parse one ACL              *
725 *************************************************/
726
727 /* This function is called both from readconf in order to parse the ACLs in the
728 configuration file, and also when an ACL is encountered dynamically (e.g. as
729 the result of an expansion). It is given a function to call in order to
730 retrieve the lines of the ACL. This function handles skipping comments and
731 blank lines (where relevant).
732
733 Arguments:
734   func        function to get next line of ACL
735   error       where to put an error message
736
737 Returns:      pointer to ACL, or NULL
738               NULL can be legal (empty ACL); in this case error will be NULL
739 */
740
741 acl_block *
742 acl_read(uschar *(*func)(void), uschar **error)
743 {
744 acl_block *yield = NULL;
745 acl_block **lastp = &yield;
746 acl_block *this = NULL;
747 acl_condition_block *cond;
748 acl_condition_block **condp = NULL;
749 uschar *s;
750
751 *error = NULL;
752
753 while ((s = (*func)()) != NULL)
754   {
755   int v, c;
756   BOOL negated = FALSE;
757   uschar *saveline = s;
758   uschar name[64];
759
760   /* Conditions (but not verbs) are allowed to be negated by an initial
761   exclamation mark. */
762
763   while (isspace(*s)) s++;
764   if (*s == '!')
765     {
766     negated = TRUE;
767     s++;
768     }
769
770   /* Read the name of a verb or a condition, or the start of a new ACL, which
771   can be started by a name, or by a macro definition. */
772
773   s = readconf_readname(name, sizeof(name), s);
774   if (*s == ':' || (isupper(name[0]) && *s == '=')) return yield;
775
776   /* If a verb is unrecognized, it may be another condition or modifier that
777   continues the previous verb. */
778
779   v = acl_checkname(name, verbs, sizeof(verbs)/sizeof(char *));
780   if (v < 0)
781     {
782     if (this == NULL)
783       {
784       *error = string_sprintf("unknown ACL verb \"%s\" in \"%s\"", name,
785         saveline);
786       return NULL;
787       }
788     }
789
790   /* New verb */
791
792   else
793     {
794     if (negated)
795       {
796       *error = string_sprintf("malformed ACL line \"%s\"", saveline);
797       return NULL;
798       }
799     this = store_get(sizeof(acl_block));
800     *lastp = this;
801     lastp = &(this->next);
802     this->next = NULL;
803     this->verb = v;
804     this->condition = NULL;
805     condp = &(this->condition);
806     if (*s == 0) continue;               /* No condition on this line */
807     if (*s == '!')
808       {
809       negated = TRUE;
810       s++;
811       }
812     s = readconf_readname(name, sizeof(name), s);  /* Condition name */
813     }
814
815   /* Handle a condition or modifier. */
816
817   c = acl_checkname(name, conditions, sizeof(conditions)/sizeof(char *));
818   if (c < 0)
819     {
820     *error = string_sprintf("unknown ACL condition/modifier in \"%s\"",
821       saveline);
822     return NULL;
823     }
824
825   /* The modifiers may not be negated */
826
827   if (negated && cond_modifiers[c])
828     {
829     *error = string_sprintf("ACL error: negation is not allowed with "
830       "\"%s\"", conditions[c]);
831     return NULL;
832     }
833
834   /* ENDPASS may occur only with ACCEPT or DISCARD. */
835
836   if (c == ACLC_ENDPASS &&
837       this->verb != ACL_ACCEPT &&
838       this->verb != ACL_DISCARD)
839     {
840     *error = string_sprintf("ACL error: \"%s\" is not allowed with \"%s\"",
841       conditions[c], verbs[this->verb]);
842     return NULL;
843     }
844
845   cond = store_get(sizeof(acl_condition_block));
846   cond->next = NULL;
847   cond->type = c;
848   cond->u.negated = negated;
849
850   *condp = cond;
851   condp = &(cond->next);
852
853   /* The "set" modifier is different in that its argument is "name=value"
854   rather than just a value, and we can check the validity of the name, which
855   gives us a variable name to insert into the data block. The original ACL
856   variable names were acl_c0 ... acl_c9 and acl_m0 ... acl_m9. This was
857   extended to 20 of each type, but after that people successfully argued for
858   arbitrary names. In the new scheme, the names must start with acl_c or acl_m.
859   After that, we allow alphanumerics and underscores, but the first character
860   after c or m must be a digit or an underscore. This retains backwards
861   compatibility. */
862
863   if (c == ACLC_SET)
864     {
865     uschar *endptr;
866
867     if (Ustrncmp(s, "acl_c", 5) != 0 &&
868         Ustrncmp(s, "acl_m", 5) != 0)
869       {
870       *error = string_sprintf("invalid variable name after \"set\" in ACL "
871         "modifier \"set %s\" (must start \"acl_c\" or \"acl_m\")", s);
872       return NULL;
873       }
874
875     endptr = s + 5;
876     if (!isdigit(*endptr) && *endptr != '_')
877       {
878       *error = string_sprintf("invalid variable name after \"set\" in ACL "
879         "modifier \"set %s\" (digit or underscore must follow acl_c or acl_m)",
880         s);
881       return NULL;
882       }
883
884     while (*endptr != 0 && *endptr != '=' && !isspace(*endptr))
885       {
886       if (!isalnum(*endptr) && *endptr != '_')
887         {
888         *error = string_sprintf("invalid character \"%c\" in variable name "
889           "in ACL modifier \"set %s\"", *endptr, s);
890         return NULL;
891         }
892       endptr++;
893       }
894
895     cond->u.varname = string_copyn(s + 4, endptr - s - 4);
896     s = endptr;
897     while (isspace(*s)) s++;
898     }
899
900   /* For "set", we are now positioned for the data. For the others, only
901   "endpass" has no data */
902
903   if (c != ACLC_ENDPASS)
904     {
905     if (*s++ != '=')
906       {
907       *error = string_sprintf("\"=\" missing after ACL \"%s\" %s", name,
908         cond_modifiers[c]? US"modifier" : US"condition");
909       return NULL;
910       }
911     while (isspace(*s)) s++;
912     cond->arg = string_copy(s);
913     }
914   }
915
916 return yield;
917 }
918
919
920
921 /*************************************************
922 *         Set up added header line(s)            *
923 *************************************************/
924
925 /* This function is called by the add_header modifier, and also from acl_warn()
926 to implement the now-deprecated way of adding header lines using "message" on a
927 "warn" verb. The argument is treated as a sequence of header lines which are
928 added to a chain, provided there isn't an identical one already there.
929
930 Argument:   string of header lines
931 Returns:    nothing
932 */
933
934 static void
935 setup_header(uschar *hstring)
936 {
937 uschar *p, *q;
938 int hlen = Ustrlen(hstring);
939
940 /* An empty string does nothing; otherwise add a final newline if necessary. */
941
942 if (hlen <= 0) return;
943 if (hstring[hlen-1] != '\n') hstring = string_sprintf("%s\n", hstring);
944
945 /* Loop for multiple header lines, taking care about continuations */
946
947 for (p = q = hstring; *p != 0; )
948   {
949   uschar *s;
950   int newtype = htype_add_bot;
951   header_line **hptr = &acl_added_headers;
952
953   /* Find next header line within the string */
954
955   for (;;)
956     {
957     q = Ustrchr(q, '\n');
958     if (*(++q) != ' ' && *q != '\t') break;
959     }
960
961   /* If the line starts with a colon, interpret the instruction for where to
962   add it. This temporarily sets up a new type. */
963
964   if (*p == ':')
965     {
966     if (strncmpic(p, US":after_received:", 16) == 0)
967       {
968       newtype = htype_add_rec;
969       p += 16;
970       }
971     else if (strncmpic(p, US":at_start_rfc:", 14) == 0)
972       {
973       newtype = htype_add_rfc;
974       p += 14;
975       }
976     else if (strncmpic(p, US":at_start:", 10) == 0)
977       {
978       newtype = htype_add_top;
979       p += 10;
980       }
981     else if (strncmpic(p, US":at_end:", 8) == 0)
982       {
983       newtype = htype_add_bot;
984       p += 8;
985       }
986     while (*p == ' ' || *p == '\t') p++;
987     }
988
989   /* See if this line starts with a header name, and if not, add X-ACL-Warn:
990   to the front of it. */
991
992   for (s = p; s < q - 1; s++)
993     {
994     if (*s == ':' || !isgraph(*s)) break;
995     }
996
997   s = string_sprintf("%s%.*s", (*s == ':')? "" : "X-ACL-Warn: ", q - p, p);
998   hlen = Ustrlen(s);
999
1000   /* See if this line has already been added */
1001
1002   while (*hptr != NULL)
1003     {
1004     if (Ustrncmp((*hptr)->text, s, hlen) == 0) break;
1005     hptr = &((*hptr)->next);
1006     }
1007
1008   /* Add if not previously present */
1009
1010   if (*hptr == NULL)
1011     {
1012     header_line *h = store_get(sizeof(header_line));
1013     h->text = s;
1014     h->next = NULL;
1015     h->type = newtype;
1016     h->slen = hlen;
1017     *hptr = h;
1018     hptr = &(h->next);
1019     }
1020
1021   /* Advance for next header line within the string */
1022
1023   p = q;
1024   }
1025 }
1026
1027
1028
1029
1030 /*************************************************
1031 *               Handle warnings                  *
1032 *************************************************/
1033
1034 /* This function is called when a WARN verb's conditions are true. It adds to
1035 the message's headers, and/or writes information to the log. In each case, this
1036 only happens once (per message for headers, per connection for log).
1037
1038 ** NOTE: The header adding action using the "message" setting is historic, and
1039 its use is now deprecated. The new add_header modifier should be used instead.
1040
1041 Arguments:
1042   where          ACL_WHERE_xxxx indicating which ACL this is
1043   user_message   message for adding to headers
1044   log_message    message for logging, if different
1045
1046 Returns:         nothing
1047 */
1048
1049 static void
1050 acl_warn(int where, uschar *user_message, uschar *log_message)
1051 {
1052 if (log_message != NULL && log_message != user_message)
1053   {
1054   uschar *text;
1055   string_item *logged;
1056
1057   text = string_sprintf("%s Warning: %s",  host_and_ident(TRUE),
1058     string_printing(log_message));
1059
1060   /* If a sender verification has failed, and the log message is "sender verify
1061   failed", add the failure message. */
1062
1063   if (sender_verified_failed != NULL &&
1064       sender_verified_failed->message != NULL &&
1065       strcmpic(log_message, US"sender verify failed") == 0)
1066     text = string_sprintf("%s: %s", text, sender_verified_failed->message);
1067
1068   /* Search previously logged warnings. They are kept in malloc
1069   store so they can be freed at the start of a new message. */
1070
1071   for (logged = acl_warn_logged; logged != NULL; logged = logged->next)
1072     if (Ustrcmp(logged->text, text) == 0) break;
1073
1074   if (logged == NULL)
1075     {
1076     int length = Ustrlen(text) + 1;
1077     log_write(0, LOG_MAIN, "%s", text);
1078     logged = store_malloc(sizeof(string_item) + length);
1079     logged->text = (uschar *)logged + sizeof(string_item);
1080     memcpy(logged->text, text, length);
1081     logged->next = acl_warn_logged;
1082     acl_warn_logged = logged;
1083     }
1084   }
1085
1086 /* If there's no user message, we are done. */
1087
1088 if (user_message == NULL) return;
1089
1090 /* If this isn't a message ACL, we can't do anything with a user message.
1091 Log an error. */
1092
1093 if (where > ACL_WHERE_NOTSMTP)
1094   {
1095   log_write(0, LOG_MAIN|LOG_PANIC, "ACL \"warn\" with \"message\" setting "
1096     "found in a non-message (%s) ACL: cannot specify header lines here: "
1097     "message ignored", acl_wherenames[where]);
1098   return;
1099   }
1100
1101 /* The code for setting up header lines is now abstracted into a separate
1102 function so that it can be used for the add_header modifier as well. */
1103
1104 setup_header(user_message);
1105 }
1106
1107
1108
1109 /*************************************************
1110 *         Verify and check reverse DNS           *
1111 *************************************************/
1112
1113 /* Called from acl_verify() below. We look up the host name(s) of the client IP
1114 address if this has not yet been done. The host_name_lookup() function checks
1115 that one of these names resolves to an address list that contains the client IP
1116 address, so we don't actually have to do the check here.
1117
1118 Arguments:
1119   user_msgptr  pointer for user message
1120   log_msgptr   pointer for log message
1121
1122 Returns:       OK        verification condition succeeded
1123                FAIL      verification failed
1124                DEFER     there was a problem verifying
1125 */
1126
1127 static int
1128 acl_verify_reverse(uschar **user_msgptr, uschar **log_msgptr)
1129 {
1130 int rc;
1131
1132 user_msgptr = user_msgptr;  /* stop compiler warning */
1133
1134 /* Previous success */
1135
1136 if (sender_host_name != NULL) return OK;
1137
1138 /* Previous failure */
1139
1140 if (host_lookup_failed)
1141   {
1142   *log_msgptr = string_sprintf("host lookup failed%s", host_lookup_msg);
1143   return FAIL;
1144   }
1145
1146 /* Need to do a lookup */
1147
1148 HDEBUG(D_acl)
1149   debug_printf("looking up host name to force name/address consistency check\n");
1150
1151 if ((rc = host_name_lookup()) != OK)
1152   {
1153   *log_msgptr = (rc == DEFER)?
1154     US"host lookup deferred for reverse lookup check"
1155     :
1156     string_sprintf("host lookup failed for reverse lookup check%s",
1157       host_lookup_msg);
1158   return rc;    /* DEFER or FAIL */
1159   }
1160
1161 host_build_sender_fullhost();
1162 return OK;
1163 }
1164
1165
1166
1167 /*************************************************
1168 *   Check client IP address matches CSA target   *
1169 *************************************************/
1170
1171 /* Called from acl_verify_csa() below. This routine scans a section of a DNS
1172 response for address records belonging to the CSA target hostname. The section
1173 is specified by the reset argument, either RESET_ADDITIONAL or RESET_ANSWERS.
1174 If one of the addresses matches the client's IP address, then the client is
1175 authorized by CSA. If there are target IP addresses but none of them match
1176 then the client is using an unauthorized IP address. If there are no target IP
1177 addresses then the client cannot be using an authorized IP address. (This is
1178 an odd configuration - why didn't the SRV record have a weight of 1 instead?)
1179
1180 Arguments:
1181   dnsa       the DNS answer block
1182   dnss       a DNS scan block for us to use
1183   reset      option specifing what portion to scan, as described above
1184   target     the target hostname to use for matching RR names
1185
1186 Returns:     CSA_OK             successfully authorized
1187              CSA_FAIL_MISMATCH  addresses found but none matched
1188              CSA_FAIL_NOADDR    no target addresses found
1189 */
1190
1191 static int
1192 acl_verify_csa_address(dns_answer *dnsa, dns_scan *dnss, int reset,
1193                        uschar *target)
1194 {
1195 dns_record *rr;
1196 dns_address *da;
1197
1198 BOOL target_found = FALSE;
1199
1200 for (rr = dns_next_rr(dnsa, dnss, reset);
1201      rr != NULL;
1202      rr = dns_next_rr(dnsa, dnss, RESET_NEXT))
1203   {
1204   /* Check this is an address RR for the target hostname. */
1205
1206   if (rr->type != T_A
1207     #if HAVE_IPV6
1208       && rr->type != T_AAAA
1209       #ifdef SUPPORT_A6
1210         && rr->type != T_A6
1211       #endif
1212     #endif
1213   ) continue;
1214
1215   if (strcmpic(target, rr->name) != 0) continue;
1216
1217   target_found = TRUE;
1218
1219   /* Turn the target address RR into a list of textual IP addresses and scan
1220   the list. There may be more than one if it is an A6 RR. */
1221
1222   for (da = dns_address_from_rr(dnsa, rr); da != NULL; da = da->next)
1223     {
1224     /* If the client IP address matches the target IP address, it's good! */
1225
1226     DEBUG(D_acl) debug_printf("CSA target address is %s\n", da->address);
1227
1228     if (strcmpic(sender_host_address, da->address) == 0) return CSA_OK;
1229     }
1230   }
1231
1232 /* If we found some target addresses but none of them matched, the client is
1233 using an unauthorized IP address, otherwise the target has no authorized IP
1234 addresses. */
1235
1236 if (target_found) return CSA_FAIL_MISMATCH;
1237 else return CSA_FAIL_NOADDR;
1238 }
1239
1240
1241
1242 /*************************************************
1243 *       Verify Client SMTP Authorization         *
1244 *************************************************/
1245
1246 /* Called from acl_verify() below. This routine calls dns_lookup_special()
1247 to find the CSA SRV record corresponding to the domain argument, or
1248 $sender_helo_name if no argument is provided. It then checks that the
1249 client is authorized, and that its IP address corresponds to the SRV
1250 target's address by calling acl_verify_csa_address() above. The address
1251 should have been returned in the DNS response's ADDITIONAL section, but if
1252 not we perform another DNS lookup to get it.
1253
1254 Arguments:
1255   domain    pointer to optional parameter following verify = csa
1256
1257 Returns:    CSA_UNKNOWN    no valid CSA record found
1258             CSA_OK         successfully authorized
1259             CSA_FAIL_*     client is definitely not authorized
1260             CSA_DEFER_*    there was a DNS problem
1261 */
1262
1263 static int
1264 acl_verify_csa(uschar *domain)
1265 {
1266 tree_node *t;
1267 uschar *found, *p;
1268 int priority, weight, port;
1269 dns_answer dnsa;
1270 dns_scan dnss;
1271 dns_record *rr;
1272 int rc, type;
1273 uschar target[256];
1274
1275 /* Work out the domain we are using for the CSA lookup. The default is the
1276 client's HELO domain. If the client has not said HELO, use its IP address
1277 instead. If it's a local client (exim -bs), CSA isn't applicable. */
1278
1279 while (isspace(*domain) && *domain != '\0') ++domain;
1280 if (*domain == '\0') domain = sender_helo_name;
1281 if (domain == NULL) domain = sender_host_address;
1282 if (sender_host_address == NULL) return CSA_UNKNOWN;
1283
1284 /* If we have an address literal, strip off the framing ready for turning it
1285 into a domain. The framing consists of matched square brackets possibly
1286 containing a keyword and a colon before the actual IP address. */
1287
1288 if (domain[0] == '[')
1289   {
1290   uschar *start = Ustrchr(domain, ':');
1291   if (start == NULL) start = domain;
1292   domain = string_copyn(start + 1, Ustrlen(start) - 2);
1293   }
1294
1295 /* Turn domains that look like bare IP addresses into domains in the reverse
1296 DNS. This code also deals with address literals and $sender_host_address. It's
1297 not quite kosher to treat bare domains such as EHLO 192.0.2.57 the same as
1298 address literals, but it's probably the most friendly thing to do. This is an
1299 extension to CSA, so we allow it to be turned off for proper conformance. */
1300
1301 if (string_is_ip_address(domain, NULL) != 0)
1302   {
1303   if (!dns_csa_use_reverse) return CSA_UNKNOWN;
1304   dns_build_reverse(domain, target);
1305   domain = target;
1306   }
1307
1308 /* Find out if we've already done the CSA check for this domain. If we have,
1309 return the same result again. Otherwise build a new cached result structure
1310 for this domain. The name is filled in now, and the value is filled in when
1311 we return from this function. */
1312
1313 t = tree_search(csa_cache, domain);
1314 if (t != NULL) return t->data.val;
1315
1316 t = store_get_perm(sizeof(tree_node) + Ustrlen(domain));
1317 Ustrcpy(t->name, domain);
1318 (void)tree_insertnode(&csa_cache, t);
1319
1320 /* Now we are ready to do the actual DNS lookup(s). */
1321
1322 found = domain;
1323 switch (dns_special_lookup(&dnsa, domain, T_CSA, &found))
1324   {
1325   /* If something bad happened (most commonly DNS_AGAIN), defer. */
1326
1327   default:
1328   return t->data.val = CSA_DEFER_SRV;
1329
1330   /* If we found nothing, the client's authorization is unknown. */
1331
1332   case DNS_NOMATCH:
1333   case DNS_NODATA:
1334   return t->data.val = CSA_UNKNOWN;
1335
1336   /* We got something! Go on to look at the reply in more detail. */
1337
1338   case DNS_SUCCEED:
1339   break;
1340   }
1341
1342 /* Scan the reply for well-formed CSA SRV records. */
1343
1344 for (rr = dns_next_rr(&dnsa, &dnss, RESET_ANSWERS);
1345      rr != NULL;
1346      rr = dns_next_rr(&dnsa, &dnss, RESET_NEXT))
1347   {
1348   if (rr->type != T_SRV) continue;
1349
1350   /* Extract the numerical SRV fields (p is incremented) */
1351
1352   p = rr->data;
1353   GETSHORT(priority, p);
1354   GETSHORT(weight, p);
1355   GETSHORT(port, p);
1356
1357   DEBUG(D_acl)
1358     debug_printf("CSA priority=%d weight=%d port=%d\n", priority, weight, port);
1359
1360   /* Check the CSA version number */
1361
1362   if (priority != 1) continue;
1363
1364   /* If the domain does not have a CSA SRV record of its own (i.e. the domain
1365   found by dns_special_lookup() is a parent of the one we asked for), we check
1366   the subdomain assertions in the port field. At the moment there's only one
1367   assertion: legitimate SMTP clients are all explicitly authorized with CSA
1368   SRV records of their own. */
1369
1370   if (found != domain)
1371     {
1372     if (port & 1)
1373       return t->data.val = CSA_FAIL_EXPLICIT;
1374     else
1375       return t->data.val = CSA_UNKNOWN;
1376     }
1377
1378   /* This CSA SRV record refers directly to our domain, so we check the value
1379   in the weight field to work out the domain's authorization. 0 and 1 are
1380   unauthorized; 3 means the client is authorized but we can't check the IP
1381   address in order to authenticate it, so we treat it as unknown; values
1382   greater than 3 are undefined. */
1383
1384   if (weight < 2) return t->data.val = CSA_FAIL_DOMAIN;
1385
1386   if (weight > 2) continue;
1387
1388   /* Weight == 2, which means the domain is authorized. We must check that the
1389   client's IP address is listed as one of the SRV target addresses. Save the
1390   target hostname then break to scan the additional data for its addresses. */
1391
1392   (void)dn_expand(dnsa.answer, dnsa.answer + dnsa.answerlen, p,
1393     (DN_EXPAND_ARG4_TYPE)target, sizeof(target));
1394
1395   DEBUG(D_acl) debug_printf("CSA target is %s\n", target);
1396
1397   break;
1398   }
1399
1400 /* If we didn't break the loop then no appropriate records were found. */
1401
1402 if (rr == NULL) return t->data.val = CSA_UNKNOWN;
1403
1404 /* Do not check addresses if the target is ".", in accordance with RFC 2782.
1405 A target of "." indicates there are no valid addresses, so the client cannot
1406 be authorized. (This is an odd configuration because weight=2 target=. is
1407 equivalent to weight=1, but we check for it in order to keep load off the
1408 root name servers.) Note that dn_expand() turns "." into "". */
1409
1410 if (Ustrcmp(target, "") == 0) return t->data.val = CSA_FAIL_NOADDR;
1411
1412 /* Scan the additional section of the CSA SRV reply for addresses belonging
1413 to the target. If the name server didn't return any additional data (e.g.
1414 because it does not fully support SRV records), we need to do another lookup
1415 to obtain the target addresses; otherwise we have a definitive result. */
1416
1417 rc = acl_verify_csa_address(&dnsa, &dnss, RESET_ADDITIONAL, target);
1418 if (rc != CSA_FAIL_NOADDR) return t->data.val = rc;
1419
1420 /* The DNS lookup type corresponds to the IP version used by the client. */
1421
1422 #if HAVE_IPV6
1423 if (Ustrchr(sender_host_address, ':') != NULL)
1424   type = T_AAAA;
1425 else
1426 #endif /* HAVE_IPV6 */
1427   type = T_A;
1428
1429
1430 #if HAVE_IPV6 && defined(SUPPORT_A6)
1431 DNS_LOOKUP_AGAIN:
1432 #endif
1433
1434 switch (dns_lookup(&dnsa, target, type, NULL))
1435   {
1436   /* If something bad happened (most commonly DNS_AGAIN), defer. */
1437
1438   default:
1439   return t->data.val = CSA_DEFER_ADDR;
1440
1441   /* If the query succeeded, scan the addresses and return the result. */
1442
1443   case DNS_SUCCEED:
1444   rc = acl_verify_csa_address(&dnsa, &dnss, RESET_ANSWERS, target);
1445   if (rc != CSA_FAIL_NOADDR) return t->data.val = rc;
1446   /* else fall through */
1447
1448   /* If the target has no IP addresses, the client cannot have an authorized
1449   IP address. However, if the target site uses A6 records (not AAAA records)
1450   we have to do yet another lookup in order to check them. */
1451
1452   case DNS_NOMATCH:
1453   case DNS_NODATA:
1454
1455   #if HAVE_IPV6 && defined(SUPPORT_A6)
1456   if (type == T_AAAA) { type = T_A6; goto DNS_LOOKUP_AGAIN; }
1457   #endif
1458
1459   return t->data.val = CSA_FAIL_NOADDR;
1460   }
1461 }
1462
1463
1464
1465 /*************************************************
1466 *     Handle verification (address & other)      *
1467 *************************************************/
1468
1469 /* This function implements the "verify" condition. It is called when
1470 encountered in any ACL, because some tests are almost always permitted. Some
1471 just don't make sense, and always fail (for example, an attempt to test a host
1472 lookup for a non-TCP/IP message). Others are restricted to certain ACLs.
1473
1474 Arguments:
1475   where        where called from
1476   addr         the recipient address that the ACL is handling, or NULL
1477   arg          the argument of "verify"
1478   user_msgptr  pointer for user message
1479   log_msgptr   pointer for log message
1480   basic_errno  where to put verify errno
1481
1482 Returns:       OK        verification condition succeeded
1483                FAIL      verification failed
1484                DEFER     there was a problem verifying
1485                ERROR     syntax error
1486 */
1487
1488 static int
1489 acl_verify(int where, address_item *addr, uschar *arg,
1490   uschar **user_msgptr, uschar **log_msgptr, int *basic_errno)
1491 {
1492 int sep = '/';
1493 int callout = -1;
1494 int callout_overall = -1;
1495 int callout_connect = -1;
1496 int verify_options = 0;
1497 int rc;
1498 BOOL verify_header_sender = FALSE;
1499 BOOL defer_ok = FALSE;
1500 BOOL callout_defer_ok = FALSE;
1501 BOOL no_details = FALSE;
1502 BOOL success_on_redirect = FALSE;
1503 address_item *sender_vaddr = NULL;
1504 uschar *verify_sender_address = NULL;
1505 uschar *pm_mailfrom = NULL;
1506 uschar *se_mailfrom = NULL;
1507
1508 /* Some of the verify items have slash-separated options; some do not. Diagnose
1509 an error if options are given for items that don't expect them. This code has
1510 now got very message. Refactoring to use a table would be a good idea one day.
1511 */
1512
1513 uschar *slash = Ustrchr(arg, '/');
1514 uschar *list = arg;
1515 uschar *ss = string_nextinlist(&list, &sep, big_buffer, big_buffer_size);
1516
1517 if (ss == NULL) goto BAD_VERIFY;
1518
1519 /* Handle name/address consistency verification in a separate function. */
1520
1521 if (strcmpic(ss, US"reverse_host_lookup") == 0)
1522   {
1523   if (slash != NULL) goto NO_OPTIONS;
1524   if (sender_host_address == NULL) return OK;
1525   return acl_verify_reverse(user_msgptr, log_msgptr);
1526   }
1527
1528 /* TLS certificate verification is done at STARTTLS time; here we just
1529 test whether it was successful or not. (This is for optional verification; for
1530 mandatory verification, the connection doesn't last this long.) */
1531
1532 if (strcmpic(ss, US"certificate") == 0)
1533   {
1534   if (slash != NULL) goto NO_OPTIONS;
1535   if (tls_certificate_verified) return OK;
1536   *user_msgptr = US"no verified certificate";
1537   return FAIL;
1538   }
1539
1540 /* We can test the result of optional HELO verification that might have
1541 occurred earlier. If not, we can attempt the verification now. */
1542
1543 if (strcmpic(ss, US"helo") == 0)
1544   {
1545   if (slash != NULL) goto NO_OPTIONS;
1546   if (!helo_verified && !helo_verify_failed) smtp_verify_helo();
1547   return helo_verified? OK : FAIL;
1548   }
1549
1550 /* Do Client SMTP Authorization checks in a separate function, and turn the
1551 result code into user-friendly strings. */
1552
1553 if (strcmpic(ss, US"csa") == 0)
1554   {
1555   rc = acl_verify_csa(list);
1556   *log_msgptr = *user_msgptr = string_sprintf("client SMTP authorization %s",
1557                                               csa_reason_string[rc]);
1558   csa_status = csa_status_string[rc];
1559   DEBUG(D_acl) debug_printf("CSA result %s\n", csa_status);
1560   return csa_return_code[rc];
1561   }
1562
1563 /* Check that all relevant header lines have the correct syntax. If there is
1564 a syntax error, we return details of the error to the sender if configured to
1565 send out full details. (But a "message" setting on the ACL can override, as
1566 always). */
1567
1568 if (strcmpic(ss, US"header_syntax") == 0)
1569   {
1570   if (slash != NULL) goto NO_OPTIONS;
1571   if (where != ACL_WHERE_DATA && where != ACL_WHERE_NOTSMTP) goto WRONG_ACL;
1572   rc = verify_check_headers(log_msgptr);
1573   if (rc != OK && smtp_return_error_details && *log_msgptr != NULL)
1574     *user_msgptr = string_sprintf("Rejected after DATA: %s", *log_msgptr);
1575   return rc;
1576   }
1577
1578 /* Check that no recipient of this message is "blind", that is, every envelope
1579 recipient must be mentioned in either To: or Cc:. */
1580
1581 if (strcmpic(ss, US"not_blind") == 0)
1582   {
1583   if (slash != NULL) goto NO_OPTIONS;
1584   if (where != ACL_WHERE_DATA && where != ACL_WHERE_NOTSMTP) goto WRONG_ACL;
1585   rc = verify_check_notblind();
1586   if (rc != OK)
1587     {
1588     *log_msgptr = string_sprintf("bcc recipient detected");
1589     if (smtp_return_error_details)
1590       *user_msgptr = string_sprintf("Rejected after DATA: %s", *log_msgptr);
1591     }
1592   return rc;
1593   }
1594
1595 /* The remaining verification tests check recipient and sender addresses,
1596 either from the envelope or from the header. There are a number of
1597 slash-separated options that are common to all of them. */
1598
1599
1600 /* Check that there is at least one verifiable sender address in the relevant
1601 header lines. This can be followed by callout and defer options, just like
1602 sender and recipient. */
1603
1604 if (strcmpic(ss, US"header_sender") == 0)
1605   {
1606   if (where != ACL_WHERE_DATA && where != ACL_WHERE_NOTSMTP) goto WRONG_ACL;
1607   verify_header_sender = TRUE;
1608   }
1609
1610 /* Otherwise, first item in verify argument must be "sender" or "recipient".
1611 In the case of a sender, this can optionally be followed by an address to use
1612 in place of the actual sender (rare special-case requirement). */
1613
1614 else if (strncmpic(ss, US"sender", 6) == 0)
1615   {
1616   uschar *s = ss + 6;
1617   if (where > ACL_WHERE_NOTSMTP)
1618     {
1619     *log_msgptr = string_sprintf("cannot verify sender in ACL for %s "
1620       "(only possible for MAIL, RCPT, PREDATA, or DATA)",
1621       acl_wherenames[where]);
1622     return ERROR;
1623     }
1624   if (*s == 0)
1625     verify_sender_address = sender_address;
1626   else
1627     {
1628     while (isspace(*s)) s++;
1629     if (*s++ != '=') goto BAD_VERIFY;
1630     while (isspace(*s)) s++;
1631     verify_sender_address = string_copy(s);
1632     }
1633   }
1634 else
1635   {
1636   if (strcmpic(ss, US"recipient") != 0) goto BAD_VERIFY;
1637   if (addr == NULL)
1638     {
1639     *log_msgptr = string_sprintf("cannot verify recipient in ACL for %s "
1640       "(only possible for RCPT)", acl_wherenames[where]);
1641     return ERROR;
1642     }
1643   }
1644
1645 /* Remaining items are optional; they apply to sender and recipient
1646 verification, including "header sender" verification. */
1647
1648 while ((ss = string_nextinlist(&list, &sep, big_buffer, big_buffer_size))
1649       != NULL)
1650   {
1651   if (strcmpic(ss, US"defer_ok") == 0) defer_ok = TRUE;
1652   else if (strcmpic(ss, US"no_details") == 0) no_details = TRUE;
1653   else if (strcmpic(ss, US"success_on_redirect") == 0) success_on_redirect = TRUE;
1654
1655   /* These two old options are left for backwards compatibility */
1656
1657   else if (strcmpic(ss, US"callout_defer_ok") == 0)
1658     {
1659     callout_defer_ok = TRUE;
1660     if (callout == -1) callout = CALLOUT_TIMEOUT_DEFAULT;
1661     }
1662
1663   else if (strcmpic(ss, US"check_postmaster") == 0)
1664      {
1665      pm_mailfrom = US"";
1666      if (callout == -1) callout = CALLOUT_TIMEOUT_DEFAULT;
1667      }
1668
1669   /* The callout option has a number of sub-options, comma separated */
1670
1671   else if (strncmpic(ss, US"callout", 7) == 0)
1672     {
1673     callout = CALLOUT_TIMEOUT_DEFAULT;
1674     ss += 7;
1675     if (*ss != 0)
1676       {
1677       while (isspace(*ss)) ss++;
1678       if (*ss++ == '=')
1679         {
1680         int optsep = ',';
1681         uschar *opt;
1682         uschar buffer[256];
1683         while (isspace(*ss)) ss++;
1684
1685         /* This callout option handling code has become a mess as new options
1686         have been added in an ad hoc manner. It should be tidied up into some
1687         kind of table-driven thing. */
1688
1689         while ((opt = string_nextinlist(&ss, &optsep, buffer, sizeof(buffer)))
1690               != NULL)
1691           {
1692           if (strcmpic(opt, US"defer_ok") == 0) callout_defer_ok = TRUE;
1693           else if (strcmpic(opt, US"no_cache") == 0)
1694              verify_options |= vopt_callout_no_cache;
1695           else if (strcmpic(opt, US"random") == 0)
1696              verify_options |= vopt_callout_random;
1697           else if (strcmpic(opt, US"use_sender") == 0)
1698              verify_options |= vopt_callout_recipsender;
1699           else if (strcmpic(opt, US"use_postmaster") == 0)
1700              verify_options |= vopt_callout_recippmaster;
1701           else if (strcmpic(opt, US"postmaster") == 0) pm_mailfrom = US"";
1702           else if (strcmpic(opt, US"fullpostmaster") == 0)
1703             {
1704             pm_mailfrom = US"";
1705             verify_options |= vopt_callout_fullpm;
1706             }
1707
1708           else if (strncmpic(opt, US"mailfrom", 8) == 0)
1709             {
1710             if (!verify_header_sender)
1711               {
1712               *log_msgptr = string_sprintf("\"mailfrom\" is allowed as a "
1713                 "callout option only for verify=header_sender (detected in ACL "
1714                 "condition \"%s\")", arg);
1715               return ERROR;
1716               }
1717             opt += 8;
1718             while (isspace(*opt)) opt++;
1719             if (*opt++ != '=')
1720               {
1721               *log_msgptr = string_sprintf("'=' expected after "
1722                 "\"mailfrom\" in ACL condition \"%s\"", arg);
1723               return ERROR;
1724               }
1725             while (isspace(*opt)) opt++;
1726             se_mailfrom = string_copy(opt);
1727             }
1728
1729           else if (strncmpic(opt, US"postmaster_mailfrom", 19) == 0)
1730             {
1731             opt += 19;
1732             while (isspace(*opt)) opt++;
1733             if (*opt++ != '=')
1734               {
1735               *log_msgptr = string_sprintf("'=' expected after "
1736                 "\"postmaster_mailfrom\" in ACL condition \"%s\"", arg);
1737               return ERROR;
1738               }
1739             while (isspace(*opt)) opt++;
1740             pm_mailfrom = string_copy(opt);
1741             }
1742
1743           else if (strncmpic(opt, US"maxwait", 7) == 0)
1744             {
1745             opt += 7;
1746             while (isspace(*opt)) opt++;
1747             if (*opt++ != '=')
1748               {
1749               *log_msgptr = string_sprintf("'=' expected after \"maxwait\" in "
1750                 "ACL condition \"%s\"", arg);
1751               return ERROR;
1752               }
1753             while (isspace(*opt)) opt++;
1754             callout_overall = readconf_readtime(opt, 0, FALSE);
1755             if (callout_overall < 0)
1756               {
1757               *log_msgptr = string_sprintf("bad time value in ACL condition "
1758                 "\"verify %s\"", arg);
1759               return ERROR;
1760               }
1761             }
1762           else if (strncmpic(opt, US"connect", 7) == 0)
1763             {
1764             opt += 7;
1765             while (isspace(*opt)) opt++;
1766             if (*opt++ != '=')
1767               {
1768               *log_msgptr = string_sprintf("'=' expected after "
1769                 "\"callout_overaall\" in ACL condition \"%s\"", arg);
1770               return ERROR;
1771               }
1772             while (isspace(*opt)) opt++;
1773             callout_connect = readconf_readtime(opt, 0, FALSE);
1774             if (callout_connect < 0)
1775               {
1776               *log_msgptr = string_sprintf("bad time value in ACL condition "
1777                 "\"verify %s\"", arg);
1778               return ERROR;
1779               }
1780             }
1781           else    /* Plain time is callout connect/command timeout */
1782             {
1783             callout = readconf_readtime(opt, 0, FALSE);
1784             if (callout < 0)
1785               {
1786               *log_msgptr = string_sprintf("bad time value in ACL condition "
1787                 "\"verify %s\"", arg);
1788               return ERROR;
1789               }
1790             }
1791           }
1792         }
1793       else
1794         {
1795         *log_msgptr = string_sprintf("'=' expected after \"callout\" in "
1796           "ACL condition \"%s\"", arg);
1797         return ERROR;
1798         }
1799       }
1800     }
1801
1802   /* Option not recognized */
1803
1804   else
1805     {
1806     *log_msgptr = string_sprintf("unknown option \"%s\" in ACL "
1807       "condition \"verify %s\"", ss, arg);
1808     return ERROR;
1809     }
1810   }
1811
1812 if ((verify_options & (vopt_callout_recipsender|vopt_callout_recippmaster)) ==
1813       (vopt_callout_recipsender|vopt_callout_recippmaster))
1814   {
1815   *log_msgptr = US"only one of use_sender and use_postmaster can be set "
1816     "for a recipient callout";
1817   return ERROR;
1818   }
1819
1820 /* Handle sender-in-header verification. Default the user message to the log
1821 message if giving out verification details. */
1822
1823 if (verify_header_sender)
1824   {
1825   int verrno;
1826   rc = verify_check_header_address(user_msgptr, log_msgptr, callout,
1827     callout_overall, callout_connect, se_mailfrom, pm_mailfrom, verify_options,
1828     &verrno);
1829   if (rc != OK)
1830     {
1831     *basic_errno = verrno;
1832     if (smtp_return_error_details)
1833       {
1834       if (*user_msgptr == NULL && *log_msgptr != NULL)
1835         *user_msgptr = string_sprintf("Rejected after DATA: %s", *log_msgptr);
1836       if (rc == DEFER) acl_temp_details = TRUE;
1837       }
1838     }
1839   }
1840
1841 /* Handle a sender address. The default is to verify *the* sender address, but
1842 optionally a different address can be given, for special requirements. If the
1843 address is empty, we are dealing with a bounce message that has no sender, so
1844 we cannot do any checking. If the real sender address gets rewritten during
1845 verification (e.g. DNS widening), set the flag to stop it being rewritten again
1846 during message reception.
1847
1848 A list of verified "sender" addresses is kept to try to avoid doing to much
1849 work repetitively when there are multiple recipients in a message and they all
1850 require sender verification. However, when callouts are involved, it gets too
1851 complicated because different recipients may require different callout options.
1852 Therefore, we always do a full sender verify when any kind of callout is
1853 specified. Caching elsewhere, for instance in the DNS resolver and in the
1854 callout handling, should ensure that this is not terribly inefficient. */
1855
1856 else if (verify_sender_address != NULL)
1857   {
1858   if ((verify_options & (vopt_callout_recipsender|vopt_callout_recippmaster))
1859        != 0)
1860     {
1861     *log_msgptr = US"use_sender or use_postmaster cannot be used for a "
1862       "sender verify callout";
1863     return ERROR;
1864     }
1865
1866   sender_vaddr = verify_checked_sender(verify_sender_address);
1867   if (sender_vaddr != NULL &&               /* Previously checked */
1868       callout <= 0)                         /* No callout needed this time */
1869     {
1870     /* If the "routed" flag is set, it means that routing worked before, so
1871     this check can give OK (the saved return code value, if set, belongs to a
1872     callout that was done previously). If the "routed" flag is not set, routing
1873     must have failed, so we use the saved return code. */
1874
1875     if (testflag(sender_vaddr, af_verify_routed)) rc = OK; else
1876       {
1877       rc = sender_vaddr->special_action;
1878       *basic_errno = sender_vaddr->basic_errno;
1879       }
1880     HDEBUG(D_acl) debug_printf("using cached sender verify result\n");
1881     }
1882
1883   /* Do a new verification, and cache the result. The cache is used to avoid
1884   verifying the sender multiple times for multiple RCPTs when callouts are not
1885   specified (see comments above).
1886
1887   The cache is also used on failure to give details in response to the first
1888   RCPT that gets bounced for this reason. However, this can be suppressed by
1889   the no_details option, which sets the flag that says "this detail has already
1890   been sent". The cache normally contains just one address, but there may be
1891   more in esoteric circumstances. */
1892
1893   else
1894     {
1895     BOOL routed = TRUE;
1896     uschar *save_address_data = deliver_address_data;
1897
1898     sender_vaddr = deliver_make_addr(verify_sender_address, TRUE);
1899     if (no_details) setflag(sender_vaddr, af_sverify_told);
1900     if (verify_sender_address[0] != 0)
1901       {
1902       /* If this is the real sender address, save the unrewritten version
1903       for use later in receive. Otherwise, set a flag so that rewriting the
1904       sender in verify_address() does not update sender_address. */
1905
1906       if (verify_sender_address == sender_address)
1907         sender_address_unrewritten = sender_address;
1908       else
1909         verify_options |= vopt_fake_sender;
1910
1911       if (success_on_redirect)
1912         verify_options |= vopt_success_on_redirect;
1913
1914       /* The recipient, qualify, and expn options are never set in
1915       verify_options. */
1916
1917       rc = verify_address(sender_vaddr, NULL, verify_options, callout,
1918         callout_overall, callout_connect, se_mailfrom, pm_mailfrom, &routed);
1919
1920       HDEBUG(D_acl) debug_printf("----------- end verify ------------\n");
1921
1922       if (rc == OK)
1923         {
1924         if (Ustrcmp(sender_vaddr->address, verify_sender_address) != 0)
1925           {
1926           DEBUG(D_acl) debug_printf("sender %s verified ok as %s\n",
1927             verify_sender_address, sender_vaddr->address);
1928           }
1929         else
1930           {
1931           DEBUG(D_acl) debug_printf("sender %s verified ok\n",
1932             verify_sender_address);
1933           }
1934         }
1935       else *basic_errno = sender_vaddr->basic_errno;
1936       }
1937     else rc = OK;  /* Null sender */
1938
1939     /* Cache the result code */
1940
1941     if (routed) setflag(sender_vaddr, af_verify_routed);
1942     if (callout > 0) setflag(sender_vaddr, af_verify_callout);
1943     sender_vaddr->special_action = rc;
1944     sender_vaddr->next = sender_verified_list;
1945     sender_verified_list = sender_vaddr;
1946
1947     /* Restore the recipient address data, which might have been clobbered by
1948     the sender verification. */
1949
1950     deliver_address_data = save_address_data;
1951     }
1952
1953   /* Put the sender address_data value into $sender_address_data */
1954
1955   sender_address_data = sender_vaddr->p.address_data;
1956   }
1957
1958 /* A recipient address just gets a straightforward verify; again we must handle
1959 the DEFER overrides. */
1960
1961 else
1962   {
1963   address_item addr2;
1964
1965   if (success_on_redirect)
1966     verify_options |= vopt_success_on_redirect;
1967
1968   /* We must use a copy of the address for verification, because it might
1969   get rewritten. */
1970
1971   addr2 = *addr;
1972   rc = verify_address(&addr2, NULL, verify_options|vopt_is_recipient, callout,
1973     callout_overall, callout_connect, se_mailfrom, pm_mailfrom, NULL);
1974   HDEBUG(D_acl) debug_printf("----------- end verify ------------\n");
1975
1976   *basic_errno = addr2.basic_errno;
1977   *log_msgptr = addr2.message;
1978   *user_msgptr = (addr2.user_message != NULL)?
1979     addr2.user_message : addr2.message;
1980
1981   /* Allow details for temporary error if the address is so flagged. */
1982   if (testflag((&addr2), af_pass_message)) acl_temp_details = TRUE;
1983
1984   /* Make $address_data visible */
1985   deliver_address_data = addr2.p.address_data;
1986   }
1987
1988 /* We have a result from the relevant test. Handle defer overrides first. */
1989
1990 if (rc == DEFER && (defer_ok ||
1991    (callout_defer_ok && *basic_errno == ERRNO_CALLOUTDEFER)))
1992   {
1993   HDEBUG(D_acl) debug_printf("verify defer overridden by %s\n",
1994     defer_ok? "defer_ok" : "callout_defer_ok");
1995   rc = OK;
1996   }
1997
1998 /* If we've failed a sender, set up a recipient message, and point
1999 sender_verified_failed to the address item that actually failed. */
2000
2001 if (rc != OK && verify_sender_address != NULL)
2002   {
2003   if (rc != DEFER)
2004     {
2005     *log_msgptr = *user_msgptr = US"Sender verify failed";
2006     }
2007   else if (*basic_errno != ERRNO_CALLOUTDEFER)
2008     {
2009     *log_msgptr = *user_msgptr = US"Could not complete sender verify";
2010     }
2011   else
2012     {
2013     *log_msgptr = US"Could not complete sender verify callout";
2014     *user_msgptr = smtp_return_error_details? sender_vaddr->user_message :
2015       *log_msgptr;
2016     }
2017
2018   sender_verified_failed = sender_vaddr;
2019   }
2020
2021 /* Verifying an address messes up the values of $domain and $local_part,
2022 so reset them before returning if this is a RCPT ACL. */
2023
2024 if (addr != NULL)
2025   {
2026   deliver_domain = addr->domain;
2027   deliver_localpart = addr->local_part;
2028   }
2029 return rc;
2030
2031 /* Syntax errors in the verify argument come here. */
2032
2033 BAD_VERIFY:
2034 *log_msgptr = string_sprintf("expected \"sender[=address]\", \"recipient\", "
2035   "\"helo\", \"header_syntax\", \"header_sender\" or "
2036   "\"reverse_host_lookup\" at start of ACL condition "
2037   "\"verify %s\"", arg);
2038 return ERROR;
2039
2040 /* Options supplied when not allowed come here */
2041
2042 NO_OPTIONS:
2043 *log_msgptr = string_sprintf("unexpected '/' found in \"%s\" "
2044   "(this verify item has no options)", arg);
2045 return ERROR;
2046
2047 /* Calls in the wrong ACL come here */
2048
2049 WRONG_ACL:
2050 *log_msgptr = string_sprintf("cannot check header contents in ACL for %s "
2051   "(only possible in ACL for DATA)", acl_wherenames[where]);
2052 return ERROR;
2053 }
2054
2055
2056
2057
2058 /*************************************************
2059 *        Check argument for control= modifier    *
2060 *************************************************/
2061
2062 /* Called from acl_check_condition() below
2063
2064 Arguments:
2065   arg         the argument string for control=
2066   pptr        set to point to the terminating character
2067   where       which ACL we are in
2068   log_msgptr  for error messages
2069
2070 Returns:      CONTROL_xxx value
2071 */
2072
2073 static int
2074 decode_control(uschar *arg, uschar **pptr, int where, uschar **log_msgptr)
2075 {
2076 int len;
2077 control_def *d;
2078
2079 for (d = controls_list;
2080      d < controls_list + sizeof(controls_list)/sizeof(control_def);
2081      d++)
2082   {
2083   len = Ustrlen(d->name);
2084   if (Ustrncmp(d->name, arg, len) == 0) break;
2085   }
2086
2087 if (d >= controls_list + sizeof(controls_list)/sizeof(control_def) ||
2088    (arg[len] != 0 && (!d->has_option || arg[len] != '/')))
2089   {
2090   *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg);
2091   return CONTROL_ERROR;
2092   }
2093
2094 *pptr = arg + len;
2095 return d->value;
2096 }
2097
2098
2099
2100
2101 /*************************************************
2102 *        Return a ratelimit error                *
2103 *************************************************/
2104
2105 /* Called from acl_ratelimit() below
2106
2107 Arguments:
2108   log_msgptr  for error messages
2109   format      format string
2110   ...         supplementary arguments
2111   ss          ratelimit option name
2112   where       ACL_WHERE_xxxx indicating which ACL this is
2113
2114 Returns:      ERROR
2115 */
2116
2117 static int
2118 ratelimit_error(uschar **log_msgptr, const char *format, ...)
2119 {
2120 va_list ap;
2121 uschar buffer[STRING_SPRINTF_BUFFER_SIZE];
2122 va_start(ap, format);
2123 if (!string_vformat(buffer, sizeof(buffer), format, ap))
2124   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
2125     "string_sprintf expansion was longer than %d", sizeof(buffer));
2126 va_end(ap);
2127 *log_msgptr = string_sprintf(
2128   "error in arguments to \"ratelimit\" condition: %s", buffer);
2129 return ERROR;
2130 }
2131
2132
2133
2134
2135 /*************************************************
2136 *            Handle rate limiting                *
2137 *************************************************/
2138
2139 /* Called by acl_check_condition() below to calculate the result
2140 of the ACL ratelimit condition.
2141
2142 Note that the return value might be slightly unexpected: if the
2143 sender's rate is above the limit then the result is OK. This is
2144 similar to the dnslists condition, and is so that you can write
2145 ACL clauses like: defer ratelimit = 15 / 1h
2146
2147 Arguments:
2148   arg         the option string for ratelimit=
2149   where       ACL_WHERE_xxxx indicating which ACL this is
2150   log_msgptr  for error messages
2151
2152 Returns:       OK        - Sender's rate is above limit
2153                FAIL      - Sender's rate is below limit
2154                DEFER     - Problem opening ratelimit database
2155                ERROR     - Syntax error in options.
2156 */
2157
2158 static int
2159 acl_ratelimit(uschar *arg, int where, uschar **log_msgptr)
2160 {
2161 double limit, period, count;
2162 uschar *ss;
2163 uschar *key = NULL;
2164 uschar *unique = NULL;
2165 int sep = '/';
2166 BOOL leaky = FALSE, strict = FALSE, readonly = FALSE;
2167 BOOL noupdate = FALSE, badacl = FALSE;
2168 int mode = RATE_PER_WHAT;
2169 int old_pool, rc;
2170 tree_node **anchor, *t;
2171 open_db dbblock, *dbm;
2172 int dbdb_size;
2173 dbdata_ratelimit *dbd;
2174 dbdata_ratelimit_unique *dbdb;
2175 struct timeval tv;
2176
2177 /* Parse the first two options and record their values in expansion
2178 variables. These variables allow the configuration to have informative
2179 error messages based on rate limits obtained from a table lookup. */
2180
2181 /* First is the maximum number of messages per period / maximum burst
2182 size, which must be greater than or equal to zero. Zero is useful for
2183 rate measurement as opposed to rate limiting. */
2184
2185 sender_rate_limit = string_nextinlist(&arg, &sep, NULL, 0);
2186 if (sender_rate_limit == NULL)
2187   limit = -1.0;
2188 else
2189   {
2190   limit = Ustrtod(sender_rate_limit, &ss);
2191   if (tolower(*ss) == 'k') { limit *= 1024.0; ss++; }
2192   else if (tolower(*ss) == 'm') { limit *= 1024.0*1024.0; ss++; }
2193   else if (tolower(*ss) == 'g') { limit *= 1024.0*1024.0*1024.0; ss++; }
2194   }
2195 if (limit < 0.0 || *ss != '\0')
2196   return ratelimit_error(log_msgptr,
2197     "\"%s\" is not a positive number", sender_rate_limit);
2198
2199 /* Second is the rate measurement period / exponential smoothing time
2200 constant. This must be strictly greater than zero, because zero leads to
2201 run-time division errors. */
2202
2203 sender_rate_period = string_nextinlist(&arg, &sep, NULL, 0);
2204 if (sender_rate_period == NULL) period = -1.0;
2205 else period = readconf_readtime(sender_rate_period, 0, FALSE);
2206 if (period <= 0.0)
2207   return ratelimit_error(log_msgptr,
2208     "\"%s\" is not a time value", sender_rate_period);
2209
2210 /* By default we are counting one of something, but the per_rcpt,
2211 per_byte, and count options can change this. */
2212
2213 count = 1.0;
2214
2215 /* Parse the other options. */
2216
2217 while ((ss = string_nextinlist(&arg, &sep, big_buffer, big_buffer_size))
2218        != NULL)
2219   {
2220   if (strcmpic(ss, US"leaky") == 0) leaky = TRUE;
2221   else if (strcmpic(ss, US"strict") == 0) strict = TRUE;
2222   else if (strcmpic(ss, US"noupdate") == 0) noupdate = TRUE;
2223   else if (strcmpic(ss, US"readonly") == 0) readonly = TRUE;
2224   else if (strcmpic(ss, US"per_cmd") == 0) RATE_SET(mode, PER_CMD);
2225   else if (strcmpic(ss, US"per_conn") == 0)
2226     {
2227     RATE_SET(mode, PER_CONN);
2228     if (where == ACL_WHERE_NOTSMTP || where == ACL_WHERE_NOTSMTP_START)
2229       badacl = TRUE;
2230     }
2231   else if (strcmpic(ss, US"per_mail") == 0)
2232     {
2233     RATE_SET(mode, PER_MAIL);
2234     if (where > ACL_WHERE_NOTSMTP) badacl = TRUE;
2235     }
2236   else if (strcmpic(ss, US"per_rcpt") == 0)
2237     {
2238     /* If we are running in the RCPT ACL, then we'll count the recipients
2239     one by one, but if we are running when we have accumulated the whole
2240     list then we'll add them all in one batch. */
2241     if (where == ACL_WHERE_RCPT)
2242       RATE_SET(mode, PER_RCPT);
2243     else if (where >= ACL_WHERE_PREDATA && where <= ACL_WHERE_NOTSMTP)
2244       RATE_SET(mode, PER_ALLRCPTS), count = (double)recipients_count;
2245     else if (where == ACL_WHERE_MAIL || where > ACL_WHERE_NOTSMTP)
2246       RATE_SET(mode, PER_RCPT), badacl = TRUE;
2247     }
2248   else if (strcmpic(ss, US"per_byte") == 0)
2249     {
2250     /* If we have not yet received the message data and there was no SIZE
2251     declaration on the MAIL comand, then it's safe to just use a value of
2252     zero and let the recorded rate decay as if nothing happened. */
2253     RATE_SET(mode, PER_MAIL);
2254     if (where > ACL_WHERE_NOTSMTP) badacl = TRUE;
2255       else count = message_size < 0 ? 0.0 : (double)message_size;
2256     }
2257   else if (strcmpic(ss, US"per_addr") == 0)
2258     {
2259     RATE_SET(mode, PER_RCPT);
2260     if (where != ACL_WHERE_RCPT) badacl = TRUE, unique = "*";
2261       else unique = string_sprintf("%s@%s", deliver_localpart, deliver_domain);
2262     }
2263   else if (strncmpic(ss, US"count=", 6) == 0)
2264     {
2265     uschar *e;
2266     count = Ustrtod(ss+6, &e);
2267     if (count < 0.0 || *e != '\0')
2268       return ratelimit_error(log_msgptr,
2269         "\"%s\" is not a positive number", ss);
2270     }
2271   else if (strncmpic(ss, US"unique=", 7) == 0)
2272     unique = string_copy(ss + 7);
2273   else if (key == NULL)
2274     key = string_copy(ss);
2275   else
2276     key = string_sprintf("%s/%s", key, ss);
2277   }
2278
2279 /* Sanity check. When the badacl flag is set the update mode must either
2280 be readonly (which is the default if it is omitted) or, for backwards
2281 compatibility, a combination of noupdate and strict or leaky. */
2282
2283 if (mode == RATE_PER_CLASH)
2284   return ratelimit_error(log_msgptr, "conflicting per_* options");
2285 if (leaky + strict + readonly > 1)
2286   return ratelimit_error(log_msgptr, "conflicting update modes");
2287 if (badacl && (leaky || strict) && !noupdate)
2288   return ratelimit_error(log_msgptr,
2289     "\"%s\" must not have /leaky or /strict option in %s ACL",
2290     ratelimit_option_string[mode], acl_wherenames[where]);
2291
2292 /* Set the default values of any unset options. In readonly mode we
2293 perform the rate computation without any increment so that its value
2294 decays to eventually allow over-limit senders through. */
2295
2296 if (noupdate) readonly = TRUE, leaky = strict = FALSE;
2297 if (badacl) readonly = TRUE;
2298 if (readonly) count = 0.0;
2299 if (!strict && !readonly) leaky = TRUE;
2300 if (mode == RATE_PER_WHAT) mode = RATE_PER_MAIL;
2301
2302 /* Create the lookup key. If there is no explicit key, use sender_host_address.
2303 If there is no sender_host_address (e.g. -bs or acl_not_smtp) then we simply
2304 omit it. The smoothing constant (sender_rate_period) and the per_xxx options
2305 are added to the key because they alter the meaning of the stored data. */
2306
2307 if (key == NULL)
2308   key = (sender_host_address == NULL)? US"" : sender_host_address;
2309
2310 key = string_sprintf("%s/%s/%s%s",
2311   sender_rate_period,
2312   ratelimit_option_string[mode],
2313   unique == NULL ? "" : "unique/",
2314   key);
2315
2316 HDEBUG(D_acl)
2317   debug_printf("ratelimit condition count=%.0f %.1f/%s\n", count, limit, key);
2318
2319 /* See if we have already computed the rate by looking in the relevant tree.
2320 For per-connection rate limiting, store tree nodes and dbdata in the permanent
2321 pool so that they survive across resets. In readonly mode we only remember the
2322 result for the rest of this command in case a later command changes it. After
2323 this bit of logic the code is independent of the per_* mode. */
2324
2325 old_pool = store_pool;
2326
2327 if (readonly)
2328   anchor = &ratelimiters_cmd;
2329 else switch(mode) {
2330 case RATE_PER_CONN:
2331   anchor = &ratelimiters_conn;
2332   store_pool = POOL_PERM;
2333   break;
2334 case RATE_PER_BYTE:
2335 case RATE_PER_MAIL:
2336 case RATE_PER_ALLRCPTS:
2337   anchor = &ratelimiters_mail;
2338   break;
2339 case RATE_PER_ADDR:
2340 case RATE_PER_CMD:
2341 case RATE_PER_RCPT:
2342   anchor = &ratelimiters_cmd;
2343   break;
2344 default:
2345   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
2346     "internal ACL error: unknown ratelimit mode %d", mode);
2347   break;
2348 }
2349
2350 t = tree_search(*anchor, key);
2351 if (t != NULL)
2352   {
2353   dbd = t->data.ptr;
2354   /* The following few lines duplicate some of the code below. */
2355   rc = (dbd->rate < limit)? FAIL : OK;
2356   store_pool = old_pool;
2357   sender_rate = string_sprintf("%.1f", dbd->rate);
2358   HDEBUG(D_acl)
2359     debug_printf("ratelimit found pre-computed rate %s\n", sender_rate);
2360   return rc;
2361   }
2362
2363 /* We aren't using a pre-computed rate, so get a previously recorded rate
2364 from the database, which will be updated and written back if required. */
2365
2366 dbm = dbfn_open(US"ratelimit", O_RDWR, &dbblock, TRUE);
2367 if (dbm == NULL)
2368   {
2369   store_pool = old_pool;
2370   sender_rate = NULL;
2371   HDEBUG(D_acl) debug_printf("ratelimit database not available\n");
2372   *log_msgptr = US"ratelimit database not available";
2373   return DEFER;
2374   }
2375 dbdb = dbfn_read_with_length(dbm, key, &dbdb_size);
2376 dbd = NULL;
2377
2378 gettimeofday(&tv, NULL);
2379
2380 if (dbdb != NULL)
2381   {
2382   /* Locate the basic ratelimit block inside the DB data. */
2383   HDEBUG(D_acl) debug_printf("ratelimit found key in database\n");
2384   dbd = &dbdb->dbd;
2385
2386   /* Forget the old Bloom filter if it is too old, so that we count each
2387   repeating event once per period. We don't simply clear and re-use the old
2388   filter because we want its size to change if the limit changes. Note that
2389   we keep the dbd pointer for copying the rate into the new data block. */
2390
2391   if(unique != NULL && tv.tv_sec > dbdb->bloom_epoch + period)
2392     {
2393     HDEBUG(D_acl) debug_printf("ratelimit discarding old Bloom filter\n");
2394     dbdb = NULL;
2395     }
2396
2397   /* Sanity check. */
2398
2399   if(unique != NULL && dbdb_size < sizeof(*dbdb))
2400     {
2401     HDEBUG(D_acl) debug_printf("ratelimit discarding undersize Bloom filter\n");
2402     dbdb = NULL;
2403     }
2404   }
2405
2406 /* Allocate a new data block if the database lookup failed
2407 or the Bloom filter passed its age limit. */
2408
2409 if (dbdb == NULL)
2410   {
2411   if (unique == NULL)
2412     {
2413     /* No Bloom filter. This basic ratelimit block is initialized below. */
2414     HDEBUG(D_acl) debug_printf("ratelimit creating new rate data block\n");
2415     dbdb_size = sizeof(*dbd);
2416     dbdb = store_get(dbdb_size);
2417     }
2418   else
2419     {
2420     int extra;
2421     HDEBUG(D_acl) debug_printf("ratelimit creating new Bloom filter\n");
2422
2423     /* See the long comment below for an explanation of the magic number 2.
2424     The filter has a minimum size in case the rate limit is very small;
2425     this is determined by the definition of dbdata_ratelimit_unique. */
2426
2427     extra = (int)limit * 2 - sizeof(dbdb->bloom);
2428     if (extra < 0) extra = 0;
2429     dbdb_size = sizeof(*dbdb) + extra;
2430     dbdb = store_get(dbdb_size);
2431     dbdb->bloom_epoch = tv.tv_sec;
2432     dbdb->bloom_size = sizeof(dbdb->bloom) + extra;
2433     memset(dbdb->bloom, 0, dbdb->bloom_size);
2434
2435     /* Preserve any basic ratelimit data (which is our longer-term memory)
2436     by copying it from the discarded block. */
2437
2438     if (dbd != NULL)
2439       {
2440       dbdb->dbd = *dbd;
2441       dbd = &dbdb->dbd;
2442       }
2443     }
2444   }
2445
2446 /* If we are counting unique events, find out if this event is new or not.
2447 If the client repeats the event during the current period then it should be
2448 counted. We skip this code in readonly mode for efficiency, because any
2449 changes to the filter will be discarded and because count is already set to
2450 zero. */
2451
2452 if (unique != NULL && !readonly)
2453   {
2454   /* We identify unique events using a Bloom filter. (You can find my
2455   notes on Bloom filters at http://fanf.livejournal.com/81696.html)
2456   With the per_addr option, an "event" is a recipient address, though the
2457   user can use the unique option to define their own events. We only count
2458   an event if we have not seen it before.
2459
2460   We size the filter according to the rate limit, which (in leaky mode)
2461   is the limit on the population of the filter. We allow 16 bits of space
2462   per entry (see the construction code above) and we set (up to) 8 of them
2463   when inserting an element (see the loop below). The probability of a false
2464   positive (an event we have not seen before but which we fail to count) is
2465
2466     size    = limit * 16
2467     numhash = 8
2468     allzero = exp(-numhash * pop / size)
2469             = exp(-0.5 * pop / limit)
2470     fpr     = pow(1 - allzero, numhash)
2471
2472   For senders at the limit the fpr is      0.06%    or  1 in 1700
2473   and for senders at half the limit it is  0.0006%  or  1 in 170000
2474
2475   In strict mode the Bloom filter can fill up beyond the normal limit, in
2476   which case the false positive rate will rise. This means that the
2477   measured rate for very fast senders can bogusly drop off after a while.
2478
2479   At twice the limit, the fpr is  2.5%  or  1 in 40
2480   At four times the limit, it is  31%   or  1 in 3.2
2481
2482   It takes ln(pop/limit) periods for an over-limit burst of pop events to
2483   decay below the limit, and if this is more than one then the Bloom filter
2484   will be discarded before the decay gets that far. The false positive rate
2485   at this threshold is 9.3% or 1 in 10.7. */
2486
2487   BOOL seen;
2488   unsigned n, hash, hinc;
2489   uschar md5sum[16];
2490   md5 md5info;
2491
2492   /* Instead of using eight independent hash values, we combine two values
2493   using the formula h1 + n * h2. This does not harm the Bloom filter's
2494   performance, and means the amount of hash we need is independent of the
2495   number of bits we set in the filter. */
2496
2497   md5_start(&md5info);
2498   md5_end(&md5info, unique, Ustrlen(unique), md5sum);
2499   hash = md5sum[0] | md5sum[1] << 8 | md5sum[2] << 16 | md5sum[3] << 24;
2500   hinc = md5sum[4] | md5sum[5] << 8 | md5sum[6] << 16 | md5sum[7] << 24;
2501
2502   /* Scan the bits corresponding to this event. A zero bit means we have
2503   not seen it before. Ensure all bits are set to record this event. */
2504
2505   HDEBUG(D_acl) debug_printf("ratelimit checking uniqueness of %s\n", unique);
2506
2507   seen = TRUE;
2508   for (n = 0; n < 8; n++, hash += hinc)
2509     {
2510     int bit = 1 << (hash % 8);
2511     int byte = (hash / 8) % dbdb->bloom_size;
2512     if ((dbdb->bloom[byte] & bit) == 0)
2513       {
2514       dbdb->bloom[byte] |= bit;
2515       seen = FALSE;
2516       }
2517     }
2518
2519   /* If this event has occurred before, do not count it. */
2520
2521   if (seen)
2522     {
2523     HDEBUG(D_acl) debug_printf("ratelimit event found in Bloom filter\n");
2524     count = 0.0;
2525     }
2526   else
2527     HDEBUG(D_acl) debug_printf("ratelimit event added to Bloom filter\n");
2528   }
2529
2530 /* If there was no previous ratelimit data block for this key, initialize
2531 the new one, otherwise update the block from the database. The initial rate
2532 is what would be computed by the code below for an infinite interval. */
2533
2534 if (dbd == NULL)
2535   {
2536   HDEBUG(D_acl) debug_printf("ratelimit initializing new key's rate data\n");
2537   dbd = &dbdb->dbd;
2538   dbd->time_stamp = tv.tv_sec;
2539   dbd->time_usec = tv.tv_usec;
2540   dbd->rate = count;
2541   }
2542 else
2543   {
2544   /* The smoothed rate is computed using an exponentially weighted moving
2545   average adjusted for variable sampling intervals. The standard EWMA for
2546   a fixed sampling interval is:  f'(t) = (1 - a) * f(t) + a * f'(t - 1)
2547   where f() is the measured value and f'() is the smoothed value.
2548
2549   Old data decays out of the smoothed value exponentially, such that data n
2550   samples old is multiplied by a^n. The exponential decay time constant p
2551   is defined such that data p samples old is multiplied by 1/e, which means
2552   that a = exp(-1/p). We can maintain the same time constant for a variable
2553   sampling interval i by using a = exp(-i/p).
2554
2555   The rate we are measuring is messages per period, suitable for directly
2556   comparing with the limit. The average rate between now and the previous
2557   message is period / interval, which we feed into the EWMA as the sample.
2558
2559   It turns out that the number of messages required for the smoothed rate
2560   to reach the limit when they are sent in a burst is equal to the limit.
2561   This can be seen by analysing the value of the smoothed rate after N
2562   messages sent at even intervals. Let k = (1 - a) * p/i
2563
2564     rate_1 = (1 - a) * p/i + a * rate_0
2565            = k + a * rate_0
2566     rate_2 = k + a * rate_1
2567            = k + a * k + a^2 * rate_0
2568     rate_3 = k + a * k + a^2 * k + a^3 * rate_0
2569     rate_N = rate_0 * a^N + k * SUM(x=0..N-1)(a^x)
2570            = rate_0 * a^N + k * (1 - a^N) / (1 - a)
2571            = rate_0 * a^N + p/i * (1 - a^N)
2572
2573   When N is large, a^N -> 0 so rate_N -> p/i as desired.
2574
2575     rate_N = p/i + (rate_0 - p/i) * a^N
2576     a^N = (rate_N - p/i) / (rate_0 - p/i)
2577     N * -i/p = log((rate_N - p/i) / (rate_0 - p/i))
2578     N = p/i * log((rate_0 - p/i) / (rate_N - p/i))
2579
2580   Numerical analysis of the above equation, setting the computed rate to
2581   increase from rate_0 = 0 to rate_N = limit, shows that for large sending
2582   rates, p/i, the number of messages N = limit. So limit serves as both the
2583   maximum rate measured in messages per period, and the maximum number of
2584   messages that can be sent in a fast burst. */
2585
2586   double this_time = (double)tv.tv_sec
2587                    + (double)tv.tv_usec / 1000000.0;
2588   double prev_time = (double)dbd->time_stamp
2589                    + (double)dbd->time_usec / 1000000.0;
2590
2591   /* We must avoid division by zero, and deal gracefully with the clock going
2592   backwards. If we blunder ahead when time is in reverse then the computed
2593   rate will be bogus. To be safe we clamp interval to a very small number. */
2594
2595   double interval = this_time - prev_time <= 0.0 ? 1e-9
2596                   : this_time - prev_time;
2597
2598   double i_over_p = interval / period;
2599   double a = exp(-i_over_p);
2600
2601   /* Combine the instantaneous rate (period / interval) with the previous rate
2602   using the smoothing factor a. In order to measure sized events, multiply the
2603   instantaneous rate by the count of bytes or recipients etc. */
2604
2605   dbd->time_stamp = tv.tv_sec;
2606   dbd->time_usec = tv.tv_usec;
2607   dbd->rate = (1 - a) * count / i_over_p + a * dbd->rate;
2608
2609   /* When events are very widely spaced the computed rate tends towards zero.
2610   Although this is accurate it turns out not to be useful for our purposes,
2611   especially when the first event after a long silence is the start of a spam
2612   run. A more useful model is that the rate for an isolated event should be the
2613   size of the event per the period size, ignoring the lack of events outside
2614   the current period and regardless of where the event falls in the period. So,
2615   if the interval was so long that the calculated rate is unhelpfully small, we
2616   re-intialize the rate. In the absence of higher-rate bursts, the condition
2617   below is true if the interval is greater than the period. */
2618
2619   if (dbd->rate < count) dbd->rate = count;
2620   }
2621
2622 /* Clients sending at the limit are considered to be over the limit.
2623 This matters for edge cases such as a limit of zero, when the client
2624 should be completely blocked. */
2625
2626 rc = (dbd->rate < limit)? FAIL : OK;
2627
2628 /* Update the state if the rate is low or if we are being strict. If we
2629 are in leaky mode and the sender's rate is too high, we do not update
2630 the recorded rate in order to avoid an over-aggressive sender's retry
2631 rate preventing them from getting any email through. If readonly is set,
2632 neither leaky nor strict are set, so we do not do any updates. */
2633
2634 if ((rc == FAIL && leaky) || strict)
2635   {
2636   dbfn_write(dbm, key, dbdb, dbdb_size);
2637   HDEBUG(D_acl) debug_printf("ratelimit db updated\n");
2638   }
2639 else
2640   {
2641   HDEBUG(D_acl) debug_printf("ratelimit db not updated: %s\n",
2642     readonly? "readonly mode" : "over the limit, but leaky");
2643   }
2644
2645 dbfn_close(dbm);
2646
2647 /* Store the result in the tree for future reference. */
2648
2649 t = store_get(sizeof(tree_node) + Ustrlen(key));
2650 t->data.ptr = dbd;
2651 Ustrcpy(t->name, key);
2652 (void)tree_insertnode(anchor, t);
2653
2654 /* We create the formatted version of the sender's rate very late in
2655 order to ensure that it is done using the correct storage pool. */
2656
2657 store_pool = old_pool;
2658 sender_rate = string_sprintf("%.1f", dbd->rate);
2659
2660 HDEBUG(D_acl)
2661   debug_printf("ratelimit computed rate %s\n", sender_rate);
2662
2663 return rc;
2664 }
2665
2666
2667
2668 /*************************************************
2669 *   Handle conditions/modifiers on an ACL item   *
2670 *************************************************/
2671
2672 /* Called from acl_check() below.
2673
2674 Arguments:
2675   verb         ACL verb
2676   cb           ACL condition block - if NULL, result is OK
2677   where        where called from
2678   addr         the address being checked for RCPT, or NULL
2679   level        the nesting level
2680   epp          pointer to pass back TRUE if "endpass" encountered
2681                  (applies only to "accept" and "discard")
2682   user_msgptr  user message pointer
2683   log_msgptr   log message pointer
2684   basic_errno  pointer to where to put verify error
2685
2686 Returns:       OK        - all conditions are met
2687                DISCARD   - an "acl" condition returned DISCARD - only allowed
2688                              for "accept" or "discard" verbs
2689                FAIL      - at least one condition fails
2690                FAIL_DROP - an "acl" condition returned FAIL_DROP
2691                DEFER     - can't tell at the moment (typically, lookup defer,
2692                              but can be temporary callout problem)
2693                ERROR     - ERROR from nested ACL or expansion failure or other
2694                              error
2695 */
2696
2697 static int
2698 acl_check_condition(int verb, acl_condition_block *cb, int where,
2699   address_item *addr, int level, BOOL *epp, uschar **user_msgptr,
2700   uschar **log_msgptr, int *basic_errno)
2701 {
2702 uschar *user_message = NULL;
2703 uschar *log_message = NULL;
2704 uschar *debug_tag = NULL;
2705 uschar *debug_opts = NULL;
2706 uschar *p = NULL;
2707 int rc = OK;
2708 #ifdef WITH_CONTENT_SCAN
2709 int sep = '/';
2710 #endif
2711
2712 for (; cb != NULL; cb = cb->next)
2713   {
2714   uschar *arg;
2715   int control_type;
2716
2717   /* The message and log_message items set up messages to be used in
2718   case of rejection. They are expanded later. */
2719
2720   if (cb->type == ACLC_MESSAGE)
2721     {
2722     user_message = cb->arg;
2723     continue;
2724     }
2725
2726   if (cb->type == ACLC_LOG_MESSAGE)
2727     {
2728     log_message = cb->arg;
2729     continue;
2730     }
2731
2732   /* The endpass "condition" just sets a flag to show it occurred. This is
2733   checked at compile time to be on an "accept" or "discard" item. */
2734
2735   if (cb->type == ACLC_ENDPASS)
2736     {
2737     *epp = TRUE;
2738     continue;
2739     }
2740
2741   /* For other conditions and modifiers, the argument is expanded now for some
2742   of them, but not for all, because expansion happens down in some lower level
2743   checking functions in some cases. */
2744
2745   if (cond_expand_at_top[cb->type])
2746     {
2747     arg = expand_string(cb->arg);
2748     if (arg == NULL)
2749       {
2750       if (expand_string_forcedfail) continue;
2751       *log_msgptr = string_sprintf("failed to expand ACL string \"%s\": %s",
2752         cb->arg, expand_string_message);
2753       return search_find_defer? DEFER : ERROR;
2754       }
2755     }
2756   else arg = cb->arg;
2757
2758   /* Show condition, and expanded condition if it's different */
2759
2760   HDEBUG(D_acl)
2761     {
2762     int lhswidth = 0;
2763     debug_printf("check %s%s %n",
2764       (!cond_modifiers[cb->type] && cb->u.negated)? "!":"",
2765       conditions[cb->type], &lhswidth);
2766
2767     if (cb->type == ACLC_SET)
2768       {
2769       debug_printf("acl_%s ", cb->u.varname);
2770       lhswidth += 5 + Ustrlen(cb->u.varname);
2771       }
2772
2773     debug_printf("= %s\n", cb->arg);
2774
2775     if (arg != cb->arg)
2776       debug_printf("%.*s= %s\n", lhswidth,
2777       US"                             ", CS arg);
2778     }
2779
2780   /* Check that this condition makes sense at this time */
2781
2782   if ((cond_forbids[cb->type] & (1 << where)) != 0)
2783     {
2784     *log_msgptr = string_sprintf("cannot %s %s condition in %s ACL",
2785       cond_modifiers[cb->type]? "use" : "test",
2786       conditions[cb->type], acl_wherenames[where]);
2787     return ERROR;
2788     }
2789
2790   /* Run the appropriate test for each condition, or take the appropriate
2791   action for the remaining modifiers. */
2792
2793   switch(cb->type)
2794     {
2795     case ACLC_ADD_HEADER:
2796     setup_header(arg);
2797     break;
2798
2799     /* A nested ACL that returns "discard" makes sense only for an "accept" or
2800     "discard" verb. */
2801
2802     case ACLC_ACL:
2803     rc = acl_check_internal(where, addr, arg, level+1, user_msgptr, log_msgptr);
2804     if (rc == DISCARD && verb != ACL_ACCEPT && verb != ACL_DISCARD)
2805       {
2806       *log_msgptr = string_sprintf("nested ACL returned \"discard\" for "
2807         "\"%s\" command (only allowed with \"accept\" or \"discard\")",
2808         verbs[verb]);
2809       return ERROR;
2810       }
2811     break;
2812
2813     case ACLC_AUTHENTICATED:
2814     rc = (sender_host_authenticated == NULL)? FAIL :
2815       match_isinlist(sender_host_authenticated, &arg, 0, NULL, NULL, MCL_STRING,
2816         TRUE, NULL);
2817     break;
2818
2819     #ifdef EXPERIMENTAL_BRIGHTMAIL
2820     case ACLC_BMI_OPTIN:
2821       {
2822       int old_pool = store_pool;
2823       store_pool = POOL_PERM;
2824       bmi_current_optin = string_copy(arg);
2825       store_pool = old_pool;
2826       }
2827     break;
2828     #endif
2829
2830     case ACLC_CONDITION:
2831     /* The true/false parsing here should be kept in sync with that used in
2832     expand.c when dealing with ECOND_BOOL so that we don't have too many
2833     different definitions of what can be a boolean. */
2834     if (Ustrspn(arg, "0123456789") == Ustrlen(arg))     /* Digits, or empty */
2835       rc = (Uatoi(arg) == 0)? FAIL : OK;
2836     else
2837       rc = (strcmpic(arg, US"no") == 0 ||
2838             strcmpic(arg, US"false") == 0)? FAIL :
2839            (strcmpic(arg, US"yes") == 0 ||
2840             strcmpic(arg, US"true") == 0)? OK : DEFER;
2841     if (rc == DEFER)
2842       *log_msgptr = string_sprintf("invalid \"condition\" value \"%s\"", arg);
2843     break;
2844
2845     case ACLC_CONTINUE:    /* Always succeeds */
2846     break;
2847
2848     case ACLC_CONTROL:
2849     control_type = decode_control(arg, &p, where, log_msgptr);
2850
2851     /* Check if this control makes sense at this time */
2852
2853     if ((control_forbids[control_type] & (1 << where)) != 0)
2854       {
2855       *log_msgptr = string_sprintf("cannot use \"control=%s\" in %s ACL",
2856         controls[control_type], acl_wherenames[where]);
2857       return ERROR;
2858       }
2859
2860     switch(control_type)
2861       {
2862       case CONTROL_AUTH_UNADVERTISED:
2863       allow_auth_unadvertised = TRUE;
2864       break;
2865
2866       #ifdef EXPERIMENTAL_BRIGHTMAIL
2867       case CONTROL_BMI_RUN:
2868       bmi_run = 1;
2869       break;
2870       #endif
2871
2872       #ifndef DISABLE_DKIM
2873       case CONTROL_DKIM_VERIFY:
2874       dkim_disable_verify = TRUE;
2875       break;
2876       #endif
2877
2878       case CONTROL_ERROR:
2879       return ERROR;
2880
2881       case CONTROL_CASEFUL_LOCAL_PART:
2882       deliver_localpart = addr->cc_local_part;
2883       break;
2884
2885       case CONTROL_CASELOWER_LOCAL_PART:
2886       deliver_localpart = addr->lc_local_part;
2887       break;
2888
2889       case CONTROL_ENFORCE_SYNC:
2890       smtp_enforce_sync = TRUE;
2891       break;
2892
2893       case CONTROL_NO_ENFORCE_SYNC:
2894       smtp_enforce_sync = FALSE;
2895       break;
2896
2897       #ifdef WITH_CONTENT_SCAN
2898       case CONTROL_NO_MBOX_UNSPOOL:
2899       no_mbox_unspool = TRUE;
2900       break;
2901       #endif
2902
2903       case CONTROL_NO_MULTILINE:
2904       no_multiline_responses = TRUE;
2905       break;
2906
2907       case CONTROL_NO_PIPELINING:
2908       pipelining_enable = FALSE;
2909       break;
2910
2911       case CONTROL_NO_DELAY_FLUSH:
2912       disable_delay_flush = TRUE;
2913       break;
2914
2915       case CONTROL_NO_CALLOUT_FLUSH:
2916       disable_callout_flush = TRUE;
2917       break;
2918
2919       case CONTROL_FAKEDEFER:
2920       case CONTROL_FAKEREJECT:
2921       fake_response = (control_type == CONTROL_FAKEDEFER) ? DEFER : FAIL;
2922       if (*p == '/')
2923         {
2924         uschar *pp = p + 1;
2925         while (*pp != 0) pp++;
2926         fake_response_text = expand_string(string_copyn(p+1, pp-p-1));
2927         p = pp;
2928         }
2929        else
2930         {
2931         /* Explicitly reset to default string */
2932         fake_response_text = US"Your message has been rejected but is being kept for evaluation.\nIf it was a legitimate message, it may still be delivered to the target recipient(s).";
2933         }
2934       break;
2935
2936       case CONTROL_FREEZE:
2937       deliver_freeze = TRUE;
2938       deliver_frozen_at = time(NULL);
2939       freeze_tell = freeze_tell_config;       /* Reset to configured value */
2940       if (Ustrncmp(p, "/no_tell", 8) == 0)
2941         {
2942         p += 8;
2943         freeze_tell = NULL;
2944         }
2945       if (*p != 0)
2946         {
2947         *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg);
2948         return ERROR;
2949         }
2950       break;
2951
2952       case CONTROL_QUEUE_ONLY:
2953       queue_only_policy = TRUE;
2954       break;
2955
2956       case CONTROL_SUBMISSION:
2957       originator_name = US"";
2958       submission_mode = TRUE;
2959       while (*p == '/')
2960         {
2961         if (Ustrncmp(p, "/sender_retain", 14) == 0)
2962           {
2963           p += 14;
2964           active_local_sender_retain = TRUE;
2965           active_local_from_check = FALSE;
2966           }
2967         else if (Ustrncmp(p, "/domain=", 8) == 0)
2968           {
2969           uschar *pp = p + 8;
2970           while (*pp != 0 && *pp != '/') pp++;
2971           submission_domain = string_copyn(p+8, pp-p-8);
2972           p = pp;
2973           }
2974         /* The name= option must be last, because it swallows the rest of
2975         the string. */
2976         else if (Ustrncmp(p, "/name=", 6) == 0)
2977           {
2978           uschar *pp = p + 6;
2979           while (*pp != 0) pp++;
2980           submission_name = string_copy(parse_fix_phrase(p+6, pp-p-6,
2981             big_buffer, big_buffer_size));
2982           p = pp;
2983           }
2984         else break;
2985         }
2986       if (*p != 0)
2987         {
2988         *log_msgptr = string_sprintf("syntax error in \"control=%s\"", arg);
2989         return ERROR;
2990         }
2991       break;
2992
2993       case CONTROL_DEBUG:
2994       while (*p == '/')
2995         {
2996         if (Ustrncmp(p, "/tag=", 5) == 0)
2997           {
2998           uschar *pp = p + 5;
2999           while (*pp != '\0' && *pp != '/') pp++;
3000           debug_tag = string_copyn(p+5, pp-p-5);
3001           p = pp;
3002           }
3003         else if (Ustrncmp(p, "/opts=", 6) == 0)
3004           {
3005           uschar *pp = p + 6;
3006           while (*pp != '\0' && *pp != '/') pp++;
3007           debug_opts = string_copyn(p+6, pp-p-6);
3008           p = pp;
3009           }
3010         }
3011         debug_logging_activate(debug_tag, debug_opts);
3012       break;
3013
3014       case CONTROL_SUPPRESS_LOCAL_FIXUPS:
3015       suppress_local_fixups = TRUE;
3016       break;
3017       }
3018     break;
3019
3020     #ifdef EXPERIMENTAL_DCC
3021     case ACLC_DCC:
3022       {
3023       /* Seperate the regular expression and any optional parameters. */
3024       uschar *ss = string_nextinlist(&arg, &sep, big_buffer, big_buffer_size);
3025       /* Run the dcc backend. */
3026       rc = dcc_process(&ss);
3027       /* Modify return code based upon the existance of options. */
3028       while ((ss = string_nextinlist(&arg, &sep, big_buffer, big_buffer_size))
3029             != NULL) {
3030         if (strcmpic(ss, US"defer_ok") == 0 && rc == DEFER)
3031           {
3032           /* FAIL so that the message is passed to the next ACL */
3033           rc = FAIL;
3034           }
3035         }
3036       }
3037     break;
3038     #endif
3039
3040     #ifdef WITH_CONTENT_SCAN
3041     case ACLC_DECODE:
3042     rc = mime_decode(&arg);
3043     break;
3044     #endif
3045
3046     case ACLC_DELAY:
3047       {
3048       int delay = readconf_readtime(arg, 0, FALSE);
3049       if (delay < 0)
3050         {
3051         *log_msgptr = string_sprintf("syntax error in argument for \"delay\" "
3052           "modifier: \"%s\" is not a time value", arg);
3053         return ERROR;
3054         }
3055       else
3056         {
3057         HDEBUG(D_acl) debug_printf("delay modifier requests %d-second delay\n",
3058           delay);
3059         if (host_checking)
3060           {
3061           HDEBUG(D_acl)
3062             debug_printf("delay skipped in -bh checking mode\n");
3063           }
3064
3065         /* It appears to be impossible to detect that a TCP/IP connection has
3066         gone away without reading from it. This means that we cannot shorten
3067         the delay below if the client goes away, because we cannot discover
3068         that the client has closed its end of the connection. (The connection
3069         is actually in a half-closed state, waiting for the server to close its
3070         end.) It would be nice to be able to detect this state, so that the
3071         Exim process is not held up unnecessarily. However, it seems that we
3072         can't. The poll() function does not do the right thing, and in any case
3073         it is not always available.
3074
3075         NOTE 1: If ever this state of affairs changes, remember that we may be
3076         dealing with stdin/stdout here, in addition to TCP/IP connections.
3077         Also, delays may be specified for non-SMTP input, where smtp_out and
3078         smtp_in will be NULL. Whatever is done must work in all cases.
3079
3080         NOTE 2: The added feature of flushing the output before a delay must
3081         apply only to SMTP input. Hence the test for smtp_out being non-NULL.
3082         */
3083
3084         else
3085           {
3086           if (smtp_out != NULL && !disable_delay_flush) mac_smtp_fflush();
3087           while (delay > 0) delay = sleep(delay);
3088           }
3089         }
3090       }
3091     break;
3092
3093     #ifdef WITH_OLD_DEMIME
3094     case ACLC_DEMIME:
3095       rc = demime(&arg);
3096     break;
3097     #endif
3098
3099     #ifndef DISABLE_DKIM
3100     case ACLC_DKIM_SIGNER:
3101     if (dkim_cur_signer != NULL)
3102       rc = match_isinlist(dkim_cur_signer,
3103                           &arg,0,NULL,NULL,MCL_STRING,TRUE,NULL);
3104     else
3105        rc = FAIL;
3106     break;
3107
3108     case ACLC_DKIM_STATUS:
3109     rc = match_isinlist(dkim_exim_expand_query(DKIM_VERIFY_STATUS),
3110                         &arg,0,NULL,NULL,MCL_STRING,TRUE,NULL);
3111     break;
3112     #endif
3113
3114     case ACLC_DNSLISTS:
3115     rc = verify_check_dnsbl(&arg);
3116     break;
3117
3118     case ACLC_DOMAINS:
3119     rc = match_isinlist(addr->domain, &arg, 0, &domainlist_anchor,
3120       addr->domain_cache, MCL_DOMAIN, TRUE, &deliver_domain_data);
3121     break;
3122
3123     /* The value in tls_cipher is the full cipher name, for example,
3124     TLSv1:DES-CBC3-SHA:168, whereas the values to test for are just the
3125     cipher names such as DES-CBC3-SHA. But program defensively. We don't know
3126     what may in practice come out of the SSL library - which at the time of
3127     writing is poorly documented. */
3128
3129     case ACLC_ENCRYPTED:
3130     if (tls_cipher == NULL) rc = FAIL; else
3131       {
3132       uschar *endcipher = NULL;
3133       uschar *cipher = Ustrchr(tls_cipher, ':');
3134       if (cipher == NULL) cipher = tls_cipher; else
3135         {
3136         endcipher = Ustrchr(++cipher, ':');
3137         if (endcipher != NULL) *endcipher = 0;
3138         }
3139       rc = match_isinlist(cipher, &arg, 0, NULL, NULL, MCL_STRING, TRUE, NULL);
3140       if (endcipher != NULL) *endcipher = ':';
3141       }
3142     break;
3143
3144     /* Use verify_check_this_host() instead of verify_check_host() so that
3145     we can pass over &host_data to catch any looked up data. Once it has been
3146     set, it retains its value so that it's still there if another ACL verb
3147     comes through here and uses the cache. However, we must put it into
3148     permanent store in case it is also expected to be used in a subsequent
3149     message in the same SMTP connection. */
3150
3151     case ACLC_HOSTS:
3152     rc = verify_check_this_host(&arg, sender_host_cache, NULL,
3153       (sender_host_address == NULL)? US"" : sender_host_address, &host_data);
3154     if (host_data != NULL) host_data = string_copy_malloc(host_data);
3155     break;
3156
3157     case ACLC_LOCAL_PARTS:
3158     rc = match_isinlist(addr->cc_local_part, &arg, 0,
3159       &localpartlist_anchor, addr->localpart_cache, MCL_LOCALPART, TRUE,
3160       &deliver_localpart_data);
3161     break;
3162
3163     case ACLC_LOG_REJECT_TARGET:
3164       {
3165       int logbits = 0;
3166       int sep = 0;
3167       uschar *s = arg;
3168       uschar *ss;
3169       while ((ss = string_nextinlist(&s, &sep, big_buffer, big_buffer_size))
3170               != NULL)
3171         {
3172         if (Ustrcmp(ss, "main") == 0) logbits |= LOG_MAIN;
3173         else if (Ustrcmp(ss, "panic") == 0) logbits |= LOG_PANIC;
3174         else if (Ustrcmp(ss, "reject") == 0) logbits |= LOG_REJECT;
3175         else
3176           {
3177           logbits |= LOG_MAIN|LOG_REJECT;
3178           log_write(0, LOG_MAIN|LOG_PANIC, "unknown log name \"%s\" in "
3179             "\"log_reject_target\" in %s ACL", ss, acl_wherenames[where]);
3180           }
3181         }
3182       log_reject_target = logbits;
3183       }
3184     break;
3185
3186     case ACLC_LOGWRITE:
3187       {
3188       int logbits = 0;
3189       uschar *s = arg;
3190       if (*s == ':')
3191         {
3192         s++;
3193         while (*s != ':')
3194           {
3195           if (Ustrncmp(s, "main", 4) == 0)
3196             { logbits |= LOG_MAIN; s += 4; }
3197           else if (Ustrncmp(s, "panic", 5) == 0)
3198             { logbits |= LOG_PANIC; s += 5; }
3199           else if (Ustrncmp(s, "reject", 6) == 0)
3200             { logbits |= LOG_REJECT; s += 6; }
3201           else
3202             {
3203             logbits = LOG_MAIN|LOG_PANIC;
3204             s = string_sprintf(":unknown log name in \"%s\" in "
3205               "\"logwrite\" in %s ACL", arg, acl_wherenames[where]);
3206             }
3207           if (*s == ',') s++;
3208           }
3209         s++;
3210         }
3211       while (isspace(*s)) s++;
3212
3213
3214       if (logbits == 0) logbits = LOG_MAIN;
3215       log_write(0, logbits, "%s", string_printing(s));
3216       }
3217     break;
3218
3219     #ifdef WITH_CONTENT_SCAN
3220     case ACLC_MALWARE:
3221       {
3222       /* Separate the regular expression and any optional parameters. */
3223       uschar *ss = string_nextinlist(&arg, &sep, big_buffer, big_buffer_size);
3224       /* Run the malware backend. */
3225       rc = malware(&ss);
3226       /* Modify return code based upon the existance of options. */
3227       while ((ss = string_nextinlist(&arg, &sep, big_buffer, big_buffer_size))
3228             != NULL) {
3229         if (strcmpic(ss, US"defer_ok") == 0 && rc == DEFER)
3230           {
3231           /* FAIL so that the message is passed to the next ACL */
3232           rc = FAIL;
3233           }
3234         }
3235       }
3236     break;
3237
3238     case ACLC_MIME_REGEX:
3239     rc = mime_regex(&arg);
3240     break;
3241     #endif
3242
3243     case ACLC_RATELIMIT:
3244     rc = acl_ratelimit(arg, where, log_msgptr);
3245     break;
3246
3247     case ACLC_RECIPIENTS:
3248     rc = match_address_list(addr->address, TRUE, TRUE, &arg, NULL, -1, 0,
3249       &recipient_data);
3250     break;
3251
3252     #ifdef WITH_CONTENT_SCAN
3253     case ACLC_REGEX:
3254     rc = regex(&arg);
3255     break;
3256     #endif
3257
3258     case ACLC_SENDER_DOMAINS:
3259       {
3260       uschar *sdomain;
3261       sdomain = Ustrrchr(sender_address, '@');
3262       sdomain = (sdomain == NULL)? US"" : sdomain + 1;
3263       rc = match_isinlist(sdomain, &arg, 0, &domainlist_anchor,
3264         sender_domain_cache, MCL_DOMAIN, TRUE, NULL);
3265       }
3266     break;
3267
3268     case ACLC_SENDERS:
3269     rc = match_address_list(sender_address, TRUE, TRUE, &arg,
3270       sender_address_cache, -1, 0, &sender_data);
3271     break;
3272
3273     /* Connection variables must persist forever */
3274
3275     case ACLC_SET:
3276       {
3277       int old_pool = store_pool;
3278       if (cb->u.varname[0] == 'c') store_pool = POOL_PERM;
3279       acl_var_create(cb->u.varname)->data.ptr = string_copy(arg);
3280       store_pool = old_pool;
3281       }
3282     break;
3283
3284     #ifdef WITH_CONTENT_SCAN
3285     case ACLC_SPAM:
3286       {
3287       /* Seperate the regular expression and any optional parameters. */
3288       uschar *ss = string_nextinlist(&arg, &sep, big_buffer, big_buffer_size);
3289       /* Run the spam backend. */
3290       rc = spam(&ss);
3291       /* Modify return code based upon the existance of options. */
3292       while ((ss = string_nextinlist(&arg, &sep, big_buffer, big_buffer_size))
3293             != NULL) {
3294         if (strcmpic(ss, US"defer_ok") == 0 && rc == DEFER)
3295           {
3296           /* FAIL so that the message is passed to the next ACL */
3297           rc = FAIL;
3298           }
3299         }
3300       }
3301     break;
3302     #endif
3303
3304     #ifdef EXPERIMENTAL_SPF
3305     case ACLC_SPF:
3306       rc = spf_process(&arg, sender_address, SPF_PROCESS_NORMAL);
3307     break;
3308     case ACLC_SPF_GUESS:
3309       rc = spf_process(&arg, sender_address, SPF_PROCESS_GUESS);
3310     break;
3311     #endif
3312
3313     /* If the verb is WARN, discard any user message from verification, because
3314     such messages are SMTP responses, not header additions. The latter come
3315     only from explicit "message" modifiers. However, put the user message into
3316     $acl_verify_message so it can be used in subsequent conditions or modifiers
3317     (until something changes it). */
3318
3319     case ACLC_VERIFY:
3320     rc = acl_verify(where, addr, arg, user_msgptr, log_msgptr, basic_errno);
3321     acl_verify_message = *user_msgptr;
3322     if (verb == ACL_WARN) *user_msgptr = NULL;
3323     break;
3324
3325     default:
3326     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "internal ACL error: unknown "
3327       "condition %d", cb->type);
3328     break;
3329     }
3330
3331   /* If a condition was negated, invert OK/FAIL. */
3332
3333   if (!cond_modifiers[cb->type] && cb->u.negated)
3334     {
3335     if (rc == OK) rc = FAIL;
3336       else if (rc == FAIL || rc == FAIL_DROP) rc = OK;
3337     }
3338
3339   if (rc != OK) break;   /* Conditions loop */
3340   }
3341
3342
3343 /* If the result is the one for which "message" and/or "log_message" are used,
3344 handle the values of these modifiers. If there isn't a log message set, we make
3345 it the same as the user message.
3346
3347 "message" is a user message that will be included in an SMTP response. Unless
3348 it is empty, it overrides any previously set user message.
3349
3350 "log_message" is a non-user message, and it adds to any existing non-user
3351 message that is already set.
3352
3353 Most verbs have but a single return for which the messages are relevant, but
3354 for "discard", it's useful to have the log message both when it succeeds and
3355 when it fails. For "accept", the message is used in the OK case if there is no
3356 "endpass", but (for backwards compatibility) in the FAIL case if "endpass" is
3357 present. */
3358
3359 if (*epp && rc == OK) user_message = NULL;
3360
3361 if (((1<<rc) & msgcond[verb]) != 0)
3362   {
3363   uschar *expmessage;
3364   uschar *old_user_msgptr = *user_msgptr;
3365   uschar *old_log_msgptr = (*log_msgptr != NULL)? *log_msgptr : old_user_msgptr;
3366
3367   /* If the verb is "warn", messages generated by conditions (verification or
3368   nested ACLs) are always discarded. This also happens for acceptance verbs
3369   when they actually do accept. Only messages specified at this level are used.
3370   However, the value of an existing message is available in $acl_verify_message
3371   during expansions. */
3372
3373   if (verb == ACL_WARN ||
3374       (rc == OK && (verb == ACL_ACCEPT || verb == ACL_DISCARD)))
3375     *log_msgptr = *user_msgptr = NULL;
3376
3377   if (user_message != NULL)
3378     {
3379     acl_verify_message = old_user_msgptr;
3380     expmessage = expand_string(user_message);
3381     if (expmessage == NULL)
3382       {
3383       if (!expand_string_forcedfail)
3384         log_write(0, LOG_MAIN|LOG_PANIC, "failed to expand ACL message \"%s\": %s",
3385           user_message, expand_string_message);
3386       }
3387     else if (expmessage[0] != 0) *user_msgptr = expmessage;
3388     }
3389
3390   if (log_message != NULL)
3391     {
3392     acl_verify_message = old_log_msgptr;
3393     expmessage = expand_string(log_message);
3394     if (expmessage == NULL)
3395       {
3396       if (!expand_string_forcedfail)
3397         log_write(0, LOG_MAIN|LOG_PANIC, "failed to expand ACL message \"%s\": %s",
3398           log_message, expand_string_message);
3399       }
3400     else if (expmessage[0] != 0)
3401       {
3402       *log_msgptr = (*log_msgptr == NULL)? expmessage :
3403         string_sprintf("%s: %s", expmessage, *log_msgptr);
3404       }
3405     }
3406
3407   /* If no log message, default it to the user message */
3408
3409   if (*log_msgptr == NULL) *log_msgptr = *user_msgptr;
3410   }
3411
3412 acl_verify_message = NULL;
3413 return rc;
3414 }
3415
3416
3417
3418
3419
3420 /*************************************************
3421 *        Get line from a literal ACL             *
3422 *************************************************/
3423
3424 /* This function is passed to acl_read() in order to extract individual lines
3425 of a literal ACL, which we access via static pointers. We can destroy the
3426 contents because this is called only once (the compiled ACL is remembered).
3427
3428 This code is intended to treat the data in the same way as lines in the main
3429 Exim configuration file. That is:
3430
3431   . Leading spaces are ignored.
3432
3433   . A \ at the end of a line is a continuation - trailing spaces after the \
3434     are permitted (this is because I don't believe in making invisible things
3435     significant). Leading spaces on the continued part of a line are ignored.
3436
3437   . Physical lines starting (significantly) with # are totally ignored, and
3438     may appear within a sequence of backslash-continued lines.
3439
3440   . Blank lines are ignored, but will end a sequence of continuations.
3441
3442 Arguments: none
3443 Returns:   a pointer to the next line
3444 */
3445
3446
3447 static uschar *acl_text;          /* Current pointer in the text */
3448 static uschar *acl_text_end;      /* Points one past the terminating '0' */
3449
3450
3451 static uschar *
3452 acl_getline(void)
3453 {
3454 uschar *yield;
3455
3456 /* This loop handles leading blank lines and comments. */
3457
3458 for(;;)
3459   {
3460   while (isspace(*acl_text)) acl_text++;   /* Leading spaces/empty lines */
3461   if (*acl_text == 0) return NULL;         /* No more data */
3462   yield = acl_text;                        /* Potential data line */
3463
3464   while (*acl_text != 0 && *acl_text != '\n') acl_text++;
3465
3466   /* If we hit the end before a newline, we have the whole logical line. If
3467   it's a comment, there's no more data to be given. Otherwise, yield it. */
3468
3469   if (*acl_text == 0) return (*yield == '#')? NULL : yield;
3470
3471   /* After reaching a newline, end this loop if the physical line does not
3472   start with '#'. If it does, it's a comment, and the loop continues. */
3473
3474   if (*yield != '#') break;
3475   }
3476
3477 /* This loop handles continuations. We know we have some real data, ending in
3478 newline. See if there is a continuation marker at the end (ignoring trailing
3479 white space). We know that *yield is not white space, so no need to test for
3480 cont > yield in the backwards scanning loop. */
3481
3482 for(;;)
3483   {
3484   uschar *cont;
3485   for (cont = acl_text - 1; isspace(*cont); cont--);
3486
3487   /* If no continuation follows, we are done. Mark the end of the line and
3488   return it. */
3489
3490   if (*cont != '\\')
3491     {
3492     *acl_text++ = 0;
3493     return yield;
3494     }
3495
3496   /* We have encountered a continuation. Skip over whitespace at the start of
3497   the next line, and indeed the whole of the next line or lines if they are
3498   comment lines. */
3499
3500   for (;;)
3501     {
3502     while (*(++acl_text) == ' ' || *acl_text == '\t');
3503     if (*acl_text != '#') break;
3504     while (*(++acl_text) != 0 && *acl_text != '\n');
3505     }
3506
3507   /* We have the start of a continuation line. Move all the rest of the data
3508   to join onto the previous line, and then find its end. If the end is not a
3509   newline, we are done. Otherwise loop to look for another continuation. */
3510
3511   memmove(cont, acl_text, acl_text_end - acl_text);
3512   acl_text_end -= acl_text - cont;
3513   acl_text = cont;
3514   while (*acl_text != 0 && *acl_text != '\n') acl_text++;
3515   if (*acl_text == 0) return yield;
3516   }
3517
3518 /* Control does not reach here */
3519 }
3520
3521
3522
3523
3524
3525 /*************************************************
3526 *        Check access using an ACL               *
3527 *************************************************/
3528
3529 /* This function is called from address_check. It may recurse via
3530 acl_check_condition() - hence the use of a level to stop looping. The ACL is
3531 passed as a string which is expanded. A forced failure implies no access check
3532 is required. If the result is a single word, it is taken as the name of an ACL
3533 which is sought in the global ACL tree. Otherwise, it is taken as literal ACL
3534 text, complete with newlines, and parsed as such. In both cases, the ACL check
3535 is then run. This function uses an auxiliary function for acl_read() to call
3536 for reading individual lines of a literal ACL. This is acl_getline(), which
3537 appears immediately above.
3538
3539 Arguments:
3540   where        where called from
3541   addr         address item when called from RCPT; otherwise NULL
3542   s            the input string; NULL is the same as an empty ACL => DENY
3543   level        the nesting level
3544   user_msgptr  where to put a user error (for SMTP response)
3545   log_msgptr   where to put a logging message (not for SMTP response)
3546
3547 Returns:       OK         access is granted
3548                DISCARD    access is apparently granted...
3549                FAIL       access is denied
3550                FAIL_DROP  access is denied; drop the connection
3551                DEFER      can't tell at the moment
3552                ERROR      disaster
3553 */
3554
3555 static int
3556 acl_check_internal(int where, address_item *addr, uschar *s, int level,
3557   uschar **user_msgptr, uschar **log_msgptr)
3558 {
3559 int fd = -1;
3560 acl_block *acl = NULL;
3561 uschar *acl_name = US"inline ACL";
3562 uschar *ss;
3563
3564 /* Catch configuration loops */
3565
3566 if (level > 20)
3567   {
3568   *log_msgptr = US"ACL nested too deep: possible loop";
3569   return ERROR;
3570   }
3571
3572 if (s == NULL)
3573   {
3574   HDEBUG(D_acl) debug_printf("ACL is NULL: implicit DENY\n");
3575   return FAIL;
3576   }
3577
3578 /* At top level, we expand the incoming string. At lower levels, it has already
3579 been expanded as part of condition processing. */
3580
3581 if (level == 0)
3582   {
3583   ss = expand_string(s);
3584   if (ss == NULL)
3585     {
3586     if (expand_string_forcedfail) return OK;
3587     *log_msgptr = string_sprintf("failed to expand ACL string \"%s\": %s", s,
3588       expand_string_message);
3589     return ERROR;
3590     }
3591   }
3592 else ss = s;
3593
3594 while (isspace(*ss))ss++;
3595
3596 /* If we can't find a named ACL, the default is to parse it as an inline one.
3597 (Unless it begins with a slash; non-existent files give rise to an error.) */
3598
3599 acl_text = ss;
3600
3601 /* Handle the case of a string that does not contain any spaces. Look for a
3602 named ACL among those read from the configuration, or a previously read file.
3603 It is possible that the pointer to the ACL is NULL if the configuration
3604 contains a name with no data. If not found, and the text begins with '/',
3605 read an ACL from a file, and save it so it can be re-used. */
3606
3607 if (Ustrchr(ss, ' ') == NULL)
3608   {
3609   tree_node *t = tree_search(acl_anchor, ss);
3610   if (t != NULL)
3611     {
3612     acl = (acl_block *)(t->data.ptr);
3613     if (acl == NULL)
3614       {
3615       HDEBUG(D_acl) debug_printf("ACL \"%s\" is empty: implicit DENY\n", ss);
3616       return FAIL;
3617       }
3618     acl_name = string_sprintf("ACL \"%s\"", ss);
3619     HDEBUG(D_acl) debug_printf("using ACL \"%s\"\n", ss);
3620     }
3621
3622   else if (*ss == '/')
3623     {
3624     struct stat statbuf;
3625     fd = Uopen(ss, O_RDONLY, 0);
3626     if (fd < 0)
3627       {
3628       *log_msgptr = string_sprintf("failed to open ACL file \"%s\": %s", ss,
3629         strerror(errno));
3630       return ERROR;
3631       }
3632
3633     if (fstat(fd, &statbuf) != 0)
3634       {
3635       *log_msgptr = string_sprintf("failed to fstat ACL file \"%s\": %s", ss,
3636         strerror(errno));
3637       return ERROR;
3638       }
3639
3640     acl_text = store_get(statbuf.st_size + 1);
3641     acl_text_end = acl_text + statbuf.st_size + 1;
3642
3643     if (read(fd, acl_text, statbuf.st_size) != statbuf.st_size)
3644       {
3645       *log_msgptr = string_sprintf("failed to read ACL file \"%s\": %s",
3646         ss, strerror(errno));
3647       return ERROR;
3648       }
3649     acl_text[statbuf.st_size] = 0;
3650     (void)close(fd);
3651
3652     acl_name = string_sprintf("ACL \"%s\"", ss);
3653     HDEBUG(D_acl) debug_printf("read ACL from file %s\n", ss);
3654     }
3655   }
3656
3657 /* Parse an ACL that is still in text form. If it came from a file, remember it
3658 in the ACL tree, having read it into the POOL_PERM store pool so that it
3659 persists between multiple messages. */
3660
3661 if (acl == NULL)
3662   {
3663   int old_pool = store_pool;
3664   if (fd >= 0) store_pool = POOL_PERM;
3665   acl = acl_read(acl_getline, log_msgptr);
3666   store_pool = old_pool;
3667   if (acl == NULL && *log_msgptr != NULL) return ERROR;
3668   if (fd >= 0)
3669     {
3670     tree_node *t = store_get_perm(sizeof(tree_node) + Ustrlen(ss));
3671     Ustrcpy(t->name, ss);
3672     t->data.ptr = acl;
3673     (void)tree_insertnode(&acl_anchor, t);
3674     }
3675   }
3676
3677 /* Now we have an ACL to use. It's possible it may be NULL. */
3678
3679 while (acl != NULL)
3680   {
3681   int cond;
3682   int basic_errno = 0;
3683   BOOL endpass_seen = FALSE;
3684
3685   *log_msgptr = *user_msgptr = NULL;
3686   acl_temp_details = FALSE;
3687
3688   if ((where == ACL_WHERE_QUIT || where == ACL_WHERE_NOTQUIT) &&
3689       acl->verb != ACL_ACCEPT &&
3690       acl->verb != ACL_WARN)
3691     {
3692     *log_msgptr = string_sprintf("\"%s\" is not allowed in a QUIT or not-QUIT ACL",
3693       verbs[acl->verb]);
3694     return ERROR;
3695     }
3696
3697   HDEBUG(D_acl) debug_printf("processing \"%s\"\n", verbs[acl->verb]);
3698
3699   /* Clear out any search error message from a previous check before testing
3700   this condition. */
3701
3702   search_error_message = NULL;
3703   cond = acl_check_condition(acl->verb, acl->condition, where, addr, level,
3704     &endpass_seen, user_msgptr, log_msgptr, &basic_errno);
3705
3706   /* Handle special returns: DEFER causes a return except on a WARN verb;
3707   ERROR always causes a return. */
3708
3709   switch (cond)
3710     {
3711     case DEFER:
3712     HDEBUG(D_acl) debug_printf("%s: condition test deferred\n", verbs[acl->verb]);
3713     if (basic_errno != ERRNO_CALLOUTDEFER)
3714       {
3715       if (search_error_message != NULL && *search_error_message != 0)
3716         *log_msgptr = search_error_message;
3717       if (smtp_return_error_details) acl_temp_details = TRUE;
3718       }
3719     else
3720       {
3721       acl_temp_details = TRUE;
3722       }
3723     if (acl->verb != ACL_WARN) return DEFER;
3724     break;
3725
3726     default:      /* Paranoia */
3727     case ERROR:
3728     HDEBUG(D_acl) debug_printf("%s: condition test error\n", verbs[acl->verb]);
3729     return ERROR;
3730
3731     case OK:
3732     HDEBUG(D_acl) debug_printf("%s: condition test succeeded\n",
3733       verbs[acl->verb]);
3734     break;
3735
3736     case FAIL:
3737     HDEBUG(D_acl) debug_printf("%s: condition test failed\n", verbs[acl->verb]);
3738     break;
3739
3740     /* DISCARD and DROP can happen only from a nested ACL condition, and
3741     DISCARD can happen only for an "accept" or "discard" verb. */
3742
3743     case DISCARD:
3744     HDEBUG(D_acl) debug_printf("%s: condition test yielded \"discard\"\n",
3745       verbs[acl->verb]);
3746     break;
3747
3748     case FAIL_DROP:
3749     HDEBUG(D_acl) debug_printf("%s: condition test yielded \"drop\"\n",
3750       verbs[acl->verb]);
3751     break;
3752     }
3753
3754   /* At this point, cond for most verbs is either OK or FAIL or (as a result of
3755   a nested ACL condition) FAIL_DROP. However, for WARN, cond may be DEFER, and
3756   for ACCEPT and DISCARD, it may be DISCARD after a nested ACL call. */
3757
3758   switch(acl->verb)
3759     {
3760     case ACL_ACCEPT:
3761     if (cond == OK || cond == DISCARD) return cond;
3762     if (endpass_seen)
3763       {
3764       HDEBUG(D_acl) debug_printf("accept: endpass encountered - denying access\n");
3765       return cond;
3766       }
3767     break;
3768
3769     case ACL_DEFER:
3770     if (cond == OK)
3771       {
3772       acl_temp_details = TRUE;
3773       return DEFER;
3774       }
3775     break;
3776
3777     case ACL_DENY:
3778     if (cond == OK) return FAIL;
3779     break;
3780
3781     case ACL_DISCARD:
3782     if (cond == OK || cond == DISCARD) return DISCARD;
3783     if (endpass_seen)
3784       {
3785       HDEBUG(D_acl) debug_printf("discard: endpass encountered - denying access\n");
3786       return cond;
3787       }
3788     break;
3789
3790     case ACL_DROP:
3791     if (cond == OK) return FAIL_DROP;
3792     break;
3793
3794     case ACL_REQUIRE:
3795     if (cond != OK) return cond;
3796     break;
3797
3798     case ACL_WARN:
3799     if (cond == OK)
3800       acl_warn(where, *user_msgptr, *log_msgptr);
3801     else if (cond == DEFER && (log_extra_selector & LX_acl_warn_skipped) != 0)
3802       log_write(0, LOG_MAIN, "%s Warning: ACL \"warn\" statement skipped: "
3803         "condition test deferred%s%s", host_and_ident(TRUE),
3804         (*log_msgptr == NULL)? US"" : US": ",
3805         (*log_msgptr == NULL)? US"" : *log_msgptr);
3806     *log_msgptr = *user_msgptr = NULL;  /* In case implicit DENY follows */
3807     break;
3808
3809     default:
3810     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "internal ACL error: unknown verb %d",
3811       acl->verb);
3812     break;
3813     }
3814
3815   /* Pass to the next ACL item */
3816
3817   acl = acl->next;
3818   }
3819
3820 /* We have reached the end of the ACL. This is an implicit DENY. */
3821
3822 HDEBUG(D_acl) debug_printf("end of %s: implicit DENY\n", acl_name);
3823 return FAIL;
3824 }
3825
3826
3827 /*************************************************
3828 *        Check access using an ACL               *
3829 *************************************************/
3830
3831 /* This is the external interface for ACL checks. It sets up an address and the
3832 expansions for $domain and $local_part when called after RCPT, then calls
3833 acl_check_internal() to do the actual work.
3834
3835 Arguments:
3836   where        ACL_WHERE_xxxx indicating where called from
3837   recipient    RCPT address for RCPT check, else NULL
3838   s            the input string; NULL is the same as an empty ACL => DENY
3839   user_msgptr  where to put a user error (for SMTP response)
3840   log_msgptr   where to put a logging message (not for SMTP response)
3841
3842 Returns:       OK         access is granted by an ACCEPT verb
3843                DISCARD    access is granted by a DISCARD verb
3844                FAIL       access is denied
3845                FAIL_DROP  access is denied; drop the connection
3846                DEFER      can't tell at the moment
3847                ERROR      disaster
3848 */
3849
3850 int
3851 acl_check(int where, uschar *recipient, uschar *s, uschar **user_msgptr,
3852   uschar **log_msgptr)
3853 {
3854 int rc;
3855 address_item adb;
3856 address_item *addr = NULL;
3857
3858 *user_msgptr = *log_msgptr = NULL;
3859 sender_verified_failed = NULL;
3860 ratelimiters_cmd = NULL;
3861 log_reject_target = LOG_MAIN|LOG_REJECT;
3862
3863 if (where == ACL_WHERE_RCPT)
3864   {
3865   adb = address_defaults;
3866   addr = &adb;
3867   addr->address = recipient;
3868   if (deliver_split_address(addr) == DEFER)
3869     {
3870     *log_msgptr = US"defer in percent_hack_domains check";
3871     return DEFER;
3872     }
3873   deliver_domain = addr->domain;
3874   deliver_localpart = addr->local_part;
3875   }
3876
3877 rc = acl_check_internal(where, addr, s, 0, user_msgptr, log_msgptr);
3878
3879 deliver_domain = deliver_localpart = deliver_address_data =
3880   sender_address_data = NULL;
3881
3882 /* A DISCARD response is permitted only for message ACLs, excluding the PREDATA
3883 ACL, which is really in the middle of an SMTP command. */
3884
3885 if (rc == DISCARD)
3886   {
3887   if (where > ACL_WHERE_NOTSMTP || where == ACL_WHERE_PREDATA)
3888     {
3889     log_write(0, LOG_MAIN|LOG_PANIC, "\"discard\" verb not allowed in %s "
3890       "ACL", acl_wherenames[where]);
3891     return ERROR;
3892     }
3893   return DISCARD;
3894   }
3895
3896 /* A DROP response is not permitted from MAILAUTH */
3897
3898 if (rc == FAIL_DROP && where == ACL_WHERE_MAILAUTH)
3899   {
3900   log_write(0, LOG_MAIN|LOG_PANIC, "\"drop\" verb not allowed in %s "
3901     "ACL", acl_wherenames[where]);
3902   return ERROR;
3903   }
3904
3905 /* Before giving a response, take a look at the length of any user message, and
3906 split it up into multiple lines if possible. */
3907
3908 *user_msgptr = string_split_message(*user_msgptr);
3909 if (fake_response != OK)
3910   fake_response_text = string_split_message(fake_response_text);
3911
3912 return rc;
3913 }
3914
3915
3916
3917 /*************************************************
3918 *             Create ACL variable                *
3919 *************************************************/
3920
3921 /* Create an ACL variable or reuse an existing one. ACL variables are in a
3922 binary tree (see tree.c) with acl_var_c and acl_var_m as root nodes.
3923
3924 Argument:
3925   name    pointer to the variable's name, starting with c or m
3926
3927 Returns   the pointer to variable's tree node
3928 */
3929
3930 tree_node *
3931 acl_var_create(uschar *name)
3932 {
3933 tree_node *node, **root;
3934 root = (name[0] == 'c')? &acl_var_c : &acl_var_m;
3935 node = tree_search(*root, name);
3936 if (node == NULL)
3937   {
3938   node = store_get(sizeof(tree_node) + Ustrlen(name));
3939   Ustrcpy(node->name, name);
3940   (void)tree_insertnode(root, node);
3941   }
3942 node->data.ptr = NULL;
3943 return node;
3944 }
3945
3946
3947
3948 /*************************************************
3949 *       Write an ACL variable in spool format    *
3950 *************************************************/
3951
3952 /* This function is used as a callback for tree_walk when writing variables to
3953 the spool file. To retain spool file compatibility, what is written is -aclc or
3954 -aclm followed by the rest of the name and the data length, space separated,
3955 then the value itself, starting on a new line, and terminated by an additional
3956 newline. When we had only numbered ACL variables, the first line might look
3957 like this: "-aclc 5 20". Now it might be "-aclc foo 20" for the variable called
3958 acl_cfoo.
3959
3960 Arguments:
3961   name    of the variable
3962   value   of the variable
3963   ctx     FILE pointer (as a void pointer)
3964
3965 Returns:  nothing
3966 */
3967
3968 void
3969 acl_var_write(uschar *name, uschar *value, void *ctx)
3970 {
3971 FILE *f = (FILE *)ctx;
3972 fprintf(f, "-acl%c %s %d\n%s\n", name[0], name+1, Ustrlen(value), value);
3973 }
3974
3975 /* End of acl.c */