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