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