** 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 ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs