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