X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=modules%2Fexim%2Ftemplates%2Feximconf.erb;h=774e38950b2c562e3984e20a61155cfe9f6e0c36;hb=1a18b394bd4661e2abf68adedb41f5d760830bc2;hp=376d62da6f91a6227949952059d6fe34d5aa3b4d;hpb=f1a48dc8cd819d2700a3e96e7c3797bdbc60901c;p=mirror%2Fdsa-puppet.git diff --git a/modules/exim/templates/eximconf.erb b/modules/exim/templates/eximconf.erb index 376d62da6..774e38950 100644 --- a/modules/exim/templates/eximconf.erb +++ b/modules/exim/templates/eximconf.erb @@ -76,7 +76,7 @@ # MAIN CONFIGURATION SETTINGS # ###################################################################### -<%- if nodeinfo.has_key?('heavy_exim') and not nodeinfo['heavy_exim'].empty? -%> +<%- if nodeinfo.has_key?('heavy_exim') and nodeinfo['heavy_exim'] -%> perl_startup = do '/etc/exim4/exim_surbl.pl' <%- end -%> @@ -87,7 +87,7 @@ perl_startup = do '/etc/exim4/exim_surbl.pl' acl_smtp_helo = check_helo acl_smtp_rcpt = ${if ={$interface_port}{587} {check_submission}{check_recipient}} acl_smtp_data = check_message -<%- if nodeinfo.has_key?('heavy_exim') and not nodeinfo['heavy_exim'].empty? -%> +<%- if nodeinfo.has_key?('heavy_exim') and nodeinfo['heavy_exim'] -%> acl_smtp_mime = acl_check_mime <%- end -%> acl_smtp_predata = acl_check_predata @@ -117,9 +117,9 @@ domainlist handled_domains = +local_domains : +virtual_domains : +bsmtp_domains localpartlist local_only_users = lsearch;/etc/exim4/localusers -localpartlist postmasterish = postmaster : abuse : hostmaster : root +localpartlist postmasterish = postmaster : abuse : hostmaster -hostlist debianhosts = 127.0.0.1 : /var/lib/misc/thishost/debianhosts +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 reservedaddrs = <%= nodeinfo['reservedaddrs'] %> @@ -169,7 +169,7 @@ timeout_frozen_after=14d message_size_limit = 100M message_logs = false smtp_accept_max_per_host = ${if match_ip {$sender_host_address}{+debianhosts}{0}{7}} -<%- if nodeinfo.has_key?('heavy_exim') and not nodeinfo['heavy_exim'].empty? -%> +<%- if nodeinfo.has_key?('heavy_exim') and nodeinfo['heavy_exim'] -%> smtp_accept_max = 300 smtp_accept_queue = 200 smtp_accept_queue_per_connection = 50 @@ -188,7 +188,8 @@ check_spool_space = 20M delay_warning = -<%- if nodeinfo.has_key?('heavy_exim') and not nodeinfo['heavy_exim'].empty? -%> +<%- if nodeinfo.has_key?('heavy_exim') and nodeinfo['heavy_exim'] -%> +message_body_visible = 5000 queue_run_max = 50 deliver_queue_load_max = 50 queue_only_load = 35 @@ -247,16 +248,16 @@ received_header_text = Received: ${if def:sender_rcvhost {from $sender_rcvhost\n # macro definitions. # Do not wrap! VDOMAINDATA = ${lookup{$domain}partial-lsearch{/etc/exim4/virtualdomains}{$value}} -WHITELIST = ${if match_domain{$domain}{+virtual_domains}{\ - ${if exists {/srv/$domain/mail/whitelist}{\ - ${lookup{$local_part}lsearch{/srv/$domain/mail/whitelist}{$value}{}}\ - }{}}\ - }{${lookup{$local_part}lsearch{/etc/exim4/whitelist}{$value}{}} : ${lookup{$local_part}lsearch{/var/lib/misc/$primary_hostname/mail-whitelist}{$value}{}}}} +WHITELIST = ${if match_domain{$domain}{+virtual_domains}\ + {${if exists {${extract{directory}{VDOMAINDATA}{${value}/whitelist}}}\ + {${lookup{$local_part}lsearch{${extract{directory}{VDOMAINDATA}{${value}/whitelist}}}{$value}{}}}{}}}\ + {/etc/exim4/whitelist} } : \ + ${lookup{$local_part}lsearch{/var/lib/misc/$primary_hostname/mail-whitelist}{$value}{}} GREYLIST_LOCAL_PARTS = ${if match_domain{$domain}{+virtual_domains}\ - {${if exists {${extract{directory}{VDOMAINDATA}{${value}/grey_users}}}\ - {${lookup{$local_part}lsearch*{${extract{directory}{VDOMAINDATA}{${value}/grey_users}}}{$local_part}{}}}{}}}\ - {${lookup{$local_part}lsearch{/etc/exim4/grey_users}{$local_part}{}} : \ - ${lookup{$local_part}lsearch{/var/lib/misc/$primary_hostname/mail-greylist}{$local_part}{}}}} + {${if exists {${extract{directory}{VDOMAINDATA}{${value}/grey_users}}}\ + {${lookup{$local_part}lsearch*{${extract{directory}{VDOMAINDATA}{${value}/grey_users}}}{$local_part}{}}}{}}}\ + {${lookup{$local_part}lsearch{/etc/exim4/grey_users}{$local_part}{}}}} : \ + ${lookup{$local_part}lsearch{/var/lib/misc/$primary_hostname/mail-greylist}{$local_part}{}} RT_QUEUE_MAP = /srv/rt.debian.org/mail/rt_queue_map ###################################################################### @@ -338,27 +339,39 @@ acl_getprofile: warn domains = +virtual_domains condition = ${if exists {${extract{directory}{VDOMAINDATA}{${value}/contentinspectionaction}}}} condition = ${if eq{${lookup{$local_part}lsearch*{${extract{directory}{VDOMAINDATA}{${value}/contentinspectionaction}}}{$value}{}}}{markup}} - log_message = $local_part@$domain: markup set acl_m_rprf = markup accept condition = ${if eq {$acl_m_rprf}{}{no}{yes}} - warn condition = ${if eq{${lookup{$local_part}cdb{/var/lib/misc/${primary_hostname}/mail-contentinspectionaction.cdb}{$value}{}}}{markup}} - log_message = $local_part@$domain: markup + warn domains = +virtual_domains + condition = ${if exists {${extract{directory}{VDOMAINDATA}{${value}/contentinspectionaction}}}} + condition = ${if eq{${lookup{$local_part}lsearch*{${extract{directory}{VDOMAINDATA}{${value}/contentinspectionaction}}}{$value}{}}}{blackhole}} + set acl_m_rprf = blackhole + + accept condition = ${if eq {$acl_m_rprf}{}{no}{yes}} + + warn domains = +virtual_domains + condition = ${if exists {${extract{directory}{VDOMAINDATA}{${value}/contentinspectionaction.cdb}}}} + condition = ${if eq{${lookup{$local_part}cdb{${extract{directory}{VDOMAINDATA}{${value}/contentinspectionaction.cdb}}}{$value}{}}}{markup}} set acl_m_rprf = markup accept condition = ${if eq {$acl_m_rprf}{}{no}{yes}} - warn condition = ${if eq{${lookup{$local_part}cdb{/var/lib/misc/${primary_hostname}/mail-contentinspectionaction.cdb}{$value}{}}}{blackhole}} - log_message = $local_part@$domain: blackhole + warn domains = +virtual_domains + condition = ${if exists {${extract{directory}{VDOMAINDATA}{${value}/contentinspectionaction.cdb}}}} + condition = ${if eq{${lookup{$local_part}cdb{${extract{directory}{VDOMAINDATA}{${value}/contentinspectionaction.cdb}}}{$value}{}}}{blackhole}} set acl_m_rprf = blackhole accept condition = ${if eq {$acl_m_rprf}{}{no}{yes}} - warn domains = +virtual_domains - condition = ${if exists {${extract{directory}{VDOMAINDATA}{${value}/contentinspectionaction}}}} - condition = ${if eq{${lookup{$local_part}lsearch*{${extract{directory}{VDOMAINDATA}{${value}/contentinspectionaction}}}{$value}{}}}{blackhole}} - log_message = $local_part@$domain: blackhole + warn domains = +local_domains + condition = ${if eq{${lookup{$local_part}cdb{/var/lib/misc/${primary_hostname}/mail-contentinspectionaction.cdb}{$value}{}}}{markup}} + set acl_m_rprf = markup + + accept condition = ${if eq {$acl_m_rprf}{}{no}{yes}} + + warn domains = +local_domains + condition = ${if eq{${lookup{$local_part}cdb{/var/lib/misc/${primary_hostname}/mail-contentinspectionaction.cdb}{$value}{}}}{blackhole}} set acl_m_rprf = blackhole accept condition = ${if eq {$acl_m_rprf}{}{no}{yes}} @@ -465,7 +478,7 @@ 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 = : 127.0.0.1 + accept hosts = +debianhosts <%- if nodeinfo['mailrelay'] -%> accept verify = certificate @@ -507,11 +520,13 @@ check_recipient: accept verify = certificate <%- end -%> + accept hosts = <; ::1 ; 127.0.0.1 ; @ warn acl = acl_getprofile condition = ${if eq{$acl_m_prf}{}} set acl_m_prf = $acl_m_rprf defer condition = ${if eq{$acl_m_prf}{$acl_m_rprf}{no}{yes}} + message = Different profile, please retry log_message = Only one profile at a time, please # Defer after too many bad RCPT TO's. Legit MTAs will retry later. @@ -564,7 +579,7 @@ check_recipient: # disabled accounts don't even get local mail. deny domains = +virtual_domains local_parts = ${if exists {${extract{directory}{VDOMAINDATA}{${value}/mail-disable}}}\ - {${extract{directory}{VDOMAINDATA}{${value}/mail-disable}}}\ + {lsearch;${extract{directory}{VDOMAINDATA}{${value}/mail-disable}}}\ {}} message = ${lookup{$local_part}lsearch{${extract{directory}{VDOMAINDATA}{${value}/mail-disable}}}{$value}} @@ -601,6 +616,7 @@ check_recipient: message = mail from <$sender_address> not allowed externally deny sender_domains= +virtual_domains + condition = ${if exists {${extract{directory}{VDOMAINDATA}{${value}/localusers}}}} condition = ${lookup{$sender_address_local_part}lsearch{${extract{directory}{VDOMAINDATA}{${value}/localusers}}}{true}} hosts = !+debianhosts message = mail from <$sender_address> not allowed externally @@ -613,12 +629,6 @@ check_recipient: warn condition = ${if eq{$acl_m_prf}{localonly}} set acl_m_lrc = ${if eq{$acl_m_lrc}{}{$local_part@$domain}{$acl_m_lrc, $local_part@$domain}} -<%- if 0 == 1 -%> - deny message = address $sender_host_address is listed in $dnslist_domain; $dnslist_text - hosts = !+debianhosts - dnslists = rbl.debian.net : rbl.debian.net/$sender_address_domain - -<%- end -%> <%- if nodeinfo['packagesmaster'] -%> warn condition = ${if eq {$acl_m_prf}{PackagesMail}} condition = ${if eq {$sender_address}{$local_part@$domain}} @@ -790,8 +800,8 @@ check_recipient: dnslists = ${if match_domain{$domain}{+virtual_domains}\ {${if exists {${extract{directory}{VDOMAINDATA}{${value}/rbllist}}}\ {${lookup{$local_part}lsearch*{${extract{directory}{VDOMAINDATA}{${value}/rbllist}}}{$value}{}}}{}}}\ - {${lookup{$local_part}lsearch{/etc/exim4/rbllist}{$value}{}} : \ - ${lookup{$local_part}lsearch{/var/lib/misc/$primary_hostname/mail-rbl}{$value}{}}}} + {${lookup{$local_part}lsearch{/etc/exim4/rbllist}{$value}{}}}} : \ + ${lookup{$local_part}lsearch{/var/lib/misc/$primary_hostname/mail-rbl}{$value}{}} domains = +handled_domains !hosts = +debianhosts : WHITELIST @@ -800,18 +810,18 @@ check_recipient: dnslists = ${if match_domain{$domain}{+virtual_domains}\ {${if exists {${extract{directory}{VDOMAINDATA}{${value}/rhsbllist}}}\ {${expand:${lookup{$local_part}lsearch*{${extract{directory}{VDOMAINDATA}{${value}/rhsbllist}}}{$value}{}}}}{}}}\ - {${expand:${lookup{$local_part}lsearch{/etc/exim4/rhsbllist}{$value}{}}} : \ - ${expand:${lookup{$local_part}lsearch{/var/lib/misc/$primary_hostname/mail-rhsbl}{$value}{}}}}} + {${expand:${lookup{$local_part}lsearch{/etc/exim4/rhsbllist}{$value}{}}}}} : \ + ${expand:${lookup{$local_part}lsearch{/var/lib/misc/$primary_hostname/mail-rhsbl}{$value}{}}} domains = +handled_domains !hosts = +debianhosts : WHITELIST <%- if nodeinfo['smarthost'].empty? -%> deny domains = +handled_domains - local_parts = ${if match_domain{$domain}{+virtual_domains}\ - {${if exists {${extract{directory}{VDOMAINDATA}{${value}/callout_users}}}\ - {${lookup{$local_part}lsearch*{${extract{directory}{VDOMAINDATA}{${value}/callout_users}}}{$local_part}{}}}{}}}\ - {${lookup{$local_part}lsearch{/etc/exim4/callout_users}{$local_part}{}} : \ - ${lookup{$local_part}lsearch{/var/lib/misc/$primary_hostname/mail-callout}{$local_part}{}}}} + local_parts = ${if match_domain{$domain}{+virtual_domains}\ + {${if exists {${extract{directory}{VDOMAINDATA}{${value}/callout_users}}}\ + {${lookup{$local_part}lsearch*{${extract{directory}{VDOMAINDATA}{${value}/callout_users}}}{$local_part}{}}}{}}}\ + {${lookup{$local_part}lsearch{/etc/exim4/callout_users}{$local_part}{}}}} : \ + ${lookup{$local_part}lsearch{/var/lib/misc/$primary_hostname/mail-callout}{$local_part}{}} !hosts = +debianhosts : WHITELIST !verify = sender/callout=90s,maxwait=300s @@ -832,9 +842,12 @@ check_recipient: deny message = relay not permitted -<%- if nodeinfo.has_key?('heavy_exim') and not nodeinfo['heavy_exim'].empty? -%> +<%- if nodeinfo.has_key?('heavy_exim') and nodeinfo['heavy_exim'] -%> acl_check_mime: + accept verify = certificate + accept hosts = +debianhosts + discard condition = ${if <{$message_size}{256000}} condition = ${if eq {$acl_m_prf}{blackhole}} set acl_m_srb = ${perl{surblspamcheck}} @@ -892,7 +905,8 @@ check_message: } message = Mail to this address needs to be PGP-signed - accept verify = certificate + accept verify = certificate + accept hosts = +debianhosts deny condition = ${if eq {$acl_m_prf}{PopconMail}{no}{yes}} !verify = header_syntax @@ -932,7 +946,7 @@ check_message: message = X-malware detected: $malware_name <%- end -%> -<%- if nodeinfo.has_key?('heavy_exim') and not nodeinfo['heavy_exim'].empty? -%> +<%- if nodeinfo.has_key?('heavy_exim') and nodeinfo['heavy_exim'] -%> discard condition = ${if <{$message_size}{256000}} condition = ${if eq {$acl_m_prf}{blackhole}} set acl_m_srb = ${perl{surblspamcheck}} @@ -983,8 +997,7 @@ check_message: begin rewrite -\N^buildd_(.*)@ries\.debian\.org$\N buildd_$1@buildd.debian.org T -\N^buildd_(.*)@klecker\.debian\.org$\N buildd_$1@buildd.debian.org T +\N^buildd_(.*)@franck\.debian\.org$\N buildd_$1@buildd.debian.org T *@debian.org ${lookup{$1}cdb{/var/lib/misc/${primary_hostname}/mail-forward.cdb}{$value}fail} T *@people.debian.org ${lookup{$1}cdb{/var/lib/misc/${primary_hostname}/mail-forward.cdb}{$value}fail} T #*@${primary_hostname} "${if exists{/etc/exim4/email-addresses}{${lookup{$1}lsearch{/etc/exim4/email-addresses}{$value}fail}}fail}" fFs @@ -1118,7 +1131,11 @@ userforward_verify: user = Debian-exim no_check_local_user directory_transport = address_directory +<%- if fqdn == "master.debian.org" -%> + domains = +local_domains : debian.org +<%- else -%> domains = +local_domains +<%- end -%> # filter - I have disabled filtering to force users to use .forward-foo files # or procmail. This will make it easier to move mailers in the future # @@ -1142,13 +1159,66 @@ userforward_verify: router_home_directory = ${lookup passwd{$local_part}{${extract{5}{:}{$value}}}fail} verify_only +# This is a senmailesque alias file lookup +virt_aliases: + debug_print = "R: virt_aliases for $local_part@$domain" + driver = redirect + allow_defer + allow_fail + data = ${if exists{\ + ${extract{directory}{VDOMAINDATA}{${value}/aliases}}}\ + {${lookup{$local_part}lsearch*{\ + ${extract{directory}{VDOMAINDATA}{$value/aliases}}\ + }}}} + directory_transport = address_directory + domains = +virtual_domains + file_transport = ${if eq {${extract{group_writable}{VDOMAINDATA}}}{true}{address_file_group}{address_file}} + cannot_route_message = Unknown user + group = ${extract{group}{VDOMAINDATA}} + headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}" + pipe_transport = address_pipe + qualify_preserve_domain + retry_use_local_part + transport_current_directory = ${extract{directory}{VDOMAINDATA}} + transport_home_directory = ${extract{directory}{VDOMAINDATA}} + user = ${extract{user}{VDOMAINDATA}} + +# No direct match, so try doing a regex match if there's an +# aliases.regex +virt_aliases_regex: + debug_print = "R: virt_aliases_regex for $local_part$local_part_suffix@$domain" + driver = redirect + allow_defer + allow_fail + data = ${if exists{\ + ${extract{directory}{VDOMAINDATA}{${value}/aliases.regex}}}\ + {${lookup{$local_part}nwildlsearch*{\ + ${extract{directory}{VDOMAINDATA}{$value/aliases.regex}}\ + }}}} + directory_transport = address_directory + domains = +virtual_domains + file_transport = ${if eq {${extract{group_writable}{VDOMAINDATA}}}{true}{address_file_group}{address_file}} + cannot_route_message = Unknown user + group = ${extract{group}{VDOMAINDATA}} + headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}" + pipe_transport = address_pipe + qualify_preserve_domain + retry_use_local_part + transport_current_directory = ${extract{directory}{VDOMAINDATA}} + transport_home_directory = ${extract{directory}{VDOMAINDATA}} + user = ${extract{user}{VDOMAINDATA}} + userforward: debug_print = "R: userforward for $local_part${local_part_suffix}@$domain" driver = redirect check_ancestor check_local_user directory_transport = address_directory +<%- if fqdn == "master.debian.org" -%> + domains = +local_domains : debian.org +<%- else -%> domains = +local_domains +<%- end -%> # filter - I have disabled filtering to force users to use .forward-foo files # or procmail. This will make it easier to move mailers in the future # @@ -1176,7 +1246,11 @@ procmail: debug_print = "R: procmail for $local_part@$domain" driver = accept check_local_user +<%- if fqdn == "master.debian.org" -%> + domains = +local_domains : debian.org +<%- else -%> domains = +local_domains +<%- end -%> headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}" local_part_suffix = -* local_part_suffix_optional @@ -1192,11 +1266,13 @@ ldap_aliases: driver = redirect allow_defer allow_fail - data = ${if exists{/var/lib/misc/$primary_hostname/mail-forward.cdb}\ + data = ${if exists{/var/lib/misc/$primary_hostname/user-forward.cdb}\ {${lookup{$local_part}cdb\ - {/var/lib/misc/$primary_hostname/mail-forward.cdb}}}} + {/var/lib/misc/$primary_hostname/user-forward.cdb}}}} domains = +local_domains file_transport = address_file + local_part_suffix = -* + local_part_suffix_optional headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}" pipe_transport = address_pipe retry_use_local_part @@ -1207,6 +1283,8 @@ localuser: driver = accept check_local_user domains = +local_domains + local_part_suffix = -* + local_part_suffix_optional headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}" # Disable if the user has never logged in require_files = $home @@ -1235,32 +1313,6 @@ packages: no_more <%- end -%> -<%= -out = "" -if nodeinfo['bugsmaster'] or nodeinfo['bugsmx'] - domain = 'bugs.debian.org' - if nodeinfo['bugsmaster'] - domain = 'bugs-master.debian.org' - end - out = ' -# This router delivers for bugs.d.o -bugs: - debug_print = "R: bugs for $local_part@$domain" - driver = accept - transport = bugs_pipe - domains = ' + domain + ' - cannot_route_message = Unknown or archived bug - require_files = /org/bugs.debian.org/mail/run-procmail - no_more - local_parts = ${if match\ - {$local_part}\ - {\N^(\d+)(\d{2})(?:-(?:(?:submit|maintonly|quiet|forwarded|done|close|request|submitter)|(?:unsubscribe|ignore|help|(?:sub(?:scribe|help|yes|approve|reject))|unsubyes|bounce|probe|approve|reject|setlistyes|setlistsilentyes).*))?$\N}\ - {${if exists{/org/bugs.debian.org/spool/db-h/$2/$1$2.summary}\ - {$local_part}fail}}fail} -' -end -out -%> <%- if nodeinfo['rtmaster'] -%> # This router delivers for rt.d.o rt_force_new_verbose: @@ -1272,7 +1324,8 @@ rt_force_new_verbose: local_part_suffix = +new pipe_transport = rt_pipe data = "|/usr/bin/rt-mailgate --queue '${lookup{${sg{$local_part}{-comment}{}}}lsearch{RT_QUEUE_MAP}}' --url https://rt.debian.org/ --action ${if match{$local_part}{.*-comment.*}{comment}{correspond}}" - headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}" + headers_remove = Subject + headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}\nSubject: ${if and {{first_delivery}{match {$h_subject:}{(?i)(.*?)\\\\[?debian rt\\\\]?[:\\s]*(.*)}}} {$1$2}{$h_subject:}}" # FIXME: figure out how to generalize this approach so that all of the following would work # - rt+NNNN@rt.debian.org : attach correspondence to ticket (verbose) @@ -1288,7 +1341,8 @@ rt_force_new_quiesce: local_part_suffix = +new-quiesce pipe_transport = rt_pipe data = "|/usr/bin/rt-mailgate --queue '${lookup{${sg{$local_part}{-comment}{}}}lsearch{RT_QUEUE_MAP}}' --url https://rt.debian.org/ --action ${if match{$local_part}{.*-comment.*}{comment}{correspond}}" - headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}\nX-RT-Mode: quiesce" + headers_remove = Subject + headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}\nX-RT-Mode: quiesce\nSubject: ${if and {{first_delivery}{match {$h_subject:}{(?i)(.*?)\\\\[?debian rt\\\\]?[:\\s]*(.*)}}} {$1$2}{$h_subject:}}" rt_otherwise: debug_print = "R: rt for $local_part@$domain" @@ -1300,7 +1354,8 @@ rt_otherwise: local_part_suffix_optional pipe_transport = rt_pipe data = "|/usr/bin/rt-mailgate --queue '${lookup{${sg{$local_part}{-comment}{}}}lsearch{RT_QUEUE_MAP}}' --url https://rt.debian.org/ --extension ticket --action ${if match{$local_part}{.*-comment.*}{comment}{correspond}}" - headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}" + headers_remove = Subject + headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}\nSubject: ${if and {{first_delivery}{match {$h_subject:}{(?i)(.*?)\\\\[?debian rt\\\\]?[:\\s]*(.*)}}} {$1$2}{$h_subject:}}" <%- end -%> @@ -1317,6 +1372,8 @@ virt_direct_verify: modemask = 002 directory_transport = address_directory domains = +virtual_domains + local_part_suffix = -* + local_part_suffix_optional file = $home/.forward-\ ${if exists {${home}/.forward-${local_part}}{${local_part}}\ {default}} @@ -1328,30 +1385,6 @@ virt_direct_verify: transport_current_directory = ${extract{directory}{VDOMAINDATA}} verify_only -# This is a senmailesque alias file lookup -virt_aliases: - debug_print = "R: virt_aliases for $local_part@$domain" - driver = redirect - allow_defer - allow_fail - data = ${if exists{\ - ${extract{directory}{VDOMAINDATA}{${value}/aliases}}}\ - {${lookup{$local_part}lsearch*{\ - ${extract{directory}{VDOMAINDATA}{$value/aliases}}\ - }}}} - directory_transport = address_directory - domains = +virtual_domains - file_transport = ${if eq {${extract{group_writable}{VDOMAINDATA}}}{true}{address_file_group}{address_file}} - cannot_route_message = Unknown user - group = ${extract{group}{VDOMAINDATA}} - headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}" - pipe_transport = address_pipe - qualify_preserve_domain - retry_use_local_part - transport_current_directory = ${extract{directory}{VDOMAINDATA}} - transport_home_directory = ${extract{directory}{VDOMAINDATA}} - user = ${extract{user}{VDOMAINDATA}} - # This is a qmailesque deliver into a directory of .forward files virt_direct: debug_print = "R: virt_direct for $local_part@$domain" @@ -1369,6 +1402,8 @@ virt_direct: group = ${extract{group}{VDOMAINDATA}} headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}" modemask = 002 + local_part_suffix = -* + local_part_suffix_optional pipe_transport = address_pipe reply_transport = address_reply retry_use_local_part @@ -1387,7 +1422,6 @@ virt_users: allow_fail router_home_directory = ${extract{directory}{VDOMAINDATA}} transport_current_directory = ${extract{directory}{VDOMAINDATA}} - file = ${extract{directory}{VDOMAINDATA}{${value}/mail-forward.cdb}} user = ${extract{user}{VDOMAINDATA}} group = ${extract{group}{VDOMAINDATA}} data = ${if exists{${extract{directory}{VDOMAINDATA}{${value}/mail-forward.cdb}}}\ @@ -1397,8 +1431,36 @@ virt_users: file_transport = address_file headers_add = "Delivered-To: ${local_part}${local_part_suffix}@${domain}" pipe_transport = address_pipe + local_part_suffix = -* + local_part_suffix_optional retry_use_local_part +<%= +out = "" +if nodeinfo['bugsmaster'] or nodeinfo['bugsmx'] + domain = 'bugs.debian.org' + if nodeinfo['bugsmaster'] + domain = 'bugs-master.debian.org' + end + out = ' +# This router delivers for bugs.d.o +bugs: + debug_print = "R: bugs for $local_part@$domain" + driver = accept + transport = bugs_pipe + domains = ' + domain + ' + cannot_route_message = Unknown or archived bug + require_files = /org/bugs.debian.org/mail/run-procmail + no_more + local_parts = ${if match\ + {$local_part}\ + {\N^(\d+)(\d{2})(?:-(?:(?:submit|maintonly|quiet|forwarded|done|close|request|submitter)|(?:unsubscribe|ignore|help|(?:sub(?:scribe|help|yes|approve|reject))|unsubyes|bounce|probe|approve|reject|setlistyes|setlistsilentyes).*))?$\N}\ + {${if exists{/org/bugs.debian.org/spool/db-h/$2/$1$2.summary}\ + {$local_part}fail}}fail} +' +end +out +%> ###################################################################### # TRANSPORTS CONFIGURATION # ###################################################################### @@ -1517,7 +1579,7 @@ out # Send the message to procmail procmail_pipe: driver = pipe - command = /usr/bin/procmail -a ${substr_1:${local_part_suffix}}} + command = /usr/bin/procmail -a ${substr_1:${local_part_suffix}} return_path_add user = ${local_part}