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