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