Skip to content

Commit 524b4d4

Browse files
committed
Merge branch 'stable-3.1' of https://git.ispconfig.org/ispconfig/ispconfig3 into stable-3.1
2 parents d9ec144 + 40bf1a8 commit 524b4d4

File tree

174 files changed

+894
-287
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

174 files changed

+894
-287
lines changed

install/dist/lib/fedora.lib.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,16 @@ function configure_postfix($options = '')
153153
}
154154

155155
$reject_sender_login_mismatch = '';
156+
$reject_authenticated_sender_login_mismatch = '';
156157
if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
157-
$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
158+
$reject_sender_login_mismatch = ', reject_sender_login_mismatch';
159+
$reject_authenticated_sender_login_mismatch = 'reject_authenticated_sender_login_mismatch, ';
158160
}
161+
162+
# placeholder includes comment char
163+
$stress_adaptive_placeholder = '#{stress_adaptive} ';
164+
$stress_adaptive = (isset($server_ini_array['mail']['stress_adaptive']) && ($server_ini_array['mail']['stress_adaptive'] == 'y')) ? '' : $stress_adaptive_placeholder;
165+
159166
unset($server_ini_array);
160167

161168
$postconf_placeholders = array('{config_dir}' => $config_dir,
@@ -165,6 +172,8 @@ function configure_postfix($options = '')
165172
'{rbl_list}' => $rbl_list,
166173
'{greylisting}' => $greylisting,
167174
'{reject_slm}' => $reject_sender_login_mismatch,
175+
'{reject_aslm}' => $reject_authenticated_sender_login_mismatch,
176+
$stress_adaptive_placeholder => $stress_adaptive,
168177
);
169178

170179
$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_postfix.conf.master', 'tpl/fedora_postfix.conf.master');

install/dist/lib/gentoo.lib.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,16 @@ public function configure_postfix($options = '')
102102
}
103103

104104
$reject_sender_login_mismatch = '';
105+
$reject_authenticated_sender_login_mismatch = '';
105106
if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
106-
$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
107+
$reject_sender_login_mismatch = ', reject_sender_login_mismatch';
108+
$reject_authenticated_sender_login_mismatch = 'reject_authenticated_sender_login_mismatch, ';
107109
}
110+
111+
# placeholder includes comment char
112+
$stress_adaptive_placeholder = '#{stress_adaptive} ';
113+
$stress_adaptive = (isset($server_ini_array['mail']['stress_adaptive']) && ($server_ini_array['mail']['stress_adaptive'] == 'y')) ? '' : $stress_adaptive_placeholder;
114+
108115
unset($server_ini_array);
109116

110117
$postconf_placeholders = array('{config_dir}' => $config_dir,
@@ -114,6 +121,8 @@ public function configure_postfix($options = '')
114121
'{rbl_list}' => $rbl_list,
115122
'{greylisting}' => $greylisting,
116123
'{reject_slm}' => $reject_sender_login_mismatch,
124+
'{reject_aslm}' => $reject_authenticated_sender_login_mismatch,
125+
$stress_adaptive_placeholder => $stress_adaptive,
117126
);
118127

119128
$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/gentoo_postfix.conf.master', 'tpl/gentoo_postfix.conf.master');

install/dist/lib/opensuse.lib.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,16 @@ function configure_postfix($options = '')
164164
}
165165

166166
$reject_sender_login_mismatch = '';
167+
$reject_authenticated_sender_login_mismatch = '';
167168
if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
168-
$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
169+
$reject_sender_login_mismatch = ', reject_sender_login_mismatch';
170+
$reject_authenticated_sender_login_mismatch = 'reject_authenticated_sender_login_mismatch, ';
169171
}
172+
173+
# placeholder includes comment char
174+
$stress_adaptive_placeholder = '#{stress_adaptive} ';
175+
$stress_adaptive = (isset($server_ini_array['mail']['stress_adaptive']) && ($server_ini_array['mail']['stress_adaptive'] == 'y')) ? '' : $stress_adaptive_placeholder;
176+
170177
unset($server_ini_array);
171178

172179
$postconf_placeholders = array('{config_dir}' => $config_dir,
@@ -176,6 +183,8 @@ function configure_postfix($options = '')
176183
'{rbl_list}' => $rbl_list,
177184
'{greylisting}' => $greylisting,
178185
'{reject_slm}' => $reject_sender_login_mismatch,
186+
'{reject_aslm}' => $reject_authenticated_sender_login_mismatch,
187+
$stress_adaptive_placeholder => $stress_adaptive,
179188
);
180189

181190
$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/opensuse_postfix.conf.master', 'tpl/opensuse_postfix.conf.master');

install/lib/installer_base.lib.php

Lines changed: 84 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -967,6 +967,11 @@ public function configure_postfix($options = '') {
967967
$this->error("The postfix configuration directory '$config_dir' does not exist.");
968968
}
969969

970+
//* Get postfix version
971+
exec('postconf -d mail_version 2>&1', $out);
972+
$postfix_version = preg_replace('/.*=\s*/', '', $out[0]);
973+
unset($out);
974+
970975
//* mysql-virtual_domains.cf
971976
$this->process_postfix_config('mysql-virtual_domains.cf');
972977

@@ -1072,12 +1077,28 @@ public function configure_postfix($options = '') {
10721077
}
10731078

10741079
$reject_sender_login_mismatch = '';
1075-
if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
1076-
$reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
1080+
$reject_authenticated_sender_login_mismatch = '';
1081+
if (isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
1082+
$reject_sender_login_mismatch = ',reject_sender_login_mismatch,';
1083+
$reject_authenticated_sender_login_mismatch = 'reject_authenticated_sender_login_mismatch, ';
10771084
}
1078-
unset($server_ini_array);
10791085

1080-
$tmp = str_replace('.','\.',$conf['hostname']);
1086+
# placeholder includes comment char
1087+
$stress_adaptive_placeholder = '#{stress_adaptive}';
1088+
$stress_adaptive = (isset($server_ini_array['mail']['stress_adaptive']) && ($server_ini_array['mail']['stress_adaptive'] == 'y')) ? '' : $stress_adaptive_placeholder;
1089+
1090+
$reject_unknown_client_hostname='';
1091+
if (isset($server_ini_array['mail']['reject_unknown']) && ($server_ini_array['mail']['reject_unknown'] == 'client' || $server_ini_array['mail']['reject_unknown'] == 'client_helo')) {
1092+
$reject_unknown_client_hostname=',reject_unknown_client_hostname';
1093+
}
1094+
$reject_unknown_helo_hostname='';
1095+
if ((!isset($server_ini_array['mail']['reject_unknown'])) || $server_ini_array['mail']['reject_unknown'] == 'helo' || $server_ini_array['mail']['reject_unknown'] == 'client_helo') {
1096+
$reject_unknown_helo_hostname=',reject_unknown_helo_hostname';
1097+
}
1098+
1099+
unset($server_ini_array);
1100+
1101+
$myhostname = str_replace('.','\.',$conf['hostname']);
10811102

10821103
$postconf_placeholders = array('{config_dir}' => $config_dir,
10831104
'{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
@@ -1086,13 +1107,43 @@ public function configure_postfix($options = '') {
10861107
'{rbl_list}' => $rbl_list,
10871108
'{greylisting}' => $greylisting,
10881109
'{reject_slm}' => $reject_sender_login_mismatch,
1089-
'{myhostname}' => $tmp,
1110+
'{reject_aslm}' => $reject_authenticated_sender_login_mismatch,
1111+
'{myhostname}' => $myhostname,
1112+
$stress_adaptive_placeholder => $stress_adaptive,
1113+
'{reject_unknown_client_hostname}' => $reject_unknown_client_hostname,
1114+
'{reject_unknown_helo_hostname}' => $reject_unknown_helo_hostname,
10901115
);
10911116

10921117
$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_postfix.conf.master', 'tpl/debian_postfix.conf.master');
10931118
$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
10941119
$postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines
10951120

1121+
//* Merge version-specific postfix config
1122+
if(version_compare($postfix_version , '2.5', '>=')) {
1123+
$configfile = 'postfix_2-5.conf';
1124+
$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
1125+
$content = strtr($content, $postconf_placeholders);
1126+
$postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
1127+
}
1128+
if(version_compare($postfix_version , '2.10', '>=')) {
1129+
$configfile = 'postfix_2-10.conf';
1130+
$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
1131+
$content = strtr($content, $postconf_placeholders);
1132+
$postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
1133+
}
1134+
if(version_compare($postfix_version , '3.0', '>=')) {
1135+
$configfile = 'postfix_3-0.conf';
1136+
$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
1137+
$content = strtr($content, $postconf_placeholders);
1138+
$postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
1139+
}
1140+
if(version_compare($postfix_version , '3.3', '>=')) {
1141+
$configfile = 'postfix_3-3.conf';
1142+
$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
1143+
$content = strtr($content, $postconf_placeholders);
1144+
$postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
1145+
}
1146+
10961147
//* These postconf commands will be executed on installation only
10971148
if($this->is_update == false) {
10981149
$postconf_commands = array_merge($postconf_commands, array(
@@ -1399,7 +1450,7 @@ public function configure_dovecot() {
13991450
if ($configure_lmtp) {
14001451
for ($i = 0; isset($new_options[$i]); $i++) {
14011452
if ($new_options[$i] == 'reject_unlisted_recipient') {
1402-
array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${config_dir}/mysql-verify_recipients.cf"));
1453+
array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf"));
14031454
break;
14041455
}
14051456
}
@@ -1408,7 +1459,6 @@ public function configure_dovecot() {
14081459
$postconf_commands[] = "enable_original_recipient = yes";
14091460
}
14101461
}
1411-
#exec("postconf -e 'smtpd_recipient_restrictions = ".implode(", ", $new_options)."'");
14121462
$postconf_commands[] = "smtpd_recipient_restrictions = ".implode(", ", $new_options);
14131463

14141464
// Executing the postconf commands
@@ -1630,7 +1680,7 @@ public function configure_amavis() {
16301680

16311681
public function configure_rspamd() {
16321682
global $conf;
1633-
1683+
16341684
//* These postconf commands will be executed on installation and update
16351685
$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
16361686
$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
@@ -1647,8 +1697,33 @@ public function configure_rspamd() {
16471697
exec("postconf -e 'milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}'");
16481698
exec("postconf -e 'milter_default_action = accept'");
16491699

1650-
exec("postconf -e 'smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, permit_mynetworks, permit_sasl_authenticated'");
1700+
if(! isset($mail_config['reject_sender_login_mismatch'])) {
1701+
$mail_config['reject_sender_login_mismatch'] = 'n';
1702+
}
1703+
$options = preg_split("/,\s*/", exec("postconf -h smtpd_sender_restrictions"));
1704+
$new_options = array();
1705+
foreach ($options as $key => $value) {
1706+
$value = trim($value);
1707+
if ($value == '') continue;
1708+
if (preg_match('/tag_as_(originating|foreign)\.re/', $value)) {
1709+
continue;
1710+
}
1711+
if (preg_match('/reject_(authenticated_)?sender_login_mismatch/', $value)) {
1712+
continue;
1713+
}
1714+
$new_options[] = $value;
1715+
}
1716+
if ($mail_config['reject_sender_login_mismatch'] == 'y') {
1717+
array_splice($new_options, 0, 0, array('reject_authenticated_sender_login_mismatch'));
16511718

1719+
for ($i = 0; isset($new_options[$i]); $i++) {
1720+
if ($new_options[$i] == 'permit_mynetworks') {
1721+
array_splice($new_options, $i+1, 0, array('reject_sender_login_mismatch'));
1722+
break;
1723+
}
1724+
}
1725+
}
1726+
exec("postconf -e 'smtpd_sender_restrictions = ".implode(", ", $new_options)."'");
16521727

16531728
$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
16541729
$new_options = array();

install/sql/ispconfig3.sql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2070,7 +2070,6 @@ CREATE TABLE `web_domain` (
20702070
`backup_excludes` mediumtext,
20712071
`active` enum('n','y') NOT NULL default 'y',
20722072
`traffic_quota_lock` enum('n','y') NOT NULL default 'n',
2073-
`fastcgi_php_version` varchar(255) DEFAULT NULL,
20742073
`proxy_directives` mediumtext,
20752074
`last_quota_notification` date NULL default NULL,
20762075
`rewrite_rules` mediumtext,

install/tpl/debian_postfix.conf.master

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{co
55
virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
66
virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
77
virtual_mailbox_base = {vmail_mailbox_base}
8-
virtual_uid_maps = mysql:/etc/postfix/mysql-virtual_uids.cf
9-
virtual_gid_maps = mysql:/etc/postfix/mysql-virtual_gids.cf
8+
virtual_uid_maps = proxy:mysql:/etc/postfix/mysql-virtual_uids.cf
9+
virtual_gid_maps = proxy:mysql:/etc/postfix/mysql-virtual_gids.cf
1010
sender_bcc_maps = proxy:mysql:{config_dir}/mysql-virtual_outgoing_bcc.cf
1111
inet_protocols=all
1212
inet_interfaces = all
@@ -15,20 +15,22 @@ broken_sasl_auth_clients = yes
1515
smtpd_sasl_authenticated_header = yes
1616
smtpd_restriction_classes = greylisting
1717
greylisting = check_policy_service inet:127.0.0.1:10023
18-
smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{rbl_list}{greylisting}, check_policy_service unix:private/quota-status
18+
smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, check_recipient_access proxy:mysql:{config_dir}/mysql-verify_recipients.cf, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, check_recipient_access proxy:mysql:{config_dir}/mysql-virtual_recipient.cf{greylisting}, check_policy_service unix:private/quota-status
1919
smtpd_use_tls = yes
2020
smtpd_tls_security_level = may
2121
smtpd_tls_cert_file = {config_dir}/smtpd.cert
2222
smtpd_tls_key_file = {config_dir}/smtpd.key
2323
transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:{config_dir}/mysql-virtual_transports.cf
24-
relay_domains = mysql:{config_dir}/mysql-virtual_relaydomains.cf
25-
relay_recipient_maps = mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
24+
relay_domains = proxy:mysql:{config_dir}/mysql-virtual_relaydomains.cf
25+
relay_recipient_maps = proxy:mysql:{config_dir}/mysql-virtual_relayrecipientmaps.cf
2626
smtpd_sender_login_maps = proxy:mysql:{config_dir}/mysql-virtual_sender_login_maps.cf
27-
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_recipient_restrictions
27+
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 $virtual_uid_maps $virtual_gid_maps $smtpd_client_restrictions $smtpd_sender_restrictions $smtpd_recipient_restrictions
2828
smtpd_helo_required = yes
29-
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_unknown_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
30-
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
31-
smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
29+
smtpd_helo_restrictions = reject_invalid_helo_hostname, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, check_helo_access regexp:{config_dir}/blacklist_helo, {reject_unknown_helo_hostname}, permit
30+
smtpd_sender_restrictions = {reject_aslm} check_sender_access regexp:{config_dir}/tag_as_originating.re, permit_mynetworks{reject_slm}, permit_sasl_authenticated, reject_non_fqdn_sender, check_sender_access regexp:{config_dir}/tag_as_foreign.re, check_sender_access proxy:mysql:{config_dir}/mysql-virtual_sender.cf
31+
smtpd_client_restrictions = check_client_access proxy:mysql:{config_dir}/mysql-virtual_client.cf, permit_inet_interfaces, permit_mynetworks{rbl_list}, permit_sasl_authenticated, reject_unauth_pipelining {reject_unknown_client_hostname}, permit
32+
smtpd_etrn_restrictions = permit_mynetworks, reject
33+
smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit
3234
smtpd_client_message_rate_limit = 100
3335
maildrop_destination_concurrency_limit = 1
3436
maildrop_destination_recipient_limit = 1

0 commit comments

Comments
 (0)