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