From 85ffd16ba38cf6890d649efa284be8a822ebc25e Mon Sep 17 00:00:00 2001 From: Marius Cramer <m.cramer@pixcept.de> Date: Wed, 15 Apr 2015 12:37:32 -0400 Subject: [PATCH] Merge branch 'reject_sender_login_mismatch' into 'master' --- install/tpl/debian_postfix.conf.master | 5 install/dist/lib/fedora.lib.php | 16 +++- interface/web/admin/lib/lang/ar_server_config.lng | 1 install/tpl/opensuse_dovecot.conf.master | 4 install/tpl/debian6_dovecot2.conf.master | 3 install/tpl/opensuse_postfix.conf.master | 5 interface/web/admin/lib/lang/es_server_config.lng | 1 interface/web/admin/lib/lang/tr_server_config.lng | 1 server/plugins-available/postfix_server_plugin.inc.php | 19 ++++ interface/web/admin/form/server_config.tform.php | 6 + interface/web/admin/lib/lang/de_server_config.lng | 1 install/lib/installer_base.lib.php | 13 ++ install/tpl/fedora_dovecot2.conf.master | 5 + interface/web/admin/lib/lang/nl_server_config.lng | 1 install/tpl/debian_dovecot.conf.master | 4 install/tpl/opensuse_dovecot2.conf.master | 3 interface/web/admin/lib/lang/hu_server_config.lng | 1 interface/web/admin/lib/lang/pl_server_config.lng | 1 interface/web/admin/lib/lang/ru_server_config.lng | 1 interface/web/admin/lib/lang/el_server_config.lng | 1 interface/web/admin/lib/lang/ro_server_config.lng | 1 install/tpl/opensuse_dovecot-sql.conf.master | 3 install/tpl/fedora_dovecot.conf.master | 4 interface/web/admin/lib/lang/br_server_config.lng | 1 interface/web/admin/lib/lang/hr_server_config.lng | 1 install/tpl/fedora_dovecot-sql.conf.master | 3 interface/web/admin/lib/lang/fr_server_config.lng | 1 install/tpl/debian_dovecot2.conf.master | 3 interface/web/admin/lib/lang/fi_server_config.lng | 1 install/dist/lib/gentoo.lib.php | 31 +++++++ install/dist/lib/opensuse.lib.php | 16 +++- interface/web/admin/lib/lang/se_server_config.lng | 1 install/tpl/mysql-virtual_sender_login_maps.cf.master | 5 + interface/web/admin/lib/lang/en_server_config.lng | 1 interface/web/admin/templates/server_config_mail_edit.htm | 6 + install/tpl/gentoo_postfix.conf.master | 5 interface/web/admin/lib/lang/sk_server_config.lng | 1 interface/web/admin/lib/lang/cz_server_config.lng | 1 interface/web/admin/lib/lang/it_server_config.lng | 1 install/tpl/fedora_postfix.conf.master | 5 install/tpl/debian6_dovecot-sql.conf.master | 3 interface/web/admin/lib/lang/id_server_config.lng | 1 interface/web/admin/lib/lang/ja_server_config.lng | 1 interface/web/admin/lib/lang/pt_server_config.lng | 1 install/tpl/debian_dovecot-sql.conf.master | 5 interface/web/admin/lib/lang/bg_server_config.lng | 1 46 files changed, 164 insertions(+), 31 deletions(-) diff --git a/install/dist/lib/fedora.lib.php b/install/dist/lib/fedora.lib.php index 77bdf85..7b3fd6e 100644 --- a/install/dist/lib/fedora.lib.php +++ b/install/dist/lib/fedora.lib.php @@ -143,6 +143,9 @@ //* mysql-virtual_sender.cf $this->process_postfix_config('mysql-virtual_sender.cf'); + //* mysql-virtual_sender_login_maps.cf + $this->process_postfix_config('mysql-virtual_sender_login_maps.cf'); + //* mysql-virtual_client.cf $this->process_postfix_config('mysql-virtual_client.cf'); @@ -195,23 +198,28 @@ } } unset($rbl_hosts); - unset($server_ini_array); //* If Postgrey is installed, configure it $greylisting = ''; if($conf['postgrey']['installed'] == true) { - $greylisting = 'check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf'; + $greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf'; } - //* These postconf commands will be executed on installation and update + $reject_sender_login_mismatch = ''; + if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) { + $reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch'; + } + unset($server_ini_array); + $postconf_placeholders = array('{config_dir}' => $config_dir, '{vmail_mailbox_base}' => $cf['vmail_mailbox_base'], '{vmail_userid}' => $cf['vmail_userid'], '{vmail_groupid}' => $cf['vmail_groupid'], '{rbl_list}' => $rbl_list, '{greylisting}' => $greylisting, + '{reject_slm}' => $reject_sender_login_mismatch, ); - + $postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_postfix.conf.master', 'tpl/fedora_postfix.conf.master'); $postconf_tpl = strtr($postconf_tpl, $postconf_placeholders); $postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php index 9cd9b96..d8c3f38 100644 --- a/install/dist/lib/gentoo.lib.php +++ b/install/dist/lib/gentoo.lib.php @@ -81,11 +81,40 @@ } //* These postconf commands will be executed on installation and update + $server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"].'.server', $conf['server_id']); + $server_ini_array = ini_to_array(stripslashes($server_ini_rec['config'])); + unset($server_ini_rec); + + //* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removeal after an update + $rbl_list = ''; + if (@isset($server_ini_array['mail']['realtime_blackhole_list']) && $server_ini_array['mail']['realtime_blackhole_list'] != '') { + $rbl_hosts = explode(",", str_replace(" ", "", $server_ini_array['mail']['realtime_blackhole_list'])); + foreach ($rbl_hosts as $key => $value) { + $rbl_list .= ", reject_rbl_client ". $value; + } + } + unset($rbl_hosts); + + //* If Postgrey is installed, configure it + $greylisting = ''; + if($conf['postgrey']['installed'] == true) { + $greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf'; + } + + $reject_sender_login_mismatch = ''; + if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) { + $reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch'; + } + unset($server_ini_array); + $postconf_placeholders = array('{config_dir}' => $config_dir, '{vmail_mailbox_base}' => $cf['vmail_mailbox_base'], '{vmail_userid}' => $cf['vmail_userid'], '{vmail_groupid}' => $cf['vmail_groupid'], - '{rbl_list}' => $rbl_list); + '{rbl_list}' => $rbl_list, + '{greylisting}' => $greylisting, + '{reject_slm}' => $reject_sender_login_mismatch, + ); $postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/gentoo_postfix.conf.master', 'tpl/gentoo_postfix.conf.master'); $postconf_tpl = strtr($postconf_tpl, $postconf_placeholders); diff --git a/install/dist/lib/opensuse.lib.php b/install/dist/lib/opensuse.lib.php index 1336882..55d4888 100644 --- a/install/dist/lib/opensuse.lib.php +++ b/install/dist/lib/opensuse.lib.php @@ -159,6 +159,9 @@ //* mysql-virtual_sender.cf $this->process_postfix_config('mysql-virtual_sender.cf'); + //* mysql-virtual_sender_login_maps.cf + $this->process_postfix_config('mysql-virtual_sender_login_maps.cf'); + //* mysql-virtual_client.cf $this->process_postfix_config('mysql-virtual_client.cf'); @@ -225,23 +228,28 @@ } } unset($rbl_hosts); - unset($server_ini_array); //* If Postgrey is installed, configure it $greylisting = ''; if($conf['postgrey']['installed'] == true) { - $greylisting = 'check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf'; + $greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf'; } - //* These postconf commands will be executed on installation and update + $reject_sender_login_mismatch = ''; + if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) { + $reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch'; + } + unset($server_ini_array); + $postconf_placeholders = array('{config_dir}' => $config_dir, '{vmail_mailbox_base}' => $cf['vmail_mailbox_base'], '{vmail_userid}' => $cf['vmail_userid'], '{vmail_groupid}' => $cf['vmail_groupid'], '{rbl_list}' => $rbl_list, '{greylisting}' => $greylisting, + '{reject_slm}' => $reject_sender_login_mismatch, ); - + $postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/opensuse_postfix.conf.master', 'tpl/opensuse_postfix.conf.master'); $postconf_tpl = strtr($postconf_tpl, $postconf_placeholders); $postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index d4772ae..cba3056 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -692,6 +692,9 @@ //* mysql-virtual_sender.cf $this->process_postfix_config('mysql-virtual_sender.cf'); + //* mysql-virtual_sender_login_maps.cf + $this->process_postfix_config('mysql-virtual_sender_login_maps.cf'); + //* mysql-virtual_client.cf $this->process_postfix_config('mysql-virtual_client.cf'); @@ -743,13 +746,18 @@ } } unset($rbl_hosts); - unset($server_ini_array); //* If Postgrey is installed, configure it $greylisting = ''; if($conf['postgrey']['installed'] == true) { - $greylisting = 'check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf'; + $greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf'; } + + $reject_sender_login_mismatch = ''; + if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) { + $reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch'; + } + unset($server_ini_array); $postconf_placeholders = array('{config_dir}' => $config_dir, '{vmail_mailbox_base}' => $cf['vmail_mailbox_base'], @@ -757,6 +765,7 @@ '{vmail_groupid}' => $cf['vmail_groupid'], '{rbl_list}' => $rbl_list, '{greylisting}' => $greylisting, + '{reject_slm}' => $reject_sender_login_mismatch, ); $postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_postfix.conf.master', 'tpl/debian_postfix.conf.master'); diff --git a/install/tpl/debian6_dovecot-sql.conf.master b/install/tpl/debian6_dovecot-sql.conf.master index 61f86c4..3c58b30 100644 --- a/install/tpl/debian6_dovecot-sql.conf.master +++ b/install/tpl/debian6_dovecot-sql.conf.master @@ -13,7 +13,8 @@ connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password} default_pass_scheme = CRYPT -password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}' +# password-query with prefetch +password_query = SELECT email as user, password, maildir as userdb_home, CONCAT('maildir:', maildir, '/Maildir') as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers. diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master index e71fefc..ee77f4e 100644 --- a/install/tpl/debian6_dovecot2.conf.master +++ b/install/tpl/debian6_dovecot2.conf.master @@ -13,6 +13,9 @@ driver = sql } userdb { + driver = prefetch +} +userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } diff --git a/install/tpl/debian_dovecot-sql.conf.master b/install/tpl/debian_dovecot-sql.conf.master index a4d5bbd..adeb8d9 100644 --- a/install/tpl/debian_dovecot-sql.conf.master +++ b/install/tpl/debian_dovecot-sql.conf.master @@ -120,8 +120,9 @@ connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password} default_pass_scheme = CRYPT -password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}' -user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}' +# password-query with prefetch +password_query = SELECT email as user, password, maildir as userdb_home, CONCAT('maildir:', maildir, '/Maildir') as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' +user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers. # Do not enable it on Dovecot 1.x servers diff --git a/install/tpl/debian_dovecot.conf.master b/install/tpl/debian_dovecot.conf.master index 3d8ea9a..8d60225 100644 --- a/install/tpl/debian_dovecot.conf.master +++ b/install/tpl/debian_dovecot.conf.master @@ -1006,8 +1006,8 @@ # This can be made to work with SQL and LDAP databases, see their example # configuration files for more information how to do it. # <doc/wiki/UserDatabase.Prefetch.txt> - #userdb prefetch { - #} + userdb prefetch { + } # User to use for the process. This user needs access to only user and # password databases, nothing else. Only shadow and pam authentication diff --git a/install/tpl/debian_dovecot2.conf.master b/install/tpl/debian_dovecot2.conf.master index 83d3358..39cf60f 100644 --- a/install/tpl/debian_dovecot2.conf.master +++ b/install/tpl/debian_dovecot2.conf.master @@ -14,6 +14,9 @@ driver = sql } userdb { + driver = prefetch +} +userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } diff --git a/install/tpl/debian_postfix.conf.master b/install/tpl/debian_postfix.conf.master index b3d7f74..911b1ca 100644 --- a/install/tpl/debian_postfix.conf.master +++ b/install/tpl/debian_postfix.conf.master @@ -22,8 +22,9 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{config_dir}/mysql-virtual_transports.cf relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf -proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks -smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf +proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps +smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re{reject_slm}, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf smtpd_client_message_rate_limit = 100 maildrop_destination_concurrency_limit = 1 diff --git a/install/tpl/fedora_dovecot-sql.conf.master b/install/tpl/fedora_dovecot-sql.conf.master index 769e0a4..7e88dee 100644 --- a/install/tpl/fedora_dovecot-sql.conf.master +++ b/install/tpl/fedora_dovecot-sql.conf.master @@ -133,7 +133,8 @@ connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password} default_pass_scheme = CRYPT -password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}' +# password-query with prefetch +password_query = SELECT email as user, password, maildir as userdb_home, CONCAT('maildir:', maildir, '/Maildir') as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers. diff --git a/install/tpl/fedora_dovecot.conf.master b/install/tpl/fedora_dovecot.conf.master index c11d401..cfac856 100644 --- a/install/tpl/fedora_dovecot.conf.master +++ b/install/tpl/fedora_dovecot.conf.master @@ -1039,8 +1039,8 @@ # This can be made to work with SQL and LDAP databases, see their example # configuration files for more information how to do it. # <doc/wiki/UserDatabase.Prefetch.txt> - #userdb prefetch { - #} + userdb prefetch { + } # System users (NSS, /etc/passwd, or similiar). In many systems nowadays this # uses Name Service Switch, which is configured in /etc/nsswitch.conf. diff --git a/install/tpl/fedora_dovecot2.conf.master b/install/tpl/fedora_dovecot2.conf.master index 2b542f1..9fca319 100644 --- a/install/tpl/fedora_dovecot2.conf.master +++ b/install/tpl/fedora_dovecot2.conf.master @@ -12,6 +12,9 @@ driver = sql } userdb { + driver = prefetch +} +userdb { args = /etc/dovecot-sql.conf driver = sql } @@ -57,4 +60,4 @@ protocol lmtp { postmaster_address = webmaster@localhost mail_plugins = quota sieve -} \ No newline at end of file +} diff --git a/install/tpl/fedora_postfix.conf.master b/install/tpl/fedora_postfix.conf.master index 0e868ca..473bbce 100644 --- a/install/tpl/fedora_postfix.conf.master +++ b/install/tpl/fedora_postfix.conf.master @@ -19,8 +19,9 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{config_dir}/mysql-virtual_transports.cf relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf -proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks -smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf +proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps +smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re{reject_slm}, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf smtpd_client_message_rate_limit = 100 maildrop_destination_concurrency_limit = 1 diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master index 72e458e..f5730f7 100644 --- a/install/tpl/gentoo_postfix.conf.master +++ b/install/tpl/gentoo_postfix.conf.master @@ -18,8 +18,9 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{config_dir}/mysql-virtual_transports.cf relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf -proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks -smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf +proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps +smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re{reject_slm}, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf smtpd_client_message_rate_limit = 100 maildrop_destination_concurrency_limit = 1 diff --git a/install/tpl/mysql-virtual_sender_login_maps.cf.master b/install/tpl/mysql-virtual_sender_login_maps.cf.master new file mode 100644 index 0000000..ad2d758 --- /dev/null +++ b/install/tpl/mysql-virtual_sender_login_maps.cf.master @@ -0,0 +1,5 @@ +user = {mysql_server_ispconfig_user} +password = {mysql_server_ispconfig_password} +dbname = {mysql_server_database} +query = SELECT destination FROM mail_forwarding WHERE source = '%s' AND active = 'y' AND type = 'alias' AND server_id = {server_id} UNION SELECT email FROM mail_user WHERE email = '%s' AND disablesmtp = 'n' AND server_id = {server_id}; +hosts = {mysql_server_ip} \ No newline at end of file diff --git a/install/tpl/opensuse_dovecot-sql.conf.master b/install/tpl/opensuse_dovecot-sql.conf.master index 57515af..a28fa27 100644 --- a/install/tpl/opensuse_dovecot-sql.conf.master +++ b/install/tpl/opensuse_dovecot-sql.conf.master @@ -133,7 +133,8 @@ connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password} default_pass_scheme = CRYPT -password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n' AND server_id = '{server_id}' +# password-query with prefetch +password_query = SELECT email as user, password, maildir as userdb_home, CONCAT('maildir:', maildir, '/Maildir') as userdb_mail, uid as userdb_uid, gid as userdb_gid, CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '{server_id}' # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers. diff --git a/install/tpl/opensuse_dovecot.conf.master b/install/tpl/opensuse_dovecot.conf.master index eca13a6..9d345fa 100644 --- a/install/tpl/opensuse_dovecot.conf.master +++ b/install/tpl/opensuse_dovecot.conf.master @@ -1033,8 +1033,8 @@ # This can be made to work with SQL and LDAP databases, see their example # configuration files for more information how to do it. # <doc/wiki/UserDatabase.Prefetch.txt> - #userdb prefetch { - #} + userdb prefetch { + } # System users (NSS, /etc/passwd, or similiar). In many systems nowadays this # uses Name Service Switch, which is configured in /etc/nsswitch.conf. diff --git a/install/tpl/opensuse_dovecot2.conf.master b/install/tpl/opensuse_dovecot2.conf.master index 8da19d1..1b9d9dc 100644 --- a/install/tpl/opensuse_dovecot2.conf.master +++ b/install/tpl/opensuse_dovecot2.conf.master @@ -12,6 +12,9 @@ driver = sql } userdb { + driver = prefetch +} +userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } diff --git a/install/tpl/opensuse_postfix.conf.master b/install/tpl/opensuse_postfix.conf.master index 321e713..f018e23 100644 --- a/install/tpl/opensuse_postfix.conf.master +++ b/install/tpl/opensuse_postfix.conf.master @@ -21,8 +21,9 @@ transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{config_dir}/mysql-virtual_transports.cf relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf -proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks -smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re +smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf +proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps +smtpd_sender_restrictions = check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf regexp:{config_dir}/tag_as_originating.re{reject_slm}, permit_mynetworks, check_sender_access regexp:{config_dir}/tag_as_foreign.re smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf smtpd_client_message_rate_limit = 100 maildrop_destination_concurrency_limit = 1 diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index c3f940e..fbcb207 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -434,6 +434,12 @@ 'width' => '40', 'maxlength' => '255' ), + 'reject_sender_login_mismatch' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n', 1 => 'y') + ), 'mailbox_size_limit' => array( 'datatype' => 'INTEGER', 'formtype' => 'TEXT', diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng index f42dbc9..df6605c 100644 --- a/interface/web/admin/lib/lang/ar_server_config.lng +++ b/interface/web/admin/lib/lang/ar_server_config.lng @@ -32,6 +32,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost User'; $wb['relayhost_password_txt'] = 'Relayhost Password'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit'; $wb['message_size_limit_txt'] = 'Message Size Limit'; $wb['ip_address_txt'] = 'IP Address'; diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng index e6f6e03..9611c48 100644 --- a/interface/web/admin/lib/lang/bg_server_config.lng +++ b/interface/web/admin/lib/lang/bg_server_config.lng @@ -30,6 +30,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost User'; $wb['relayhost_password_txt'] = 'Relayhost Password'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit'; $wb['message_size_limit_txt'] = 'Message Size Limit'; $wb['ip_address_txt'] = 'IP адрес'; diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng index 14e59fa..04e8034 100644 --- a/interface/web/admin/lib/lang/br_server_config.lng +++ b/interface/web/admin/lib/lang/br_server_config.lng @@ -31,6 +31,7 @@ $wb['relayhost_txt'] = 'Host Relay'; $wb['relayhost_user_txt'] = 'Usuário do Host Relay'; $wb['relayhost_password_txt'] = 'Senha do Host Relay'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Tamanho máximo da Caixa Postal'; $wb['message_size_limit_txt'] = 'Tamanho máximo de mensagem'; $wb['ip_address_txt'] = 'Endereço IP'; diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng index a1edf0d..80eeab8 100644 --- a/interface/web/admin/lib/lang/cz_server_config.lng +++ b/interface/web/admin/lib/lang/cz_server_config.lng @@ -32,6 +32,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost uživatel'; $wb['relayhost_password_txt'] = 'Relayhost heslo'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Limit velikosti mailboxu'; $wb['message_size_limit_txt'] = 'Limit velikosti zprávy'; $wb['ip_address_txt'] = 'IP adresa'; diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index 1447411..f291f7c 100644 --- a/interface/web/admin/lib/lang/de_server_config.lng +++ b/interface/web/admin/lib/lang/de_server_config.lng @@ -32,6 +32,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost Benutzer'; $wb['relayhost_password_txt'] = 'Relayhost Passwort'; +$wb['reject_sender_login_mismatch_txt'] = 'Zurückweisen von Mails, wenn Sender nicht gleich Login'; $wb['mailbox_size_limit_txt'] = 'E-Mailkonto Beschränkung'; $wb['message_size_limit_txt'] = 'E-Mailgrößen Beschränkung'; $wb['ip_address_txt'] = 'IP Adresse'; diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng index 560e2b8..6376ccf 100644 --- a/interface/web/admin/lib/lang/el_server_config.lng +++ b/interface/web/admin/lib/lang/el_server_config.lng @@ -32,6 +32,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Χρήστης Relayhost'; $wb['relayhost_password_txt'] = 'Συνθηματικό Relayhost'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Όριο χώρου θυρίδας'; $wb['message_size_limit_txt'] = 'Μήνυμα ορίου χώρου'; $wb['ip_address_txt'] = 'Διεύθυνση IP'; diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index aac7390..f11a447 100644 --- a/interface/web/admin/lib/lang/en_server_config.lng +++ b/interface/web/admin/lib/lang/en_server_config.lng @@ -43,6 +43,7 @@ $wb["relayhost_txt"] = 'Relayhost'; $wb["relayhost_user_txt"] = 'Relayhost User'; $wb["relayhost_password_txt"] = 'Relayhost Password'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb["mailbox_size_limit_txt"] = 'Mailbox Size Limit'; $wb["message_size_limit_txt"] = 'Message Size Limit'; $wb["ip_address_txt"] = 'IP Address'; diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng index 83010f9..2d834c8 100644 --- a/interface/web/admin/lib/lang/es_server_config.lng +++ b/interface/web/admin/lib/lang/es_server_config.lng @@ -30,6 +30,7 @@ $wb['relayhost_txt'] = 'Servidor de retransmisión'; $wb['relayhost_user_txt'] = 'Usuario de retransmisión'; $wb['relayhost_password_txt'] = 'Contraseña de retramisión'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Límite de tamaño del buzón'; $wb['message_size_limit_txt'] = 'Límite de tamaño del mensaje'; $wb['ip_address_txt'] = 'Dirección IP'; diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng index 4b77dd7..0316c47 100755 --- a/interface/web/admin/lib/lang/fi_server_config.lng +++ b/interface/web/admin/lib/lang/fi_server_config.lng @@ -30,6 +30,7 @@ $wb['relayhost_txt'] = 'Edelleenlähetyspalvelin'; $wb['relayhost_user_txt'] = 'Edelleenlähetyspalvelimen käyttäjätunnus'; $wb['relayhost_password_txt'] = 'Edelleenlähetyspalvelimen salasana'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Postilaatikon koko'; $wb['message_size_limit_txt'] = 'Viestien enimmäiskoko'; $wb['ip_address_txt'] = 'IP-osoite'; diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng index a7a71a5..247dc7f 100644 --- a/interface/web/admin/lib/lang/fr_server_config.lng +++ b/interface/web/admin/lib/lang/fr_server_config.lng @@ -25,6 +25,7 @@ $wb['relayhost_txt'] = 'Hôde relais'; $wb['relayhost_user_txt'] = 'Utilisateur du relais'; $wb['relayhost_password_txt'] = 'Mot de passe du relais'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Taille maximale de la boite mail'; $wb['message_size_limit_txt'] = 'Taille maximale des messages'; $wb['ip_address_txt'] = 'Adresse IP'; diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng index 2ebcae6..38b5b08 100644 --- a/interface/web/admin/lib/lang/hr_server_config.lng +++ b/interface/web/admin/lib/lang/hr_server_config.lng @@ -31,6 +31,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost korisnik'; $wb['relayhost_password_txt'] = 'Relayhost šifra'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Dozvoljena veličina mailboxa'; $wb['message_size_limit_txt'] = 'Dozvoljena veličina emaila'; $wb['ip_address_txt'] = 'IP adresa'; diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng index ecbef13..f59e19d 100644 --- a/interface/web/admin/lib/lang/hu_server_config.lng +++ b/interface/web/admin/lib/lang/hu_server_config.lng @@ -30,6 +30,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost User'; $wb['relayhost_password_txt'] = 'Relayhost Password'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit'; $wb['message_size_limit_txt'] = 'Message Size Limit'; $wb['ip_address_txt'] = 'IP Address'; diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng index f9a26e2..d2b7ce9 100644 --- a/interface/web/admin/lib/lang/id_server_config.lng +++ b/interface/web/admin/lib/lang/id_server_config.lng @@ -32,6 +32,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Pengguna Relayhost'; $wb['relayhost_password_txt'] = 'Kata Sandi Relayhost'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Batasan Ukuran Mailbox'; $wb['message_size_limit_txt'] = 'Batasan Ukuran Pesan'; $wb['ip_address_txt'] = 'Alamat IP'; diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng index 52913e3..f2327c2 100644 --- a/interface/web/admin/lib/lang/it_server_config.lng +++ b/interface/web/admin/lib/lang/it_server_config.lng @@ -29,6 +29,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost User'; $wb['relayhost_password_txt'] = 'Relayhost Password'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit'; $wb['message_size_limit_txt'] = 'Message Size Limit'; $wb['ip_address_txt'] = 'Indirizzo IP'; diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng index 0823ff0..375dbaf 100644 --- a/interface/web/admin/lib/lang/ja_server_config.lng +++ b/interface/web/admin/lib/lang/ja_server_config.lng @@ -32,6 +32,7 @@ $wb['relayhost_txt'] = 'リレーホスト'; $wb['relayhost_user_txt'] = 'リレーホストユーザー'; $wb['relayhost_password_txt'] = 'リレーホストパスワード'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'メールボックスのサイズ'; $wb['message_size_limit_txt'] = 'メッセージの最大サイズ'; $wb['ip_address_txt'] = 'IPアドレス'; diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng index 5027cc3..ea33db0 100644 --- a/interface/web/admin/lib/lang/nl_server_config.lng +++ b/interface/web/admin/lib/lang/nl_server_config.lng @@ -32,6 +32,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost gebruiker'; $wb['relayhost_password_txt'] = 'Relayhost wachtwoord'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Mailbox grootte limiet'; $wb['message_size_limit_txt'] = 'Message grootte limiet'; $wb['ip_address_txt'] = 'IP adres'; diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng index 64f41d2..7e51ab2 100644 --- a/interface/web/admin/lib/lang/pl_server_config.lng +++ b/interface/web/admin/lib/lang/pl_server_config.lng @@ -32,6 +32,7 @@ $wb['relayhost_txt'] = 'Adres Relayhost'; $wb['relayhost_user_txt'] = 'Użytkownik Relayhost'; $wb['relayhost_password_txt'] = 'Hasło Relayhost'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Maksymalna wielkość skrzynki pocztowej'; $wb['message_size_limit_txt'] = 'Maksymalna wielkość wiadomości'; $wb['ip_address_txt'] = 'Adres IP'; diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng index 5315bf9..3696aa6 100644 --- a/interface/web/admin/lib/lang/pt_server_config.lng +++ b/interface/web/admin/lib/lang/pt_server_config.lng @@ -31,6 +31,7 @@ $wb['relayhost_txt'] = 'Host Relay'; $wb['relayhost_user_txt'] = 'Utilizador do Host Relay'; $wb['relayhost_password_txt'] = 'Senha do Host Relay'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Tamanho máximo da Caixa Postal'; $wb['message_size_limit_txt'] = 'Tamanho máximo de mensagem'; $wb['ip_address_txt'] = 'Endereço IP'; diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng index 9f06bc6..1f09071 100644 --- a/interface/web/admin/lib/lang/ro_server_config.lng +++ b/interface/web/admin/lib/lang/ro_server_config.lng @@ -31,6 +31,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost User'; $wb['relayhost_password_txt'] = 'Relayhost Password'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit'; $wb['message_size_limit_txt'] = 'Message Size Limit'; $wb['ip_address_txt'] = 'IP Address'; diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng index 77fc101..8358162 100644 --- a/interface/web/admin/lib/lang/ru_server_config.lng +++ b/interface/web/admin/lib/lang/ru_server_config.lng @@ -29,6 +29,7 @@ $wb['relayhost_txt'] = 'Relay-хост'; $wb['relayhost_user_txt'] = 'Логин Relay-хоста'; $wb['relayhost_password_txt'] = 'Пароль Relay-хоста'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Лимит размера Mailbox'; $wb['message_size_limit_txt'] = 'Лимит размера сообщения'; $wb['ip_address_txt'] = 'IP-адрес'; diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng index b5d5ea1..34d1912 100644 --- a/interface/web/admin/lib/lang/se_server_config.lng +++ b/interface/web/admin/lib/lang/se_server_config.lng @@ -30,6 +30,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost User'; $wb['relayhost_password_txt'] = 'Relayhost Password'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Mailbox Size Limit'; $wb['message_size_limit_txt'] = 'Message Size Limit'; $wb['ip_address_txt'] = 'IP Address'; diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng index d480430..c0bebe4 100644 --- a/interface/web/admin/lib/lang/sk_server_config.lng +++ b/interface/web/admin/lib/lang/sk_server_config.lng @@ -32,6 +32,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost uživateľ'; $wb['relayhost_password_txt'] = 'Relayhost heslo'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Limit ve?kosti poštovej schránky'; $wb['message_size_limit_txt'] = 'Limit ve?kosti správy'; $wb['ip_address_txt'] = 'IP Adresa'; diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng index 8b08efe..4a50f56 100644 --- a/interface/web/admin/lib/lang/tr_server_config.lng +++ b/interface/web/admin/lib/lang/tr_server_config.lng @@ -32,6 +32,7 @@ $wb['relayhost_txt'] = 'Relayhost'; $wb['relayhost_user_txt'] = 'Relayhost Kullanıcı'; $wb['relayhost_password_txt'] = 'Relayhost Şifre'; +$wb['reject_sender_login_mismatch_txt'] = 'Reject sender and login mismatch'; $wb['mailbox_size_limit_txt'] = 'Mail kutusu boyutu'; $wb['message_size_limit_txt'] = 'Mesaj boyutu'; $wb['ip_address_txt'] = 'IP Adresleri'; diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm index ad3561b..e076069 100644 --- a/interface/web/admin/templates/server_config_mail_edit.htm +++ b/interface/web/admin/templates/server_config_mail_edit.htm @@ -65,6 +65,12 @@ <div class="form-group"> <label for="relayhost_password" class="col-sm-3 control-label">{tmpl_var name='relayhost_password_txt'}</label> <div class="col-sm-9"><input type="password" name="relayhost_password" id="relayhost_password" value="{tmpl_var name='relayhost_password'}" autocomplete="off" class="form-control" autocomplete="off" /></div></div> + <div class="form-group"> + <label class="col-sm-3 control-label">{tmpl_var name='reject_sender_login_mismatch_txt'}</label> + <div class="col-sm-9"> + {tmpl_var name='reject_sender_login_mismatch'} + </div> + </div> <div class="form-group"> <label for="mailbox_size_limit" class="col-sm-3 control-label">{tmpl_var name='mailbox_size_limit_txt'}</label> <div class="col-sm-6"><input type="text" name="mailbox_size_limit" id="mailbox_size_limit" value="{tmpl_var name='mailbox_size_limit'}" class="form-control" /></div><div class="col-sm-3 input-sm"> MB diff --git a/server/plugins-available/postfix_server_plugin.inc.php b/server/plugins-available/postfix_server_plugin.inc.php index 474d10d..94a5762 100644 --- a/server/plugins-available/postfix_server_plugin.inc.php +++ b/server/plugins-available/postfix_server_plugin.inc.php @@ -115,6 +115,7 @@ $rbl_hosts = explode(",", $rbl_hosts); } $options = explode(", ", exec("postconf -h smtpd_recipient_restrictions")); + $new_options = array(); foreach ($options as $key => $value) { if (!preg_match('/reject_rbl_client/', $value)) { $new_options[] = $value; @@ -138,6 +139,24 @@ exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'"); } + if($mail_config['reject_sender_login_mismatch'] != $old_ini_data['mail']['reject_sender_login_mismatch']) { + $options = explode(", ", exec("postconf -h smtpd_sender_restrictions")); + $new_options = array(); + foreach ($options as $key => $value) { + if (!preg_match('/reject_authenticated_sender_login_mismatch/', $value)) { + $new_options[] = $value; + } + } + + if ($mail_config['reject_sender_login_mismatch'] == 'y') { + reset($new_options); $i = 0; + // insert after check_sender_access but before permit_... + while (isset($new_options[$i]) && substr($new_options[$i], 0, 19) == 'check_sender_access') ++$i; + array_splice($new_options, $i, 0, array('reject_authenticated_sender_login_mismatch')); + } + exec("postconf -e 'smtpd_sender_restrictions = ".implode(", ", $new_options)."'"); + } + if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') { // If dovecot switch to lmtp if($app->system->is_installed('dovecot')) { -- Gitblit v1.9.1