The check_compat Rule Set

Not all situations can be resolved by simply checking the RCPT To: or MAIL From: address. Sometimes you will need to make judgments based on pairs of addresses, or non-SMTP addresses or other information. To handle this situation, V8.8 introduced the check_compat rule set. Unlike check_mail and check_rcpt, check_compat is called for all deliveries, not just SMTP transactions. It is called after an address has undergone aliases translation, just after the check for too large a size (as defined by M=; see M= on page 746) and just before the checkcompat( ) routine (Appendix C on page 1248).

Note that although with V8.12 and later you can still write your own check_compat rule set, doing so has been made unnecessary by the FEATURE(compat_check) (FEATURE(compat_check)—V8.12 and Later on page 288). But also note that, as of V8.12, you cannot both declare the FEATURE(compat_check) and use this check_compat rule set.

The check_compat rule set is called with a workspace that looks like this:

sender $| recipient

The sender and recipient addresses are separated by the $| operator. Each has undergone aliasing and ~/.forward file processing.

One use for the check_compat rule set is to prevent a certain user (here, operator/) from sending mail offsite:

LOCAL_RULESETS SGet_domain R $* $: $>canonify $1 focus on host R $* <@ $+. > $* $1 <@ $2> $3 strip trailing dots R $* <@ $+ > $* $: $2 isolate the host R $* . $+ . $+ $2 . $3 strip host and subdomains SGet_user R $* $: $>3 $1 ...

Get sendmail, 4th Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.