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