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