** Description changed:
if i enable SPF setting "CHECK_RCPT_SPF = true" in
/etc/exim4/conf.d/acl/30_exim4-config_check_rcpt, running update-
exim4.conf lead to this error:
2018-11-29 18:11:07 Exim configuration error in line 371 of
/var/lib/exim4/config.autogenerated.tmp:
- missing or malformed ACL name
- Invalid new configfile /var/lib/exim4/config.autogenerated.tmp, not
installing
+ missing or malformed ACL name
+ Invalid new configfile /var/lib/exim4/config.autogenerated.tmp, not installing
it's a fresh bionic install.
- This is the first change i make to configurations files.
+ This is the first change i make to configurations files.
Ubuntu 18.04.1 LTS
exim4 version 4.90.1-1ubuntu1
+
+ this is my config.autogenerated.tmp
+
+
+ #########
+ # WARNING WARNING WARNING
+ # WARNING WARNING WARNING
+ # WARNING WARNING WARNING
+ # WARNING WARNING WARNING
+ # WARNING WARNING WARNING
+ # This file was generated dynamically from
+ # split config files in the /etc/exim4/conf.d/ directory.
+ # The config files are supplemented with package installation/configuration
+ # settings managed by debconf. This data is stored in
+ # /etc/exim4/update-exim4.conf.conf
+ # Any changes you make here will be lost.
+ # See /usr/share/doc/exim4-base/README.Debian.gz and update-exim4.conf(8)
+ # for instructions of customization.
+ # WARNING WARNING WARNING
+ # WARNING WARNING WARNING
+ # WARNING WARNING WARNING
+ # WARNING WARNING WARNING
+ # WARNING WARNING WARNING
+ #########
+
+ exim_path = /usr/sbin/exim4
+
+ .ifndef CONFDIR
+ CONFDIR = /etc/exim4
+ .endif
+
+ UPEX4CmacrosUPEX4C = 1
+ ##############################################
+ # the following macro definitions were created
+ # dynamically by /usr/sbin/update-exim4.conf
+ .ifndef MAIN_LOCAL_INTERFACES
+ MAIN_LOCAL_INTERFACES=<; 0.0.0.0.25 ; 0.0.0.0.465 ; 0.0.0.0.587 ; ::1
+ .endif
+ .ifndef MAIN_PACKAGE_VERSION
+ MAIN_PACKAGE_VERSION=4.90.1-1ubuntu1
+ .endif
+ .ifndef MAIN_LOCAL_DOMAINS
+ MAIN_LOCAL_DOMAINS=@:localhost:mydomain.it
+ .endif
+ .ifndef MAIN_RELAY_TO_DOMAINS
+ MAIN_RELAY_TO_DOMAINS=
+ .endif
+ .ifndef ETC_MAILNAME
+ ETC_MAILNAME=mydomain.it
+ .endif
+ .ifndef LOCAL_DELIVERY
+ LOCAL_DELIVERY=maildir_home
+ .endif
+ .ifndef MAIN_RELAY_NETS
+ MAIN_RELAY_NETS=<; 192.168.0.0/24; 192.168.1.0/24; ; 127.0.0.1 ; ::1
+ .endif
+ .ifndef DCreadhost
+ DCreadhost=
+ .endif
+ .ifndef DCsmarthost
+ DCsmarthost=
+ .endif
+ .ifndef DC_eximconfig_configtype
+ DC_eximconfig_configtype=internet
+ .endif
+ .ifndef DCconfig_internet
+ DCconfig_internet=1
+ .endif
+ ##############################################
+
+
+ domainlist local_domains = MAIN_LOCAL_DOMAINS
+
+ domainlist relay_to_domains = MAIN_RELAY_TO_DOMAINS
+
+ hostlist relay_from_hosts = MAIN_RELAY_NETS
+
+ .ifndef MAIN_PRIMARY_HOSTNAME_AS_QUALIFY_DOMAIN
+ .ifndef MAIN_QUALIFY_DOMAIN
+ qualify_domain = ETC_MAILNAME
+ .else
+ qualify_domain = MAIN_QUALIFY_DOMAIN
+ .endif
+ .endif
+
+ .ifdef MAIN_LOCAL_INTERFACES
+ local_interfaces = MAIN_LOCAL_INTERFACES
+ .endif
+
+ .ifndef LOCAL_DELIVERY
+ LOCAL_DELIVERY=mail_spool
+ .endif
+
+ gecos_pattern = ^([^,:]*)
+ gecos_name = $1
+
+ .ifndef CHECK_RCPT_LOCAL_LOCALPARTS
+ CHECK_RCPT_LOCAL_LOCALPARTS = ^[.] : ^.*[@%!/|`#&?]
+ .endif
+
+ .ifndef CHECK_RCPT_REMOTE_LOCALPARTS
+ CHECK_RCPT_REMOTE_LOCALPARTS = ^[./|] : ^.*[@%!`#&?] : ^.*/\\.\\./
+ .endif
+
+ .ifndef MAIN_LOG_SELECTOR
+ MAIN_LOG_SELECTOR = +smtp_protocol_error +smtp_syntax_error
+tls_certificate_verified +tls_peerdn
+ .endif
+
+ .ifndef MAIN_ACL_CHECK_MAIL
+ MAIN_ACL_CHECK_MAIL = acl_check_mail
+ .endif
+ acl_smtp_mail = MAIN_ACL_CHECK_MAIL
+
+ .ifndef MAIN_ACL_CHECK_RCPT
+ MAIN_ACL_CHECK_RCPT = acl_check_rcpt
+ .endif
+ acl_smtp_rcpt = MAIN_ACL_CHECK_RCPT
+
+ .ifndef MAIN_ACL_CHECK_DATA
+ MAIN_ACL_CHECK_DATA = acl_check_data
+ .endif
+ acl_smtp_data = MAIN_ACL_CHECK_DATA
+
+ .ifdef MESSAGE_SIZE_LIMIT
+ message_size_limit = MESSAGE_SIZE_LIMIT
+ .endif
+
+ .ifdef MAIN_ALLOW_DOMAIN_LITERALS
+ allow_domain_literals
+ .endif
+
+ .ifndef DC_minimaldns
+ .ifndef MAIN_HOST_LOOKUP
+ MAIN_HOST_LOOKUP = *
+ .endif
+ host_lookup = MAIN_HOST_LOOKUP
+ .endif
+
+ .ifdef MAIN_HARDCODE_PRIMARY_HOSTNAME
+ primary_hostname = MAIN_HARDCODE_PRIMARY_HOSTNAME
+ .endif
+
+ prdr_enable = true
+
+ .ifdef MAIN_SMTP_ACCEPT_MAX_NOMAIL_HOSTS
+ smtp_accept_max_nonmail_hosts = MAIN_SMTP_ACCEPT_MAX_NOMAIL_HOSTS
+ .endif
+
+ .ifndef MAIN_FORCE_SENDER
+ local_from_check = false
+ local_sender_retain = true
+ untrusted_set_sender = *
+ .endif
+
+ .ifndef MAIN_IGNORE_BOUNCE_ERRORS_AFTER
+ MAIN_IGNORE_BOUNCE_ERRORS_AFTER = 2d
+ .endif
+ ignore_bounce_errors_after = MAIN_IGNORE_BOUNCE_ERRORS_AFTER
+
+ .ifndef MAIN_TIMEOUT_FROZEN_AFTER
+ MAIN_TIMEOUT_FROZEN_AFTER = 7d
+ .endif
+ timeout_frozen_after = MAIN_TIMEOUT_FROZEN_AFTER
+
+ .ifndef MAIN_FREEZE_TELL
+ MAIN_FREEZE_TELL = postmaster
+ .endif
+ freeze_tell = MAIN_FREEZE_TELL
+
+ .ifndef SPOOLDIR
+ SPOOLDIR = /var/spool/exim4
+ .endif
+ spool_directory = SPOOLDIR
+
+ .ifndef MAIN_TRUSTED_USERS
+ MAIN_TRUSTED_USERS = uucp
+ .endif
+ trusted_users = MAIN_TRUSTED_USERS
+ .ifdef MAIN_TRUSTED_GROUPS
+ trusted_groups = MAIN_TRUSTED_GROUPS
+ .endif
+
+ .ifdef MAIN_KEEP_ENVIRONMENT
+ keep_environment = MAIN_KEEP_ENVIRONMENT
+ .else
+ keep_environment =
+ .endif
+ .ifdef MAIN_ADD_ENVIRONMENT
+ add_environment = MAIN_ADD_ENVIRONMENT
+ .endif
+
+ .ifdef MAIN_TLS_ENABLE
+ .ifndef MAIN_TLS_ADVERTISE_HOSTS
+ MAIN_TLS_ADVERTISE_HOSTS = *
+ .endif
+ tls_advertise_hosts = MAIN_TLS_ADVERTISE_HOSTS
+
+ .ifdef MAIN_TLS_CERTKEY
+ tls_certificate = MAIN_TLS_CERTKEY
+ .else
+ .ifndef MAIN_TLS_CERTIFICATE
+ MAIN_TLS_CERTIFICATE = CONFDIR/exim.crt
+ .endif
+ tls_certificate = MAIN_TLS_CERTIFICATE
+
+ .ifndef MAIN_TLS_PRIVATEKEY
+ MAIN_TLS_PRIVATEKEY = CONFDIR/exim.key
+ .endif
+ tls_privatekey = MAIN_TLS_PRIVATEKEY
+ .endif
+
+ .ifndef MAIN_TLS_VERIFY_CERTIFICATES
+ MAIN_TLS_VERIFY_CERTIFICATES = ${if
exists{/etc/ssl/certs/ca-certificates.crt}\
+ {/etc/ssl/certs/ca-certificates.crt}\
+ {/dev/null}}
+ .endif
+ tls_verify_certificates = MAIN_TLS_VERIFY_CERTIFICATES
+
+ .ifdef MAIN_TLS_VERIFY_HOSTS
+ tls_verify_hosts = MAIN_TLS_VERIFY_HOSTS
+ .endif
+
+ .ifdef MAIN_TLS_TRY_VERIFY_HOSTS
+ tls_try_verify_hosts = MAIN_TLS_TRY_VERIFY_HOSTS
+ .endif
+
+ .ifdef _HAVE_GNUTLS
+ tls_dhparam = historic
+ .endif
+
+ .else
+ tls_advertise_hosts =
+ .endif
+
+ .ifdef MAIN_LOG_SELECTOR
+ log_selector = MAIN_LOG_SELECTOR
+ .endif
+
+ begin acl
+
+ acl_local_deny_exceptions:
+ accept
+ hosts = ${if exists{CONFDIR/host_local_deny_exceptions}\
+ {CONFDIR/host_local_deny_exceptions}\
+ {}}
+ accept
+ senders = ${if exists{CONFDIR/sender_local_deny_exceptions}\
+ {CONFDIR/sender_local_deny_exceptions}\
+ {}}
+ accept
+ hosts = ${if exists{CONFDIR/local_host_whitelist}\
+ {CONFDIR/local_host_whitelist}\
+ {}}
+ accept
+ senders = ${if exists{CONFDIR/local_sender_whitelist}\
+ {CONFDIR/local_sender_whitelist}\
+ {}}
+
+ .ifdef LOCAL_DENY_EXCEPTIONS_LOCAL_ACL_FILE
+ .include LOCAL_DENY_EXCEPTIONS_LOCAL_ACL_FILE
+ .endif
+
+ .ifdef WHITELIST_LOCAL_DENY_LOCAL_ACL_FILE
+ .include WHITELIST_LOCAL_DENY_LOCAL_ACL_FILE
+ .endif
+
+ acl_check_mail:
+
+ accept
+
+ acl_check_rcpt:
+
+ accept
+ hosts = :
+ control = dkim_disable_verify
+
+ .ifdef DC_minimaldns
+ warn
+ control = dkim_disable_verify
+ .else
+ .ifdef DISABLE_DKIM_VERIFY
+ warn
+ control = dkim_disable_verify
+ .endif
+ .endif
+
+ .ifdef CHECK_RCPT_LOCAL_LOCALPARTS
+ deny
+ domains = +local_domains
+ local_parts = CHECK_RCPT_LOCAL_LOCALPARTS
+ message = restricted characters in address
+ .endif
+
+
+ .ifdef CHECK_RCPT_REMOTE_LOCALPARTS
+ deny
+ domains = !+local_domains
+ local_parts = CHECK_RCPT_REMOTE_LOCALPARTS
+ message = restricted characters in address
+ .endif
+
+ accept
+ .ifndef CHECK_RCPT_POSTMASTER
+ local_parts = postmaster
+ .else
+ local_parts = CHECK_RCPT_POSTMASTER
+ .endif
+ domains = +local_domains : +relay_to_domains
+
+ .ifdef CHECK_RCPT_VERIFY_SENDER
+ deny
+ message = Sender verification failed
+ !acl = acl_local_deny_exceptions
+ !verify = sender
+ .endif
+
+ deny
+ !acl = acl_local_deny_exceptions
+ senders = ${if exists{CONFDIR/local_sender_callout}\
+ {CONFDIR/local_sender_callout}\
+ {}}
+ !verify = sender/callout
+
+ accept
+ hosts = +relay_from_hosts
+ control = submission/sender_retain
+ control = dkim_disable_verify
+
+ accept
+ authenticated = *
+ control = submission/sender_retain
+ control = dkim_disable_verify
+
+ require message = nice hosts say HELO first
+ condition = ${if def:sender_helo_name}
+
+ require
+ message = relay not permitted
+ domains = +local_domains : +relay_to_domains
+
+ require
+ verify = recipient
+
+ deny
+ !acl = acl_local_deny_exceptions
+ recipients = ${if exists{CONFDIR/local_rcpt_callout}\
+ {CONFDIR/local_rcpt_callout}\
+ {}}
+ !verify = recipient/callout
+
+ deny
+ message = sender envelope address $sender_address is locally blacklisted
here. If you think this is wrong, get in touch with postmaster
+ !acl = acl_local_deny_exceptions
+ senders = ${if exists{CONFDIR/local_sender_blacklist}\
+ {CONFDIR/local_sender_blacklist}\
+ {}}
+
+ deny
+ message = sender IP address $sender_host_address is locally blacklisted
here. If you think this is wrong, get in touch with postmaster
+ !acl = acl_local_deny_exceptions
+ hosts = ${if exists{CONFDIR/local_host_blacklist}\
+ {CONFDIR/local_host_blacklist}\
+ {}}
+
+ .ifdef CHECK_RCPT_REVERSE_DNS
+ warn
+ condition = ${if and{{def:sender_host_address}{!def:sender_host_name}}\
+ {yes}{no}}
+ add_header = X-Host-Lookup-Failed: Reverse DNS lookup failed for
$sender_host_address (${if eq{$host_lookup_failed}{1}{failed}{deferred}})
+ .endif
+
+ CHECK_RCPT_SPF = true
+ .ifdef CHECK_RCPT_SPF
+ deny
+ message = [SPF] $sender_host_address is not allowed to send mail from \
+ ${if def:sender_address_domain
{$sender_address_domain}{$sender_helo_name}}. \
+ Please see \
+ http://www.openspf.org/Why?scope=${if def:sender_address_domain \
+ {mfrom}{helo}};identity=${if def:sender_address_domain \
+ {$sender_address}{$sender_helo_name}};ip=$sender_host_address
+ log_message = SPF check failed.
+ !acl = acl_local_deny_exceptions
+ condition = ${run{/usr/bin/spfquery.mail-spf-perl --ip \
+ ${quote:$sender_host_address} --identity \
+ ${if def:sender_address_domain \
+ {--scope mfrom --identity ${quote:$sender_address}}\
+ {--scope helo --identity ${quote:$sender_helo_name}}}}\
+ {no}{${if eq {$runrc}{1}{yes}{no}}}}
+
+ defer
+ message = Temporary DNS error while checking SPF record. Try again later.
+ !acl = acl_local_deny_exceptions
+ condition = ${if eq {$runrc}{5}{yes}{no}}
+
+ warn
+ condition = ${if <={$runrc}{6}{yes}{no}}
+ add_header = Received-SPF: ${if eq {$runrc}{0}{pass}\
+ {${if eq {$runrc}{2}{softfail}\
+ {${if eq {$runrc}{3}{neutral}\
+ {${if eq {$runrc}{4}{permerror}\
+ {${if eq {$runrc}{6}{none}{error}}}}}}}}}\
+ } client-ip=$sender_host_address; \
+ ${if def:sender_address_domain \
+ {envelope-from=${sender_address}; }{}}\
+ helo=$sender_helo_name
+
+ warn
+ log_message = Unexpected error in SPF check.
+ condition = ${if >{$runrc}{6}{yes}{no}}
+ .endif
+
+ .ifdef CHECK_RCPT_IP_DNSBLS
+ warn
+ dnslists = CHECK_RCPT_IP_DNSBLS
+ add_header = X-Warning: $sender_host_address is listed at $dnslist_domain
($dnslist_value: $dnslist_text)
+ log_message = $sender_host_address is listed at $dnslist_domain
($dnslist_value: $dnslist_text)
+ .endif
+
+ .ifdef CHECK_RCPT_DOMAIN_DNSBLS
+ warn
+ !senders = ${if exists{CONFDIR/local_domain_dnsbl_whitelist}\
+ {CONFDIR/local_domain_dnsbl_whitelist}\
+ {}}
+ dnslists = CHECK_RCPT_DOMAIN_DNSBLS
+ add_header = X-Warning: $sender_address_domain is listed at
$dnslist_domain ($dnslist_value: $dnslist_text)
+ log_message = $sender_address_domain is listed at $dnslist_domain
($dnslist_value: $dnslist_text)
+ .endif
+
+ .ifdef CHECK_RCPT_LOCAL_ACL_FILE
+ .include CHECK_RCPT_LOCAL_ACL_FILE
+ .endif
+
+ accept
+ domains = +relay_to_domains
+ endpass
+ verify = recipient
+
+ accept
+
+ acl_check_data:
+
+ .ifndef IGNORE_SMTP_LINE_LENGTH_LIMIT
+ deny message = maximum allowed line length is 998 octets, \
+ got $max_received_linelength
+ condition = ${if > {$max_received_linelength}{998}}
+ .endif
+
+ .ifdef CHECK_DATA_VERIFY_HEADER_SYNTAX
+ deny
+ message = Message headers fail syntax check
+ !acl = acl_local_deny_exceptions
+ !verify = header_syntax
+ .endif
+
+ .ifdef CHECK_DATA_VERIFY_HEADER_SENDER
+ deny
+ message = No verifiable sender address in message headers
+ !acl = acl_local_deny_exceptions
+ !verify = header_sender
+ .endif
+
+ .ifdef CHECK_DATA_LOCAL_ACL_FILE
+ .include CHECK_DATA_LOCAL_ACL_FILE
+ .endif
+
+ accept
+
+ begin routers
+
+ .ifdef MAIN_ALLOW_DOMAIN_LITERALS
+ domain_literal:
+ debug_print = "R: domain_literal for $local_part@$domain"
+ driver = ipliteral
+ domains = ! +local_domains
+ transport = remote_smtp
+ .endif
+
+ hubbed_hosts:
+ debug_print = "R: hubbed_hosts for $domain"
+ driver = manualroute
+ domains = "${if exists{CONFDIR/hubbed_hosts}\
+ {partial-lsearch;CONFDIR/hubbed_hosts}\
+ fail}"
+ same_domain_copy_routing = yes
+ route_data = ${lookup{$domain}partial-lsearch{CONFDIR/hubbed_hosts}}
+ transport = remote_smtp
+
+ .ifdef DCconfig_internet
+
+ dnslookup_relay_to_domains:
+ debug_print = "R: dnslookup_relay_to_domains for $local_part@$domain"
+ driver = dnslookup
+ domains = ! +local_domains : +relay_to_domains
+ transport = remote_smtp
+ same_domain_copy_routing = yes
+ no_more
+
+ dnslookup:
+ debug_print = "R: dnslookup for $local_part@$domain"
+ driver = dnslookup
+ domains = ! +local_domains
+ transport = remote_smtp
+ same_domain_copy_routing = yes
+ ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :\
+ 172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :\
+ 255.255.255.255
+ no_more
+
+ .endif
+
+ .ifdef DCconfig_local
+ nonlocal:
+ debug_print = "R: nonlocal for $local_part@$domain"
+ driver = redirect
+ domains = ! +local_domains
+ allow_fail
+ data = :fail: Mailing to remote domains not supported
+ no_more
+
+ .endif
+
+ .ifdef DCconfig_smarthost DCconfig_satellite
+
+ smarthost:
+ debug_print = "R: smarthost for $local_part@$domain"
+ driver = manualroute
+ domains = ! +local_domains
+ transport = remote_smtp_smarthost
+ route_list = * DCsmarthost byname
+ host_find_failed = ignore
+ same_domain_copy_routing = yes
+ no_more
+
+ .endif
+
+ COND_LOCAL_SUBMITTER = "\
+ ${if match_ip{$sender_host_address}{:@[]}\
+ {1}{0}\
+ }"
+
+ real_local:
+ debug_print = "R: real_local for $local_part@$domain"
+ driver = accept
+ domains = +local_domains
+ condition = COND_LOCAL_SUBMITTER
+ local_part_prefix = real-
+ check_local_user
+ transport = LOCAL_DELIVERY
+
+ system_aliases:
+ debug_print = "R: system_aliases for $local_part@$domain"
+ driver = redirect
+ domains = +local_domains
+ allow_fail
+ allow_defer
+ data = ${lookup{$local_part}lsearch{/etc/aliases}}
+ .ifdef SYSTEM_ALIASES_USER
+ user = SYSTEM_ALIASES_USER
+ .endif
+ .ifdef SYSTEM_ALIASES_GROUP
+ group = SYSTEM_ALIASES_GROUP
+ .endif
+ .ifdef SYSTEM_ALIASES_FILE_TRANSPORT
+ file_transport = SYSTEM_ALIASES_FILE_TRANSPORT
+ .endif
+ .ifdef SYSTEM_ALIASES_PIPE_TRANSPORT
+ pipe_transport = SYSTEM_ALIASES_PIPE_TRANSPORT
+ .endif
+ .ifdef SYSTEM_ALIASES_DIRECTORY_TRANSPORT
+ directory_transport = SYSTEM_ALIASES_DIRECTORY_TRANSPORT
+ .endif
+
+ .ifdef DCconfig_satellite
+ hub_user:
+ debug_print = "R: hub_user for $local_part@$domain"
+ driver = redirect
+ domains = +local_domains
+ data = ${local_part}@DCreadhost
+ check_local_user
+
+ hub_user_smarthost:
+ debug_print = "R: hub_user_smarthost for $local_part@$domain"
+ driver = manualroute
+ domains = DCreadhost
+ transport = remote_smtp_smarthost
+ route_list = * DCsmarthost byname
+ host_find_failed = ignore
+ same_domain_copy_routing = yes
+ check_local_user
+ .endif
+
+ userforward:
+ debug_print = "R: userforward for $local_part@$domain"
+ driver = redirect
+ domains = +local_domains
+ check_local_user
+ file = $home/.forward
+ require_files = $local_part:$home/.forward
+ no_verify
+ no_expn
+ check_ancestor
+ allow_filter
+ forbid_smtp_code = true
+ directory_transport = address_directory
+ file_transport = address_file
+ pipe_transport = address_pipe
+ reply_transport = address_reply
+ skip_syntax_errors
+ syntax_errors_to = real-$local_part@$domain
+ syntax_errors_text = \
+ This is an automatically generated message. An error has\n\
+ been found in your .forward file. Details of the error are\n\
+ reported below. While this error persists, you will receive\n\
+ a copy of this message for every message that is addressed\n\
+ to you. If your .forward file is a filter file, or if it is\n\
+ a non-filter file containing no valid forwarding addresses,\n\
+ a copy of each incoming message will be put in your normal\n\
+ mailbox. If a non-filter file contains at least one valid\n\
+ forwarding address, forwarding to the valid addresses will\n\
+ happen, and those will be the only deliveries that occur.
+
+ procmail:
+ debug_print = "R: procmail for $local_part@$domain"
+ driver = accept
+ domains = +local_domains
+ check_local_user
+ transport = procmail_pipe
+ require_files = ${local_part}:\
+ ${if exists{/etc/procmailrc}\
+ {/etc/procmailrc}{${home}/.procmailrc}}:\
+ +/usr/bin/procmail
+ no_verify
+ no_expn
+
+ maildrop:
+ debug_print = "R: maildrop for $local_part@$domain"
+ driver = accept
+ domains = +local_domains
+ check_local_user
+ transport = maildrop_pipe
+ require_files = ${local_part}:${home}/.mailfilter:+/usr/bin/maildrop
+ no_verify
+ no_expn
+
+ .ifndef FIRST_USER_ACCOUNT_UID
+ FIRST_USER_ACCOUNT_UID = 0
+ .endif
+
+ .ifndef DEFAULT_SYSTEM_ACCOUNT_ALIAS
+ DEFAULT_SYSTEM_ACCOUNT_ALIAS = :fail: no mail to system accounts
+ .endif
+
+ COND_SYSTEM_USER_AND_REMOTE_SUBMITTER = "\
+ ${if and{{! match_ip{$sender_host_address}{:@[]}}\
+ {<{$local_user_uid}{FIRST_USER_ACCOUNT_UID}}}\
+ {1}{0}\
+ }"
+
+ lowuid_aliases:
+ debug_print = "R: lowuid_aliases for $local_part@$domain (UID
$local_user_uid)"
+ check_local_user
+ driver = redirect
+ allow_fail
+ domains = +local_domains
+ condition = COND_SYSTEM_USER_AND_REMOTE_SUBMITTER
+ data = ${if exists{CONFDIR/lowuid-aliases}\
+ {${lookup{$local_part}lsearch{CONFDIR/lowuid-aliases}\
+ {$value}{DEFAULT_SYSTEM_ACCOUNT_ALIAS}}}\
+ {DEFAULT_SYSTEM_ACCOUNT_ALIAS}}
+
+ local_user:
+ debug_print = "R: local_user for $local_part@$domain"
+ driver = accept
+ domains = +local_domains
+ check_local_user
+ local_parts = ! root
+ transport = LOCAL_DELIVERY
+ cannot_route_message = Unknown user
+
+ mail4root:
+ debug_print = "R: mail4root for $local_part@$domain"
+ driver = redirect
+ domains = +local_domains
+ data = /var/mail/mail
+ file_transport = address_file
+ local_parts = root
+ user = mail
+ group = mail
+
+ begin transports
+
+ .ifdef HIDE_MAILNAME
+ REMOTE_SMTP_HEADERS_REWRITE=*@+local_domains $1@DCreadhost frs :
*@ETC_MAILNAME $1@DCreadhost frs
+ REMOTE_SMTP_RETURN_PATH=${if
match_domain{$sender_address_domain}{+local_domains}{${sender_address_local_part}@DCreadhost}{${if
match_domain{$sender_address_domain}{ETC_MAILNAME}{${sender_address_local_part}@DCreadhost}fail}}}
+ .endif
+
+ .ifdef REMOTE_SMTP_HELO_FROM_DNS
+ .ifdef REMOTE_SMTP_HELO_DATA
+ REMOTE_SMTP_HELO_DATA==${lookup dnsdb
{ptr=$sending_ip_address}{$value}{$primary_hostname}}
+ .else
+ REMOTE_SMTP_HELO_DATA=${lookup dnsdb
{ptr=$sending_ip_address}{$value}{$primary_hostname}}
+ .endif
+ .endif
+
+ address_file:
+ debug_print = "T: address_file for $local_part@$domain"
+ driver = appendfile
+ delivery_date_add
+ envelope_to_add
+ return_path_add
+
+ address_pipe:
+ debug_print = "T: address_pipe for $local_part@$domain"
+ driver = pipe
+ return_fail_output
+
+ address_reply:
+ debug_print = "T: autoreply for $local_part@$domain"
+ driver = autoreply
+
+ mail_spool:
+ debug_print = "T: appendfile for $local_part@$domain"
+ driver = appendfile
+ file = /var/mail/$local_part
+ delivery_date_add
+ envelope_to_add
+ return_path_add
+ group = mail
+ mode = 0660
+ mode_fail_narrower = false
+
+ maildir_home:
+ debug_print = "T: maildir_home for $local_part@$domain"
+ driver = appendfile
+ .ifdef MAILDIR_HOME_MAILDIR_LOCATION
+ directory = MAILDIR_HOME_MAILDIR_LOCATION
+ .else
+ directory = $home/Maildir
+ .endif
+ .ifdef MAILDIR_HOME_CREATE_DIRECTORY
+ create_directory
+ .endif
+ .ifdef MAILDIR_HOME_CREATE_FILE
+ create_file = MAILDIR_HOME_CREATE_FILE
+ .endif
+ delivery_date_add
+ envelope_to_add
+ return_path_add
+ maildir_format
+ .ifdef MAILDIR_HOME_DIRECTORY_MODE
+ directory_mode = MAILDIR_HOME_DIRECTORY_MODE
+ .else
+ directory_mode = 0700
+ .endif
+ .ifdef MAILDIR_HOME_MODE
+ mode = MAILDIR_HOME_MODE
+ .else
+ mode = 0600
+ .endif
+ mode_fail_narrower = false
+
+ maildrop_pipe:
+ debug_print = "T: maildrop_pipe for $local_part@$domain"
+ driver = pipe
+ path = "/bin:/usr/bin:/usr/local/bin"
+ command = "/usr/bin/maildrop"
+ message_prefix =
+ message_suffix =
+ return_path_add
+ delivery_date_add
+ envelope_to_add
+
+ procmail_pipe:
+ debug_print = "T: procmail_pipe for $local_part@$domain"
+ driver = pipe
+ path = "/bin:/usr/bin:/usr/local/bin"
+ command = "/usr/bin/procmail"
+ return_path_add
+ delivery_date_add
+ envelope_to_add
+
+ remote_smtp:
+ debug_print = "T: remote_smtp for $local_part@$domain"
+ driver = smtp
+ .ifndef IGNORE_SMTP_LINE_LENGTH_LIMIT
+ message_size_limit = ${if > {$max_received_linelength}{998} {1}{0}}
+ .endif
+ .ifdef REMOTE_SMTP_HOSTS_AVOID_TLS
+ hosts_avoid_tls = REMOTE_SMTP_HOSTS_AVOID_TLS
+ .endif
+ .ifdef REMOTE_SMTP_HEADERS_REWRITE
+ headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
+ .endif
+ .ifdef REMOTE_SMTP_RETURN_PATH
+ return_path = REMOTE_SMTP_RETURN_PATH
+ .endif
+ .ifdef REMOTE_SMTP_HELO_DATA
+ helo_data=REMOTE_SMTP_HELO_DATA
+ .endif
+ .ifdef DKIM_DOMAIN
+ dkim_domain = DKIM_DOMAIN
+ .endif
+ .ifdef DKIM_SELECTOR
+ dkim_selector = DKIM_SELECTOR
+ .endif
+ .ifdef DKIM_PRIVATE_KEY
+ dkim_private_key = DKIM_PRIVATE_KEY
+ .endif
+ .ifdef DKIM_CANON
+ dkim_canon = DKIM_CANON
+ .endif
+ .ifdef DKIM_STRICT
+ dkim_strict = DKIM_STRICT
+ .endif
+ .ifdef DKIM_SIGN_HEADERS
+ dkim_sign_headers = DKIM_SIGN_HEADERS
+ .endif
+ .ifdef TLS_DH_MIN_BITS
+ tls_dh_min_bits = TLS_DH_MIN_BITS
+ .endif
+ .ifdef REMOTE_SMTP_TLS_CERTIFICATE
+ tls_certificate = REMOTE_SMTP_TLS_CERTIFICATE
+ .endif
+ .ifdef REMOTE_SMTP_PRIVATEKEY
+ tls_privatekey = REMOTE_SMTP_PRIVATEKEY
+ .endif
+
+ remote_smtp_smarthost:
+ debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
+ driver = smtp
+ .ifndef IGNORE_SMTP_LINE_LENGTH_LIMIT
+ message_size_limit = ${if > {$max_received_linelength}{998} {1}{0}}
+ .endif
+ hosts_try_auth = <; ${if exists{CONFDIR/passwd.client} \
+ {\
+ ${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$host_address}}\
+ }\
+ {} \
+ }
+ .ifdef REMOTE_SMTP_SMARTHOST_HOSTS_AVOID_TLS
+ hosts_avoid_tls = REMOTE_SMTP_SMARTHOST_HOSTS_AVOID_TLS
+ .endif
+ .ifdef REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS
+ hosts_require_tls = REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS
+ .endif
+ .ifdef REMOTE_SMTP_HEADERS_REWRITE
+ headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
+ .endif
+ .ifdef REMOTE_SMTP_RETURN_PATH
+ return_path = REMOTE_SMTP_RETURN_PATH
+ .endif
+ .ifdef REMOTE_SMTP_HELO_DATA
+ helo_data=REMOTE_SMTP_HELO_DATA
+ .endif
+ .ifdef TLS_DH_MIN_BITS
+ tls_dh_min_bits = TLS_DH_MIN_BITS
+ .endif
+ .ifdef REMOTE_SMTP_SMARTHOST_TLS_CERTIFICATE
+ tls_certificate = REMOTE_SMTP_SMARTHOST_TLS_CERTIFICATE
+ .endif
+ .ifdef REMOTE_SMTP_SMARTHOST_PRIVATEKEY
+ tls_privatekey = REMOTE_SMTP_SMARTHOST_PRIVATEKEY
+ .endif
+
+ address_directory:
+ debug_print = "T: address_directory for $local_part@$domain"
+ driver = appendfile
+ delivery_date_add
+ envelope_to_add
+ return_path_add
+ check_string = ""
+ escape_string = ""
+ maildir_format
+
+ begin retry
+
+ * * F,2h,15m; G,16h,1h,1.5; F,4d,6h
+
+ begin rewrite
+
+ .ifndef NO_EAA_REWRITE_REWRITE
+ *@+local_domains "${lookup{${local_part}}lsearch{/etc/email-addresses}\
+ {$value}fail}" Ffrs
+ *@ETC_MAILNAME "${lookup{${local_part}}lsearch{/etc/email-addresses}\
+ {$value}fail}" Ffrs
+ .endif
+
+ begin authenticators
+
+ cram_md5:
+ driver = cram_md5
+ public_name = CRAM-MD5
+ client_name =
${extract{1}{:}{${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}}}
+ client_secret =
${extract{2}{:}{${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}}}
+
+ PASSWDLINE=${sg{\
+
${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}\
+ }\
+ {\\N[\\^]\\N}\
+ {^^}\
+ }
+
+ plain:
+ driver = plaintext
+ public_name = PLAIN
+ .ifndef AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS
+ client_send = "<; ${if !eq{$tls_out_cipher}{}\
+ {^${extract{1}{:}{PASSWDLINE}}\
+ ^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}\
+ }fail}"
+ .else
+ client_send = "<; ^${extract{1}{:}{PASSWDLINE}}\
+ ^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
+ .endif
+
+ login:
+ driver = plaintext
+ public_name = LOGIN
+ .ifndef AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS
+ client_send = "<; ${if and{\
+ {!eq{$tls_out_cipher}{}}\
+ {!eq{PASSWDLINE}{}}\
+ }\
+ {}fail}\
+ ; ${extract{1}{::}{PASSWDLINE}}\
+ ; ${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
+ .else
+ client_send = "<; ${if !eq{PASSWDLINE}{}\
+ {}fail}\
+ ; ${extract{1}{::}{PASSWDLINE}}\
+ ; ${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
+ .endif
** Description changed:
if i enable SPF setting "CHECK_RCPT_SPF = true" in
/etc/exim4/conf.d/acl/30_exim4-config_check_rcpt, running update-
exim4.conf lead to this error:
2018-11-29 18:11:07 Exim configuration error in line 371 of
/var/lib/exim4/config.autogenerated.tmp:
missing or malformed ACL name
Invalid new configfile /var/lib/exim4/config.autogenerated.tmp, not installing
it's a fresh bionic install.
This is the first change i make to configurations files.
Ubuntu 18.04.1 LTS
exim4 version 4.90.1-1ubuntu1
- this is my config.autogenerated.tmp
-
+ this is the failing config.autogenerated.tmp
#########
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# This file was generated dynamically from
# split config files in the /etc/exim4/conf.d/ directory.
# The config files are supplemented with package installation/configuration
# settings managed by debconf. This data is stored in
# /etc/exim4/update-exim4.conf.conf
# Any changes you make here will be lost.
# See /usr/share/doc/exim4-base/README.Debian.gz and update-exim4.conf(8)
# for instructions of customization.
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
# WARNING WARNING WARNING
#########
exim_path = /usr/sbin/exim4
.ifndef CONFDIR
CONFDIR = /etc/exim4
.endif
UPEX4CmacrosUPEX4C = 1
##############################################
# the following macro definitions were created
# dynamically by /usr/sbin/update-exim4.conf
.ifndef MAIN_LOCAL_INTERFACES
MAIN_LOCAL_INTERFACES=<; 0.0.0.0.25 ; 0.0.0.0.465 ; 0.0.0.0.587 ; ::1
.endif
.ifndef MAIN_PACKAGE_VERSION
MAIN_PACKAGE_VERSION=4.90.1-1ubuntu1
.endif
.ifndef MAIN_LOCAL_DOMAINS
MAIN_LOCAL_DOMAINS=@:localhost:mydomain.it
.endif
.ifndef MAIN_RELAY_TO_DOMAINS
MAIN_RELAY_TO_DOMAINS=
.endif
.ifndef ETC_MAILNAME
ETC_MAILNAME=mydomain.it
.endif
.ifndef LOCAL_DELIVERY
LOCAL_DELIVERY=maildir_home
.endif
.ifndef MAIN_RELAY_NETS
MAIN_RELAY_NETS=<; 192.168.0.0/24; 192.168.1.0/24; ; 127.0.0.1 ; ::1
.endif
.ifndef DCreadhost
DCreadhost=
.endif
.ifndef DCsmarthost
DCsmarthost=
.endif
.ifndef DC_eximconfig_configtype
DC_eximconfig_configtype=internet
.endif
.ifndef DCconfig_internet
DCconfig_internet=1
.endif
##############################################
-
domainlist local_domains = MAIN_LOCAL_DOMAINS
domainlist relay_to_domains = MAIN_RELAY_TO_DOMAINS
hostlist relay_from_hosts = MAIN_RELAY_NETS
.ifndef MAIN_PRIMARY_HOSTNAME_AS_QUALIFY_DOMAIN
.ifndef MAIN_QUALIFY_DOMAIN
qualify_domain = ETC_MAILNAME
.else
qualify_domain = MAIN_QUALIFY_DOMAIN
.endif
.endif
.ifdef MAIN_LOCAL_INTERFACES
local_interfaces = MAIN_LOCAL_INTERFACES
.endif
.ifndef LOCAL_DELIVERY
LOCAL_DELIVERY=mail_spool
.endif
gecos_pattern = ^([^,:]*)
gecos_name = $1
.ifndef CHECK_RCPT_LOCAL_LOCALPARTS
CHECK_RCPT_LOCAL_LOCALPARTS = ^[.] : ^.*[@%!/|`#&?]
.endif
.ifndef CHECK_RCPT_REMOTE_LOCALPARTS
CHECK_RCPT_REMOTE_LOCALPARTS = ^[./|] : ^.*[@%!`#&?] : ^.*/\\.\\./
.endif
.ifndef MAIN_LOG_SELECTOR
MAIN_LOG_SELECTOR = +smtp_protocol_error +smtp_syntax_error
+tls_certificate_verified +tls_peerdn
.endif
.ifndef MAIN_ACL_CHECK_MAIL
MAIN_ACL_CHECK_MAIL = acl_check_mail
.endif
acl_smtp_mail = MAIN_ACL_CHECK_MAIL
.ifndef MAIN_ACL_CHECK_RCPT
MAIN_ACL_CHECK_RCPT = acl_check_rcpt
.endif
acl_smtp_rcpt = MAIN_ACL_CHECK_RCPT
.ifndef MAIN_ACL_CHECK_DATA
MAIN_ACL_CHECK_DATA = acl_check_data
.endif
acl_smtp_data = MAIN_ACL_CHECK_DATA
.ifdef MESSAGE_SIZE_LIMIT
message_size_limit = MESSAGE_SIZE_LIMIT
.endif
.ifdef MAIN_ALLOW_DOMAIN_LITERALS
allow_domain_literals
.endif
.ifndef DC_minimaldns
.ifndef MAIN_HOST_LOOKUP
MAIN_HOST_LOOKUP = *
.endif
host_lookup = MAIN_HOST_LOOKUP
.endif
.ifdef MAIN_HARDCODE_PRIMARY_HOSTNAME
primary_hostname = MAIN_HARDCODE_PRIMARY_HOSTNAME
.endif
prdr_enable = true
.ifdef MAIN_SMTP_ACCEPT_MAX_NOMAIL_HOSTS
smtp_accept_max_nonmail_hosts = MAIN_SMTP_ACCEPT_MAX_NOMAIL_HOSTS
.endif
.ifndef MAIN_FORCE_SENDER
local_from_check = false
local_sender_retain = true
untrusted_set_sender = *
.endif
.ifndef MAIN_IGNORE_BOUNCE_ERRORS_AFTER
MAIN_IGNORE_BOUNCE_ERRORS_AFTER = 2d
.endif
ignore_bounce_errors_after = MAIN_IGNORE_BOUNCE_ERRORS_AFTER
.ifndef MAIN_TIMEOUT_FROZEN_AFTER
MAIN_TIMEOUT_FROZEN_AFTER = 7d
.endif
timeout_frozen_after = MAIN_TIMEOUT_FROZEN_AFTER
.ifndef MAIN_FREEZE_TELL
MAIN_FREEZE_TELL = postmaster
.endif
freeze_tell = MAIN_FREEZE_TELL
.ifndef SPOOLDIR
SPOOLDIR = /var/spool/exim4
.endif
spool_directory = SPOOLDIR
.ifndef MAIN_TRUSTED_USERS
MAIN_TRUSTED_USERS = uucp
.endif
trusted_users = MAIN_TRUSTED_USERS
.ifdef MAIN_TRUSTED_GROUPS
trusted_groups = MAIN_TRUSTED_GROUPS
.endif
.ifdef MAIN_KEEP_ENVIRONMENT
keep_environment = MAIN_KEEP_ENVIRONMENT
.else
keep_environment =
.endif
.ifdef MAIN_ADD_ENVIRONMENT
add_environment = MAIN_ADD_ENVIRONMENT
.endif
.ifdef MAIN_TLS_ENABLE
.ifndef MAIN_TLS_ADVERTISE_HOSTS
MAIN_TLS_ADVERTISE_HOSTS = *
.endif
tls_advertise_hosts = MAIN_TLS_ADVERTISE_HOSTS
.ifdef MAIN_TLS_CERTKEY
tls_certificate = MAIN_TLS_CERTKEY
.else
.ifndef MAIN_TLS_CERTIFICATE
MAIN_TLS_CERTIFICATE = CONFDIR/exim.crt
.endif
tls_certificate = MAIN_TLS_CERTIFICATE
.ifndef MAIN_TLS_PRIVATEKEY
MAIN_TLS_PRIVATEKEY = CONFDIR/exim.key
.endif
tls_privatekey = MAIN_TLS_PRIVATEKEY
.endif
.ifndef MAIN_TLS_VERIFY_CERTIFICATES
MAIN_TLS_VERIFY_CERTIFICATES = ${if
exists{/etc/ssl/certs/ca-certificates.crt}\
- {/etc/ssl/certs/ca-certificates.crt}\
- {/dev/null}}
+ {/etc/ssl/certs/ca-certificates.crt}\
+ {/dev/null}}
.endif
tls_verify_certificates = MAIN_TLS_VERIFY_CERTIFICATES
.ifdef MAIN_TLS_VERIFY_HOSTS
tls_verify_hosts = MAIN_TLS_VERIFY_HOSTS
.endif
.ifdef MAIN_TLS_TRY_VERIFY_HOSTS
tls_try_verify_hosts = MAIN_TLS_TRY_VERIFY_HOSTS
.endif
.ifdef _HAVE_GNUTLS
tls_dhparam = historic
.endif
.else
tls_advertise_hosts =
.endif
.ifdef MAIN_LOG_SELECTOR
log_selector = MAIN_LOG_SELECTOR
.endif
begin acl
acl_local_deny_exceptions:
- accept
- hosts = ${if exists{CONFDIR/host_local_deny_exceptions}\
- {CONFDIR/host_local_deny_exceptions}\
- {}}
- accept
- senders = ${if exists{CONFDIR/sender_local_deny_exceptions}\
- {CONFDIR/sender_local_deny_exceptions}\
- {}}
- accept
- hosts = ${if exists{CONFDIR/local_host_whitelist}\
- {CONFDIR/local_host_whitelist}\
- {}}
- accept
- senders = ${if exists{CONFDIR/local_sender_whitelist}\
- {CONFDIR/local_sender_whitelist}\
- {}}
-
- .ifdef LOCAL_DENY_EXCEPTIONS_LOCAL_ACL_FILE
- .include LOCAL_DENY_EXCEPTIONS_LOCAL_ACL_FILE
- .endif
-
- .ifdef WHITELIST_LOCAL_DENY_LOCAL_ACL_FILE
- .include WHITELIST_LOCAL_DENY_LOCAL_ACL_FILE
- .endif
+ accept
+ hosts = ${if exists{CONFDIR/host_local_deny_exceptions}\
+ {CONFDIR/host_local_deny_exceptions}\
+ {}}
+ accept
+ senders = ${if exists{CONFDIR/sender_local_deny_exceptions}\
+ {CONFDIR/sender_local_deny_exceptions}\
+ {}}
+ accept
+ hosts = ${if exists{CONFDIR/local_host_whitelist}\
+ {CONFDIR/local_host_whitelist}\
+ {}}
+ accept
+ senders = ${if exists{CONFDIR/local_sender_whitelist}\
+ {CONFDIR/local_sender_whitelist}\
+ {}}
+
+ .ifdef LOCAL_DENY_EXCEPTIONS_LOCAL_ACL_FILE
+ .include LOCAL_DENY_EXCEPTIONS_LOCAL_ACL_FILE
+ .endif
+
+ .ifdef WHITELIST_LOCAL_DENY_LOCAL_ACL_FILE
+ .include WHITELIST_LOCAL_DENY_LOCAL_ACL_FILE
+ .endif
acl_check_mail:
- accept
+ accept
acl_check_rcpt:
- accept
- hosts = :
- control = dkim_disable_verify
+ accept
+ hosts = :
+ control = dkim_disable_verify
.ifdef DC_minimaldns
- warn
- control = dkim_disable_verify
+ warn
+ control = dkim_disable_verify
.else
.ifdef DISABLE_DKIM_VERIFY
- warn
- control = dkim_disable_verify
- .endif
- .endif
-
- .ifdef CHECK_RCPT_LOCAL_LOCALPARTS
- deny
- domains = +local_domains
- local_parts = CHECK_RCPT_LOCAL_LOCALPARTS
- message = restricted characters in address
- .endif
-
-
- .ifdef CHECK_RCPT_REMOTE_LOCALPARTS
- deny
- domains = !+local_domains
- local_parts = CHECK_RCPT_REMOTE_LOCALPARTS
- message = restricted characters in address
- .endif
-
- accept
- .ifndef CHECK_RCPT_POSTMASTER
- local_parts = postmaster
- .else
- local_parts = CHECK_RCPT_POSTMASTER
- .endif
- domains = +local_domains : +relay_to_domains
-
- .ifdef CHECK_RCPT_VERIFY_SENDER
- deny
- message = Sender verification failed
- !acl = acl_local_deny_exceptions
- !verify = sender
- .endif
-
- deny
- !acl = acl_local_deny_exceptions
- senders = ${if exists{CONFDIR/local_sender_callout}\
- {CONFDIR/local_sender_callout}\
- {}}
- !verify = sender/callout
-
- accept
- hosts = +relay_from_hosts
- control = submission/sender_retain
- control = dkim_disable_verify
-
- accept
- authenticated = *
- control = submission/sender_retain
- control = dkim_disable_verify
-
- require message = nice hosts say HELO first
- condition = ${if def:sender_helo_name}
-
- require
- message = relay not permitted
- domains = +local_domains : +relay_to_domains
-
- require
- verify = recipient
-
- deny
- !acl = acl_local_deny_exceptions
- recipients = ${if exists{CONFDIR/local_rcpt_callout}\
- {CONFDIR/local_rcpt_callout}\
- {}}
- !verify = recipient/callout
-
- deny
- message = sender envelope address $sender_address is locally blacklisted
here. If you think this is wrong, get in touch with postmaster
- !acl = acl_local_deny_exceptions
- senders = ${if exists{CONFDIR/local_sender_blacklist}\
- {CONFDIR/local_sender_blacklist}\
- {}}
-
- deny
- message = sender IP address $sender_host_address is locally blacklisted
here. If you think this is wrong, get in touch with postmaster
- !acl = acl_local_deny_exceptions
- hosts = ${if exists{CONFDIR/local_host_blacklist}\
- {CONFDIR/local_host_blacklist}\
- {}}
-
- .ifdef CHECK_RCPT_REVERSE_DNS
- warn
- condition = ${if and{{def:sender_host_address}{!def:sender_host_name}}\
- {yes}{no}}
- add_header = X-Host-Lookup-Failed: Reverse DNS lookup failed for
$sender_host_address (${if eq{$host_lookup_failed}{1}{failed}{deferred}})
- .endif
-
- CHECK_RCPT_SPF = true
- .ifdef CHECK_RCPT_SPF
- deny
- message = [SPF] $sender_host_address is not allowed to send mail from \
- ${if def:sender_address_domain
{$sender_address_domain}{$sender_helo_name}}. \
- Please see \
- http://www.openspf.org/Why?scope=${if def:sender_address_domain \
- {mfrom}{helo}};identity=${if def:sender_address_domain \
- {$sender_address}{$sender_helo_name}};ip=$sender_host_address
- log_message = SPF check failed.
- !acl = acl_local_deny_exceptions
- condition = ${run{/usr/bin/spfquery.mail-spf-perl --ip \
- ${quote:$sender_host_address} --identity \
- ${if def:sender_address_domain \
- {--scope mfrom --identity ${quote:$sender_address}}\
- {--scope helo --identity ${quote:$sender_helo_name}}}}\
- {no}{${if eq {$runrc}{1}{yes}{no}}}}
-
- defer
- message = Temporary DNS error while checking SPF record. Try again later.
- !acl = acl_local_deny_exceptions
- condition = ${if eq {$runrc}{5}{yes}{no}}
-
- warn
- condition = ${if <={$runrc}{6}{yes}{no}}
- add_header = Received-SPF: ${if eq {$runrc}{0}{pass}\
- {${if eq {$runrc}{2}{softfail}\
- {${if eq {$runrc}{3}{neutral}\
- {${if eq {$runrc}{4}{permerror}\
- {${if eq {$runrc}{6}{none}{error}}}}}}}}}\
- } client-ip=$sender_host_address; \
- ${if def:sender_address_domain \
- {envelope-from=${sender_address}; }{}}\
- helo=$sender_helo_name
-
- warn
- log_message = Unexpected error in SPF check.
- condition = ${if >{$runrc}{6}{yes}{no}}
- .endif
-
- .ifdef CHECK_RCPT_IP_DNSBLS
- warn
- dnslists = CHECK_RCPT_IP_DNSBLS
- add_header = X-Warning: $sender_host_address is listed at $dnslist_domain
($dnslist_value: $dnslist_text)
- log_message = $sender_host_address is listed at $dnslist_domain
($dnslist_value: $dnslist_text)
- .endif
-
- .ifdef CHECK_RCPT_DOMAIN_DNSBLS
- warn
- !senders = ${if exists{CONFDIR/local_domain_dnsbl_whitelist}\
- {CONFDIR/local_domain_dnsbl_whitelist}\
- {}}
- dnslists = CHECK_RCPT_DOMAIN_DNSBLS
- add_header = X-Warning: $sender_address_domain is listed at
$dnslist_domain ($dnslist_value: $dnslist_text)
- log_message = $sender_address_domain is listed at $dnslist_domain
($dnslist_value: $dnslist_text)
- .endif
-
- .ifdef CHECK_RCPT_LOCAL_ACL_FILE
- .include CHECK_RCPT_LOCAL_ACL_FILE
- .endif
-
- accept
- domains = +relay_to_domains
- endpass
- verify = recipient
-
- accept
+ warn
+ control = dkim_disable_verify
+ .endif
+ .endif
+
+ .ifdef CHECK_RCPT_LOCAL_LOCALPARTS
+ deny
+ domains = +local_domains
+ local_parts = CHECK_RCPT_LOCAL_LOCALPARTS
+ message = restricted characters in address
+ .endif
+
+ .ifdef CHECK_RCPT_REMOTE_LOCALPARTS
+ deny
+ domains = !+local_domains
+ local_parts = CHECK_RCPT_REMOTE_LOCALPARTS
+ message = restricted characters in address
+ .endif
+
+ accept
+ .ifndef CHECK_RCPT_POSTMASTER
+ local_parts = postmaster
+ .else
+ local_parts = CHECK_RCPT_POSTMASTER
+ .endif
+ domains = +local_domains : +relay_to_domains
+
+ .ifdef CHECK_RCPT_VERIFY_SENDER
+ deny
+ message = Sender verification failed
+ !acl = acl_local_deny_exceptions
+ !verify = sender
+ .endif
+
+ deny
+ !acl = acl_local_deny_exceptions
+ senders = ${if exists{CONFDIR/local_sender_callout}\
+ {CONFDIR/local_sender_callout}\
+ {}}
+ !verify = sender/callout
+
+ accept
+ hosts = +relay_from_hosts
+ control = submission/sender_retain
+ control = dkim_disable_verify
+
+ accept
+ authenticated = *
+ control = submission/sender_retain
+ control = dkim_disable_verify
+
+ require message = nice hosts say HELO first
+ condition = ${if def:sender_helo_name}
+
+ require
+ message = relay not permitted
+ domains = +local_domains : +relay_to_domains
+
+ require
+ verify = recipient
+
+ deny
+ !acl = acl_local_deny_exceptions
+ recipients = ${if exists{CONFDIR/local_rcpt_callout}\
+ {CONFDIR/local_rcpt_callout}\
+ {}}
+ !verify = recipient/callout
+
+ deny
+ message = sender envelope address $sender_address is locally blacklisted
here. If you think this is wrong, get in touch with postmaster
+ !acl = acl_local_deny_exceptions
+ senders = ${if exists{CONFDIR/local_sender_blacklist}\
+ {CONFDIR/local_sender_blacklist}\
+ {}}
+
+ deny
+ message = sender IP address $sender_host_address is locally blacklisted
here. If you think this is wrong, get in touch with postmaster
+ !acl = acl_local_deny_exceptions
+ hosts = ${if exists{CONFDIR/local_host_blacklist}\
+ {CONFDIR/local_host_blacklist}\
+ {}}
+
+ .ifdef CHECK_RCPT_REVERSE_DNS
+ warn
+ condition = ${if and{{def:sender_host_address}{!def:sender_host_name}}\
+ {yes}{no}}
+ add_header = X-Host-Lookup-Failed: Reverse DNS lookup failed for
$sender_host_address (${if eq{$host_lookup_failed}{1}{failed}{deferred}})
+ .endif
+
+ CHECK_RCPT_SPF = true
+ .ifdef CHECK_RCPT_SPF
+ deny
+ message = [SPF] $sender_host_address is not allowed to send mail from \
+ ${if def:sender_address_domain
{$sender_address_domain}{$sender_helo_name}}. \
+ Please see \
+ http://www.openspf.org/Why?scope=${if def:sender_address_domain \
+ {mfrom}{helo}};identity=${if def:sender_address_domain \
+ {$sender_address}{$sender_helo_name}};ip=$sender_host_address
+ log_message = SPF check failed.
+ !acl = acl_local_deny_exceptions
+ condition = ${run{/usr/bin/spfquery.mail-spf-perl --ip \
+ ${quote:$sender_host_address} --identity \
+ ${if def:sender_address_domain \
+ {--scope mfrom --identity ${quote:$sender_address}}\
+ {--scope helo --identity ${quote:$sender_helo_name}}}}\
+ {no}{${if eq {$runrc}{1}{yes}{no}}}}
+
+ defer
+ message = Temporary DNS error while checking SPF record. Try again later.
+ !acl = acl_local_deny_exceptions
+ condition = ${if eq {$runrc}{5}{yes}{no}}
+
+ warn
+ condition = ${if <={$runrc}{6}{yes}{no}}
+ add_header = Received-SPF: ${if eq {$runrc}{0}{pass}\
+ {${if eq {$runrc}{2}{softfail}\
+ {${if eq {$runrc}{3}{neutral}\
+ {${if eq {$runrc}{4}{permerror}\
+ {${if eq {$runrc}{6}{none}{error}}}}}}}}}\
+ } client-ip=$sender_host_address; \
+ ${if def:sender_address_domain \
+ {envelope-from=${sender_address}; }{}}\
+ helo=$sender_helo_name
+
+ warn
+ log_message = Unexpected error in SPF check.
+ condition = ${if >{$runrc}{6}{yes}{no}}
+ .endif
+
+ .ifdef CHECK_RCPT_IP_DNSBLS
+ warn
+ dnslists = CHECK_RCPT_IP_DNSBLS
+ add_header = X-Warning: $sender_host_address is listed at $dnslist_domain
($dnslist_value: $dnslist_text)
+ log_message = $sender_host_address is listed at $dnslist_domain
($dnslist_value: $dnslist_text)
+ .endif
+
+ .ifdef CHECK_RCPT_DOMAIN_DNSBLS
+ warn
+ !senders = ${if exists{CONFDIR/local_domain_dnsbl_whitelist}\
+ {CONFDIR/local_domain_dnsbl_whitelist}\
+ {}}
+ dnslists = CHECK_RCPT_DOMAIN_DNSBLS
+ add_header = X-Warning: $sender_address_domain is listed at
$dnslist_domain ($dnslist_value: $dnslist_text)
+ log_message = $sender_address_domain is listed at $dnslist_domain
($dnslist_value: $dnslist_text)
+ .endif
+
+ .ifdef CHECK_RCPT_LOCAL_ACL_FILE
+ .include CHECK_RCPT_LOCAL_ACL_FILE
+ .endif
+
+ accept
+ domains = +relay_to_domains
+ endpass
+ verify = recipient
+
+ accept
acl_check_data:
- .ifndef IGNORE_SMTP_LINE_LENGTH_LIMIT
- deny message = maximum allowed line length is 998 octets, \
- got $max_received_linelength
- condition = ${if > {$max_received_linelength}{998}}
- .endif
-
- .ifdef CHECK_DATA_VERIFY_HEADER_SYNTAX
- deny
- message = Message headers fail syntax check
- !acl = acl_local_deny_exceptions
- !verify = header_syntax
- .endif
-
- .ifdef CHECK_DATA_VERIFY_HEADER_SENDER
- deny
- message = No verifiable sender address in message headers
- !acl = acl_local_deny_exceptions
- !verify = header_sender
- .endif
-
- .ifdef CHECK_DATA_LOCAL_ACL_FILE
- .include CHECK_DATA_LOCAL_ACL_FILE
- .endif
-
- accept
+ .ifndef IGNORE_SMTP_LINE_LENGTH_LIMIT
+ deny message = maximum allowed line length is 998 octets, \
+ got $max_received_linelength
+ condition = ${if > {$max_received_linelength}{998}}
+ .endif
+
+ .ifdef CHECK_DATA_VERIFY_HEADER_SYNTAX
+ deny
+ message = Message headers fail syntax check
+ !acl = acl_local_deny_exceptions
+ !verify = header_syntax
+ .endif
+
+ .ifdef CHECK_DATA_VERIFY_HEADER_SENDER
+ deny
+ message = No verifiable sender address in message headers
+ !acl = acl_local_deny_exceptions
+ !verify = header_sender
+ .endif
+
+ .ifdef CHECK_DATA_LOCAL_ACL_FILE
+ .include CHECK_DATA_LOCAL_ACL_FILE
+ .endif
+
+ accept
begin routers
.ifdef MAIN_ALLOW_DOMAIN_LITERALS
domain_literal:
- debug_print = "R: domain_literal for $local_part@$domain"
- driver = ipliteral
- domains = ! +local_domains
- transport = remote_smtp
+ debug_print = "R: domain_literal for $local_part@$domain"
+ driver = ipliteral
+ domains = ! +local_domains
+ transport = remote_smtp
.endif
hubbed_hosts:
- debug_print = "R: hubbed_hosts for $domain"
- driver = manualroute
- domains = "${if exists{CONFDIR/hubbed_hosts}\
- {partial-lsearch;CONFDIR/hubbed_hosts}\
- fail}"
- same_domain_copy_routing = yes
- route_data = ${lookup{$domain}partial-lsearch{CONFDIR/hubbed_hosts}}
- transport = remote_smtp
+ debug_print = "R: hubbed_hosts for $domain"
+ driver = manualroute
+ domains = "${if exists{CONFDIR/hubbed_hosts}\
+ {partial-lsearch;CONFDIR/hubbed_hosts}\
+ fail}"
+ same_domain_copy_routing = yes
+ route_data = ${lookup{$domain}partial-lsearch{CONFDIR/hubbed_hosts}}
+ transport = remote_smtp
.ifdef DCconfig_internet
dnslookup_relay_to_domains:
- debug_print = "R: dnslookup_relay_to_domains for $local_part@$domain"
- driver = dnslookup
- domains = ! +local_domains : +relay_to_domains
- transport = remote_smtp
- same_domain_copy_routing = yes
- no_more
+ debug_print = "R: dnslookup_relay_to_domains for $local_part@$domain"
+ driver = dnslookup
+ domains = ! +local_domains : +relay_to_domains
+ transport = remote_smtp
+ same_domain_copy_routing = yes
+ no_more
dnslookup:
- debug_print = "R: dnslookup for $local_part@$domain"
- driver = dnslookup
- domains = ! +local_domains
- transport = remote_smtp
- same_domain_copy_routing = yes
- ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :\
- 172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :\
- 255.255.255.255
- no_more
+ debug_print = "R: dnslookup for $local_part@$domain"
+ driver = dnslookup
+ domains = ! +local_domains
+ transport = remote_smtp
+ same_domain_copy_routing = yes
+ ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :\
+ 172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :\
+ 255.255.255.255
+ no_more
.endif
.ifdef DCconfig_local
nonlocal:
- debug_print = "R: nonlocal for $local_part@$domain"
- driver = redirect
- domains = ! +local_domains
- allow_fail
- data = :fail: Mailing to remote domains not supported
- no_more
+ debug_print = "R: nonlocal for $local_part@$domain"
+ driver = redirect
+ domains = ! +local_domains
+ allow_fail
+ data = :fail: Mailing to remote domains not supported
+ no_more
.endif
.ifdef DCconfig_smarthost DCconfig_satellite
smarthost:
- debug_print = "R: smarthost for $local_part@$domain"
- driver = manualroute
- domains = ! +local_domains
- transport = remote_smtp_smarthost
- route_list = * DCsmarthost byname
- host_find_failed = ignore
- same_domain_copy_routing = yes
- no_more
+ debug_print = "R: smarthost for $local_part@$domain"
+ driver = manualroute
+ domains = ! +local_domains
+ transport = remote_smtp_smarthost
+ route_list = * DCsmarthost byname
+ host_find_failed = ignore
+ same_domain_copy_routing = yes
+ no_more
.endif
COND_LOCAL_SUBMITTER = "\
- ${if match_ip{$sender_host_address}{:@[]}\
- {1}{0}\
- }"
+ ${if match_ip{$sender_host_address}{:@[]}\
+ {1}{0}\
+ }"
real_local:
- debug_print = "R: real_local for $local_part@$domain"
- driver = accept
- domains = +local_domains
- condition = COND_LOCAL_SUBMITTER
- local_part_prefix = real-
- check_local_user
- transport = LOCAL_DELIVERY
+ debug_print = "R: real_local for $local_part@$domain"
+ driver = accept
+ domains = +local_domains
+ condition = COND_LOCAL_SUBMITTER
+ local_part_prefix = real-
+ check_local_user
+ transport = LOCAL_DELIVERY
system_aliases:
- debug_print = "R: system_aliases for $local_part@$domain"
- driver = redirect
- domains = +local_domains
- allow_fail
- allow_defer
- data = ${lookup{$local_part}lsearch{/etc/aliases}}
- .ifdef SYSTEM_ALIASES_USER
- user = SYSTEM_ALIASES_USER
- .endif
- .ifdef SYSTEM_ALIASES_GROUP
- group = SYSTEM_ALIASES_GROUP
- .endif
- .ifdef SYSTEM_ALIASES_FILE_TRANSPORT
- file_transport = SYSTEM_ALIASES_FILE_TRANSPORT
- .endif
- .ifdef SYSTEM_ALIASES_PIPE_TRANSPORT
- pipe_transport = SYSTEM_ALIASES_PIPE_TRANSPORT
- .endif
- .ifdef SYSTEM_ALIASES_DIRECTORY_TRANSPORT
- directory_transport = SYSTEM_ALIASES_DIRECTORY_TRANSPORT
- .endif
+ debug_print = "R: system_aliases for $local_part@$domain"
+ driver = redirect
+ domains = +local_domains
+ allow_fail
+ allow_defer
+ data = ${lookup{$local_part}lsearch{/etc/aliases}}
+ .ifdef SYSTEM_ALIASES_USER
+ user = SYSTEM_ALIASES_USER
+ .endif
+ .ifdef SYSTEM_ALIASES_GROUP
+ group = SYSTEM_ALIASES_GROUP
+ .endif
+ .ifdef SYSTEM_ALIASES_FILE_TRANSPORT
+ file_transport = SYSTEM_ALIASES_FILE_TRANSPORT
+ .endif
+ .ifdef SYSTEM_ALIASES_PIPE_TRANSPORT
+ pipe_transport = SYSTEM_ALIASES_PIPE_TRANSPORT
+ .endif
+ .ifdef SYSTEM_ALIASES_DIRECTORY_TRANSPORT
+ directory_transport = SYSTEM_ALIASES_DIRECTORY_TRANSPORT
+ .endif
.ifdef DCconfig_satellite
hub_user:
- debug_print = "R: hub_user for $local_part@$domain"
- driver = redirect
- domains = +local_domains
- data = ${local_part}@DCreadhost
- check_local_user
+ debug_print = "R: hub_user for $local_part@$domain"
+ driver = redirect
+ domains = +local_domains
+ data = ${local_part}@DCreadhost
+ check_local_user
hub_user_smarthost:
- debug_print = "R: hub_user_smarthost for $local_part@$domain"
- driver = manualroute
- domains = DCreadhost
- transport = remote_smtp_smarthost
- route_list = * DCsmarthost byname
- host_find_failed = ignore
- same_domain_copy_routing = yes
- check_local_user
+ debug_print = "R: hub_user_smarthost for $local_part@$domain"
+ driver = manualroute
+ domains = DCreadhost
+ transport = remote_smtp_smarthost
+ route_list = * DCsmarthost byname
+ host_find_failed = ignore
+ same_domain_copy_routing = yes
+ check_local_user
.endif
userforward:
- debug_print = "R: userforward for $local_part@$domain"
- driver = redirect
- domains = +local_domains
- check_local_user
- file = $home/.forward
- require_files = $local_part:$home/.forward
- no_verify
- no_expn
- check_ancestor
- allow_filter
- forbid_smtp_code = true
- directory_transport = address_directory
- file_transport = address_file
- pipe_transport = address_pipe
- reply_transport = address_reply
- skip_syntax_errors
- syntax_errors_to = real-$local_part@$domain
- syntax_errors_text = \
- This is an automatically generated message. An error has\n\
- been found in your .forward file. Details of the error are\n\
- reported below. While this error persists, you will receive\n\
- a copy of this message for every message that is addressed\n\
- to you. If your .forward file is a filter file, or if it is\n\
- a non-filter file containing no valid forwarding addresses,\n\
- a copy of each incoming message will be put in your normal\n\
- mailbox. If a non-filter file contains at least one valid\n\
- forwarding address, forwarding to the valid addresses will\n\
- happen, and those will be the only deliveries that occur.
+ debug_print = "R: userforward for $local_part@$domain"
+ driver = redirect
+ domains = +local_domains
+ check_local_user
+ file = $home/.forward
+ require_files = $local_part:$home/.forward
+ no_verify
+ no_expn
+ check_ancestor
+ allow_filter
+ forbid_smtp_code = true
+ directory_transport = address_directory
+ file_transport = address_file
+ pipe_transport = address_pipe
+ reply_transport = address_reply
+ skip_syntax_errors
+ syntax_errors_to = real-$local_part@$domain
+ syntax_errors_text = \
+ This is an automatically generated message. An error has\n\
+ been found in your .forward file. Details of the error are\n\
+ reported below. While this error persists, you will receive\n\
+ a copy of this message for every message that is addressed\n\
+ to you. If your .forward file is a filter file, or if it is\n\
+ a non-filter file containing no valid forwarding addresses,\n\
+ a copy of each incoming message will be put in your normal\n\
+ mailbox. If a non-filter file contains at least one valid\n\
+ forwarding address, forwarding to the valid addresses will\n\
+ happen, and those will be the only deliveries that occur.
procmail:
- debug_print = "R: procmail for $local_part@$domain"
- driver = accept
- domains = +local_domains
- check_local_user
- transport = procmail_pipe
- require_files = ${local_part}:\
- ${if exists{/etc/procmailrc}\
- {/etc/procmailrc}{${home}/.procmailrc}}:\
- +/usr/bin/procmail
- no_verify
- no_expn
+ debug_print = "R: procmail for $local_part@$domain"
+ driver = accept
+ domains = +local_domains
+ check_local_user
+ transport = procmail_pipe
+ require_files = ${local_part}:\
+ ${if exists{/etc/procmailrc}\
+ {/etc/procmailrc}{${home}/.procmailrc}}:\
+ +/usr/bin/procmail
+ no_verify
+ no_expn
maildrop:
- debug_print = "R: maildrop for $local_part@$domain"
- driver = accept
- domains = +local_domains
- check_local_user
- transport = maildrop_pipe
- require_files = ${local_part}:${home}/.mailfilter:+/usr/bin/maildrop
- no_verify
- no_expn
+ debug_print = "R: maildrop for $local_part@$domain"
+ driver = accept
+ domains = +local_domains
+ check_local_user
+ transport = maildrop_pipe
+ require_files = ${local_part}:${home}/.mailfilter:+/usr/bin/maildrop
+ no_verify
+ no_expn
.ifndef FIRST_USER_ACCOUNT_UID
FIRST_USER_ACCOUNT_UID = 0
.endif
.ifndef DEFAULT_SYSTEM_ACCOUNT_ALIAS
DEFAULT_SYSTEM_ACCOUNT_ALIAS = :fail: no mail to system accounts
.endif
COND_SYSTEM_USER_AND_REMOTE_SUBMITTER = "\
- ${if and{{! match_ip{$sender_host_address}{:@[]}}\
- {<{$local_user_uid}{FIRST_USER_ACCOUNT_UID}}}\
- {1}{0}\
- }"
+ ${if and{{! match_ip{$sender_host_address}{:@[]}}\
+ {<{$local_user_uid}{FIRST_USER_ACCOUNT_UID}}}\
+ {1}{0}\
+ }"
lowuid_aliases:
- debug_print = "R: lowuid_aliases for $local_part@$domain (UID
$local_user_uid)"
- check_local_user
- driver = redirect
- allow_fail
- domains = +local_domains
- condition = COND_SYSTEM_USER_AND_REMOTE_SUBMITTER
- data = ${if exists{CONFDIR/lowuid-aliases}\
- {${lookup{$local_part}lsearch{CONFDIR/lowuid-aliases}\
- {$value}{DEFAULT_SYSTEM_ACCOUNT_ALIAS}}}\
- {DEFAULT_SYSTEM_ACCOUNT_ALIAS}}
+ debug_print = "R: lowuid_aliases for $local_part@$domain (UID
$local_user_uid)"
+ check_local_user
+ driver = redirect
+ allow_fail
+ domains = +local_domains
+ condition = COND_SYSTEM_USER_AND_REMOTE_SUBMITTER
+ data = ${if exists{CONFDIR/lowuid-aliases}\
+ {${lookup{$local_part}lsearch{CONFDIR/lowuid-aliases}\
+ {$value}{DEFAULT_SYSTEM_ACCOUNT_ALIAS}}}\
+ {DEFAULT_SYSTEM_ACCOUNT_ALIAS}}
local_user:
- debug_print = "R: local_user for $local_part@$domain"
- driver = accept
- domains = +local_domains
- check_local_user
- local_parts = ! root
- transport = LOCAL_DELIVERY
- cannot_route_message = Unknown user
+ debug_print = "R: local_user for $local_part@$domain"
+ driver = accept
+ domains = +local_domains
+ check_local_user
+ local_parts = ! root
+ transport = LOCAL_DELIVERY
+ cannot_route_message = Unknown user
mail4root:
- debug_print = "R: mail4root for $local_part@$domain"
- driver = redirect
- domains = +local_domains
- data = /var/mail/mail
- file_transport = address_file
- local_parts = root
- user = mail
- group = mail
+ debug_print = "R: mail4root for $local_part@$domain"
+ driver = redirect
+ domains = +local_domains
+ data = /var/mail/mail
+ file_transport = address_file
+ local_parts = root
+ user = mail
+ group = mail
begin transports
.ifdef HIDE_MAILNAME
REMOTE_SMTP_HEADERS_REWRITE=*@+local_domains $1@DCreadhost frs :
*@ETC_MAILNAME $1@DCreadhost frs
REMOTE_SMTP_RETURN_PATH=${if
match_domain{$sender_address_domain}{+local_domains}{${sender_address_local_part}@DCreadhost}{${if
match_domain{$sender_address_domain}{ETC_MAILNAME}{${sender_address_local_part}@DCreadhost}fail}}}
.endif
.ifdef REMOTE_SMTP_HELO_FROM_DNS
.ifdef REMOTE_SMTP_HELO_DATA
REMOTE_SMTP_HELO_DATA==${lookup dnsdb
{ptr=$sending_ip_address}{$value}{$primary_hostname}}
.else
REMOTE_SMTP_HELO_DATA=${lookup dnsdb
{ptr=$sending_ip_address}{$value}{$primary_hostname}}
.endif
.endif
address_file:
- debug_print = "T: address_file for $local_part@$domain"
- driver = appendfile
- delivery_date_add
- envelope_to_add
- return_path_add
+ debug_print = "T: address_file for $local_part@$domain"
+ driver = appendfile
+ delivery_date_add
+ envelope_to_add
+ return_path_add
address_pipe:
- debug_print = "T: address_pipe for $local_part@$domain"
- driver = pipe
- return_fail_output
+ debug_print = "T: address_pipe for $local_part@$domain"
+ driver = pipe
+ return_fail_output
address_reply:
- debug_print = "T: autoreply for $local_part@$domain"
- driver = autoreply
+ debug_print = "T: autoreply for $local_part@$domain"
+ driver = autoreply
mail_spool:
- debug_print = "T: appendfile for $local_part@$domain"
- driver = appendfile
- file = /var/mail/$local_part
- delivery_date_add
- envelope_to_add
- return_path_add
- group = mail
- mode = 0660
- mode_fail_narrower = false
+ debug_print = "T: appendfile for $local_part@$domain"
+ driver = appendfile
+ file = /var/mail/$local_part
+ delivery_date_add
+ envelope_to_add
+ return_path_add
+ group = mail
+ mode = 0660
+ mode_fail_narrower = false
maildir_home:
- debug_print = "T: maildir_home for $local_part@$domain"
- driver = appendfile
- .ifdef MAILDIR_HOME_MAILDIR_LOCATION
- directory = MAILDIR_HOME_MAILDIR_LOCATION
- .else
- directory = $home/Maildir
- .endif
- .ifdef MAILDIR_HOME_CREATE_DIRECTORY
- create_directory
- .endif
- .ifdef MAILDIR_HOME_CREATE_FILE
- create_file = MAILDIR_HOME_CREATE_FILE
- .endif
- delivery_date_add
- envelope_to_add
- return_path_add
- maildir_format
- .ifdef MAILDIR_HOME_DIRECTORY_MODE
- directory_mode = MAILDIR_HOME_DIRECTORY_MODE
- .else
- directory_mode = 0700
- .endif
- .ifdef MAILDIR_HOME_MODE
- mode = MAILDIR_HOME_MODE
- .else
- mode = 0600
- .endif
- mode_fail_narrower = false
+ debug_print = "T: maildir_home for $local_part@$domain"
+ driver = appendfile
+ .ifdef MAILDIR_HOME_MAILDIR_LOCATION
+ directory = MAILDIR_HOME_MAILDIR_LOCATION
+ .else
+ directory = $home/Maildir
+ .endif
+ .ifdef MAILDIR_HOME_CREATE_DIRECTORY
+ create_directory
+ .endif
+ .ifdef MAILDIR_HOME_CREATE_FILE
+ create_file = MAILDIR_HOME_CREATE_FILE
+ .endif
+ delivery_date_add
+ envelope_to_add
+ return_path_add
+ maildir_format
+ .ifdef MAILDIR_HOME_DIRECTORY_MODE
+ directory_mode = MAILDIR_HOME_DIRECTORY_MODE
+ .else
+ directory_mode = 0700
+ .endif
+ .ifdef MAILDIR_HOME_MODE
+ mode = MAILDIR_HOME_MODE
+ .else
+ mode = 0600
+ .endif
+ mode_fail_narrower = false
maildrop_pipe:
- debug_print = "T: maildrop_pipe for $local_part@$domain"
- driver = pipe
- path = "/bin:/usr/bin:/usr/local/bin"
- command = "/usr/bin/maildrop"
- message_prefix =
- message_suffix =
- return_path_add
- delivery_date_add
- envelope_to_add
+ debug_print = "T: maildrop_pipe for $local_part@$domain"
+ driver = pipe
+ path = "/bin:/usr/bin:/usr/local/bin"
+ command = "/usr/bin/maildrop"
+ message_prefix =
+ message_suffix =
+ return_path_add
+ delivery_date_add
+ envelope_to_add
procmail_pipe:
- debug_print = "T: procmail_pipe for $local_part@$domain"
- driver = pipe
- path = "/bin:/usr/bin:/usr/local/bin"
- command = "/usr/bin/procmail"
- return_path_add
- delivery_date_add
- envelope_to_add
+ debug_print = "T: procmail_pipe for $local_part@$domain"
+ driver = pipe
+ path = "/bin:/usr/bin:/usr/local/bin"
+ command = "/usr/bin/procmail"
+ return_path_add
+ delivery_date_add
+ envelope_to_add
remote_smtp:
- debug_print = "T: remote_smtp for $local_part@$domain"
- driver = smtp
+ debug_print = "T: remote_smtp for $local_part@$domain"
+ driver = smtp
.ifndef IGNORE_SMTP_LINE_LENGTH_LIMIT
- message_size_limit = ${if > {$max_received_linelength}{998} {1}{0}}
+ message_size_limit = ${if > {$max_received_linelength}{998} {1}{0}}
.endif
.ifdef REMOTE_SMTP_HOSTS_AVOID_TLS
- hosts_avoid_tls = REMOTE_SMTP_HOSTS_AVOID_TLS
+ hosts_avoid_tls = REMOTE_SMTP_HOSTS_AVOID_TLS
.endif
.ifdef REMOTE_SMTP_HEADERS_REWRITE
- headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
+ headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
.endif
.ifdef REMOTE_SMTP_RETURN_PATH
- return_path = REMOTE_SMTP_RETURN_PATH
+ return_path = REMOTE_SMTP_RETURN_PATH
.endif
.ifdef REMOTE_SMTP_HELO_DATA
- helo_data=REMOTE_SMTP_HELO_DATA
+ helo_data=REMOTE_SMTP_HELO_DATA
.endif
.ifdef DKIM_DOMAIN
dkim_domain = DKIM_DOMAIN
.endif
.ifdef DKIM_SELECTOR
dkim_selector = DKIM_SELECTOR
.endif
.ifdef DKIM_PRIVATE_KEY
dkim_private_key = DKIM_PRIVATE_KEY
.endif
.ifdef DKIM_CANON
dkim_canon = DKIM_CANON
.endif
.ifdef DKIM_STRICT
dkim_strict = DKIM_STRICT
.endif
.ifdef DKIM_SIGN_HEADERS
dkim_sign_headers = DKIM_SIGN_HEADERS
.endif
.ifdef TLS_DH_MIN_BITS
tls_dh_min_bits = TLS_DH_MIN_BITS
.endif
.ifdef REMOTE_SMTP_TLS_CERTIFICATE
tls_certificate = REMOTE_SMTP_TLS_CERTIFICATE
.endif
.ifdef REMOTE_SMTP_PRIVATEKEY
tls_privatekey = REMOTE_SMTP_PRIVATEKEY
.endif
remote_smtp_smarthost:
- debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
- driver = smtp
+ debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
+ driver = smtp
.ifndef IGNORE_SMTP_LINE_LENGTH_LIMIT
- message_size_limit = ${if > {$max_received_linelength}{998} {1}{0}}
- .endif
- hosts_try_auth = <; ${if exists{CONFDIR/passwd.client} \
- {\
- ${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$host_address}}\
- }\
- {} \
- }
+ message_size_limit = ${if > {$max_received_linelength}{998} {1}{0}}
+ .endif
+ hosts_try_auth = <; ${if exists{CONFDIR/passwd.client} \
+ {\
+ ${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$host_address}}\
+ }\
+ {} \
+ }
.ifdef REMOTE_SMTP_SMARTHOST_HOSTS_AVOID_TLS
- hosts_avoid_tls = REMOTE_SMTP_SMARTHOST_HOSTS_AVOID_TLS
+ hosts_avoid_tls = REMOTE_SMTP_SMARTHOST_HOSTS_AVOID_TLS
.endif
.ifdef REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS
- hosts_require_tls = REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS
+ hosts_require_tls = REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS
.endif
.ifdef REMOTE_SMTP_HEADERS_REWRITE
- headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
+ headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
.endif
.ifdef REMOTE_SMTP_RETURN_PATH
- return_path = REMOTE_SMTP_RETURN_PATH
+ return_path = REMOTE_SMTP_RETURN_PATH
.endif
.ifdef REMOTE_SMTP_HELO_DATA
- helo_data=REMOTE_SMTP_HELO_DATA
+ helo_data=REMOTE_SMTP_HELO_DATA
.endif
.ifdef TLS_DH_MIN_BITS
tls_dh_min_bits = TLS_DH_MIN_BITS
.endif
.ifdef REMOTE_SMTP_SMARTHOST_TLS_CERTIFICATE
tls_certificate = REMOTE_SMTP_SMARTHOST_TLS_CERTIFICATE
.endif
.ifdef REMOTE_SMTP_SMARTHOST_PRIVATEKEY
tls_privatekey = REMOTE_SMTP_SMARTHOST_PRIVATEKEY
.endif
address_directory:
- debug_print = "T: address_directory for $local_part@$domain"
- driver = appendfile
- delivery_date_add
- envelope_to_add
- return_path_add
- check_string = ""
- escape_string = ""
- maildir_format
+ debug_print = "T: address_directory for $local_part@$domain"
+ driver = appendfile
+ delivery_date_add
+ envelope_to_add
+ return_path_add
+ check_string = ""
+ escape_string = ""
+ maildir_format
begin retry
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
begin rewrite
.ifndef NO_EAA_REWRITE_REWRITE
*@+local_domains "${lookup{${local_part}}lsearch{/etc/email-addresses}\
- {$value}fail}" Ffrs
+ {$value}fail}" Ffrs
*@ETC_MAILNAME "${lookup{${local_part}}lsearch{/etc/email-addresses}\
- {$value}fail}" Ffrs
+ {$value}fail}" Ffrs
.endif
begin authenticators
cram_md5:
- driver = cram_md5
- public_name = CRAM-MD5
- client_name =
${extract{1}{:}{${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}}}
- client_secret =
${extract{2}{:}{${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}}}
+ driver = cram_md5
+ public_name = CRAM-MD5
+ client_name =
${extract{1}{:}{${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}}}
+ client_secret =
${extract{2}{:}{${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}}}
PASSWDLINE=${sg{\
-
${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}\
- }\
- {\\N[\\^]\\N}\
- {^^}\
- }
+
${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}\
+ }\
+ {\\N[\\^]\\N}\
+ {^^}\
+ }
plain:
- driver = plaintext
- public_name = PLAIN
+ driver = plaintext
+ public_name = PLAIN
.ifndef AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS
- client_send = "<; ${if !eq{$tls_out_cipher}{}\
- {^${extract{1}{:}{PASSWDLINE}}\
- ^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}\
- }fail}"
+ client_send = "<; ${if !eq{$tls_out_cipher}{}\
+ {^${extract{1}{:}{PASSWDLINE}}\
+ ^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}\
+ }fail}"
.else
- client_send = "<; ^${extract{1}{:}{PASSWDLINE}}\
- ^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
+ client_send = "<; ^${extract{1}{:}{PASSWDLINE}}\
+ ^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
.endif
login:
- driver = plaintext
- public_name = LOGIN
+ driver = plaintext
+ public_name = LOGIN
.ifndef AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS
- client_send = "<; ${if and{\
- {!eq{$tls_out_cipher}{}}\
- {!eq{PASSWDLINE}{}}\
- }\
- {}fail}\
- ; ${extract{1}{::}{PASSWDLINE}}\
- ; ${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
+ client_send = "<; ${if and{\
+ {!eq{$tls_out_cipher}{}}\
+ {!eq{PASSWDLINE}{}}\
+ }\
+ {}fail}\
+ ; ${extract{1}{::}{PASSWDLINE}}\
+ ; ${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
.else
- client_send = "<; ${if !eq{PASSWDLINE}{}\
- {}fail}\
- ; ${extract{1}{::}{PASSWDLINE}}\
- ; ${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
- .endif
+ client_send = "<; ${if !eq{PASSWDLINE}{}\
+ {}fail}\
+ ; ${extract{1}{::}{PASSWDLINE}}\
+ ; ${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
+ .endif
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1805877
Title:
error in update-exim.conf enabling spf
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/exim4/+bug/1805877/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs