+# our exim class
+# @param use_smarthost use the smarthost
+# @param smarthost host to relay through (if set and use_smarthost)
+# @param is_bugsmx this system handles bugs.debian.org
+# @param is_mailrelay this system is a mailrelay, both in and out, for debian hosts
+# @param is_rtmaster this system handles rt.debian.org
+# @param is_packagesmaster this system handles packagesrt.debian.org
+# @param is_packagesqamaster this system handles packages.qa.debian.org
+# @param smarthost_port the port on which satellites send mail to the smarthost
class exim (
+ Boolean $use_smarthost = true,
+ Optional[String] $smarthost,
Boolean $is_bugsmx = false,
Boolean $is_mailrelay = false,
Boolean $is_rtmaster = false,
include exim::vdomain::setup
include debian_org::mail_incoming_port
+ if $use_smarthost {
+ $heavy = false
+
+ if ! smarthost {
+ fail('No smarthost set but use_smarthost is true')
+ }
+ } else {
+ $heavy = true
+ }
+
munin::check { 'ps_exim4': script => 'ps_' }
munin::check { 'exim_mailqueue': }
munin::check { 'exim_mailstats': }
# MAIN CONFIGURATION SETTINGS #
######################################################################
-<%- if scope.lookupvar('deprecated::nodeinfo').has_key?('heavy_exim') and scope.lookupvar('deprecated::nodeinfo')['heavy_exim'] -%>
+<%- if @heavy -%>
perl_startup = do '/etc/exim4/exim_surbl.pl'
<%- end -%>
acl_smtp_helo = check_helo
acl_smtp_rcpt = ${if ={$interface_port}{587} {check_submission}{check_recipient}}
acl_smtp_data = check_message
-<%- if scope.lookupvar('deprecated::nodeinfo').has_key?('heavy_exim') and scope.lookupvar('deprecated::nodeinfo')['heavy_exim'] -%>
+<%- if @heavy -%>
acl_smtp_mime = acl_check_mime
<%- end -%>
acl_smtp_predata = acl_check_predata
message_size_limit = 100M
message_logs = false
smtp_accept_max_per_host = ${if match_ip {$sender_host_address}{+debianhosts}{0}{7}}
-<%- if scope.lookupvar('deprecated::nodeinfo').has_key?('heavy_exim') and scope.lookupvar('deprecated::nodeinfo')['heavy_exim'] -%>
+<%- if @heavy -%>
smtp_accept_max = 300
smtp_accept_queue = 200
smtp_accept_queue_per_connection = 50
delay_warning =
-<%- if scope.lookupvar('deprecated::nodeinfo').has_key?('heavy_exim') and scope.lookupvar('deprecated::nodeinfo')['heavy_exim'] -%>
+<%- if @heavy -%>
message_body_visible = 5000
queue_run_max = 50
deliver_queue_load_max = 50
accept verify = certificate
<%- end -%>
-<%- if scope.lookupvar('deprecated::nodeinfo')['smarthost'].empty? -%>
+<%- unless @use_smarthost -%>
# These are in HELO acl so that they are only run once. They increment a counter,
# so we don't want it to increment per rcpt to.
accept local_parts = +postmasterish
domains = +virtual_domains : +bsmtp_domains
-<%- if scope.lookupvar('deprecated::nodeinfo')['smarthost'].empty? -%>
+<%- unless @use_smarthost -%>
deny message = host $sender_host_address is listed in $dnslist_domain; see $dnslist_text
dnslists = ${if match_domain{$domain}{+virtual_domains}\
{${if exists {${extract{directory}{VDOMAINDATA}{${value}/rbllist}}}\
domains = +handled_domains
!hosts = +debianhosts : WHITELIST
-<%- if scope.lookupvar('deprecated::nodeinfo')['smarthost'].empty? -%>
+<%- unless @use_smarthost -%>
deny domains = +handled_domains
local_parts = ${if match_domain{$domain}{+virtual_domains}\
{${if exists {${extract{directory}{VDOMAINDATA}{${value}/callout_users}}}\
deny message = relay not permitted
-<%- if scope.lookupvar('deprecated::nodeinfo').has_key?('heavy_exim') and scope.lookupvar('deprecated::nodeinfo')['heavy_exim'] -%>
+<%- if @heavy -%>
acl_check_mime:
accept verify = certificate
message = X-malware detected: $malware_name
<%- end -%>
-<%- if scope.lookupvar('deprecated::nodeinfo').has_key?('heavy_exim') and scope.lookupvar('deprecated::nodeinfo')['heavy_exim'] -%>
+<%- if @heavy -%>
discard condition = ${if <{$message_size}{256000}}
condition = ${if eq {$acl_m_prf}{blackhole}}
set acl_m_srb = ${perl{surblspamcheck}}
transport = remote_smtp
ignore_target_hosts = +reservedaddrs
-<%=
-out = ""
-if not scope.lookupvar('deprecated::nodeinfo')['smarthost'].empty?
-out = "
+<%- if @use_smarthost -%>
smarthost:
- debug_print = \"R: smarthost for $local_part@$domain\"
+ debug_print = "R: smarthost for $local_part@$domain"
driver = manualroute
domains = !+handled_domains
transport = remote_smtp_smarthost
- route_list = * #{scope.lookupvar('deprecated::nodeinfo')['smarthost']}
+ route_list = * <%= @smarthost %>
host_find_failed = defer
same_domain_copy_routing = yes
no_more
-"
-end
-out
-%>
+<%- end -%>
# This router routes to remote hosts over SMTP using a DNS lookup.
# Ignore reserved network responses, including localhost.
tls_certificate = /etc/exim4/ssl/thishost.crt
tls_privatekey = /etc/exim4/ssl/thishost.key
-<%- if not scope.lookupvar('deprecated::nodeinfo')['smarthost'].empty? -%>
+<%- if @use_smarthost -%>
remote_smtp_smarthost:
debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
driver = smtp
delay_after_cutoff = false
port = <%= @smarthost_port %>
tls_tempfail_tryclear = false
- hosts_require_tls = <%= scope.lookupvar('deprecated::nodeinfo')['smarthost'] %>
+ hosts_require_tls = <%= @smarthost %>
tls_certificate = /etc/exim4/ssl/thishost.crt
tls_privatekey = /etc/exim4/ssl/thishost.key
<%- end -%>