eximconf: add an alternative SMTP router for "single domain" domains
[mirror/dsa-puppet.git] / modules / exim / templates / eximconf.erb
index 858c94b..9768f25 100644 (file)
@@ -32,6 +32,8 @@
 #           flushing' operations, but should be populated with a list
 #           of trusted machines. Wildcards are not permitted
 #  bsmtp_domains - Domains that we deliver locally via bsmtp
+#  submission-domains - Domains for which mail will be accepted via the
+#           submission port
 <%- if @is_mailrelay -%>
 #  mailhubdomains - Domains for which we are the MX, but the mail is relayed
 #           elsewhere.  This is designed for use with small volume or
@@ -126,10 +128,13 @@ localpartlist local_only_users = lsearch;/etc/exim4/localusers
 
 localpartlist postmasterish = postmaster : abuse : hostmaster
 
-hostlist debianhosts = <; ; 127.0.0.1 ; ::1 ; /var/lib/misc/thishost/debianhosts ; 89.16.166.49 ; 82.195.75.76 ; 2001:41b8:202:deb:bab5:0:52c3:4b4c
+hostlist debianhosts = <; ; 127.0.0.1 ; ::1 ; /var/lib/misc/thishost/debianhosts
 
 hostlist reservedaddrs = 0.0.0.0/8 : 127.0.0.0/8 : 10.0.0.0/8 : 169.254.0.0/16 : 172.16.0.0/12 : 192.0.0.0/24 : 192.168.0.0/16 : 224.0.0.0/4 : 240.0.0.0/5 : 248.0.0.0/5
 
+domainlist google_mxen = aspmx.l.google.com : gmail-smtp-in.l.google.com
+domainlist single_domain_mx = +google_mxen
+
 <%- if @is_mailrelay -%>
 # Domains we relay for; that is domains that aren't considered local but we 
 # accept mail for them.
@@ -293,10 +298,11 @@ acl_spamlovers:
   deny
 
 acl_getprofile:
-  # This is a bad hack to reset the variable, by defining it be something
-  # never referenced.
 
-  warn    set acl_m_rprf = $acl_m_undefined
+  # Determine the mail profile for this recipient.
+  # An empty string implies no match has been found.
+
+  warn    set acl_m_rprf = 
 
   warn    recipients     = survey@popcon.debian.org
           set acl_m_rprf = PopconMail
@@ -502,8 +508,6 @@ check_helo:
 #!!# ACL that is used after the RCPT command on the submission port
 check_submission:
 
-  # Accept if the source is local SMTP (i.e. not over TCP/IP).
-  # We do this by testing for an empty sending host field.
   accept  hosts = +debianhosts
 
 <%- if @is_mailrelay -%>
@@ -1056,7 +1060,10 @@ begin routers
 relay_manualroute:
   driver = manualroute
   domains = +mailhubdomains
-  transport = remote_smtp
+  transport = ${if forany{${lookup dnsdb{>: mxh=$domain}}}\
+                  {match_domain{$item}{+single_domain_mx}}\
+                  {remote_smtp_single_domain}{remote_smtp}\
+               }
   route_data = ${lookup{$domain}lsearch{/etc/exim4/manualroute}}
   require_files = /etc/exim4/manualroute
 
@@ -1099,7 +1106,10 @@ dnslookup:
   debug_print = "R: dnslookup for $local_part@$domain"
   driver = dnslookup
   domains = !+handled_domains
-  transport = remote_smtp
+  transport = ${if forany{${lookup dnsdb{>: mxh=$domain}}}\
+                  {match_domain{$item}{+single_domain_mx}}\
+                  {remote_smtp_single_domain}{remote_smtp}\
+               }
   ignore_target_hosts = +reservedaddrs
   no_more
 
@@ -1562,6 +1572,14 @@ remote_smtp:
   tls_certificate = /etc/exim4/ssl/thishost.crt
   tls_privatekey = /etc/exim4/ssl/thishost.key
 
+remote_smtp_single_domain:
+  driver = smtp
+  connect_timeout = 15s
+  delay_after_cutoff = false
+  no_multi_domain
+  tls_certificate = /etc/exim4/ssl/thishost.crt
+  tls_privatekey = /etc/exim4/ssl/thishost.key
+
 <%- if @use_smarthost -%>
 remote_smtp_smarthost:
   debug_print = "T: remote_smtp_smarthost for $local_part@$domain"